summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 17:13:01 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 17:13:01 +0000
commit7adcb5b605cc1328a3084c334f4697ec9771936c (patch)
tree03e681bfda053978ba896745828e09cb056ad156
parentInitial commit. (diff)
downloadtcpdump-7adcb5b605cc1328a3084c334f4697ec9771936c.tar.xz
tcpdump-7adcb5b605cc1328a3084c334f4697ec9771936c.zip
Adding upstream version 4.99.4.upstream/4.99.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--CHANGES1736
-rw-r--r--CMakeLists.txt1371
-rw-r--r--CONTRIBUTING.md191
-rw-r--r--CREDITS359
-rw-r--r--INSTALL.md126
-rw-r--r--LICENSE19
-rw-r--r--Makefile-devel-adds22
-rw-r--r--Makefile.in539
-rw-r--r--README.md225
-rw-r--r--VERSION1
-rw-r--r--aclocal.m41244
-rw-r--r--addrtoname.c1330
-rw-r--r--addrtoname.h126
-rw-r--r--addrtostr.c213
-rw-r--r--addrtostr.h42
-rw-r--r--af.c58
-rw-r--r--af.h55
-rw-r--r--ah.h67
-rw-r--r--appletalk.h166
-rw-r--r--ascii_strcasecmp.c105
-rw-r--r--ascii_strcasecmp.h33
-rw-r--r--atime.awk18
-rw-r--r--atm.h31
-rw-r--r--bpf_dump.c62
-rw-r--r--chdlc.h26
-rw-r--r--checksum.c189
-rw-r--r--cmake/Modules/FindCRYPTO.cmake24
-rw-r--r--cmake/Modules/FindPCAP.cmake462
-rw-r--r--cmake/Modules/FindSMI.cmake24
-rw-r--r--cmake_uninstall.cmake.in21
-rw-r--r--cmakeconfig.h.in290
-rw-r--r--compiler-tests.h196
-rwxr-xr-xconfig.guess1774
-rw-r--r--config.h.in290
-rwxr-xr-xconfig.sub1907
-rwxr-xr-xconfigure9681
-rw-r--r--configure.ac1027
-rw-r--r--cpack.c220
-rw-r--r--cpack.h57
-rw-r--r--diag-control.h186
-rw-r--r--doc/README.NetBSD.md22
-rw-r--r--doc/README.Win32.md200
-rw-r--r--doc/README.aix.md17
-rw-r--r--doc/README.solaris.md41
-rw-r--r--ethertype.h219
-rw-r--r--extract.h910
-rw-r--r--fptype.c50
-rw-r--r--fptype.h34
-rw-r--r--ftmacros.h127
-rw-r--r--funcattrs.h160
-rw-r--r--getservent.h67
-rw-r--r--gmpls.c192
-rw-r--r--gmpls.h33
-rw-r--r--in_cksum.c200
-rwxr-xr-xinstall-sh250
-rw-r--r--interface.h69
-rw-r--r--ip.h164
-rw-r--r--ip6.h212
-rw-r--r--ipproto.c362
-rw-r--r--ipproto.h145
-rw-r--r--l2vpn.c95
-rw-r--r--l2vpn.h17
-rw-r--r--lbl/os-osf4.h24
-rw-r--r--lbl/os-solaris2.h27
-rw-r--r--lbl/os-sunos4.h211
-rw-r--r--lbl/os-ultrix4.h36
-rw-r--r--llc.h122
-rw-r--r--machdep.c58
-rw-r--r--machdep.h25
-rwxr-xr-xmakemib247
-rw-r--r--mib.h1460
-rw-r--r--missing/datalinks.c62
-rw-r--r--missing/dlnames.c168
-rw-r--r--missing/getopt_long.c636
-rw-r--r--missing/getopt_long.h66
-rw-r--r--missing/getservent.c143
-rw-r--r--missing/pcap_dump_ftell.c46
-rw-r--r--missing/snprintf.c510
-rw-r--r--missing/strdup.c52
-rw-r--r--missing/strlcat.c73
-rw-r--r--missing/strlcpy.c70
-rw-r--r--missing/strsep.c80
-rwxr-xr-xmkdep116
-rw-r--r--mpls.h41
-rw-r--r--nameser.h331
-rw-r--r--netdissect-alloc.c64
-rw-r--r--netdissect-alloc.h32
-rw-r--r--netdissect-ctype.h56
-rw-r--r--netdissect-stdinc.h382
-rw-r--r--netdissect.c301
-rw-r--r--netdissect.h794
-rw-r--r--nfs.h417
-rw-r--r--nfsfh.h66
-rw-r--r--nlpid.c41
-rw-r--r--nlpid.h32
-rw-r--r--ntp.c74
-rw-r--r--ntp.h54
-rw-r--r--openflow.h90
-rw-r--r--ospf.h325
-rw-r--r--oui.c131
-rw-r--r--oui.h119
-rw-r--r--packetdat.awk61
-rw-r--r--parsenfsfh.c462
-rw-r--r--pcap-missing.h49
-rw-r--r--pflog.h151
-rw-r--r--ppp.h68
-rw-r--r--print-802_11.c3533
-rw-r--r--print-802_15_4.c2556
-rw-r--r--print-ah.c75
-rw-r--r--print-ahcp.c384
-rw-r--r--print-aodv.c537
-rw-r--r--print-aoe.c413
-rw-r--r--print-ap1394.c123
-rw-r--r--print-arcnet.c366
-rw-r--r--print-arista.c165
-rw-r--r--print-arp.c473
-rw-r--r--print-ascii.c235
-rw-r--r--print-atalk.c701
-rw-r--r--print-atm.c530
-rw-r--r--print-babel.c863
-rw-r--r--print-bcm-li.c130
-rw-r--r--print-beep.c69
-rw-r--r--print-bfd.c426
-rw-r--r--print-bgp.c3162
-rw-r--r--print-bootp.c1074
-rw-r--r--print-brcmtag.c151
-rw-r--r--print-bt.c71
-rw-r--r--print-calm-fast.c71
-rw-r--r--print-carp.c78
-rw-r--r--print-cdp.c472
-rw-r--r--print-cfm.c766
-rw-r--r--print-chdlc.c198
-rw-r--r--print-cip.c87
-rw-r--r--print-cnfp.c486
-rw-r--r--print-dccp.c705
-rw-r--r--print-decnet.c1182
-rw-r--r--print-dhcp6.c853
-rw-r--r--print-domain.c1171
-rw-r--r--print-dsa.c219
-rw-r--r--print-dtp.c122
-rw-r--r--print-dvmrp.c332
-rw-r--r--print-eap.c341
-rw-r--r--print-egp.c392
-rw-r--r--print-eigrp.c532
-rw-r--r--print-enc.c158
-rw-r--r--print-esp.c928
-rw-r--r--print-ether.c665
-rw-r--r--print-fddi.c350
-rw-r--r--print-forces.c1715
-rw-r--r--print-fr.c1157
-rw-r--r--print-frag6.c66
-rw-r--r--print-ftp.c29
-rw-r--r--print-geneve.c244
-rw-r--r--print-geonet.c267
-rw-r--r--print-gre.c414
-rw-r--r--print-hncp.c866
-rw-r--r--print-hsrp.c133
-rw-r--r--print-http.c74
-rw-r--r--print-icmp.c797
-rw-r--r--print-icmp6.c2082
-rw-r--r--print-igmp.c301
-rw-r--r--print-igrp.c149
-rw-r--r--print-ip-demux.c231
-rw-r--r--print-ip.c538
-rw-r--r--print-ip6.c502
-rw-r--r--print-ip6opts.c265
-rw-r--r--print-ipcomp.c64
-rw-r--r--print-ipfc.c143
-rw-r--r--print-ipnet.c110
-rw-r--r--print-ipoib.c125
-rw-r--r--print-ipx.c267
-rw-r--r--print-isakmp.c3141
-rw-r--r--print-isoclns.c3561
-rw-r--r--print-juniper.c1626
-rw-r--r--print-krb.c259
-rw-r--r--print-l2tp.c859
-rw-r--r--print-lane.c110
-rw-r--r--print-ldp.c700
-rw-r--r--print-lisp.c453
-rw-r--r--print-llc.c610
-rw-r--r--print-lldp.c1682
-rw-r--r--print-lmp.c1137
-rw-r--r--print-loopback.c135
-rw-r--r--print-lspping.c1077
-rw-r--r--print-lwapp.c367
-rw-r--r--print-lwres.c555
-rw-r--r--print-m3ua.c337
-rw-r--r--print-macsec.c256
-rw-r--r--print-mobile.c104
-rw-r--r--print-mobility.c334
-rw-r--r--print-mpcp.c235
-rw-r--r--print-mpls.c174
-rw-r--r--print-mptcp.c485
-rw-r--r--print-msdp.c97
-rw-r--r--print-msnlb.c62
-rw-r--r--print-nflog.c231
-rw-r--r--print-nfs.c1850
-rw-r--r--print-nsh.c264
-rw-r--r--print-ntp.c536
-rw-r--r--print-null.c138
-rw-r--r--print-olsr.c714
-rw-r--r--print-openflow-1.0.c2298
-rw-r--r--print-openflow-1.3.c1209
-rw-r--r--print-openflow.c228
-rw-r--r--print-ospf.c1178
-rw-r--r--print-ospf6.c1002
-rw-r--r--print-otv.c76
-rw-r--r--print-pflog.c206
-rw-r--r--print-pgm.c829
-rw-r--r--print-pim.c1234
-rw-r--r--print-pktap.c177
-rw-r--r--print-ppi.c131
-rw-r--r--print-ppp.c1897
-rw-r--r--print-pppoe.c206
-rw-r--r--print-pptp.c871
-rw-r--r--print-ptp.c634
-rw-r--r--print-radius.c1504
-rw-r--r--print-raw.c45
-rw-r--r--print-realtek.c248
-rw-r--r--print-resp.c534
-rw-r--r--print-rip.c422
-rw-r--r--print-ripng.c184
-rw-r--r--print-rpki-rtr.c391
-rw-r--r--print-rsvp.c2069
-rw-r--r--print-rt6.c115
-rw-r--r--print-rtsp.c44
-rw-r--r--print-rx.c2842
-rw-r--r--print-sctp.c775
-rw-r--r--print-sflow.c962
-rw-r--r--print-sip.c54
-rw-r--r--print-sl.c259
-rw-r--r--print-sll.c535
-rw-r--r--print-slow.c737
-rw-r--r--print-smb.c1476
-rw-r--r--print-smtp.c29
-rw-r--r--print-snmp.c1932
-rw-r--r--print-someip.c142
-rw-r--r--print-ssh.c99
-rw-r--r--print-stp.c471
-rw-r--r--print-sunatm.c102
-rw-r--r--print-sunrpc.c241
-rw-r--r--print-symantec.c110
-rw-r--r--print-syslog.c150
-rw-r--r--print-tcp.c972
-rw-r--r--print-telnet.c540
-rw-r--r--print-tftp.c198
-rw-r--r--print-timed.c153
-rw-r--r--print-tipc.c354
-rw-r--r--print-token.c250
-rw-r--r--print-udld.c207
-rw-r--r--print-udp.c743
-rw-r--r--print-unsupported.c34
-rw-r--r--print-usb.c284
-rw-r--r--print-vjc.c122
-rw-r--r--print-vqp.c214
-rw-r--r--print-vrrp.c190
-rw-r--r--print-vsock.c262
-rw-r--r--print-vtp.c392
-rw-r--r--print-vxlan-gpe.c124
-rw-r--r--print-vxlan.c83
-rw-r--r--print-wb.c445
-rw-r--r--print-whois.c31
-rw-r--r--print-zep.c181
-rw-r--r--print-zephyr.c348
-rw-r--r--print-zeromq.c215
-rw-r--r--print.c573
-rw-r--r--print.h43
-rw-r--r--rpc_auth.h71
-rw-r--r--rpc_msg.h127
-rw-r--r--send-ack.awk68
-rw-r--r--signature.c208
-rw-r--r--signature.h29
-rw-r--r--slcompress.h85
-rw-r--r--smb.h124
-rw-r--r--smbutil.c1968
-rw-r--r--status-exit-codes.h32
-rw-r--r--stime.awk19
-rw-r--r--strtoaddr.c235
-rw-r--r--strtoaddr.h23
-rw-r--r--tcp.h159
-rw-r--r--tcpdump.1.in2090
-rw-r--r--tcpdump.c3252
-rw-r--r--tests/02-sunrise-sunset-esp.pcapbin0 -> 1352 bytes
-rw-r--r--tests/08-sunrise-sunset-aes.pcapbin0 -> 1480 bytes
-rw-r--r--tests/08-sunrise-sunset-esp2.pcapbin0 -> 1800 bytes
-rw-r--r--tests/3560_CDP.pcapbin0 -> 1272 bytes
-rw-r--r--tests/802.1D_spanning_tree.pcapbin0 -> 1088 bytes
-rw-r--r--tests/802.1w_rapid_STP.pcapbin0 -> 2304 bytes
-rw-r--r--tests/802_15_4-data.out1
-rw-r--r--tests/802_15_4-data.pcapbin0 -> 78 bytes
-rw-r--r--tests/802_15_4-oobr-1.out1
-rw-r--r--tests/802_15_4-oobr-1.pcapbin0 -> 79 bytes
-rw-r--r--tests/802_15_4-oobr-2.out1
-rw-r--r--tests/802_15_4-oobr-2.pcapbin0 -> 78 bytes
-rw-r--r--tests/802_15_4_beacon.out1
-rw-r--r--tests/802_15_4_beacon.pcapbin0 -> 79 bytes
-rw-r--r--tests/AoE_Linux.pcapbin0 -> 95288 bytes
-rw-r--r--tests/DECnet_Phone.pcapbin0 -> 7678 bytes
-rw-r--r--tests/DTP.pcapbin0 -> 934 bytes
-rw-r--r--tests/EIGRP_adjacency.pcapbin0 -> 5195 bytes
-rw-r--r--tests/EIGRP_goodbye.pcapbin0 -> 1374 bytes
-rw-r--r--tests/EIGRP_ipv6.pcapbin0 -> 134 bytes
-rw-r--r--tests/EIGRP_subnet_down.pcapbin0 -> 1884 bytes
-rw-r--r--tests/EIGRP_subnet_up.pcapbin0 -> 1356 bytes
-rw-r--r--tests/HDLC.pcapbin0 -> 3532 bytes
-rw-r--r--tests/HSRP_coup.pcapbin0 -> 3984 bytes
-rw-r--r--tests/HSRP_election.pcapbin0 -> 3832 bytes
-rw-r--r--tests/HSRP_failover.pcapbin0 -> 3056 bytes
-rw-r--r--tests/IGMP_V1.pcapbin0 -> 2062 bytes
-rw-r--r--tests/IGMP_V2.pcapbin0 -> 1364 bytes
-rw-r--r--tests/ISAKMP_sa_setup.pcapbin0 -> 2030 bytes
-rw-r--r--tests/ISIS_external_lsp.pcapbin0 -> 17371 bytes
-rw-r--r--tests/ISIS_level1_adjacency.pcapbin0 -> 28022 bytes
-rw-r--r--tests/ISIS_level2_adjacency.pcapbin0 -> 53091 bytes
-rw-r--r--tests/ISIS_p2p_adjacency.pcapbin0 -> 22260 bytes
-rw-r--r--tests/LACP.pcapbin0 -> 2824 bytes
-rw-r--r--tests/LLDP_and_CDP.pcapbin0 -> 4108 bytes
-rw-r--r--tests/MSTP_Intra-Region_BPDUs.pcapbin0 -> 1714 bytes
-rw-r--r--tests/OLSRv1_HNA_sgw_1.out13
-rw-r--r--tests/OLSRv1_HNA_sgw_1.pcapbin0 -> 158 bytes
-rw-r--r--tests/OSPFv3_NBMA_adjacencies.pcapbin0 -> 13188 bytes
-rw-r--r--tests/OSPFv3_broadcast_adjacency.pcapbin0 -> 5536 bytes
-rw-r--r--tests/OSPFv3_multipoint_adjacencies.pcapbin0 -> 11816 bytes
-rw-r--r--tests/OSPFv3_with_AH.pcapbin0 -> 10974 bytes
-rw-r--r--tests/PIM-DM_pruning.pcapbin0 -> 10436 bytes
-rw-r--r--tests/PIM-SM_join_prune.pcapbin0 -> 3940 bytes
-rw-r--r--tests/PIM_register_register-stop.pcapbin0 -> 258 bytes
-rw-r--r--tests/PIMv2_bootstrap.pcapbin0 -> 712 bytes
-rw-r--r--tests/PIMv2_hellos.pcapbin0 -> 528 bytes
-rw-r--r--tests/QinQpacket.out249
-rw-r--r--tests/QinQpacket.pcapbin0 -> 78264 bytes
-rw-r--r--tests/QinQpacketv.out1977
-rw-r--r--tests/RADIUS-RFC3162.pcapbin0 -> 225 bytes
-rw-r--r--tests/RADIUS-RFC4675.pcapbin0 -> 766 bytes
-rw-r--r--tests/RADIUS-RFC5176-2.pcapbin0 -> 139 bytes
-rw-r--r--tests/RADIUS-RFC5176.pcapbin0 -> 600 bytes
-rw-r--r--tests/RADIUS-RFC5447.pcapbin0 -> 140 bytes
-rw-r--r--tests/RADIUS-RFC5580.pcapbin0 -> 267 bytes
-rw-r--r--tests/RADIUS-port1700.pcapbin0 -> 107 bytes
-rw-r--r--tests/RADIUS.pcapbin0 -> 775 bytes
-rw-r--r--tests/TESTLIST857
-rwxr-xr-xtests/TESTrun502
-rw-r--r--tests/UDLD.pcapbin0 -> 3426 bytes
-rw-r--r--tests/aarp-heapoverflow-1.out1
-rw-r--r--tests/aarp-heapoverflow-1.pcapbin0 -> 54 bytes
-rw-r--r--tests/aarp-heapoverflow-2.out1
-rw-r--r--tests/aarp-heapoverflow-2.pcapbin0 -> 56 bytes
-rw-r--r--tests/afs.pcapbin0 -> 521916 bytes
-rw-r--r--tests/ahcp-vv.out76
-rw-r--r--tests/ahcp.pcapngbin0 -> 1784 bytes
-rw-r--r--tests/aoe-oobr-1.out3
-rw-r--r--tests/aoe-oobr-1.pcapbin0 -> 74 bytes
-rw-r--r--tests/aoe_1-v.out888
-rw-r--r--tests/aoe_1.out186
-rw-r--r--tests/arista_ether-e.out16
-rw-r--r--tests/arista_ether-ev.out40
-rw-r--r--tests/arista_ether.out16
-rw-r--r--tests/arista_ether.pcapbin0 -> 2024 bytes
-rw-r--r--tests/arp-oobr.out2512
-rw-r--r--tests/arp-oobr.pcapbin0 -> 172916 bytes
-rw-r--r--tests/arp-too-long-tha.out1
-rw-r--r--tests/arp-too-long-tha.pcapbin0 -> 104 bytes
-rw-r--r--tests/atm-heapoverflow.out1
-rw-r--r--tests/atm-heapoverflow.pcapbin0 -> 44 bytes
-rw-r--r--tests/atm-oam-heapoverflow.out1
-rw-r--r--tests/atm-oam-heapoverflow.pcapbin0 -> 44 bytes
-rw-r--r--tests/babel.pcapbin0 -> 3320 bytes
-rw-r--r--tests/babel1.out25
-rw-r--r--tests/babel1v.out67
-rw-r--r--tests/babel_auth.out13
-rw-r--r--tests/babel_auth.pcapbin0 -> 530 bytes
-rw-r--r--tests/babel_pad1.out2
-rw-r--r--tests/babel_pad1.pcapbin0 -> 257 bytes
-rw-r--r--tests/babel_rfc6126bis.out913
-rw-r--r--tests/babel_rfc6126bis.pcapbin0 -> 22550 bytes
-rw-r--r--tests/babel_rtt.out25
-rw-r--r--tests/babel_rtt.pcapbin0 -> 902 bytes
-rw-r--r--tests/babel_update_oobr.out125
-rw-r--r--tests/babel_update_oobr.pcapbin0 -> 9119 bytes
-rw-r--r--tests/bad-ipv4-version-pgm-heapoverflow.out1
-rw-r--r--tests/bad-ipv4-version-pgm-heapoverflow.pcapbin0 -> 74 bytes
-rw-r--r--tests/bcm-li-v.out352
-rw-r--r--tests/bcm-li.out71
-rw-r--r--tests/bcm-li.pcapbin0 -> 11237 bytes
-rw-r--r--tests/beep-oobr.out2
-rw-r--r--tests/beep-oobr.pcapbin0 -> 184 bytes
-rw-r--r--tests/bfd-lag-v.out40
-rw-r--r--tests/bfd-lag.out5
-rw-r--r--tests/bfd-lag.pcapbin0 -> 434 bytes
-rw-r--r--tests/bfd-multihop-v.out320
-rw-r--r--tests/bfd-multihop.out40
-rw-r--r--tests/bfd-multihop.pcapbin0 -> 3304 bytes
-rw-r--r--tests/bfd-raw-auth-md5-v.out341
-rw-r--r--tests/bfd-raw-auth-md5.out31
-rw-r--r--tests/bfd-raw-auth-md5.pcapbin0 -> 3434 bytes
-rw-r--r--tests/bfd-raw-auth-sha1-v.out275
-rw-r--r--tests/bfd-raw-auth-sha1.out25
-rw-r--r--tests/bfd-raw-auth-sha1.pcapbin0 -> 2874 bytes
-rw-r--r--tests/bfd-raw-auth-simple-v.out150
-rw-r--r--tests/bfd-raw-auth-simple.out15
-rw-r--r--tests/bfd-raw-auth-simple.pcapbin0 -> 1449 bytes
-rw-r--r--tests/bgp-4byte-asdot.out373
-rw-r--r--tests/bgp-4byte-asn.out373
-rw-r--r--tests/bgp-4byte-asn.pcapbin0 -> 8717 bytes
-rw-r--r--tests/bgp-addpath.out30
-rw-r--r--tests/bgp-addpath.pcapbin0 -> 311 bytes
-rw-r--r--tests/bgp-aigp-2.out12
-rw-r--r--tests/bgp-aigp-2.pcapbin0 -> 180 bytes
-rw-r--r--tests/bgp-aigp-oobr-nossl.out9766
-rw-r--r--tests/bgp-aigp-oobr-ssl.out9766
-rw-r--r--tests/bgp-aigp-oobr.pcapbin0 -> 65575 bytes
-rw-r--r--tests/bgp-aigp.out20
-rw-r--r--tests/bgp-aigp.pcapbin0 -> 258 bytes
-rw-r--r--tests/bgp-as-path-oobr-nossl.out7518
-rw-r--r--tests/bgp-as-path-oobr-ssl.out7518
-rw-r--r--tests/bgp-as-path-oobr.pcapbin0 -> 69108 bytes
-rw-r--r--tests/bgp-bgp_capabilities_print-oobr-1.out21
-rw-r--r--tests/bgp-bgp_capabilities_print-oobr-1.pcapbin0 -> 272 bytes
-rw-r--r--tests/bgp-bgp_capabilities_print-oobr-2.out20
-rw-r--r--tests/bgp-bgp_capabilities_print-oobr-2.pcapbin0 -> 272 bytes
-rw-r--r--tests/bgp-encap.out15
-rw-r--r--tests/bgp-encap.pcapbin0 -> 214 bytes
-rw-r--r--tests/bgp-evpn.out23
-rw-r--r--tests/bgp-evpn.pcapbin0 -> 181 bytes
-rw-r--r--tests/bgp-extended-shutdown-msg.out3
-rw-r--r--tests/bgp-extended-shutdown-msg.pcapngbin0 -> 404 bytes
-rw-r--r--tests/bgp-infinite-loop.pcapbin0 -> 554 bytes
-rw-r--r--tests/bgp-large-community.out42
-rw-r--r--tests/bgp-large-community.pcapbin0 -> 481 bytes
-rw-r--r--tests/bgp-link-bw-extcommunity.out63
-rw-r--r--tests/bgp-link-bw-extcommunity.pcapngbin0 -> 624 bytes
-rw-r--r--tests/bgp-llgr.out23
-rw-r--r--tests/bgp-lu-multiple-labels.out189
-rw-r--r--tests/bgp-lu-multiple-labels.pcapbin0 -> 3953 bytes
-rw-r--r--tests/bgp-rt-prefix.out89
-rw-r--r--tests/bgp-rt-prefix.pcapbin0 -> 1659 bytes
-rw-r--r--tests/bgp-shutdown-communication.out6
-rw-r--r--tests/bgp-shutdown-communication.pcapngbin0 -> 460 bytes
-rw-r--r--tests/bgp_infloop-v.out15
-rw-r--r--tests/bgp_mp_reach_nlri-oobr.out20
-rw-r--r--tests/bgp_mp_reach_nlri-oobr.pcapbin0 -> 2714 bytes
-rw-r--r--tests/bgp_mvpn_6_and_7_oobr.out5
-rw-r--r--tests/bgp_mvpn_6_and_7_oobr.pcapbin0 -> 165 bytes
-rw-r--r--tests/bgp_pmsi_tunnel-oobr.out5
-rw-r--r--tests/bgp_pmsi_tunnel-oobr.pcapbin0 -> 144 bytes
-rw-r--r--tests/bgp_vpn_attrset.out19
-rw-r--r--tests/bgp_vpn_attrset.pcapbin0 -> 217 bytes
-rw-r--r--tests/bgp_vpn_rt-oobr.out9
-rw-r--r--tests/bgp_vpn_rt-oobr.pcapbin0 -> 887 bytes
-rw-r--r--tests/bootp_asan-2.out2
-rw-r--r--tests/bootp_asan-2.pcapbin0 -> 93 bytes
-rw-r--r--tests/bootp_asan.out2
-rw-r--r--tests/bootp_asan.pcapbin0 -> 130 bytes
-rw-r--r--tests/brcm-tag-e.out23
-rw-r--r--tests/brcm-tag-prepend.out15
-rw-r--r--tests/brcm-tag-prepend.pcapbin0 -> 1650 bytes
-rw-r--r--tests/brcm-tag.out23
-rw-r--r--tests/brcm-tag.pcapbin0 -> 4474 bytes
-rw-r--r--tests/calm-fast-mac-lookup-heapoverflow.out5
-rw-r--r--tests/calm-fast-mac-lookup-heapoverflow.pcapbin0 -> 202 bytes
-rw-r--r--tests/cdp-v.out57
-rw-r--r--tests/cfm_sender_id-oobr.out8
-rw-r--r--tests/cfm_sender_id-oobr.pcapbin0 -> 74 bytes
-rw-r--r--tests/chdlc-slarp-short.pcapbin0 -> 58 bytes
-rw-r--r--tests/chdlc-slarp.pcapbin0 -> 62 bytes
-rw-r--r--tests/crypto.tests116
-rw-r--r--tests/cve-2014-8767-OLSR.out4
-rw-r--r--tests/cve-2014-8767-OLSR.pcapbin0 -> 115 bytes
-rw-r--r--tests/cve-2014-8768-Geonet.out1
-rw-r--r--tests/cve-2014-8768-Geonet.pcapbin0 -> 115 bytes
-rw-r--r--tests/cve-2014-8769-AODV.out2
-rw-r--r--tests/cve-2014-8769-AODV.pcapbin0 -> 115 bytes
-rw-r--r--tests/cve2015-0261-crash.out1
-rw-r--r--tests/cve2015-0261-crash.pcapbin0 -> 201 bytes
-rw-r--r--tests/cve2015-0261-ipv6.out2
-rw-r--r--tests/cve2015-0261-ipv6.pcapbin0 -> 458 bytes
-rw-r--r--tests/dcb_ets.out1923
-rw-r--r--tests/dcb_ets.pcapbin0 -> 13279 bytes
-rw-r--r--tests/dcb_pfc.out148
-rw-r--r--tests/dcb_pfc.pcapbin0 -> 850 bytes
-rw-r--r--tests/dcb_qcn.out363
-rw-r--r--tests/dcb_qcn.pcapbin0 -> 3730 bytes
-rw-r--r--tests/dccp_options-oobr.out19
-rw-r--r--tests/dccp_options-oobr.pcapbin0 -> 992 bytes
-rw-r--r--tests/dccp_partial_csum_v4_longer.out30
-rw-r--r--tests/dccp_partial_csum_v4_longer.pcapbin0 -> 1778 bytes
-rw-r--r--tests/dccp_partial_csum_v4_simple.out14
-rw-r--r--tests/dccp_partial_csum_v4_simple.pcapbin0 -> 642 bytes
-rw-r--r--tests/dccp_partial_csum_v6_longer.out9
-rw-r--r--tests/dccp_partial_csum_v6_longer.pcapbin0 -> 1230 bytes
-rw-r--r--tests/dccp_partial_csum_v6_simple.out7
-rw-r--r--tests/dccp_partial_csum_v6_simple.pcapbin0 -> 782 bytes
-rw-r--r--tests/decnet-oobr.out6
-rw-r--r--tests/decnet-oobr.pcapbin0 -> 124 bytes
-rw-r--r--tests/decnet-shorthdr-oobr.out29
-rw-r--r--tests/decnet-shorthdr-oobr.pcapbin0 -> 534 bytes
-rw-r--r--tests/decnet.out139
-rw-r--r--tests/dhcp-mud.out36
-rw-r--r--tests/dhcp-mud.pcapbin0 -> 844 bytes
-rw-r--r--tests/dhcp-rfc3004-v.out55
-rw-r--r--tests/dhcp-rfc3004.pcapbin0 -> 1420 bytes
-rw-r--r--tests/dhcp-rfc4388.out432
-rw-r--r--tests/dhcp-rfc4388.pcapbin0 -> 14049 bytes
-rw-r--r--tests/dhcp-rfc5859-v.out44
-rw-r--r--tests/dhcp-rfc5859.pcapbin0 -> 1456 bytes
-rw-r--r--tests/dhcp6_reconf_asan.out2
-rw-r--r--tests/dhcp6_reconf_asan.pcapbin0 -> 132 bytes
-rw-r--r--tests/dhcpv6-AFTR-Name-RFC6334.out4
-rw-r--r--tests/dhcpv6-AFTR-Name-RFC6334.pcapbin0 -> 747 bytes
-rw-r--r--tests/dhcpv6-domain-list.out1
-rw-r--r--tests/dhcpv6-domain-list.pcapbin0 -> 195 bytes
-rw-r--r--tests/dhcpv6-ia-na.out4
-rw-r--r--tests/dhcpv6-ia-na.pcapbin0 -> 638 bytes
-rw-r--r--tests/dhcpv6-ia-pd.out4
-rw-r--r--tests/dhcpv6-ia-pd.pcapbin0 -> 641 bytes
-rw-r--r--tests/dhcpv6-ia-ta.out4
-rw-r--r--tests/dhcpv6-ia-ta.pcapbin0 -> 606 bytes
-rw-r--r--tests/dhcpv6-mud.out5
-rw-r--r--tests/dhcpv6-mud.pcapbin0 -> 1634 bytes
-rw-r--r--tests/dhcpv6-ntp-server.out1
-rw-r--r--tests/dhcpv6-ntp-server.pcapbin0 -> 207 bytes
-rw-r--r--tests/dhcpv6-sip-server-d.out1
-rw-r--r--tests/dhcpv6-sip-server-d.pcapbin0 -> 208 bytes
-rw-r--r--tests/dns-badcookie.out4
-rw-r--r--tests/dns-badcookie.pcapbin0 -> 499 bytes
-rw-r--r--tests/dns-badlabel.out2
-rw-r--r--tests/dns-badlabel.pcapbin0 -> 63247 bytes
-rw-r--r--tests/dns-badvers.out4
-rw-r--r--tests/dns-badvers.pcapbin0 -> 467 bytes
-rw-r--r--tests/dns-uri.out4
-rw-r--r--tests/dns-uri.pcapbin0 -> 549 bytes
-rw-r--r--tests/dns-zlip-1.out1
-rw-r--r--tests/dns-zlip-1.pcapbin0 -> 117 bytes
-rw-r--r--tests/dns-zlip-2.out1
-rw-r--r--tests/dns-zlip-2.pcapbin0 -> 117 bytes
-rw-r--r--tests/dns-zlip-3.out1
-rw-r--r--tests/dns-zlip-3.pcapbin0 -> 187 bytes
-rw-r--r--tests/dns_fwdptr.out2
-rw-r--r--tests/dns_fwdptr.pcapbin0 -> 63247 bytes
-rw-r--r--tests/dns_tcp-v.out22
-rw-r--r--tests/dns_tcp-vv.out22
-rw-r--r--tests/dns_tcp-vvv.out22
-rw-r--r--tests/dns_tcp.out11
-rw-r--r--tests/dns_tcp.pcapbin0 -> 1122 bytes
-rw-r--r--tests/dns_tcp_8053-T.out22
-rw-r--r--tests/dns_tcp_8053.out22
-rw-r--r--tests/dns_tcp_8053.pcapbin0 -> 1106 bytes
-rw-r--r--tests/dns_udp-v.out4
-rw-r--r--tests/dns_udp-vv.out4
-rw-r--r--tests/dns_udp-vvv.out4
-rw-r--r--tests/dns_udp.out2
-rw-r--r--tests/dns_udp.pcapbin0 -> 420 bytes
-rw-r--r--tests/dns_udp_8053-T.out4
-rw-r--r--tests/dns_udp_8053.out4
-rw-r--r--tests/dns_udp_8053.pcapbin0 -> 404 bytes
-rw-r--r--tests/dnssec-vv.out12
-rw-r--r--tests/dnssec.pcapbin0 -> 3936 bytes
-rw-r--r--tests/dsa-e.out8
-rw-r--r--tests/dsa-high-vid-e.out4
-rw-r--r--tests/dsa-high-vid.out4
-rw-r--r--tests/dsa-high-vid.pcapbin0 -> 496 bytes
-rw-r--r--tests/dsa.out8
-rw-r--r--tests/dsa.pcapbin0 -> 874 bytes
-rw-r--r--tests/dtp-v.out55
-rw-r--r--tests/dvmrp.out2
-rw-r--r--tests/e1000g-e.out20
-rw-r--r--tests/e1000g.out20
-rw-r--r--tests/e1000g.pcapbin0 -> 2504 bytes
-rw-r--r--tests/eap_extract_read2_asan.out1
-rw-r--r--tests/eap_extract_read2_asan.pcapbin0 -> 60 bytes
-rw-r--r--tests/eapon1-nosmb.out114
-rw-r--r--tests/eapon1-v-nosmb.out331
-rw-r--r--tests/eapon1-v.out331
-rw-r--r--tests/eapon1.gdbinit1
-rw-r--r--tests/eapon1.out114
-rw-r--r--tests/eapon1.pcapbin0 -> 16412 bytes
-rw-r--r--tests/edns-opts-v.out84
-rw-r--r--tests/edns-opts-vv.out84
-rw-r--r--tests/edns-opts.out42
-rw-r--r--tests/edns-opts.pcapbin0 -> 6049 bytes
-rw-r--r--tests/edsa-e.out10
-rw-r--r--tests/edsa-high-vid-e.out4
-rw-r--r--tests/edsa-high-vid.out4
-rw-r--r--tests/edsa-high-vid.pcapbin0 -> 512 bytes
-rw-r--r--tests/edsa.out10
-rw-r--r--tests/edsa.pcapbin0 -> 1056 bytes
-rw-r--r--tests/eigrp-tlv-oobr.out4135
-rw-r--r--tests/eigrp-tlv-oobr.pcapbin0 -> 65575 bytes
-rw-r--r--tests/eigrp1-v.out444
-rw-r--r--tests/eigrp2-v.out120
-rw-r--r--tests/eigrp3-v.out143
-rw-r--r--tests/eigrp4-v.out105
-rw-r--r--tests/eigrp5.out1
-rw-r--r--tests/empty.out0
-rw-r--r--tests/empty.pcapbin0 -> 24 bytes
-rw-r--r--tests/empty.pcapngbin0 -> 48 bytes
-rw-r--r--tests/epgm_zmtp1.pcapbin0 -> 4355 bytes
-rw-r--r--tests/epgm_zmtp1v.out73
-rw-r--r--tests/epgmv.out30
-rw-r--r--tests/esis_opt_prot-oobr.out5
-rw-r--r--tests/esis_opt_prot-oobr.pcapbin0 -> 62 bytes
-rw-r--r--tests/esis_snpa_asan-2.out4
-rw-r--r--tests/esis_snpa_asan-2.pcapbin0 -> 62 bytes
-rw-r--r--tests/esis_snpa_asan-3.out7
-rw-r--r--tests/esis_snpa_asan-3.pcapbin0 -> 100 bytes
-rw-r--r--tests/esis_snpa_asan-4.out21
-rw-r--r--tests/esis_snpa_asan-4.pcapbin0 -> 214 bytes
-rw-r--r--tests/esis_snpa_asan-5.out10
-rw-r--r--tests/esis_snpa_asan-5.pcapbin0 -> 100 bytes
-rw-r--r--tests/esis_snpa_asan.out12
-rw-r--r--tests/esis_snpa_asan.pcapbin0 -> 138 bytes
-rw-r--r--tests/esp-secrets.txt5
-rw-r--r--tests/esp0.out8
-rw-r--r--tests/esp1.gdbinit1
-rw-r--r--tests/esp1.out8
-rw-r--r--tests/esp2.gdbinit1
-rw-r--r--tests/esp2.out8
-rw-r--r--tests/esp3.gdbinit1
-rw-r--r--tests/esp4.gdbinit2
-rw-r--r--tests/esp5.gdbinit3
-rw-r--r--tests/esp5.out8
-rw-r--r--tests/espudp1.out8
-rw-r--r--tests/espudp1.pcapbin0 -> 1416 bytes
-rw-r--r--tests/evb.out146
-rw-r--r--tests/evb.pcapbin0 -> 2182 bytes
-rw-r--r--tests/extract_read2_asan.out3
-rw-r--r--tests/extract_read2_asan.pcapbin0 -> 74 bytes
-rw-r--r--tests/forces1.out30
-rw-r--r--tests/forces1.pcapbin0 -> 2488 bytes
-rw-r--r--tests/forces1vvv.out212
-rw-r--r--tests/forces1vvvv.out291
-rw-r--r--tests/forces2.pcapbin0 -> 9878 bytes
-rw-r--r--tests/forces2v.out0
-rw-r--r--tests/forces2vv.out378
-rw-r--r--tests/forces2vvv.out751
-rw-r--r--tests/forces3.pcapbin0 -> 18176 bytes
-rw-r--r--tests/forces3vvv.out602
-rw-r--r--tests/frf15-heapoverflow.out1
-rw-r--r--tests/frf15-heapoverflow.pcapbin0 -> 44 bytes
-rw-r--r--tests/frf16_magic_ie-oobr.out2
-rw-r--r--tests/frf16_magic_ie-oobr.pcapbin0 -> 108 bytes
-rw-r--r--tests/geneve-tcp.out33
-rw-r--r--tests/geneve-vni.out20
-rw-r--r--tests/geneve-vv.out156
-rw-r--r--tests/geneve.pcapbin0 -> 9928 bytes
-rw-r--r--tests/geonet-mac-lookup-heapoverflow.out1
-rw-r--r--tests/geonet-mac-lookup-heapoverflow.pcapbin0 -> 66 bytes
-rw-r--r--tests/geonet_and_calm_fast.out169
-rw-r--r--tests/geonet_and_calm_fast.pcapbin0 -> 7794 bytes
-rw-r--r--tests/getname_2_read4_asan.out1
-rw-r--r--tests/getname_2_read4_asan.pcapbin0 -> 62 bytes
-rw-r--r--tests/gre-heapoverflow-1.out8
-rw-r--r--tests/gre-heapoverflow-1.pcapbin0 -> 202 bytes
-rw-r--r--tests/gre-heapoverflow-2.out6
-rw-r--r--tests/gre-heapoverflow-2.pcapbin0 -> 152 bytes
-rw-r--r--tests/hdlc1.out1
-rw-r--r--tests/hdlc2.out1
-rw-r--r--tests/hdlc3.out38
-rw-r--r--tests/hdlc4.out7
-rw-r--r--tests/hdlc_slarp.pcapngbin0 -> 612 bytes
-rw-r--r--tests/heap-overflow-1.out1
-rw-r--r--tests/heap-overflow-1.pcapbin0 -> 41 bytes
-rw-r--r--tests/heap-overflow-2.out1
-rw-r--r--tests/heap-overflow-2.pcapbin0 -> 41 bytes
-rw-r--r--tests/heapoverflow-atalk_2.out1
-rw-r--r--tests/heapoverflow-atalk_2.pcapbin0 -> 52 bytes
-rw-r--r--tests/heapoverflow-atalk_print.out1
-rw-r--r--tests/heapoverflow-atalk_print.pcapbin0 -> 56 bytes
-rw-r--r--tests/heapoverflow-in_checksum.out4
-rw-r--r--tests/heapoverflow-in_checksum.pcapbin0 -> 88 bytes
-rw-r--r--tests/heapoverflow-ip_demux_print.out6
-rw-r--r--tests/heapoverflow-ip_demux_print.pcapbin0 -> 152 bytes
-rw-r--r--tests/heapoverflow-ppp_hdlc_if_print.out1
-rw-r--r--tests/heapoverflow-ppp_hdlc_if_print.pcapbin0 -> 42 bytes
-rw-r--r--tests/heapoverflow-q933_printq.out2
-rw-r--r--tests/heapoverflow-q933_printq.pcapbin0 -> 88 bytes
-rw-r--r--tests/heapoverflow-sl_if_print.out1
-rw-r--r--tests/heapoverflow-sl_if_print.pcapbin0 -> 56 bytes
-rw-r--r--tests/heapoverflow-tcp_print.out2
-rw-r--r--tests/heapoverflow-tcp_print.pcapbin0 -> 104 bytes
-rw-r--r--tests/hncp.out53
-rw-r--r--tests/hncp.pcapbin0 -> 1566 bytes
-rw-r--r--tests/hncp_dhcpv4data-oobr.out4
-rw-r--r--tests/hncp_dhcpv4data-oobr.pcapbin0 -> 119 bytes
-rw-r--r--tests/hncp_dhcpv6data-oobr.out7
-rw-r--r--tests/hncp_dhcpv6data-oobr.pcapbin0 -> 147 bytes
-rw-r--r--tests/hncp_prefix-oobr.out48
-rw-r--r--tests/hncp_prefix-oobr.pcapbin0 -> 1566 bytes
-rw-r--r--tests/hoobr_aodv_extension.out2
-rw-r--r--tests/hoobr_aodv_extension.pcapbin0 -> 102 bytes
-rw-r--r--tests/hoobr_bfd_print.out7
-rw-r--r--tests/hoobr_bfd_print.pcapbin0 -> 198 bytes
-rw-r--r--tests/hoobr_chdlc_print.out26
-rw-r--r--tests/hoobr_chdlc_print.pcapbin0 -> 544 bytes
-rw-r--r--tests/hoobr_juniper.out1
-rw-r--r--tests/hoobr_juniper.pcapbin0 -> 44 bytes
-rw-r--r--tests/hoobr_juniper2.out1
-rw-r--r--tests/hoobr_juniper2.pcapbin0 -> 50 bytes
-rw-r--r--tests/hoobr_juniper3.out1
-rw-r--r--tests/hoobr_juniper3.pcapbin0 -> 46 bytes
-rw-r--r--tests/hoobr_juniper4.out1
-rw-r--r--tests/hoobr_juniper4.pcapbin0 -> 48 bytes
-rw-r--r--tests/hoobr_lookup_nsap.out23
-rw-r--r--tests/hoobr_lookup_nsap.pcapbin0 -> 492 bytes
-rw-r--r--tests/hoobr_nfs_printfh.out104
-rw-r--r--tests/hoobr_nfs_printfh.pcapbin0 -> 1958 bytes
-rw-r--r--tests/hoobr_nfs_xid_map_enter.out41
-rw-r--r--tests/hoobr_nfs_xid_map_enter.pcapbin0 -> 735 bytes
-rw-r--r--tests/hoobr_parse_field.out5
-rw-r--r--tests/hoobr_parse_field.pcapbin0 -> 152 bytes
-rw-r--r--tests/hoobr_pimv1.out25
-rw-r--r--tests/hoobr_pimv1.pcapbin0 -> 510 bytes
-rw-r--r--tests/hoobr_ripng_print.out1
-rw-r--r--tests/hoobr_ripng_print.pcapbin0 -> 88 bytes
-rw-r--r--tests/hoobr_rt6_print.out3
-rw-r--r--tests/hoobr_rt6_print.pcapbin0 -> 195 bytes
-rw-r--r--tests/hoobr_safeputs.out1
-rw-r--r--tests/hoobr_safeputs.pcapbin0 -> 75 bytes
-rw-r--r--tests/hsrp_1-v.out102
-rw-r--r--tests/hsrp_1.out51
-rw-r--r--tests/hsrp_2-v.out98
-rw-r--r--tests/hsrp_3-v.out78
-rw-r--r--tests/huge-tipc-messages.out13
-rw-r--r--tests/huge-tipc-messages.pcapbin0 -> 197789 bytes
-rw-r--r--tests/icmp-cksum-oobr-1.out5
-rw-r--r--tests/icmp-cksum-oobr-1.pcapbin0 -> 244 bytes
-rw-r--r--tests/icmp-cksum-oobr-2.out11
-rw-r--r--tests/icmp-cksum-oobr-2.pcapbin0 -> 284 bytes
-rw-r--r--tests/icmp-cksum-oobr-3.out5
-rw-r--r--tests/icmp-cksum-oobr-3.pcapngbin0 -> 456 bytes
-rw-r--r--tests/icmp-cksum-oobr-4.out7
-rw-r--r--tests/icmp-cksum-oobr-4.pcapngbin0 -> 288 bytes
-rw-r--r--tests/icmp-icmp_print-oobr-1.out7
-rw-r--r--tests/icmp-icmp_print-oobr-1.pcapbin0 -> 264 bytes
-rw-r--r--tests/icmp-icmp_print-oobr-2.out4
-rw-r--r--tests/icmp-icmp_print-oobr-2.pcapbin0 -> 264 bytes
-rw-r--r--tests/icmp6_mobileprefix_asan.out2
-rw-r--r--tests/icmp6_mobileprefix_asan.pcapbin0 -> 116 bytes
-rw-r--r--tests/icmp6_nodeinfo_oobr.out1
-rw-r--r--tests/icmp6_nodeinfo_oobr.pcapbin0 -> 114 bytes
-rw-r--r--tests/icmpv6-RFC2894-RR-v.out6
-rw-r--r--tests/icmpv6-RFC2894-RR.out6
-rw-r--r--tests/icmpv6-RFC2894-RR.pcapbin0 -> 816 bytes
-rw-r--r--tests/icmpv6-length-zero.out1
-rw-r--r--tests/icmpv6-length-zero.pcapngbin0 -> 192 bytes
-rw-r--r--tests/icmpv6-ni-flags.out5
-rw-r--r--tests/icmpv6-ni-flags.pcapbin0 -> 534 bytes
-rw-r--r--tests/icmpv6-rfc7112.out1
-rw-r--r--tests/icmpv6-rfc7112.pcapbin0 -> 166 bytes
-rw-r--r--tests/icmpv6.out26
-rw-r--r--tests/icmpv6.pcapbin0 -> 754 bytes
-rw-r--r--tests/icmpv6_opt24-v.out16
-rw-r--r--tests/icmpv6_opt24.pcapbin0 -> 404 bytes
-rw-r--r--tests/ieee802.11_exthdr.out26
-rw-r--r--tests/ieee802.11_exthdr.pcapbin0 -> 4499 bytes
-rw-r--r--tests/ieee802.11_meshhdr-oobr.out1
-rw-r--r--tests/ieee802.11_meshhdr-oobr.pcapbin0 -> 126 bytes
-rw-r--r--tests/ieee802.11_parse_elements_oobr.out1
-rw-r--r--tests/ieee802.11_parse_elements_oobr.pcapbin0 -> 295 bytes
-rw-r--r--tests/ieee802.11_rates_oobr.out1
-rw-r--r--tests/ieee802.11_rates_oobr.pcapbin0 -> 111 bytes
-rw-r--r--tests/ieee802.11_rx-stbc.out3
-rw-r--r--tests/ieee802.11_rx-stbc.pcapbin0 -> 541 bytes
-rw-r--r--tests/ieee802.11_tim_ie_oobr.out4
-rw-r--r--tests/ieee802.11_tim_ie_oobr.pcapbin0 -> 335 bytes
-rw-r--r--tests/igmpv1.out27
-rw-r--r--tests/igmpv2.out18
-rw-r--r--tests/igmpv3-queries.out6
-rw-r--r--tests/igmpv3-queries.pcapbin0 -> 420 bytes
-rw-r--r--tests/igrp-oobr.out2
-rw-r--r--tests/igrp-oobr.pcapbin0 -> 102 bytes
-rw-r--r--tests/ikev1_id_ipv6_addr_subnet-oobr.out3
-rw-r--r--tests/ikev1_id_ipv6_addr_subnet-oobr.pcapbin0 -> 147 bytes
-rw-r--r--tests/ikev2four.out107
-rw-r--r--tests/ikev2four.pcapbin0 -> 5856 bytes
-rw-r--r--tests/ikev2fourv.out107
-rw-r--r--tests/ikev2fourv4.out107
-rw-r--r--tests/ikev2pI2-secrets.txt2
-rw-r--r--tests/ikev2pI2-segfault-v.out8
-rw-r--r--tests/ikev2pI2-segfault.out1
-rw-r--r--tests/ikev2pI2-segfault.pcapngbin0 -> 656 bytes
-rw-r--r--tests/ikev2pI2.out41
-rw-r--r--tests/ikev2pI2.pcapbin0 -> 912 bytes
-rw-r--r--tests/ip6_frag_asan.out1
-rw-r--r--tests/ip6_frag_asan.pcapbin0 -> 100 bytes
-rw-r--r--tests/ip_printroute_asan.out2
-rw-r--r--tests/ip_printroute_asan.pcapbin0 -> 100 bytes
-rw-r--r--tests/ip_ts_opts_asan.out2
-rw-r--r--tests/ip_ts_opts_asan.pcapbin0 -> 90 bytes
-rw-r--r--tests/ipcomp-heapoverflow.out2
-rw-r--r--tests/ipcomp-heapoverflow.pcapbin0 -> 74 bytes
-rw-r--r--tests/ipoib-e.out30
-rw-r--r--tests/ipoib.out30
-rw-r--r--tests/ipoib.pcapbin0 -> 5078 bytes
-rw-r--r--tests/ipv6-bad-version.out4
-rw-r--r--tests/ipv6-bad-version.pcapbin0 -> 416 bytes
-rw-r--r--tests/ipv6-mobility-header-oobr.out1
-rw-r--r--tests/ipv6-mobility-header-oobr.pcapbin0 -> 87 bytes
-rw-r--r--tests/ipv6-next-header-oobr-1.out1
-rw-r--r--tests/ipv6-next-header-oobr-1.pcapbin0 -> 88 bytes
-rw-r--r--tests/ipv6-next-header-oobr-2.out1
-rw-r--r--tests/ipv6-next-header-oobr-2.pcapbin0 -> 88 bytes
-rw-r--r--tests/ipv6-routing-header.out4
-rw-r--r--tests/ipv6-routing-header.pcapbin0 -> 464 bytes
-rw-r--r--tests/ipv6-rthdr-oobr.out1
-rw-r--r--tests/ipv6-rthdr-oobr.pcapbin0 -> 85 bytes
-rw-r--r--tests/ipv6-srh-ext-header.out1
-rw-r--r--tests/ipv6-srh-ext-header.pcapbin0 -> 238 bytes
-rw-r--r--tests/ipv6-srh-insert-cksum.out1
-rw-r--r--tests/ipv6-srh-insert-cksum.pcapbin0 -> 1182 bytes
-rw-r--r--tests/ipv6-srh-ipproto-ether-ev.out1
-rw-r--r--tests/ipv6-srh-ipproto-ether-v.out1
-rw-r--r--tests/ipv6-srh-ipproto-ether.pcapbin0 -> 236 bytes
-rw-r--r--tests/ipv6-too-long-jumbo.out1
-rw-r--r--tests/ipv6-too-long-jumbo.pcapbin0 -> 530 bytes
-rw-r--r--tests/ipv6hdr-heapoverflow-v.out1
-rw-r--r--tests/ipv6hdr-heapoverflow.out1
-rw-r--r--tests/ipv6hdr-heapoverflow.pcapbin0 -> 88 bytes
-rw-r--r--tests/ipx-invalid-length.out1
-rw-r--r--tests/ipx-invalid-length.pcapbin0 -> 100 bytes
-rw-r--r--tests/ipx-nosmb.out64
-rw-r--r--tests/ipx.out100
-rw-r--r--tests/ipx.pcapbin0 -> 8097 bytes
-rw-r--r--tests/isakmp-3948-oobr-2.out1
-rw-r--r--tests/isakmp-3948-oobr-2.pcapbin0 -> 82 bytes
-rw-r--r--tests/isakmp-delete-segfault.pcapbin0 -> 721 bytes
-rw-r--r--tests/isakmp-identification-segfault.pcapbin0 -> 356 bytes
-rw-r--r--tests/isakmp-ikev1_n_print-oobr.out8
-rw-r--r--tests/isakmp-ikev1_n_print-oobr.pcapbin0 -> 324 bytes
-rw-r--r--tests/isakmp-no-none-np.out78
-rw-r--r--tests/isakmp-no-none-np.pcapngbin0 -> 2344 bytes
-rw-r--r--tests/isakmp-pointer-loop.pcapbin0 -> 112 bytes
-rw-r--r--tests/isakmp-rfc3948-oobr.out67
-rw-r--r--tests/isakmp-rfc3948-oobr.pcapbin0 -> 1358 bytes
-rw-r--r--tests/isakmp-various-oobr.out5
-rw-r--r--tests/isakmp-various-oobr.pcapbin0 -> 206 bytes
-rw-r--r--tests/isakmp1.out1
-rw-r--r--tests/isakmp2.out1
-rw-r--r--tests/isakmp3.out3
-rw-r--r--tests/isakmp4.out35
-rw-r--r--tests/isakmp4500.pcapbin0 -> 6830 bytes
-rw-r--r--tests/isakmp5-v.out44
-rw-r--r--tests/isakmpv1-attr-oobr.out3
-rw-r--r--tests/isakmpv1-attr-oobr.pcapbin0 -> 135 bytes
-rw-r--r--tests/isis-areaaddr-oobr-1.out7
-rw-r--r--tests/isis-areaaddr-oobr-1.pcapbin0 -> 65575 bytes
-rw-r--r--tests/isis-areaaddr-oobr-2.out6
-rw-r--r--tests/isis-areaaddr-oobr-2.pcapbin0 -> 65575 bytes
-rw-r--r--tests/isis-extd-ipreach-oobr.out412
-rw-r--r--tests/isis-extd-ipreach-oobr.pcapbin0 -> 65575 bytes
-rw-r--r--tests/isis-extd-isreach-oobr.out44
-rw-r--r--tests/isis-extd-isreach-oobr.pcapbin0 -> 445 bytes
-rw-r--r--tests/isis-infinite-loop.pcapbin0 -> 454 bytes
-rw-r--r--tests/isis-seg-fault-1-v.out62
-rw-r--r--tests/isis-seg-fault-1-v.tests23
-rw-r--r--tests/isis-seg-fault-1.pcapngbin0 -> 1632 bytes
-rw-r--r--tests/isis-seg-fault-2-v.out97
-rw-r--r--tests/isis-seg-fault-2.pcapngbin0 -> 1632 bytes
-rw-r--r--tests/isis-seg-fault-3-v.out17
-rw-r--r--tests/isis-seg-fault-3.pcapngbin0 -> 196 bytes
-rw-r--r--tests/isis_1-v.out270
-rw-r--r--tests/isis_1.out15
-rw-r--r--tests/isis_2-v.out403
-rw-r--r--tests/isis_3-v.out774
-rw-r--r--tests/isis_4-v.out400
-rw-r--r--tests/isis_cap_tlv.out99
-rw-r--r--tests/isis_cap_tlv.pcapbin0 -> 556 bytes
-rw-r--r--tests/isis_iid_tlv.out777
-rw-r--r--tests/isis_iid_tlv.pcapbin0 -> 34396 bytes
-rw-r--r--tests/isis_infloop-v.out35
-rw-r--r--tests/isis_poi.out8
-rw-r--r--tests/isis_poi.pcapbin0 -> 122 bytes
-rw-r--r--tests/isis_poi2.out9
-rw-r--r--tests/isis_poi2.pcapbin0 -> 128 bytes
-rw-r--r--tests/isis_sid.out99
-rw-r--r--tests/isis_sid.pcapbin0 -> 556 bytes
-rw-r--r--tests/isis_sr.out17
-rw-r--r--tests/isis_sr.pcapngbin0 -> 220 bytes
-rw-r--r--tests/isis_stlv_asan-2.out21
-rw-r--r--tests/isis_stlv_asan-2.pcapbin0 -> 323 bytes
-rw-r--r--tests/isis_stlv_asan-3.out22
-rw-r--r--tests/isis_stlv_asan-3.pcapbin0 -> 323 bytes
-rw-r--r--tests/isis_stlv_asan-4.out27
-rw-r--r--tests/isis_stlv_asan-4.pcapbin0 -> 323 bytes
-rw-r--r--tests/isis_stlv_asan.out23
-rw-r--r--tests/isis_stlv_asan.pcapbin0 -> 323 bytes
-rw-r--r--tests/isis_sysid_asan.out24
-rw-r--r--tests/isis_sysid_asan.pcapbin0 -> 323 bytes
-rw-r--r--tests/isoclns-heapoverflow-2.out1
-rw-r--r--tests/isoclns-heapoverflow-2.pcapbin0 -> 82 bytes
-rw-r--r--tests/isoclns-heapoverflow-3.out1
-rw-r--r--tests/isoclns-heapoverflow-3.pcapbin0 -> 82 bytes
-rw-r--r--tests/isoclns-heapoverflow.out1
-rw-r--r--tests/isoclns-heapoverflow.pcapbin0 -> 55 bytes
-rw-r--r--tests/isoclns-oobr.out1
-rw-r--r--tests/isoclns-oobr.pcapbin0 -> 59 bytes
-rw-r--r--tests/isup.out6
-rw-r--r--tests/isup.pcapbin0 -> 704 bytes
-rw-r--r--tests/isupvv.out30
-rw-r--r--tests/juniper_atm1_oobr.out2
-rw-r--r--tests/juniper_atm1_oobr.pcapbin0 -> 48 bytes
-rw-r--r--tests/juniper_es_oobr.out2
-rw-r--r--tests/juniper_es_oobr.pcapbin0 -> 45 bytes
-rw-r--r--tests/juniper_header-heapoverflow.out1
-rw-r--r--tests/juniper_header-heapoverflow.pcapbin0 -> 122 bytes
-rw-r--r--tests/kday1.out1
-rw-r--r--tests/kday1.pcapbin0 -> 222 bytes
-rw-r--r--tests/kday2.out21
-rw-r--r--tests/kday2.pcapbin0 -> 897 bytes
-rw-r--r--tests/kday3.out19
-rw-r--r--tests/kday3.pcapbin0 -> 1572 bytes
-rw-r--r--tests/kday4.out32
-rw-r--r--tests/kday4.pcapbin0 -> 2247 bytes
-rw-r--r--tests/kday5.out21
-rw-r--r--tests/kday5.pcapbin0 -> 897 bytes
-rw-r--r--tests/kday6.out349
-rw-r--r--tests/kday6.pcapbin0 -> 3550 bytes
-rw-r--r--tests/kday7.out32
-rw-r--r--tests/kday7.pcapbin0 -> 2247 bytes
-rw-r--r--tests/kday8.out21
-rw-r--r--tests/kday8.pcapbin0 -> 897 bytes
-rw-r--r--tests/kh-timed-001-oobr.out17
-rw-r--r--tests/kh-timed-001-oobr.pcapbin0 -> 344 bytes
-rw-r--r--tests/kh-timed-002-oobr.out1
-rw-r--r--tests/kh-timed-002-oobr.pcapbin0 -> 88 bytes
-rw-r--r--tests/kh-timed-004-oobr.out5
-rw-r--r--tests/kh-timed-004-oobr.pcapbin0 -> 152 bytes
-rw-r--r--tests/l2tp-avp-overflow.out38
-rw-r--r--tests/l2tp-avp-overflow.pcapbin0 -> 1404 bytes
-rw-r--r--tests/lacp-ev.out200
-rw-r--r--tests/ldp-infinite-loop.pcapbin0 -> 414 bytes
-rw-r--r--tests/ldp-ldp_tlv_print-oobr.out6
-rw-r--r--tests/ldp-ldp_tlv_print-oobr.pcapbin0 -> 127 bytes
-rw-r--r--tests/ldp_infloop.out5
-rw-r--r--tests/ldp_tlv_print-oobr.out7
-rw-r--r--tests/ldp_tlv_print-oobr.pcapbin0 -> 116 bytes
-rw-r--r--tests/lisp_eid_notify.out62
-rw-r--r--tests/lisp_eid_notify.pcapbin0 -> 776 bytes
-rw-r--r--tests/lisp_eid_register.out28
-rw-r--r--tests/lisp_eid_register.pcapbin0 -> 384 bytes
-rw-r--r--tests/lisp_ipv6.out24
-rw-r--r--tests/lisp_ipv6.pcapbin0 -> 396 bytes
-rw-r--r--tests/llc-xid-heapoverflow.out1
-rw-r--r--tests/llc-xid-heapoverflow.pcapbin0 -> 63 bytes
-rw-r--r--tests/lldp-app-priority.out30
-rw-r--r--tests/lldp-app-priority.pcapbin0 -> 215 bytes
-rw-r--r--tests/lldp-infinite-loop-1.out134
-rw-r--r--tests/lldp-infinite-loop-1.pcapbin0 -> 1795 bytes
-rw-r--r--tests/lldp-infinite-loop-2.out161
-rw-r--r--tests/lldp-infinite-loop-2.pcapbin0 -> 2170 bytes
-rw-r--r--tests/lldp_8021_linkagg-v.out8
-rw-r--r--tests/lldp_8021_linkagg-vv.out10
-rw-r--r--tests/lldp_8021_linkagg.pcapbin0 -> 106 bytes
-rw-r--r--tests/lldp_8023_mtu-oobr.out3
-rw-r--r--tests/lldp_8023_mtu-oobr.pcapbin0 -> 60 bytes
-rw-r--r--tests/lldp_asan.out14
-rw-r--r--tests/lldp_asan.pcapbin0 -> 94 bytes
-rw-r--r--tests/lldp_cdp-ev.out252
-rw-r--r--tests/lldp_mgmt_addr_tlv_asan.out7
-rw-r--r--tests/lldp_mgmt_addr_tlv_asan.pcapbin0 -> 118 bytes
-rw-r--r--tests/lldp_mudurl-v.out62
-rw-r--r--tests/lldp_mudurl-vv.out106
-rw-r--r--tests/lldp_mudurl.pcapbin0 -> 660 bytes
-rw-r--r--tests/lmp-lmp_print_data_link_subobjs-oobr.out20
-rw-r--r--tests/lmp-lmp_print_data_link_subobjs-oobr.pcapbin0 -> 230 bytes
-rw-r--r--tests/lmp-v-fptype1.out200
-rw-r--r--tests/lmp-v-fptype2.out200
-rw-r--r--tests/lmp-v.tests26
-rw-r--r--tests/lmp.out18
-rw-r--r--tests/lmp.pcapbin0 -> 1732 bytes
-rw-r--r--tests/lmpv1_busyloop.out40
-rw-r--r--tests/lmpv1_busyloop.pcapbin0 -> 765 bytes
-rw-r--r--tests/loopback.out6
-rw-r--r--tests/loopback.pcapbin0 -> 592 bytes
-rw-r--r--tests/lsp-ping-timestamp.out8
-rw-r--r--tests/lsp-ping-timestamp.pcapbin0 -> 116 bytes
-rw-r--r--tests/lspping-fec-ldp-v.out111
-rw-r--r--tests/lspping-fec-ldp-vv.out121
-rw-r--r--tests/lspping-fec-ldp.out13
-rw-r--r--tests/lspping-fec-ldp.pcapbin0 -> 1190 bytes
-rw-r--r--tests/lspping-fec-rsvp-v.out105
-rw-r--r--tests/lspping-fec-rsvp-vv.out125
-rw-r--r--tests/lspping-fec-rsvp.out10
-rw-r--r--tests/lspping-fec-rsvp.pcapbin0 -> 984 bytes
-rw-r--r--tests/lwres_with_extra.out1
-rw-r--r--tests/lwres_with_extra.pcapbin0 -> 423 bytes
-rw-r--r--tests/macsec-changed.out7
-rw-r--r--tests/macsec-changed.pcapbin0 -> 162 bytes
-rw-r--r--tests/macsec-encrypted.out8
-rw-r--r--tests/macsec-encrypted.pcapbin0 -> 170 bytes
-rw-r--r--tests/macsec-integonly.out1
-rw-r--r--tests/macsec-integonly.pcapbin0 -> 170 bytes
-rw-r--r--tests/macsec-short-longer.out1
-rw-r--r--tests/macsec-short-longer.pcapbin0 -> 118 bytes
-rw-r--r--tests/macsec-short-shorter.out1
-rw-r--r--tests/macsec-short-shorter.pcapbin0 -> 114 bytes
-rw-r--r--tests/macsec-short-valid.out1
-rw-r--r--tests/macsec-short-valid.pcapbin0 -> 118 bytes
-rw-r--r--tests/macsec-snap.out1
-rw-r--r--tests/macsec-snap.pcapbin0 -> 60 bytes
-rw-r--r--tests/mlppp-oobr.out1
-rw-r--r--tests/mlppp-oobr.pcapbin0 -> 44 bytes
-rw-r--r--tests/mobility_opt_asan.out2
-rw-r--r--tests/mobility_opt_asan.pcapbin0 -> 256 bytes
-rw-r--r--tests/mobility_opt_asan_2.out1
-rw-r--r--tests/mobility_opt_asan_2.pcapbin0 -> 143 bytes
-rw-r--r--tests/mobility_opt_asan_3.out2
-rw-r--r--tests/mobility_opt_asan_3.pcapbin0 -> 256 bytes
-rw-r--r--tests/mobility_opt_asan_4.out1
-rw-r--r--tests/mobility_opt_asan_4.pcapbin0 -> 140 bytes
-rw-r--r--tests/mobility_opt_asan_5.out1
-rw-r--r--tests/mobility_opt_asan_5.pcapbin0 -> 107 bytes
-rw-r--r--tests/mobility_opt_asan_6.out2
-rw-r--r--tests/mobility_opt_asan_6.pcapbin0 -> 196 bytes
-rw-r--r--tests/mobility_opt_asan_7.out2
-rw-r--r--tests/mobility_opt_asan_7.pcapbin0 -> 196 bytes
-rw-r--r--tests/mobility_opt_asan_8.out1
-rw-r--r--tests/mobility_opt_asan_8.pcapbin0 -> 135 bytes
-rw-r--r--tests/mpbgp-linklocal-nexthop.out10
-rw-r--r--tests/mpbgp-linklocal-nexthop.pcapbin0 -> 196 bytes
-rw-r--r--tests/mpls-label-heapoverflow.out2
-rw-r--r--tests/mpls-label-heapoverflow.pcapbin0 -> 62 bytes
-rw-r--r--tests/mpls-ldp-hello.out10
-rw-r--r--tests/mpls-ldp-hello.pcapbin0 -> 114 bytes
-rw-r--r--tests/mpls-over-udp-v.out8
-rw-r--r--tests/mpls-over-udp.out2
-rw-r--r--tests/mpls-over-udp.pcapbin0 -> 316 bytes
-rw-r--r--tests/mpls-traceroute-v.out81
-rw-r--r--tests/mpls-traceroute.out18
-rw-r--r--tests/mpls-traceroute.pcapbin0 -> 1956 bytes
-rw-r--r--tests/mptcp-aa-echo.out2
-rw-r--r--tests/mptcp-aa-echo.pcapbin0 -> 236 bytes
-rw-r--r--tests/mptcp-aa-v1.out24
-rw-r--r--tests/mptcp-aa-v1.pcapbin0 -> 2620 bytes
-rw-r--r--tests/mptcp-dss-oobr.out2
-rw-r--r--tests/mptcp-dss-oobr.pcapbin0 -> 114 bytes
-rw-r--r--tests/mptcp-fclose.out11
-rw-r--r--tests/mptcp-fclose.pcapbin0 -> 1016 bytes
-rw-r--r--tests/mptcp-v0.out264
-rw-r--r--tests/mptcp-v0.pcapbin0 -> 39394 bytes
-rw-r--r--tests/mptcp-v1.out20
-rw-r--r--tests/mptcp-v1.pcapbin0 -> 22588 bytes
-rw-r--r--tests/mrinfo_query.pcapbin0 -> 182 bytes
-rw-r--r--tests/msnlb.out2
-rw-r--r--tests/msnlb.pcapbin0 -> 248 bytes
-rw-r--r--tests/msnlb2.out2
-rw-r--r--tests/msnlb2.pcapngbin0 -> 188 bytes
-rw-r--r--tests/mstp-v.out130
-rw-r--r--tests/mtrace.out2
-rw-r--r--tests/mtrace.pcapbin0 -> 238 bytes
-rw-r--r--tests/nbns-valgrind-nosmb.out2
-rw-r--r--tests/nbns-valgrind.out14
-rw-r--r--tests/nbns-valgrind.pcapbin0 -> 108 bytes
-rw-r--r--tests/nflog-e.out4
-rw-r--r--tests/nflog.pcapbin0 -> 840 bytes
-rw-r--r--tests/nfs-attr-oobr.out305
-rw-r--r--tests/nfs-attr-oobr.pcapbin0 -> 5176 bytes
-rw-r--r--tests/nfs-cannot-pad-32-bit.out1
-rw-r--r--tests/nfs-cannot-pad-32-bit.pcapbin0 -> 162 bytes
-rw-r--r--tests/nfs-seg-fault-1.out1
-rw-r--r--tests/nfs-seg-fault-1.pcapngbin0 -> 8120 bytes
-rw-r--r--tests/nfs-write-verf-cookie.out4
-rw-r--r--tests/nfs-write-verf-cookie.pcapngbin0 -> 596 bytes
-rw-r--r--tests/non-bsd.tests15
-rw-r--r--tests/nsh-over-vxlan-gpe-v.out5
-rw-r--r--tests/nsh-over-vxlan-gpe-vv.out5
-rw-r--r--tests/nsh-over-vxlan-gpe-vvv.out9
-rw-r--r--tests/nsh-over-vxlan-gpe.out1
-rw-r--r--tests/nsh-over-vxlan-gpe.pcapbin0 -> 146 bytes
-rw-r--r--tests/nsh-vvv.out7
-rw-r--r--tests/nsh.out1
-rw-r--r--tests/nsh.pcapbin0 -> 112 bytes
-rw-r--r--tests/ntp-control--v.out76
-rw-r--r--tests/ntp-control--vv.out76
-rw-r--r--tests/ntp-control--vvv.out76
-rw-r--r--tests/ntp-control.out21
-rw-r--r--tests/ntp-control.pcapbin0 -> 5206 bytes
-rw-r--r--tests/ntp-mode7--v.out24
-rw-r--r--tests/ntp-mode7--vv.out24
-rw-r--r--tests/ntp-mode7--vvv.out24
-rw-r--r--tests/ntp-mode7.out8
-rw-r--r--tests/ntp-mode7.pcapbin0 -> 1840 bytes
-rw-r--r--tests/ntp-time--v.out20
-rw-r--r--tests/ntp-time--vv.out20
-rw-r--r--tests/ntp-time--vvv.out20
-rw-r--r--tests/ntp-time.out2
-rw-r--r--tests/ntp-time.pcapbin0 -> 236 bytes
-rw-r--r--tests/ntp-v.out91
-rw-r--r--tests/ntp.out8
-rw-r--r--tests/ntp.pcapbin0 -> 988 bytes
-rw-r--r--tests/of10_7050q-v.out18
-rw-r--r--tests/of10_7050q.pcapngbin0 -> 588 bytes
-rw-r--r--tests/of10_7050sx_bsn-oobr.out16
-rw-r--r--tests/of10_7050sx_bsn-oobr.pcapbin0 -> 279 bytes
-rw-r--r--tests/of10_7050sx_bsn-vv.out343
-rw-r--r--tests/of10_7050sx_bsn.pcapbin0 -> 6680 bytes
-rw-r--r--tests/of10_p3295-vv.out798
-rw-r--r--tests/of10_p3295.pcapbin0 -> 20028 bytes
-rw-r--r--tests/of10_pf5240-vv.out428
-rw-r--r--tests/of10_pf5240.pcapbin0 -> 9196 bytes
-rw-r--r--tests/of10_s4810-vvvv.out1333
-rw-r--r--tests/of10_s4810.pcapbin0 -> 31208 bytes
-rw-r--r--tests/of13_ericsson-v.out495
-rw-r--r--tests/of13_ericsson-vv.out556
-rw-r--r--tests/of13_ericsson.out277
-rw-r--r--tests/of13_ericsson.pcapngbin0 -> 119740 bytes
-rw-r--r--tests/olsr-oobr-1.out16
-rw-r--r--tests/olsr-oobr-1.pcapbin0 -> 332 bytes
-rw-r--r--tests/olsr-oobr-2.out3
-rw-r--r--tests/olsr-oobr-2.pcapbin0 -> 152 bytes
-rw-r--r--tests/ospf-gmpls.out86
-rw-r--r--tests/ospf-gmpls.pcapbin0 -> 640 bytes
-rw-r--r--tests/ospf-nssa-bitnt.out12
-rw-r--r--tests/ospf-nssa-bitnt.pcapbin0 -> 150 bytes
-rw-r--r--tests/ospf2-seg-fault-1-v.out9
-rw-r--r--tests/ospf2-seg-fault-1.pcapngbin0 -> 292 bytes
-rw-r--r--tests/ospf3_ah-vv.out645
-rw-r--r--tests/ospf3_auth-vv.out10
-rw-r--r--tests/ospf3_auth.pcapngbin0 -> 260 bytes
-rw-r--r--tests/ospf3_bc-vv.out335
-rw-r--r--tests/ospf3_mp-vv.out817
-rw-r--r--tests/ospf3_nbma-vv.out912
-rw-r--r--tests/ospf6_decode_v3_asan.out2
-rw-r--r--tests/ospf6_decode_v3_asan.pcapbin0 -> 111 bytes
-rw-r--r--tests/ospf6_print_lshdr-oobr.out59
-rw-r--r--tests/ospf6_print_lshdr-oobr.pcapbin0 -> 2198 bytes
-rw-r--r--tests/otv-heapoverflow-1.out10
-rw-r--r--tests/otv-heapoverflow-1.pcapbin0 -> 878 bytes
-rw-r--r--tests/otv-heapoverflow-2.out11
-rw-r--r--tests/otv-heapoverflow-2.pcapbin0 -> 878 bytes
-rw-r--r--tests/pgm_group_addr_asan.out2
-rw-r--r--tests/pgm_group_addr_asan.pcapbin0 -> 111 bytes
-rw-r--r--tests/pgm_opts_asan.out2
-rw-r--r--tests/pgm_opts_asan.pcapbin0 -> 135 bytes
-rw-r--r--tests/pgm_opts_asan_2.out2
-rw-r--r--tests/pgm_opts_asan_2.pcapbin0 -> 135 bytes
-rw-r--r--tests/pgm_opts_asan_3.out2
-rw-r--r--tests/pgm_opts_asan_3.pcapbin0 -> 133 bytes
-rw-r--r--tests/pgm_poll_polr.out40
-rw-r--r--tests/pgm_poll_polr.pcapbin0 -> 1704 bytes
-rw-r--r--tests/pgm_zmtp1.pcapbin0 -> 4149 bytes
-rw-r--r--tests/pgm_zmtp1v.out70
-rw-r--r--tests/pgmv.out28
-rw-r--r--tests/pim-packet-assortment-v.out1876
-rw-r--r--tests/pim-packet-assortment-vv.out2139
-rw-r--r--tests/pim-packet-assortment.out245
-rw-r--r--tests/pim-packet-assortment.pcapbin0 -> 275820 bytes
-rw-r--r--tests/pim_header_asan-2.out5
-rw-r--r--tests/pim_header_asan-2.pcapbin0 -> 142 bytes
-rw-r--r--tests/pim_header_asan-3.out4
-rw-r--r--tests/pim_header_asan-3.pcapbin0 -> 95 bytes
-rw-r--r--tests/pim_header_asan-4.out7
-rw-r--r--tests/pim_header_asan-4.pcapbin0 -> 166 bytes
-rw-r--r--tests/pim_header_asan.out2
-rw-r--r--tests/pim_header_asan.pcapbin0 -> 96 bytes
-rw-r--r--tests/pimv2-oobr-1.out10
-rw-r--r--tests/pimv2-oobr-1.pcapbin0 -> 65575 bytes
-rw-r--r--tests/pimv2-oobr-2.out29
-rw-r--r--tests/pimv2-oobr-2.pcapbin0 -> 65575 bytes
-rw-r--r--tests/pimv2-oobr-3.out10
-rw-r--r--tests/pimv2-oobr-3.pcapbin0 -> 65575 bytes
-rw-r--r--tests/pimv2-oobr-4.out10
-rw-r--r--tests/pimv2-oobr-4.pcapbin0 -> 65575 bytes
-rw-r--r--tests/pimv2_bootstrap-v.out24
-rw-r--r--tests/pimv2_dm-v.out238
-rw-r--r--tests/pimv2_hellos-v.out42
-rw-r--r--tests/pimv2_register-v.out8
-rw-r--r--tests/pimv2_sm-v.out300
-rw-r--r--tests/pktap-heap-overflow.out2
-rw-r--r--tests/pktap-heap-overflow.pcapbin0 -> 1168 bytes
-rw-r--r--tests/ppp-invalid-lengths.out751
-rw-r--r--tests/ppp-invalid-lengths.pcapbin0 -> 9054 bytes
-rw-r--r--tests/ppp_ccp_config_deflate_option_asan.out3
-rw-r--r--tests/ppp_ccp_config_deflate_option_asan.pcapbin0 -> 63 bytes
-rw-r--r--tests/pppoe.out1
-rw-r--r--tests/pppoe.pcapbin0 -> 78 bytes
-rw-r--r--tests/pppoes.out2
-rw-r--r--tests/pppoes.pcapbin0 -> 124 bytes
-rw-r--r--tests/pppoes_id.out1
-rw-r--r--tests/pptp-v.out54
-rw-r--r--tests/pptp.out23
-rw-r--r--tests/pptp.pcapbin0 -> 2464 bytes
-rw-r--r--tests/print-A.out193
-rw-r--r--tests/print-AA.out193
-rw-r--r--tests/print-capX.out409
-rw-r--r--tests/print-capXX.out419
-rw-r--r--tests/print-flags.pcapbin0 -> 6621 bytes
-rw-r--r--tests/print-x.out409
-rw-r--r--tests/print-xx.out419
-rw-r--r--tests/printf_z.tests132
-rw-r--r--tests/ptp.out5
-rw-r--r--tests/ptp.pcapbin0 -> 564 bytes
-rw-r--r--tests/ptp_corrections.out3
-rw-r--r--tests/ptp_corrections.pcapbin0 -> 340 bytes
-rw-r--r--tests/ptp_ethernet.out205
-rw-r--r--tests/ptp_ethernet.pcapbin0 -> 16354 bytes
-rw-r--r--tests/q933-heapoverflow-2.out24
-rw-r--r--tests/q933-heapoverflow-2.pcapbin0 -> 1483 bytes
-rw-r--r--tests/radiotap-heapoverflow.out1
-rw-r--r--tests/radiotap-heapoverflow.pcapbin0 -> 48 bytes
-rw-r--r--tests/radius-port1700-v.out4
-rw-r--r--tests/radius-rfc3162-v.out12
-rw-r--r--tests/radius-rfc4675-v.out43
-rw-r--r--tests/radius-rfc5176-2-v.out7
-rw-r--r--tests/radius-rfc5176-v.out24
-rw-r--r--tests/radius-rfc5447-v.out6
-rw-r--r--tests/radius-rfc5580-v.out13
-rw-r--r--tests/radius-v.out50
-rw-r--r--tests/radius_attr_asan.out9
-rw-r--r--tests/radius_attr_asan.pcapbin0 -> 135 bytes
-rw-r--r--tests/reason_code-0.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-1.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-10.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-11.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-12.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-13.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-14.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-15.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-16.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-17.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-18.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-19.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-2.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-20.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-21.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-22.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-23.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-24.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-25.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-26.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-27.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-28.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-29.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-3.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-30.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-31.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-32.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-33.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-34.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-35.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-36.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-37.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-38.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-39.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-4.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-40.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-41.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-42.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-43.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-44.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-45.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-46.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-47.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-48.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-49.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-5.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-50.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-51.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-52.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-53.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-54.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-55.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-56.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-57.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-58.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-59.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-6.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-60.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-61.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-62.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-63.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-64.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-65.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-66.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-7.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-8.pcapbin0 -> 90 bytes
-rw-r--r--tests/reason_code-9.pcapbin0 -> 90 bytes
-rw-r--r--tests/relts-0x80000000.out2
-rw-r--r--tests/relts-0x80000000.pcapbin0 -> 344 bytes
-rw-r--r--tests/resp_1.out150
-rw-r--r--tests/resp_1_benchmark.pcapbin0 -> 26858 bytes
-rw-r--r--tests/resp_2.out14
-rw-r--r--tests/resp_2_inline.pcapbin0 -> 2671 bytes
-rw-r--r--tests/resp_3.out163
-rw-r--r--tests/resp_3_malicious.pcapbin0 -> 14724 bytes
-rw-r--r--tests/resp_4_infiniteloop.out2
-rw-r--r--tests/resp_4_infiniteloop.pcapngbin0 -> 1036 bytes
-rw-r--r--tests/ripv1v2.out16
-rw-r--r--tests/ripv1v2.pcapbin0 -> 352 bytes
-rw-r--r--tests/ripv2-invalid-length.out12
-rw-r--r--tests/ripv2-invalid-length.pcapbin0 -> 250 bytes
-rw-r--r--tests/ripv2_auth.out94
-rw-r--r--tests/ripv2_auth.pcapbin0 -> 1648 bytes
-rw-r--r--tests/rpki-rtr-oobr.out3
-rw-r--r--tests/rpki-rtr-oobr.pcapbin0 -> 104 bytes
-rw-r--r--tests/rpl-14-dao.pcapbin0 -> 118 bytes
-rw-r--r--tests/rpl-14-daovvv.out1
-rw-r--r--tests/rpl-19-pickdag.out1
-rw-r--r--tests/rpl-19-pickdag.pcapbin0 -> 150 bytes
-rw-r--r--tests/rpl-19-pickdagvvv.out1
-rw-r--r--tests/rpl-26-senddaoack.pcapbin0 -> 118 bytes
-rw-r--r--tests/rpl-26-senddaovv.out1
-rw-r--r--tests/rpl-dao-oobr.out1
-rw-r--r--tests/rpl-dao-oobr.pcapbin0 -> 150 bytes
-rw-r--r--tests/rpvst-v.out68
-rw-r--r--tests/rpvstp-trunk-native-vid5.pcapbin0 -> 1811 bytes
-rw-r--r--tests/rstp-v.out90
-rw-r--r--tests/rsvp-inf-loop-2-v.out12
-rw-r--r--tests/rsvp-inf-loop-2.pcapngbin0 -> 400 bytes
-rw-r--r--tests/rsvp-infinite-loop.pcapbin0 -> 384 bytes
-rw-r--r--tests/rsvp-rsvp_obj_print-oobr.out7
-rw-r--r--tests/rsvp-rsvp_obj_print-oobr.pcapbin0 -> 213 bytes
-rw-r--r--tests/rsvp_cap.out9
-rw-r--r--tests/rsvp_cap.pcapbin0 -> 118 bytes
-rw-r--r--tests/rsvp_fast_reroute-oobr.out5
-rw-r--r--tests/rsvp_fast_reroute-oobr.pcapbin0 -> 91 bytes
-rw-r--r--tests/rsvp_infloop-v.out35
-rw-r--r--tests/rsvp_uni-oobr-1.out5
-rw-r--r--tests/rsvp_uni-oobr-1.pcapbin0 -> 94 bytes
-rw-r--r--tests/rsvp_uni-oobr-2.out5
-rw-r--r--tests/rsvp_uni-oobr-2.pcapbin0 -> 94 bytes
-rw-r--r--tests/rsvp_uni-oobr-3.out12
-rw-r--r--tests/rsvp_uni-oobr-3.pcapbin0 -> 234 bytes
-rw-r--r--tests/rtp-seg-fault-1.out2
-rw-r--r--tests/rtp-seg-fault-1.pcapngbin0 -> 2360 bytes
-rw-r--r--tests/rtp-seg-fault-2.out2
-rw-r--r--tests/rtp-seg-fault-2.pcapngbin0 -> 1192 bytes
-rw-r--r--tests/rx-v.out1252
-rw-r--r--tests/rx.out601
-rw-r--r--tests/rx_serviceid_oobr.out3
-rw-r--r--tests/rx_serviceid_oobr.pcapbin0 -> 214 bytes
-rw-r--r--tests/rx_ubik-oobr.out1
-rw-r--r--tests/rx_ubik-oobr.pcapbin0 -> 134 bytes
-rw-r--r--tests/scps_invalid.out2
-rw-r--r--tests/scps_invalid.pcapbin0 -> 264 bytes
-rwxr-xr-xtests/setkey2esp-secrets.pl24
-rw-r--r--tests/sflow-print-v6.out666
-rw-r--r--tests/sflow-print-v6.pcapbin0 -> 13482 bytes
-rw-r--r--tests/sflow_multiple_counter_30_pdus-nv.out30
-rw-r--r--tests/sflow_multiple_counter_30_pdus.out1828
-rw-r--r--tests/sflow_multiple_counter_30_pdus.pcapbin0 -> 29308 bytes
-rw-r--r--tests/sflow_print-segv.out2
-rw-r--r--tests/sflow_print-segv.pcapbin0 -> 954 bytes
-rw-r--r--tests/slip-bad-direction.out1
-rw-r--r--tests/slip-bad-direction.pcapbin0 -> 79 bytes
-rw-r--r--tests/slip-compressed_sl_print-oobr.out1
-rw-r--r--tests/slip-compressed_sl_print-oobr.pcapbin0 -> 295 bytes
-rw-r--r--tests/slip-sliplink_print-oobr.out1
-rw-r--r--tests/slip-sliplink_print-oobr.pcapbin0 -> 295 bytes
-rw-r--r--tests/smb.tests140
-rw-r--r--tests/smb_data_print-oobr-nosmb.out8
-rw-r--r--tests/smb_data_print-oobr.out127
-rw-r--r--tests/smb_data_print-oobr.pcapngbin0 -> 880 bytes
-rw-r--r--tests/smb_data_print-segv-nosmb.out8
-rw-r--r--tests/smb_data_print-segv.out97
-rw-r--r--tests/smb_data_print-segv.pcapngbin0 -> 880 bytes
-rw-r--r--tests/smb_print_trans-oobr1-nosmb.out4
-rw-r--r--tests/smb_print_trans-oobr1.out37
-rw-r--r--tests/smb_print_trans-oobr1.pcapbin0 -> 592 bytes
-rw-r--r--tests/smb_print_trans-oobr2-nosmb.out2
-rw-r--r--tests/smb_print_trans-oobr2.out35
-rw-r--r--tests/smb_print_trans-oobr2.pcapbin0 -> 261 bytes
-rw-r--r--tests/snmp-heapoverflow-1.out21
-rw-r--r--tests/snmp-heapoverflow-1.pcapbin0 -> 424 bytes
-rw-r--r--tests/snmp-heapoverflow-2.out1
-rw-r--r--tests/snmp-heapoverflow-2.pcapbin0 -> 94 bytes
-rw-r--r--tests/someip1.out6
-rw-r--r--tests/someip1.pcapbin0 -> 382 bytes
-rw-r--r--tests/someip2.out2
-rw-r--r--tests/someip2.pcapbin0 -> 98 bytes
-rw-r--r--tests/spb.out53
-rw-r--r--tests/spb.pcapbin0 -> 75249 bytes
-rw-r--r--tests/spb_bpduv4-v.out375
-rw-r--r--tests/spb_bpduv4.out25
-rw-r--r--tests/spb_bpduv4.pcapbin0 -> 5974 bytes
-rw-r--r--tests/ssh.out54
-rw-r--r--tests/ssh.pcapbin0 -> 12848 bytes
-rw-r--r--tests/status_code-0.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-1.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-10.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-100.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-101.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-102.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-103.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-104.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-105.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-106.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-107.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-11.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-12.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-13.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-14.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-15.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-16.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-17.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-18.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-19.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-2.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-20.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-21.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-22.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-23.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-24.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-25.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-26.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-27.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-28.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-29.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-3.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-30.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-31.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-32.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-33.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-34.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-35.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-36.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-37.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-38.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-39.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-4.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-40.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-41.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-42.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-43.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-44.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-45.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-46.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-47.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-48.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-49.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-5.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-50.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-51.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-52.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-53.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-54.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-55.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-56.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-57.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-58.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-59.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-6.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-60.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-61.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-62.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-63.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-64.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-65.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-66.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-67.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-68.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-69.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-7.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-70.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-71.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-72.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-73.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-74.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-75.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-76.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-77.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-78.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-79.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-8.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-80.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-81.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-82.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-83.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-84.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-85.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-86.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-87.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-88.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-89.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-9.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-90.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-91.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-92.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-93.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-94.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-95.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-96.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-97.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-98.pcapbin0 -> 94 bytes
-rw-r--r--tests/status_code-99.pcapbin0 -> 94 bytes
-rw-r--r--tests/stp-heapoverflow-1.out27
-rw-r--r--tests/stp-heapoverflow-1.pcapbin0 -> 514 bytes
-rw-r--r--tests/stp-heapoverflow-2.out27
-rw-r--r--tests/stp-heapoverflow-2.pcapbin0 -> 528 bytes
-rw-r--r--tests/stp-heapoverflow-3.out27
-rw-r--r--tests/stp-heapoverflow-3.pcapbin0 -> 486 bytes
-rw-r--r--tests/stp-heapoverflow-4.out27
-rw-r--r--tests/stp-heapoverflow-4.pcapbin0 -> 556 bytes
-rw-r--r--tests/stp-v.out42
-rw-r--r--tests/stp-v4-length-sigsegv.out1
-rw-r--r--tests/stp-v4-length-sigsegv.pcapbin0 -> 246 bytes
-rw-r--r--tests/syslog-v.out16
-rw-r--r--tests/syslog_udp.pcapbin0 -> 515 bytes
-rw-r--r--tests/tcp-auth-heapoverflow.out2
-rw-r--r--tests/tcp-auth-heapoverflow.pcapbin0 -> 104 bytes
-rw-r--r--tests/tcp_header_heapoverflow.out2
-rw-r--r--tests/tcp_header_heapoverflow.pcapbin0 -> 86 bytes
-rw-r--r--tests/telnet-iac-check-oobr.out2
-rw-r--r--tests/telnet-iac-check-oobr.pcapbin0 -> 65575 bytes
-rw-r--r--tests/tfo-5c1fa7f9ae91.pcapbin0 -> 1084 bytes
-rw-r--r--tests/tfo.out14
-rw-r--r--tests/tftp-T.out7
-rw-r--r--tests/tftp-heapoverflow.out2
-rw-r--r--tests/tftp-heapoverflow.pcapbin0 -> 88 bytes
-rw-r--r--tests/tftp.out7
-rw-r--r--tests/tftp.pcapbin0 -> 1643 bytes
-rw-r--r--tests/tok2str-oobr-1.out56
-rw-r--r--tests/tok2str-oobr-1.pcapbin0 -> 361 bytes
-rw-r--r--tests/tok2str-oobr-2.out19
-rw-r--r--tests/tok2str-oobr-2.pcapbin0 -> 170 bytes
-rw-r--r--tests/trunc_aack.out1
-rw-r--r--tests/truncated-aack.pcapbin0 -> 50 bytes
-rw-r--r--tests/udld-inf-loop-1-v.out9
-rw-r--r--tests/udld-inf-loop-1.pcapngbin0 -> 220 bytes
-rw-r--r--tests/udld-v.out261
-rw-r--r--tests/udp-length-heapoverflow.out2
-rw-r--r--tests/udp-length-heapoverflow.pcapbin0 -> 78 bytes
-rw-r--r--tests/unaligned-nfs-1.out2
-rw-r--r--tests/unaligned-nfs-1.pcapbin0 -> 222 bytes
-rw-r--r--tests/unsupported-link-type-160.out3
-rw-r--r--tests/unsupported-link-type-160.pcapbin0 -> 63 bytes
-rw-r--r--tests/unsupported-link-type-dbus.out26
-rw-r--r--tests/unsupported-link-type-dbus.pcapbin0 -> 418 bytes
-rw-r--r--tests/vqp-oobr.out3
-rw-r--r--tests/vqp-oobr.pcapbin0 -> 94 bytes
-rw-r--r--tests/vrrp-v.out266
-rw-r--r--tests/vrrp-vrrp_print-oobr-2.out20
-rw-r--r--tests/vrrp-vrrp_print-oobr-2.pcapbin0 -> 724 bytes
-rw-r--r--tests/vrrp-vrrp_print-oobr.out6
-rw-r--r--tests/vrrp-vrrp_print-oobr.pcapbin0 -> 264 bytes
-rw-r--r--tests/vrrp.out165
-rw-r--r--tests/vrrp.pcapbin0 -> 16344 bytes
-rw-r--r--tests/vsock-1-v.out20
-rw-r--r--tests/vsock-1-vv.out23
-rw-r--r--tests/vsock-1.out10
-rw-r--r--tests/vsock-1.pcapngbin0 -> 1456 bytes
-rw-r--r--tests/vtp_asan-2.out2
-rw-r--r--tests/vtp_asan-2.pcapbin0 -> 108 bytes
-rw-r--r--tests/vtp_asan-3.out2
-rw-r--r--tests/vtp_asan-3.pcapbin0 -> 185 bytes
-rw-r--r--tests/vtp_asan.out6
-rw-r--r--tests/vtp_asan.pcapbin0 -> 154 bytes
-rw-r--r--tests/vxlan.out20
-rw-r--r--tests/vxlan.pcapbin0 -> 1552 bytes
-rw-r--r--tests/wb-oobr.out15
-rw-r--r--tests/wb-oobr.pcapbin0 -> 396 bytes
-rw-r--r--tests/whois-v.out34
-rw-r--r--tests/whois.out11
-rw-r--r--tests/whois.pcapbin0 -> 1084 bytes
-rw-r--r--tests/zephyr-oobr.out2
-rw-r--r--tests/zephyr-oobr.pcapbin0 -> 65575 bytes
-rw-r--r--tests/zmtp1-inf-loop-1.out2
-rw-r--r--tests/zmtp1-inf-loop-1.pcapngbin0 -> 208 bytes
-rw-r--r--tests/zmtp1.out67
-rw-r--r--tests/zmtp1.pcapbin0 -> 2119 bytes
-rw-r--r--timeval-operations.h73
-rw-r--r--udp.h250
-rw-r--r--util-print.c979
-rw-r--r--varattrs.h59
1564 files changed, 232577 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
new file mode 100644
index 0000000..33ced66
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,1736 @@
+Friday, April 7, 2023 / The Tcpdump Group
+ Summary for 4.99.4 tcpdump release
+ Source code:
+ Fix spaces before tabs in indentation.
+ Updated printers:
+ LSP ping: Fix "Unused value" warnings from Coverity.
+ CVE-2023-1801: Fix an out-of-bounds write in the SMB printer.
+ DNS: sync resource types with IANA.
+ ICMPv6: Update the output to show a RPL DAO field name.
+ Geneve: Fix the Geneve UDP port test.
+ Building and testing:
+ Require at least autoconf 2.69.
+ Don't check for strftime(), as it's in C90 and beyond.
+ Update config.{guess,sub}, timestamps 2023-01-01,2023-01-21.
+ Documentation:
+ man: Document TCP flag names better.
+
+Thursday, January 12, 2023 / The Tcpdump Group
+ Summary for 4.99.3 tcpdump release
+ Updated printers:
+ PTP: Use the proper values for the control field and print un-allocated
+ values for the message field as "Reserved" instead of "none".
+ Source code:
+ smbutil.c: Replace obsolete function call (asctime)
+ Building and testing:
+ cmake: Update the minimum required version to 2.8.12 (except Windows).
+ CI: Introduce and use TCPDUMP_CMAKE_TAINTED.
+ Makefile.in: Add the releasecheck target.
+ Makefile.in: Add "make -s install" in the releasecheck target.
+ Cirrus CI: Run the "make releasecheck" command in the Linux task.
+ Makefile.in: Add the whitespacecheck target.
+ Cirrus CI: Run the "make whitespacecheck" command in the Linux task.
+ Address all shellcheck warnings in update-test.sh.
+ Makefile.in: Get rid of a remain of gnuc.h.
+ Documentation:
+ Reformat the installation notes (INSTALL.txt) in Markdown.
+ Convert CONTRIBUTING to Markdown.
+ CONTRIBUTING.md: Document the use of "protocol: " in a commit summary.
+ Add a README file for NetBSD.
+ Fix CMake build to set man page section numbers in tcpdump.1
+
+Saturday, December 31, 2022 / The Tcpdump Group
+ Summary for 4.99.2 tcpdump release
+ Updated printers:
+ BGP: Update cease notification decoding to RFC 9003.
+ BGP: decode BGP link-bandwidth extended community properly.
+ BGP: Fix parsing the AIGP attribute
+ BGP: make sure the path attributes don't go past the end of the packet.
+ BGP: Shutdown message can be up to 255 bytes length according to rfc9003
+ DSA: correctly determine VID.
+ EAP: fix some length checks and output issues.
+ 802.11: Fix the misleading comment regarding "From DS", "To DS" Frame
+ Control Flags.
+ 802.11: Fetch the CF and TIM IEs a field at a time.
+ 802.15.4, BGP, LISP: fix some length checks, compiler warnings,
+ and undefined behavior warnings.
+ PFLOG: handle LINKTYPE_PFLOG/DLT_PFLOG files from all OSes on all
+ OSes.
+ RRCP: support more Realtek protocols than just RRCP.
+ MPLS: show the EXP field as TC, as per RFC 5462.
+ ICMP: redo MPLS Extension code as general ICMP Extension code.
+ VQP: Do not print unknown error codes twice.
+ Juniper: Add some bounds checks.
+ Juniper: Don't treat known DLT_ types as "Unknown".
+ lwres: Fix a length check, update a variable type.
+ EAP: Fix some undefined behaviors at runtime.
+ Ethernet: Rework the length checks, add a length check.
+ IPX: Add two length checks.
+ Zephyr: Avoid printing non-ASCII characters.
+ VRRP: Print the protocol name before any GET_().
+ DCCP: Get rid of trailing commas in lists.
+ Juniper: Report invalid packets as invalid, not truncated.
+ IPv6: Remove an obsolete code in an always-false #if wrapper.
+ ISAKMP: Use GET_U_1() to replace a direct dereference.
+ RADIUS: Use GET_U_1() to replace a direct dereference.
+ TCP: Fix an invalid check.
+ RESP: Fix an invalid check.
+ RESP: Remove an unnecessary test.
+ Arista: Refine the output format and print HwInfo.
+ sFlow: add support for IPv6 agent, add a length check.
+ VRRP: add support for IPv6.
+ OSPF: Update to match the Router Properties registry.
+ OSPF: Remove two unnecessary dereferences.
+ OSPF: Add support bit Nt RFC3101.
+ OSPFv3: Remove two unnecessary dereferences.
+ ICMPv6: Fix output for Router Renumbering messages.
+ ICMPv6: Fix the Node Information flags.
+ ICMPv6: Remove an unused macro and extra blank lines.
+ ICMPv6: Add a length check in the rpl_dio_print() function.
+ ICMPv6: Use GET_IP6ADDR_STRING() in the rpl_dio_print() function.
+ IPv6: Add some checks for the Hop-by-Hop Options header
+ IPv6: Add a check for the Jumbo Payload Hop-by-Hop option.
+ NFS: Fix the format for printing an unsigned int
+ PTP: fix printing of the correction fields
+ PTP: Use ND_LCHECK_U for checking invalid length.
+ WHOIS: Add its own printer source file and printer function
+ MPTCP: print length before subtype inside MPTCP options
+ ESP: Add a workaround to a "use-of-uninitialized-value".
+ PPP: Add tests to avoid incorrectly re-entering ppp_hdlc().
+ PPP: Don't process further if protocol is unknown (-e option).
+ PPP: Change the pointer to packet data.
+ ZEP: Add three length checks.
+ Add some const qualifiers.
+ Building and testing:
+ Update config.guess and config.sub.
+ Use AS_HELP_STRING macro instead of AC_HELP_STRING.
+ Handle some Autoconf/make errors better.
+ Fix an error when cross-compiling.
+ Use "git archive" for the "make releasetar" process.
+ Remove the release candidate rcX targets.
+ Mend "make check" on Solaris 9 with Autoconf.
+ Address assorted compiler warnings.
+ Fix auto-enabling of Capsicum on FreeBSD with Autoconf.
+ Treat "msys" as Windows for test exit statuses.
+ Clean up some help messages in configure.
+ Use unified diff by default.
+ Remove awk code from mkdep.
+ Fix configure test errors with Clang 15
+ CMake: Prevent stripping of the RPATH on installation.
+ AppVeyor CI: update Npcap site, update to 1.12 SDK.
+ Cirrus CI: Use the same configuration as for the main branch.
+ CI: Add back running tcpdump -J/-L and capture, now with Cirrus VMs.
+ Remove four test files (They are now in the libpcap tests directory).
+ On Solaris, for 64-bit builds, use the 64-bit pcap-config.
+ Tell CMake not to check for a C++ compiler.
+ CMake: Add a way to request -Werror and equivalents.
+ configure: Special-case macOS /usr/bin/pcap-config as we do in CMake.
+ configure: Use pcap-config --static-pcap-only if available.
+ configure: Use ac_c_werror_flag to force unknown compiler flags to fail.
+ configure: Use AC_COMPILE_IFELSE() and AC_LANG_SOURCE() for testing
+ flags.
+ Run the test that fails on OpenBSD only if we're not on OpenBSD.
+ Source code:
+ Fix some snapend-changing routines to protect against pointer
+ underflow.
+ Use __func__ from C99 in some function calls.
+ Memory allocator: Update nd_add_alloc_list() to a static function.
+ addrtoname.c: Fix two invalid tests.
+ Use more S_SUCCESS and S_ERR_HOST_PROGRAM in main().
+ Add some comments about "don't use GET_IP6ADDR_STRING()".
+ Assign ndo->ndo_packetp in pretty_print_packet().
+ Add ND_LCHECKMSG_U, ND_LCHECK_U, ND_LCHECKMSG_ZU and ND_LCHECK_ZU macros.
+ Update tok2strbuf() to a static function.
+ netdissect.h: Keep the link-layer dissectors names sorted.
+ setsignal(): Set SA_RESTART on non-lethal signals (REQ_INFO, FLUSH_PCAP)
+ to avoid corrupting binary pcap output.
+ Use __builtin_unreachable().
+ Fail if nd_push_buffer() or nd_push_snaplen() fails.
+ Improve code style and fix many typos.
+ Documentation:
+ Some man page cleanups.
+ Update the print interface for the packet count to stdout.
+ Note that we require compilers to support at least some of C99.
+ Update AIX and Solaris-related specifics.
+ INSTALL.txt: Add doc/README.*, delete the deleted win32 directory.
+ Update README.md and README.Win32.md.
+ Update some comments with new RFC numbers.
+
+Wednesday, June 9, 2021 by gharris
+ Summary for 4.99.1 tcpdump release
+ Source code:
+ Squelch some compiler warnings
+ ICMP: Update the snapend for some nested IP packets.
+ MACsec: Update the snapend thus the ICV field is not payload
+ for the caller.
+ EIGRP: Fix packet header fields
+ SMB: Disable printer by default in CMake builds
+ OLSR: Print the protocol name even if the packet is invalid
+ MSDP: Print ": " before the protocol name
+ ESP: Remove padding, padding length and next header from the buffer
+ DHCPv6: Update the snapend for nested DHCPv6 packets
+ OpenFlow 1.0: Get snapend right for nested frames.
+ TCP: Update the snapend before decoding a MPTCP option
+ Ethernet, IEEE 802.15.4, IP, L2TP, TCP, ZEP: Add bounds checks
+ ForCES: Refine SPARSEDATA-TLV length check.
+ ASCII/hex: Use nd_trunc_longjmp() in truncation cases
+ GeoNet: Add a ND_TCHECK_LEN() call
+ Replace ND_TCHECK_/memcpy() pairs with GET_CPY_BYTES().
+ BGP: Fix overwrites of global 'astostr' temporary buffer
+ ARP: fix overwrites of static buffer in q922_string().
+ Frame Relay: have q922_string() handle errors better.
+ Building and testing:
+ Rebuild configure script when building release
+ Fix "make clean" for out-of-tree autotools builds
+ CMake: add stuff from CMAKE_PREFIX_PATH to PKG_CONFIG_PATH.
+ Documentation:
+ man: Update a reference as www.cifs.org is gone. [skip ci]
+ man: Update DNS sections
+ Solaris:
+ Fix a compile error with Sun C
+
+Wednesday, December 30, 2020, by mcr@sandelman.ca, denis and fxl.
+ Summary for 4.99.0 tcpdump release
+ CVE-2018-16301: For the -F option handle large input files safely.
+ Improve the contents, wording and formatting of the man page.
+ Print unsupported link-layer protocol packets in hex.
+ Add support for new network protocols and DLTs: Arista, Autosar SOME/IP,
+ Broadcom LI and Ethernet switches tag, IEEE 802.15.9, IP-over-InfiniBand
+ (IPoIB), Linux SLL2, Linux vsockmon, MACsec, Marvell Distributed Switch
+ Architecture, OpenFlow 1.3, Precision Time Protocol (PTP), SSH, WHOIS,
+ ZigBee Encapsulation Protocol (ZEP).
+ Make protocol-specific updates for: AH, DHCP, DNS, ESP, FRF.16, HNCP,
+ ICMP6, IEEE 802.15.4, IPv6, IS-IS, Linux SLL, LLDP, LSP ping, MPTCP, NFS,
+ NSH, NTP, OSPF, OSPF6, PGM, PIM, PPTP, RADIUS, RSVP, Rx, SMB, UDLD,
+ VXLAN-GPE.
+ User interface:
+ Make SLL2 the default for Linux "any" pseudo-device.
+ Add --micro and --nano shorthands.
+ Add --count to print a counter only instead of decoding.
+ Add --print, to cause packet printing even with -w.
+ Add support for remote capture if libpcap supports it.
+ Display the "wireless" flag and connection status.
+ Flush the output packet buffer on a SIGUSR2.
+ Add the snapshot length to the "reading from file ..." message.
+ Fix local time printing (DST offset in timestamps).
+ Allow -C arguments > 2^31-1 GB if they can fit into a long.
+ Handle very large -f files by rejecting them.
+ Report periodic stats only when safe to do so.
+ Print the number of packets captured only as often as necessary.
+ With no -s, or with -s 0, don't specify the snapshot length with newer
+ versions of libpcap.
+ Improve version and usage message printing.
+ Building and testing:
+ Install into bindir, not sbindir.
+ autoconf: replace --with-system-libpcap with --disable-local-libpcap.
+ Require the compiler to support C99.
+ Better detect and use various C compilers and their features.
+ Add CMake as the second build system.
+ Make out-of-tree builds more reliable.
+ Use pkg-config to detect libpcap if available.
+ Improve Windows support.
+ Add more tests and improve the scripts that run them.
+ Test both with "normal" and "x87" floating-point.
+ Eliminate dependency on libdnet.
+ FreeBSD:
+ Print a proper error message about monitor mode VAP.
+ Use libcasper if available.
+ Fix failure to capture on RDMA device.
+ Include the correct capsicum header.
+ Source code:
+ Start the transition to longjmp() for packet truncation handling.
+ Introduce new helper functions, including GET_*(), nd_print_protocol(),
+ nd_print_invalid(), nd_print_trunc(), nd_trunc_longjmp() and others.
+ Put integer signedness right in many cases.
+ Introduce nd_uint*, nd_mac_addr, nd_ipv4 and nd_ipv6 types to fix
+ alignment issues, especially on SPARC.
+ Fix many C compiler, Coverity, UBSan and cppcheck warnings.
+ Fix issues detected with AddressSanitizer.
+ Remove many workarounds for older compilers and OSes.
+ Add a sanity check on packet header length.
+ Add and remove plenty of bounds checks.
+ Clean up pcap_findalldevs() call to find the first interface.
+ Use a short timeout, rather than immediate mode, for text output.
+ Handle DLT_ENC files *not* written on the same OS and byte-order host.
+ Add, and use, macros to do locale-independent case mapping.
+ Use a table instead of getprotobynumber().
+ Get rid of ND_UNALIGNED and ND_TCHECK().
+ Make roundup2() generally available.
+ Resync SMI list against Wireshark.
+ Fix many typos.
+
+Friday, September 20, 2019, by mcr@sandelman.ca
+ A huge thank you to Denis, Francois-Xavier and Guy who did much of the heavy lifting.
+ Summary for 4.9.3 tcpdump release
+ Fix buffer overflow/overread vulnerabilities:
+ CVE-2017-16808 (AoE)
+ CVE-2018-14468 (FrameRelay)
+ CVE-2018-14469 (IKEv1)
+ CVE-2018-14470 (BABEL)
+ CVE-2018-14466 (AFS/RX)
+ CVE-2018-14461 (LDP)
+ CVE-2018-14462 (ICMP)
+ CVE-2018-14465 (RSVP)
+ CVE-2018-14881 (BGP)
+ CVE-2018-14464 (LMP)
+ CVE-2018-14463 (VRRP)
+ CVE-2018-14467 (BGP)
+ CVE-2018-10103 (SMB - partially fixed, but SMB printing disabled)
+ CVE-2018-10105 (SMB - too unreliably reproduced, SMB printing disabled)
+ CVE-2018-14880 (OSPF6)
+ CVE-2018-16451 (SMB)
+ CVE-2018-14882 (RPL)
+ CVE-2018-16227 (802.11)
+ CVE-2018-16229 (DCCP)
+ CVE-2018-16230 (BGP)
+ CVE-2018-16452 (SMB)
+ CVE-2018-16300 (BGP)
+ CVE-2018-16228 (HNCP)
+ CVE-2019-15166 (LMP)
+ CVE-2019-15167 (VRRP)
+ Fix for cmdline argument/local issues:
+ CVE-2018-14879 (tcpdump -V)
+
+Sunday September 3, 2017 denis@ovsienko.info
+ Summary for 4.9.2 tcpdump release
+ Do not use getprotobynumber() for protocol name resolution. Do not do
+ any protocol name resolution if -n is specified.
+ Improve errors detection in the test scripts.
+ Fix a segfault with OpenSSL 1.1 and improve OpenSSL usage.
+ Clean up IS-IS printing.
+ Fix buffer overflow vulnerabilities:
+ CVE-2017-11543 (SLIP)
+ CVE-2017-13011 (bittok2str_internal)
+ Fix infinite loop vulnerabilities:
+ CVE-2017-12989 (RESP)
+ CVE-2017-12990 (ISAKMP)
+ CVE-2017-12995 (DNS)
+ CVE-2017-12997 (LLDP)
+ Fix buffer over-read vulnerabilities:
+ CVE-2017-11541 (safeputs)
+ CVE-2017-11542 (PIMv1)
+ CVE-2017-12893 (SMB/CIFS)
+ CVE-2017-12894 (lookup_bytestring)
+ CVE-2017-12895 (ICMP)
+ CVE-2017-12896 (ISAKMP)
+ CVE-2017-12897 (ISO CLNS)
+ CVE-2017-12898 (NFS)
+ CVE-2017-12899 (DECnet)
+ CVE-2017-12900 (tok2strbuf)
+ CVE-2017-12901 (EIGRP)
+ CVE-2017-12902 (Zephyr)
+ CVE-2017-12985 (IPv6)
+ CVE-2017-12986 (IPv6 routing headers)
+ CVE-2017-12987 (IEEE 802.11)
+ CVE-2017-12988 (telnet)
+ CVE-2017-12991 (BGP)
+ CVE-2017-12992 (RIPng)
+ CVE-2017-12993 (Juniper)
+ CVE-2017-12994 (BGP)
+ CVE-2017-12996 (PIMv2)
+ CVE-2017-12998 (ISO IS-IS)
+ CVE-2017-12999 (ISO IS-IS)
+ CVE-2017-13000 (IEEE 802.15.4)
+ CVE-2017-13001 (NFS)
+ CVE-2017-13002 (AODV)
+ CVE-2017-13003 (LMP)
+ CVE-2017-13004 (Juniper)
+ CVE-2017-13005 (NFS)
+ CVE-2017-13006 (L2TP)
+ CVE-2017-13007 (Apple PKTAP)
+ CVE-2017-13008 (IEEE 802.11)
+ CVE-2017-13009 (IPv6 mobility)
+ CVE-2017-13010 (BEEP)
+ CVE-2017-13012 (ICMP)
+ CVE-2017-13013 (ARP)
+ CVE-2017-13014 (White Board)
+ CVE-2017-13015 (EAP)
+ CVE-2017-11543 (SLIP)
+ CVE-2017-13016 (ISO ES-IS)
+ CVE-2017-13017 (DHCPv6)
+ CVE-2017-13018 (PGM)
+ CVE-2017-13019 (PGM)
+ CVE-2017-13020 (VTP)
+ CVE-2017-13021 (ICMPv6)
+ CVE-2017-13022 (IP)
+ CVE-2017-13023 (IPv6 mobility)
+ CVE-2017-13024 (IPv6 mobility)
+ CVE-2017-13025 (IPv6 mobility)
+ CVE-2017-13026 (ISO IS-IS)
+ CVE-2017-13027 (LLDP)
+ CVE-2017-13028 (BOOTP)
+ CVE-2017-13029 (PPP)
+ CVE-2017-13030 (PIM)
+ CVE-2017-13031 (IPv6 fragmentation header)
+ CVE-2017-13032 (RADIUS)
+ CVE-2017-13033 (VTP)
+ CVE-2017-13034 (PGM)
+ CVE-2017-13035 (ISO IS-IS)
+ CVE-2017-13036 (OSPFv3)
+ CVE-2017-13037 (IP)
+ CVE-2017-13038 (PPP)
+ CVE-2017-13039 (ISAKMP)
+ CVE-2017-13040 (MPTCP)
+ CVE-2017-13041 (ICMPv6)
+ CVE-2017-13042 (HNCP)
+ CVE-2017-13043 (BGP)
+ CVE-2017-13044 (HNCP)
+ CVE-2017-13045 (VQP)
+ CVE-2017-13046 (BGP)
+ CVE-2017-13047 (ISO ES-IS)
+ CVE-2017-13048 (RSVP)
+ CVE-2017-13049 (Rx)
+ CVE-2017-13050 (RPKI-Router)
+ CVE-2017-13051 (RSVP)
+ CVE-2017-13052 (CFM)
+ CVE-2017-13053 (BGP)
+ CVE-2017-13054 (LLDP)
+ CVE-2017-13055 (ISO IS-IS)
+ CVE-2017-13687 (Cisco HDLC)
+ CVE-2017-13688 (OLSR)
+ CVE-2017-13689 (IKEv1)
+ CVE-2017-13690 (IKEv2)
+ CVE-2017-13725 (IPv6 routing headers)
+
+Sunday July 23, 2017 denis@ovsienko.info
+ Summary for 4.9.1 tcpdump release
+ CVE-2017-11108/Fix bounds checking for STP.
+ Make assorted documentation updates and fix a few typos in tcpdump output.
+ Fixup -C for file size >2GB (GH #488).
+ Show AddressSanitizer presence in version output.
+ Fix a bug in test scripts (exposed in GH #613).
+ On FreeBSD adjust Capsicum capabilities for netmap.
+ On Linux fix a use-after-free when the requested interface does not exist.
+
+Wednesday January 18, 2017 devel.fx.lebail@orange.fr
+ Summary for 4.9.0 tcpdump release
+ General updates:
+ Fix some heap overflows found with American Fuzzy Lop by Hanno Boeck and others
+ (More information in the log with CVE-2016-* and CVE-2017-*)
+ Change the way protocols print link-layer addresses (Fix heap overflows
+ in CALM-FAST and GeoNetworking printers)
+ Pass correct caplen value to ether_print() and some other functions
+ Fix lookup_nsap() to match what isonsap_string() expects
+ Clean up relative time stamp printing (Fix an array overflow)
+ Fix some alignment issues with GCC on Solaris 10 SPARC
+ Add some ND_TTEST_/ND_TCHECK_ macros to simplify writing bounds checks
+ Add a fn_printztn() which returns the number of bytes processed
+ Add nd_init() and nd_cleanup() functions. Improve libsmi support
+ Add CONTRIBUTING file
+ Add a summary comment in all printers
+ Compile with more warning options in devel mode if supported (-Wcast-qual, ...)
+ Fix some leaks found by Valgrind/Memcheck
+ Fix a bunch of de-constifications
+ Squelch some Coverity warnings and some compiler warnings
+ Update Coverity and Travis-CI setup
+ Update Visual Studio files
+
+ Frontend:
+ Fix capsicum support to work with zerocopy buffers in bpf
+ Try opening interfaces by name first, then by name-as-index
+ Work around pcap_create() failures fetching time stamp type lists
+ Fix a segmentation fault with 'tcpdump -J'
+ Improve addrtostr6() bounds checking
+ Add exit_tcpdump() function
+ Don't drop CAP_SYS_CHROOT before chrooting
+ Fixes issue where statistics not reported when -G and -W options used
+
+ Updated printers:
+ 802.11: Beginnings of 11ac radiotap support
+ 802.11: Check the Protected bit for management frames
+ 802.11: Do bounds checking on last_presentp before dereferencing it (Fix a heap overflow)
+ 802.11: Fix the radiotap printer to handle the special bits correctly
+ 802.11: If we have the MCS field, it's 11n
+ 802.11: Only print unknown frame type or subtype messages once
+ 802.11: Radiotap dBm values get printed as dB; Update a test output accordingly
+ 802.11: Source and destination addresses were backwards
+ AH: Add a bounds check
+ AH: Report to our caller that dissection failed if a bounds check fails
+ AP1394: Print src > dst, not dst > src
+ ARP: Don't assume the target hardware address is <= 6 octets long (Fix a heap overflow)
+ ATALK: Add bounds and length checks (Fix heap overflows)
+ ATM: Add some bounds checks (Fix a heap overflow)
+ ATM: Fix an incorrect bounds check
+ BFD: Update specification from draft to RFC 5880
+ BFD: Update to print optional authentication field
+ BGP: Add support for the AIGP attribute (RFC7311)
+ BGP: Print LARGE_COMMUNITY Path Attribute
+ BGP: Update BGP numbers from IANA; Print minor values for FSM notification
+ BOOTP: Add a bounds check
+ Babel: Add decoder for source-specific extension
+ CDP: Filter out non-printable characters
+ CFM: Fixes to match the IEEE standard, additional bounds and length checks
+ CSLIP: Add more bounds checks (Fix a heap overflow)
+ ClassicalIPoATM: Add a bounds check on LLC+SNAP header (Fix a heap overflow)
+ DHCP: Fix MUDURL and TZ options
+ DHCPv6: Process MUDURL and TZ options
+ DHCPv6: Update Status Codes with RFCs/IANA names
+ DNS: Represent the "DNSSEC OK" bit as "DO" instead of "OK". Add a test case
+ DTP: Improve packet integrity checks
+ EGP: Fix bounds checks
+ ESP: Don't use OpenSSL_add_all_algorithms() in OpenSSL 1.1.0 or later
+ Ethernet: Add some bounds checking before calling isoclns_print (Fix a heap overflow)
+ Ethernet: Print the Length/Type field as length when needed
+ FDDI: Fix -e output for FDDI
+ FR: Add some packet-length checks and improve Q.933 printing (Fix heap overflows)
+ GRE: Add some bounds checks (Fix heap overflows)
+ Geneve: Fix error message with invalid option length; Update list option classes
+ HNCP: Fix incorrect time interval format. Fix handling of IPv4 prefixes
+ ICMP6: Fetch a 32-bit big-endian quantity with EXTRACT_32BITS()
+ IGMP: Add a length check
+ IP: Add a bounds check (Fix a heap overflow)
+ IP: Check before fetching the protocol version (Fix a heap overflow)
+ IP: Don't try to dissect if IP version != 4 (Fix a heap overflow)
+ IP: Stop processing IPPROTO_ values once we hit IPPROTO_IPCOMP
+ IPComp: Check whether we have the CPI before we fetch it (Fix a heap overflow)
+ IPoFC: Fix -e output (IP-over-Fibre Channel)
+ IPv6: Don't overwrite the destination IPv6 address for routing headers
+ IPv6: Fix header printing
+ IPv6: Stop processing IPPROTO_ values once we hit IPPROTO_IPCOMP
+ ISAKMP: Clean up parsing of IKEv2 Security Associations
+ ISOCLNS/IS-IS: Add support for Purge Originator Identifier (RFC6232) and test cases
+ ISOCLNS/IS-IS: Don't overwrite packet data when checking the signature
+ ISOCLNS/IS-IS: Filter out non-printable characters
+ ISOCLNS/IS-IS: Fix segmentation faults
+ ISOCLNS/IS-IS: Have signature_verify() do the copying and clearing
+ ISOCLNS: Add some bounds checks
+ Juniper: Make sure a Juniper header TLV isn't bigger than what's left in the packet (Fix a heap overflow)
+ LLC/SNAP: With -e, print the LLC header before the SNAP header; without it, cut the SNAP header
+ LLC: Add a bounds check (Fix a heap overflow)
+ LLC: Clean up printing of LLC packets
+ LLC: Fix the printing of RFC 948-style IP packets
+ LLC: Skip the LLC and SNAP headers with -x for 802.11 and some other protocols
+ LLDP: Implement IANA OUI and LLDP MUD option
+ MPLS LSP ping: Update printing for RFC 4379, bug fixes, more bounds checks
+ MPLS: "length" is now the *remaining* packet length
+ MPLS: Add bounds and length checks (Fix a heap overflow)
+ NFS: Don't assume the ONC RPC header is nicely aligned
+ NFS: Don't overflow the Opaque_Handle buffer (Fix a segmentation fault)
+ NFS: Don't run past the end of an NFSv3 file handle
+ OLSR: Add a test to cover a HNA sgw case
+ OLSR: Fix 'Advertised networks' count
+ OLSR: Fix printing of smart-gateway HNAs in IPv4
+ OSPF: Add a bounds check for the Hello packet options
+ OSPF: Do more bounds checking
+ OSPF: Fix a segmentation fault
+ OSPF: Fix printing 'ospf_topology_values' default
+ OTV: Add missing bounds checks
+ PGM: Print the formatted IP address, not the raw binary address, as a string
+ PIM: Add some bounds checking (Fix a heap overflow)
+ PIMv2: Fix checksumming of Register messages
+ PPP: Add some bounds checks (Fix a heap overflow)
+ PPP: Report invalid PAP AACK/ANAK packets
+ Q.933: Add a missing bounds check
+ RADIUS: Add Value 13 "VLAN" to Tunnel-Type attribute
+ RADIUS: Filter out non-printable characters
+ RADIUS: Translate UDP/1700 as RADIUS
+ RESP: Do better checking of RESP packets
+ RPKI-RTR: Add a return value check for "fn_printn" call
+ RPKI-RTR: Remove printing when truncated condition already detected
+ RPL: Fix 'Consistency Check' control code
+ RPL: Fix suboption print
+ RSVP: An INTEGRITY object in a submessage covers only the submessage
+ RSVP: Fix an infinite loop; Add bounds and length checks
+ RSVP: Fix some if statements missing brackets
+ RSVP: Have signature_verify() do the copying and clearing
+ RTCP: Add some bounds checks
+ RTP: Add some bounds checks, fix two segmentation faults
+ SCTP: Do more bounds checking
+ SFLOW: Fix bounds checking
+ SLOW: Fix bugs, add checks
+ SMB: Before fetching the flags2 field, make sure we have it
+ SMB: Do bounds checks on NBNS resource types and resource data lengths
+ SNMP: Clean up the "have libsmi but no modules loaded" case
+ SNMP: Clean up the object abbreviation list and fix the code to match them
+ SNMP: Do bounds checks when printing character and octet strings
+ SNMP: Improve ASN.1 bounds checks
+ SNMP: More bounds and length checks
+ STP: Add a bunch of bounds checks, and fix some printing (Fix heap overflows)
+ STP: Filter out non-printable characters
+ TCP: Add bounds and length checks for packets with TCP option 20
+ TCP: Correct TCP option Kind value for TCP Auth and add SCPS-TP
+ TCP: Fix two bounds checks (Fix heap overflows)
+ TCP: Make sure we have the data offset field before fetching it (Fix a heap overflow)
+ TCP: Put TCP-AO option decoding right
+ TFTP: Don't use strchr() to scan packet data (Fix a heap overflow)
+ Telnet: Add some bounds checks
+ TokenRing: Fix -e output
+ UDLD: Fix an infinite loop
+ UDP: Add a bounds check (Fix a heap overflow)
+ UDP: Check against the packet length first
+ VAT: Add some bounds checks
+ VTP: Add a test on Mgmt Domain Name length
+ VTP: Add bounds checks and filter out non-printable characters
+ VXLAN: Add a bound check and a test case
+ ZeroMQ: Fix an infinite loop
+
+Tuesday October 25, 2016 mcr@sandelman.ca
+ Summary for 4.8.1 tcpdump release
+ Fix "-x" for Apple PKTAP and PPI packets
+ Improve separation frontend/backend (tcpdump/libnetdissect)
+ Fix display of timestamps with -tt, -ttt and -ttttt options
+ Add support for the Marvell Extended Distributed Switch Architecture header
+ Use PRIx64 to print a 64-bit number in hex.
+ Printer for HNCP (RFCs 7787 and 7788).
+ dagid is always an IPv6 address, not an opaque 128-bit string, and other fixes to RPL printer.
+ RSVP: Add bounds and length checks
+ OSPF: Do more bounds checking
+ Handle OpenSSL 1.1.x.
+ Initial support for the REdis Serialization Protocol known as RESP.
+ Add printing function for Generic Protocol Extension for VXLAN
+ draft-ietf-nvo3-vxlan-gpe-01
+ Network Service Header: draft-ietf-sfc-nsh-01
+ Don't recompile the filter if the new file has the same DLT.
+ Pass an adjusted struct pcap_pkthdr to the sub-printer.
+ Add three test cases for already fixed CVEs
+ CVE-2014-8767: OLSR
+ CVE-2014-8768: Geonet
+ CVE-2014-8769: AODV
+ Don't do the DDP-over-UDP heuristic first: GitHub issue #499.
+ Use the new debugging routines in libpcap.
+ Harmonize TCP source or destination ports tests with UDP ones
+ Introduce data types to use for integral values in packet structures.
+ RSVP: Fix an infinite loop
+ Support of Type 3 and Type 4 LISP packets.
+ Don't require IPv6 library support in order to support IPv6 addresses.
+ Many many changes to support libnetdissect usage.
+ Add a test that makes unaligned accesses: GitHub issue #478.
+ add a DNSSEC test case: GH #445 and GH #467.
+ BGP: add decoding of ADD-PATH capability
+ fixes to LLC header printing, and RFC948-style IP packets
+
+Friday April 10, 2015 guy@alum.mit.edu
+ Summary for 4.7.4 tcpdump release
+ RPKI to Router Protocol: Fix Segmentation Faults and other problems
+ RPKI to Router Protocol: print strings with fn_printn()
+ wb: fix some bounds checks
+
+Wednesday March 11, 2015 mcr@sandelman.ca
+ Summary for 4.7.3 tcpdump release
+ Capsicum fixes for FreeBSD 10
+
+Tuesday March 10, 2015 mcr@sandelman.ca
+ Summary for 4.7.2 tcpdump release
+ DCCP: update Packet Types with RFC4340/IANA names
+ fixes for CVE-2015-0261: IPv6 mobility header check issue
+ fixes for CVE-2015-2153, 2154, 2155: kday packets
+
+Friday Nov. 12, 2014 guy@alum.mit.edu
+ Summary for 4.7.0 tcpdump release
+ changes to hex printing of CDP packets
+ Fix PPI printing
+ Radius: update Packet Type Codes and Attribute Types with RFC/IANA names
+ Add a routine to print "text protocols", and add FTP/HTTP/SMTP/RTSP support.
+ improvements to telnet printer, even if not -v
+ omit length for bcp, print-tcp uses it
+ formatting fixes for a bunch of protocols
+ new bounds checks for a number of protocols
+ split netflow 1,6, and 6 dissector up.
+ added geneve dissector
+ CVE-2014-9140 PPP dissector fixed.
+
+Tuesday Sep. 2, 2014 mcr@sandelman.ca
+ Summary for 4.6.2 tcpdump release
+ fix out-of-source-tree builds: find libpcap that is out of source
+ better configure check for libsmi
+
+Saturday Jul. 19, 2014 mcr@sandelman.ca
+ Summary for 4.6.1 tcpdump release
+ added FreeBSD capsicum
+ add a short option '#', same as long option '--number'
+
+Wednesday Jul. 2, 2014 mcr@sandelman.ca
+ Summary for 4.6.0 tcpdump release
+ all of tcpdump is now using the new "NDO" code base (Thanks Denis!)
+ nflog, mobile, forces, pptp, AODV, AHCP, IPv6, OSPFv4, RPL, DHCPv6 enhancements/fixes
+ M3UA decode added.
+ many new test cases: 82 in 4.5.1 to 133 in 4.6.0
+ many improvements to travis continuous integration system: OSX, and Coverity options
+ cleaned up some unnecessary header files
+ Added bittok2str().
+ a number of unaligned access faults fixed
+ -A flag does not consider CR to be printable anymore
+ fx.lebail took over coverity baby sitting
+ default snapshot size increased to 256K for accommodate USB captures
+ WARNING: this release contains a lot of very worthwhile code churn.
+
+Wednesday Jan. 15, 2014 guy@alum.mit.edu
+ Summary for 4.5.2 tcpdump release
+ Man page fix
+ Fix crashes on SPARC
+
+Monday Nov. 11, 2013 mcr@sandelman.ca
+ Summary for 4.5.1 tcpdump release
+ CREDITS file fixes
+
+Thursday Nov. 7, 2013 mcr@sandelman.ca and guy@alum.mit.edu.
+ Summary for 4.5.0 tcpdump release
+ some NFSv4 fixes for printing
+ fix printing of unknown TCP options, and tcp fast-open
+ fixes for syslog parser
+ some gcc-version-specific flag tuning
+ adopt MacOS deprecation workarounds for openssl
+ improvements to babel printing
+ add OpenFlow 1.0 (no SSL) and test cases
+ GeoNet printer.
+ added STBC Rx support
+ improvements to DHCPv6 decoder
+ clarify which autoconf is needed
+ Point users to the the-tcpdump-group repository on GitHub rather
+ than the mcr repository
+ Add MSDP printer.
+ Fixed IPv6 check on Solaris and other OSes requiring extra
+ networking libraries.
+ Add support for VXLAN (draft-mahalingam-dutt-dcops-vxlan-03),
+ and add "vxlan" as an option for -T.
+ Add support for OTV (draft-hasmit-otv-04).
+ fixes for DLT_IEEE802_11_RADIO datalink types
+ added MPTCP decoder
+
+Saturday April 6, 2013 guy@alum.mit.edu.
+ Summary for 4.4.0 tcpdump release
+ RPKI-RTR (RFC6810) is now official (TCP Port 323)
+ Fix detection of OpenSSL libcrypto.
+ Add DNSSL (RFC6106) support.
+ Add "radius" as an option for -T.
+ Update Action codes for handle_action function according to
+ 802.11s amendment.
+ Decode DHCPv6 AFTR-Name option (RFC6334).
+ Updates for Babel.
+ Fix printing of infinite lifetime in ICMPv6.
+ Added support for SPB, SPBM Service Identifier, and Unicast
+ Address sub-TLV in ISIS.
+ Decode RIPv2 authentication up to RFC4822.
+ Fix RIP Request/full table decoding issues.
+ On Linux systems with cap-ng.h, drop root privileges
+ using Linux Capabilities.
+ Add support for reading multiple files.
+ Add MS NLB heartbeat printer.
+ Separate multiple nexthops in BGP.
+
+Wednesday November 28, 2012 guy@alum.mit.edu.
+ Summary for 4.3.1 tcpdump release
+ Print "LLDP, length N" for LLDP packets even when not in verbose
+ mode, so something is printed even if only the timestamp is
+ present
+ Document "-T carp"
+ Print NTP poll interval correctly (it's an exponent, so print
+ both its raw value and 2^value)
+ Document that "-e" is used to get MAC addresses
+ More clearly document that you need to escape or quote
+ backslashes in filter expressions on the command line
+ Fix some "the the" in the man page
+ Use the right maximum path length
+ Don't treat 192_1_2, when passed to -i, as an interface number
+
+Friday April 3, 2012. mcr@sandelman.ca.
+ Summary for 4.3.0 tcpdump release
+ fixes for forces: SPARSE data (per RFC 5810)
+ some more test cases added
+ updates to documentation on -l, -U and -w flags.
+ Fix printing of BGP optional headers.
+ Tried to include DLT_PFSYNC support, failed due to headers required.
+ added TIPC support.
+ Fix LLDP Network Policy bit definitions.
+ fixes for IGMPv3's Max Response Time: it is in units of 0.1 second.
+ SIGUSR1 can be used rather than SIGINFO for stats
+ permit -n flag to affect print-ip for protocol numbers
+ ND_OPT_ADVINTERVAL is in milliseconds, not seconds
+ Teach PPPoE parser about RFC 4638
+
+
+Friday December 9, 2011. guy@alum.mit.edu.
+ Summary for 4.2.1 tcpdump release
+ Only build the Babel printer if IPv6 is enabled.
+ Support Babel on port 6696 as well as 6697.
+ Include ppi.h in release tarball.
+ Include all the test files in the release tarball, and don't
+ "include" test files that no longer exist.
+ Don't assume we have <rpc/rpc.h> - check for it.
+ Support "-T carp" as a way of dissecting IP protocol 112 as CARP
+ rather than VRRP.
+ Support Hilscher NetAnalyzer link-layer header format.
+ Constify some pointers and fix compiler warnings.
+ Get rid of never-true test.
+ Fix an unintended fall-through in a case statement in the ARP
+ printer.
+ Fix several cases where sizeof(sizeof(XXX)) was used when just
+ sizeof(XXX) was intended.
+ Make stricter sanity checks in the ES-IS printer.
+ Get rid of some GCCisms that caused builds to fai with compilers
+ that don't support them.
+ Fix typo in man page.
+ Added length checks to Babel printer.
+
+Sunday July 24, 2011. mcr@sandelman.ca.
+ Summary for 4.2.+
+ merged 802.15.4 decoder from Dmitry Eremin-Solenikov <dbaryshkov
+ at gmail dot com>
+ updates to forces for new port numbers
+ Use "-H", not "-h", for the 802.11s option. (-h always help)
+ Better ICMPv6 checksum handling.
+ add support for the RPKI/Router Protocol, per -ietf-sidr-rpki-rtr-12
+ get rid of uuencoded pcap test files, git can do binary.
+ sFlow changes for 64-bit counters.
+ fixes for PPI packet header handling and printing.
+ Add DCB Exchange protocol (DCBX) version 1.01.
+ Babel dissector, from Juliusz Chroboczek and Grégoire Henry.
+ improvements to radiotap for rate values > 127.
+ Many improvements to ForCES decode, including fix SCTP TML port
+ updated RPL type code to RPL-17 draft
+ Improve printout of DHCPv6 options.
+ added support and test case for QinQ (802.1q VLAN) packets
+ Handle DLT_IEEE802_15_4_NOFCS like DLT_IEEE802_15_4.
+ Build fixes for Sparc and other machines with alignment restrictions.
+ Merged changes from Debian package.
+ PGM: Add ACK decoding and add PGMCC DATA and FEEDBACK options.
+ Build fixes for OSX (Snow Leopard and others)
+ Add support for IEEE 802.15.4 packets
+
+Tue. July 20, 2010. guy@alum.mit.edu.
+ Summary for 4.1.2 tcpdump release
+ If -U is specified, flush the file after creating it, so it's
+ not zero-length
+ Fix TCP flags output description, and some typos, in the man
+ page
+ Add a -h flag, and only attempt to recognize 802.11s mesh
+ headers if it's set
+ When printing the link-layer type list, send *all* output to
+ stderr
+ Include the CFLAGS setting when configure was run in the
+ compiler flags
+
+Thu. April 1, 2010. guy@alum.mit.edu.
+ Summary for 4.1.1 tcpdump release
+ Fix build on systems with PF, such as FreeBSD and OpenBSD.
+ Don't blow up if a zero-length link-layer address is passed to
+ linkaddr_string().
+
+Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
+ Summary for 4.1.0 tcpdump release
+ Fix printing of MAC addresses for VLAN frames with a length
+ field
+ Add some additional bounds checks and use the EXTRACT_ macros
+ more
+ Add a -b flag to print the AS number in BGP packets in ASDOT
+ notation rather than ASPLAIN notation
+ Add ICMPv6 RFC 5006 support
+ Decode the access flags in NFS access requests
+ Handle the new DLT_ for memory-mapped USB captures on Linux
+ Make the default snapshot (-s) the maximum
+ Print name of device (when -L is used)
+ Support for OpenSolaris (and SXCE build 125 and later)
+ Print new TCP flags
+ Add support for RPL DIO
+ Add support for TCP User Timeout (UTO)
+ Add support for non-standard Ethertypes used by 3com PPPoE gear
+ Add support for 802.11n and 802.11s
+ Add support for Transparent Ethernet Bridge ethertype in GRE
+ Add 4 byte AS support for BGP printer
+ Add support for the MDT SAFI 66 BG printer
+ Add basic IPv6 support to print-olsr
+ Add USB printer
+ Add printer for ForCES
+ Handle frames with an FCS
+ Handle 802.11n Control Wrapper, Block Acq Req and Block Ack frames
+ Fix TCP sequence number printing
+ Report 802.2 packets as 802.2 instead of 802.3
+ Don't include -L/usr/lib in LDFLAGS
+ On x86_64 Linux, look in lib64 directory too
+ Lots of code clean ups
+ Autoconf clean ups
+ Update testcases to make output changes
+ Fix compiling with/out smi (--with{,out}-smi)
+ Fix compiling without IPv6 support (--disable-ipv6)
+
+Mon. October 27, 2008. ken@netfunctional.ca. Summary for 4.0.0 tcpdump release
+ Add support for Bluetooth Sniffing
+ Add support for Realtek Remote Control Protocol (openrrcp.org.ru)
+ Add support for 802.11 AVS
+ Add support for SMB over TCP
+ Add support for 4 byte BGP AS printing
+ Add support for compiling on case-insensitive file systems
+ Add support for ikev2 printing
+ Update support for decoding AFS
+ Update DHCPv6 printer
+ Use newer libpcap API's (allows -B option on all platforms)
+ Add -I to turn on monitor mode
+ Bugfixes in lldp, lspping, dccp, ESP, NFS printers
+ Cleanup unused files and various cruft
+
+Mon. September 10, 2007. ken@xelerance.com. Summary for 3.9.8 tcpdump release
+ Rework ARP printer
+ Rework OSPFv3 printer
+ Add support for Frame-Relay ARP
+ Decode DHCP Option 121 (RFC 3442 Classless Static Route)
+ Decode DHCP Option 249 (MS Classless Static Route) the same as Option 121
+ TLV: Add support for Juniper .pcap extensions
+ Print EGP header in new-world-order style
+ Converted print-isakmp.c to NETDISSECT
+ Moved AF specific stuff into af.h
+ Test subsystem now table driven, and saves outputs and diffs to one place
+ Require <net/pfvar.h> for pf definitions - allows reading of pflog formatted
+ libpcap files on an OS other than where the file was generated
+
+
+Wed. July 23, 2007. mcr@xelerance.com. Summary for 3.9.7 libpcap release
+
+ NFS: Print unsigned values as such.
+ RX: parse safely.
+ BGP: fixes for IPv6-less builds.
+ 801.1ag: use standard codepoint.
+ use /dev/bpf on systems with such a device.
+ 802.11: print QoS data, avoid dissect of no-data frame, ignore padding.
+ smb: make sure that we haven't gone past the end of the captured data.
+ smb: squelch an uninitialized complaint from coverity.
+ NFS: from NetBSD; don't interpret the reply as a possible NFS reply
+ if it got MSG_DENIED.
+ BGP: don't print TLV values that didn't fit, from www.digit-labs.org.
+ revised INSTALL.txt about libpcap dependency.
+
+Wed. April 25, 2007. ken@xelerance.com. Summary for 3.9.6 tcpdump release
+ Update man page to reflect changes to libpcap
+ Changes to both TCP and IP Printer Output
+ Fix a potential buffer overflow in the 802.11 printer
+ Print basic info about a few more Cisco LAN protocols.
+ mDNS cleanup
+ ICMP MPLS rework of the extension code
+ bugfix: use the correct codepoint for the OSPF simple text auth token
+ entry, and use safeputs to print the password.
+ Add support in pflog for additional values
+ Add support for OIF RSVP Extensions UNI 1.0 Rev. 2 and additional RSVP objects
+ Add support for the Message-id NACK c-type.
+ Add support for 802.3ah loopback ctrl msg
+ Add support for Multiple-STP as per 802.1s
+ Add support for rapid-SPT as per 802.1w
+ Add support for CFM Link-trace msg, Link-trace-Reply msg,
+ Sender-ID tlv, private tlv, port, interface status
+ Add support for unidirectional link detection as per
+ https://tools.ietf.org/id/draft-foschiano-udld-02.txt
+ Add support for the olsr protocol as per RFC 3626 plus the LQ
+ extensions from olsr.org
+ Add support for variable-length checksum in DCCP, as per section 9 of
+ RFC 4340.
+ Add support for per-VLAN spanning tree and per-VLAN rapid spanning tree
+ Add support for Multiple-STP as per 802.1s
+ Add support for the cisco propriatry 'dynamic trunking protocol'
+ Add support for the cisco proprietary VTP protocol
+ Update dhcp6 options table as per IETF standardization activities
+
+
+Tue. September 19, 2006. ken@xelerance.com. Summary for 3.9.5 tcpdump release
+
+ Fix compiling on AIX (, at end of ENUM)
+ Updated list of DNS RR typecodes
+ Use local Ethernet defs on WIN32
+ Add support for Frame-Relay ARP
+ Fixes for compiling under MSVC++
+ Add support for parsing Juniper .pcap files
+ Add support for FRF.16 Multilink Frame-Relay (DLT_MFR)
+ Rework the OSPFv3 printer
+ Fix printing for 4.4BSD/NetBSD NFS Filehandles
+ Add support for Cisco style NLPID encapsulation
+ Add cisco prop. eigrp related, extended communities
+ Add support for BGP signaled VPLS
+ Cleanup the bootp printer
+ Add support for PPP over Frame-Relay
+ Add some bounds checking to the IP options code, and clean up
+ the options output a bit.
+ Add additional modp groups to ISAKMP printer
+ Add support for Address-Withdraw and Label-Withdraw Msgs
+ Add support for the BFD Discriminator TLV
+ Fixes for 64bit compiling
+ Add support for PIMv2 checksum verification
+ Add support for further dissection of the IPCP Compression Option
+ Add support for Cisco's proposed VQP protocol
+ Add basic support for keyed authentication TCP option
+ Lots of minor cosmetic changes to output printers
+
+
+Mon. September 19, 2005. ken@xelerance.com. Summary for 3.9.4 tcpdump release
+ Decoder support for more Juniper link-layer types
+ Fix a potential buffer overflow (although it can't occur in
+ practice).
+ Fix the handling of unknown management frame types in the 802.11
+ printer.
+ Add FRF.16 support, fix various Frame Relay bugs.
+ Add support for RSVP integrity objects, update fast-reroute
+ object printer to latest spec.
+ Clean up documentation of vlan filter expression, document mpls
+ filter expression.
+ Document new pppoed and pppoes filter expressions.
+ Update diffserver-TE codepoints as per RFC 4124.
+ Spelling fixes in ICMPv6.
+ Don't require any fields other than flags to be present in IS-IS
+ restart signaling TLVs, and only print the system ID in
+ those TLVs as system IDs, not as node IDs.
+ Support for DCCP.
+
+Tue. July 5, 2005. ken@xelerance.com. Summary for 3.9.3 tcpdump release
+
+ Option to chroot() when dropping privs
+ Fixes for compiling on nearly every platform,
+ including improved 64bit support
+ Many new testcases
+ Support for sending packets
+ Many compilation fixes on most platforms
+ Fixes for recent version of GCC to eliminate warnings
+ Improved Unicode support
+
+ Decoders & DLT Changes, Updates and New:
+ AES ESP support
+ Juniper ATM, FRF.15, FRF.16, PPPoE,
+ ML-FR, ML-PIC, ML-PPP, PL-PPP, LS-PIC
+ GGSN,ES,MONITOR,SERVICES
+ L2VPN
+ Axent Raptor/Symantec Firewall
+ TCP-MD5 (RFC 2385)
+ ESP-in-UDP (RFC 3948)
+ ATM OAM
+ LMP, LMP Service Discovery
+ IP over FC
+ IP over IEEE 1394
+ BACnet MS/TP
+ SS7
+ LDP over TCP
+ LACP, MARKER as per 802.3ad
+ PGM (RFC 3208)
+ LSP-PING
+ G.7041/Y.1303 Generic Framing Procedure
+ EIGRP-IP, EIGRP-IPX
+ ICMP6
+ Radio - via radiotap
+ DHCPv6
+ HDLC over PPP
+
+Tue. March 30, 2004. mcr@sandelman.ottawa.on.ca. Summary for 3.8.3 release
+
+ No changes from 3.8.2. Version bumped only to maintain consistency
+ with libpcap 0.8.3.
+
+Mon. March 29, 2004. mcr@sandelman.ottawa.on.ca. Summary for 3.8.2 release
+
+ Fixes for print-isakmp.c CVE: CAN-2004-0183, CAN-2004-0184
+ https://web.archive.org/web/20160328035955/https://www.rapid7.com/resources/advisories/R7-0017.jsp
+ IP-over-IEEE1394 printing.
+ some MINGW32 changes.
+ updates for autoconf 2.5
+ fixes for print-aodv.c - check for too short packets
+ formatting changes to print-ascii for hex output.
+ check for too short packets: print-bgp.c, print-bootp.c, print-cdp.c,
+ print-chdlc.c, print-domain.c, print-icmp.c, print-icmp6.c,
+ print-ip.c, print-lwres.c, print-ospf.c, print-pim.c,
+ print-ppp.c,print-pppoe.c, print-rsvp.c, print-wb.c
+ print-ether.c - better handling of unknown types.
+ print-isoclns.c - additional decoding of types.
+ print-llc.c - strings for LLC names added.
+ print-pfloc.c - various enhancements
+ print-radius.c - better decoding to strings.
+
+Wed. November 12, 2003. mcr@sandelman.ottawa.on.ca. Summary for 3.8 release
+
+ changed syntax of -E argument so that multiple SAs can be decrypted
+ fixes for Digital Unix headers and Documentation
+ __attribute__ fixes
+ CDP changes from Terry Kennedy <terry@tmk.com>.
+ IPv6 mobility updates from Kazushi Sugyo <sugyo@pb.jp.nec.com>
+ Fixes for ASN.1 decoder for 2.100.3 forms.
+ Added a count of packets received and processed to clarify numbers.
+ Incorporated WinDUMP patches for Win32 builds.
+ PPPoE payload length headers.
+ Fixes for HP C compiler builds.
+ Use new pcap_breakloop() and pcap_findalldevs() if we can.
+ BGP output split into multiple lines.
+ Fixes to 802.11 decoding.
+ Fixes to PIM decoder.
+ SuperH is a CPU that can't handle unaligned access. Many fixes for
+ unaligned access work.
+ Fixes to Frame-Relay decoder for Q.933/922 frames.
+ Clarified when Solaris can do captures as non-root.
+ Added tests/ subdir for examples/regression tests.
+ New -U flag. -flush stdout after every packet
+ New -A flag -print ascii only
+ support for decoding IS-IS inside Cisco HDLC Frames
+ more verbosity for tftp decoder
+ mDNS decoder
+ new BFD decoder
+ cross compilation patches
+ RFC 3561 AODV support.
+ UDP/TCP pseudo-checksum properly for source-route options.
+ sanitized all files to modified BSD license
+ Add support for RFC 2625 IP-over-Fibre Channel.
+ fixes for DECnet support.
+ Support RFC 2684 bridging of Ethernet, 802.5 Token Ring, and FDDI.
+ RFC 2684 encapsulation of BPDUs.
+
+Tuesday, February 25, 2003. fenner@research.att.com. 3.7.2 release
+
+ Fixed infinite loop when parsing invalid isakmp packets.
+ (reported by iDefense; already fixed in CVS)
+ Fixed infinite loop when parsing invalid BGP packets.
+ Fixed buffer overflow with certain invalid NFS packets.
+ Pretty-print unprintable network names in 802.11 printer.
+ Handle truncated nbp (appletalk) packets.
+ Updated DHCPv6 printer to match draft-ietf-dhc-dhcpv6-22.txt
+ Print IP protocol name even if we don't have a printer for it.
+ Print IP protocol name or number for fragments.
+ Print the whole MPLS label stack, not just the top label.
+ Print request header and file handle for NFS v3 FSINFO and PATHCONF
+ requests.
+ Fix NFS packet truncation checks.
+ Handle "old" DR-Priority and Bidir-Capable PIM HELLO options.
+ Handle unknown RADIUS attributes properly.
+ Fix an ASN.1 parsing error that would cause e.g. the OID
+ 2.100.3 to be misrepresented as 4.20.3 .
+
+Monday, January 21, 2002. mcr@sandelman.ottawa.on.ca. Summary for 3.7 release
+ keyword "ipx" added.
+ Better OSI/802.2 support on Linux.
+ IEEE 802.11 support, from clenahan@fortresstech.com, achirica@ttd.net.
+ LLC SAP support for FDDI/token ring/RFC-1483 style ATM
+ BXXP protocol was replaced by the BEEP protocol;
+ improvements to SNAP demux.
+ Changes to "any" interface documentation.
+ Documentation on pcap_stats() counters.
+ Fix a memory leak found by Miklos Szeredi - pcap_ether_aton().
+ Added MPLS encapsulation decoding per RFC3032.
+ DNS dissector handles TKEY, TSIG and IXFR.
+ adaptive SLIP interface patch from Igor Khristophorov <igor@atdot.org>
+ SMB printing has much improved bounds checks
+ OUI 0x0000f8 decoded as encapsulated ethernet for Cisco-custom bridging
+ Zephyr support, from Nickolai Zeldovich <kolya@MIT.EDU>.
+ Solaris - devices with digits in them. Stefan Hudson <hudson@mbay.net>
+ IPX socket 0x85be is for Cisco EIGRP over IPX.
+ Improvements to fragmented ESP handling.
+ SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
+ Linux ARPHDR_ATM support fixed.
+ Added a "netbeui" keyword, which selects NetBEUI packets.
+ IPv6 ND improvements, MobileIP dissector, 2292bis-02 for RA option.
+ Handle ARPHDR_HDLC from Marcus Felipe Pereira <marcus@task.com.br>.
+ Handle IPX socket 0x553 -> NetBIOS-over-IPX socket, "nwlink-dgm"
+ Better Linux libc5 compat.
+ BIND9 lwres dissector added.
+ MIPS and SPARC get strict alignment macros (affects print-bgp.c)
+ Apple LocalTalk LINKTYPE_ reserved.
+ New time stamp formats documented.
+ DHCP6 updated to draft-22.txt spec.
+ ICMP types/codes now accept symbolic names.
+ Add SIGINFO handler from LBL
+ encrypted CIPE tunnels in IRIX, from Franz Schaefer <schaefer@mond.at>.
+ now we are -Wstrict-prototype clean.
+ NetBSD DLT_PPP_ETHER; adapted from Martin Husemann <martin@netbsd.org>.
+ PPPoE dissector cleaned up.
+ Support for LocalTalk hardware, from Uns Lider <unslider@miranda.org>.
+ In dissector, now the caller prints the IP addresses rather than proto.
+ cjclark@alum.mit.edu: print the IP proto for non-initial fragments.
+ LLC frames with a DSAP and LSAP of 0xe0 are IPX frames.
+ Linux cooked frames with a type value of LINUX_SLL_P_802_3 are IPX.
+ captures on the "any" device won't be done in promiscuous mode
+ Token Ring support on DLPI - Onno van der Linden <onno@simplex.nl>
+ ARCNet support, from NetBSD.
+ HSRP dissector, from Julian Cowley <julian@lava.net>.
+ Handle (GRE-encapsulated) PPTP
+ added -C option to rotate save file every optarg * 1,000,000 bytes.
+ support for "vrrp" name - NetBSD, by Klaus Klein <kleink@netbsd.org>.
+ PPTP support, from Motonori Shindo <mshindo@mshindo.net>.
+ IS-IS over PPP support, from Hannes Gredler <hannes@juniper.net>.
+ CNFP support for IPv6,format. Harry Raaymakers <harryr@connect.com.au>.
+ ESP printing updated to RFC2406.
+ HP-UX can now handle large number of PPAs.
+ MSDP printer added.
+ L2TP dissector improvements from Motonori Shindo.
+
+Tuesday January 9, 2001. mcr@sandelman.ottawa.on.ca. Summary for 3.6 release
+ Cleaned up documentation.
+ Promisc mode fixes for Linux
+ IPsec changes/cleanups.
+ Alignment fixes for picky architectures
+
+ Removed dependency on native headers for packet dissectors.
+ Removed Linux specific headers that were shipped
+
+ libpcap changes provide for exchanging capture files between
+ systems. Save files now have well known PACKET_ values instead of
+ depending upon system dependent mappings of DLT_* types.
+
+ Support for computing/checking IP and UDP/TCP checksums.
+
+ Updated autoconf stock files.
+
+ IPv6 improvements: dhcp (draft-15), mobile-ip6, ppp, ospf6,
+
+ Added dissector support for: ISOCLNS, Token Ring, IGMPv3, bxxp,
+ timed, vrrp, radius, chdlc, cnfp, cdp, IEEE802.1d, raw-AppleTalk
+
+ Added filtering support for: VLANs, ESIS, ISIS
+
+ Improvements to: print-telnet, IPTalk, bootp/dhcp, ECN, PPP,
+ L2TP, PPPoE
+
+ HP-UX 11.0 -- find the right dlpi device.
+ Solaris 8 - IPv6 works
+ Linux - Added support for an "any" device to capture on all interfaces
+
+ Security fixes: buffer overrun audit done. Strcpy replaced with
+ strlcpy, sprintf replaced with snprintf.
+ Look for lex problems, and warn about them.
+
+
+v3.5 Fri Jan 28 18:00:00 PST 2000
+
+Bill Fenner <fenner@research.att.com>
+- switch to config.h for autoconf
+- unify RCSID strings
+- Updated PIMv1, PIMv2, DVMRP, IGMP parsers, add Cisco Auto-RP parser
+- Really fix the RIP printer
+- Fix MAC address -> name translation.
+- some -Wall -Wformat fixes
+- update makemib to parse much of SMIv2
+- Print TCP sequence # with -vv even if you normally wouldn't
+- Print as much of IP/TCP/UDP headers as possible even if truncated.
+
+itojun@iijlab.net
+- -X will make a ascii dump. from netbsd.
+- telnet command sequence decoder (ff xx xx). from netbsd.
+- print-bgp.c: improve options printing. ugly code exists for
+ unaligned option parsing (need some fix).
+- const poisoning in SMB decoder.
+- -Wall -Werror clean checks.
+- bring in KAME IPv6/IPsec decoding code.
+
+Assar Westerlund <assar@sics.se>
+- SNMPv2 and SNMPv3 printer
+- If compiled with libsmi, tcpdump can load MIBs on the fly to decode
+ SNMP packets.
+- Incorporate NFS parsing code from NetBSD. Adds support for nfsv3.
+- portability fixes
+- permit building in different directories.
+
+Ken Hornstein <kenh@cmf.nrl.navy.mil>
+- bring in code at
+ /afs/transarc.com/public/afs-contrib/tools/tcpdump for parsing
+ AFS3 packets
+
+Andrew Tridgell <tridge@linuxcare.com>
+- SMB printing code
+
+Love <lha@stacken.kth.se>
+- print-rx.c: add code for printing MakeDir and StoreStatus. Also
+ change date format to the right one.
+
+Michael C. Richardson <mcr@sandelman.ottawa.on.ca>
+- Created tcpdump.org repository
+
+v3.4 Sat Jul 25 12:40:55 PDT 1998
+
+- Hardwire Linux slip support since it's too hard to detect.
+
+- Redo configuration of "network" libraries (-lsocket and -lnsl) to
+ deal with IRIX. Thanks to John Hawkinson (jhawk@mit.edu)
+
+- Added -a which tries to translate network and broadcast addresses to
+ names. Suggested by Rob van Nieuwkerk (robn@verdi.et.tudelft.nl)
+
+- Added a configure option to disable gcc.
+
+- Added a "raw" packet printer.
+
+- Not having an interface address is no longer fatal. Requested by John
+ Hawkinson.
+
+- Rework signal setup to accommodate Linux.
+
+- OSPF truncation check fix. Also display the type of OSPF packets
+ using MD5 authentication. Thanks to Brian Wellington
+ (bwelling@tis.com)
+
+- Fix truncation check bugs in the Kerberos printer. Reported by Ezra
+ Peisach (epeisach@mit.edu)
+
+- Don't catch SIGHUP when invoked with nohup(1). Thanks to Dave Plonka
+ (plonka@mfa.com)
+
+- Specify full install target as a way of detecting if install
+ directory does not exist. Thanks to Dave Plonka.
+
+- Bit-swap FDDI addresses for BSD/OS too. Thanks to Paul Vixie
+ (paul@vix.com)
+
+- Fix off-by-one bug when testing size of ethernet packets. Thanks to
+ Marty Leisner (leisner@sdsp.mc.xerox.com)
+
+- Add a local autoconf macro to check for routines in libraries; the
+ autoconf version is broken (it only puts the library name in the
+ cache variable name). Thanks to John Hawkinson.
+
+- Add a local autoconf macro to check for types; the autoconf version
+ is broken (it uses grep instead of actually compiling a code fragment).
+
+- Modified to support the new BSD/OS 2.1 PPP and SLIP link layer header
+ formats.
+
+- Extend OSF ip header workaround to versions 1 and 2.
+
+- Fix some signed problems in the nfs printer. As reported by David
+ Sacerdote (davids@silence.secnet.com)
+
+- Detect group wheel and use it as the default since BSD/OS' install
+ can't hack numeric groups. Reported by David Sacerdote.
+
+- AIX needs special loader options. Thanks to Jonathan I. Kamens
+ (jik@cam.ov.com)
+
+- Fixed the nfs printer to print port numbers in decimal. Thanks to
+ Kent Vander Velden (graphix@iastate.edu)
+
+- Find installed libpcap in /usr/local/lib when not using gcc.
+
+- Disallow network masks with non-network bits set.
+
+- Attempt to detect "egcs" versions of gcc.
+
+- Add missing closing double quotes when displaying bootp strings.
+ Reported by Viet-Trung Luu (vluu@picard.math.uwaterloo.ca)
+
+v3.3 Sat Nov 30 20:56:27 PST 1996
+
+- Added Linux support.
+
+- GRE encapsulated packet printer thanks to John Hawkinson
+ (jhawk@mit.edu)
+
+- Rewrite gmt2local() to avoid problematic os dependencies.
+
+- Suppress nfs truncation message on errors.
+
+- Add missing m4 quoting in AC_LBL_UNALIGNED_ACCESS autoconf macro.
+ Reported by Joachim Ott (ott@ardala.han.de)
+
+- Enable "ip_hl vs. ip_vhl" workaround for OSF4 too.
+
+- Print arp hardware type in host order. Thanks to Onno van der Linden
+ (onno@simplex.nl)
+
+- Avoid solaris compiler warnings. Thanks to Bruce Barnett
+ (barnett@grymoire.crd.ge.com)
+
+- Fix rip printer to not print one more route than is actually in the
+ packet. Thanks to Jean-Luc Richier (Jean-Luc.Richier@imag.fr) and
+ Bill Fenner (fenner@parc.xerox.com)
+
+- Use autoconf endian detection since BYTE_ORDER isn't defined on all systems.
+
+- Fix dvmrp printer truncation checks and add a dvmrp probe printer.
+ Thanks to Danny J. Mitzel (mitzel@ipsilon.com)
+
+- Rewrite ospf printer to improve truncation checks.
+
+- Don't parse tcp options past the EOL. As noted by David Sacerdote
+ (davids@secnet.com). Also, check tcp options to make sure they ar
+ actually in the tcp header (in addition to the normal truncation
+ checks). Fix the SACK code to print the N blocks (instead of the
+ first block N times).
+
+- Don't say really small UDP packets are truncated just because they
+ aren't big enough to be a RPC. As noted by David Sacerdote.
+
+v3.2.1 Sun Jul 14 03:02:26 PDT 1996
+
+- Added rfc1716 icmp codes as suggested by Martin Fredriksson
+ (martin@msp.se)
+
+- Print mtu for icmp unreach need frag packets. Thanks to John
+ Hawkinson (jhawk@mit.edu)
+
+- Decode icmp router discovery messages. Thanks to Jeffrey Honig
+ (jch@bsdi.com)
+
+- Added a printer entry for DLT_IEEE802 as suggested by Tak Kushida
+ (kushida@trl.ibm.co.jp)
+
+- Check igmp checksum if possible. Thanks to John Hawkinson.
+
+- Made changes for SINIX. Thanks to Andrej Borsenkow
+ (borsenkow.msk@sni.de)
+
+- Use autoconf's idea of the top level directory in install targets.
+ Thanks to John Hawkinson.
+
+- Avoid infinite loop in tcp options printing code. Thanks to Jeffrey
+ Mogul (mogul@pa.dec.com)
+
+- Avoid using -lsocket in IRIX 5.2 and earlier since it breaks snoop.
+ Thanks to John Hawkinson.
+
+- Added some more packet truncation checks.
+
+- On systems that have it, use sigset() instead of signal() since
+ signal() has different semantics on these systems.
+
+- Fixed some more alignment problems on the alpha.
+
+- Add code to massage unprintable characters in the domain and ipx
+ printers. Thanks to John Hawkinson.
+
+- Added explicit netmask support. Thanks to Steve Nuchia
+ (steve@research.oknet.com)
+
+- Add "sca" keyword (for DEC cluster services) as suggested by Terry
+ Kennedy (terry@spcvxa.spc.edu)
+
+- Add "atalk" keyword as suggested by John Hawkinson.
+
+- Added an igrp printer. Thanks to Francis Dupont
+ (francis.dupont@inria.fr)
+
+- Print IPX net numbers in hex a la Novell Netware. Thanks to Terry
+ Kennedy (terry@spcvxa.spc.edu)
+
+- Fixed snmp extended tag field parsing bug. Thanks to Pascal Hennequin
+ (pascal.hennequin@hugo.int-evry.fr)
+
+- Added some ETHERTYPEs missing on some systems.
+
+- Added truncated packet macros and various checks.
+
+- Fixed endian problems with the DECnet printer.
+
+- Use $CC when checking gcc version. Thanks to Carl Lindberg
+ (carl_lindberg@blacksmith.com)
+
+- Fixes for AIX (although this system is not yet supported). Thanks to
+ John Hawkinson.
+
+- Fix bugs in the autoconf misaligned accesses code fragment.
+
+- Include sys/param.h to get BYTE_ORDER in a few places. Thanks to
+ Pavlin Ivanov Radoslavov (pavlin@cs.titech.ac.jp)
+
+v3.2 Sun Jun 23 02:28:10 PDT 1996
+
+- Print new icmp unreachable codes as suggested by Martin Fredriksson
+ (martin@msp.se). Also print code value when unknown for icmp redirect
+ and time exceeded.
+
+- Fix an alignment endian bug in getname(). Thanks to John Hawkinson.
+
+- Define "new" domain record types if not found in arpa/nameserv.h.
+ Resulted from a suggestion from John Hawkinson (jhawk@mit.edu). Also
+ fixed an endian bug when printing mx record and added some new record
+ types.
+
+- Added RIP V2 support. Thanks to Jeffrey Honig (jch@bsdi.com)
+
+- Added T/TCP options printing. As suggested by Richard Stevens
+ (rstevens@noao.edu)
+
+- Use autoconf to detect architectures that can't handle misaligned
+ accesses.
+
+v3.1 Thu Jun 13 20:59:32 PDT 1996
+
+- Changed u_int32/int32 to u_int32_t/int32_t to be consistent with bsd
+ and bind (as suggested by Charles Hannum).
+
+- Port to GNU autoconf.
+
+- Add support for printing DVMRP and PIM traffic thanks to
+ Havard Eidnes (Havard.Eidnes@runit.sintef.no).
+
+- Fix AppleTalk, IPX and DECnet byte order problems due to wrong endian
+ define being referenced. Reported by Terry Kennedy.
+
+- Minor fixes to the man page thanks to Mark Andrews.
+
+- Endian fixes to RTP and vat packet dumpers, thanks to Bruce Mah
+ (bmah@cs.berkeley.edu).
+
+- Added support for new dns types, thanks to Rainer Orth.
+
+- Fixed tftp_print() to print the block number for ACKs.
+
+- Document -dd and -ddd. Resulted from a bug report from Charlie Slater
+ (cslater@imatek.com).
+
+- Check return status from malloc/calloc/etc.
+
+- Check return status from pcap_loop() so we can print an error and
+ exit with a bad status if there were problems.
+
+- Bail if ip option length is <= 0. Resulted from a bug report from
+ Darren Reed (darrenr@vitruvius.arbld.unimelb.edu.au).
+
+- Print out a little more information for sun rpc packets.
+
+- Add support for Kerberos 4 thanks to John Hawkinson (jhawk@mit.edu).
+
+- Fixed the Fix EXTRACT_SHORT() and EXTRACT_LONG() macros (which were
+ wrong on little endian machines).
+
+- Fixed alignment bug in ipx_decode(). Thanks to Matt Crawford
+ (crawdad@fnal.gov).
+
+- Fix ntp_print() to not print garbage when the stratum is
+ "unspecified." Thanks to Deus Ex Machina (root@belle.bork.com).
+
+- Rewrote tcp options printer code to check for truncation. Added
+ selective acknowledgment case.
+
+- Fixed an endian bug in the ospf printer. Thanks to Jeffrey C Honig
+ (jch@bsdi.com)
+
+- Fix rip printer to handle 4.4 BSD sockaddr struct which only uses one
+ octet for the sa_family member. Thanks to Yoshitaka Tokugawa
+ (toku@dit.co.jp)
+
+- Don't checksum ip header if we don't have all of it. Thanks to John
+ Hawkinson (jhawk@mit.edu).
+
+- Print out hostnames if possible in egp printer. Thanks to Jeffrey
+ Honig (jhc@bsdi.com)
+
+
+v3.1a1 Wed May 3 19:21:11 PDT 1995
+
+- Include time.h when SVR4 is defined to avoid problems under Solaris
+ 2.3.
+
+- Fix etheraddr_string() in the ETHER_SERVICE to return the saved
+ strings, not the local buffer. Thanks to Stefan Petri
+ (petri@ibr.cs.tu-bs.de).
+
+- Detect when pcap raises the snaplen (e.g. with snit). Print a warning
+ that the selected value was not used. Thanks to Pascal Hennequin
+ (Pascal.Hennequin@hugo.int-evry.fr).
+
+- Add a truncated packet test to print-nfs.c. Thanks to Pascal Hennequin.
+
+- BYTEORDER -> BYTE_ORDER Thanks to Terry Kennedy (terry@spcvxa.spc.edu).
+
+v3.0.3 Sun Oct 1 18:35:00 GMT 1995
+
+- Although there never was a 3.0.3 release, the linux boys cleverly
+ "released" one in late 1995.
+
+v3.0.2 Thu Apr 20 21:28:16 PDT 1995
+
+- Change configuration to not use gcc v2 flags with gcc v1.
+
+- Redo gmt2local() so that it works under BSDI (which seems to return
+ an empty timezone struct from gettimeofday()). Based on report from
+ Terry Kennedy (terry@spcvxa.spc.edu).
+
+- Change configure to recognize IP[0-9]* as "mips" SGI hardware. Based
+ on report from Mark Andrews (mandrews@alias.com).
+
+- Don't pass cc flags to gcc. Resulted from a bug report from Rainer
+ Orth (ro@techfak.uni-bielefeld.de).
+
+- Fixed printout of connection id for uncompressed tcp slip packets.
+ Resulted from a bug report from Richard Stevens (rstevens@noao.edu).
+
+- Hack around deficiency in Ultrix's make.
+
+- Add ETHERTYPE_TRAIL define which is missing from irix5.
+
+v3.0.1 Wed Aug 31 22:42:26 PDT 1994
+
+- Fix problems with gcc2 vs. malloc() and read() prototypes under SunOS 4.
+
+v3.0 Mon Jun 20 19:23:27 PDT 1994
+
+- Added support for printing tcp option timestamps thanks to
+ Mark Andrews (mandrews@alias.com).
+
+- Reorganize protocol dumpers to take const pointers to packets so they
+ never change the contents (i.e., they used to do endian conversions
+ in place). Previously, whenever more than one pass was taken over
+ the packet, the packet contents would be dumped incorrectly (i.e.,
+ the output form -x would be wrong on little endian machines because
+ the protocol dumpers would modify the data). Thanks to Charles Hannum
+ (mycroft@gnu.ai.mit.edu) for reporting this problem.
+
+- Added support for decnet protocol dumping thanks to Jeff Mogul
+ (mogul@pa.dec.com).
+
+- Fix bug that caused length of packet to be incorrectly printed
+ (off by ether header size) for unknown ethernet types thanks
+ to Greg Miller (gmiller@kayak.mitre.org).
+
+- Added support for IPX protocol dumping thanks to Brad Parker
+ (brad@fcr.com).
+
+- Added check to verify IP header checksum under -v thanks to
+ Brad Parker (brad@fcr.com).
+
+- Move packet capture code to new libpcap library (which is
+ packaged separately).
+
+- Prototype everything and assume an ansi compiler.
+
+- print-arp.c: Print hardware ethernet addresses if they're not
+ what we expect.
+
+- print-bootp.c: Decode the cmu vendor field. Add RFC1497 tags.
+ Many helpful suggestions from Gordon Ross (gwr@jericho.mc.com).
+
+- print-fddi.c: Improvements. Thanks to Jeffrey Mogul
+ (mogul@pa.dec.com).
+
+- print-icmp.c: Byte swap netmask before printing. Thanks to
+ Richard Stevens (rstevens@noao.edu). Print icmp type when unknown.
+
+- print-ip.c: Print the inner ip datagram of ip-in-ip encapsulated packets.
+ By default, only the inner packet is dumped, appended with the token
+ "(encap)". Under -v, both the inner and output packets are dumped
+ (on the same line). Note that the filter applies to the original packet,
+ not the encapsulated packet. So if you run tcpdump on a net with an
+ IP Multicast tunnel, you cannot filter out the datagrams using the
+ conventional syntax. (You can filter away all the ip-in-ip traffic
+ with "not ip proto 4".)
+
+- print-nfs.c: Keep pending rpc's in circular table. Add generic
+ nfs header and remove os dependences. Thanks to Jeffrey Mogul.
+
+- print-ospf.c: Improvements. Thanks to Jeffrey Mogul.
+
+- tcpdump.c: Add -T flag allows interpretation of "vat", "wb", "rpc"
+ (sunrpc) and rtp packets. Added "inbound" and "outbound" keywords
+ Add && and || operators
+
+v2.2.1 Tue Jun 6 17:57:22 PDT 1992
+
+- Fix bug with -c flag.
+
+v2.2 Fri May 22 17:19:41 PDT 1992
+
+- savefile.c: Remove hack that shouldn't have been exported. Add
+ truncate checks.
+
+- Added the 'icmp' keyword. For example, 'icmp[0] != 8 and icmp[0] != 0'
+ matches non-echo/reply ICMP packets.
+
+- Many improvements to filter code optimizer.
+
+- Added 'multicast' keyword and extended the 'broadcast' keyword can now be
+ so that protocol qualifications are allowed. For example, "ip broadcast"
+ and "ether multicast" are valid filters.
+
+- Added support for monitoring the loopback interface (i.e. 'tcpdump -i lo').
+ Jeffrey Honig (jch@MITCHELL.CIT.CORNELL.EDU) contributed the kernel
+ patches to netinet/if_loop.c.
+
+- Added support for the Ungermann-Bass Ethernet on IBM/PC-RTs running AOS.
+ Contact Jeffrey Honig (jch@MITCHELL.CIT.CORNELL.EDU) for the diffs.
+
+- Added EGP and OSPF printers, thanks to Jeffrey Honig.
+
+v2.1 Tue Jan 28 11:00:14 PST 1992
+
+- Internal release (never publicly exported).
+
+v2.0.1 Sun Jan 26 21:10:10 PDT
+
+- Various byte ordering fixes.
+
+- Add truncation checks.
+
+- inet.c: Support BSD style SIOCGIFCONF.
+
+- nametoaddr.c: Handle multi addresses for single host.
+
+- optimize.c: Rewritten.
+
+- pcap-bpf.c: don't choke when we get ptraced. only set promiscuous
+ for broadcast nets.
+
+- print-atal.c: Fix an alignment bug (thanks to
+ stanonik@nprdc.navy.mil) Add missing printf() argument.
+
+- print-bootp.c: First attempt at decoding the vendor buffer.
+
+- print-domain.c: Fix truncation checks.
+
+- print-icmp.c: Calculate length of packets from the ip header.
+
+- print-ip.c: Print frag id in decimal (so it's easier to match up
+ with non-frags). Add support for ospf, egp and igmp.
+
+- print-nfs.c: Lots of changes.
+
+- print-ntp.c: Make some verbose output depend on -v.
+
+- print-snmp.c: New version from John LoVerso.
+
+- print-tcp.c: Print rfc1072 tcp options.
+
+- tcpdump.c: Print "0x" prefix for %x formats. Always print 6 digits
+ (microseconds) worth of precision. Fix uid bugs.
+
+- A packet dumper has been added (thanks to Jeff Mogul of DECWRL).
+ With this option, you can create an architecture independent binary
+ trace file in real time, without the overhead of the packet printer.
+ At a later time, the packets can be filtered (again) and printed.
+
+- BSD is supported. You must have BPF in your kernel.
+ Since the filtering is now done in the kernel, fewer packets are
+ dropped. In fact, with BPF and the packet dumper option, a measly
+ Sun 3/50 can keep up with a busy network.
+
+- Compressed SLIP packets can now be dumped, provided you use our
+ SLIP software and BPF. These packets are dumped as any other IP
+ packet; the compressed headers are dumped with the '-e' option.
+
+- Machines with little-endian byte ordering are supported (thanks to
+ Jeff Mogul).
+
+- Ultrix 4.0 is supported (also thanks to Jeff Mogul).
+
+- IBM RT and Stanford Enetfilter support has been added by
+ Rayan Zachariassen <rayan@canet.ca>. Tcpdump has been tested under
+ both the vanilla Enetfilter interface, and the extended interface
+ (#ifdef'd by IBMRTPC) present in the MERIT version of the Enetfilter.
+
+- TFTP packets are now printed (requests only).
+
+- BOOTP packets are now printed.
+
+- SNMP packets are now printed. (thanks to John LoVerso of Xylogics).
+
+- Sparc architectures, including the Sparcstation-1, are now
+ supported thanks to Steve McCanne and Craig Leres.
+
+- SunOS 4 is now supported thanks to Micky Liu of Columbia
+ University (micky@cunixc.cc.columbia.edu).
+
+- IP options are now printed.
+
+- RIP packets are now printed.
+
+- There's a -v flag that prints out more information than the
+ default (e.g., it will enable printing of IP ttl, tos and id)
+ and -q flag that prints out less (e.g., it will disable
+ interpretation of AppleTalk-in-UDP).
+
+- The grammar has undergone substantial changes (if you have an
+ earlier version of tcpdump, you should re-read the manual
+ entry).
+
+ The most useful change is the addition of an expression
+ syntax that lets you filter on arbitrary fields or values in the
+ packet. E.g., "ip[0] > 0x45" would print only packets with IP
+ options, "tcp[13] & 3 != 0" would print only TCP SYN and FIN
+ packets.
+
+ The most painful change is that concatenation no longer means
+ "and" -- e.g., you have to say "host foo and port bar" instead
+ of "host foo port bar". The up side to this down is that
+ repeated qualifiers can be omitted, making most filter
+ expressions shorter. E.g., you can now say "ip host foo and
+ (bar or baz)" to look at ip traffic between hosts foo and bar or
+ between hosts foo and baz. [The old way of saying this was "ip
+ host foo and (ip host bar or ip host baz)".]
+
+v2.0 Sun Jan 13 12:20:40 PST 1991
+
+- Initial public release.
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..9495b5d
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,1371 @@
+if(WIN32)
+ #
+ # We need 3.12 or later, so that we can set policy CMP0074; see
+ # below.
+ cmake_minimum_required(VERSION 3.12)
+else(WIN32)
+ #
+ # For now, require only 2.8.6, just in case somebody is
+ # configuring with CMake on a "long-term support" version
+ # of some OS and that version supplies an older version of
+ # CMake.
+ #
+ # If this is ever updated to CMake 3.1 or later, remove the
+ # stuff in cmake/Modules/FindPCAP.cmake that appends subdirectories
+ # of directories from CMAKE_PREFIX_PATH to the PKG_CONFIG_PATH
+ # environment variable when running pkg-config, to make sure
+ # it finds any .pc file from there.
+ #
+ cmake_minimum_required(VERSION 2.8.12)
+endif(WIN32)
+
+#
+# We want find_path() and find_library() to honor {packagename}_ROOT,
+# as that appears to be the standard way to say "hey, look here for
+# this package" from the command line.
+#
+if(POLICY CMP0074)
+ cmake_policy(SET CMP0074 NEW)
+endif()
+
+#
+# OK, this is a pain.
+#
+# When building on NetBSD, with a libpcap installed from pkgsrc,
+# a -Wl,-rpath,/usr/pkg/lib option is added to the options when
+# linking tcpdump. This puts /usr/pkg/lib into the run-time path.
+#
+# However, by default, CMake adds a rule to the install CMake script
+# a CMake command (using an undocumented subcommand of file()) that
+# strips /usr/pkg/lib *out* of the run-time path; the message in the
+# output for the "install" target is
+#
+# -- Set runtime path of "{target-directory}/tcpdump" to ""
+#
+# I am not certain what the rationale is for doing this, but a
+# *consequence* of this is that, when you run the installed tcpdump,
+# it fails to find libpcap.so:
+#
+# $ {target-directory}/tcpdump -h
+# {target-directory}/tcpdump: Shared object "libpcap.so.0" not found
+#
+# It also appears to be the case that, on Ubuntu 22.04, FreeBSD 12,
+# DragonFly BSD 5.8, OpenBSD 6.6, and Solaris 11.4,
+#
+# On Ubuntu and Solaris, even if you have a libpcap in /usr/local, you
+# have to provide not only -I/usr/local/include and -L/usr/local/lib,
+# you also must provide -Wl,-rpath,/usr/local/lib in order to have
+# the run-time linker look in /usr/local/lib for libpcap. If it's not
+# specified, then, if the shared library major version number of the
+# libpcap in /usr/lib is the same as the shared major version number
+# of the libpcap in /usr/local/lib, the run-time linker will find the
+# libpcap in /usr/lib; if the versions are different, the run-time
+# linker will fail to find the libpcap in /usr/lib, so the program will
+# fail to run.
+#
+# We suppress this by setting CMAKE_INSTALL_RPATH_USE_LINK_PATH to TRUE;
+# as the documentation for that variable says:
+#
+# Add paths to linker search and installed rpath.
+#
+# CMAKE_INSTALL_RPATH_USE_LINK_PATH is a boolean that if set to True
+# will append to the runtime search path (rpath) of installed
+# binaries any directories outside the project that are in the linker
+# search path or contain linked library files. The directories are
+# appended after the value of the INSTALL_RPATH target property.
+#
+# If, for whatever reason, directories in which we search for external
+# libraries, other than the standard system library directories, are
+# added to the executable's rpath in the build process, we most
+# defintely want them in the installed image's rpath if they are
+# necessary in order to find the libraries at run time.
+#
+set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+
+set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
+
+#
+# OK, this is a royal pain.
+#
+# CMake will try to determine the sizes of some data types, including
+# void *, early in the process of configuration; apparently, it's done
+# as part of processing the project() command.
+#
+# At least as of CMake 2.8.6, it does so by checking the size of
+# "void *" in C, setting CMAKE_C_SIZEOF_DATA_PTR based on that,
+# setting CMAKE_SIZEOF_VOID_P to that, and then checking the size
+# of "void *" in C++, setting CMAKE_CXX_SIZEOF_DATA_PTR based on
+# that, and then setting CMAKE_SIZEOF_VOID_P to *that*.
+#
+# The compile tests include whatever C flags may have been provided
+# to CMake in the CFLAGS and CXXFLAGS environment variables.
+#
+# If you set an architecture flag such as -m32 or -m64 in CFLAGS
+# but *not* in CXXFLAGS, the size for C++ will win, and hilarity
+# will ensue.
+#
+# Or if, at least on Solaris, you have a newer version of GCC
+# installed, but *not* a newer version of G++, and you have Oracle
+# Studio installed, it will find GCC, which will default to building
+# 64-bit, and Oracle Studio's C++ compiler, which will default to
+# building 32-bit, the size for C++ will win, and, again, hilarity
+# will ensue.
+#
+# So we *explicitly* state that only C is used; there is currently no
+# C++ code in tcpdump.
+#
+project(tcpdump C)
+
+#
+# For checking if a compiler flag works and adding it if it does.
+#
+include(CheckCCompilerFlag)
+macro(check_and_add_compiler_option _option)
+ message(STATUS "Checking C compiler flag ${_option}")
+ string(REPLACE "=" "-" _temp_option_variable ${_option})
+ string(REGEX REPLACE "^-" "" _option_variable ${_temp_option_variable})
+ check_c_compiler_flag("${_option}" ${_option_variable})
+ if(${${_option_variable}})
+ set(C_ADDITIONAL_FLAGS "${C_ADDITIONAL_FLAGS} ${_option}")
+ endif()
+endmacro()
+
+#
+# If we're building with Visual Studio, we require Visual Studio 2015,
+# in order to get sufficient C99 compatibility. Check for that.
+#
+# If not, try the appropriate flag for the compiler to enable C99
+# features.
+#
+set(C_ADDITIONAL_FLAGS "")
+if(MSVC)
+ if(MSVC_VERSION LESS 1900)
+ message(FATAL_ERROR "Visual Studio 2015 or later is required")
+ endif()
+
+ #
+ # Treat source files as being in UTF-8 with MSVC if it's not using
+ # the Clang front end.
+ # We assume that UTF-8 source is OK with other compilers and with
+ # MSVC if it's using the Clang front end.
+ #
+ if(NOT ${CMAKE_C_COMPILER} MATCHES "clang*")
+ set(C_ADDITIONAL_FLAGS "${C_ADDITIONAL_FLAGS} /utf-8")
+ endif(NOT ${CMAKE_C_COMPILER} MATCHES "clang*")
+else(MSVC)
+ #
+ # Try to enable as many C99 features as we can.
+ # At minimum, we want C++/C99-style // comments.
+ #
+ # Newer versions of compilers might default to supporting C99, but
+ # older versions may require a special flag.
+ #
+ # Prior to CMake 3.1, setting CMAKE_C_STANDARD will not have any effect,
+ # so, unless and until we require CMake 3.1 or later, we have to do it
+ # ourselves on pre-3.1 CMake, so we just do it ourselves on all versions
+ # of CMake.
+ #
+ # Note: with CMake 3.1 through 3.5, the only compilers for which CMake
+ # handles CMAKE_C_STANDARD are GCC and Clang. 3.6 adds support only
+ # for Intel C; 3.9 adds support for PGI C, Sun C, and IBM XL C, and
+ # 3.10 adds support for Cray C and IAR C, but no version of CMake has
+ # support for HP C. Therefore, even if we use CMAKE_C_STANDARD with
+ # compilers for which CMake supports it, we may still have to do it
+ # ourselves on other compilers.
+ #
+ # See the CMake documentation for the CMAKE_<LANG>_COMPILER_ID variables
+ # for a list of compiler IDs.
+ #
+ # XXX - this just tests whether the option works and adds it if it does.
+ # We don't test whether it's necessary in order to get the C99 features
+ # that we use; if we ever have a user who tries to compile with a compiler
+ # that can't be made to support those features, we can add a test to make
+ # sure we actually *have* C99 support.
+ #
+ if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR
+ CMAKE_C_COMPILER_ID MATCHES "Clang")
+ check_and_add_compiler_option("-std=gnu99")
+ elseif(CMAKE_C_COMPILER_ID MATCHES "XL")
+ #
+ # We want support for extensions picked up for GNU C compatibility,
+ # so we use -qlanglvl=extc99.
+ #
+ check_and_add_compiler_option("-qlanglvl=extc99")
+ elseif(CMAKE_C_COMPILER_ID MATCHES "HP")
+ check_and_add_compiler_option("-AC99")
+ elseif(CMAKE_C_COMPILER_ID MATCHES "Sun")
+ check_and_add_compiler_option("-xc99")
+ elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
+ check_and_add_compiler_option("-c99")
+ endif()
+endif(MSVC)
+
+set(LIBRARY_NAME netdissect)
+
+###################################################################
+# Parameters
+###################################################################
+
+option(WITH_SMI "Build with libsmi, if available" ON)
+option(WITH_CRYPTO "Build with OpenSSL/libressl libcrypto, if available" ON)
+option(WITH_CAPSICUM "Build with Capsicum security functions, if available" ON)
+option(WITH_CAP_NG "Use libcap-ng, if available" ON)
+option(ENABLE_SMB "Build with the SMB dissector" OFF)
+
+#
+# String parameters. Neither of them are set, initially; only if the
+# user explicitly configures them are they set.
+#
+# WITH_CHROOT is STRING, not PATH, as the directory need not exist
+# when CMake is run.
+#
+set(WITH_CHROOT CACHE STRING
+ "Directory to which to chroot when dropping privileges")
+set(WITH_USER CACHE STRING
+ "User to whom to set the UID when dropping privileges")
+
+#
+# By default, build universal with the appropriate set of architectures
+# for the OS on which we're doing the build.
+#
+if(APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "")
+ #
+ # Get the major version of Darwin.
+ #
+ string(REGEX MATCH "^([0-9]+)" SYSTEM_VERSION_MAJOR "${CMAKE_SYSTEM_VERSION}")
+
+ if(SYSTEM_VERSION_MAJOR EQUAL 9)
+ #
+ # Leopard. Build for x86 and 32-bit PowerPC, with
+ # x86 first. (That's what Apple does.)
+ #
+ set(CMAKE_OSX_ARCHITECTURES "i386;ppc")
+ elseif(SYSTEM_VERSION_MAJOR EQUAL 10)
+ #
+ # Snow Leopard. Build for x86-64 and x86, with
+ # x86-64 first. (That's what Apple does.)
+ #
+ set(CMAKE_OSX_ARCHITECTURES "x86_64;i386")
+ endif()
+endif()
+
+###################################################################
+# Versioning
+###################################################################
+
+# Get, parse, format and set tcpdump's version string from
+# [tcpdump_root]/VERSION for later use.
+
+# Get MAJOR, MINOR, PATCH & SUFFIX
+file(STRINGS ${tcpdump_SOURCE_DIR}/VERSION
+ PACKAGE_VERSION
+ LIMIT_COUNT 1 # Read only the first line
+)
+
+######################################
+# Project settings
+######################################
+
+add_definitions(-DHAVE_CONFIG_H)
+
+include_directories(
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${tcpdump_SOURCE_DIR}
+)
+
+if(MSVC)
+ add_definitions(-D__STDC__)
+ add_definitions(-D_CRT_SECURE_NO_WARNINGS)
+endif(MSVC)
+
+if(MSVC)
+ if (USE_STATIC_RT)
+ MESSAGE(STATUS "Use STATIC runtime")
+ set(NAME_RT MT)
+ set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT")
+ set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
+
+ set (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MT")
+ set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MT")
+ set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
+ set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
+ else (USE_STATIC_RT)
+ MESSAGE(STATUS "Use DYNAMIC runtime")
+ set(NAME_RT MD)
+ set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MD")
+ set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MD")
+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
+
+ set (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MD")
+ set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MD")
+ set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MD")
+ set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MDd")
+ endif (USE_STATIC_RT)
+endif(MSVC)
+
+###################################################################
+# Detect available platform features
+###################################################################
+
+include(CMakePushCheckState)
+include(CheckIncludeFile)
+include(CheckIncludeFiles)
+include(CheckFunctionExists)
+include(CheckLibraryExists)
+include(CheckSymbolExists)
+include(CheckStructHasMember)
+include(CheckVariableExists)
+include(CheckTypeSize)
+
+#
+# Header files.
+#
+check_include_file(fcntl.h HAVE_FCNTL_H)
+check_include_file(rpc/rpc.h HAVE_RPC_RPC_H)
+check_include_file(net/if.h HAVE_NET_IF_H)
+if(HAVE_RPC_RPC_H)
+ check_include_files("rpc/rpc.h;rpc/rpcent.h" HAVE_RPC_RPCENT_H)
+endif(HAVE_RPC_RPC_H)
+
+#
+# Functions.
+#
+check_function_exists(strlcat HAVE_STRLCAT)
+check_function_exists(strlcpy HAVE_STRLCPY)
+check_function_exists(strdup HAVE_STRDUP)
+check_function_exists(strsep HAVE_STRSEP)
+
+#
+# Find library needed for gethostbyaddr.
+# NOTE: if you hand check_library_exists as its last argument a variable
+# that's been set, it skips the test, so we need different variables.
+#
+set(TCPDUMP_LINK_LIBRARIES "")
+if(WIN32)
+ #
+ # We need winsock2.h and ws2tcpip.h.
+ #
+ cmake_push_check_state()
+ set(CMAKE_REQUIRED_LIBRARIES ws2_32)
+ check_symbol_exists(gethostbyaddr "winsock2.h;ws2tcpip.h" LIBWS2_32_HAS_GETHOSTBYADDR)
+ cmake_pop_check_state()
+ if(LIBWS2_32_HAS_GETHOSTBYADDR)
+ set(TCPDUMP_LINK_LIBRARIES ws2_32 ${TCPDUMP_LINK_LIBRARIES})
+ else(LIBWS2_32_HAS_GETHOSTBYADDR)
+ message(FATAL_ERROR "gethostbyaddr is required, but wasn't found")
+ endif(LIBWS2_32_HAS_GETHOSTBYADDR)
+else(WIN32)
+ check_function_exists(gethostbyaddr STDLIBS_HAVE_GETHOSTBYADDR)
+ if(NOT STDLIBS_HAVE_GETHOSTBYADDR)
+ check_library_exists(socket gethostbyaddr "" LIBSOCKET_HAS_GETHOSTBYADDR)
+ if(LIBSOCKET_HAS_GETHOSTBYADDR)
+ set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} socket)
+ else(LIBSOCKET_HAS_GETHOSTBYADDR)
+ check_library_exists(nsl gethostbyaddr "" LIBNSL_HAS_GETHOSTBYADDR)
+ if(LIBNSL_HAS_GETHOSTBYADDR)
+ set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} nsl)
+ else(LIBNSL_HAS_GETHOSTBYADDR)
+ message(FATAL_ERROR "gethostbyaddr is required, but wasn't found")
+ endif(LIBNSL_HAS_GETHOSTBYADDR)
+ endif(LIBSOCKET_HAS_GETHOSTBYADDR)
+ endif(NOT STDLIBS_HAVE_GETHOSTBYADDR)
+endif(WIN32)
+
+#
+# This may require additional libraries.
+#
+cmake_push_check_state()
+set(CMAKE_REQUIRED_LIBRARIES ${TCPDUMP_LINK_LIBRARIES})
+check_function_exists(getservent STDLIBS_HAVE_GETSERVENT)
+if(STDLIBS_HAVE_GETSERVENT)
+ set(HAVE_GETSERVENT TRUE)
+else(STDLIBS_HAVE_GETSERVENT)
+ #
+ # Some platforms may need -lsocket for getservent.
+ #
+ set(CMAKE_REQUIRED_LIBRARIES socket ${TCPDUMP_LINK_LIBRARIES})
+ check_function_exists(getservent LIBSOCKET_HAS_GETSERVENT)
+ if(LIBSOCKET_HAS_GETSERVENT)
+ set(HAVE_GETSERVENT TRUE)
+ set(TCPDUMP_LINK_LIBRARIES socket ${TCPDUMP_LINK_LIBRARIES})
+ endif(LIBSOCKET_HAS_GETSERVENT)
+endif(STDLIBS_HAVE_GETSERVENT)
+cmake_pop_check_state()
+
+#
+# Make sure we have vsnprintf() and snprintf(); we require them.
+# We use check_symbol_exists(), as they aren't necessarily external
+# functions - in Visual Studio, for example, they're inline functions
+# calling a common external function.
+#
+check_symbol_exists(vsnprintf "stdio.h" HAVE_VSNPRINTF)
+if(NOT HAVE_VSNPRINTF)
+ message(FATAL_ERROR "vsnprintf() is required but wasn't found")
+endif(NOT HAVE_VSNPRINTF)
+check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF)
+if(NOT HAVE_SNPRINTF)
+ message(FATAL_ERROR "snprintf() is required but wasn't found")
+endif()
+
+check_function_exists(getopt_long HAVE_GETOPT_LONG)
+check_function_exists(setlinebuf HAVE_SETLINEBUF)
+#
+# For Windows, don't need to waste time checking for fork() or vfork().
+#
+if(NOT WIN32)
+ check_function_exists(fork HAVE_FORK)
+ check_function_exists(vfork HAVE_VFORK)
+endif(NOT WIN32)
+
+#
+# Some platforms may need -lnsl for getrpcbynumber.
+#
+cmake_push_check_state()
+set(CMAKE_REQUIRED_LIBRARIES ${TCPDUMP_LINK_LIBRARIES})
+check_function_exists(getrpcbynumber STDLIBS_HAVE_GETRPCBYNUMBER)
+if(STDLIBS_HAVE_GETRPCBYNUMBER)
+ set(HAVE_GETRPCBYNUMBER TRUE)
+else(STDLIBS_HAVE_GETRPCBYNUMBER)
+ set(CMAKE_REQUIRED_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} nsl)
+ check_function_exists(getrpcbynumber LIBNSL_HAS_GETRPCBYNUMBER)
+ if(LIBNSL_HAS_GETRPCBYNUMBER)
+ set(HAVE_GETRPCBYNUMBER TRUE)
+ set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} nsl)
+ endif(LIBNSL_HAS_GETRPCBYNUMBER)
+endif(STDLIBS_HAVE_GETRPCBYNUMBER)
+cmake_pop_check_state()
+
+#
+# This requires the libraries we require, as ether_ntohost might be
+# in one of those libraries. That means we have to do this after
+# we check for those libraries.
+#
+# You are in a twisty little maze of UN*Xes, all different.
+# Some might not have ether_ntohost().
+# Some might have it and declare it in <net/ethernet.h>.
+# Some might have it and declare it in <netinet/ether.h>
+# Some might have it and declare it in <sys/ethernet.h>.
+# Some might have it and declare it in <arpa/inet.h>.
+# Some might have it and declare it in <netinet/if_ether.h>.
+# Some might have it and not declare it in any header file.
+#
+# Before you is a C compiler.
+#
+cmake_push_check_state()
+set(CMAKE_REQUIRED_LIBRARIES ${TCPDUMP_LINK_LIBRARIES})
+check_function_exists(ether_ntohost HAVE_ETHER_NTOHOST)
+if(HAVE_ETHER_NTOHOST)
+ #
+ # OK, we have ether_ntohost(). We don't check whether it's buggy,
+ # as we assume any system that has CMake is likely to be new enough
+ # that, if it has ether_ntohost(), whatever bug is checked for in
+ # autotools is fixed; we just decide to use it.
+ #
+ set(USE_ETHER_NTOHOST TRUE)
+
+ #
+ # Is it declared in <net/ethernet.h>?
+ #
+ # This test fails if we don't have <net/ethernet.h> or if we do
+ # but it doesn't declare ether_ntohost().
+ #
+ check_symbol_exists(ether_ntohost net/ethernet.h NET_ETHERNET_H_DECLARES_ETHER_NTOHOST)
+ if(NET_ETHERNET_H_DECLARES_ETHER_NTOHOST)
+ #
+ # Yes - we have it declared.
+ #
+ set(HAVE_DECL_ETHER_NTOHOST TRUE)
+ endif()
+ #
+ # Did that succeed?
+ #
+ if(NOT HAVE_DECL_ETHER_NTOHOST)
+ #
+ # No - how about <netinet/ether.h>, as on Linux?
+ #
+ # This test fails if we don't have <netinet/ether.h>
+ # or if we do but it doesn't declare ether_ntohost().
+ #
+ check_symbol_exists(ether_ntohost netinet/ether.h NETINET_ETHER_H_DECLARES_ETHER_NTOHOST)
+ if(NETINET_ETHER_H_DECLARES_ETHER_NTOHOST)
+ #
+ # Yes - we have it declared.
+ #
+ set(HAVE_DECL_ETHER_NTOHOST TRUE)
+ endif()
+ endif()
+ #
+ # Did that succeed?
+ #
+ if(NOT HAVE_DECL_ETHER_NTOHOST)
+ #
+ # No - how about <sys/ethernet.h>, as on Solaris 10 and later?
+ #
+ # This test fails if we don't have <sys/ethernet.h>
+ # or if we do but it doesn't declare ether_ntohost().
+ #
+ check_symbol_exists(ether_ntohost sys/ethernet.h SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST)
+ if(SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST)
+ #
+ # Yes - we have it declared.
+ #
+ set(HAVE_DECL_ETHER_NTOHOST TRUE)
+ endif()
+ endif()
+ #
+ # Did that succeed?
+ #
+ if(NOT HAVE_DECL_ETHER_NTOHOST)
+ #
+ # No, how about <arpa/inet.h>, as on AIX?
+ #
+ # This test fails if we don't have <arpa/inet.h>
+ # or if we do but it doesn't declare ether_ntohost().
+ #
+ check_symbol_exists(ether_ntohost arpa/inet.h ARPA_INET_H_DECLARES_ETHER_NTOHOST)
+ if(ARPA_INET_H_DECLARES_ETHER_NTOHOST)
+ #
+ # Yes - we have it declared.
+ #
+ set(HAVE_DECL_ETHER_NTOHOST TRUE)
+ endif()
+ endif()
+ #
+ # Did that succeed?
+ #
+ if(NOT HAVE_DECL_ETHER_NTOHOST)
+ #
+ # No, how about <netinet/if_ether.h>?
+ # On some platforms, it requires <net/if.h> and
+ # <netinet/in.h>, and we always include it with
+ # both of them, so test it with both of them.
+ #
+ # This test fails if we don't have <netinet/if_ether.h>
+ # and the headers we include before it, or if we do but
+ # <netinet/if_ether.h> doesn't declare ether_ntohost().
+ #
+ check_symbol_exists(ether_ntohost "sys/types.h;sys/socket.h;net/if.h;netinet/in.h;netinet/if_ether.h" NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST)
+ if(NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST)
+ #
+ # Yes - we have it declared.
+ #
+ set(HAVE_DECL_ETHER_NTOHOST TRUE)
+ endif()
+ endif()
+ #
+ # After all that, is ether_ntohost() declared?
+ #
+ if(NOT HAVE_DECL_ETHER_NTOHOST)
+ #
+ # No, we'll have to declare it ourselves.
+ # Do we have "struct ether_addr" if we include<netinet/if_ether.h>?
+ #
+ check_struct_has_member("struct ether_addr" octet "sys/types.h;sys/socket.h;net/if.h;netinet/in.h;netinet/if_ether.h" HAVE_STRUCT_ETHER_ADDR)
+ endif()
+endif()
+cmake_pop_check_state()
+
+#
+# Data types.
+#
+# XXX - there's no check_struct() macro that's like check_struct_has_member()
+# except that it only checks for the existence of the structure type,
+# so we use check_struct_has_member() and look for ss_family.
+#
+
+#
+# Check for IPv6 support.
+# We just check for AF_INET6 and struct in6_addr.
+#
+cmake_push_check_state()
+if(WIN32)
+ set(CMAKE_EXTRA_INCLUDE_FILES sys/types.h ws2tcpip.h)
+ check_symbol_exists(AF_INET6 "sys/types.h;ws2tcpip.h" HAVE_AF_INET6)
+else(WIN32)
+ set(CMAKE_EXTRA_INCLUDE_FILES sys/types.h sys/socket.h netinet/in.h)
+ check_symbol_exists(AF_INET6 "sys/types.h;sys/socket.h;netinet/in.h" HAVE_AF_INET6)
+endif(WIN32)
+check_type_size("struct in6_addr" HAVE_STRUCT_IN6_ADDR)
+cmake_pop_check_state()
+if(HAVE_AF_INET6 AND HAVE_STRUCT_IN6_ADDR)
+ set(HAVE_OS_IPV6_SUPPORT TRUE)
+endif(HAVE_AF_INET6 AND HAVE_STRUCT_IN6_ADDR)
+
+######################################
+# External dependencies
+######################################
+
+#
+# libpcap/WinPcap/Npcap.
+# First, find it.
+#
+find_package(PCAP REQUIRED)
+include_directories(${PCAP_INCLUDE_DIRS})
+
+cmake_push_check_state()
+
+#
+# Now check headers.
+#
+set(CMAKE_REQUIRED_INCLUDES ${PCAP_INCLUDE_DIRS})
+
+#
+# Check whether we have pcap/pcap-inttypes.h.
+# If we do, we use that to get the C99 types defined.
+#
+check_include_file(pcap/pcap-inttypes.h HAVE_PCAP_PCAP_INTTYPES_H)
+
+#
+# Check for various functions in libpcap/WinPcap/Npcap.
+#
+cmake_push_check_state()
+set(CMAKE_REQUIRED_LIBRARIES ${PCAP_LIBRARIES})
+
+#
+# Check for "pcap_list_datalinks()" and use a substitute version if
+# it's not present. If it is present, check for "pcap_free_datalinks()";
+# if it's not present, we don't replace it for now. (We could do so
+# on UN*X, but not on Windows, where hilarity ensues if a program
+# built with one version of the MSVC support library tries to free
+# something allocated by a library built with another version of
+# the MSVC support library.)
+#
+check_function_exists(pcap_list_datalinks HAVE_PCAP_LIST_DATALINKS)
+if(HAVE_PCAP_LIST_DATALINKS)
+ check_function_exists(pcap_free_datalinks HAVE_PCAP_FREE_DATALINKS)
+endif(HAVE_PCAP_LIST_DATALINKS)
+
+#
+# Check for "pcap_datalink_name_to_val()", and use a substitute
+# version if it's not present. If it is present, check for
+# "pcap_datalink_val_to_description()", and if we don't have it,
+# use a substitute version.
+#
+check_function_exists(pcap_datalink_name_to_val HAVE_PCAP_DATALINK_NAME_TO_VAL)
+if(HAVE_PCAP_DATALINK_NAME_TO_VAL)
+ check_function_exists(pcap_datalink_val_to_description HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION)
+endif(HAVE_PCAP_DATALINK_NAME_TO_VAL)
+
+#
+# Check for "pcap_set_datalink()"; you can't substitute for it if
+# it's absent (it has hooks into libpcap), so just define the
+# HAVE_ value if it's there.
+#
+check_function_exists(pcap_set_datalink HAVE_PCAP_SET_DATALINK)
+
+#
+# Check for "pcap_breakloop()"; you can't substitute for it if
+# it's absent (it has hooks into the live capture routines),
+# so just define the HAVE_ value if it's there.
+#
+check_function_exists(pcap_breakloop HAVE_PCAP_BREAKLOOP)
+
+#
+# Check for "pcap_dump_ftell()"; we use a substitute version
+# if it's not present.
+#
+check_function_exists(pcap_dump_ftell HAVE_PCAP_DUMP_FTELL)
+
+#
+# Do we have the new open API? Check for pcap_create() and for
+# pcap_statustostr(), and assume that, if we have both of them,
+# we also have pcap_activate() and the other new routines
+# introduced in libpcap 1.0.0. (We check for pcap_statustostr()
+# as well, because WinPcap 4.1.3 screwed up and exported pcap_create()
+# but not other routines such as pcap_statustostr(), even though it
+# defined them and even though you really want pcap_statustostr() to
+# get strings corresponding to some of the status returns from the
+# new routines.)
+#
+check_function_exists(pcap_statustostr HAVE_PCAP_STATUSTOSTR)
+#
+# If we don't have pcap_statustostr(), don't check for pcap_create(),
+# so we pretend we don't have it.
+#
+if(HAVE_PCAP_STATUSTOSTR)
+ check_function_exists(pcap_create HAVE_PCAP_CREATE)
+endif(HAVE_PCAP_STATUSTOSTR)
+if(HAVE_PCAP_CREATE)
+ #
+ # OK, do we have pcap_set_tstamp_type? If so, assume we have
+ # pcap_list_tstamp_types and pcap_free_tstamp_types as well.
+ #
+ check_function_exists(pcap_set_tstamp_type HAVE_PCAP_SET_TSTAMP_TYPE)
+
+ #
+ # And do we have pcap_set_tstamp_precision? If so, we assume
+ # we also have pcap_open_offline_with_tstamp_precision.
+ #
+ check_function_exists(pcap_set_tstamp_precision HAVE_PCAP_SET_TSTAMP_PRECISION)
+endif(HAVE_PCAP_CREATE)
+
+#
+# Check for a miscellaneous collection of functions which we use
+# if we have them.
+#
+check_function_exists(pcap_findalldevs HAVE_PCAP_FINDALLDEVS)
+if(HAVE_PCAP_FINDALLDEVS)
+ #
+ # Check for libpcap having pcap_findalldevs() but the pcap.h header
+ # not having pcap_if_t; some versions of Mac OS X shipped with pcap.h
+ # from 0.6 and libpcap 0.8, so that libpcap had pcap_findalldevs but
+ # pcap.h didn't have pcap_if_t.
+ #
+ cmake_push_check_state()
+ set(CMAKE_REQUIRED_INCLUDES ${PCAP_INCLUDE_DIRS})
+ set(CMAKE_EXTRA_INCLUDE_FILES pcap.h)
+ check_type_size(pcap_if_t PCAP_IF_T)
+ cmake_pop_check_state()
+endif(HAVE_PCAP_FINDALLDEVS)
+check_function_exists(pcap_dump_flush HAVE_PCAP_DUMP_FLUSH)
+check_function_exists(pcap_lib_version HAVE_PCAP_LIB_VERSION)
+if(NOT HAVE_PCAP_LIB_VERSION)
+ # Check for the pcap_version string variable and set HAVE_PCAP_VERSION
+endif(NOT HAVE_PCAP_LIB_VERSION)
+check_function_exists(pcap_setdirection HAVE_PCAP_SETDIRECTION)
+check_function_exists(pcap_set_immediate_mode HAVE_PCAP_SET_IMMEDIATE_MODE)
+check_function_exists(pcap_dump_ftell64 HAVE_PCAP_DUMP_FTELL64)
+check_function_exists(pcap_open HAVE_PCAP_OPEN)
+check_function_exists(pcap_findalldevs_ex HAVE_PCAP_FINDALLDEVS_EX)
+
+#
+# On Windows, check for pcap_wsockinit(); if we don't have it, check for
+# wsockinit().
+#
+if(WIN32)
+ check_function_exists(pcap_wsockinit HAVE_PCAP_WSOCKINIT)
+ if(NOT HAVE_PCAP_WSOCKINIT)
+ check_function_exists(wsockinit HAVE_WSOCKINIT)
+ endif(NOT HAVE_PCAP_WSOCKINIT)
+endif(WIN32)
+
+#
+# Check for special debugging functions
+#
+check_function_exists(pcap_set_parser_debug HAVE_PCAP_SET_PARSER_DEBUG)
+if(NOT HAVE_PCAP_SET_PARSER_DEBUG)
+ # Check whether libpcap defines pcap_debug or yydebug
+ check_variable_exists(pcap_debug HAVE_PCAP_DEBUG)
+ if(NOT HAVE_PCAP_DEBUG)
+ check_variable_exists(yydebug HAVE_YYDEBUG)
+ endif(NOT HAVE_PCAP_DEBUG)
+endif(NOT HAVE_PCAP_SET_PARSER_DEBUG)
+
+check_function_exists(pcap_set_optimizer_debug HAVE_PCAP_SET_OPTIMIZER_DEBUG)
+check_function_exists(bpf_dump HAVE_BPF_DUMP)
+
+cmake_pop_check_state()
+
+#
+# We have libpcap.
+#
+include_directories(SYSTEM ${PCAP_INCLUDE_DIRS})
+set(TCPDUMP_LINK_LIBRARIES ${PCAP_LIBRARIES} ${TCPDUMP_LINK_LIBRARIES})
+
+#
+# Optional libraries.
+#
+
+#
+# libsmi.
+#
+if(WITH_SMI)
+ find_package(SMI)
+ if(SMI_FOUND)
+ include_directories(SYSTEM ${SMI_INCLUDE_DIRS})
+ set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} ${SMI_LIBRARIES})
+ set(USE_LIBSMI ON)
+ endif(SMI_FOUND)
+endif(WITH_SMI)
+
+#
+# OpenSSL/libressl libcrypto.
+#
+if(WITH_CRYPTO)
+ find_package(CRYPTO)
+ if(CRYPTO_FOUND)
+ #
+ # Check for some headers and functions.
+ #
+ check_include_file(openssl/evp.h HAVE_OPENSSL_EVP_H)
+
+ #
+ # 1) do we have EVP_CIPHER_CTX_new?
+ # If so, we use it to allocate an EVP_CIPHER_CTX, as
+ # EVP_CIPHER_CTX may be opaque; otherwise, we allocate
+ # it ourselves.
+ #
+ cmake_push_check_state()
+ set(CMAKE_REQUIRED_LIBRARIES "${CRYPTO_LIBRARIES}")
+
+ check_function_exists(EVP_CIPHER_CTX_new HAVE_EVP_CIPHER_CTX_NEW)
+
+ #
+ # 2) do we have EVP_DecryptInit_ex()?
+ # If so, we use it, because we need to be able to make two
+ # "initialize the cipher" calls, one with the cipher and key,
+ # and one with the IV, and, as of OpenSSL 1.1, You Can't Do That
+ # with EVP_DecryptInit(), because a call to EVP_DecryptInit() will
+ # unconditionally clear the context, and if you don't supply a
+ # cipher, it'll clear the cipher, rendering the context unusable
+ # and causing a crash.
+ #
+ check_function_exists(EVP_DecryptInit_ex HAVE_EVP_DECRYPTINIT_EX)
+
+ cmake_pop_check_state()
+
+ #
+ # We have libcrypto.
+ #
+ include_directories(SYSTEM ${CRYPTO_INCLUDE_DIRS})
+ set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} ${CRYPTO_LIBRARIES})
+ set(HAVE_LIBCRYPTO ON)
+ endif(CRYPTO_FOUND)
+endif(WITH_CRYPTO)
+
+#
+# Capsicum sandboxing.
+# Some of this is in the system library, some of it is in other libraries.
+#
+if(WITH_CAPSICUM)
+ check_include_files("sys/capsicum.h" HAVE_SYS_CAPSICUM_H)
+ if(HAVE_SYS_CAPSICUM_H)
+ check_function_exists(cap_enter HAVE_CAP_ENTER)
+ check_function_exists(cap_rights_limit HAVE_CAP_RIGHTS_LIMIT)
+ check_function_exists(cap_ioctls_limit HAVE_CAP_IOCTLS_LIMIT)
+ check_function_exists(openat HAVE_OPENAT)
+ if(HAVE_CAP_ENTER AND HAVE_CAP_RIGHTS_LIMIT AND
+ HAVE_CAP_IOCTLS_LIMIT AND HAVE_OPENAT)
+ #
+ # OK, we have the functions we need to support Capsicum.
+ #
+ set(HAVE_CAPSICUM TRUE)
+
+ #
+ # OK, can we use Casper?
+ #
+ check_library_exists(casper cap_init "" HAVE_CAP_INIT)
+ if(HAVE_CAP_INIT)
+ cmake_push_check_state()
+ set(CMAKE_REQUIRED_LIBRARIES casper)
+ check_library_exists(cap_dns cap_gethostbyaddr "" HAVE_CAP_GETHOSTBYADDR)
+ cmake_pop_check_state()
+ if(HAVE_CAP_GETHOSTBYADDR)
+ set(HAVE_CASPER TRUE)
+ set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} casper cap_dns)
+ endif(HAVE_CAP_GETHOSTBYADDR)
+ endif(HAVE_CAP_INIT)
+ endif(HAVE_CAP_ENTER AND HAVE_CAP_RIGHTS_LIMIT AND
+ HAVE_CAP_IOCTLS_LIMIT AND HAVE_OPENAT)
+ endif(HAVE_SYS_CAPSICUM_H)
+endif(WITH_CAPSICUM)
+
+#
+# libcap-ng.
+#
+if(WITH_CAP_NG)
+ check_include_file(cap-ng.h HAVE_CAP_NG_H)
+ check_library_exists(cap-ng capng_change_id "" HAVE_LIBCAP_NG)
+ if(HAVE_LIBCAP_NG)
+ set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} cap-ng)
+ endif(HAVE_LIBCAP_NG)
+endif(WITH_CAP_NG)
+
+###################################################################
+# Warning options
+###################################################################
+
+#
+# Check and add warning options if we have a .devel file.
+#
+if(EXISTS ${CMAKE_SOURCE_DIR}/.devel OR EXISTS ${CMAKE_BINARY_DIR}/.devel)
+ #
+ # Warning options.
+ #
+ if(MSVC AND NOT ${CMAKE_C_COMPILER} MATCHES "clang*")
+ #
+ # MSVC, with Microsoft's front end and code generator.
+ # "MSVC" is also set for Microsoft's compiler with a Clang
+ # front end and their code generator ("Clang/C2"), so we
+ # check for clang.exe and treat that differently.
+ #
+ check_and_add_compiler_option(-Wall)
+ #
+ # Disable some pointless warnings that /Wall turns on.
+ #
+ # Unfortunately, MSVC does not appear to have an equivalent
+ # to "__attribute__((unused))" to mark a particular function
+ # parameter as being known to be unused, so that the compiler
+ # won't warn about it (for example, the function might have
+ # that parameter because a pointer to it is being used, and
+ # the signature of that function includes that parameter).
+ # C++ lets you give a parameter a type but no name, but C
+ # doesn't have that.
+ #
+ check_and_add_compiler_option(-wd4100)
+ #
+ # In theory, we care whether somebody uses f() rather than
+ # f(void) to declare a function with no arguments, but, in
+ # practice, there are places in the Windows header files
+ # that appear to do that, so we squelch that warning.
+ #
+ check_and_add_compiler_option(-wd4255)
+ #
+ # Windows FD_SET() generates this, so we suppress it.
+ #
+ check_and_add_compiler_option(-wd4548)
+ #
+ # Perhaps testing something #defined to be 0 with #ifdef is an
+ # error, and it should be tested with #if, but perhaps it's
+ # not, and Microsoft does that in its headers, so we squelch
+ # that warning.
+ #
+ check_and_add_compiler_option(-wd4574)
+ #
+ # The Windows headers also test not-defined values in #if, so
+ # we don't want warnings about that, either.
+ #
+ check_and_add_compiler_option(-wd4668)
+ #
+ # We do *not* care whether some function is, or isn't, going to be
+ # expanded inline.
+ #
+ check_and_add_compiler_option(-wd4710)
+ check_and_add_compiler_option(-wd4711)
+ #
+ # We do *not* care whether we're adding padding bytes after
+ # structure members.
+ #
+ check_and_add_compiler_option(-wd4820)
+ #
+ # We do *not* care about every single place the compiler would
+ # have inserted Spectre mitigation if only we had told it to
+ # do so with /Qspectre. I guess the theory is that it's seeing
+ # bounds checks that would prevent out-of-bounds loads and that
+ # those out-of-bounds loads could be done speculatively and that
+ # the Spectre attack could detect the value of the out-of-bounds
+ # data *if* it's within our address space, but unless I'm
+ # missing something I don't see that as being any form of
+ # security hole.
+ #
+ # XXX - add /Qspectre if that is really worth doing.
+ #
+ check_and_add_compiler_option(-wd5045)
+ #
+ # We do *not* care whether a structure had padding added at
+ # the end because of __declspec(align) - *we* don't use
+ # __declspec(align), because the only structures whose layout
+ # we precisely specify are those that get overlayed on packet
+ # data, and in those every element is an array of octets so
+ # that we have full control over the size and aligmnet, and,
+ # apparently, jmp_buf has such a declaration on x86, meaning
+ # that everything that includes netdissect.h, i.e. almost every
+ # file in tcpdump, gets a warning.
+ #
+ check_and_add_compiler_option(-wd4324)
+ else()
+ #
+ # Other compilers, including MSVC with a Clang front end and
+ # Microsoft's code generator. We currently treat them as if
+ # they might support GCC-style -W options.
+ #
+ check_and_add_compiler_option(-W)
+ check_and_add_compiler_option(-Wall)
+ check_and_add_compiler_option(-Wassign-enum)
+ check_and_add_compiler_option(-Wcast-qual)
+ check_and_add_compiler_option(-Wmissing-prototypes)
+ check_and_add_compiler_option(-Wmissing-variable-declarations)
+ check_and_add_compiler_option(-Wold-style-definition)
+ check_and_add_compiler_option(-Wpedantic)
+ check_and_add_compiler_option(-Wpointer-arith)
+ check_and_add_compiler_option(-Wpointer-sign)
+ check_and_add_compiler_option(-Wshadow)
+ check_and_add_compiler_option(-Wsign-compare)
+ check_and_add_compiler_option(-Wstrict-prototypes)
+ check_and_add_compiler_option(-Wunreachable-code-return)
+ check_and_add_compiler_option(-Wused-but-marked-unused)
+ check_and_add_compiler_option(-Wwrite-strings)
+ endif()
+endif()
+
+#
+# Extra compiler options for the build matrix scripts to request -Werror or
+# its equivalent if required. The CMake variable name cannot be CFLAGS
+# because that is already used for a different purpose in CMake. Example
+# usage: cmake -DEXTRA_CFLAGS='-Wall -Wextra -Werror' ...
+#
+if(NOT "${EXTRA_CFLAGS}" STREQUAL "")
+ foreach(_extra_cflag ${EXTRA_CFLAGS})
+ check_and_add_compiler_option("${_extra_cflag}")
+ endforeach(_extra_cflag)
+ message(STATUS "Added extra compile options (${EXTRA_CFLAGS})")
+endif()
+
+######################################
+# Input files
+######################################
+
+if(ENABLE_SMB)
+ #
+ # We allow the SMB dissector to be omitted.
+ #
+ set(LOCALSRC ${LOCALSRC}
+ print-smb.c
+ smbutil.c)
+endif(ENABLE_SMB)
+
+set(NETDISSECT_SOURCE_LIST_C
+ addrtoname.c
+ addrtostr.c
+ af.c
+ ascii_strcasecmp.c
+ checksum.c
+ cpack.c
+ gmpls.c
+ in_cksum.c
+ ipproto.c
+ l2vpn.c
+ machdep.c
+ netdissect.c
+ netdissect-alloc.c
+ nlpid.c
+ oui.c
+ ntp.c
+ parsenfsfh.c
+ print.c
+ print-802_11.c
+ print-802_15_4.c
+ print-ah.c
+ print-ahcp.c
+ print-aodv.c
+ print-aoe.c
+ print-ap1394.c
+ print-arcnet.c
+ print-arista.c
+ print-arp.c
+ print-ascii.c
+ print-atalk.c
+ print-atm.c
+ print-babel.c
+ print-bcm-li.c
+ print-beep.c
+ print-bfd.c
+ print-bgp.c
+ print-bootp.c
+ print-brcmtag.c
+ print-bt.c
+ print-calm-fast.c
+ print-carp.c
+ print-cdp.c
+ print-cfm.c
+ print-chdlc.c
+ print-cip.c
+ print-cnfp.c
+ print-dccp.c
+ print-decnet.c
+ print-dhcp6.c
+ print-domain.c
+ print-dsa.c
+ print-dtp.c
+ print-dvmrp.c
+ print-eap.c
+ print-egp.c
+ print-eigrp.c
+ print-enc.c
+ print-esp.c
+ print-ether.c
+ print-fddi.c
+ print-forces.c
+ print-fr.c
+ print-frag6.c
+ print-ftp.c
+ print-geneve.c
+ print-geonet.c
+ print-gre.c
+ print-hncp.c
+ print-hsrp.c
+ print-http.c
+ print-icmp.c
+ print-icmp6.c
+ print-igmp.c
+ print-igrp.c
+ print-ip-demux.c
+ print-ip.c
+ print-ip6.c
+ print-ip6opts.c
+ print-ipcomp.c
+ print-ipfc.c
+ print-ipnet.c
+ print-ipoib.c
+ print-ipx.c
+ print-isakmp.c
+ print-isoclns.c
+ print-juniper.c
+ print-krb.c
+ print-l2tp.c
+ print-lane.c
+ print-ldp.c
+ print-lisp.c
+ print-llc.c
+ print-lldp.c
+ print-lmp.c
+ print-loopback.c
+ print-lspping.c
+ print-lwapp.c
+ print-lwres.c
+ print-m3ua.c
+ print-macsec.c
+ print-mobile.c
+ print-mobility.c
+ print-mpcp.c
+ print-mpls.c
+ print-mptcp.c
+ print-msdp.c
+ print-msnlb.c
+ print-nflog.c
+ print-nfs.c
+ print-nsh.c
+ print-ntp.c
+ print-null.c
+ print-olsr.c
+ print-openflow-1.0.c
+ print-openflow-1.3.c
+ print-openflow.c
+ print-ospf.c
+ print-ospf6.c
+ print-otv.c
+ print-pflog.c
+ print-pgm.c
+ print-pim.c
+ print-pktap.c
+ print-ppi.c
+ print-ppp.c
+ print-pppoe.c
+ print-pptp.c
+ print-ptp.c
+ print-radius.c
+ print-raw.c
+ print-realtek.c
+ print-resp.c
+ print-rip.c
+ print-ripng.c
+ print-rpki-rtr.c
+ print-rsvp.c
+ print-rt6.c
+ print-rtsp.c
+ print-rx.c
+ print-sctp.c
+ print-sflow.c
+ print-sip.c
+ print-sl.c
+ print-sll.c
+ print-slow.c
+ print-smtp.c
+ print-snmp.c
+ print-someip.c
+ print-ssh.c
+ print-stp.c
+ print-sunatm.c
+ print-sunrpc.c
+ print-symantec.c
+ print-syslog.c
+ print-tcp.c
+ print-telnet.c
+ print-tftp.c
+ print-timed.c
+ print-tipc.c
+ print-token.c
+ print-udld.c
+ print-udp.c
+ print-unsupported.c
+ print-usb.c
+ print-vjc.c
+ print-vqp.c
+ print-vrrp.c
+ print-vsock.c
+ print-vtp.c
+ print-vxlan-gpe.c
+ print-vxlan.c
+ print-wb.c
+ print-whois.c
+ print-zep.c
+ print-zephyr.c
+ print-zeromq.c
+ ${LOCALSRC}
+ signature.c
+ strtoaddr.c
+ util-print.c
+)
+
+#
+# Replace missing functions
+#
+foreach(FUNC strlcat strlcpy strdup strsep getservent getopt_long)
+ string(TOUPPER ${FUNC} FUNC_UPPERCASE)
+ set(HAVE_FUNC_UPPERCASE HAVE_${FUNC_UPPERCASE})
+ if(NOT ${HAVE_FUNC_UPPERCASE})
+ set(NETDISSECT_SOURCE_LIST_C ${NETDISSECT_SOURCE_LIST_C} missing/${FUNC}.c)
+ endif()
+endforeach()
+
+add_library(netdissect STATIC
+ ${NETDISSECT_SOURCE_LIST_C}
+)
+if(NOT C_ADDITIONAL_FLAGS STREQUAL "")
+ set_target_properties(netdissect PROPERTIES COMPILE_FLAGS ${C_ADDITIONAL_FLAGS})
+endif()
+
+set(TCPDUMP_SOURCE_LIST_C fptype.c tcpdump.c)
+
+if(NOT HAVE_BPF_DUMP)
+ set(TCPDUMP_SOURCE_LIST_C ${TCPDUMP_SOURCE_LIST_C} bpf_dump.c)
+endif(NOT HAVE_BPF_DUMP)
+if(NOT HAVE_PCAP_DUMP_FTELL)
+ set(TCPDUMP_SOURCE_LIST_C ${TCPDUMP_SOURCE_LIST_C} missing/pcap_dump_ftell.c)
+endif(NOT HAVE_PCAP_DUMP_FTELL)
+
+if(NOT HAVE_PCAP_LIST_DATALINKS)
+ set(TCPDUMP_SOURCE_LIST_C ${TCPDUMP_SOURCE_LIST_C} missing/datalinks.c)
+endif(NOT HAVE_PCAP_LIST_DATALINKS)
+
+if((NOT HAVE_PCAP_DATALINK_NAME_TO_VAL) OR (NOT HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION))
+ set(TCPDUMP_SOURCE_LIST_C ${TCPDUMP_SOURCE_LIST_C} missing/dlnames.c)
+endif((NOT HAVE_PCAP_DATALINK_NAME_TO_VAL) OR (NOT HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION))
+
+set(PROJECT_SOURCE_LIST_C ${NETDISSECT_SOURCE_LIST_C} ${TCPDUMP_SOURCE_LIST_C})
+
+file(GLOB PROJECT_SOURCE_LIST_H
+ *.h
+)
+
+#
+# Assume, by default, no support for shared libraries and V7/BSD
+# convention for man pages (devices in section 4, file formats in
+# section 5, miscellaneous info in section 7, administrative commands
+# and daemons in section 8). Individual cases can override this.
+# Individual cases can override this.
+#
+set(MAN_FILE_FORMATS 5)
+set(MAN_MISC_INFO 7)
+if(CMAKE_SYSTEM_NAME STREQUAL "AIX")
+ # Workaround to enable certain features
+ set(_SUN TRUE)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "HP-UX")
+ #
+ # Use System V conventions for man pages.
+ #
+ set(MAN_FILE_FORMATS 4)
+ set(MAN_MISC_INFO 5)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "IRIX" OR CMAKE_SYSTEM_NAME STREQUAL "IRIX64")
+ #
+ # Use IRIX conventions for man pages; they're the same as the
+ # System V conventions, except that they use section 8 for
+ # administrative commands and daemons.
+ #
+ set(MAN_FILE_FORMATS 4)
+ set(MAN_MISC_INFO 5)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "OSF1")
+ #
+ # DEC OSF/1, a/k/a Digital UNIX, a/k/a Tru64 UNIX.
+ # Use Tru64 UNIX conventions for man pages; they're the same as the
+ # System V conventions except that they use section 8 for
+ # administrative commands and daemons.
+ #
+ set(MAN_FILE_FORMATS 4)
+ set(MAN_MISC_INFO 5)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND CMAKE_SYSTEM_VERSION MATCHES "5[.][0-9.]*")
+ #
+ # SunOS 5.x.
+ #
+ if(CMAKE_SYSTEM_VERSION STREQUAL "5.12")
+ else()
+ #
+ # Use System V conventions for man pages.
+ #
+ set(MAN_FILE_FORMATS 4)
+ set(MAN_MISC_INFO 5)
+ endif()
+endif()
+
+source_group("Source Files" FILES ${PROJECT_SOURCE_LIST_C})
+source_group("Header Files" FILES ${PROJECT_SOURCE_LIST_H})
+
+######################################
+# Register targets
+######################################
+
+add_executable(tcpdump ${TCPDUMP_SOURCE_LIST_C})
+if(NOT C_ADDITIONAL_FLAGS STREQUAL "")
+ set_target_properties(tcpdump PROPERTIES COMPILE_FLAGS ${C_ADDITIONAL_FLAGS})
+endif()
+target_link_libraries(tcpdump netdissect ${TCPDUMP_LINK_LIBRARIES})
+
+######################################
+# Write out the config.h file
+######################################
+
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmakeconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
+
+######################################
+# Install tcpdump and man pages
+######################################
+
+#
+# "Define GNU standard installation directories", which actually
+# are also defined, to some degree, by autotools, and at least
+# some of which are general UN*X conventions.
+#
+include(GNUInstallDirs)
+
+set(MAN1_EXPAND tcpdump.1.in)
+
+if(WIN32)
+ # XXX TODO where to install on Windows?
+else(WIN32)
+ install(TARGETS tcpdump DESTINATION bin)
+endif(WIN32)
+
+# On UN*X, and on Windows when not using MSVC, process man pages and
+# arrange that they be installed.
+if(NOT MSVC)
+ #
+ # Man pages.
+ #
+ # For each section of the manual for which we have man pages
+ # that require macro expansion, do the expansion.
+ #
+ set(MAN1 "")
+ foreach(TEMPLATE_MANPAGE ${MAN1_EXPAND})
+ string(REPLACE ".in" "" MANPAGE ${TEMPLATE_MANPAGE})
+ configure_file(${CMAKE_SOURCE_DIR}/${TEMPLATE_MANPAGE} ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE} @ONLY)
+ set(MAN1 ${MAN1} ${CMAKE_CURRENT_BINARY_DIR}/${MANPAGE})
+ endforeach(TEMPLATE_MANPAGE)
+ install(FILES ${MAN1} DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
+endif(NOT MSVC)
+
+# uninstall target
+configure_file(
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+ IMMEDIATE @ONLY)
+
+add_custom_target(uninstall
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
+
+#
+# Tcpdump tests
+# We try to find the Perl interpreter and, if we do, we have the check
+# rule run tests/TESTrun with it, because just trying to run the TESTrun
+# script as a command won't work on Windows.
+#
+find_program(PERL perl)
+if(PERL)
+ message(STATUS "Found perl at ${PERL}")
+ add_custom_target(check
+ COMMAND ${PERL} ${CMAKE_SOURCE_DIR}/tests/TESTrun)
+else()
+ message(STATUS "Didn't find perl")
+endif()
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..26f226e
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,191 @@
+# Some Information for Contributors
+Thank you for considering to make a contribution to tcpdump! Please use the
+guidelines below to achieve the best results and experience for everyone.
+
+## How to report bugs and other problems
+**To report a security issue (segfault, buffer overflow, infinite loop, arbitrary
+code execution etc) please send an e-mail to security@tcpdump.org, do not use
+the bug tracker!**
+
+To report a non-security problem (failure to compile, incorrect output in the
+protocol printout, missing support for a particular protocol etc) please check
+first that it reproduces with the latest stable release of tcpdump and the latest
+stable release of libpcap. If it does, please check that the problem reproduces
+with the current git master branch of tcpdump and the current git master branch of
+libpcap. If it does (and it is not a security-related problem, otherwise see
+above), please navigate to the
+[bug tracker](https://github.com/the-tcpdump-group/tcpdump/issues)
+and check if the problem has already been reported. If it has not, please open
+a new issue and provide the following details:
+
+* tcpdump and libpcap version (`tcpdump --version`)
+* operating system name and version and any other details that may be relevant
+ (`uname -a`, compiler name and version, CPU type etc.)
+* custom `configure`/`cmake` flags, if any
+* statement of the problem
+* steps to reproduce
+
+Please note that if you know exactly how to solve the problem and the solution
+would not be too intrusive, it would be best to contribute some development time
+and to open a pull request instead as discussed below.
+
+Still not sure how to do? Feel free to
+[subscribe to the mailing list](https://www.tcpdump.org/#mailing-lists)
+and ask!
+
+
+## How to add new code and to update existing code
+
+0) Check that there isn't a pull request already opened for the changes you
+ intend to make.
+
+1) [Fork](https://help.github.com/articles/fork-a-repo/) the Tcpdump
+ [repository](https://github.com/the-tcpdump-group/tcpdump).
+
+2) The easiest way to test your changes on multiple operating systems and
+ architectures is to let the upstream CI test your pull request (more on
+ this below).
+
+3) Setup your git working copy
+ ```
+ git clone https://github.com/<username>/tcpdump.git
+ cd tcpdump
+ git remote add upstream https://github.com/the-tcpdump-group/tcpdump
+ git fetch upstream
+ ```
+
+4) Do a `touch .devel` in your working directory.
+ Currently, the effect is
+ * add (via `configure`, in `Makefile`) some warnings options (`-Wall`,
+ `-Wmissing-prototypes`, `-Wstrict-prototypes`, ...) to the compiler if it
+ supports these options,
+ * have the `Makefile` support `make depend` and the `configure` script run it.
+
+5) Configure and build
+ ```
+ ./configure && make -s && make check
+ ```
+
+6) Add/update tests
+ The `tests` directory contains regression tests of the dissection of captured
+ packets. Those captured packets were saved running tcpdump with option
+ `-w sample.pcap`. Additional options, such as `-n`, are used to create relevant
+ and reproducible output; `-#` is used to indicate which particular packets
+ have output that differs. The tests are run with the `TZ` environment
+ variable set to `GMT0`, so that UTC, rather than the local time where the
+ tests are being run, is used when "local time" values are printed. The
+ actual test compares the current text output with the expected result
+ (`sample.out`) saved from a previous version.
+
+ Any new/updated fields in a dissector must be present in a `sample.pcap` file
+ and the corresponding output file.
+
+ Configuration is set in `tests/TESTLIST`.
+ Each line in this file has the following format:
+ ```
+ test-name sample.pcap sample.out tcpdump-options
+ ```
+
+ The `sample.out` file can be produced as follows:
+ ```
+ (cd tests && TZ=GMT0 ../tcpdump -# -n -r sample.pcap tcpdump-options > sample.out)
+ ```
+
+ Or, for convenience, use `./update-test.sh test-name`
+
+ It is often useful to have test outputs with different verbosity levels
+ (none, `-v`, `-vv`, `-vvv`, etc.) depending on the code.
+
+7) Test using `make check` (current build options) and `./build_matrix.sh`
+ (a multitude of build options, build systems and compilers). If you can,
+ test on more than one operating system. Don't send a pull request until
+ all tests pass.
+
+8) Try to rebase your commits to keep the history simple.
+ ```
+ git fetch upstream
+ git rebase upstream/master
+ ```
+ (If the rebase fails and you cannot resolve, issue `git rebase --abort`
+ and ask for help in the pull request comment.)
+
+9) Once 100% happy, put your work into your forked repository using `git push`.
+
+10) [Initiate and send](https://help.github.com/articles/using-pull-requests/)
+ a pull request.
+ This will trigger the upstream repository CI tests.
+
+
+## Code style and generic remarks
+* A thorough reading of some other printers code is useful.
+
+* Put the normative reference if any as comments (RFC, etc.).
+
+* Put the format of packets/headers/options as comments if there is no
+ published normative reference.
+
+* The printer may receive incomplete packet in the buffer, truncated at any
+ random position, for example by capturing with `-s size` option.
+ If your code reads and decodes every byte of the protocol packet, then to
+ ensure proper and complete bounds checks it would be sufficient to read all
+ packet data using the `GET_*()` macros, typically:
+ ```
+ GET_U_1(p)
+ GET_S_1(p)
+ GET_BE_U_n(p), n in { 2, 3, 4, 5, 6, 7, 8 }
+ GET_BE_S_n(p), n in { 2, 3, 4, 5, 6, 7, 8 }
+ ```
+ If your code uses the macros above only on some packet data, then the gaps
+ would have to be bounds-checked using the `ND_TCHECK_*()` macros:
+ ```
+ ND_TCHECK_n(p), n in { 1, 2, 3, 4, 5, 6, 7, 8, 16 }
+ ND_TCHECK_SIZE(p)
+ ND_TCHECK_LEN(p, l)
+ ```
+ For the `ND_TCHECK_*` macros (if not already done):
+ * Assign: `ndo->ndo_protocol = "protocol";`
+ * Define: `ND_LONGJMP_FROM_TCHECK` before including `netdissect.h`
+ * Make sure that the intersection of `GET_*()` and `ND_TCHECK_*()` is minimal,
+ but at the same time their union covers all packet data in all cases.
+
+ You can test the code via:
+ ```
+ sudo ./tcpdump -s snaplen [-v][v][...] -i lo # in a terminal
+ sudo tcpreplay -i lo sample.pcap # in another terminal
+ ```
+ You should try several values for snaplen to do various truncation.
+
+* Do invalid packet checks in code: Think that your code can receive in input
+ not only a valid packet but any arbitrary random sequence of octets (packet
+ * built malformed originally by the sender or by a fuzz tester,
+ * became corrupted in transit or for some other reason).
+
+ Print with: `nd_print_invalid(ndo); /* to print " (invalid)" */`
+
+* Use `struct tok` for indexed strings and print them with
+ `tok2str()` or `bittok2str()` (for flags).
+
+* Avoid empty lines in output of printers.
+
+* A commit message must have:
+ ```
+ First line: Capitalized short summary in the imperative (50 chars or less)
+
+ If the commit concerns a protocol, the summary line must start with
+ "protocol: ".
+
+ Body: Detailed explanatory text, if necessary. Fold it to approximately
+ 72 characters. There must be an empty line separating the summary from
+ the body.
+ ```
+
+* Avoid non-ASCII characters in code and commit messages.
+
+* Use the style of the modified sources.
+
+* Don't mix declarations and code.
+
+* Don't use `//` for comments.
+ Not all C compilers accept C++/C99 comments by default.
+
+* Avoid trailing tabs/spaces
diff --git a/CREDITS b/CREDITS
new file mode 100644
index 0000000..b6862cc
--- /dev/null
+++ b/CREDITS
@@ -0,0 +1,359 @@
+This file lists people who have contributed to tcpdump.
+
+The current maintainers (in alphabetical order):
+ Denis Ovsienko <denis at ovsienko dot info>
+ Francois-Xavier Le Bail <devel dot fx dot lebail at orange dot fr>
+ Guy Harris <gharris at sonic dot net>
+ Michael Richardson <mcr at sandelman dot ottawa dot on dot ca>
+
+Additional people who have contributed patches (in alphabetical order):
+ Aaron Campbell <aaron at arbor dot net>
+ A Costa <agcosta at gis dot net>
+ ABHIMANYU <agupta07 at sourceforge dot net>
+ Adam Sampson <ats at offog dot org>
+ Ahmed Abdelsalam <ahabdels at gmail dot com>
+ Ajith Adapa <adapa dot ajith at gmail dot com>
+ Albert Chin <china at thewrittenword dot com>
+ Alexandra Kossovsky <alexandra1975 at sourceforge dot net>
+ Alexandr Nedvedicky <alexandr dot nedvedicky at oracle dot com>
+ Alexandre Ferrieux <alexandre dot ferrieux at orange dot com>
+ Alexis La Goutte <alexis dot lagoutte at gmail dot com>
+ Alfredo Andres <aandres at s21sec dot com>
+ Ali Abdulkadir <autostart dot ini at gmail dot com>
+ Ananth Suryanarayana <anantha at juniper dot net>
+ Andrea Bittau <a dot bittau at cs dot ucl dot ac dot uk>
+ Andrea Ieri <andrea dot ieri at canonical dot com>
+ Andreas Jaggi <andreas dot jaggi at waterwave dot ch>
+ Andrew Brown <atatat at atatdot dot net>
+ Andrew Church <andrew at users dot sourceforge dot net>
+ Andrew Darqui <andrew dot darqui at gmail dot com>
+ Andrew Hintz <adhintz at users dot sourceforge dot net>
+ Andrew Lunn <andrew at lunn dot ch>
+ Andrew Nording <andrew at nording dot ru>
+ Andrew Tridgell <tridge at linuxcare dot com>
+ Andy Heffernan <ahh at juniper dot net>
+ Angus Cameron <anguscc at yahoo dot com>
+ Anton Bernal <anton at juniper dot net>
+ Antonin Décimo <antonin dot decimo at gmail dot com>
+ Aravind Prasad S <raja dot avi at gmail dot com>
+ Arkadiusz Miskiewicz <misiek at pld dot org dot pl>
+ Armando L. Caro Jr. <acaro at mail dot eecis dot udel dot edu>
+ Arnaldo Carvalho de Melo <acme at ghostprotocols dot net>
+ Atsushi Onoe <onoe at netbsd dot org>
+ Baptiste Jonglez <baptiste dot jonglez at ens-lyon dot org>
+ Baruch Siach <baruch at tkos dot co dot il>
+ Ben Byer <bushing at sourceforge dot net>
+ Ben Smithurst <ben at scientia dot demon dot co dot uk>
+ Bert Vermeulen <bert at biot dot com>
+ Bill Fenner <fenner at gmail dot com>
+ Bill Parker <wp02855 at gmail dot com>
+ Bjoern A. Zeeb <bzeeb at Zabbadoz dot NeT>
+ Bram <tcpdump at mail dot wizbit dot be>
+ Brent L. Bates <blbates at vigyan dot com>
+ Brian Carpenter <brian dot carpenter at gmail dot com>
+ Brian Ginsbach <ginsbach at cray dot com>
+ Brooks Davis <brooks at one-eyed-alien dot net>
+ Bruce M. Simpson <bms at spc dot org>
+ Bryce Wood <woodbr at oregonstate dot edu>
+ bugyo <bugyo at users dot noreply dot github dot com>
+ Carles Kishimoto Bisbe <ckishimo at ac dot upc dot es>
+ Casey Deccio <casey at deccio dot net>
+ Charles (Chas) Williams <chwillia at ciena dot com>
+ Charles M. Hannum <mycroft at netbsd dot org>
+ Charlie Lenahan <clenahan at fortresstech dot com>
+ Chris Cogdon <chris at cogdon dot org>
+ Chris G. Demetriou <cgd at netbsd dot org>
+ Chris Jepeway <jepeway at blasted-heath dot com>
+ Chris Larson <clarson at kergoth dot com>
+ Christian Sievers <c_s at users dot sourceforge dot net>
+ Christophe Rhodes <csr21 at cantab dot net>
+ Cliff Frey <cliff at meraki dot com>
+ Craig Leres <leres at xse dot com>
+ Craig Rodrigues <rodrigc at mediaone dot net>
+ Crist J. Clark <cjclark at alum dot mit dot edu>
+ Dagobert Michelsen <dam at opencsw dot org>
+ Daniel Hagerty <hag at ai dot mit dot edu>
+ Daniel Lee <Longinus00 at gmail dot com>
+ Daniel Miller <dmiller at nmap dot org>
+ Dario Lombardo <lomato at gmail dot com>
+ Darren Reed <darrenr at reed dot wattle dot id dot au>
+ David Binderman <d dot binderman at virgin dot net>
+ David Cronin <davidcronin94 at gmail dot com>
+ Davide Caratti <dcaratti at redhat dot com>
+ David Horn <dhorn2000 at gmail dot com>
+ David Smith <dsmith at redhat dot com>
+ David Young <dyoung at ojctech dot com>
+ Dion Bosschieter <dbosschieter at transip dot nl>
+ Dmitrij Tejblum <tejblum at yandex-team dot ru>
+ Dmitry Eremin-Solenikov <dbaryshkov at gmail dot com>
+ Don Ebright <Don dot Ebright at compuware dot com>
+ Donatas Abraitis <donatas dot abraitis at gmail dot com>
+ d simonov <simonov-d at yandex-team dot ru>
+ Duane Wessels <dwessels at verisign dot com>
+ Eamon Doyle <eamonjd at arista dot com>
+ Eddie Kohler <xexd at sourceforge dot net>
+ Ege Cetin <egecetin at hotmail dot com dot tr>
+ Eliot Lear <lear at upstairs dot ofcourseimright dot com>
+ Elmar Kirchner <elmar at juniper dot net>
+ Eric S. Raymond <esr at thyrsus dot com>
+ Etienne Marais <etienne at marais dot green>
+ Fang Wang <fangwang at sourceforge dot net>
+ Ferry Huberts <ferry dot huberts at pelagic dot nl>
+ Florent Drouin <Florent dot Drouin at alcatel-lucent dot fr>
+ Florian Fainelli <f dot fainelli at gmail dot com>
+ Florian Forster <octo at verplant dot org>
+ fra <foo at bar dot baz>
+ Francesco Fondelli <francesco dot fondelli at gmail dot com>
+ Francisco Matias Cuenca-Acuna <mcuenca at george dot rutgers dot edu>
+ Francis Dupont <Francis dot Dupont at enst-bretagne dot fr>
+ Frank Volf <volf at oasis dot IAEhv dot nl>
+ Fulvio Risso <risso at polito dot it>
+ George Bakos <gbakos at ists dot dartmouth dot edu>
+ Gerald Combs <gerald at ethereal dot com>
+ Gerard Garcia <ggarcia at deic dot uab dot cat>
+ George Neville-Neil <gnn at freebsd dot org>
+ Gerald Combs <gerald at wireshark dot org>
+ Gerrit Renker <gerrit at erg dot abdn dot ac dot uk>
+ Gert Doering <gert at greenie dot muc dot de>
+ Gianluca Varenni <gianluca dot varenni at gmail dot com>
+ Gilbert Ramirez Jr. <gram at xiexie dot org>
+ Gisle Vanem <gvanem at yahoo dot no>
+ Gleb Smirnoff <glebius at FreeBSD dot org>
+ Gokul Sivakumar <gokulkumar792 at gmail dot com>
+ Greg Minshall <minshall at acm dot org>
+ Grégoire Henry <henry at pps dot jussieu dot fr>
+ Gregory Detal <gregory dot detal at uclouvain dot be>
+ Greg Stark <gsstark at mit dot edu>
+ Greg Steinbrecher <steinbrecher at alum dot mit dot edu>
+ Guy Lewin <guy at lewin dot co dot il>
+ Hank Leininger <tcpdump-workers at progressive-comp dot com>
+ Hannes Gredler <hannes at gredler dot at>
+ Hannes Viertel <hviertel at juniper dot net>
+ Hanno Böck <hanno at hboeck dot de>
+ Harry Raaymakers <harryr at connect dot com dot au>
+ Heinz-Ado Arnolds <Ado dot Arnolds at dhm-systems dot de>
+ Hendrik Scholz <hendrik at scholz dot net>
+ Herwin Weststrate <herwin at quarantainenet dot nl>
+ Ian McDonald <imcdnzl at gmail dot com>
+ Ilpo Järvinen <ilpo dot jarvinen at helsinki dot fi>
+ ishaangandhi <ishaangandhi at gmail dot com>
+ Jacek Tobiasz <Jacek dot Tobiasz at atm dot com dot pl>
+ Jacob Davis <jacobgb24 at yahoo dot com>
+ Jakob Schlyter <jakob at openbsd dot org>
+ Jakub Zawadzki <darkjames at darkjames dot pl>
+ Jamal Hadi Salim <hadi at cyberus dot ca>
+ James Ko <jck at exegin dot com>
+ Jamie Bainbridge <jamie dot bainbridge at gmail dot com>
+ Jan Oravec <wsx at wsx6 dot net>
+ Jason L. Wright <jason at thought dot net>
+ Jason R. Thorpe <thorpej at netbsd dot org>
+ Jean-Raphaël Gaglione <jr dot gaglione at yahoo dot fr>
+ Jeff Chan <jchan at arista dot com>
+ Jefferson Ogata <jogata at nodc dot noaa dot gov>
+ Jeffrey Hutzelman <jhutz at cmu dot edu>
+ Jeremy Browne <jer at ifni dot ca>
+ Jesper Peterson <jesper at endace dot com>
+ Jesse Gross <jesse at nicira dot com>
+ Jim Hutchins <jim at ca dot sandia dot gov>
+ João Medeiros <ignotus21 at sourceforge dot net>
+ Job Snijders <job at instituut dot net>
+ Joerg Mayer <jmayer at loplof dot de>
+ Jonathan Heusser <jonny at drugphish dot ch>
+ Jorge Boncompte [DTI2] <jorge at dti2 dot net>
+ Jørgen Thomsen <jth at jth dot net>
+ Julian Cowley <julian at lava dot net>
+ Juliusz Chroboczek <jch at pps dot jussieu dot fr>
+ Kaarthik Sivakumar <kaarthik at torrentnet dot com>
+ Kaladhar Musunuru <kaladharm at sourceforge dot net>
+ Kamil Frankowicz <kontakt at frankowicz dot me>
+ Karl Norby <karl-norby at sourceforge dot net>
+ Kazushi Sugyo <sugyo at pb dot jp dot nec dot com>
+ Kelly Carmichael <kcarmich at ipapp dot com>
+ Ken Bantoft <ken at xelerance dot com>
+ Ken Hornstein <kenh at cmf dot nrl dot navy dot mil>
+ Kenichi Maehashi <webmaster at kenichimaehashi dot com>
+ Kevin Steves <stevesk at pobox dot com>
+ Klaus Klein <kleink at reziprozitaet dot de>
+ Kovarththanan Rajaratnam <kovarththanan dot rajaratnam at gmail dot com>
+ Kris Kennaway <kris at freebsd dot org>
+ Krzysztof Halasa <khc at pm dot waw dot pl>
+ Larry Lile <lile at stdio dot com>
+ Lennert Buytenhek <buytenh at gnu dot org>
+ Loganaden Velvindron <logan at cyberstorm dot mu>
+ Loris Degioanni <loris at netgroup-serv dot polito dot it>
+ Love Hörnquist-Åstrand <lha at stacken dot kth dot se>
+ Lucas C. Villa Real <lucasvr at us dot ibm dot com>
+ Luigi Rizzo <luigi at freebsd dot org>
+ Luis MartinGarcia <luis dot mgarc at gmail dot com>
+ Luiz Otavio O Souza <loos at freebsd dot org>
+ Maciej W. Rozycki <macro at ds2 dot pg dot gda dot pl>
+ Manoharan Sundaramoorthy <manoharan at arista dot com>
+ Manu Pathak <mapathak at cisco dot com>
+ Marc Abramowitz <marc at marc-abramowitz dot com>
+ Marc A. Lehmann <pcg at goof dot com>
+ Marc Binderberger <mbind at sourceforge dot net>
+ Mark Andrews <marka at isc dot org>
+ Mark Ellzey Thomas <mark at ackers dot net>
+ Marko Kiiskila <carnil at cs dot tut dot fi>
+ Markus Schöpflin <schoepflin at sourceforge dot net>
+ Marshall Rose <mrose at dbc dot mtview dot ca dot us>
+ Martin Buck <mb-tmp-tvguho dot pbz at gromit dot dyndns dot org>
+ Martin Husemann <martin at netbsd dot org>
+ Martin Sehnoutka <msehnout at redhat dot com>
+ Matt Eaton <agnosticdev at gmail dot com>
+ Matthew Luckie <matthewluckie at sourceforge dot net>
+ Matthieu Boutier <boutier at pps dot univ-paris-diderot dot fr>
+ Max Laier <max at love2party dot net>
+ Michael A. Meffie III <meffie at sourceforge dot net>
+ Michael Haardt <michael at moria dot de>
+ Michael Kirkhart <michael dot kirkhart at att dot net>
+ Michael Madore <mmadore at turbolinux dot com>
+ Michael Riepe <too-tired at sourceforge dot net>
+ Michael Shalayeff <mickey at openbsd dot org>
+ Michael Shields <shields at msrl dot com>
+ Michael T. Stolarchuk <mts at off dot to>
+ Michal Ruprich <michalruprich at gmail dot com>
+ Michal Sekletar <msekleta at redhat dot com>
+ Michele "mydecay" Marchetto <smarchetto1 at tin dot it>
+ Mike Frysinger <vapier at gmail dot com>
+ Mingrui <972931182 at qq dot com>
+ Minto Jeyananth <minto at juniper dot net>
+ Miroslav Lichvar <mlichvar at redhat dot com>
+ Mister X <3520734+Mister-X- at users dot noreply dot github dot com>
+ Mitsunori Komatsu <komamitsu at gmail dot com>
+ Monroe Williams <monroe at pobox dot com>
+ Monthadar Al Jaberi <monthadar at gmail dot com>
+ Moses Devadason <mosesdevadason at gmail dot com>
+ Motonori Shindo <mshindo at mshindo dot net>
+ Nan Xiao <nan at chinadtrace dot org>
+ Nathaniel Couper-Noles <Nathaniel at isi1 dot tccisi dot com>
+ Nathan J. Williams <nathanw at MIT dot EDU>
+ Neelabh <neelabhsahay at gmail dot com>
+ Neil T. Spring <bluehal at users dot sourceforge dot net>
+ Nicholas Reilly <nreilly at blackberry dot com>
+ Nickolai Zeldovich <kolya at MIT dot EDU>
+ Nikolay Edigaryev <edigaryev at gmail dot com>
+ Nicolas Ferrero <toorop at babylo dot net>
+ niks3089 <niks3089 at gmail dot com>
+ Niels Provos <provos at openbsd dot org>
+ Nikhil AP <nikhilap at arista dot com>
+ Noritoshi Demizu <demizu at users dot sourceforge dot net>
+ Olaf Kirch <okir at caldera dot de>
+ Ola Martin Lykkja <ola dot lykkja at q-free dot com>
+ Oleksij Rempel <linux at rempel-privat dot de>
+ Onno van der Linden <onno at simplex dot nl>
+ Paolo Abeni <paolo dot abeni at email dot it>
+ Partha Ghosh <psg at cumulusnetworks dot com>
+ Pascal Hennequin <pascal dot hennequin at int-evry dot fr>
+ Pasvorn Boonmark <boonmark at juniper dot net>
+ Patrik Lundquist <patrik dot lundquist at gmail dot com>
+ Paul Ferrell <pflarr at sourceforge dot net>
+ Paul Mundt <lethal at linux-sh dot org>
+ Paul S. Traina <pst at freebsd dot org>
+ Pavlin Radoslavov <pavlin at icir dot org>
+ Pawel Worach <pawel dot worach at gmail dot com>
+ Pedro Monreal <pmgdeb at gmail dot com>
+ Pekka Savola <pekkas at netcore dot fi>
+ peppe <g1pi at libero dot it>
+ Petar Alilovic <petar dot alilovic at gmail dot com>
+ Peter Fales <peter at fales-lorenz dot net>
+ Peter Jeremy <peter dot jeremy at alcatel dot com dot au>
+ Peter Krystad <peter dot krystad at linux dot intel dot com>
+ Peter Volkov <pva at gentoo dot org>
+ Petr Vorel <pvorel at suse dot cz>
+ <pfhunt at users dot sourceforge dot net>
+ Phil Wood <cpw at lanl dot gov>
+ Pier Carlo Chiodi <pierky at pierky dot com>
+ Quentin Armitage <quentin at armitage dot org dot uk>
+ Rafal Maszkowski <rzm at icm dot edu dot pl>
+ Randy Sofia <rsofia at users dot sourceforge dot net>
+ Raphael Raimbault <raphael dot raimbault at netasq dot com>
+ Renato Botelho <garga at FreeBSD dot org>
+ Ricardo Nabinger Sanchez <rnsanchez at taghos dot com dot br>
+ Richard Scheffenegger <srichard at netapp dot com>
+ Rick Cheng <rcheng at juniper dot net>
+ Rick Jones <rick dot jones2 at hp dot com>
+ Rick Watson <watsonrick at users dot sourceforge dot net>
+ Ritesh Ranjan <r dot ranjan789 at gmail dot com>
+ Rob Braun <bbraun at synack dot net>
+ Robert Edmonds <stu-42 at sourceforge dot net>
+ Rocco Lucia <rlucia at iscanet dot com>
+ Roderick Schertler <roderick at argon dot org>
+ Romain Francoise <rfrancoise at debian dot org>
+ Romero Malaquias <romero dot malaquias at gmail dot com>
+ Ruben Kerkhof <ruben at rubenkerkhof dot com>
+ Rui Paulo <rpaulo at FreeBSD dot org>
+ Sabrina Dubroca <sd at queasysnail dot net>
+ Sagun Shakya <sagun dot shakya at sun dot com>
+ Sam James <sam at gentoo dot org>
+ Sami Farin <safari at iki dot fi>
+ Sascha Wildner <swildner at sourceforge dot net>
+ Sawssen Hadded <saw dot hadded at gmail dot com>
+ Scott Mcmillan <scott dot a dot mcmillan at intel dot com>
+ Scott Rose <syberpunk at users dot sourceforge dot net>
+ Sebastian Krahmer <krahmer at cs dot uni-potsdam dot de>
+ Sebastien Raveau <sebastien dot raveau at epita dot fr>
+ Sebastien Vincent <svincent at idems dot fr>
+ Sepherosa Ziehau <sepherosa at gmail dot com>
+ Seth Webster <swebster at sst dot ll dot mit dot edu>
+ Shinsuke Suzuki <suz at kame dot net>
+ Simon Nicolussi <sinic at sinic dot name>
+ Simon Ruderich <simon at ruderich dot org>
+ Slava Shwartsman <slavash at mellanox dot com>
+ Stefan Hajnoczi <stefanha at redhat dot com>
+ Steinar Haug <sthaug at nethelp dot no>
+ Stephane Bortzmeyer <stephane+github at bortzmeyer dot org>
+ Steve Kay <stevekay at gmail dot com>
+ Steve-o <fnjordy at sourceforge dot net>
+ Steven H. Wang <wang dot steven dot h at gmail dot com>
+ Swaathi Vetrivel <swaathiv at juniper dot net>
+ Swaminathan Chandrasekaran <chander at juniper dot net>
+ Takashi Yamamoto <yamt at mwd dot biglobe dot ne dot jp>
+ Tatuya Jinmei <jinmei at kame dot net>
+ Tero Kivinen <kivinen at iki dot fi>
+ Terry Kennedy <terry at tmk dot com>
+ test2 <test2 at safs64 dot (none)>
+ Thomas Jacob <jacob at internet24 dot de>
+ Tillmann Karras <tilkax at gmail dot com>
+ Timo Koskiahde
+ Tobias Waldekranz <tobias at waldekranz dot com>
+ Tom Jones <thj at freebsd dot org>
+ Tommy Beadle <tbeadle at arbor dot net>
+ Tony Li <tli at procket dot com>
+ Tony Samuels <vegizombie at gmail dot com>
+ Tony Xu <hhktony at gmail dot com>
+ Toshihiro Kanda <candy at fct dot kgc dot co dot jp>
+ Udayakumar <udaya011 at gmail dot com>
+ Ulrich Windl <Ulrich dot Windl at RZ dot Uni-Regensburg dot DE>
+ Uns Lider <unslider at miranda dot org>
+ Victor Oppleman <oppleman at users dot sourceforge dot net>
+ Viral Mehta <viral dot mehta at dell dot com>
+ Vitaly Lavrov <vel21ripn at gmail dot com>
+ Vivien Didelot <vivien dot didelot at gmail dot com>
+ Vyacheslav Trushkin <dogonthesun at gmail dot com>
+ Wang Jian <larkwang at gmail dot com>
+ Weesan Lee <weesan at juniper dot net>
+ Wesley Griffin <wgriffin at users dot sourceforge dot net>
+ Wesley Shields <wxs at FreeBSD dot org>
+ Wilbert de Graaf <wilbertdg at hetnet dot nl>
+ Will Drewry <will at alum dot bu dot edu>
+ William J. Hulley <bill dot hulley at gmail dot com>
+ Wim Torfs <wtorfs at gmail dot com>
+ Wolfgang Karall <office at karall-edv dot at>
+ Xin Li <delphij at FreeBSD dot org>
+ yekm <yekm at h0me>
+ Yen Yen Lim
+ Yoshifumi Nishida
+ zilog80a <zilog80a at sourceforge dot net>
+ zolf <flos at xs4all dot nl>
+
+The original LBL crew:
+ Steve McCanne
+ Craig Leres
+ Van Jacobson
+
+Past maintainers (in alphabetical order):
+ Bill Fenner <fenner at gmail dot com>
+ Fulvio Risso <risso at polito dot it>
+ Hannes Gredler <hannes at gredler dot at>
+ Jun-ichiro itojun Hagino <itojun at iijlab dot net> Also see: http://www.wide.ad.jp/itojun-award/
diff --git a/INSTALL.md b/INSTALL.md
new file mode 100644
index 0000000..b3fbf42
--- /dev/null
+++ b/INSTALL.md
@@ -0,0 +1,126 @@
+# tcpdump installation notes
+If you have not built libpcap, and your system does not have libpcap
+installed, install libpcap first. Your system might provide a version
+of libpcap that can be installed; if so, to compile tcpdump you might
+need to install a "developer" version of libpcap as well as the
+"run-time" version. You can also install tcpdump.org's version of
+libpcap; see [this file](README.md) for the location.
+
+You will need a C99 compiler to build tcpdump. The build system
+will abort if your compiler is not C99 compliant. If this happens, use
+the generally available GNU C compiler (GCC) or Clang.
+
+After libpcap has been built (either install it with `make install` or
+make sure both the libpcap and tcpdump source trees are in the same
+directory), run `./configure` (a shell script). `configure` will
+determine your system attributes and generate an appropriate `Makefile`
+from `Makefile.in`. Now build tcpdump by running `make`.
+
+If everything builds ok, `su` and type `make install`. This will install
+tcpdump and the manual entry. Any user will be able to use tcpdump to
+read saved captures. Whether a user will be able to capture traffic
+depends on the OS and the configuration of the system; see the
+[tcpdump man page](https://www.tcpdump.org/manpages/tcpdump.1.html)
+for details. DO NOT give untrusted users the ability to
+capture traffic. If a user can capture traffic, he or she could use
+utilities such as tcpdump to capture any traffic on your net, including
+passwords.
+
+Note that most systems ship tcpdump, but usually an older version.
+Building tcpdump from source as explained above will usually install the
+binary as `/usr/local/bin/tcpdump`. If your system has other tcpdump
+binaries, you might need to deinstall these or to set the PATH environment
+variable if you need the `tcpdump` command to run the new binary
+(`tcpdump --version` can be used to tell different versions apart).
+
+If your system is not one which we have tested tcpdump on, you may have
+to modify the `configure` script and `Makefile.in`. Please
+[send us patches](https://www.tcpdump.org/index.html#patches)
+for any modifications you need to make.
+
+Please see [this file](README.md) for notes about tested platforms.
+
+
+## Description of files
+```
+CHANGES - description of differences between releases
+CONTRIBUTING.md - guidelines for contributing
+CREDITS - people that have helped tcpdump along
+INSTALL.md - this file
+LICENSE - the license under which tcpdump is distributed
+Makefile.in - compilation rules (input to the configure script)
+README.md - description of distribution
+VERSION - version of this release
+aclocal.m4 - autoconf macros
+addrtoname.c - address to hostname routines
+addrtoname.h - address to hostname definitions
+addrtostr.c - address to printable string routines
+addrtostr.h - address to printable string definitions
+ah.h - IPSEC Authentication Header definitions
+appletalk.h - AppleTalk definitions
+ascii_strcasecmp.c - locale-independent case-independent string comparison
+ routines
+atime.awk - TCP ack awk script
+atm.h - ATM traffic type definitions
+bpf_dump.c - BPF program printing routines, in case libpcap doesn't
+ have them
+chdlc.h - Cisco HDLC definitions
+cpack.c - functions to extract packed data
+cpack.h - declarations of functions to extract packed data
+config.guess - autoconf support
+config.h.in - autoconf input
+config.sub - autoconf support
+configure - configure script (run this first)
+configure.ac - configure script source
+doc/README.* - some building documentation
+ethertype.h - Ethernet type value definitions
+extract.h - alignment definitions
+gmpls.c - GMPLS definitions
+gmpls.h - GMPLS declarations
+install-sh - BSD style install script
+interface.h - globals, prototypes and definitions
+ip.h - IP definitions
+ip6.h - IPv6 definitions
+ipproto.c - IP protocol type value-to-name table
+ipproto.h - IP protocol type value definitions
+l2vpn.c - L2VPN encapsulation value-to-name table
+l2vpn.h - L2VPN encapsulation definitions
+lbl/os-*.h - OS-dependent defines and prototypes
+llc.h - LLC definitions
+machdep.c - machine dependent routines
+machdep.h - machine dependent definitions
+makemib - mib to header script
+mib.h - mib definitions
+missing/* - replacements for missing library functions
+ntp.c - functions to handle ntp structs
+ntp.h - declarations of functions to handle ntp structs
+mkdep - construct Makefile dependency list
+mpls.h - MPLS definitions
+nameser.h - DNS definitions
+netdissect.h - definitions and declarations for tcpdump-as-library
+ (under development)
+nfs.h - Network File System V2 definitions
+nfsfh.h - Network File System file handle definitions
+nlpid.c - OSI NLPID value-to-name table
+nlpid.h - OSI NLPID definitions
+ospf.h - Open Shortest Path First definitions
+packetdat.awk - TCP chunk summary awk script
+parsenfsfh.c - Network File System file parser routines
+pcap-missing.h - declarations of functions possibly missing from libpcap
+ppp.h - Point to Point Protocol definitions
+print.c - Top-level routines for protocol printing
+print-*.c - The netdissect printers
+rpc_auth.h - definitions for ONC RPC authentication
+rpc_msg.h - definitions for ONC RPC messages
+send-ack.awk - unidirectional tcp send/ack awk script
+slcompress.h - SLIP/PPP Van Jacobson compression (RFC1144) definitions
+smb.h - SMB/CIFS definitions
+smbutil.c - SMB/CIFS utility routines
+stime.awk - TCP send awk script
+tcp.h - TCP definitions
+tcpdump.1 - manual entry
+tcpdump.c - main program
+timeval-operations.h - timeval operations macros
+udp.h - UDP definitions
+util-print.c - utility routines for protocol printers
+```
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..a10474d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,19 @@
+License: BSD
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/Makefile-devel-adds b/Makefile-devel-adds
new file mode 100644
index 0000000..fea63bb
--- /dev/null
+++ b/Makefile-devel-adds
@@ -0,0 +1,22 @@
+#
+# Auto-regenerate configure script or Makefile when things change.
+# From autoconf.info . Works best with GNU Make.
+#
+${srcdir}/configure: configure.ac aclocal.m4
+ cd ${srcdir} && autoconf
+
+# autoheader might not change config.h.in, so touch a stamp file.
+${srcdir}/config.h.in: ${srcdir}/stamp-h.in
+${srcdir}/stamp-h.in: configure.ac aclocal.m4
+ cd ${srcdir} && autoheader
+ echo timestamp > ${srcdir}/stamp-h.in
+
+config.h: stamp-h
+stamp-h: ${srcdir}/config.h.in config.status
+ ./config.status
+
+Makefile: Makefile.in config.status
+ ./config.status
+
+config.status: ${srcdir}/configure
+ ./config.status --recheck
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..1bdeb51
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,539 @@
+# Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+# The Regents of the University of California. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that: (1) source code distributions
+# retain the above copyright notice and this paragraph in its entirety, (2)
+# distributions including binary code include the above copyright notice and
+# this paragraph in its entirety in the documentation or other materials
+# provided with the distribution, and (3) all advertising materials mentioning
+# features or use of this software display the following acknowledgement:
+# ``This product includes software developed by the University of California,
+# Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+# the University nor the names of its contributors may be used to endorse
+# or promote products derived from this software without specific prior
+# written permission.
+# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+#
+# Various configurable paths (remember to edit Makefile.in, not Makefile)
+#
+
+# Top level hierarchy
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+# Pathname of directory to install the binary
+bindir = @bindir@
+# Pathname of directory to install the man page
+mandir = @mandir@
+
+# VPATH
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+#
+# You shouldn't need to edit anything below here.
+#
+
+CC = @CC@
+AR = @AR@
+MKDEP = @MKDEP@
+PROG = tcpdump
+CCOPT = @V_CCOPT@
+INCLS = -I. @V_INCLS@
+DEFS = @DEFS@ @CPPFLAGS@ @V_DEFS@
+
+# Standard CFLAGS
+CFLAGS = @CFLAGS@
+FULL_CFLAGS = $(CCOPT) $(DEFS) $(INCLS) $(CFLAGS)
+
+# Standard LDFLAGS
+LDFLAGS = @LDFLAGS@
+
+# Standard LIBS
+LIBS = @LIBS@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+RANLIB = @RANLIB@
+
+DEPENDENCY_CFLAG = @DEPENDENCY_CFLAG@
+
+# Explicitly define compilation rule since SunOS 4's make doesn't like gcc.
+# Also, gcc does not remove the .o before forking 'as', which can be a
+# problem if you don't own the file but can write to the directory.
+.c.o:
+ @rm -f $@
+ $(CC) $(FULL_CFLAGS) -c $(srcdir)/$*.c
+
+CSRC = fptype.c tcpdump.c
+
+LIBNETDISSECT_SRC=\
+ addrtoname.c \
+ addrtostr.c \
+ af.c \
+ ascii_strcasecmp.c \
+ checksum.c \
+ cpack.c \
+ gmpls.c \
+ in_cksum.c \
+ ipproto.c \
+ l2vpn.c \
+ machdep.c \
+ netdissect.c \
+ netdissect-alloc.c \
+ nlpid.c \
+ ntp.c \
+ oui.c \
+ parsenfsfh.c \
+ print.c \
+ print-802_11.c \
+ print-802_15_4.c \
+ print-ah.c \
+ print-ahcp.c \
+ print-aodv.c \
+ print-aoe.c \
+ print-ap1394.c \
+ print-arcnet.c \
+ print-arista.c \
+ print-arp.c \
+ print-ascii.c \
+ print-atalk.c \
+ print-atm.c \
+ print-babel.c \
+ print-bcm-li.c \
+ print-beep.c \
+ print-bfd.c \
+ print-bgp.c \
+ print-bootp.c \
+ print-brcmtag.c \
+ print-bt.c \
+ print-calm-fast.c \
+ print-carp.c \
+ print-cdp.c \
+ print-cfm.c \
+ print-chdlc.c \
+ print-cip.c \
+ print-cnfp.c \
+ print-dccp.c \
+ print-decnet.c \
+ print-dhcp6.c \
+ print-domain.c \
+ print-dsa.c \
+ print-dtp.c \
+ print-dvmrp.c \
+ print-eap.c \
+ print-egp.c \
+ print-eigrp.c \
+ print-enc.c \
+ print-esp.c \
+ print-ether.c \
+ print-fddi.c \
+ print-forces.c \
+ print-fr.c \
+ print-frag6.c \
+ print-ftp.c \
+ print-geneve.c \
+ print-geonet.c \
+ print-gre.c \
+ print-hncp.c \
+ print-hsrp.c \
+ print-http.c \
+ print-icmp.c \
+ print-icmp6.c \
+ print-igmp.c \
+ print-igrp.c \
+ print-ip-demux.c \
+ print-ip.c \
+ print-ip6.c \
+ print-ip6opts.c \
+ print-ipcomp.c \
+ print-ipfc.c \
+ print-ipnet.c \
+ print-ipoib.c \
+ print-ipx.c \
+ print-isakmp.c \
+ print-isoclns.c \
+ print-juniper.c \
+ print-krb.c \
+ print-l2tp.c \
+ print-lane.c \
+ print-ldp.c \
+ print-lisp.c \
+ print-llc.c \
+ print-lldp.c \
+ print-lmp.c \
+ print-loopback.c \
+ print-lspping.c \
+ print-lwapp.c \
+ print-lwres.c \
+ print-m3ua.c \
+ print-macsec.c \
+ print-mobile.c \
+ print-mobility.c \
+ print-mpcp.c \
+ print-mpls.c \
+ print-mptcp.c \
+ print-msdp.c \
+ print-msnlb.c \
+ print-nflog.c \
+ print-nfs.c \
+ print-nsh.c \
+ print-ntp.c \
+ print-null.c \
+ print-olsr.c \
+ print-openflow-1.0.c \
+ print-openflow-1.3.c \
+ print-openflow.c \
+ print-ospf.c \
+ print-ospf6.c \
+ print-otv.c \
+ print-pflog.c \
+ print-pgm.c \
+ print-pim.c \
+ print-pktap.c \
+ print-ppi.c \
+ print-ppp.c \
+ print-pppoe.c \
+ print-pptp.c \
+ print-ptp.c \
+ print-radius.c \
+ print-raw.c \
+ print-realtek.c \
+ print-resp.c \
+ print-rip.c \
+ print-ripng.c \
+ print-rpki-rtr.c \
+ print-rsvp.c \
+ print-rt6.c \
+ print-rtsp.c \
+ print-rx.c \
+ print-sctp.c \
+ print-sflow.c \
+ print-sip.c \
+ print-sl.c \
+ print-sll.c \
+ print-slow.c \
+ print-smtp.c \
+ print-snmp.c \
+ print-someip.c \
+ print-ssh.c \
+ print-stp.c \
+ print-sunatm.c \
+ print-sunrpc.c \
+ print-symantec.c \
+ print-syslog.c \
+ print-tcp.c \
+ print-telnet.c \
+ print-tftp.c \
+ print-timed.c \
+ print-tipc.c \
+ print-token.c \
+ print-udld.c \
+ print-udp.c \
+ print-unsupported.c \
+ print-usb.c \
+ print-vjc.c \
+ print-vqp.c \
+ print-vrrp.c \
+ print-vsock.c \
+ print-vtp.c \
+ print-vxlan-gpe.c \
+ print-vxlan.c \
+ print-wb.c \
+ print-whois.c \
+ print-zep.c \
+ print-zephyr.c \
+ print-zeromq.c \
+ signature.c \
+ strtoaddr.c \
+ util-print.c
+
+LOCALSRC = @LOCALSRC@
+LIBOBJS = @LIBOBJS@
+
+LIBNETDISSECT_OBJ=$(LIBNETDISSECT_SRC:.c=.o) ${LOCALSRC:.c=.o} ${LIBOBJS}
+LIBNETDISSECT=libnetdissect.a
+
+
+SRC = $(CSRC) $(LOCALSRC)
+
+# We would like to say "OBJ = $(SRC:.c=.o)" but Ultrix's make cannot
+# hack the extra indirection
+OBJ = $(CSRC:.c=.o)
+HDR = \
+ addrtoname.h \
+ addrtostr.h \
+ af.h \
+ ah.h \
+ appletalk.h \
+ ascii_strcasecmp.h \
+ atm.h \
+ chdlc.h \
+ compiler-tests.h \
+ cpack.h \
+ diag-control.h \
+ ethertype.h \
+ extract.h \
+ fptype.h \
+ ftmacros.h \
+ funcattrs.h \
+ getservent.h \
+ gmpls.h \
+ interface.h \
+ ip.h \
+ ip6.h \
+ ipproto.h \
+ l2vpn.h \
+ llc.h \
+ machdep.h \
+ mib.h \
+ mpls.h \
+ nameser.h \
+ netdissect.h \
+ netdissect-alloc.h \
+ netdissect-ctype.h \
+ netdissect-stdinc.h \
+ nfs.h \
+ nfsfh.h \
+ nlpid.h \
+ ntp.h \
+ openflow.h \
+ ospf.h \
+ oui.h \
+ pcap-missing.h \
+ pflog.h \
+ ppp.h \
+ print.h \
+ rpc_auth.h \
+ rpc_msg.h \
+ signature.h \
+ slcompress.h \
+ smb.h \
+ status-exit-codes.h \
+ strtoaddr.h \
+ tcp.h \
+ timeval-operations.h \
+ udp.h \
+ varattrs.h
+
+TAGHDR = \
+ /usr/include/netinet/if_ether.h \
+ /usr/include/netinet/in.h
+
+TAGFILES = $(SRC) $(HDR) $(TAGHDR) $(LIBNETDISSECT_SRC) \
+ print-smb.c smbutil.c
+
+CLEANFILES = $(PROG) $(OBJ) $(LIBNETDISSECT_OBJ) print-smb.o smbutil.o
+
+EXTRA_DIST = \
+ CHANGES \
+ CMakeLists.txt \
+ CONTRIBUTING.md \
+ CREDITS \
+ INSTALL.md \
+ LICENSE \
+ Makefile-devel-adds \
+ Makefile.in \
+ README.md \
+ VERSION \
+ aclocal.m4 \
+ atime.awk \
+ bpf_dump.c \
+ cmake/Modules/FindCRYPTO.cmake \
+ cmake/Modules/FindPCAP.cmake \
+ cmake/Modules/FindSMI.cmake \
+ cmake_uninstall.cmake.in \
+ cmakeconfig.h.in \
+ config.guess \
+ config.h.in \
+ config.sub \
+ configure \
+ configure.ac \
+ doc/README.aix.md \
+ doc/README.NetBSD.md \
+ doc/README.solaris.md \
+ doc/README.Win32.md \
+ install-sh \
+ lbl/os-osf4.h \
+ lbl/os-solaris2.h \
+ lbl/os-sunos4.h \
+ lbl/os-ultrix4.h \
+ makemib \
+ missing/datalinks.c \
+ missing/dlnames.c \
+ missing/getopt_long.c \
+ missing/getopt_long.h \
+ missing/getservent.c \
+ missing/pcap_dump_ftell.c \
+ missing/snprintf.c \
+ missing/strdup.c \
+ missing/strlcat.c \
+ missing/strlcpy.c \
+ missing/strsep.c \
+ mkdep \
+ packetdat.awk \
+ print-smb.c \
+ send-ack.awk \
+ smbutil.c \
+ stime.awk \
+ tcpdump.1.in
+
+TEST_DIST= `git ls-files tests | grep -v 'tests/\..*'`
+
+RELEASE_FILES = $(CSRC) $(HDR) $(LIBNETDISSECT_SRC) $(EXTRA_DIST) $(TEST_DIST)
+
+all: $(PROG)
+
+$(PROG): $(OBJ) @V_PCAPDEP@ $(LIBNETDISSECT)
+ @rm -f $@
+ $(CC) $(FULL_CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBNETDISSECT) $(LIBS)
+
+$(LIBNETDISSECT): $(LIBNETDISSECT_OBJ)
+ @rm -f $@
+ $(AR) cr $@ $(LIBNETDISSECT_OBJ)
+ $(RANLIB) $@
+
+datalinks.o: $(srcdir)/missing/datalinks.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/datalinks.c
+dlnames.o: $(srcdir)/missing/dlnames.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/dlnames.c
+getservent.o: $(srcdir)/missing/getservent.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/getservent.c
+getopt_long.o: $(srcdir)/missing/getopt_long.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/getopt_long.c
+snprintf.o: $(srcdir)/missing/snprintf.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/snprintf.c
+strdup.o: $(srcdir)/missing/strdup.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strdup.c
+strlcat.o: $(srcdir)/missing/strlcat.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strlcat.c
+strlcpy.o: $(srcdir)/missing/strlcpy.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strlcpy.c
+strsep.o: $(srcdir)/missing/strsep.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strsep.c
+pcap_dump_ftell.o: $(srcdir)/missing/pcap_dump_ftell.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/pcap_dump_ftell.c
+
+install: all
+ [ -d $(DESTDIR)$(bindir) ] || \
+ (mkdir -p $(DESTDIR)$(bindir); chmod 755 $(DESTDIR)$(bindir))
+ $(INSTALL_PROGRAM) $(PROG) $(DESTDIR)$(bindir)/$(PROG)
+ $(INSTALL_PROGRAM) $(PROG) $(DESTDIR)$(bindir)/$(PROG).`cat ${srcdir}/VERSION`
+ [ -d $(DESTDIR)$(mandir)/man1 ] || \
+ (mkdir -p $(DESTDIR)$(mandir)/man1; chmod 755 $(DESTDIR)$(mandir)/man1)
+ $(INSTALL_DATA) $(PROG).1 $(DESTDIR)$(mandir)/man1/$(PROG).1
+
+uninstall:
+ rm -f $(DESTDIR)$(bindir)/$(PROG)
+ rm -f $(DESTDIR)$(bindir)/$(PROG).`cat ${srcdir}/VERSION`
+ rm -f $(DESTDIR)$(mandir)/man1/$(PROG).1
+
+lint:
+ lint -hbxn $(SRC) $(LIBNETDISSECT_SRC) | \
+ grep -v 'struct/union .* never defined' | \
+ grep -v 'possible pointer alignment problem'
+
+clean:
+ rm -f $(CLEANFILES) $(PROG)-`cat ${srcdir}/VERSION`.tar.gz
+
+distclean:
+ rm -f $(CLEANFILES) Makefile config.cache config.log config.status \
+ config.h os-proto.h stamp-h stamp-h.in $(PROG).1 \
+ libnetdissect.a tests/.failed tests/.passed \
+ tests/failure-outputs.txt
+ rm -rf autom4te.cache tests/DIFF tests/NEW
+
+check: tcpdump
+ $(srcdir)/tests/TESTrun
+
+extags: $(TAGFILES)
+ ctags $(TAGFILES)
+
+tags: $(TAGFILES)
+ ctags -wtd $(TAGFILES)
+
+TAGS: $(TAGFILES)
+ etags $(TAGFILES)
+
+releasetar:
+ @TAG=$(PROG)-`cat VERSION` && \
+ if git show-ref --tags --quiet --verify -- "refs/tags/$$TAG"; then \
+ git archive --prefix="$$TAG"/ -o "$$TAG".tar.gz "$$TAG" \
+ $(RELEASE_FILES) && \
+ echo "Archive build from tag $$TAG."; \
+ else \
+ git archive --prefix="$$TAG"/ -o "$$TAG".tar.gz HEAD \
+ $(RELEASE_FILES) && \
+ echo "No $$TAG tag. Archive build from HEAD."; \
+ fi
+
+releasecheck: releasetar
+ @TAG=$(PROG)-`cat VERSION` && \
+ INSTALL_DIR=/tmp/install_"$$TAG"_$$$$ && \
+ DIR=`pwd` && \
+ cd /tmp && \
+ rm -rf "$$TAG" && \
+ rm -rf "$$INSTALL_DIR" && \
+ tar xf "$$DIR"/"$$TAG".tar.gz && \
+ cd "$$TAG" && \
+ echo "[$@] $$ ./configure --enable-smb --quiet --prefix=$$INSTALL_DIR" && \
+ ./configure --enable-smb --quiet --prefix="$$INSTALL_DIR" && \
+ echo '[$@] $$ make -s all check' && \
+ make -s all check >/dev/null && \
+ echo '[$@] $$ make -s install' && \
+ make -s install && \
+ cd .. && \
+ rm -rf "$$TAG" && \
+ rm -rf "$$INSTALL_DIR" && \
+ tar xf "$$DIR"/"$$TAG".tar.gz && \
+ cd "$$TAG" && \
+ mkdir build && \
+ cd build && \
+ echo '[$@] $$ cmake -DENABLE_SMB=yes [...] ..' && \
+ cmake -DENABLE_SMB=yes \
+ -DCMAKE_INSTALL_PREFIX="$$INSTALL_DIR" \
+ -DCMAKE_MESSAGE_LOG_LEVEL=NOTICE \
+ -DCMAKE_RULE_MESSAGES=OFF \
+ -DCMAKE_INSTALL_MESSAGE=NEVER \
+ .. && \
+ echo '[$@] $$ make -s all check' && \
+ make -s all check >/dev/null && \
+ echo '[$@] $$ make -s install' && \
+ make -s install && \
+ cd ../.. && \
+ rm -rf "$$TAG" && \
+ rm -rf "$$INSTALL_DIR" && \
+ echo '[$@] Done.'
+
+whitespacecheck:
+ @# trailing space(s)?
+ @if git grep -I -n ' $$' $$(git ls-files|grep -v '^tests/'); then \
+ echo 'Error: Trailing space(s).'; \
+ exit 1; \
+ fi
+ @# trailing tab(s)?
+ @# install-sh has a tab at the end of one line
+ @if git grep -I -n ' $$' $$(git ls-files|grep -vE '^(tests/|install-sh$$)'); then \
+ echo 'Error: Trailing tabs(s).'; \
+ exit 1; \
+ fi
+ @# space(s) before tab(s)?
+ @if git grep -I -n '[ ][ ]' $$(git ls-files|grep -v '^tests/'); then \
+ echo 'Error: space(s) before tab(s).'; \
+ exit 1; \
+ fi
+
+testlist:
+ echo $(TEST_DIST)
+
+depend:
+ $(MKDEP) -c "$(CC)" -m "$(DEPENDENCY_CFLAG)" -s "$(srcdir)" $(DEFS) $(INCLS) $(SRC) $(LIBNETDISSECT_SRC)
+
+shellcheck:
+ shellcheck -f gcc -e SC2006 build.sh build_matrix.sh build_common.sh
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..566b7b7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,225 @@
+# TCPDUMP 4.x.y by [The Tcpdump Group](https://www.tcpdump.org/)
+
+**To report a security issue please send an e-mail to security@tcpdump.org.**
+
+To report bugs and other problems, contribute patches, request a
+feature, provide generic feedback etc please see the
+[guidelines for contributing](CONTRIBUTING.md) in the tcpdump source tree root.
+
+Anonymous Git is available via
+
+ https://github.com/the-tcpdump-group/tcpdump.git
+
+This directory contains source code for tcpdump, a tool for network
+monitoring and data acquisition.
+
+Over the past few years, tcpdump has been steadily improved by the
+excellent contributions from the Internet community (just browse
+through the [change log](CHANGES)). We are grateful for all the input.
+
+### Supported platforms
+In many operating systems tcpdump is available as a native package or port,
+which simplifies installation of updates and long-term maintenance. However,
+the native packages are sometimes a few versions behind and to try a more
+recent snapshot it will take to compile tcpdump from the source code.
+
+tcpdump compiles and works on at least the following platforms:
+
+* AIX
+* DragonFly BSD
+* FreeBSD
+* Haiku
+* HP-UX 11i
+* illumos (OmniOS, OpenIndiana)
+* GNU/Linux
+* {Mac} OS X / macOS
+* NetBSD
+* OpenBSD
+* OpenWrt
+* Solaris
+* Windows (requires WinPcap or Npcap, and Visual Studio with CMake)
+
+### Dependency on libpcap
+Tcpdump uses libpcap, a system-independent interface for user-level
+packet capture. Before building tcpdump, you must first retrieve and
+build libpcap.
+
+Once libpcap is built (either install it or make sure it's in
+`../libpcap`), you can build tcpdump using the procedure in the
+[installation notes](INSTALL.md).
+
+### Origins of tcpdump
+The program is loosely based on SMI's "etherfind" although none of the
+etherfind code remains. It was originally written by Van Jacobson as
+part of an ongoing research project to investigate and improve TCP and
+Internet gateway performance. The parts of the program originally
+taken from Sun's etherfind were later re-written by Steven McCanne of
+LBL. To insure that there would be no vestige of proprietary code in
+tcpdump, Steve wrote these pieces from the specification given by the
+manual entry, with no access to the source of tcpdump or etherfind.
+```text
+formerly from Lawrence Berkeley National Laboratory
+ Network Research Group <tcpdump@ee.lbl.gov>
+ ftp://ftp.ee.lbl.gov/old/tcpdump.tar.Z (3.4)
+```
+
+### See also
+Richard Stevens gives an excellent treatment of the Internet protocols
+in his book *"TCP/IP Illustrated, Volume 1"*. If you want to learn more
+about tcpdump and how to interpret its output, pick up this book.
+
+Another tool that tcpdump users might find useful is
+[tcpslice](https://github.com/the-tcpdump-group/tcpslice).
+It is a program that can be used to extract portions of tcpdump binary
+trace files.
+
+### The original LBL README by Steve McCanne, Craig Leres and Van Jacobson
+```
+This directory also contains some short awk programs intended as
+examples of ways to reduce tcpdump data when you're tracking
+particular network problems:
+
+send-ack.awk
+ Simplifies the tcpdump trace for an ftp (or other unidirectional
+ tcp transfer). Since we assume that one host only sends and
+ the other only acks, all address information is left off and
+ we just note if the packet is a "send" or an "ack".
+
+ There is one output line per line of the original trace.
+ Field 1 is the packet time in decimal seconds, relative
+ to the start of the conversation. Field 2 is delta-time
+ from last packet. Field 3 is packet type/direction.
+ "Send" means data going from sender to receiver, "ack"
+ means an ack going from the receiver to the sender. A
+ preceding "*" indicates that the data is a retransmission.
+ A preceding "-" indicates a hole in the sequence space
+ (i.e., missing packet(s)), a "#" means an odd-size (not max
+ seg size) packet. Field 4 has the packet flags
+ (same format as raw trace). Field 5 is the sequence
+ number (start seq. num for sender, next expected seq number
+ for acks). The number in parens following an ack is
+ the delta-time from the first send of the packet to the
+ ack. A number in parens following a send is the
+ delta-time from the first send of the packet to the
+ current send (on duplicate packets only). Duplicate
+ sends or acks have a number in square brackets showing
+ the number of duplicates so far.
+
+ Here is a short sample from near the start of an ftp:
+ 3.00 0.20 send . 512
+ 3.20 0.20 ack . 1024 (0.20)
+ 3.20 0.00 send P 1024
+ 3.40 0.20 ack . 1536 (0.20)
+ 3.80 0.40 * send . 0 (3.80) [2]
+ 3.82 0.02 * ack . 1536 (0.62) [2]
+ Three seconds into the conversation, bytes 512 through 1023
+ were sent. 200ms later they were acked. Shortly thereafter
+ bytes 1024-1535 were sent and again acked after 200ms.
+ Then, for no apparent reason, 0-511 is retransmitted, 3.8
+ seconds after its initial send (the round trip time for this
+ ftp was 1sec, +-500ms). Since the receiver is expecting
+ 1536, 1536 is re-acked when 0 arrives.
+
+packetdat.awk
+ Computes chunk summary data for an ftp (or similar
+ unidirectional tcp transfer). [A "chunk" refers to
+ a chunk of the sequence space -- essentially the packet
+ sequence number divided by the max segment size.]
+
+ A summary line is printed showing the number of chunks,
+ the number of packets it took to send that many chunks
+ (if there are no lost or duplicated packets, the number
+ of packets should equal the number of chunks) and the
+ number of acks.
+
+ Following the summary line is one line of information
+ per chunk. The line contains eight fields:
+ 1 - the chunk number
+ 2 - the start sequence number for this chunk
+ 3 - time of first send
+ 4 - time of last send
+ 5 - time of first ack
+ 6 - time of last ack
+ 7 - number of times chunk was sent
+ 8 - number of times chunk was acked
+ (all times are in decimal seconds, relative to the start
+ of the conversation.)
+
+ As an example, here is the first part of the output for
+ an ftp trace:
+
+ # 134 chunks. 536 packets sent. 508 acks.
+ 1 1 0.00 5.80 0.20 0.20 4 1
+ 2 513 0.28 6.20 0.40 0.40 4 1
+ 3 1025 1.16 6.32 1.20 1.20 4 1
+ 4 1561 1.86 15.00 2.00 2.00 6 1
+ 5 2049 2.16 15.44 2.20 2.20 5 1
+ 6 2585 2.64 16.44 2.80 2.80 5 1
+ 7 3073 3.00 16.66 3.20 3.20 4 1
+ 8 3609 3.20 17.24 3.40 5.82 4 11
+ 9 4097 6.02 6.58 6.20 6.80 2 5
+
+ This says that 134 chunks were transferred (about 70K
+ since the average packet size was 512 bytes). It took
+ 536 packets to transfer the data (i.e., on the average
+ each chunk was transmitted four times). Looking at,
+ say, chunk 4, we see it represents the 512 bytes of
+ sequence space from 1561 to 2048. It was first sent
+ 1.86 seconds into the conversation. It was last
+ sent 15 seconds into the conversation and was sent
+ a total of 6 times (i.e., it was retransmitted every
+ 2 seconds on the average). It was acked once, 140ms
+ after it first arrived.
+
+stime.awk
+atime.awk
+ Output one line per send or ack, respectively, in the form
+ <time> <seq. number>
+ where <time> is the time in seconds since the start of the
+ transfer and <seq. number> is the sequence number being sent
+ or acked. I typically plot this data looking for suspicious
+ patterns.
+
+
+The problem I was looking at was the bulk-data-transfer
+throughput of medium delay network paths (1-6 sec. round trip
+time) under typical DARPA Internet conditions. The trace of the
+ftp transfer of a large file was used as the raw data source.
+The method was:
+
+ - On a local host (but not the Sun running tcpdump), connect to
+ the remote ftp.
+
+ - On the monitor Sun, start the trace going. E.g.,
+ tcpdump host local-host and remote-host and port ftp-data >tracefile
+
+ - On local, do either a get or put of a large file (~500KB),
+ preferably to the null device (to minimize effects like
+ closing the receive window while waiting for a disk write).
+
+ - When transfer is finished, stop tcpdump. Use awk to make up
+ two files of summary data (maxsize is the maximum packet size,
+ tracedata is the file of tcpdump tracedata):
+ awk -f send-ack.awk packetsize=avgsize tracedata >sa
+ awk -f packetdat.awk packetsize=avgsize tracedata >pd
+
+ - While the summary data files are printing, take a look at
+ how the transfer behaved:
+ awk -f stime.awk tracedata | xgraph
+ (90% of what you learn seems to happen in this step).
+
+ - Do all of the above steps several times, both directions,
+ at different times of day, with different protocol
+ implementations on the other end.
+
+ - Using one of the Unix data analysis packages (in my case,
+ S and Gary Perlman's Unix|Stat), spend a few months staring
+ at the data.
+
+ - Change something in the local protocol implementation and
+ redo the steps above.
+
+ - Once a week, tell your funding agent that you're discovering
+ wonderful things and you'll write up that research report
+ "real soon now".
+```
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..9609202
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+4.99.4
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..c67e572
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1244 @@
+dnl Copyright (c) 1995, 1996, 1997, 1998
+dnl The Regents of the University of California. All rights reserved.
+dnl
+dnl Redistribution and use in source and binary forms, with or without
+dnl modification, are permitted provided that: (1) source code distributions
+dnl retain the above copyright notice and this paragraph in its entirety, (2)
+dnl distributions including binary code include the above copyright notice and
+dnl this paragraph in its entirety in the documentation or other materials
+dnl provided with the distribution, and (3) all advertising materials mentioning
+dnl features or use of this software display the following acknowledgement:
+dnl ``This product includes software developed by the University of California,
+dnl Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+dnl the University nor the names of its contributors may be used to endorse
+dnl or promote products derived from this software without specific prior
+dnl written permission.
+dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+dnl WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+dnl MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+dnl
+dnl LBL autoconf macros
+dnl
+
+dnl
+dnl Do whatever AC_LBL_C_INIT work is necessary before using AC_PROG_CC.
+dnl
+dnl It appears that newer versions of autoconf (2.64 and later) will,
+dnl if you use AC_TRY_COMPILE in a macro, stick AC_PROG_CC at the
+dnl beginning of the macro, even if the macro itself calls AC_PROG_CC.
+dnl See the "Prerequisite Macros" and "Expanded Before Required" sections
+dnl in the Autoconf documentation.
+dnl
+dnl This causes a steaming heap of fail in our case, as we were, in
+dnl AC_LBL_C_INIT, doing the tests we now do in AC_LBL_C_INIT_BEFORE_CC,
+dnl calling AC_PROG_CC, and then doing the tests we now do in
+dnl AC_LBL_C_INIT. Now, we run AC_LBL_C_INIT_BEFORE_CC, AC_PROG_CC,
+dnl and AC_LBL_C_INIT at the top level.
+dnl
+AC_DEFUN(AC_LBL_C_INIT_BEFORE_CC,
+[
+ AC_BEFORE([$0], [AC_LBL_C_INIT])
+ AC_BEFORE([$0], [AC_PROG_CC])
+ AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
+ AC_BEFORE([$0], [AC_LBL_DEVEL])
+ AC_ARG_WITH(gcc, [ --without-gcc don't use gcc])
+ $1=""
+ if test "${srcdir}" != "." ; then
+ $1="-I$srcdir"
+ fi
+ if test "${CFLAGS+set}" = set; then
+ LBL_CFLAGS="$CFLAGS"
+ fi
+ if test -z "$CC" ; then
+ case "$host_os" in
+
+ bsdi*)
+ AC_CHECK_PROG(SHLICC2, shlicc2, yes, no)
+ if test $SHLICC2 = yes ; then
+ CC=shlicc2
+ export CC
+ fi
+ ;;
+ esac
+ fi
+ if test -z "$CC" -a "$with_gcc" = no ; then
+ CC=cc
+ export CC
+ fi
+])
+
+dnl
+dnl Determine which compiler we're using (cc or gcc)
+dnl If using gcc, determine the version number
+dnl If using cc:
+dnl require that it support ansi prototypes
+dnl use -O (AC_PROG_CC will use -g -O2 on gcc, so we don't need to
+dnl do that ourselves for gcc)
+dnl add -g flags, as appropriate
+dnl explicitly specify /usr/local/include
+dnl
+dnl NOTE WELL: with newer versions of autoconf, "gcc" means any compiler
+dnl that defines __GNUC__, which means clang, for example, counts as "gcc".
+dnl
+dnl usage:
+dnl
+dnl AC_LBL_C_INIT(copt, incls)
+dnl
+dnl results:
+dnl
+dnl $1 (copt set)
+dnl $2 (incls set)
+dnl CC
+dnl LDFLAGS
+dnl LBL_CFLAGS
+dnl
+AC_DEFUN(AC_LBL_C_INIT,
+[
+ AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
+ AC_BEFORE([$0], [AC_LBL_DEVEL])
+ AC_BEFORE([$0], [AC_LBL_SHLIBS_INIT])
+ if test "$GCC" = yes ; then
+ #
+ # -Werror forces warnings to be errors.
+ #
+ ac_lbl_cc_force_warning_errors=-Werror
+ else
+ $2="$$2 -I/usr/local/include"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
+
+ case "$host_os" in
+
+ darwin*)
+ #
+ # This is assumed either to be GCC or clang, both
+ # of which use -Werror to force warnings to be errors.
+ #
+ ac_lbl_cc_force_warning_errors=-Werror
+ ;;
+
+ hpux*)
+ #
+ # HP C, which is what we presume we're using, doesn't
+ # exit with a non-zero exit status if we hand it an
+ # invalid -W flag, can't be forced to do so even with
+ # +We, and doesn't handle GCC-style -W flags, so we
+ # don't want to try using GCC-style -W flags.
+ #
+ ac_lbl_cc_dont_try_gcc_dashW=yes
+ ;;
+
+ irix*)
+ #
+ # MIPS C, which is what we presume we're using, doesn't
+ # necessarily exit with a non-zero exit status if we
+ # hand it an invalid -W flag, can't be forced to do
+ # so, and doesn't handle GCC-style -W flags, so we
+ # don't want to try using GCC-style -W flags.
+ #
+ ac_lbl_cc_dont_try_gcc_dashW=yes
+ #
+ # It also, apparently, defaults to "char" being
+ # unsigned, unlike most other C implementations;
+ # I suppose we could say "signed char" whenever
+ # we want to guarantee a signed "char", but let's
+ # just force signed chars.
+ #
+ # -xansi is normally the default, but the
+ # configure script was setting it; perhaps -cckr
+ # was the default in the Old Days. (Then again,
+ # that would probably be for backwards compatibility
+ # in the days when ANSI C was Shiny and New, i.e.
+ # 1989 and the early '90's, so maybe we can just
+ # drop support for those compilers.)
+ #
+ # -g is equivalent to -g2, which turns off
+ # optimization; we choose -g3, which generates
+ # debugging information but doesn't turn off
+ # optimization (even if the optimization would
+ # cause inaccuracies in debugging).
+ #
+ $1="$$1 -xansi -signed -g3"
+ ;;
+
+ osf*)
+ #
+ # Presumed to be DEC OSF/1, Digital UNIX, or
+ # Tru64 UNIX.
+ #
+ # The DEC C compiler, which is what we presume we're
+ # using, doesn't exit with a non-zero exit status if we
+ # hand it an invalid -W flag, can't be forced to do
+ # so, and doesn't handle GCC-style -W flags, so we
+ # don't want to try using GCC-style -W flags.
+ #
+ ac_lbl_cc_dont_try_gcc_dashW=yes
+ #
+ # -g is equivalent to -g2, which turns off
+ # optimization; we choose -g3, which generates
+ # debugging information but doesn't turn off
+ # optimization (even if the optimization would
+ # cause inaccuracies in debugging).
+ #
+ $1="$$1 -g3"
+ ;;
+
+ solaris*)
+ #
+ # Assumed to be Sun C, which requires -errwarn to force
+ # warnings to be treated as errors.
+ #
+ ac_lbl_cc_force_warning_errors=-errwarn
+ ;;
+
+ ultrix*)
+ AC_MSG_CHECKING(that Ultrix $CC hacks const in prototypes)
+ AC_CACHE_VAL(ac_cv_lbl_cc_const_proto,
+ AC_TRY_COMPILE(
+ [#include <sys/types.h>],
+ [struct a { int b; };
+ void c(const struct a *)],
+ ac_cv_lbl_cc_const_proto=yes,
+ ac_cv_lbl_cc_const_proto=no))
+ AC_MSG_RESULT($ac_cv_lbl_cc_const_proto)
+ if test $ac_cv_lbl_cc_const_proto = no ; then
+ AC_DEFINE(const,[],
+ [to handle Ultrix compilers that don't support const in prototypes])
+ fi
+ ;;
+ esac
+ $1="$$1 -O"
+ fi
+])
+
+dnl
+dnl Check whether the compiler option specified as the second argument
+dnl is supported by the compiler and, if so, add it to the macro
+dnl specified as the first argument
+dnl
+AC_DEFUN(AC_LBL_CHECK_COMPILER_OPT,
+ [
+ AC_MSG_CHECKING([whether the compiler supports the $2 option])
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $2"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE([[int main(void) { return 0; }]])],
+ [
+ AC_MSG_RESULT([yes])
+ CFLAGS="$save_CFLAGS"
+ $1="$$1 $2"
+ ],
+ [
+ AC_MSG_RESULT([no])
+ CFLAGS="$save_CFLAGS"
+ ])
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+ ])
+
+dnl
+dnl Check whether the compiler supports an option to generate
+dnl Makefile-style dependency lines
+dnl
+dnl GCC uses -M for this. Non-GCC compilers that support this
+dnl use a variety of flags, including but not limited to -M.
+dnl
+dnl We test whether the flag in question is supported, as older
+dnl versions of compilers might not support it.
+dnl
+dnl We don't try all the possible flags, just in case some flag means
+dnl "generate dependencies" on one compiler but means something else
+dnl on another compiler.
+dnl
+dnl Most compilers that support this send the output to the standard
+dnl output by default. IBM's XLC, however, supports -M but sends
+dnl the output to {sourcefile-basename}.u, and AIX has no /dev/stdout
+dnl to work around that, so we don't bother with XLC.
+dnl
+AC_DEFUN(AC_LBL_CHECK_DEPENDENCY_GENERATION_OPT,
+ [
+ AC_MSG_CHECKING([whether the compiler supports generating dependencies])
+ if test "$GCC" = yes ; then
+ #
+ # GCC, or a compiler deemed to be GCC by AC_PROG_CC (even
+ # though it's not); we assume that, in this case, the flag
+ # would be -M.
+ #
+ ac_lbl_dependency_flag="-M"
+ else
+ #
+ # Not GCC or a compiler deemed to be GCC; what platform is
+ # this? (We're assuming that if the compiler isn't GCC
+ # it's the compiler from the vendor of the OS; that won't
+ # necessarily be true for x86 platforms, where it might be
+ # the Intel C compiler.)
+ #
+ case "$host_os" in
+
+ irix*|osf*|darwin*)
+ #
+ # MIPS C for IRIX, DEC C, and clang all use -M.
+ #
+ ac_lbl_dependency_flag="-M"
+ ;;
+
+ solaris*)
+ #
+ # Sun C uses -xM.
+ #
+ ac_lbl_dependency_flag="-xM"
+ ;;
+
+ hpux*)
+ #
+ # HP's older C compilers don't support this.
+ # HP's newer C compilers support this with
+ # either +M or +Make; the older compilers
+ # interpret +M as something completely
+ # different, so we use +Make so we don't
+ # think it works with the older compilers.
+ #
+ ac_lbl_dependency_flag="+Make"
+ ;;
+
+ *)
+ #
+ # Not one of the above; assume no support for
+ # generating dependencies.
+ #
+ ac_lbl_dependency_flag=""
+ ;;
+ esac
+ fi
+
+ #
+ # Is ac_lbl_dependency_flag defined and, if so, does the compiler
+ # complain about it?
+ #
+ # Note: clang doesn't seem to exit with an error status when handed
+ # an unknown non-warning error, even if you pass it
+ # -Werror=unknown-warning-option. However, it always supports
+ # -M, so the fact that this test always succeeds with clang
+ # isn't an issue.
+ #
+ if test ! -z "$ac_lbl_dependency_flag"; then
+ AC_LANG_CONFTEST(
+ [AC_LANG_SOURCE([[int main(void) { return 0; }]])])
+ if AC_RUN_LOG([eval "$CC $ac_lbl_dependency_flag conftest.c >/dev/null 2>&1"]); then
+ AC_MSG_RESULT([yes, with $ac_lbl_dependency_flag])
+ DEPENDENCY_CFLAG="$ac_lbl_dependency_flag"
+ MKDEP='${top_srcdir}/mkdep'
+ else
+ AC_MSG_RESULT([no])
+ #
+ # We can't run mkdep, so have "make depend" do
+ # nothing.
+ #
+ MKDEP=:
+ fi
+ rm -rf conftest*
+ else
+ AC_MSG_RESULT([no])
+ #
+ # We can't run mkdep, so have "make depend" do
+ # nothing.
+ #
+ MKDEP=:
+ fi
+ AC_SUBST(DEPENDENCY_CFLAG)
+ AC_SUBST(MKDEP)
+ ])
+
+#
+# Try compiling a sample of the type of code that appears in
+# gencode.c with "inline", "__inline__", and "__inline".
+#
+# Autoconf's AC_C_INLINE, at least in autoconf 2.13, isn't good enough,
+# as it just tests whether a function returning "int" can be inlined;
+# at least some versions of HP's C compiler can inline that, but can't
+# inline a function that returns a struct pointer.
+#
+# Make sure we use the V_CCOPT flags, because some of those might
+# disable inlining.
+#
+AC_DEFUN(AC_LBL_C_INLINE,
+ [AC_MSG_CHECKING(for inline)
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$V_CCOPT"
+ AC_CACHE_VAL(ac_cv_lbl_inline, [
+ ac_cv_lbl_inline=""
+ ac_lbl_cc_inline=no
+ for ac_lbl_inline in inline __inline__ __inline
+ do
+ AC_TRY_COMPILE(
+ [#define inline $ac_lbl_inline
+ static inline struct iltest *foo(void);
+ struct iltest {
+ int iltest1;
+ int iltest2;
+ };
+
+ static inline struct iltest *
+ foo()
+ {
+ static struct iltest xxx;
+
+ return &xxx;
+ }],,ac_lbl_cc_inline=yes,)
+ if test "$ac_lbl_cc_inline" = yes ; then
+ break;
+ fi
+ done
+ if test "$ac_lbl_cc_inline" = yes ; then
+ ac_cv_lbl_inline=$ac_lbl_inline
+ fi])
+ CFLAGS="$save_CFLAGS"
+ if test ! -z "$ac_cv_lbl_inline" ; then
+ AC_MSG_RESULT($ac_cv_lbl_inline)
+ else
+ AC_MSG_RESULT(no)
+ fi
+ AC_DEFINE_UNQUOTED(inline, $ac_cv_lbl_inline, [Define as token for inline if inlining supported])])
+
+dnl
+dnl Use pfopen.c if available and pfopen() not in standard libraries
+dnl Require libpcap
+dnl Look for libpcap in directories under ..; those are local versions.
+dnl Look for an installed libpcap if there is no local version or if
+dnl the user said not to look for a local version.
+dnl
+dnl usage:
+dnl
+dnl AC_LBL_LIBPCAP(pcapdep, incls)
+dnl
+dnl results:
+dnl
+dnl $1 (pcapdep set)
+dnl $2 (incls appended)
+dnl LIBS
+dnl LBL_LIBS
+dnl
+AC_DEFUN(AC_LBL_LIBPCAP,
+ [AC_REQUIRE([AC_LBL_LIBRARY_NET])
+ dnl
+ dnl save a copy before locating libpcap.a
+ dnl
+ LBL_LIBS="$LIBS"
+ pfopen=/usr/examples/packetfilter/pfopen.c
+ if test -f $pfopen ; then
+ AC_CHECK_FUNCS(pfopen)
+ if test $ac_cv_func_pfopen = "no" ; then
+ AC_MSG_RESULT(Using $pfopen)
+ LIBS="$LIBS $pfopen"
+ fi
+ fi
+ libpcap=FAIL
+ AC_MSG_CHECKING([whether to look for a local libpcap])
+ AC_ARG_ENABLE(local-libpcap,
+ AS_HELP_STRING([--disable-local-libpcap],
+ [don't look for a local libpcap @<:@default=check for a local libpcap@:>@]),,
+ enableval=yes)
+ case "$enableval" in
+
+ no)
+ AC_MSG_RESULT(no)
+ #
+ # Don't look for a local libpcap.
+ #
+ using_local_libpcap=no
+ ;;
+
+ *)
+ AC_MSG_RESULT(yes)
+ #
+ # Look for a local pcap library.
+ #
+ AC_MSG_CHECKING(for local pcap library)
+ lastdir=FAIL
+ places=`ls $srcdir/.. | sed -e 's,/$,,' -e "s,^,$srcdir/../," | \
+ egrep '/libpcap-[[0-9]]+\.[[0-9]]+(\.[[0-9]]*)?([[ab]][[0-9]]*|-PRE-GIT|rc.)?$'`
+ places2=`ls .. | sed -e 's,/$,,' -e "s,^,../," | \
+ egrep '/libpcap-[[0-9]]+\.[[0-9]]+(\.[[0-9]]*)?([[ab]][[0-9]]*|-PRE-GIT|rc.)?$'`
+ for dir in $places $srcdir/../libpcap ../libpcap $srcdir/libpcap $places2 ; do
+ basedir=`echo $dir | sed -e 's/[[ab]][[0-9]]*$//' | \
+ sed -e 's/-PRE-GIT$//' `
+ if test $lastdir = $basedir ; then
+ dnl skip alphas when an actual release is present
+ continue;
+ fi
+ lastdir=$dir
+ if test -r $dir/libpcap.a ; then
+ libpcap=$dir/libpcap.a
+ local_pcap_dir=$dir
+ dnl continue and select the last one that exists
+ fi
+ done
+ if test $libpcap = FAIL ; then
+ #
+ # We didn't find a local libpcap.
+ #
+ AC_MSG_RESULT(not found)
+ using_local_libpcap=no;
+ else
+ #
+ # We found a local libpcap.
+ #
+ AC_MSG_RESULT($libpcap)
+ using_local_libpcap=yes
+ fi
+ ;;
+ esac
+
+ if test $using_local_libpcap = no ; then
+ #
+ # We didn't find a local libpcap.
+ # Look for an installed pkg-config.
+ #
+ AC_PATH_TOOL(PKG_CONFIG, pkg-config)
+ if test -n "$PKG_CONFIG" ; then
+ #
+ # We have it. Are there .pc files for libpcap?
+ #
+ # --exists was introduced in pkg-config 0.4.0; that
+ # dates back to late 2000, so we won't worry about
+ # earlier releases that lack it.
+ #
+ AC_MSG_CHECKING(whether there are .pc files for libpcap)
+ if "$PKG_CONFIG" libpcap --exists ; then
+ #
+ # Yes, so we can use pkg-config to get configuration
+ # information for libpcap.
+ #
+ AC_MSG_RESULT(yes)
+ pkg_config_usable=yes
+ else
+ #
+ # No, so we can't use pkg-config to get configuration
+ # information for libpcap.
+ #
+ AC_MSG_RESULT(no)
+ pkg_config_usable=no
+ fi
+ else
+ #
+ # We don't have it, so we obviously can't use it.
+ #
+ pkg_config_usable=no
+ fi
+ if test "$pkg_config_usable" = "yes" ; then
+ #
+ # Found both - use pkg-config to get the include flags for
+ # libpcap and the flags to link with libpcap.
+ #
+ # Please read section 11.6 "Shell Substitutions"
+ # in the autoconf manual before doing anything
+ # to this that involves quoting. Especially note
+ # the statement "There is just no portable way to use
+ # double-quoted strings inside double-quoted back-quoted
+ # expressions (pfew!)."
+ #
+ cflags=`"$PKG_CONFIG" libpcap --cflags`
+ $2="$cflags $$2"
+ libpcap=`"$PKG_CONFIG" libpcap --libs`
+ else
+ #
+ # No pkg-config
+ # Look for an installed pcap-config.
+ #
+ AC_PATH_TOOL(PCAP_CONFIG, pcap-config)
+ if test -n "$PCAP_CONFIG" ; then
+ #
+ # Found - use it to get the include flags for
+ # libpcap and the flags to link with libpcap.
+ #
+ # If this is a vendor-supplied pcap-config, which
+ # we define as being "a pcap-config in /usr/bin
+ # or /usr/ccs/bin" (the latter is for Solaris and
+ # Sun/Oracle Studio), there are some issues. Work
+ # around them.
+ #
+ if test \( "$PCAP_CONFIG" = "/usr/bin/pcap-config" \) -o \
+ \( "$PCAP_CONFIG" = "/usr/ccs/bin/pcap-config" \) ; then
+ #
+ # It's vendor-supplied.
+ #
+ case "$host_os" in
+
+ darwin*)
+ #
+ # This is macOS or another Darwin-based OS.
+ #
+ # That means that /usr/bin/pcap-config it
+ # may provide -I/usr/local/include with --cflags
+ # and -L/usr/local/lib with --libs, rather than
+ # pointing to the OS-supplied library and
+ # Xcode-supplied headers. Remember that, so we
+ # ignore those values.
+ #
+ _broken_apple_pcap_config=yes
+ ;;
+
+ solaris*)
+ #
+ # This is Solaris 2 or later, i.e. SunOS 5.x.
+ #
+ # At least on Solaris 11; there's /usr/bin/pcap-config,
+ # which reports -L/usr/lib with --libs, causing
+ # the 32-bit libraries to be found, and there's
+ # /usr/bin/{64bitarch}/pcap-config, where {64bitarch}
+ # is a name for the 64-bit version of the instruction
+ # set, which reports -L /usr/lib/{64bitarch}, causing
+ # the 64-bit libraries to be found.
+ #
+ # So if we're building 64-bit targets, we replace
+ # PCAP_CONFIG with /usr/bin/{64bitarch}; we get
+ # {64bitarch} as the output of "isainfo -n".
+ #
+ # Are we building 32-bit or 64-bit? Get the
+ # size of void *, and check that.
+ #
+ AC_CHECK_SIZEOF([void *])
+ if test ac_cv_sizeof_void_p -eq 8 ; then
+ isainfo_output=`isainfo -n`
+ if test ! -z "$isainfo_output" ; then
+ #
+ # Success - change PCAP_CONFIG.
+ #
+ PCAP_CONFIG=`echo $PCAP_CONFIG | sed "s;/bin/;/bin/$isainfo_output/;"`
+ fi
+ fi
+ ;;
+ esac
+ fi
+ #
+ # Please read section 11.6 "Shell Substitutions"
+ # in the autoconf manual before doing anything
+ # to this that involves quoting. Especially note
+ # the statement "There is just no portable way to use
+ # double-quoted strings inside double-quoted back-quoted
+ # expressions (pfew!)."
+ #
+ cflags=`"$PCAP_CONFIG" --cflags`
+ #
+ # Work around macOS (and probably other Darwin) brokenness,
+ # by not adding /usr/local/include if it's from the broken
+ # Apple pcap-config.
+ #
+ if test "$_broken_apple_pcap_config" = "yes" ; then
+ #
+ # Strip -I/usr/local/include with sed.
+ #
+ cflags=`echo $cflags | sed 's;-I/usr/local/include;;'`
+ fi
+ $2="$cflags $$2"
+ libpcap=`"$PCAP_CONFIG" --libs`
+ #
+ # Work around macOS (and probably other Darwin) brokenness,
+ # by not adding /usr/local/lib if it's from the broken
+ # Apple pcap-config.
+ #
+ if test "$_broken_apple_pcap_config" = "yes" ; then
+ #
+ # Strip -L/usr/local/lib with sed.
+ #
+ libpcap=`echo $libpcap | sed 's;-L/usr/local/lib;;'`
+ fi
+ else
+ #
+ # Not found; look for an installed pcap.
+ #
+ AC_CHECK_LIB(pcap, main, libpcap="-lpcap")
+ if test $libpcap = FAIL ; then
+ AC_MSG_ERROR(see the INSTALL doc for more info)
+ fi
+ dnl
+ dnl Some versions of Red Hat Linux put "pcap.h" in
+ dnl "/usr/include/pcap"; had the LBL folks done so,
+ dnl that would have been a good idea, but for
+ dnl the Red Hat folks to do so just breaks source
+ dnl compatibility with other systems.
+ dnl
+ dnl We work around this by assuming that, as we didn't
+ dnl find a local libpcap, libpcap is in /usr/lib or
+ dnl /usr/local/lib and that the corresponding header
+ dnl file is under one of those directories; if we don't
+ dnl find it in either of those directories, we check to
+ dnl see if it's in a "pcap" subdirectory of them and,
+ dnl if so, add that subdirectory to the "-I" list.
+ dnl
+ dnl (We now also put pcap.h in /usr/include/pcap, but we
+ dnl leave behind a /usr/include/pcap.h that includes it,
+ dnl so you can still just include <pcap.h>.)
+ dnl
+ AC_MSG_CHECKING(for extraneous pcap header directories)
+ if test \( ! -r /usr/local/include/pcap.h \) -a \
+ \( ! -r /usr/include/pcap.h \); then
+ if test -r /usr/local/include/pcap/pcap.h; then
+ d="/usr/local/include/pcap"
+ elif test -r /usr/include/pcap/pcap.h; then
+ d="/usr/include/pcap"
+ fi
+ fi
+ if test -z "$d" ; then
+ AC_MSG_RESULT(not found)
+ else
+ $2="-I$d $$2"
+ AC_MSG_RESULT(found -- -I$d added)
+ fi
+ fi
+ fi
+ else
+ #
+ # We found a local libpcap. Add it to the dependencies for
+ # tcpdump.
+ #
+ $1=$libpcap
+
+ #
+ # Look for its pcap-config script.
+ #
+ AC_PATH_PROG(PCAP_CONFIG, pcap-config,, $local_pcap_dir)
+
+ if test -n "$PCAP_CONFIG"; then
+ #
+ # We don't want its --cflags or --libs output, because
+ # those presume it's installed. For the C compiler flags,
+ # we add the source directory for the local libpcap, so
+ # we pick up its header files.
+ #
+ # We do, however, want its additional libraries, as required
+ # when linking statically, because it makes calls to
+ # routines in those libraries, so we'll need to link with
+ # them, because we'll be linking statically with it.
+ #
+ # If it supports --static-pcap-only. use that, as we will be
+ # linking with a static libpcap but won't be linking
+ # statically with any of the libraries on which it depends;
+ # those libraries might not even have static versions
+ # installed.
+ #
+ # That means we need to find out the libraries on which
+ # libpcap directly depends, so we can link with them, but we
+ # don't need to link with the libraries on which those
+ # libraries depend as, on all UN*Xes with which I'm
+ # familiar, the libraries on which a shared library depends
+ # are stored in the library and are automatically loaded by
+ # the run-time linker, without the executable having to be
+ # linked with those libraries. (This allows a library to be
+ # changed to depend on more libraries without breaking that
+ # library's ABI.)
+ #
+ # The only way to test for that support is to see if the
+ # script contains the string "static-pcap-only"; we can't
+ # try using that flag and checking for errors, as the
+ # versions of the script that didn't have that flag wouldn't
+ # report or return an error for an unsupported command-line
+ # flag. Those older versions provided, with --static, only
+ # the libraries on which libpcap depends, not the
+ # dependencies of those libraries; the versions with
+ # --static-pcap-only provide all the dependencies with
+ # --static, for the benefit of programs that are completely
+ # statically linked, and provide only the direct
+ # dependencies with --static-pcap-only.
+ #
+ if grep -s -q "static-pcap-only" "$PCAP_CONFIG"
+ then
+ static_opt="--static-pcap-only"
+ else
+ static_opt="--static"
+ fi
+ $2="-I$local_pcap_dir $$2"
+ additional_libs=`"$PCAP_CONFIG" $static_opt --additional-libs`
+ libpcap="$libpcap $additional_libs"
+ else
+ #
+ # It doesn't have a pcap-config script.
+ # Make sure it has a pcap.h file.
+ #
+ places=`ls $srcdir/.. | sed -e 's,/$,,' -e "s,^,$srcdir/../," | \
+ egrep '/libpcap-[[0-9]]*.[[0-9]]*(.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
+ places2=`ls .. | sed -e 's,/$,,' -e "s,^,../," | \
+ egrep '/libpcap-[[0-9]]*.[[0-9]]*(.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
+ pcapH=FAIL
+ if test -r $local_pcap_dir/pcap.h; then
+ pcapH=$local_pcap_dir
+ else
+ for dir in $places $srcdir/../libpcap ../libpcap $srcdir/libpcap $places2 ; do
+ if test -r $dir/pcap.h ; then
+ pcapH=$dir
+ fi
+ done
+ fi
+
+ if test $pcapH = FAIL ; then
+ AC_MSG_ERROR(cannot find pcap.h: see INSTALL)
+ fi
+
+ #
+ # Force the compiler to look for header files in the
+ # directory containing pcap.h.
+ #
+ $2="-I$pcapH $$2"
+ fi
+ fi
+
+ if test -z "$PKG_CONFIG" -a -z "$PCAP_CONFIG"; then
+ #
+ # We don't have pkg-config or pcap-config; find out any additional
+ # link flags we need. (If we have pkg-config or pcap-config, we
+ # assume it tells us what we need.)
+ #
+ case "$host_os" in
+
+ aix*)
+ #
+ # If libpcap is DLPI-based, we have to use /lib/pse.exp if
+ # present, as we use the STREAMS routines.
+ #
+ # (XXX - true only if we're linking with a static libpcap?)
+ #
+ pseexe="/lib/pse.exp"
+ AC_MSG_CHECKING(for $pseexe)
+ if test -f $pseexe ; then
+ AC_MSG_RESULT(yes)
+ LIBS="$LIBS -I:$pseexe"
+ fi
+
+ #
+ # If libpcap is BPF-based, we need "-lodm" and "-lcfg", as
+ # we use them to load the BPF module.
+ #
+ # (XXX - true only if we're linking with a static libpcap?)
+ #
+ LIBS="$LIBS -lodm -lcfg"
+ ;;
+
+ solaris*)
+ # libdlpi is needed for Solaris 11 and later.
+ AC_CHECK_LIB(dlpi, dlpi_walk, LIBS="$LIBS -ldlpi" LDFLAGS="-L/lib $LDFLAGS", ,-L/lib)
+ ;;
+ esac
+ fi
+
+ LIBS="$libpcap $LIBS"
+
+ dnl
+ dnl Check for "pcap_loop()", to make sure we found a working
+ dnl libpcap and have all the right other libraries with which
+ dnl to link. (Otherwise, the checks below will fail, not
+ dnl because the routines are missing from the library, but
+ dnl because we aren't linking properly with libpcap, and
+ dnl that will cause confusing errors at build time.)
+ dnl
+ AC_CHECK_FUNC(pcap_loop,,
+ [
+ AC_MSG_ERROR(
+[This is a bug, please follow the guidelines in CONTRIBUTING.md and include the
+config.log file in your report. If you have downloaded libpcap from
+tcpdump.org, and built it yourself, please also include the config.log
+file from the libpcap source directory, the Makefile from the libpcap
+source directory, and the output of the make process for libpcap, as
+this could be a problem with the libpcap that was built, and we will
+not be able to determine why this is happening, and thus will not be
+able to fix it, without that information, as we have not been able to
+reproduce this problem ourselves.])
+ ])
+])
+
+dnl
+dnl If using gcc, make sure we have ANSI ioctl definitions
+dnl
+dnl usage:
+dnl
+dnl AC_LBL_FIXINCLUDES
+dnl
+AC_DEFUN(AC_LBL_FIXINCLUDES,
+ [if test "$GCC" = yes ; then
+ AC_MSG_CHECKING(for ANSI ioctl definitions)
+ AC_CACHE_VAL(ac_cv_lbl_gcc_fixincludes,
+ AC_TRY_COMPILE(
+ [/*
+ * This generates a "duplicate case value" when fixincludes
+ * has not be run.
+ */
+# include <sys/types.h>
+# include <sys/time.h>
+# include <sys/ioctl.h>
+# ifdef HAVE_SYS_IOCCOM_H
+# include <sys/ioccom.h>
+# endif],
+ [switch (0) {
+ case _IO('A', 1):;
+ case _IO('B', 1):;
+ }],
+ ac_cv_lbl_gcc_fixincludes=yes,
+ ac_cv_lbl_gcc_fixincludes=no))
+ AC_MSG_RESULT($ac_cv_lbl_gcc_fixincludes)
+ if test $ac_cv_lbl_gcc_fixincludes = no ; then
+ # Don't cache failure
+ unset ac_cv_lbl_gcc_fixincludes
+ AC_MSG_ERROR(see the INSTALL for more info)
+ fi
+ fi])
+
+dnl
+dnl Checks to see if union wait is used with WEXITSTATUS()
+dnl
+dnl usage:
+dnl
+dnl AC_LBL_UNION_WAIT
+dnl
+dnl results:
+dnl
+dnl DECLWAITSTATUS (defined)
+dnl
+AC_DEFUN(AC_LBL_UNION_WAIT,
+ [AC_MSG_CHECKING(if union wait is used)
+ AC_CACHE_VAL(ac_cv_lbl_union_wait,
+ AC_TRY_COMPILE([
+# include <sys/types.h>
+# include <sys/wait.h>],
+ [int status;
+ u_int i = WEXITSTATUS(status);
+ u_int j = waitpid(0, &status, 0);],
+ ac_cv_lbl_union_wait=no,
+ ac_cv_lbl_union_wait=yes))
+ AC_MSG_RESULT($ac_cv_lbl_union_wait)
+ if test $ac_cv_lbl_union_wait = yes ; then
+ AC_DEFINE(DECLWAITSTATUS,union wait,[type for wait])
+ else
+ AC_DEFINE(DECLWAITSTATUS,int,[type for wait])
+ fi])
+
+dnl
+dnl Checks to see if -R is used
+dnl
+dnl usage:
+dnl
+dnl AC_LBL_HAVE_RUN_PATH
+dnl
+dnl results:
+dnl
+dnl ac_cv_lbl_have_run_path (yes or no)
+dnl
+AC_DEFUN(AC_LBL_HAVE_RUN_PATH,
+ [AC_MSG_CHECKING(for ${CC-cc} -R)
+ AC_CACHE_VAL(ac_cv_lbl_have_run_path,
+ [echo 'main(){}' > conftest.c
+ ${CC-cc} -o conftest conftest.c -R/a1/b2/c3 >conftest.out 2>&1
+ if test ! -s conftest.out ; then
+ ac_cv_lbl_have_run_path=yes
+ else
+ ac_cv_lbl_have_run_path=no
+ fi
+ rm -f -r conftest*])
+ AC_MSG_RESULT($ac_cv_lbl_have_run_path)
+ ])
+
+dnl
+dnl Check whether a given format can be used to print 64-bit integers
+dnl
+AC_DEFUN(AC_LBL_CHECK_64BIT_FORMAT,
+ [
+ AC_MSG_CHECKING([whether %$1x can be used to format 64-bit integers])
+ AC_RUN_IFELSE(
+ [
+ AC_LANG_SOURCE(
+ [[
+# ifdef HAVE_INTTYPES_H
+ #include <inttypes.h>
+# endif
+ #include <stdio.h>
+ #include <sys/types.h>
+
+ main()
+ {
+ uint64_t t = 1;
+ char strbuf[16+1];
+ sprintf(strbuf, "%016$1x", t << 32);
+ if (strcmp(strbuf, "0000000100000000") == 0)
+ exit(0);
+ else
+ exit(1);
+ }
+ ]])
+ ],
+ [
+ AC_DEFINE(PRId64, "$1d", [define if the platform doesn't define PRId64])
+ AC_DEFINE(PRIo64, "$1o", [define if the platform doesn't define PRIo64])
+ AC_DEFINE(PRIx64, "$1x", [define if the platform doesn't define PRIu64])
+ AC_DEFINE(PRIu64, "$1u", [define if the platform doesn't define PRIx64])
+ AC_MSG_RESULT(yes)
+ ],
+ [
+ AC_MSG_RESULT(no)
+ $2
+ ])
+ ])
+
+dnl
+dnl If the file .devel exists:
+dnl Add some warning flags if the compiler supports them
+dnl If an os prototype include exists, symlink os-proto.h to it
+dnl
+dnl usage:
+dnl
+dnl AC_LBL_DEVEL(copt)
+dnl
+dnl results:
+dnl
+dnl $1 (copt appended)
+dnl HAVE_OS_PROTO_H (defined)
+dnl os-proto.h (symlinked)
+dnl
+AC_DEFUN(AC_LBL_DEVEL,
+ [rm -f os-proto.h
+ if test "${LBL_CFLAGS+set}" = set; then
+ $1="$$1 ${LBL_CFLAGS}"
+ fi
+ if test -f .devel ; then
+ #
+ # Skip all the warning option stuff on some compilers.
+ #
+ if test "$ac_lbl_cc_dont_try_gcc_dashW" != yes; then
+ AC_LBL_CHECK_COMPILER_OPT($1, -W)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wall)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wassign-enum)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wcast-qual)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wmissing-prototypes)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wmissing-variable-declarations)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wold-style-definition)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wpedantic)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wpointer-arith)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wpointer-sign)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wshadow)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wsign-compare)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wstrict-prototypes)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wunreachable-code-return)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wused-but-marked-unused)
+ AC_LBL_CHECK_COMPILER_OPT($1, -Wwrite-strings)
+ fi
+ AC_LBL_CHECK_DEPENDENCY_GENERATION_OPT()
+ #
+ # We used to set -n32 for IRIX 6 when not using GCC (presumed
+ # to mean that we're using MIPS C or MIPSpro C); it specified
+ # the "new" faster 32-bit ABI, introduced in IRIX 6.2. I'm
+ # not sure why that would be something to do *only* with a
+ # .devel file; why should the ABI for which we produce code
+ # depend on .devel?
+ #
+ os=`echo $host_os | sed -e 's/\([[0-9]][[0-9]]*\)[[^0-9]].*$/\1/'`
+ name="lbl/os-$os.h"
+ if test -f $name ; then
+ ln -s $name os-proto.h
+ AC_DEFINE(HAVE_OS_PROTO_H, 1,
+ [if there's an os_proto.h for this platform, to use additional prototypes])
+ else
+ AC_MSG_WARN(can't find $name)
+ fi
+ fi])
+
+dnl
+dnl Improved version of AC_CHECK_LIB
+dnl
+dnl Thanks to John Hawkinson (jhawk@mit.edu)
+dnl
+dnl usage:
+dnl
+dnl AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
+dnl ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
+dnl
+dnl results:
+dnl
+dnl LIBS
+dnl
+dnl XXX - "AC_LBL_LIBRARY_NET" was redone to use "AC_SEARCH_LIBS"
+dnl rather than "AC_LBL_CHECK_LIB", so this isn't used any more.
+dnl We keep it around for reference purposes in case it's ever
+dnl useful in the future.
+dnl
+
+define(AC_LBL_CHECK_LIB,
+[AC_MSG_CHECKING([for $2 in -l$1])
+dnl Use a cache variable name containing the library, function
+dnl name, and extra libraries to link with, because the test really is
+dnl for library $1 defining function $2, when linked with potinal
+dnl library $5, not just for library $1. Separate tests with the same
+dnl $1 and different $2's or $5's may have different results.
+ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
+AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
+[ac_save_LIBS="$LIBS"
+LIBS="-l$1 $5 $LIBS"
+AC_TRY_LINK(dnl
+ifelse([$2], [main], , dnl Avoid conflicting decl of main.
+[/* Override any gcc2 internal prototype to avoid an error. */
+]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
+extern "C"
+#endif
+])dnl
+[/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $2();
+]),
+ [$2()],
+ eval "ac_cv_lbl_lib_$ac_lib_var=yes",
+ eval "ac_cv_lbl_lib_$ac_lib_var=no")
+LIBS="$ac_save_LIBS"
+])dnl
+if eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ ifelse([$3], ,
+[changequote(, )dnl
+ ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+changequote([, ])dnl
+ AC_DEFINE_UNQUOTED($ac_tr_lib)
+ LIBS="-l$1 $LIBS"
+], [$3])
+else
+ AC_MSG_RESULT(no)
+ifelse([$4], , , [$4
+])dnl
+fi
+])
+
+dnl
+dnl AC_LBL_LIBRARY_NET
+dnl
+dnl This test is for network applications that need socket() and
+dnl gethostbyname() -ish functions. Under Solaris, those applications
+dnl need to link with "-lsocket -lnsl". Under IRIX, they need to link
+dnl with "-lnsl" but should *not* link with "-lsocket" because
+dnl libsocket.a breaks a number of things (for instance:
+dnl gethostbyname() under IRIX 5.2, and snoop sockets under most
+dnl versions of IRIX).
+dnl
+dnl Unfortunately, many application developers are not aware of this,
+dnl and mistakenly write tests that cause -lsocket to be used under
+dnl IRIX. It is also easy to write tests that cause -lnsl to be used
+dnl under operating systems where neither are necessary (or useful),
+dnl such as SunOS 4.1.4, which uses -lnsl for TLI.
+dnl
+dnl This test exists so that every application developer does not test
+dnl this in a different, and subtly broken fashion.
+
+dnl It has been argued that this test should be broken up into two
+dnl separate tests, one for the resolver libraries, and one for the
+dnl libraries necessary for using Sockets API. Unfortunately, the two
+dnl are carefully intertwined and allowing the autoconf user to use
+dnl them independently potentially results in unfortunate ordering
+dnl dependencies -- as such, such component macros would have to
+dnl carefully use indirection and be aware if the other components were
+dnl executed. Since other autoconf macros do not go to this trouble,
+dnl and almost no applications use sockets without the resolver, this
+dnl complexity has not been implemented.
+dnl
+dnl The check for libresolv is in case you are attempting to link
+dnl statically and happen to have a libresolv.a lying around (and no
+dnl libnsl.a).
+dnl
+AC_DEFUN(AC_LBL_LIBRARY_NET, [
+ # Most operating systems have gethostbyname() in the default searched
+ # libraries (i.e. libc):
+ # Some OSes (eg. Solaris) place it in libnsl
+ # Some strange OSes (SINIX) have it in libsocket:
+ AC_SEARCH_LIBS(gethostbyname, nsl socket resolv)
+ # Unfortunately libsocket sometimes depends on libnsl and
+ # AC_SEARCH_LIBS isn't up to the task of handling dependencies like this.
+ if test "$ac_cv_search_gethostbyname" = "no"
+ then
+ AC_CHECK_LIB(socket, gethostbyname,
+ LIBS="-lsocket -lnsl $LIBS", , -lnsl)
+ fi
+ AC_SEARCH_LIBS(socket, socket, ,
+ AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl))
+ # DLPI needs putmsg under HPUX so test for -lstr while we're at it
+ AC_SEARCH_LIBS(putmsg, str)
+ ])
+
+dnl Copyright (c) 1999 WIDE Project. All rights reserved.
+dnl
+dnl Redistribution and use in source and binary forms, with or without
+dnl modification, are permitted provided that the following conditions
+dnl are met:
+dnl 1. Redistributions of source code must retain the above copyright
+dnl notice, this list of conditions and the following disclaimer.
+dnl 2. Redistributions in binary form must reproduce the above copyright
+dnl notice, this list of conditions and the following disclaimer in the
+dnl documentation and/or other materials provided with the distribution.
+dnl 3. Neither the name of the project nor the names of its contributors
+dnl may be used to endorse or promote products derived from this software
+dnl without specific prior written permission.
+dnl
+dnl THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+dnl ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+dnl IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+dnl ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+dnl FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+dnl DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+dnl OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+dnl HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+dnl LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+dnl OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+dnl SUCH DAMAGE.
+
+AC_DEFUN(AC_LBL_SSLEAY,
+ [
+ #
+ # Find the last component of $libdir; it's not necessarily
+ # "lib" - it might be "lib64" on, for example, x86-64
+ # Linux systems.
+ #
+ # We assume the directory in which we're looking for
+ # libcrypto has a subdirectory with that as its name.
+ #
+ tmplib=`echo "$libdir" | sed 's,.*/,,'`
+
+ #
+ # XXX - is there a better way to check if a given library is
+ # in a given directory than checking each of the possible
+ # shared library suffixes?
+ #
+ # Are there any other suffixes we need to look for? Do we
+ # have to worry about ".so.{version}"?
+ #
+ # Or should we just look for "libcrypto.*"?
+ #
+ if test -d "$1/$tmplib" -a \( -f "$1/$tmplib/libcrypto.a" -o \
+ -f "$1/$tmplib/libcrypto.so" -o \
+ -f "$1/$tmplib/libcrypto.sl" -o \
+ -f "$1/$tmplib/libcrypto.dylib" \); then
+ ac_cv_ssleay_path="$1"
+ fi
+
+ #
+ # Make sure we have the headers as well.
+ #
+ if test -d "$1/include/openssl" -a -f "$1/include/openssl/des.h"; then
+ incdir="-I$1/include"
+ fi
+])
diff --git a/addrtoname.c b/addrtoname.c
new file mode 100644
index 0000000..914665c
--- /dev/null
+++ b/addrtoname.c
@@ -0,0 +1,1330 @@
+/*
+ * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Internet, ethernet, port, and protocol string to address
+ * and address to string conversion routines
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_CASPER
+#include <libcasper.h>
+#include <casper/cap_dns.h>
+#endif /* HAVE_CASPER */
+
+#include "netdissect-stdinc.h"
+
+#ifdef USE_ETHER_NTOHOST
+ #if defined(NET_ETHERNET_H_DECLARES_ETHER_NTOHOST)
+ /*
+ * OK, just include <net/ethernet.h>.
+ */
+ #include <net/ethernet.h>
+ #elif defined(NETINET_ETHER_H_DECLARES_ETHER_NTOHOST)
+ /*
+ * OK, just include <netinet/ether.h>
+ */
+ #include <netinet/ether.h>
+ #elif defined(SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST)
+ /*
+ * OK, just include <sys/ethernet.h>
+ */
+ #include <sys/ethernet.h>
+ #elif defined(ARPA_INET_H_DECLARES_ETHER_NTOHOST)
+ /*
+ * OK, just include <arpa/inet.h>
+ */
+ #include <arpa/inet.h>
+ #elif defined(NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST)
+ /*
+ * OK, include <netinet/if_ether.h>, after all the other stuff we
+ * need to include or define for its benefit.
+ */
+ #define NEED_NETINET_IF_ETHER_H
+ #else
+ /*
+ * We'll have to declare it ourselves.
+ * If <netinet/if_ether.h> defines struct ether_addr, include
+ * it. Otherwise, define it ourselves.
+ */
+ #ifdef HAVE_STRUCT_ETHER_ADDR
+ #define NEED_NETINET_IF_ETHER_H
+ #else /* HAVE_STRUCT_ETHER_ADDR */
+ struct ether_addr {
+ /* Beware FreeBSD calls this "octet". */
+ unsigned char ether_addr_octet[MAC_ADDR_LEN];
+ };
+ #endif /* HAVE_STRUCT_ETHER_ADDR */
+ #endif /* what declares ether_ntohost() */
+
+ #ifdef NEED_NETINET_IF_ETHER_H
+ /*
+ * Include diag-control.h before <net/if.h>, which too defines a macro
+ * named ND_UNREACHABLE.
+ */
+ #include "diag-control.h"
+ #include <net/if.h> /* Needed on some platforms */
+ #include <netinet/in.h> /* Needed on some platforms */
+ #include <netinet/if_ether.h>
+ #endif /* NEED_NETINET_IF_ETHER_H */
+
+ #ifndef HAVE_DECL_ETHER_NTOHOST
+ /*
+ * No header declares it, so declare it ourselves.
+ */
+ extern int ether_ntohost(char *, const struct ether_addr *);
+ #endif /* !defined(HAVE_DECL_ETHER_NTOHOST) */
+#endif /* USE_ETHER_NTOHOST */
+
+#include <pcap.h>
+#include <pcap-namedb.h>
+#ifndef HAVE_GETSERVENT
+#include <getservent.h>
+#endif
+#include <signal.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "addrtostr.h"
+#include "ethertype.h"
+#include "llc.h"
+#include "extract.h"
+#include "oui.h"
+
+/*
+ * hash tables for whatever-to-name translations
+ *
+ * ndo_error() called on strdup(3) failure with S_ERR_ND_MEM_ALLOC status
+ */
+
+#define HASHNAMESIZE 4096
+
+struct hnamemem {
+ uint32_t addr;
+ const char *name;
+ struct hnamemem *nxt;
+};
+
+static struct hnamemem hnametable[HASHNAMESIZE];
+static struct hnamemem tporttable[HASHNAMESIZE];
+static struct hnamemem uporttable[HASHNAMESIZE];
+static struct hnamemem eprototable[HASHNAMESIZE];
+static struct hnamemem dnaddrtable[HASHNAMESIZE];
+static struct hnamemem ipxsaptable[HASHNAMESIZE];
+
+#ifdef _WIN32
+/*
+ * fake gethostbyaddr for Win2k/XP
+ * gethostbyaddr() returns incorrect value when AF_INET6 is passed
+ * to 3rd argument.
+ *
+ * h_name in struct hostent is only valid.
+ */
+static struct hostent *
+win32_gethostbyaddr(const char *addr, int len, int type)
+{
+ static struct hostent host;
+ static char hostbuf[NI_MAXHOST];
+ char hname[NI_MAXHOST];
+ struct sockaddr_in6 addr6;
+
+ host.h_name = hostbuf;
+ switch (type) {
+ case AF_INET:
+ return gethostbyaddr(addr, len, type);
+ break;
+ case AF_INET6:
+ memset(&addr6, 0, sizeof(addr6));
+ addr6.sin6_family = AF_INET6;
+ memcpy(&addr6.sin6_addr, addr, len);
+ if (getnameinfo((struct sockaddr *)&addr6, sizeof(addr6),
+ hname, sizeof(hname), NULL, 0, 0)) {
+ return NULL;
+ } else {
+ strlcpy(host.h_name, hname, NI_MAXHOST);
+ return &host;
+ }
+ break;
+ default:
+ return NULL;
+ }
+}
+#define gethostbyaddr win32_gethostbyaddr
+#endif /* _WIN32 */
+
+struct h6namemem {
+ nd_ipv6 addr;
+ char *name;
+ struct h6namemem *nxt;
+};
+
+static struct h6namemem h6nametable[HASHNAMESIZE];
+
+struct enamemem {
+ u_short e_addr0;
+ u_short e_addr1;
+ u_short e_addr2;
+ const char *e_name;
+ u_char *e_nsap; /* used only for nsaptable[] */
+ struct enamemem *e_nxt;
+};
+
+static struct enamemem enametable[HASHNAMESIZE];
+static struct enamemem nsaptable[HASHNAMESIZE];
+
+struct bsnamemem {
+ u_short bs_addr0;
+ u_short bs_addr1;
+ u_short bs_addr2;
+ const char *bs_name;
+ u_char *bs_bytes;
+ unsigned int bs_nbytes;
+ struct bsnamemem *bs_nxt;
+};
+
+static struct bsnamemem bytestringtable[HASHNAMESIZE];
+
+struct protoidmem {
+ uint32_t p_oui;
+ u_short p_proto;
+ const char *p_name;
+ struct protoidmem *p_nxt;
+};
+
+static struct protoidmem protoidtable[HASHNAMESIZE];
+
+/*
+ * A faster replacement for inet_ntoa().
+ */
+const char *
+intoa(uint32_t addr)
+{
+ char *cp;
+ u_int byte;
+ int n;
+ static char buf[sizeof(".xxx.xxx.xxx.xxx")];
+
+ addr = ntohl(addr);
+ cp = buf + sizeof(buf);
+ *--cp = '\0';
+
+ n = 4;
+ do {
+ byte = addr & 0xff;
+ *--cp = (char)(byte % 10) + '0';
+ byte /= 10;
+ if (byte > 0) {
+ *--cp = (char)(byte % 10) + '0';
+ byte /= 10;
+ if (byte > 0)
+ *--cp = (char)byte + '0';
+ }
+ *--cp = '.';
+ addr >>= 8;
+ } while (--n > 0);
+
+ return cp + 1;
+}
+
+static uint32_t f_netmask;
+static uint32_t f_localnet;
+#ifdef HAVE_CASPER
+cap_channel_t *capdns;
+#endif
+
+/*
+ * Return a name for the IP address pointed to by ap. This address
+ * is assumed to be in network byte order.
+ *
+ * NOTE: ap is *NOT* necessarily part of the packet data, so you
+ * *CANNOT* use the ND_TCHECK_* or ND_TTEST_* macros on it. Furthermore,
+ * even in cases where it *is* part of the packet data, the caller
+ * would still have to check for a null return value, even if it's
+ * just printing the return value with "%s" - not all versions of
+ * printf print "(null)" with "%s" and a null pointer, some of them
+ * don't check for a null pointer and crash in that case.
+ *
+ * The callers of this routine should, before handing this routine
+ * a pointer to packet data, be sure that the data is present in
+ * the packet buffer. They should probably do those checks anyway,
+ * as other data at that layer might not be IP addresses, and it
+ * also needs to check whether they're present in the packet buffer.
+ */
+const char *
+ipaddr_string(netdissect_options *ndo, const u_char *ap)
+{
+ struct hostent *hp;
+ uint32_t addr;
+ struct hnamemem *p;
+
+ memcpy(&addr, ap, sizeof(addr));
+ p = &hnametable[addr & (HASHNAMESIZE-1)];
+ for (; p->nxt; p = p->nxt) {
+ if (p->addr == addr)
+ return (p->name);
+ }
+ p->addr = addr;
+ p->nxt = newhnamemem(ndo);
+
+ /*
+ * Print names unless:
+ * (1) -n was given.
+ * (2) Address is foreign and -f was given. (If -f was not
+ * given, f_netmask and f_localnet are 0 and the test
+ * evaluates to true)
+ */
+ if (!ndo->ndo_nflag &&
+ (addr & f_netmask) == f_localnet) {
+#ifdef HAVE_CASPER
+ if (capdns != NULL) {
+ hp = cap_gethostbyaddr(capdns, (char *)&addr, 4,
+ AF_INET);
+ } else
+#endif
+ hp = gethostbyaddr((char *)&addr, 4, AF_INET);
+ if (hp) {
+ char *dotp;
+
+ p->name = strdup(hp->h_name);
+ if (p->name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(hp->h_name)", __func__);
+ if (ndo->ndo_Nflag) {
+ /* Remove domain qualifications */
+ dotp = strchr(p->name, '.');
+ if (dotp)
+ *dotp = '\0';
+ }
+ return (p->name);
+ }
+ }
+ p->name = strdup(intoa(addr));
+ if (p->name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(intoa(addr))", __func__);
+ return (p->name);
+}
+
+/*
+ * Return a name for the IP6 address pointed to by ap. This address
+ * is assumed to be in network byte order.
+ */
+const char *
+ip6addr_string(netdissect_options *ndo, const u_char *ap)
+{
+ struct hostent *hp;
+ union {
+ nd_ipv6 addr;
+ struct for_hash_addr {
+ char fill[14];
+ uint16_t d;
+ } addra;
+ } addr;
+ struct h6namemem *p;
+ const char *cp;
+ char ntop_buf[INET6_ADDRSTRLEN];
+
+ memcpy(&addr, ap, sizeof(addr));
+ p = &h6nametable[addr.addra.d & (HASHNAMESIZE-1)];
+ for (; p->nxt; p = p->nxt) {
+ if (memcmp(&p->addr, &addr, sizeof(addr)) == 0)
+ return (p->name);
+ }
+ memcpy(p->addr, addr.addr, sizeof(nd_ipv6));
+ p->nxt = newh6namemem(ndo);
+
+ /*
+ * Do not print names if -n was given.
+ */
+ if (!ndo->ndo_nflag) {
+#ifdef HAVE_CASPER
+ if (capdns != NULL) {
+ hp = cap_gethostbyaddr(capdns, (char *)&addr,
+ sizeof(addr), AF_INET6);
+ } else
+#endif
+ hp = gethostbyaddr((char *)&addr, sizeof(addr),
+ AF_INET6);
+ if (hp) {
+ char *dotp;
+
+ p->name = strdup(hp->h_name);
+ if (p->name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(hp->h_name)", __func__);
+ if (ndo->ndo_Nflag) {
+ /* Remove domain qualifications */
+ dotp = strchr(p->name, '.');
+ if (dotp)
+ *dotp = '\0';
+ }
+ return (p->name);
+ }
+ }
+ cp = addrtostr6(ap, ntop_buf, sizeof(ntop_buf));
+ p->name = strdup(cp);
+ if (p->name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(cp)", __func__);
+ return (p->name);
+}
+
+static const char hex[16] = {
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
+};
+
+/*
+ * Convert an octet to two hex digits.
+ *
+ * Coverity appears either:
+ *
+ * not to believe the C standard when it asserts that a uint8_t is
+ * exactly 8 bits in size;
+ *
+ * not to believe that an unsigned type of exactly 8 bits has a value
+ * in the range of 0 to 255;
+ *
+ * not to believe that, for a range of unsigned values, if you shift
+ * one of those values right by 4 bits, the maximum result value is
+ * the maximum value shifted right by 4 bits, with no stray 1's shifted
+ * in;
+ *
+ * not to believe that 255 >> 4 is 15;
+ *
+ * so it gets upset that we're taking a "tainted" unsigned value, shifting
+ * it right 4 bits, and using it as an index into a 16-element array.
+ *
+ * So we do a stupid pointless masking of the result of the shift with
+ * 0xf, to hammer the point home to Coverity.
+ */
+static inline char *
+octet_to_hex(char *cp, uint8_t octet)
+{
+ *cp++ = hex[(octet >> 4) & 0xf];
+ *cp++ = hex[(octet >> 0) & 0xf];
+ return (cp);
+}
+
+/* Find the hash node that corresponds the ether address 'ep' */
+
+static struct enamemem *
+lookup_emem(netdissect_options *ndo, const u_char *ep)
+{
+ u_int i, j, k;
+ struct enamemem *tp;
+
+ k = (ep[0] << 8) | ep[1];
+ j = (ep[2] << 8) | ep[3];
+ i = (ep[4] << 8) | ep[5];
+
+ tp = &enametable[(i ^ j) & (HASHNAMESIZE-1)];
+ while (tp->e_nxt)
+ if (tp->e_addr0 == i &&
+ tp->e_addr1 == j &&
+ tp->e_addr2 == k)
+ return tp;
+ else
+ tp = tp->e_nxt;
+ tp->e_addr0 = (u_short)i;
+ tp->e_addr1 = (u_short)j;
+ tp->e_addr2 = (u_short)k;
+ tp->e_nxt = (struct enamemem *)calloc(1, sizeof(*tp));
+ if (tp->e_nxt == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC, "%s: calloc", __func__);
+
+ return tp;
+}
+
+/*
+ * Find the hash node that corresponds to the bytestring 'bs'
+ * with length 'nlen'
+ */
+
+static struct bsnamemem *
+lookup_bytestring(netdissect_options *ndo, const u_char *bs,
+ const unsigned int nlen)
+{
+ struct bsnamemem *tp;
+ u_int i, j, k;
+
+ if (nlen >= 6) {
+ k = (bs[0] << 8) | bs[1];
+ j = (bs[2] << 8) | bs[3];
+ i = (bs[4] << 8) | bs[5];
+ } else if (nlen >= 4) {
+ k = (bs[0] << 8) | bs[1];
+ j = (bs[2] << 8) | bs[3];
+ i = 0;
+ } else
+ i = j = k = 0;
+
+ tp = &bytestringtable[(i ^ j) & (HASHNAMESIZE-1)];
+ while (tp->bs_nxt)
+ if (nlen == tp->bs_nbytes &&
+ tp->bs_addr0 == i &&
+ tp->bs_addr1 == j &&
+ tp->bs_addr2 == k &&
+ memcmp((const char *)bs, (const char *)(tp->bs_bytes), nlen) == 0)
+ return tp;
+ else
+ tp = tp->bs_nxt;
+
+ tp->bs_addr0 = (u_short)i;
+ tp->bs_addr1 = (u_short)j;
+ tp->bs_addr2 = (u_short)k;
+
+ tp->bs_bytes = (u_char *) calloc(1, nlen);
+ if (tp->bs_bytes == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: calloc", __func__);
+
+ memcpy(tp->bs_bytes, bs, nlen);
+ tp->bs_nbytes = nlen;
+ tp->bs_nxt = (struct bsnamemem *)calloc(1, sizeof(*tp));
+ if (tp->bs_nxt == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: calloc", __func__);
+
+ return tp;
+}
+
+/* Find the hash node that corresponds the NSAP 'nsap' */
+
+static struct enamemem *
+lookup_nsap(netdissect_options *ndo, const u_char *nsap,
+ u_int nsap_length)
+{
+ u_int i, j, k;
+ struct enamemem *tp;
+ const u_char *ensap;
+
+ if (nsap_length > 6) {
+ ensap = nsap + nsap_length - 6;
+ k = (ensap[0] << 8) | ensap[1];
+ j = (ensap[2] << 8) | ensap[3];
+ i = (ensap[4] << 8) | ensap[5];
+ }
+ else
+ i = j = k = 0;
+
+ tp = &nsaptable[(i ^ j) & (HASHNAMESIZE-1)];
+ while (tp->e_nxt)
+ if (nsap_length == tp->e_nsap[0] &&
+ tp->e_addr0 == i &&
+ tp->e_addr1 == j &&
+ tp->e_addr2 == k &&
+ memcmp((const char *)nsap,
+ (char *)&(tp->e_nsap[1]), nsap_length) == 0)
+ return tp;
+ else
+ tp = tp->e_nxt;
+ tp->e_addr0 = (u_short)i;
+ tp->e_addr1 = (u_short)j;
+ tp->e_addr2 = (u_short)k;
+ tp->e_nsap = (u_char *)malloc(nsap_length + 1);
+ if (tp->e_nsap == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC, "%s: malloc", __func__);
+ tp->e_nsap[0] = (u_char)nsap_length; /* guaranteed < ISONSAP_MAX_LENGTH */
+ memcpy((char *)&tp->e_nsap[1], (const char *)nsap, nsap_length);
+ tp->e_nxt = (struct enamemem *)calloc(1, sizeof(*tp));
+ if (tp->e_nxt == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC, "%s: calloc", __func__);
+
+ return tp;
+}
+
+/* Find the hash node that corresponds the protoid 'pi'. */
+
+static struct protoidmem *
+lookup_protoid(netdissect_options *ndo, const u_char *pi)
+{
+ u_int i, j;
+ struct protoidmem *tp;
+
+ /* 5 octets won't be aligned */
+ i = (((pi[0] << 8) + pi[1]) << 8) + pi[2];
+ j = (pi[3] << 8) + pi[4];
+ /* XXX should be endian-insensitive, but do big-endian testing XXX */
+
+ tp = &protoidtable[(i ^ j) & (HASHNAMESIZE-1)];
+ while (tp->p_nxt)
+ if (tp->p_oui == i && tp->p_proto == j)
+ return tp;
+ else
+ tp = tp->p_nxt;
+ tp->p_oui = i;
+ tp->p_proto = (u_short)j;
+ tp->p_nxt = (struct protoidmem *)calloc(1, sizeof(*tp));
+ if (tp->p_nxt == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC, "%s: calloc", __func__);
+
+ return tp;
+}
+
+const char *
+etheraddr_string(netdissect_options *ndo, const uint8_t *ep)
+{
+ int i;
+ char *cp;
+ struct enamemem *tp;
+ int oui;
+ char buf[BUFSIZE];
+
+ tp = lookup_emem(ndo, ep);
+ if (tp->e_name)
+ return (tp->e_name);
+#ifdef USE_ETHER_NTOHOST
+ if (!ndo->ndo_nflag) {
+ char buf2[BUFSIZE];
+ /*
+ * This is a non-const copy of ep for ether_ntohost(), which
+ * has its second argument non-const in OpenBSD. Also saves a
+ * type cast.
+ */
+ struct ether_addr ea;
+
+ memcpy (&ea, ep, MAC_ADDR_LEN);
+ if (ether_ntohost(buf2, &ea) == 0) {
+ tp->e_name = strdup(buf2);
+ if (tp->e_name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(buf2)", __func__);
+ return (tp->e_name);
+ }
+ }
+#endif
+ cp = buf;
+ oui = EXTRACT_BE_U_3(ep);
+ cp = octet_to_hex(cp, *ep++);
+ for (i = 5; --i >= 0;) {
+ *cp++ = ':';
+ cp = octet_to_hex(cp, *ep++);
+ }
+
+ if (!ndo->ndo_nflag) {
+ snprintf(cp, BUFSIZE - (2 + 5*3), " (oui %s)",
+ tok2str(oui_values, "Unknown", oui));
+ } else
+ *cp = '\0';
+ tp->e_name = strdup(buf);
+ if (tp->e_name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(buf)", __func__);
+ return (tp->e_name);
+}
+
+const char *
+le64addr_string(netdissect_options *ndo, const uint8_t *ep)
+{
+ const unsigned int len = 8;
+ u_int i;
+ char *cp;
+ struct bsnamemem *tp;
+ char buf[BUFSIZE];
+
+ tp = lookup_bytestring(ndo, ep, len);
+ if (tp->bs_name)
+ return (tp->bs_name);
+
+ cp = buf;
+ for (i = len; i > 0 ; --i) {
+ cp = octet_to_hex(cp, *(ep + i - 1));
+ *cp++ = ':';
+ }
+ cp --;
+
+ *cp = '\0';
+
+ tp->bs_name = strdup(buf);
+ if (tp->bs_name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(buf)", __func__);
+
+ return (tp->bs_name);
+}
+
+const char *
+linkaddr_string(netdissect_options *ndo, const uint8_t *ep,
+ const unsigned int type, const unsigned int len)
+{
+ u_int i;
+ char *cp;
+ struct bsnamemem *tp;
+
+ if (len == 0)
+ return ("<empty>");
+
+ if (type == LINKADDR_ETHER && len == MAC_ADDR_LEN)
+ return (etheraddr_string(ndo, ep));
+
+ if (type == LINKADDR_FRELAY)
+ return (q922_string(ndo, ep, len));
+
+ tp = lookup_bytestring(ndo, ep, len);
+ if (tp->bs_name)
+ return (tp->bs_name);
+
+ tp->bs_name = cp = (char *)malloc(len*3);
+ if (tp->bs_name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: malloc", __func__);
+ cp = octet_to_hex(cp, *ep++);
+ for (i = len-1; i > 0 ; --i) {
+ *cp++ = ':';
+ cp = octet_to_hex(cp, *ep++);
+ }
+ *cp = '\0';
+ return (tp->bs_name);
+}
+
+#define ISONSAP_MAX_LENGTH 20
+const char *
+isonsap_string(netdissect_options *ndo, const uint8_t *nsap,
+ u_int nsap_length)
+{
+ u_int nsap_idx;
+ char *cp;
+ struct enamemem *tp;
+
+ if (nsap_length < 1 || nsap_length > ISONSAP_MAX_LENGTH)
+ return ("isonsap_string: illegal length");
+
+ tp = lookup_nsap(ndo, nsap, nsap_length);
+ if (tp->e_name)
+ return tp->e_name;
+
+ tp->e_name = cp = (char *)malloc(sizeof("xx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xx"));
+ if (cp == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: malloc", __func__);
+
+ for (nsap_idx = 0; nsap_idx < nsap_length; nsap_idx++) {
+ cp = octet_to_hex(cp, *nsap++);
+ if (((nsap_idx & 1) == 0) &&
+ (nsap_idx + 1 < nsap_length)) {
+ *cp++ = '.';
+ }
+ }
+ *cp = '\0';
+ return (tp->e_name);
+}
+
+const char *
+tcpport_string(netdissect_options *ndo, u_short port)
+{
+ struct hnamemem *tp;
+ uint32_t i = port;
+ char buf[sizeof("00000")];
+
+ for (tp = &tporttable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt)
+ if (tp->addr == i)
+ return (tp->name);
+
+ tp->addr = i;
+ tp->nxt = newhnamemem(ndo);
+
+ (void)snprintf(buf, sizeof(buf), "%u", i);
+ tp->name = strdup(buf);
+ if (tp->name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(buf)", __func__);
+ return (tp->name);
+}
+
+const char *
+udpport_string(netdissect_options *ndo, u_short port)
+{
+ struct hnamemem *tp;
+ uint32_t i = port;
+ char buf[sizeof("00000")];
+
+ for (tp = &uporttable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt)
+ if (tp->addr == i)
+ return (tp->name);
+
+ tp->addr = i;
+ tp->nxt = newhnamemem(ndo);
+
+ (void)snprintf(buf, sizeof(buf), "%u", i);
+ tp->name = strdup(buf);
+ if (tp->name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(buf)", __func__);
+ return (tp->name);
+}
+
+const char *
+ipxsap_string(netdissect_options *ndo, u_short port)
+{
+ char *cp;
+ struct hnamemem *tp;
+ uint32_t i = port;
+ char buf[sizeof("0000")];
+
+ for (tp = &ipxsaptable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt)
+ if (tp->addr == i)
+ return (tp->name);
+
+ tp->addr = i;
+ tp->nxt = newhnamemem(ndo);
+
+ cp = buf;
+ port = ntohs(port);
+ *cp++ = hex[port >> 12 & 0xf];
+ *cp++ = hex[port >> 8 & 0xf];
+ *cp++ = hex[port >> 4 & 0xf];
+ *cp++ = hex[port & 0xf];
+ *cp++ = '\0';
+ tp->name = strdup(buf);
+ if (tp->name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(buf)", __func__);
+ return (tp->name);
+}
+
+static void
+init_servarray(netdissect_options *ndo)
+{
+ struct servent *sv;
+ struct hnamemem *table;
+ int i;
+ char buf[sizeof("0000000000")];
+
+ while ((sv = getservent()) != NULL) {
+ int port = ntohs(sv->s_port);
+ i = port & (HASHNAMESIZE-1);
+ if (strcmp(sv->s_proto, "tcp") == 0)
+ table = &tporttable[i];
+ else if (strcmp(sv->s_proto, "udp") == 0)
+ table = &uporttable[i];
+ else
+ continue;
+
+ while (table->name)
+ table = table->nxt;
+ if (ndo->ndo_nflag) {
+ (void)snprintf(buf, sizeof(buf), "%d", port);
+ table->name = strdup(buf);
+ } else
+ table->name = strdup(sv->s_name);
+ if (table->name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup", __func__);
+
+ table->addr = port;
+ table->nxt = newhnamemem(ndo);
+ }
+ endservent();
+}
+
+static const struct eproto {
+ const char *s;
+ u_short p;
+} eproto_db[] = {
+ { "aarp", ETHERTYPE_AARP },
+ { "arp", ETHERTYPE_ARP },
+ { "atalk", ETHERTYPE_ATALK },
+ { "decnet", ETHERTYPE_DN },
+ { "ip", ETHERTYPE_IP },
+ { "ip6", ETHERTYPE_IPV6 },
+ { "lat", ETHERTYPE_LAT },
+ { "loopback", ETHERTYPE_LOOPBACK },
+ { "mopdl", ETHERTYPE_MOPDL },
+ { "moprc", ETHERTYPE_MOPRC },
+ { "rarp", ETHERTYPE_REVARP },
+ { "sca", ETHERTYPE_SCA },
+ { (char *)0, 0 }
+};
+
+static void
+init_eprotoarray(netdissect_options *ndo)
+{
+ int i;
+ struct hnamemem *table;
+
+ for (i = 0; eproto_db[i].s; i++) {
+ int j = htons(eproto_db[i].p) & (HASHNAMESIZE-1);
+ table = &eprototable[j];
+ while (table->name)
+ table = table->nxt;
+ table->name = eproto_db[i].s;
+ table->addr = htons(eproto_db[i].p);
+ table->nxt = newhnamemem(ndo);
+ }
+}
+
+static const struct protoidlist {
+ const u_char protoid[5];
+ const char *name;
+} protoidlist[] = {
+ {{ 0x00, 0x00, 0x0c, 0x01, 0x07 }, "CiscoMLS" },
+ {{ 0x00, 0x00, 0x0c, 0x20, 0x00 }, "CiscoCDP" },
+ {{ 0x00, 0x00, 0x0c, 0x20, 0x01 }, "CiscoCGMP" },
+ {{ 0x00, 0x00, 0x0c, 0x20, 0x03 }, "CiscoVTP" },
+ {{ 0x00, 0xe0, 0x2b, 0x00, 0xbb }, "ExtremeEDP" },
+ {{ 0x00, 0x00, 0x00, 0x00, 0x00 }, NULL }
+};
+
+/*
+ * SNAP proto IDs with org code 0:0:0 are actually encapsulated Ethernet
+ * types.
+ */
+static void
+init_protoidarray(netdissect_options *ndo)
+{
+ int i;
+ struct protoidmem *tp;
+ const struct protoidlist *pl;
+ u_char protoid[5];
+
+ protoid[0] = 0;
+ protoid[1] = 0;
+ protoid[2] = 0;
+ for (i = 0; eproto_db[i].s; i++) {
+ u_short etype = htons(eproto_db[i].p);
+
+ memcpy((char *)&protoid[3], (char *)&etype, 2);
+ tp = lookup_protoid(ndo, protoid);
+ tp->p_name = strdup(eproto_db[i].s);
+ if (tp->p_name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(eproto_db[i].s)", __func__);
+ }
+ /* Hardwire some SNAP proto ID names */
+ for (pl = protoidlist; pl->name != NULL; ++pl) {
+ tp = lookup_protoid(ndo, pl->protoid);
+ /* Don't override existing name */
+ if (tp->p_name != NULL)
+ continue;
+
+ tp->p_name = pl->name;
+ }
+}
+
+static const struct etherlist {
+ const nd_mac_addr addr;
+ const char *name;
+} etherlist[] = {
+ {{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, "Broadcast" },
+ {{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, NULL }
+};
+
+/*
+ * Initialize the ethers hash table. We take two different approaches
+ * depending on whether or not the system provides the ethers name
+ * service. If it does, we just wire in a few names at startup,
+ * and etheraddr_string() fills in the table on demand. If it doesn't,
+ * then we suck in the entire /etc/ethers file at startup. The idea
+ * is that parsing the local file will be fast, but spinning through
+ * all the ethers entries via NIS & next_etherent might be very slow.
+ *
+ * XXX pcap_next_etherent doesn't belong in the pcap interface, but
+ * since the pcap module already does name-to-address translation,
+ * it's already does most of the work for the ethernet address-to-name
+ * translation, so we just pcap_next_etherent as a convenience.
+ */
+static void
+init_etherarray(netdissect_options *ndo)
+{
+ const struct etherlist *el;
+ struct enamemem *tp;
+#ifdef USE_ETHER_NTOHOST
+ char name[256];
+#else
+ struct pcap_etherent *ep;
+ FILE *fp;
+
+ /* Suck in entire ethers file */
+ fp = fopen(PCAP_ETHERS_FILE, "r");
+ if (fp != NULL) {
+ while ((ep = pcap_next_etherent(fp)) != NULL) {
+ tp = lookup_emem(ndo, ep->addr);
+ tp->e_name = strdup(ep->name);
+ if (tp->e_name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(ep->addr)", __func__);
+ }
+ (void)fclose(fp);
+ }
+#endif
+
+ /* Hardwire some ethernet names */
+ for (el = etherlist; el->name != NULL; ++el) {
+ tp = lookup_emem(ndo, el->addr);
+ /* Don't override existing name */
+ if (tp->e_name != NULL)
+ continue;
+
+#ifdef USE_ETHER_NTOHOST
+ /*
+ * Use YP/NIS version of name if available.
+ */
+ /* Same workaround as in etheraddr_string(). */
+ struct ether_addr ea;
+ memcpy (&ea, el->addr, MAC_ADDR_LEN);
+ if (ether_ntohost(name, &ea) == 0) {
+ tp->e_name = strdup(name);
+ if (tp->e_name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(name)", __func__);
+ continue;
+ }
+#endif
+ tp->e_name = el->name;
+ }
+}
+
+static const struct ipxsap_ent {
+ uint16_t v;
+ const char *s;
+} ipxsap_db[] = {
+ { 0x0000, "Unknown" },
+ { 0x0001, "User" },
+ { 0x0002, "User Group" },
+ { 0x0003, "PrintQueue" },
+ { 0x0004, "FileServer" },
+ { 0x0005, "JobServer" },
+ { 0x0006, "Gateway" },
+ { 0x0007, "PrintServer" },
+ { 0x0008, "ArchiveQueue" },
+ { 0x0009, "ArchiveServer" },
+ { 0x000a, "JobQueue" },
+ { 0x000b, "Administration" },
+ { 0x000F, "Novell TI-RPC" },
+ { 0x0017, "Diagnostics" },
+ { 0x0020, "NetBIOS" },
+ { 0x0021, "NAS SNA Gateway" },
+ { 0x0023, "NACS AsyncGateway" },
+ { 0x0024, "RemoteBridge/RoutingService" },
+ { 0x0026, "BridgeServer" },
+ { 0x0027, "TCP/IP Gateway" },
+ { 0x0028, "Point-to-point X.25 BridgeServer" },
+ { 0x0029, "3270 Gateway" },
+ { 0x002a, "CHI Corp" },
+ { 0x002c, "PC Chalkboard" },
+ { 0x002d, "TimeSynchServer" },
+ { 0x002e, "ARCserve5.0/PalindromeBackup" },
+ { 0x0045, "DI3270 Gateway" },
+ { 0x0047, "AdvertisingPrintServer" },
+ { 0x004a, "NetBlazerModems" },
+ { 0x004b, "BtrieveVAP" },
+ { 0x004c, "NetwareSQL" },
+ { 0x004d, "XtreeNetwork" },
+ { 0x0050, "BtrieveVAP4.11" },
+ { 0x0052, "QuickLink" },
+ { 0x0053, "PrintQueueUser" },
+ { 0x0058, "Multipoint X.25 Router" },
+ { 0x0060, "STLB/NLM" },
+ { 0x0064, "ARCserve" },
+ { 0x0066, "ARCserve3.0" },
+ { 0x0072, "WAN CopyUtility" },
+ { 0x007a, "TES-NetwareVMS" },
+ { 0x0092, "WATCOM Debugger/EmeraldTapeBackupServer" },
+ { 0x0095, "DDA OBGYN" },
+ { 0x0098, "NetwareAccessServer" },
+ { 0x009a, "Netware for VMS II/NamedPipeServer" },
+ { 0x009b, "NetwareAccessServer" },
+ { 0x009e, "PortableNetwareServer/SunLinkNVT" },
+ { 0x00a1, "PowerchuteAPC UPS" },
+ { 0x00aa, "LAWserve" },
+ { 0x00ac, "CompaqIDA StatusMonitor" },
+ { 0x0100, "PIPE STAIL" },
+ { 0x0102, "LAN ProtectBindery" },
+ { 0x0103, "OracleDataBaseServer" },
+ { 0x0107, "Netware386/RSPX RemoteConsole" },
+ { 0x010f, "NovellSNA Gateway" },
+ { 0x0111, "TestServer" },
+ { 0x0112, "HP PrintServer" },
+ { 0x0114, "CSA MUX" },
+ { 0x0115, "CSA LCA" },
+ { 0x0116, "CSA CM" },
+ { 0x0117, "CSA SMA" },
+ { 0x0118, "CSA DBA" },
+ { 0x0119, "CSA NMA" },
+ { 0x011a, "CSA SSA" },
+ { 0x011b, "CSA STATUS" },
+ { 0x011e, "CSA APPC" },
+ { 0x0126, "SNA TEST SSA Profile" },
+ { 0x012a, "CSA TRACE" },
+ { 0x012b, "NetwareSAA" },
+ { 0x012e, "IKARUS VirusScan" },
+ { 0x0130, "CommunicationsExecutive" },
+ { 0x0133, "NNS DomainServer/NetwareNamingServicesDomain" },
+ { 0x0135, "NetwareNamingServicesProfile" },
+ { 0x0137, "Netware386 PrintQueue/NNS PrintQueue" },
+ { 0x0141, "LAN SpoolServer" },
+ { 0x0152, "IRMALAN Gateway" },
+ { 0x0154, "NamedPipeServer" },
+ { 0x0166, "NetWareManagement" },
+ { 0x0168, "Intel PICKIT CommServer/Intel CAS TalkServer" },
+ { 0x0173, "Compaq" },
+ { 0x0174, "Compaq SNMP Agent" },
+ { 0x0175, "Compaq" },
+ { 0x0180, "XTreeServer/XTreeTools" },
+ { 0x018A, "NASI ServicesBroadcastServer" },
+ { 0x01b0, "GARP Gateway" },
+ { 0x01b1, "Binfview" },
+ { 0x01bf, "IntelLanDeskManager" },
+ { 0x01ca, "AXTEC" },
+ { 0x01cb, "ShivaNetModem/E" },
+ { 0x01cc, "ShivaLanRover/E" },
+ { 0x01cd, "ShivaLanRover/T" },
+ { 0x01ce, "ShivaUniversal" },
+ { 0x01d8, "CastelleFAXPressServer" },
+ { 0x01da, "CastelleLANPressPrintServer" },
+ { 0x01dc, "CastelleFAX/Xerox7033 FaxServer/ExcelLanFax" },
+ { 0x01f0, "LEGATO" },
+ { 0x01f5, "LEGATO" },
+ { 0x0233, "NMS Agent/NetwareManagementAgent" },
+ { 0x0237, "NMS IPX Discovery/LANternReadWriteChannel" },
+ { 0x0238, "NMS IP Discovery/LANternTrapAlarmChannel" },
+ { 0x023a, "LANtern" },
+ { 0x023c, "MAVERICK" },
+ { 0x023f, "NovellSMDR" },
+ { 0x024e, "NetwareConnect" },
+ { 0x024f, "NASI ServerBroadcast Cisco" },
+ { 0x026a, "NMS ServiceConsole" },
+ { 0x026b, "TimeSynchronizationServer Netware 4.x" },
+ { 0x0278, "DirectoryServer Netware 4.x" },
+ { 0x027b, "NetwareManagementAgent" },
+ { 0x0280, "Novell File and Printer Sharing Service for PC" },
+ { 0x0304, "NovellSAA Gateway" },
+ { 0x0308, "COM/VERMED" },
+ { 0x030a, "GalacticommWorldgroupServer" },
+ { 0x030c, "IntelNetport2/HP JetDirect/HP Quicksilver" },
+ { 0x0320, "AttachmateGateway" },
+ { 0x0327, "MicrosoftDiagnostiocs" },
+ { 0x0328, "WATCOM SQL Server" },
+ { 0x0335, "MultiTechSystems MultisynchCommServer" },
+ { 0x0343, "Xylogics RemoteAccessServer/LANModem" },
+ { 0x0355, "ArcadaBackupExec" },
+ { 0x0358, "MSLCD1" },
+ { 0x0361, "NETINELO" },
+ { 0x037e, "Powerchute UPS Monitoring" },
+ { 0x037f, "ViruSafeNotify" },
+ { 0x0386, "HP Bridge" },
+ { 0x0387, "HP Hub" },
+ { 0x0394, "NetWare SAA Gateway" },
+ { 0x039b, "LotusNotes" },
+ { 0x03b7, "CertusAntiVirus" },
+ { 0x03c4, "ARCserve4.0" },
+ { 0x03c7, "LANspool3.5" },
+ { 0x03d7, "LexmarkPrinterServer" },
+ { 0x03d8, "LexmarkXLE PrinterServer" },
+ { 0x03dd, "BanyanENS NetwareClient" },
+ { 0x03de, "GuptaSequelBaseServer/NetWareSQL" },
+ { 0x03e1, "UnivelUnixware" },
+ { 0x03e4, "UnivelUnixware" },
+ { 0x03fc, "IntelNetport" },
+ { 0x03fd, "PrintServerQueue" },
+ { 0x040A, "ipnServer" },
+ { 0x040D, "LVERRMAN" },
+ { 0x040E, "LVLIC" },
+ { 0x0414, "NET Silicon (DPI)/Kyocera" },
+ { 0x0429, "SiteLockVirus" },
+ { 0x0432, "UFHELPR???" },
+ { 0x0433, "Synoptics281xAdvancedSNMPAgent" },
+ { 0x0444, "MicrosoftNT SNA Server" },
+ { 0x0448, "Oracle" },
+ { 0x044c, "ARCserve5.01" },
+ { 0x0457, "CanonGP55" },
+ { 0x045a, "QMS Printers" },
+ { 0x045b, "DellSCSI Array" },
+ { 0x0491, "NetBlazerModems" },
+ { 0x04ac, "OnTimeScheduler" },
+ { 0x04b0, "CD-Net" },
+ { 0x0513, "EmulexNQA" },
+ { 0x0520, "SiteLockChecks" },
+ { 0x0529, "SiteLockChecks" },
+ { 0x052d, "CitrixOS2 AppServer" },
+ { 0x0535, "Tektronix" },
+ { 0x0536, "Milan" },
+ { 0x055d, "Attachmate SNA gateway" },
+ { 0x056b, "IBM8235 ModemServer" },
+ { 0x056c, "ShivaLanRover/E PLUS" },
+ { 0x056d, "ShivaLanRover/T PLUS" },
+ { 0x0580, "McAfeeNetShield" },
+ { 0x05B8, "NLM to workstation communication (Revelation Software)" },
+ { 0x05BA, "CompatibleSystemsRouters" },
+ { 0x05BE, "CheyenneHierarchicalStorageManager" },
+ { 0x0606, "JCWatermarkImaging" },
+ { 0x060c, "AXISNetworkPrinter" },
+ { 0x0610, "AdaptecSCSIManagement" },
+ { 0x0621, "IBM AntiVirus" },
+ { 0x0640, "Windows95 RemoteRegistryService" },
+ { 0x064e, "MicrosoftIIS" },
+ { 0x067b, "Microsoft Win95/98 File and Print Sharing for NetWare" },
+ { 0x067c, "Microsoft Win95/98 File and Print Sharing for NetWare" },
+ { 0x076C, "Xerox" },
+ { 0x079b, "ShivaLanRover/E 115" },
+ { 0x079c, "ShivaLanRover/T 115" },
+ { 0x07B4, "CubixWorldDesk" },
+ { 0x07c2, "Quarterdeck IWare Connect V2.x NLM" },
+ { 0x07c1, "Quarterdeck IWare Connect V3.x NLM" },
+ { 0x0810, "ELAN License Server Demo" },
+ { 0x0824, "ShivaLanRoverAccessSwitch/E" },
+ { 0x086a, "ISSC Collector" },
+ { 0x087f, "ISSC DAS AgentAIX" },
+ { 0x0880, "Intel Netport PRO" },
+ { 0x0881, "Intel Netport PRO" },
+ { 0x0b29, "SiteLock" },
+ { 0x0c29, "SiteLockApplications" },
+ { 0x0c2c, "LicensingServer" },
+ { 0x2101, "PerformanceTechnologyInstantInternet" },
+ { 0x2380, "LAI SiteLock" },
+ { 0x238c, "MeetingMaker" },
+ { 0x4808, "SiteLockServer/SiteLockMetering" },
+ { 0x5555, "SiteLockUser" },
+ { 0x6312, "Tapeware" },
+ { 0x6f00, "RabbitGateway" },
+ { 0x7703, "MODEM" },
+ { 0x8002, "NetPortPrinters" },
+ { 0x8008, "WordPerfectNetworkVersion" },
+ { 0x85BE, "Cisco EIGRP" },
+ { 0x8888, "WordPerfectNetworkVersion/QuickNetworkManagement" },
+ { 0x9000, "McAfeeNetShield" },
+ { 0x9604, "CSA-NT_MON" },
+ { 0xb6a8, "OceanIsleReachoutRemoteControl" },
+ { 0xf11f, "SiteLockMetering" },
+ { 0xf1ff, "SiteLock" },
+ { 0xf503, "Microsoft SQL Server" },
+ { 0xF905, "IBM TimeAndPlace" },
+ { 0xfbfb, "TopCallIII FaxServer" },
+ { 0xffff, "AnyService/Wildcard" },
+ { 0, (char *)0 }
+};
+
+static void
+init_ipxsaparray(netdissect_options *ndo)
+{
+ int i;
+ struct hnamemem *table;
+
+ for (i = 0; ipxsap_db[i].s != NULL; i++) {
+ u_int j = htons(ipxsap_db[i].v) & (HASHNAMESIZE-1);
+ table = &ipxsaptable[j];
+ while (table->name)
+ table = table->nxt;
+ table->name = ipxsap_db[i].s;
+ table->addr = htons(ipxsap_db[i].v);
+ table->nxt = newhnamemem(ndo);
+ }
+}
+
+/*
+ * Initialize the address to name translation machinery. We map all
+ * non-local IP addresses to numeric addresses if ndo->ndo_fflag is true
+ * (i.e., to prevent blocking on the nameserver). localnet is the IP address
+ * of the local network. mask is its subnet mask.
+ */
+void
+init_addrtoname(netdissect_options *ndo, uint32_t localnet, uint32_t mask)
+{
+ if (ndo->ndo_fflag) {
+ f_localnet = localnet;
+ f_netmask = mask;
+ }
+ if (ndo->ndo_nflag)
+ /*
+ * Simplest way to suppress names.
+ */
+ return;
+
+ init_etherarray(ndo);
+ init_servarray(ndo);
+ init_eprotoarray(ndo);
+ init_protoidarray(ndo);
+ init_ipxsaparray(ndo);
+}
+
+const char *
+dnaddr_string(netdissect_options *ndo, u_short dnaddr)
+{
+ struct hnamemem *tp;
+
+ for (tp = &dnaddrtable[dnaddr & (HASHNAMESIZE-1)]; tp->nxt != NULL;
+ tp = tp->nxt)
+ if (tp->addr == dnaddr)
+ return (tp->name);
+
+ tp->addr = dnaddr;
+ tp->nxt = newhnamemem(ndo);
+ tp->name = dnnum_string(ndo, dnaddr);
+
+ return(tp->name);
+}
+
+/* Return a zero'ed hnamemem struct and cuts down on calloc() overhead */
+struct hnamemem *
+newhnamemem(netdissect_options *ndo)
+{
+ struct hnamemem *p;
+ static struct hnamemem *ptr = NULL;
+ static u_int num = 0;
+
+ if (num == 0) {
+ num = 64;
+ ptr = (struct hnamemem *)calloc(num, sizeof (*ptr));
+ if (ptr == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: calloc", __func__);
+ }
+ --num;
+ p = ptr++;
+ return (p);
+}
+
+/* Return a zero'ed h6namemem struct and cuts down on calloc() overhead */
+struct h6namemem *
+newh6namemem(netdissect_options *ndo)
+{
+ struct h6namemem *p;
+ static struct h6namemem *ptr = NULL;
+ static u_int num = 0;
+
+ if (num == 0) {
+ num = 64;
+ ptr = (struct h6namemem *)calloc(num, sizeof (*ptr));
+ if (ptr == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: calloc", __func__);
+ }
+ --num;
+ p = ptr++;
+ return (p);
+}
+
+/* Represent TCI part of the 802.1Q 4-octet tag as text. */
+const char *
+ieee8021q_tci_string(const uint16_t tci)
+{
+ static char buf[128];
+ snprintf(buf, sizeof(buf), "vlan %u, p %u%s",
+ tci & 0xfff,
+ tci >> 13,
+ (tci & 0x1000) ? ", DEI" : "");
+ return buf;
+}
diff --git a/addrtoname.h b/addrtoname.h
new file mode 100644
index 0000000..597f4e1
--- /dev/null
+++ b/addrtoname.h
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 1990, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#include "extract.h"
+
+#ifdef HAVE_CASPER
+#include <libcasper.h>
+extern cap_channel_t *capdns;
+#endif
+
+/*
+ * Definition to let us compile most of the IPv6 code even on systems
+ * without IPv6 support.
+ */
+#ifndef INET6_ADDRSTRLEN
+#define INET6_ADDRSTRLEN 46
+#endif
+
+/* Name to address translation routines. */
+
+enum {
+ LINKADDR_ETHER,
+ LINKADDR_FRELAY,
+ LINKADDR_IEEE1394,
+ LINKADDR_ATM,
+ LINKADDR_OTHER
+};
+
+#define BUFSIZE 128
+
+extern const char *linkaddr_string(netdissect_options *, const uint8_t *, const unsigned int, const unsigned int);
+extern const char *etheraddr_string(netdissect_options *, const uint8_t *);
+extern const char *le64addr_string(netdissect_options *, const uint8_t *);
+extern const char *tcpport_string(netdissect_options *, u_short);
+extern const char *udpport_string(netdissect_options *, u_short);
+extern const char *isonsap_string(netdissect_options *, const uint8_t *, u_int);
+extern const char *dnaddr_string(netdissect_options *, u_short);
+extern const char *ipxsap_string(netdissect_options *, u_short);
+extern const char *ipaddr_string(netdissect_options *, const u_char *);
+extern const char *ip6addr_string(netdissect_options *, const u_char *);
+extern const char *intoa(uint32_t);
+
+extern void init_addrtoname(netdissect_options *, uint32_t, uint32_t);
+extern struct hnamemem *newhnamemem(netdissect_options *);
+extern struct h6namemem *newh6namemem(netdissect_options *);
+extern const char * ieee8021q_tci_string(const uint16_t);
+
+/* macro(s) and inline function(s) with setjmp/longjmp logic to call
+ * the X_string() function(s) after bounds checking.
+ * The macro(s) must be used on a packet buffer pointer.
+ */
+
+static inline const char *
+get_linkaddr_string(netdissect_options *ndo, const uint8_t *p,
+ const unsigned int type, const unsigned int len)
+{
+ if (!ND_TTEST_LEN(p, len))
+ nd_trunc_longjmp(ndo);
+ return linkaddr_string(ndo, p, type, len);
+}
+
+static inline const char *
+get_etheraddr_string(netdissect_options *ndo, const uint8_t *p)
+{
+ if (!ND_TTEST_LEN(p, MAC_ADDR_LEN))
+ nd_trunc_longjmp(ndo);
+ return etheraddr_string(ndo, p);
+}
+
+static inline const char *
+get_le64addr_string(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_8(p))
+ nd_trunc_longjmp(ndo);
+ return le64addr_string(ndo, p);
+}
+
+static inline const char *
+get_isonsap_string(netdissect_options *ndo, const uint8_t *nsap,
+ u_int nsap_length)
+{
+ if (!ND_TTEST_LEN(nsap, nsap_length))
+ nd_trunc_longjmp(ndo);
+ return isonsap_string(ndo, nsap, nsap_length);
+}
+
+static inline const char *
+get_ipaddr_string(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_4(p))
+ nd_trunc_longjmp(ndo);
+ return ipaddr_string(ndo, p);
+}
+
+static inline const char *
+get_ip6addr_string(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_16(p))
+ nd_trunc_longjmp(ndo);
+ return ip6addr_string(ndo, p);
+}
+
+#define GET_LINKADDR_STRING(p, type, len) get_linkaddr_string(ndo, (const u_char *)(p), type, len)
+#define GET_ETHERADDR_STRING(p) get_etheraddr_string(ndo, (const u_char *)(p))
+#define GET_LE64ADDR_STRING(p) get_le64addr_string(ndo, (const u_char *)(p))
+#define GET_ISONSAP_STRING(nsap, nsap_length) get_isonsap_string(ndo, (const u_char *)(nsap), nsap_length)
+#define GET_IPADDR_STRING(p) get_ipaddr_string(ndo, (const u_char *)(p))
+#define GET_IP6ADDR_STRING(p) get_ip6addr_string(ndo, (const u_char *)(p))
diff --git a/addrtostr.c b/addrtostr.c
new file mode 100644
index 0000000..c3bdb8a
--- /dev/null
+++ b/addrtostr.c
@@ -0,0 +1,213 @@
+/*
+ * Copyright (c) 1999 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the Kungliga Tekniska
+ * Högskolan and its contributors.
+ *
+ * 4. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include "addrtostr.h"
+
+#include <stdio.h>
+#include <string.h>
+
+/*
+ *
+ */
+
+#ifndef IN6ADDRSZ
+#define IN6ADDRSZ 16 /* IPv6 T_AAAA */
+#endif
+
+#ifndef INT16SZ
+#define INT16SZ 2 /* word size */
+#endif
+
+const char *
+addrtostr (const void *src, char *dst, size_t size)
+{
+ const u_char *srcaddr = (const u_char *)src;
+ const char digits[] = "0123456789";
+ int i;
+ const char *orig_dst = dst;
+
+ if (size < INET_ADDRSTRLEN) {
+ errno = ENOSPC;
+ return NULL;
+ }
+ for (i = 0; i < 4; ++i) {
+ int n = *srcaddr++;
+ int non_zerop = 0;
+
+ if (non_zerop || n / 100 > 0) {
+ *dst++ = digits[n / 100];
+ n %= 100;
+ non_zerop = 1;
+ }
+ if (non_zerop || n / 10 > 0) {
+ *dst++ = digits[n / 10];
+ n %= 10;
+ non_zerop = 1;
+ }
+ *dst++ = digits[n];
+ if (i != 3)
+ *dst++ = '.';
+ }
+ *dst++ = '\0';
+ return orig_dst;
+}
+
+/*
+ * Convert IPv6 binary address into presentation (printable) format.
+ */
+const char *
+addrtostr6 (const void *src, char *dst, size_t size)
+{
+ /*
+ * Note that int32_t and int16_t need only be "at least" large enough
+ * to contain a value of the specified size. On some systems, like
+ * Crays, there is no such thing as an integer variable with 16 bits.
+ * Keep this in mind if you think this function should have been coded
+ * to use pointer overlays. All the world's not a VAX.
+ */
+ const u_char *srcaddr = (const u_char *)src;
+ char *dp;
+ size_t space_left, added_space;
+ int snprintfed;
+ struct {
+ int base;
+ int len;
+ } best, cur;
+ uint16_t words [IN6ADDRSZ / INT16SZ];
+ int i;
+
+ /* Preprocess:
+ * Copy the input (bytewise) array into a wordwise array.
+ * Find the longest run of 0x00's in src[] for :: shorthanding.
+ */
+ for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++)
+ words[i] = (srcaddr[2*i] << 8) | srcaddr[2*i + 1];
+
+ best.len = 0;
+ best.base = -1;
+ cur.len = 0;
+ cur.base = -1;
+ for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++)
+ {
+ if (words[i] == 0)
+ {
+ if (cur.base == -1)
+ cur.base = i, cur.len = 1;
+ else cur.len++;
+ }
+ else if (cur.base != -1)
+ {
+ if (best.base == -1 || cur.len > best.len)
+ best = cur;
+ cur.base = -1;
+ }
+ }
+ if ((cur.base != -1) && (best.base == -1 || cur.len > best.len))
+ best = cur;
+ if (best.base != -1 && best.len < 2)
+ best.base = -1;
+
+ /* Format the result.
+ */
+ dp = dst;
+ space_left = size;
+#define APPEND_CHAR(c) \
+ { \
+ if (space_left == 0) { \
+ errno = ENOSPC; \
+ return (NULL); \
+ } \
+ *dp++ = c; \
+ space_left--; \
+ }
+ for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++)
+ {
+ /* Are we inside the best run of 0x00's?
+ */
+ if (best.base != -1 && i >= best.base && i < (best.base + best.len))
+ {
+ if (i == best.base)
+ APPEND_CHAR(':');
+ continue;
+ }
+
+ /* Are we following an initial run of 0x00s or any real hex?
+ */
+ if (i != 0)
+ APPEND_CHAR(':');
+
+ /* Is this address an encapsulated IPv4?
+ */
+ if (i == 6 && best.base == 0 &&
+ (best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
+ {
+ if (!addrtostr(srcaddr+12, dp, space_left))
+ {
+ errno = ENOSPC;
+ return (NULL);
+ }
+ added_space = strlen(dp);
+ dp += added_space;
+ space_left -= added_space;
+ break;
+ }
+ snprintfed = snprintf (dp, space_left, "%x", words[i]);
+ if (snprintfed < 0)
+ return (NULL);
+ if ((size_t) snprintfed >= space_left)
+ {
+ errno = ENOSPC;
+ return (NULL);
+ }
+ dp += snprintfed;
+ space_left -= snprintfed;
+ }
+
+ /* Was it a trailing run of 0x00's?
+ */
+ if (best.base != -1 && (best.base + best.len) == (IN6ADDRSZ / INT16SZ))
+ APPEND_CHAR(':');
+ APPEND_CHAR('\0');
+
+ return (dst);
+}
diff --git a/addrtostr.h b/addrtostr.h
new file mode 100644
index 0000000..2b95a16
--- /dev/null
+++ b/addrtostr.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 1999 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the Kungliga Tekniska
+ * Högskolan and its contributors.
+ *
+ * 4. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* Address to printable string translation routines. */
+
+extern const char *addrtostr(const void *src, char *dst, size_t size);
+extern const char *addrtostr6(const void *src, char *dst, size_t size);
diff --git a/af.c b/af.c
new file mode 100644
index 0000000..1153f10
--- /dev/null
+++ b/af.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 1998-2006 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include "netdissect.h"
+#include "af.h"
+
+const struct tok af_values[] = {
+ { 0, "Reserved"},
+ { AFNUM_INET, "IPv4"},
+ { AFNUM_INET6, "IPv6"},
+ { AFNUM_NSAP, "NSAP"},
+ { AFNUM_HDLC, "HDLC"},
+ { AFNUM_BBN1822, "BBN 1822"},
+ { AFNUM_802, "802"},
+ { AFNUM_E163, "E.163"},
+ { AFNUM_E164, "E.164"},
+ { AFNUM_F69, "F.69"},
+ { AFNUM_X121, "X.121"},
+ { AFNUM_IPX, "Novell IPX"},
+ { AFNUM_ATALK, "Appletalk"},
+ { AFNUM_DECNET, "Decnet IV"},
+ { AFNUM_BANYAN, "Banyan Vines"},
+ { AFNUM_E164NSAP, "E.164 with NSAP subaddress"},
+ { AFNUM_L2VPN, "Layer-2 VPN"},
+ { AFNUM_VPLS, "VPLS"},
+ { 0, NULL},
+};
+
+const struct tok bsd_af_values[] = {
+ { BSD_AFNUM_INET, "IPv4" },
+ { BSD_AFNUM_NS, "NS" },
+ { BSD_AFNUM_ISO, "ISO" },
+ { BSD_AFNUM_APPLETALK, "Appletalk" },
+ { BSD_AFNUM_IPX, "IPX" },
+ { BSD_AFNUM_INET6_BSD, "IPv6" },
+ { BSD_AFNUM_INET6_FREEBSD, "IPv6" },
+ { BSD_AFNUM_INET6_DARWIN, "IPv6" },
+ { 0, NULL}
+};
diff --git a/af.h b/af.h
new file mode 100644
index 0000000..b9fec8e
--- /dev/null
+++ b/af.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 1998-2006 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+extern const struct tok af_values[];
+extern const struct tok bsd_af_values[];
+
+/* RFC1700 address family numbers */
+#define AFNUM_INET 1
+#define AFNUM_INET6 2
+#define AFNUM_NSAP 3
+#define AFNUM_HDLC 4
+#define AFNUM_BBN1822 5
+#define AFNUM_802 6
+#define AFNUM_E163 7
+#define AFNUM_E164 8
+#define AFNUM_F69 9
+#define AFNUM_X121 10
+#define AFNUM_IPX 11
+#define AFNUM_ATALK 12
+#define AFNUM_DECNET 13
+#define AFNUM_BANYAN 14
+#define AFNUM_E164NSAP 15
+#define AFNUM_VPLS 25
+/* draft-kompella-ppvpn-l2vpn */
+#define AFNUM_L2VPN 196 /* still to be approved by IANA */
+
+/*
+ * BSD AF_ values.
+ *
+ * Unfortunately, the BSDs don't all use the same value for AF_INET6,
+ * so, because we want to be able to read captures from all of the BSDs,
+ * we check for all of them.
+ */
+#define BSD_AFNUM_INET 2
+#define BSD_AFNUM_NS 6 /* XEROX NS protocols */
+#define BSD_AFNUM_ISO 7
+#define BSD_AFNUM_APPLETALK 16
+#define BSD_AFNUM_IPX 23
+#define BSD_AFNUM_INET6_BSD 24 /* NetBSD, OpenBSD, BSD/OS, Npcap */
+#define BSD_AFNUM_INET6_FREEBSD 28 /* FreeBSD */
+#define BSD_AFNUM_INET6_DARWIN 30 /* macOS, iOS, other Darwin-based OSes */
diff --git a/ah.h b/ah.h
new file mode 100644
index 0000000..c60c563
--- /dev/null
+++ b/ah.h
@@ -0,0 +1,67 @@
+/* $NetBSD: ah.h,v 1.12 2000/07/23 05:23:04 itojun Exp $ */
+/* $KAME: ah.h,v 1.12 2000/07/20 17:41:01 itojun Exp $ */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * RFC4302 authentication header.
+ */
+
+#ifndef ND_AH_H_
+#define ND_AH_H_
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Next Header | Payload Len | RESERVED |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Security Parameters Index (SPI) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Sequence Number Field |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * + Integrity Check Value-ICV (variable) |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * Figure 1. AH Format
+ */
+
+struct ah {
+ nd_uint8_t ah_nxt; /* Next Header */
+ nd_uint8_t ah_len; /* Payload Len in 32bit words minus 2 */
+ nd_uint16_t ah_reserved; /* Reserved for future use */
+ nd_uint32_t ah_spi; /* Security Parameters Index */
+ nd_uint32_t ah_seq; /* Sequence Number Field */
+ /* variable size, 32bit bound*/ /* Integrity Check Value-ICV */
+};
+
+#endif /* ND_AH_H_ */
diff --git a/appletalk.h b/appletalk.h
new file mode 100644
index 0000000..ef4013f
--- /dev/null
+++ b/appletalk.h
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * AppleTalk protocol formats (courtesy Bill Croft of Stanford/SUMEX).
+ */
+
+struct LAP {
+ nd_uint8_t dst;
+ nd_uint8_t src;
+ nd_uint8_t type;
+};
+#define lapShortDDP 1 /* short DDP type */
+#define lapDDP 2 /* DDP type */
+#define lapKLAP 'K' /* Kinetics KLAP type */
+
+/* Datagram Delivery Protocol */
+
+struct atDDP {
+ nd_uint16_t length;
+ nd_uint16_t checksum;
+ nd_uint16_t dstNet;
+ nd_uint16_t srcNet;
+ nd_uint8_t dstNode;
+ nd_uint8_t srcNode;
+ nd_uint8_t dstSkt;
+ nd_uint8_t srcSkt;
+ nd_uint8_t type;
+};
+
+struct atShortDDP {
+ nd_uint16_t length;
+ nd_uint8_t dstSkt;
+ nd_uint8_t srcSkt;
+ nd_uint8_t type;
+};
+
+#define ddpMaxWKS 0x7F
+#define ddpMaxData 586
+#define ddpLengthMask 0x3FF
+#define ddpHopShift 10
+#define ddpSize 13 /* size of DDP header (avoid struct padding) */
+#define ddpSSize 5
+#define ddpWKS 128 /* boundary of DDP well known sockets */
+#define ddpRTMP 1 /* RTMP type */
+#define ddpRTMPrequest 5 /* RTMP request type */
+#define ddpNBP 2 /* NBP type */
+#define ddpATP 3 /* ATP type */
+#define ddpECHO 4 /* ECHO type */
+#define ddpIP 22 /* IP type */
+#define ddpARP 23 /* ARP type */
+#define ddpEIGRP 88 /* EIGRP over Appletalk */
+#define ddpKLAP 0x4b /* Kinetics KLAP type */
+
+
+/* AppleTalk Transaction Protocol */
+
+struct atATP {
+ nd_uint8_t control;
+ nd_uint8_t bitmap;
+ nd_uint16_t transID;
+ nd_uint32_t userData;
+};
+
+#define atpReqCode 0x40
+#define atpRspCode 0x80
+#define atpRelCode 0xC0
+#define atpXO 0x20
+#define atpEOM 0x10
+#define atpSTS 0x08
+#define atpFlagMask 0x3F
+#define atpControlMask 0xF8
+#define atpMaxNum 8
+#define atpMaxData 578
+
+
+/* AppleTalk Echo Protocol */
+
+struct atEcho {
+ nd_uint8_t echoFunction;
+ nd_uint8_t echoData[1]; /* Should be [], C99-style */
+};
+
+#define echoSkt 4 /* the echoer socket */
+#define echoSize 1 /* size of echo header */
+#define echoRequest 1 /* echo request */
+#define echoReply 2 /* echo request */
+
+
+/* Name Binding Protocol */
+
+struct atNBP {
+ nd_uint8_t control;
+ nd_uint8_t id;
+};
+
+struct atNBPtuple {
+ nd_uint16_t net;
+ nd_uint8_t node;
+ nd_uint8_t skt;
+ nd_uint8_t enumerator;
+};
+
+#define nbpBrRq 0x10
+#define nbpLkUp 0x20
+#define nbpLkUpReply 0x30
+
+#define nbpNIS 2
+#define nbpTupleMax 15
+
+#define nbpHeaderSize 2
+#define nbpTupleSize 5
+
+#define nbpSkt 2 /* NIS */
+
+
+/* Routing Table Maint. Protocol */
+
+#define rtmpSkt 1 /* number of RTMP socket */
+#define rtmpSize 4 /* minimum size */
+#define rtmpTupleSize 3
+
+
+/* Zone Information Protocol */
+
+struct zipHeader {
+ nd_uint8_t command;
+ nd_uint8_t netcount;
+};
+
+#define zipHeaderSize 2
+#define zipQuery 1
+#define zipReply 2
+#define zipTakedown 3
+#define zipBringup 4
+#define ddpZIP 6
+#define zipSkt 6
+#define GetMyZone 7
+#define GetZoneList 8
+
+/*
+ * UDP port range used for ddp-in-udp encapsulation is 16512-16639
+ * for client sockets (128-255) and 200-327 for server sockets
+ * (0-127). We also try to recognize the pre-April 88 server
+ * socket range of 768-895.
+ */
+#define atalk_port(p) \
+ (((unsigned)((p) - 16512) < 128) || \
+ ((unsigned)((p) - 200) < 128) || \
+ ((unsigned)((p) - 768) < 128))
diff --git a/ascii_strcasecmp.c b/ascii_strcasecmp.c
new file mode 100644
index 0000000..090f758
--- /dev/null
+++ b/ascii_strcasecmp.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 1987 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that this notice is preserved and that due credit is given
+ * to the University of California at Berkeley. The name of the University
+ * may not be used to endorse or promote products derived from this
+ * software without specific written prior permission. This software
+ * is provided ``as is'' without express or implied warranty.
+ */
+
+#include "ascii_strcasecmp.h"
+
+/*
+ * This array maps upper-case ASCII letters to their lower-case
+ * equivalents; all other byte values are mapped to themselves,
+ * so this is locale-independent and intended to be locale-independent,
+ * to avoid issues with, for example, "i" and "I" not being lower-case
+ * and upper-case versions of the same letter in Turkish, where
+ * there are separate "i with dot" and "i without dot" letters.
+ */
+static const unsigned char charmap[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+};
+
+int
+ascii_strcasecmp(const char *s1, const char *s2)
+{
+ const unsigned char *cm = charmap,
+ *us1 = (const unsigned char *)s1,
+ *us2 = (const unsigned char *)s2;
+
+ while (cm[*us1] == cm[*us2++])
+ if (*us1++ == '\0')
+ return(0);
+ return(cm[*us1] - cm[*--us2]);
+}
+
+int
+ascii_strncasecmp(const char *s1, const char *s2, size_t n)
+{
+ const unsigned char *cm = charmap,
+ *us1 = (const unsigned char *)s1,
+ *us2 = (const unsigned char *)s2;
+
+ for (;;) {
+ if (n == 0) {
+ /*
+ * We've run out of characters that we should
+ * compare, and they've all been equal; return
+ * 0, to indicate that the prefixes are the
+ * same.
+ */
+ return(0);
+ }
+ if (cm[*us1] != cm[*us2++]) {
+ /*
+ * We've found a mismatch.
+ */
+ break;
+ }
+ if (*us1++ == '\0') {
+ /*
+ * We've run out of characters *to* compare,
+ * and they've all been equal; return 0, to
+ * indicate that the strings are the same.
+ */
+ return(0);
+ }
+ n--;
+ }
+ return(cm[*us1] - cm[*--us2]);
+}
diff --git a/ascii_strcasecmp.h b/ascii_strcasecmp.h
new file mode 100644
index 0000000..7f8ddb9
--- /dev/null
+++ b/ascii_strcasecmp.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 1988-1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Copyright (c) 1998-2012 Michael Richardson <mcr@tcpdump.org>
+ * The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef netdissect_ascii_strcasecmp_h
+#define netdissect_ascii_strcasecmp_h
+
+#include <stddef.h>
+
+extern int ascii_strcasecmp(const char *, const char *);
+extern int ascii_strncasecmp(const char *, const char *, size_t);
+
+#endif /* netdissect_ascii_strcasecmp_h */
diff --git a/atime.awk b/atime.awk
new file mode 100644
index 0000000..fa1c7a1
--- /dev/null
+++ b/atime.awk
@@ -0,0 +1,18 @@
+$6 ~ /^ack/ && $5 !~ /[SFR]/ {
+ # given a tcpdump ftp trace, output one line for each ack
+ # in the form
+ # <ack time> <seq no>
+ # where <ack time> is the time packet was acked (in seconds with
+ # zero at time of first packet) and <seq no> is the tcp sequence
+ # number of the ack divided by 1024 (i.e., Kbytes acked).
+ #
+ # convert time to seconds
+ n = split ($1,t,":")
+ tim = t[1]*3600 + t[2]*60 + t[3]
+ if (! tzero) {
+ tzero = tim
+ OFS = "\t"
+ }
+ # get packet sequence number
+ printf "%7.2f\t%g\n", tim-tzero, $7/1024
+ }
diff --git a/atm.h b/atm.h
new file mode 100644
index 0000000..8d1737e
--- /dev/null
+++ b/atm.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2002 Guy Harris.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * The name of Guy Harris may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/*
+ * Traffic types for ATM.
+ */
+#define ATM_UNKNOWN 0 /* Unknown */
+#define ATM_LANE 1 /* LANE */
+#define ATM_LLC 2 /* LLC encapsulation */
+
+/*
+ * some OAM cell captures (most notably Juniper's)
+ * do not deliver a heading HEC byte
+ */
+#define ATM_OAM_NOHEC 0
+#define ATM_OAM_HEC 1
+#define ATM_HDR_LEN_NOHEC 4
diff --git a/bpf_dump.c b/bpf_dump.c
new file mode 100644
index 0000000..1ac74a2
--- /dev/null
+++ b/bpf_dump.c
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 1992, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+
+#include "netdissect.h"
+#include "interface.h"
+
+void
+bpf_dump(const struct bpf_program *p, int option)
+{
+ struct bpf_insn *insn;
+ int i;
+ int n = p->bf_len;
+
+ insn = p->bf_insns;
+ if (option > 2) {
+ printf("%d\n", n);
+ for (i = 0; i < n; ++insn, ++i) {
+ printf("%u %u %u %u\n", insn->code,
+ insn->jt, insn->jf, insn->k);
+ }
+ return ;
+ }
+ if (option > 1) {
+ for (i = 0; i < n; ++insn, ++i)
+ printf("{ 0x%x, %d, %d, 0x%08x },\n",
+ insn->code, insn->jt, insn->jf, insn->k);
+ return;
+ }
+ for (i = 0; i < n; ++insn, ++i) {
+#ifdef BDEBUG
+ extern int bids[];
+ printf(bids[i] > 0 ? "[%02d]" : " -- ", bids[i] - 1);
+#endif
+ puts(bpf_image(insn, i));
+ }
+}
diff --git a/chdlc.h b/chdlc.h
new file mode 100644
index 0000000..14bdb25
--- /dev/null
+++ b/chdlc.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#define CHDLC_HDRLEN 4
+#define CHDLC_UNICAST 0x0f
+#define CHDLC_BCAST 0x8f
+#define CHDLC_TYPE_SLARP 0x8035
+#define CHDLC_TYPE_CDP 0x2000
diff --git a/checksum.c b/checksum.c
new file mode 100644
index 0000000..e6e84a2
--- /dev/null
+++ b/checksum.c
@@ -0,0 +1,189 @@
+/*
+ * Copyright (c) 1998-2006 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * miscellaneous checksumming routines
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "netdissect.h"
+
+/*
+ * CRC-10 table generated using the following Python snippet:
+
+import sys
+
+crc_table = []
+for i in range(256):
+ accum = i << 2
+ for j in range(8):
+ accum <<= 1
+ if accum & 0x400:
+ accum ^= 0x633
+ crc_table.append(accum)
+
+for i in range(len(crc_table)/8):
+ for j in range(8):
+ sys.stdout.write("0x%04x, " % crc_table[i*8+j])
+ sys.stdout.write("\n")
+
+ */
+static const uint16_t crc10_table[256] =
+{
+ 0x0000, 0x0233, 0x0255, 0x0066, 0x0299, 0x00aa, 0x00cc, 0x02ff,
+ 0x0301, 0x0132, 0x0154, 0x0367, 0x0198, 0x03ab, 0x03cd, 0x01fe,
+ 0x0031, 0x0202, 0x0264, 0x0057, 0x02a8, 0x009b, 0x00fd, 0x02ce,
+ 0x0330, 0x0103, 0x0165, 0x0356, 0x01a9, 0x039a, 0x03fc, 0x01cf,
+ 0x0062, 0x0251, 0x0237, 0x0004, 0x02fb, 0x00c8, 0x00ae, 0x029d,
+ 0x0363, 0x0150, 0x0136, 0x0305, 0x01fa, 0x03c9, 0x03af, 0x019c,
+ 0x0053, 0x0260, 0x0206, 0x0035, 0x02ca, 0x00f9, 0x009f, 0x02ac,
+ 0x0352, 0x0161, 0x0107, 0x0334, 0x01cb, 0x03f8, 0x039e, 0x01ad,
+ 0x00c4, 0x02f7, 0x0291, 0x00a2, 0x025d, 0x006e, 0x0008, 0x023b,
+ 0x03c5, 0x01f6, 0x0190, 0x03a3, 0x015c, 0x036f, 0x0309, 0x013a,
+ 0x00f5, 0x02c6, 0x02a0, 0x0093, 0x026c, 0x005f, 0x0039, 0x020a,
+ 0x03f4, 0x01c7, 0x01a1, 0x0392, 0x016d, 0x035e, 0x0338, 0x010b,
+ 0x00a6, 0x0295, 0x02f3, 0x00c0, 0x023f, 0x000c, 0x006a, 0x0259,
+ 0x03a7, 0x0194, 0x01f2, 0x03c1, 0x013e, 0x030d, 0x036b, 0x0158,
+ 0x0097, 0x02a4, 0x02c2, 0x00f1, 0x020e, 0x003d, 0x005b, 0x0268,
+ 0x0396, 0x01a5, 0x01c3, 0x03f0, 0x010f, 0x033c, 0x035a, 0x0169,
+ 0x0188, 0x03bb, 0x03dd, 0x01ee, 0x0311, 0x0122, 0x0144, 0x0377,
+ 0x0289, 0x00ba, 0x00dc, 0x02ef, 0x0010, 0x0223, 0x0245, 0x0076,
+ 0x01b9, 0x038a, 0x03ec, 0x01df, 0x0320, 0x0113, 0x0175, 0x0346,
+ 0x02b8, 0x008b, 0x00ed, 0x02de, 0x0021, 0x0212, 0x0274, 0x0047,
+ 0x01ea, 0x03d9, 0x03bf, 0x018c, 0x0373, 0x0140, 0x0126, 0x0315,
+ 0x02eb, 0x00d8, 0x00be, 0x028d, 0x0072, 0x0241, 0x0227, 0x0014,
+ 0x01db, 0x03e8, 0x038e, 0x01bd, 0x0342, 0x0171, 0x0117, 0x0324,
+ 0x02da, 0x00e9, 0x008f, 0x02bc, 0x0043, 0x0270, 0x0216, 0x0025,
+ 0x014c, 0x037f, 0x0319, 0x012a, 0x03d5, 0x01e6, 0x0180, 0x03b3,
+ 0x024d, 0x007e, 0x0018, 0x022b, 0x00d4, 0x02e7, 0x0281, 0x00b2,
+ 0x017d, 0x034e, 0x0328, 0x011b, 0x03e4, 0x01d7, 0x01b1, 0x0382,
+ 0x027c, 0x004f, 0x0029, 0x021a, 0x00e5, 0x02d6, 0x02b0, 0x0083,
+ 0x012e, 0x031d, 0x037b, 0x0148, 0x03b7, 0x0184, 0x01e2, 0x03d1,
+ 0x022f, 0x001c, 0x007a, 0x0249, 0x00b6, 0x0285, 0x02e3, 0x00d0,
+ 0x011f, 0x032c, 0x034a, 0x0179, 0x0386, 0x01b5, 0x01d3, 0x03e0,
+ 0x021e, 0x002d, 0x004b, 0x0278, 0x0087, 0x02b4, 0x02d2, 0x00e1
+};
+
+static void
+init_crc10_table(void)
+{
+#define CRC10_POLYNOMIAL 0x633
+ int i, j;
+ uint16_t accum;
+ uint16_t verify_crc10_table[256];
+
+ for ( i = 0; i < 256; i++ )
+ {
+ accum = ((unsigned short) i << 2);
+ for ( j = 0; j < 8; j++ )
+ {
+ if ((accum <<= 1) & 0x400) accum ^= CRC10_POLYNOMIAL;
+ }
+ verify_crc10_table[i] = accum;
+ }
+ assert(memcmp(verify_crc10_table,
+ crc10_table,
+ sizeof(verify_crc10_table)) == 0);
+#undef CRC10_POLYNOMIAL
+}
+
+uint16_t
+verify_crc10_cksum(uint16_t accum, const u_char *p, int length)
+{
+ int i;
+
+ for ( i = 0; i < length; i++ )
+ {
+ accum = ((accum << 8) & 0x3ff)
+ ^ crc10_table[( accum >> 2) & 0xff]
+ ^ *p++;
+ }
+ return accum;
+}
+
+/* precompute checksum tables */
+void
+init_checksum(void) {
+
+ init_crc10_table();
+
+}
+
+/*
+ * Creates the OSI Fletcher checksum. See 8473-1, Appendix C, section C.3.
+ * The checksum field of the passed PDU does not need to be reset to zero.
+ */
+uint16_t
+create_osi_cksum (const uint8_t *pptr, int checksum_offset, int length)
+{
+
+ int x;
+ int y;
+ uint32_t mul;
+ uint32_t c0;
+ uint32_t c1;
+ uint16_t checksum;
+ int idx;
+
+ c0 = 0;
+ c1 = 0;
+
+ for (idx = 0; idx < length; idx++) {
+ /*
+ * Ignore the contents of the checksum field.
+ */
+ if (idx == checksum_offset ||
+ idx == checksum_offset+1) {
+ c1 += c0;
+ pptr++;
+ } else {
+ c0 = c0 + *(pptr++);
+ c1 += c0;
+ }
+ }
+
+ c0 = c0 % 255;
+ c1 = c1 % 255;
+
+ mul = (length - checksum_offset)*(c0);
+
+ x = mul - c0 - c1;
+ y = c1 - mul - 1;
+
+ if ( y >= 0 ) y++;
+ if ( x < 0 ) x--;
+
+ x %= 255;
+ y %= 255;
+
+
+ if (x == 0) x = 255;
+ if (y == 0) y = 255;
+
+ y &= 0x00FF;
+ checksum = ((x << 8) | y);
+
+ return checksum;
+}
diff --git a/cmake/Modules/FindCRYPTO.cmake b/cmake/Modules/FindCRYPTO.cmake
new file mode 100644
index 0000000..453c651
--- /dev/null
+++ b/cmake/Modules/FindCRYPTO.cmake
@@ -0,0 +1,24 @@
+#
+# Try to find libcrypto.
+#
+
+# Try to find the header
+find_path(CRYPTO_INCLUDE_DIR openssl/crypto.h)
+
+# Try to find the library
+find_library(CRYPTO_LIBRARY crypto)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(CRYPTO
+ DEFAULT_MSG
+ CRYPTO_INCLUDE_DIR
+ CRYPTO_LIBRARY
+)
+
+mark_as_advanced(
+ CRYPTO_INCLUDE_DIR
+ CRYPTO_LIBRARY
+)
+
+set(CRYPTO_INCLUDE_DIRS ${CRYPTO_INCLUDE_DIR})
+set(CRYPTO_LIBRARIES ${CRYPTO_LIBRARY})
diff --git a/cmake/Modules/FindPCAP.cmake b/cmake/Modules/FindPCAP.cmake
new file mode 100644
index 0000000..1107465
--- /dev/null
+++ b/cmake/Modules/FindPCAP.cmake
@@ -0,0 +1,462 @@
+#
+# Try to find libpcap.
+#
+# To tell this module where to look, a user may set the environment variable
+# PCAP_ROOT to point cmake to the *root* of a directory with include and
+# lib subdirectories for pcap.dll (e.g WpdPack or npcap-sdk).
+# Alternatively, PCAP_ROOT may also be set from cmake command line or GUI
+# (e.g cmake -DPCAP_ROOT=C:\path\to\pcap [...])
+#
+
+if(WIN32)
+ #
+ # Building for Windows.
+ #
+ # libpcap isn't set up to install .pc files or pcap-config on Windows,
+ # and it's not clear that either of them would work without a lot
+ # of additional effort. WinPcap doesn't supply them, and neither
+ # does Npcap.
+ #
+ # So just search for them directly. Look for both pcap and wpcap.
+ # Don't bother looking for static libraries; unlike most UN*Xes
+ # (with the exception of AIX), where different extensions are used
+ # for shared and static, Windows uses .lib both for import libraries
+ # for DLLs and for static libraries.
+ #
+ # We don't directly set PCAP_INCLUDE_DIRS or PCAP_LIBRARIES, as
+ # they're not supposed to be cache entries, and find_path() and
+ # find_library() set cache entries.
+ #
+ find_path(PCAP_INCLUDE_DIR pcap.h)
+
+ # The 64-bit Packet.lib is located under /x64
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ #
+ # For the WinPcap and Npcap SDKs, the Lib subdirectory of the top-level
+ # directory contains 32-bit libraries; the 64-bit libraries are in the
+ # Lib/x64 directory.
+ #
+ # The only way to *FORCE* CMake to look in the Lib/x64 directory
+ # without searching in the Lib directory first appears to be to set
+ # CMAKE_LIBRARY_ARCHITECTURE to "x64".
+ #
+ set(CMAKE_LIBRARY_ARCHITECTURE "x64")
+ endif()
+ find_library(PCAP_LIBRARY NAMES pcap wpcap)
+
+ #
+ # Do the standard arg processing, including failing if it's a
+ # required package.
+ #
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(PCAP
+ DEFAULT_MSG
+ PCAP_INCLUDE_DIR
+ PCAP_LIBRARY
+ )
+ mark_as_advanced(
+ PCAP_INCLUDE_DIR
+ PCAP_LIBRARY
+ )
+ if(PCAP_FOUND)
+ set(PCAP_LIBRARIES ${PCAP_LIBRARY})
+ set(PCAP_INCLUDE_DIRS ${PCAP_INCLUDE_DIR})
+ endif()
+else(WIN32)
+ #
+ # Building for UN*X.
+ #
+ # See whether we were handed a QUIET argument, so we can pass it on
+ # to pkg_search_module. Do *NOT* pass on the REQUIRED argument,
+ # because, if pkg-config isn't found, or it is but it has no .pc
+ # files for libpcap, that is *not* necessarily an indication that
+ # libpcap isn't available - not all systems ship pkg-config, and
+ # libpcap didn't have .pc files until libpcap 1.9.0.
+ #
+ if(PCAP_FIND_QUIETLY)
+ set(_quiet "QUIET")
+ endif()
+
+ #
+ # First, try pkg-config.
+ # Before doing so, set the PKG_CONFIG_PATH environment variable
+ # to include all the directories in CMAKE_PREFIX_PATH.
+ #
+ # *If* we were to require CMake 3.1 or later on UN*X,
+ # pkg_search_module() would do this for us, but, for now,
+ # we're not doing that, in case somebody's building with
+ # CMake on some "long-term support" version, predating
+ # CMake 3.1, of an OS that supplies an earlier
+ # version as a package.
+ #
+ # If we ever set a minimum of 3.1 or later on UN*X, we should
+ # remove the environment variable changes.
+ #
+ # This is based on code in the CMake 3.12.4 FindPkgConfig.cmake,
+ # which is "Distributed under the OSI-approved BSD 3-Clause License."
+ #
+ find_package(PkgConfig)
+
+ #
+ # Get the current PKG_CONFIG_PATH setting.
+ #
+ set(_pkg_config_path "$ENV{PKG_CONFIG_PATH}")
+
+ #
+ # Save it, so we can restore it after we run pkg-config.
+ #
+ set(_saved_pkg_config_path "${_pkg_config_path}")
+
+ if(NOT "${CMAKE_PREFIX_PATH}" STREQUAL "")
+ #
+ # Convert it to a CMake-style path, before we add additional
+ # values to it.
+ #
+ if(NOT "${_pkg_config_path}" STREQUAL "")
+ file(TO_CMAKE_PATH "${_pkg_config_path}" _pkg_config_path)
+ endif()
+
+ #
+ # Turn CMAKE_PREFIX_PATH into a list of extra paths to add
+ # to _pkg_config_path.
+ #
+ set(_extra_paths "")
+ list(APPEND _extra_paths ${CMAKE_PREFIX_PATH})
+
+ # Create a list of the possible pkgconfig subfolder (depending on
+ # the system
+ set(_lib_dirs)
+ if(NOT DEFINED CMAKE_SYSTEM_NAME
+ OR (CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$"
+ AND NOT CMAKE_CROSSCOMPILING))
+ if(EXISTS "/etc/debian_version") # is this a debian system ?
+ if(CMAKE_LIBRARY_ARCHITECTURE)
+ list(APPEND _lib_dirs "lib/${CMAKE_LIBRARY_ARCHITECTURE}/pkgconfig")
+ endif()
+ else()
+ # not debian, check the FIND_LIBRARY_USE_LIB32_PATHS and FIND_LIBRARY_USE_LIB64_PATHS properties
+ get_property(uselib32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS)
+ if(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4)
+ list(APPEND _lib_dirs "lib32/pkgconfig")
+ endif()
+ get_property(uselib64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
+ if(uselib64 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
+ list(APPEND _lib_dirs "lib64/pkgconfig")
+ endif()
+ get_property(uselibx32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS)
+ if(uselibx32 AND CMAKE_INTERNAL_PLATFORM_ABI STREQUAL "ELF X32")
+ list(APPEND _lib_dirs "libx32/pkgconfig")
+ endif()
+ endif()
+ endif()
+ if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND NOT CMAKE_CROSSCOMPILING)
+ list(APPEND _lib_dirs "libdata/pkgconfig")
+ endif()
+ list(APPEND _lib_dirs "lib/pkgconfig")
+ list(APPEND _lib_dirs "share/pkgconfig")
+
+ # Check if directories exist and eventually append them to the
+ # pkgconfig path list
+ foreach(_prefix_dir ${_extra_paths})
+ foreach(_lib_dir ${_lib_dirs})
+ if(EXISTS "${_prefix_dir}/${_lib_dir}")
+ list(APPEND _pkg_config_path "${_prefix_dir}/${_lib_dir}")
+ list(REMOVE_DUPLICATES _pkg_config_path)
+ endif()
+ endforeach()
+ endforeach()
+
+ if(NOT "${_pkg_config_path}" STREQUAL "")
+ # remove empty values from the list
+ list(REMOVE_ITEM _pkg_config_path "")
+ file(TO_NATIVE_PATH "${_pkg_config_path}" _pkg_config_path)
+ if(UNIX)
+ string(REPLACE ";" ":" _pkg_config_path "${_pkg_config_path}")
+ string(REPLACE "\\ " " " _pkg_config_path "${_pkg_config_path}")
+ endif()
+ set(ENV{PKG_CONFIG_PATH} "${_pkg_config_path}")
+ endif()
+ endif()
+ pkg_search_module(CONFIG_PCAP ${_quiet} libpcap)
+ set(ENV{PKG_CONFIG_PATH} "${_saved_pkg_config_path}")
+
+ if(NOT CONFIG_PCAP_FOUND)
+ #
+ # That didn't work. Try pcap-config.
+ #
+ find_program(PCAP_CONFIG pcap-config)
+ if(PCAP_CONFIG)
+ #
+ # We have pcap-config; use it.
+ #
+ if(NOT "${_quiet}" STREQUAL "QUIET")
+ message(STATUS "Found pcap-config")
+ endif()
+
+ #
+ # If this is a vendor-supplied pcap-config, which we define as
+ # being "a pcap-config in /usr/bin or /usr/ccs/bin" (the latter
+ # is for Solaris and Sun/Oracle Studio), there are some issues.
+ # Work around them.
+ #
+ if("${PCAP_CONFIG}" STREQUAL /usr/bin/pcap-config OR
+ "${PCAP_CONFIG}" STREQUAL /usr/ccs/bin/pcap-config)
+ #
+ # It's vendor-supplied.
+ #
+ if(APPLE)
+ #
+ # This is macOS or another Darwin-based OS.
+ #
+ # That means that /usr/bin/pcap-config it may provide
+ # -I/usr/local/include with --cflags and -L/usr/local/lib
+ # with --libs; if there's no pcap installed under /usr/local,
+ # that will cause the build to fail, and if there is a pcap
+ # installed there, you'll get that pcap even if you don't
+ # want it. Remember that, so we ignore those values.
+ #
+ set(_broken_apple_pcap_config TRUE)
+ elseif(CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND CMAKE_SYSTEM_VERSION MATCHES "5[.][0-9.]*")
+ #
+ # This is Solaris 2 or later, i.e. SunOS 5.x.
+ #
+ # At least on Solaris 11; there's /usr/bin/pcap-config, which
+ # reports -L/usr/lib with --libs, causing the 32-bit libraries
+ # to be found, and there's /usr/bin/{64bitarch}/pcap-config,
+ # where {64bitarch} is a name for the 64-bit version of the
+ # instruction set, which reports -L /usr/lib/{64bitarch},
+ # causing the 64-bit libraries to be found.
+ #
+ # So if we're building 64-bit targets, we replace PCAP_CONFIG
+ # with /usr/bin/{64bitarch}; we get {64bitarch} as the
+ # output of "isainfo -n".
+ #
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ execute_process(COMMAND "isainfo" "-n"
+ RESULT_VARIABLE ISAINFO_RESULT
+ OUTPUT_VARIABLE ISAINFO_OUTPUT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ if(ISAINFO_RESULT EQUAL 0)
+ #
+ # Success - change PCAP_CONFIG.
+ #
+ string(REPLACE "/bin/" "/bin/${ISAINFO_OUTPUT}/" PCAP_CONFIG "${PCAP_CONFIG}")
+ endif()
+ endif()
+ endif()
+ endif()
+
+ #
+ # Now get the include directories.
+ #
+ execute_process(COMMAND "${PCAP_CONFIG}" "--cflags"
+ RESULT_VARIABLE PCAP_CONFIG_RESULT
+ OUTPUT_VARIABLE PCAP_CONFIG_OUTPUT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ if(NOT PCAP_CONFIG_RESULT EQUAL 0)
+ message(FATAL_ERROR "pcap-config --cflags failed")
+ endif()
+ separate_arguments(CFLAGS_LIST UNIX_COMMAND ${PCAP_CONFIG_OUTPUT})
+ set(CONFIG_PCAP_INCLUDE_DIRS "")
+ foreach(_arg IN LISTS CFLAGS_LIST)
+ if(_arg MATCHES "^-I")
+ #
+ # Extract the directory by removing the -I.
+ #
+ string(REGEX REPLACE "-I" "" _dir ${_arg})
+ #
+ # Work around macOS (and probably other Darwin) brokenness,
+ # by not adding /usr/local/include if it's from the broken
+ # Apple pcap-config.
+ #
+ if(NOT _broken_apple_pcap_config OR
+ NOT "${_dir}" STREQUAL /usr/local/include)
+ # Add it to CONFIG_PCAP_INCLUDE_DIRS
+ list(APPEND CONFIG_PCAP_INCLUDE_DIRS ${_dir})
+ endif()
+ endif()
+ endforeach()
+
+ #
+ # Now, get the library directories and libraries for dynamic linking.
+ #
+ execute_process(COMMAND "${PCAP_CONFIG}" "--libs"
+ RESULT_VARIABLE PCAP_CONFIG_RESULT
+ OUTPUT_VARIABLE PCAP_CONFIG_OUTPUT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ if(NOT PCAP_CONFIG_RESULT EQUAL 0)
+ message(FATAL_ERROR "pcap-config --libs failed")
+ endif()
+ separate_arguments(LIBS_LIST UNIX_COMMAND ${PCAP_CONFIG_OUTPUT})
+ set(CONFIG_PCAP_LIBRARY_DIRS "")
+ set(CONFIG_PCAP_LIBRARIES "")
+ foreach(_arg IN LISTS LIBS_LIST)
+ if(_arg MATCHES "^-L")
+ #
+ # Extract the directory by removing the -L.
+ #
+ string(REGEX REPLACE "-L" "" _dir ${_arg})
+ #
+ # Work around macOS (and probably other Darwin) brokenness,
+ # by not adding /usr/local/lib if it's from the broken
+ # Apple pcap-config.
+ #
+ if(NOT _broken_apple_pcap_config OR
+ NOT "${_dir}" STREQUAL /usr/local/lib)
+ # Add this directory to CONFIG_PCAP_LIBRARY_DIRS
+ list(APPEND CONFIG_PCAP_LIBRARY_DIRS ${_dir})
+ endif()
+ elseif(_arg MATCHES "^-l")
+ string(REGEX REPLACE "-l" "" _lib ${_arg})
+ list(APPEND CONFIG_PCAP_LIBRARIES ${_lib})
+ endif()
+ endforeach()
+
+ #
+ # Now, get the library directories and libraries for static linking.
+ #
+ execute_process(COMMAND "${PCAP_CONFIG}" "--libs" "--static"
+ RESULT_VARIABLE PCAP_CONFIG_RESULT
+ OUTPUT_VARIABLE PCAP_CONFIG_OUTPUT
+ )
+ if(NOT PCAP_CONFIG_RESULT EQUAL 0)
+ message(FATAL_ERROR "pcap-config --libs --static failed")
+ endif()
+ separate_arguments(LIBS_LIST UNIX_COMMAND ${PCAP_CONFIG_OUTPUT})
+ set(CONFIG_PCAP_STATIC_LIBRARY_DIRS "")
+ set(CONFIG_PCAP_STATIC_LIBRARIES "")
+ foreach(_arg IN LISTS LIBS_LIST)
+ if(_arg MATCHES "^-L")
+ #
+ # Extract the directory by removing the -L.
+ #
+ string(REGEX REPLACE "-L" "" _dir ${_arg})
+ #
+ # Work around macOS (and probably other Darwin) brokenness,
+ # by not adding /usr/local/lib if it's from the broken
+ # Apple pcap-config.
+ #
+ if(NOT _broken_apple_pcap_config OR
+ NOT "${_dir}" STREQUAL /usr/local/lib)
+ # Add this directory to CONFIG_PCAP_STATIC_LIBRARY_DIRS
+ list(APPEND CONFIG_PCAP_STATIC_LIBRARY_DIRS ${_dir})
+ endif()
+ elseif(_arg MATCHES "^-l")
+ string(REGEX REPLACE "-l" "" _lib ${_arg})
+ #
+ # Try to find that library, so we get its full path, as
+ # we do with dynamic libraries.
+ #
+ list(APPEND CONFIG_PCAP_STATIC_LIBRARIES ${_lib})
+ endif()
+ endforeach()
+
+ #
+ # We've set CONFIG_PCAP_INCLUDE_DIRS, CONFIG_PCAP_LIBRARIES, and
+ # CONFIG_PCAP_STATIC_LIBRARIES above; set CONFIG_PCAP_FOUND.
+ #
+ set(CONFIG_PCAP_FOUND YES)
+ endif()
+ endif()
+
+ #
+ # If CONFIG_PCAP_FOUND is set, we have information from pkg-config and
+ # pcap-config; we need to convert library names to library full paths.
+ #
+ # If it's not set, we have to look for the libpcap headers and library
+ # ourselves.
+ #
+ if(CONFIG_PCAP_FOUND)
+ #
+ # Use CONFIG_PCAP_INCLUDE_DIRS as the value for PCAP_INCLUDE_DIRS.
+ #
+ set(PCAP_INCLUDE_DIRS "${CONFIG_PCAP_INCLUDE_DIRS}")
+
+ #
+ # CMake *really* doesn't like the notion of specifying
+ # "here are the directories in which to look for libraries"
+ # except in find_library() calls; it *really* prefers using
+ # full paths to library files, rather than library names.
+ #
+ foreach(_lib IN LISTS CONFIG_PCAP_LIBRARIES)
+ find_library(_libfullpath ${_lib} HINTS ${CONFIG_PCAP_LIBRARY_DIRS})
+ list(APPEND PCAP_LIBRARIES ${_libfullpath})
+ #
+ # Remove that from the cache; we're using it as a local variable,
+ # but find_library insists on making it a cache variable.
+ #
+ unset(_libfullpath CACHE)
+ endforeach()
+
+ #
+ # Now do the same for the static libraries.
+ #
+ set(SAVED_CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES}")
+ set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
+ foreach(_lib IN LISTS CONFIG_PCAP_STATIC_LIBRARIES)
+ find_library(_libfullpath ${_lib} HINTS ${CONFIG_PCAP_LIBRARY_DIRS})
+ list(APPEND PCAP_STATIC_LIBRARIES ${_libfullpath})
+ #
+ # Remove that from the cache; we're using it as a local variable,
+ # but find_library insists on making it a cache variable.
+ #
+ unset(_libfullpath CACHE)
+ endforeach()
+ set(CMAKE_FIND_LIBRARY_SUFFIXES "${SAVED_CMAKE_FIND_LIBRARY_SUFFIXES}")
+
+ #
+ # We found libpcap using pkg-config or pcap-config.
+ #
+ set(PCAP_FOUND YES)
+ else(CONFIG_PCAP_FOUND)
+ #
+ # We didn't have pkg-config, or we did but it didn't have .pc files
+ # for libpcap, and we don't have pkg-config, so we have to look for
+ # the headers and libraries ourself.
+ #
+ # We don't directly set PCAP_INCLUDE_DIRS or PCAP_LIBRARIES, as
+ # they're not supposed to be cache entries, and find_path() and
+ # find_library() set cache entries.
+ #
+ # Try to find the header file.
+ #
+ find_path(PCAP_INCLUDE_DIR pcap.h)
+
+ #
+ # Try to find the library
+ #
+ find_library(PCAP_LIBRARY pcap)
+
+ # Try to find the static library (XXX - what about AIX?)
+ set(SAVED_CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES}")
+ set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
+ find_library(PCAP_STATIC_LIBRARY pcap)
+ set(CMAKE_FIND_LIBRARY_SUFFIXES "${SAVED_CMAKE_FIND_LIBRARY_SUFFIXES}")
+
+ #
+ # This will fail if REQUIRED is set and PCAP_INCLUDE_DIR or
+ # PCAP_LIBRARY aren't set.
+ #
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(PCAP
+ DEFAULT_MSG
+ PCAP_INCLUDE_DIR
+ PCAP_LIBRARY
+ )
+
+ mark_as_advanced(
+ PCAP_INCLUDE_DIR
+ PCAP_LIBRARY
+ PCAP_STATIC_LIBRARY
+ )
+
+ if(PCAP_FOUND)
+ set(PCAP_INCLUDE_DIRS ${PCAP_INCLUDE_DIR})
+ set(PCAP_LIBRARIES ${PCAP_LIBRARY})
+ set(PCAP_STATIC_LIBRARIES ${PCAP_STATIC_LIBRARY})
+ endif(PCAP_FOUND)
+ endif(CONFIG_PCAP_FOUND)
+endif(WIN32)
diff --git a/cmake/Modules/FindSMI.cmake b/cmake/Modules/FindSMI.cmake
new file mode 100644
index 0000000..98c1071
--- /dev/null
+++ b/cmake/Modules/FindSMI.cmake
@@ -0,0 +1,24 @@
+#
+# Try to find libsmi.
+#
+
+# Try to find the header
+find_path(SMI_INCLUDE_DIR smi.h)
+
+# Try to find the library
+find_library(SMI_LIBRARY smi)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(SMI
+ DEFAULT_MSG
+ SMI_INCLUDE_DIR
+ SMI_LIBRARY
+)
+
+mark_as_advanced(
+ SMI_INCLUDE_DIR
+ SMI_LIBRARY
+)
+
+set(SMI_INCLUDE_DIRS ${SMI_INCLUDE_DIR})
+set(SMI_LIBRARIES ${SMI_LIBRARY})
diff --git a/cmake_uninstall.cmake.in b/cmake_uninstall.cmake.in
new file mode 100644
index 0000000..2037e36
--- /dev/null
+++ b/cmake_uninstall.cmake.in
@@ -0,0 +1,21 @@
+if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+ message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+
+file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
+string(REGEX REPLACE "\n" ";" files "${files}")
+foreach(file ${files})
+ message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
+ if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+ exec_program(
+ "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
+ OUTPUT_VARIABLE rm_out
+ RETURN_VALUE rm_retval
+ )
+ if(NOT "${rm_retval}" STREQUAL 0)
+ message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
+ endif(NOT "${rm_retval}" STREQUAL 0)
+ else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+ message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
+ endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+endforeach(file)
diff --git a/cmakeconfig.h.in b/cmakeconfig.h.in
new file mode 100644
index 0000000..02a4a35
--- /dev/null
+++ b/cmakeconfig.h.in
@@ -0,0 +1,290 @@
+/* cmakeconfig.h.in */
+
+/* Define to 1 if arpa/inet.h declares `ether_ntohost' */
+#cmakedefine ARPA_INET_H_DECLARES_ETHER_NTOHOST 1
+
+/* define if you want to build the possibly-buggy SMB printer */
+#cmakedefine ENABLE_SMB 1
+
+/* Define to 1 if you have the `bpf_dump' function. */
+#cmakedefine HAVE_BPF_DUMP 1
+
+/* capsicum support available */
+#cmakedefine HAVE_CAPSICUM 1
+
+/* Define to 1 if you have the `cap_enter' function. */
+#cmakedefine HAVE_CAP_ENTER 1
+
+/* Define to 1 if you have the `cap_ioctls_limit' function. */
+#cmakedefine HAVE_CAP_IOCTLS_LIMIT 1
+
+/* Define to 1 if you have the <cap-ng.h> header file. */
+#cmakedefine HAVE_CAP_NG_H 1
+
+/* Define to 1 if you have the `cap_rights_limit' function. */
+#cmakedefine HAVE_CAP_RIGHTS_LIMIT 1
+
+/* Casper support available */
+#cmakedefine HAVE_CASPER 1
+
+/* Define to 1 if you have the declaration of `ether_ntohost' */
+#cmakedefine HAVE_DECL_ETHER_NTOHOST 1
+
+/* Define to 1 if you have the `ether_ntohost' function. */
+#cmakedefine HAVE_ETHER_NTOHOST 1
+
+/* Define to 1 if you have the `EVP_CIPHER_CTX_new' function. */
+#cmakedefine HAVE_EVP_CIPHER_CTX_NEW 1
+
+/* Define to 1 if you have the `EVP_DecryptInit_ex' function. */
+#cmakedefine HAVE_EVP_DECRYPTINIT_EX 1
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#cmakedefine HAVE_FCNTL_H 1
+
+/* Define to 1 if you have the `fork' function. */
+#cmakedefine HAVE_FORK 1
+
+/* Define to 1 if you have the `getopt_long' function. */
+#cmakedefine HAVE_GETOPT_LONG 1
+
+/* define if you have getrpcbynumber() */
+#cmakedefine HAVE_GETRPCBYNUMBER 1
+
+/* Define to 1 if you have the `getservent' function. */
+#cmakedefine HAVE_GETSERVENT 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#cmakedefine HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `cap-ng' library (-lcap-ng). */
+#cmakedefine HAVE_LIBCAP_NG 1
+
+/* Define to 1 if you have the `crypto' library (-lcrypto). */
+#cmakedefine HAVE_LIBCRYPTO 1
+
+/* Define to 1 if you have the `rpc' library (-lrpc). */
+#cmakedefine HAVE_LIBRPC 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#cmakedefine HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the <net/if.h> header file. */
+#cmakedefine HAVE_NET_IF_H 1
+
+/* Define to 1 if you have the `openat' function. */
+#cmakedefine HAVE_OPENAT 1
+
+/* Define to 1 if you have the <openssl/evp.h> header file. */
+#cmakedefine HAVE_OPENSSL_EVP_H 1
+
+/* define if the OS provides AF_INET6 and struct in6_addr */
+#cmakedefine HAVE_OS_IPV6_SUPPORT 1
+
+/* if there's an os_proto.h for this platform, to use additional prototypes */
+#cmakedefine HAVE_OS_PROTO_H 1
+
+/* Define to 1 if you have the `pcap_breakloop' function. */
+#cmakedefine HAVE_PCAP_BREAKLOOP 1
+
+/* Define to 1 if you have the `pcap_create' function. */
+#cmakedefine HAVE_PCAP_CREATE 1
+
+/* define if libpcap has pcap_datalink_name_to_val() */
+#cmakedefine HAVE_PCAP_DATALINK_NAME_TO_VAL 1
+
+/* define if libpcap has pcap_datalink_val_to_description() */
+#cmakedefine HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION 1
+
+/* define if libpcap has pcap_debug */
+#cmakedefine HAVE_PCAP_DEBUG 1
+
+/* Define to 1 if you have the `pcap_dump_flush' function. */
+#cmakedefine HAVE_PCAP_DUMP_FLUSH 1
+
+/* Define to 1 if you have the `pcap_dump_ftell' function. */
+#cmakedefine HAVE_PCAP_DUMP_FTELL 1
+
+/* Define to 1 if you have the `pcap_dump_ftell64' function. */
+#cmakedefine HAVE_PCAP_DUMP_FTELL64 1
+
+/* Define to 1 if you have the `pcap_findalldevs' function. */
+#cmakedefine HAVE_PCAP_FINDALLDEVS 1
+
+/* Define to 1 if you have the `pcap_findalldevs_ex' function. */
+#cmakedefine HAVE_PCAP_FINDALLDEVS_EX 1
+
+/* Define to 1 if you have the `pcap_free_datalinks' function. */
+#cmakedefine HAVE_PCAP_FREE_DATALINKS 1
+
+/* Define to 1 if the system has the type `pcap_if_t'. */
+#cmakedefine HAVE_PCAP_IF_T 1
+
+/* Define to 1 if you have the `pcap_lib_version' function. */
+#cmakedefine HAVE_PCAP_LIB_VERSION 1
+
+/* define if libpcap has pcap_list_datalinks() */
+#cmakedefine HAVE_PCAP_LIST_DATALINKS 1
+
+/* Define to 1 if you have the `pcap_open' function. */
+#cmakedefine HAVE_PCAP_OPEN 1
+
+/* Define to 1 if you have the <pcap/pcap-inttypes.h> header file. */
+#cmakedefine HAVE_PCAP_PCAP_INTTYPES_H 1
+
+/* Define to 1 if you have the `pcap_setdirection' function. */
+#cmakedefine HAVE_PCAP_SETDIRECTION 1
+
+/* Define to 1 if you have the `pcap_set_datalink' function. */
+#cmakedefine HAVE_PCAP_SET_DATALINK 1
+
+/* Define to 1 if you have the `pcap_set_immediate_mode' function. */
+#cmakedefine HAVE_PCAP_SET_IMMEDIATE_MODE 1
+
+/* Define to 1 if you have the `pcap_set_optimizer_debug' function. */
+#cmakedefine HAVE_PCAP_SET_OPTIMIZER_DEBUG 1
+
+/* Define to 1 if you have the `pcap_set_parser_debug' function. */
+#cmakedefine HAVE_PCAP_SET_PARSER_DEBUG 1
+
+/* Define to 1 if you have the `pcap_set_tstamp_precision' function. */
+#cmakedefine HAVE_PCAP_SET_TSTAMP_PRECISION 1
+
+/* Define to 1 if you have the `pcap_set_tstamp_type' function. */
+#cmakedefine HAVE_PCAP_SET_TSTAMP_TYPE 1
+
+/* define if libpcap has pcap_version */
+#cmakedefine HAVE_PCAP_VERSION 1
+
+/* Define to 1 if you have the `pcap_wsockinit' function. */
+#cmakedefine HAVE_PCAP_WSOCKINIT 1
+
+/* Define to 1 if you have the `pfopen' function. */
+#cmakedefine HAVE_PFOPEN 1
+
+/* Define to 1 if you have the <rpc/rpcent.h> header file. */
+#cmakedefine HAVE_RPC_RPCENT_H 1
+
+/* Define to 1 if you have the <rpc/rpc.h> header file. */
+#cmakedefine HAVE_RPC_RPC_H 1
+
+/* Define to 1 if you have the `setlinebuf' function. */
+#cmakedefine HAVE_SETLINEBUF 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#cmakedefine HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#cmakedefine HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strdup' function. */
+#cmakedefine HAVE_STRDUP 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#cmakedefine HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#cmakedefine HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strlcat' function. */
+#cmakedefine HAVE_STRLCAT 1
+
+/* Define to 1 if you have the `strlcpy' function. */
+#cmakedefine HAVE_STRLCPY 1
+
+/* Define to 1 if you have the `strsep' function. */
+#cmakedefine HAVE_STRSEP 1
+
+/* Define to 1 if the system has the type `struct ether_addr'. */
+#cmakedefine HAVE_STRUCT_ETHER_ADDR 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#cmakedefine HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#cmakedefine HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if the system has the type `uintptr_t'. */
+#cmakedefine HAVE_UINTPTR_T 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#cmakedefine HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `vfork' function. */
+#cmakedefine HAVE_VFORK 1
+
+/* Define to 1 if you have the `wsockinit' function. */
+#cmakedefine HAVE_WSOCKINIT 1
+
+/* define if libpcap has yydebug */
+#cmakedefine HAVE_YYDEBUG 1
+
+/* Define to 1 if netinet/ether.h declares `ether_ntohost' */
+#cmakedefine NETINET_ETHER_H_DECLARES_ETHER_NTOHOST 1
+
+/* Define to 1 if netinet/if_ether.h declares `ether_ntohost' */
+#cmakedefine NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST 1
+
+/* Define to 1 if net/ethernet.h declares `ether_ntohost' */
+#cmakedefine NET_ETHERNET_H_DECLARES_ETHER_NTOHOST 1
+
+/* Define to the address where bug reports for this package should be sent. */
+#cmakedefine PACKAGE_BUGREPORT ""
+
+/* Define to the full name of this package. */
+#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@"
+
+/* Define to the full name and version of this package. */
+#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@"
+
+/* Define to the one symbol short name of this package. */
+#cmakedefine PACKAGE_TARNAME ""
+
+/* Define to the home page for this package. */
+#cmakedefine PACKAGE_URL ""
+
+/* Define to the version of this package. */
+#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@"
+
+/* Define to 1 if you have the ANSI C header files. */
+#cmakedefine STDC_HEADERS 1
+
+/* Define to 1 if sys/ethernet.h declares `ether_ntohost' */
+#cmakedefine SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST 1
+
+/* define if you have ether_ntohost() and it works */
+#cmakedefine USE_ETHER_NTOHOST 1
+
+/* Define if you enable support for libsmi */
+#cmakedefine USE_LIBSMI 1
+
+/* define if should chroot when dropping privileges */
+#cmakedefine WITH_CHROOT "@WITH_CHROOT@"
+
+/* define if should drop privileges by default */
+#cmakedefine WITH_USER "@WITH_USER@"
+
+/* define on AIX to get certain functions */
+#cmakedefine _SUN 1
+
+/* to handle Ultrix compilers that don't support const in prototypes */
+#cmakedefine const 1
+
+/* Define as token for inline if inlining supported */
+#cmakedefine inline 1
+
+/* Define to `uint16_t' if u_int16_t not defined. */
+#cmakedefine u_int16_t 1
+
+/* Define to `uint32_t' if u_int32_t not defined. */
+#cmakedefine u_int32_t 1
+
+/* Define to `uint64_t' if u_int64_t not defined. */
+#cmakedefine u_int64_t 1
+
+/* Define to `uint8_t' if u_int8_t not defined. */
+#cmakedefine u_int8_t 1
+
+/* Define to the type of an unsigned integer type wide enough to hold a
+ pointer, if such a type exists, and if the system does not define it. */
+#cmakedefine uintptr_t 1
diff --git a/compiler-tests.h b/compiler-tests.h
new file mode 100644
index 0000000..d4fe177
--- /dev/null
+++ b/compiler-tests.h
@@ -0,0 +1,196 @@
+/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */
+/*
+ * Copyright (c) 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the Computer Systems
+ * Engineering Group at Lawrence Berkeley Laboratory.
+ * 4. Neither the name of the University nor of the Laboratory may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef nd_compiler_tests_h
+#define nd_compiler_tests_h
+
+/*
+ * This was introduced by Clang:
+ *
+ * https://clang.llvm.org/docs/LanguageExtensions.html#has-attribute
+ *
+ * in some version (which version?); it has been picked up by GCC 5.0.
+ */
+#ifndef __has_attribute
+ /*
+ * It's a macro, so you can check whether it's defined to check
+ * whether it's supported.
+ *
+ * If it's not, define it to always return 0, so that we move on to
+ * the fallback checks.
+ */
+ #define __has_attribute(x) 0
+#endif
+
+/*
+ * Note that the C90 spec's "6.8.1 Conditional inclusion" and the
+ * C99 spec's and C11 spec's "6.10.1 Conditional inclusion" say:
+ *
+ * Prior to evaluation, macro invocations in the list of preprocessing
+ * tokens that will become the controlling constant expression are
+ * replaced (except for those macro names modified by the defined unary
+ * operator), just as in normal text. If the token "defined" is
+ * generated as a result of this replacement process or use of the
+ * "defined" unary operator does not match one of the two specified
+ * forms prior to macro replacement, the behavior is undefined.
+ *
+ * so you shouldn't use defined() in a #define that's used in #if or
+ * #elif. Some versions of Clang, for example, will warn about this.
+ *
+ * Instead, we check whether the pre-defined macros for particular
+ * compilers are defined and, if not, define the "is this version XXX
+ * or a later version of this compiler" macros as 0.
+ */
+
+/*
+ * Check whether this is GCC major.minor or a later release, or some
+ * compiler that claims to be "just like GCC" of that version or a
+ * later release.
+ */
+
+#if ! defined(__GNUC__)
+ /* Not GCC and not "just like GCC" */
+ #define ND_IS_AT_LEAST_GNUC_VERSION(major, minor) 0
+#else
+ /* GCC or "just like GCC" */
+ #define ND_IS_AT_LEAST_GNUC_VERSION(major, minor) \
+ (__GNUC__ > (major) || \
+ (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
+#endif
+
+/*
+ * Check whether this is Clang major.minor or a later release.
+ */
+
+#if !defined(__clang__)
+ /* Not Clang */
+ #define ND_IS_AT_LEAST_CLANG_VERSION(major, minor) 0
+#else
+ /* Clang */
+ #define ND_IS_AT_LEAST_CLANG_VERSION(major, minor) \
+ (__clang_major__ > (major) || \
+ (__clang_major__ == (major) && __clang_minor__ >= (minor)))
+#endif
+
+/*
+ * Check whether this is Sun C/SunPro C/Oracle Studio major.minor
+ * or a later release.
+ *
+ * The version number in __SUNPRO_C is encoded in hex BCD, with the
+ * uppermost hex digit being the major version number, the next
+ * one or two hex digits being the minor version number, and
+ * the last digit being the patch version.
+ *
+ * It represents the *compiler* version, not the product version;
+ * see
+ *
+ * https://sourceforge.net/p/predef/wiki/Compilers/
+ *
+ * for a partial mapping, which we assume continues for later
+ * 12.x product releases.
+ */
+
+#if ! defined(__SUNPRO_C)
+ /* Not Sun/Oracle C */
+ #define ND_IS_AT_LEAST_SUNC_VERSION(major,minor) 0
+#else
+ /* Sun/Oracle C */
+ #define ND_SUNPRO_VERSION_TO_BCD(major, minor) \
+ (((minor) >= 10) ? \
+ (((major) << 12) | (((minor)/10) << 8) | (((minor)%10) << 4)) : \
+ (((major) << 8) | ((minor) << 4)))
+ #define ND_IS_AT_LEAST_SUNC_VERSION(major,minor) \
+ (__SUNPRO_C >= ND_SUNPRO_VERSION_TO_BCD((major), (minor)))
+#endif
+
+/*
+ * Check whether this is IBM XL C major.minor or a later release.
+ *
+ * The version number in __xlC__ has the major version in the
+ * upper 8 bits and the minor version in the lower 8 bits.
+ * On AIX __xlC__ is always defined, __ibmxl__ becomes defined in XL C 16.1.
+ * On Linux since XL C 13.1.6 __xlC__ is not defined by default anymore, but
+ * __ibmxl__ is defined since at least XL C 13.1.1.
+ */
+
+#if ! defined(__xlC__) && ! defined(__ibmxl__)
+ /* Not XL C */
+ #define ND_IS_AT_LEAST_XL_C_VERSION(major,minor) 0
+ #define ND_IS_AT_LEAST_XL_C_MODFIX(modification, fixlevel) 0
+#else
+ /* XL C */
+ #if defined(__ibmxl__)
+ /*
+ * Later Linux version of XL C; use __ibmxl_version__ to test
+ * the version.
+ */
+ #define ND_IS_AT_LEAST_XL_C_VERSION(major, minor) \
+ (__ibmxl_version__ > (major) || \
+ (__ibmxl_version__ == (major) && __ibmxl_release__ >= (minor)))
+ #define ND_IS_AT_LEAST_XL_C_MODFIX(modification, fixlevel) \
+ (__ibmxl_modification__ > (modification) || \
+ (__ibmxl_modification__ == (modification) && \
+ __ibmxl_ptf_fix_level__ >= (fixlevel)))
+ #else /* __ibmxl__ */
+ /*
+ * __ibmxl__ not defined; use __xlC__ to test the version.
+ */
+ #define ND_IS_AT_LEAST_XL_C_VERSION(major, minor) \
+ (__xlC__ >= (((major) << 8) | (minor)))
+ #define ND_IS_AT_LEAST_XL_C_MODFIX(modification, fixlevel) \
+ ((((modification) << 8) | (fixlevel)) >= __xlC_ver__)
+ #endif /* __ibmxl__ */
+#endif
+
+/*
+ * Check whether this is HP aC++/HP C major.minor or a later release.
+ *
+ * The version number in __HP_aCC is encoded in zero-padded decimal BCD,
+ * with the "A." stripped off, the uppermost two decimal digits being
+ * the major version number, the next two decimal digits being the minor
+ * version number, and the last two decimal digits being the patch version.
+ * (Strip off the A., remove the . between the major and minor version
+ * number, and add two digits of patch.)
+ */
+
+#if ! defined(__HP_aCC)
+ /* Not HP C */
+ #define ND_IS_AT_LEAST_HP_C_VERSION(major,minor) 0
+#else
+ /* HP C */
+ #define ND_IS_AT_LEAST_HP_C_VERSION(major,minor) \
+ (__HP_aCC >= ((major)*10000 + (minor)*100))
+#endif
+
+#endif /* nd_funcattrs_h */
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..69188da
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1774 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright 1992-2023 Free Software Foundation, Inc.
+
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2023-01-01'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
+#
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
+#
+# Please send patches to <config-patches@gnu.org>.
+
+
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Options:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright 1992-2023 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+# Just in case it came from the environment.
+GUESS=
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+tmp=
+# shellcheck disable=SC2172
+trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
+
+set_cc_for_build() {
+ # prevent multiple calls if $tmp is already set
+ test "$tmp" && return 0
+ : "${TMPDIR=/tmp}"
+ # shellcheck disable=SC2039,SC3028
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
+ dummy=$tmp/dummy
+ case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
+ ,,) echo "int x;" > "$dummy.c"
+ for driver in cc gcc c89 c99 ; do
+ if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+ CC_FOR_BUILD=$driver
+ break
+ fi
+ done
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+ esac
+}
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if test -f /.attbin/uname ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case $UNAME_SYSTEM in
+Linux|GNU|GNU/*)
+ LIBC=unknown
+
+ set_cc_for_build
+ cat <<-EOF > "$dummy.c"
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #elif defined(__GLIBC__)
+ LIBC=gnu
+ #else
+ #include <stdarg.h>
+ /* First heuristic to detect musl libc. */
+ #ifdef __DEFINED_va_list
+ LIBC=musl
+ #endif
+ #endif
+ EOF
+ cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ eval "$cc_set_libc"
+
+ # Second heuristic to detect musl libc.
+ if [ "$LIBC" = unknown ] &&
+ command -v ldd >/dev/null &&
+ ldd --version 2>&1 | grep -q ^musl; then
+ LIBC=musl
+ fi
+
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ if [ "$LIBC" = unknown ]; then
+ LIBC=gnu
+ fi
+ ;;
+esac
+
+# Note: order is significant - the case branches are not exclusive.
+
+case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+ echo unknown)`
+ case $UNAME_MACHINE_ARCH in
+ aarch64eb) machine=aarch64_be-unknown ;;
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
+ *) machine=$UNAME_MACHINE_ARCH-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently (or will in the future) and ABI.
+ case $UNAME_MACHINE_ARCH in
+ earm*)
+ os=netbsdelf
+ ;;
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # Determine ABI tags.
+ case $UNAME_MACHINE_ARCH in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case $UNAME_VERSION in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ GUESS=$machine-${os}${release}${abi-}
+ ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE
+ ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE
+ ;;
+ *:SecBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE
+ ;;
+ *:LibertyBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE
+ ;;
+ *:MidnightBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE
+ ;;
+ *:ekkoBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE
+ ;;
+ *:SolidBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE
+ ;;
+ *:OS108:*:*)
+ GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE
+ ;;
+ macppc:MirBSD:*:*)
+ GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE
+ ;;
+ *:MirBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE
+ ;;
+ *:Sortix:*:*)
+ GUESS=$UNAME_MACHINE-unknown-sortix
+ ;;
+ *:Twizzler:*:*)
+ GUESS=$UNAME_MACHINE-unknown-twizzler
+ ;;
+ *:Redox:*:*)
+ GUESS=$UNAME_MACHINE-unknown-redox
+ ;;
+ mips:OSF1:*.*)
+ GUESS=mips-dec-osf1
+ ;;
+ alpha:OSF1:*:*)
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ trap '' 0
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case $ALPHA_CPU_TYPE in
+ "EV4 (21064)")
+ UNAME_MACHINE=alpha ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE=alpha ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE=alpha ;;
+ "EV5 (21164)")
+ UNAME_MACHINE=alphaev5 ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE=alphaev56 ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE=alphapca56 ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE=alphapca57 ;;
+ "EV6 (21264)")
+ UNAME_MACHINE=alphaev6 ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE=alphaev67 ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE=alphaev69 ;;
+ "EV7 (21364)")
+ UNAME_MACHINE=alphaev7 ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE=alphaev79 ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ GUESS=$UNAME_MACHINE-dec-osf$OSF_REL
+ ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ GUESS=m68k-unknown-sysv4
+ ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ GUESS=$UNAME_MACHINE-unknown-amigaos
+ ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ GUESS=$UNAME_MACHINE-unknown-morphos
+ ;;
+ *:OS/390:*:*)
+ GUESS=i370-ibm-openedition
+ ;;
+ *:z/VM:*:*)
+ GUESS=s390-ibm-zvmoe
+ ;;
+ *:OS400:*:*)
+ GUESS=powerpc-ibm-os400
+ ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ GUESS=arm-acorn-riscix$UNAME_RELEASE
+ ;;
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
+ GUESS=arm-unknown-riscos
+ ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ GUESS=hppa1.1-hitachi-hiuxmpp
+ ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ case `(/bin/universe) 2>/dev/null` in
+ att) GUESS=pyramid-pyramid-sysv3 ;;
+ *) GUESS=pyramid-pyramid-bsd ;;
+ esac
+ ;;
+ NILE*:*:*:dcosx)
+ GUESS=pyramid-pyramid-svr4
+ ;;
+ DRS?6000:unix:4.0:6*)
+ GUESS=sparc-icl-nx6
+ ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) GUESS=sparc-icl-nx7 ;;
+ esac
+ ;;
+ s390x:SunOS:*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL
+ ;;
+ sun4H:SunOS:5.*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-hal-solaris2$SUN_REL
+ ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris2$SUN_REL
+ ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ GUESS=i386-pc-auroraux$UNAME_RELEASE
+ ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ set_cc_for_build
+ SUN_ARCH=i386
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH=x86_64
+ fi
+ fi
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$SUN_ARCH-pc-solaris2$SUN_REL
+ ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris3$SUN_REL
+ ;;
+ sun4*:SunOS:*:*)
+ case `/usr/bin/arch -k` in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
+ GUESS=sparc-sun-sunos$SUN_REL
+ ;;
+ sun3*:SunOS:*:*)
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
+ ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
+ case `/bin/arch` in
+ sun3)
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
+ ;;
+ sun4)
+ GUESS=sparc-sun-sunos$UNAME_RELEASE
+ ;;
+ esac
+ ;;
+ aushp:SunOS:*:*)
+ GUESS=sparc-auspex-sunos$UNAME_RELEASE
+ ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ GUESS=m68k-milan-mint$UNAME_RELEASE
+ ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ GUESS=m68k-hades-mint$UNAME_RELEASE
+ ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ GUESS=m68k-unknown-mint$UNAME_RELEASE
+ ;;
+ m68k:machten:*:*)
+ GUESS=m68k-apple-machten$UNAME_RELEASE
+ ;;
+ powerpc:machten:*:*)
+ GUESS=powerpc-apple-machten$UNAME_RELEASE
+ ;;
+ RISC*:Mach:*:*)
+ GUESS=mips-dec-mach_bsd4.3
+ ;;
+ RISC*:ULTRIX:*:*)
+ GUESS=mips-dec-ultrix$UNAME_RELEASE
+ ;;
+ VAX*:ULTRIX*:*:*)
+ GUESS=vax-dec-ultrix$UNAME_RELEASE
+ ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ GUESS=clipper-intergraph-clix$UNAME_RELEASE
+ ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
+ dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ GUESS=mips-mips-riscos$UNAME_RELEASE
+ ;;
+ Motorola:PowerMAX_OS:*:*)
+ GUESS=powerpc-motorola-powermax
+ ;;
+ Motorola:*:4.3:PL8-*)
+ GUESS=powerpc-harris-powermax
+ ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ GUESS=powerpc-harris-powermax
+ ;;
+ Night_Hawk:Power_UNIX:*:*)
+ GUESS=powerpc-harris-powerunix
+ ;;
+ m88k:CX/UX:7*:*)
+ GUESS=m88k-harris-cxux7
+ ;;
+ m88k:*:4*:R4*)
+ GUESS=m88k-motorola-sysv4
+ ;;
+ m88k:*:3*:R3*)
+ GUESS=m88k-motorola-sysv3
+ ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
+ then
+ if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
+ test "$TARGET_BINARY_INTERFACE"x = x
+ then
+ GUESS=m88k-dg-dgux$UNAME_RELEASE
+ else
+ GUESS=m88k-dg-dguxbcs$UNAME_RELEASE
+ fi
+ else
+ GUESS=i586-dg-dgux$UNAME_RELEASE
+ fi
+ ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ GUESS=m88k-dolphin-sysv3
+ ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ GUESS=m88k-motorola-sysv3
+ ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ GUESS=m88k-tektronix-sysv3
+ ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ GUESS=m68k-tektronix-bsd
+ ;;
+ *:IRIX*:*:*)
+ IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'`
+ GUESS=mips-sgi-irix$IRIX_REL
+ ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ GUESS=i386-ibm-aix
+ ;;
+ ia64:AIX:*:*)
+ if test -x /usr/bin/oslevel ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
+ fi
+ GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV
+ ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
+ then
+ GUESS=$SYSTEM_NAME
+ else
+ GUESS=rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ GUESS=rs6000-ibm-aix3.2.4
+ else
+ GUESS=rs6000-ibm-aix3.2
+ fi
+ ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if test -x /usr/bin/lslpp ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
+ else
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
+ fi
+ GUESS=$IBM_ARCH-ibm-aix$IBM_REV
+ ;;
+ *:AIX:*:*)
+ GUESS=rs6000-ibm-aix
+ ;;
+ ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
+ GUESS=romp-ibm-bsd4.4
+ ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to
+ ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ GUESS=rs6000-bull-bosx
+ ;;
+ DPX/2?00:B.O.S.:*:*)
+ GUESS=m68k-bull-sysv3
+ ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ GUESS=m68k-hp-bsd
+ ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ GUESS=m68k-hp-bsd4.4
+ ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ case $UNAME_MACHINE in
+ 9000/31?) HP_ARCH=m68000 ;;
+ 9000/[34]??) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if test -x /usr/bin/getconf; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case $sc_cpu_version in
+ 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case $sc_kernel_bits in
+ 32) HP_ARCH=hppa2.0n ;;
+ 64) HP_ARCH=hppa2.0w ;;
+ '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if test "$HP_ARCH" = ""; then
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if test "$HP_ARCH" = hppa2.0w
+ then
+ set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH=hppa2.0w
+ else
+ HP_ARCH=hppa64
+ fi
+ fi
+ GUESS=$HP_ARCH-hp-hpux$HPUX_REV
+ ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ GUESS=ia64-hp-hpux$HPUX_REV
+ ;;
+ 3050*:HI-UX:*:*)
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ GUESS=unknown-hitachi-hiuxwe2
+ ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
+ GUESS=hppa1.1-hp-bsd
+ ;;
+ 9000/8??:4.3bsd:*:*)
+ GUESS=hppa1.0-hp-bsd
+ ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ GUESS=hppa1.0-hp-mpeix
+ ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
+ GUESS=hppa1.1-hp-osf
+ ;;
+ hp8??:OSF1:*:*)
+ GUESS=hppa1.0-hp-osf
+ ;;
+ i*86:OSF1:*:*)
+ if test -x /usr/sbin/sysversion ; then
+ GUESS=$UNAME_MACHINE-unknown-osf1mk
+ else
+ GUESS=$UNAME_MACHINE-unknown-osf1
+ fi
+ ;;
+ parisc*:Lites*:*:*)
+ GUESS=hppa1.1-hp-lites
+ ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ GUESS=c1-convex-bsd
+ ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ GUESS=c34-convex-bsd
+ ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ GUESS=c38-convex-bsd
+ ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ GUESS=c4-convex-bsd
+ ;;
+ CRAY*Y-MP:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=ymp-cray-unicos$CRAY_REL
+ ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=t90-cray-unicos$CRAY_REL
+ ;;
+ CRAY*T3E:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=alphaev5-cray-unicosmk$CRAY_REL
+ ;;
+ CRAY*SV1:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=sv1-cray-unicos$CRAY_REL
+ ;;
+ *:UNICOS/mp:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=craynv-cray-unicosmp$CRAY_REL
+ ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
+ GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+ GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE
+ ;;
+ sparc*:BSD/OS:*:*)
+ GUESS=sparc-unknown-bsdi$UNAME_RELEASE
+ ;;
+ *:BSD/OS:*:*)
+ GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE
+ ;;
+ arm:FreeBSD:*:*)
+ UNAME_PROCESSOR=`uname -p`
+ set_cc_for_build
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi
+ else
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf
+ fi
+ ;;
+ *:FreeBSD:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case $UNAME_PROCESSOR in
+ amd64)
+ UNAME_PROCESSOR=x86_64 ;;
+ i386)
+ UNAME_PROCESSOR=i586 ;;
+ esac
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL
+ ;;
+ i*:CYGWIN*:*)
+ GUESS=$UNAME_MACHINE-pc-cygwin
+ ;;
+ *:MINGW64*:*)
+ GUESS=$UNAME_MACHINE-pc-mingw64
+ ;;
+ *:MINGW*:*)
+ GUESS=$UNAME_MACHINE-pc-mingw32
+ ;;
+ *:MSYS*:*)
+ GUESS=$UNAME_MACHINE-pc-msys
+ ;;
+ i*:PW*:*)
+ GUESS=$UNAME_MACHINE-pc-pw32
+ ;;
+ *:SerenityOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-serenity
+ ;;
+ *:Interix*:*)
+ case $UNAME_MACHINE in
+ x86)
+ GUESS=i586-pc-interix$UNAME_RELEASE
+ ;;
+ authenticamd | genuineintel | EM64T)
+ GUESS=x86_64-unknown-interix$UNAME_RELEASE
+ ;;
+ IA64)
+ GUESS=ia64-unknown-interix$UNAME_RELEASE
+ ;;
+ esac ;;
+ i*:UWIN*:*)
+ GUESS=$UNAME_MACHINE-pc-uwin
+ ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ GUESS=x86_64-pc-cygwin
+ ;;
+ prep*:SunOS:5.*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=powerpcle-unknown-solaris2$SUN_REL
+ ;;
+ *:GNU:*:*)
+ # the GNU system
+ GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'`
+ GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL
+ ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
+ ;;
+ x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*)
+ GUESS="$UNAME_MACHINE-pc-managarm-mlibc"
+ ;;
+ *:[Mm]anagarm:*:*)
+ GUESS="$UNAME_MACHINE-unknown-managarm-mlibc"
+ ;;
+ *:Minix:*:*)
+ GUESS=$UNAME_MACHINE-unknown-minix
+ ;;
+ aarch64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ arm*:Linux:*:*)
+ set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi
+ else
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf
+ fi
+ fi
+ ;;
+ avr32*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ cris:Linux:*:*)
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
+ crisv32:Linux:*:*)
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
+ e2k:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ frv:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ hexagon:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ i*86:Linux:*:*)
+ GUESS=$UNAME_MACHINE-pc-linux-$LIBC
+ ;;
+ ia64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ k1om:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ loongarch32:Linux:*:* | loongarch64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ m32r*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ m68*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ set_cc_for_build
+ IS_GLIBC=0
+ test x"${LIBC}" = xgnu && IS_GLIBC=1
+ sed 's/^ //' << EOF > "$dummy.c"
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #undef mips64
+ #undef mips64el
+ #if ${IS_GLIBC} && defined(_ABI64)
+ LIBCABI=gnuabi64
+ #else
+ #if ${IS_GLIBC} && defined(_ABIN32)
+ LIBCABI=gnuabin32
+ #else
+ LIBCABI=${LIBC}
+ #endif
+ #endif
+
+ #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa64r6
+ #else
+ #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa32r6
+ #else
+ #if defined(__mips64)
+ CPU=mips64
+ #else
+ CPU=mips
+ #endif
+ #endif
+ #endif
+
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ MIPS_ENDIAN=el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ MIPS_ENDIAN=
+ #else
+ MIPS_ENDIAN=
+ #endif
+ #endif
+EOF
+ cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`
+ eval "$cc_set_vars"
+ test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
+ ;;
+ mips64el:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ openrisc*:Linux:*:*)
+ GUESS=or1k-unknown-linux-$LIBC
+ ;;
+ or32:Linux:*:* | or1k*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ padre:Linux:*:*)
+ GUESS=sparc-unknown-linux-$LIBC
+ ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ GUESS=hppa64-unknown-linux-$LIBC
+ ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;;
+ PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;;
+ *) GUESS=hppa-unknown-linux-$LIBC ;;
+ esac
+ ;;
+ ppc64:Linux:*:*)
+ GUESS=powerpc64-unknown-linux-$LIBC
+ ;;
+ ppc:Linux:*:*)
+ GUESS=powerpc-unknown-linux-$LIBC
+ ;;
+ ppc64le:Linux:*:*)
+ GUESS=powerpc64le-unknown-linux-$LIBC
+ ;;
+ ppcle:Linux:*:*)
+ GUESS=powerpcle-unknown-linux-$LIBC
+ ;;
+ riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ GUESS=$UNAME_MACHINE-ibm-linux-$LIBC
+ ;;
+ sh64*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ sh*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ tile*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ vax:Linux:*:*)
+ GUESS=$UNAME_MACHINE-dec-linux-$LIBC
+ ;;
+ x86_64:Linux:*:*)
+ set_cc_for_build
+ CPU=$UNAME_MACHINE
+ LIBCABI=$LIBC
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ ABI=64
+ sed 's/^ //' << EOF > "$dummy.c"
+ #ifdef __i386__
+ ABI=x86
+ #else
+ #ifdef __ILP32__
+ ABI=x32
+ #endif
+ #endif
+EOF
+ cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
+ eval "$cc_set_abi"
+ case $ABI in
+ x86) CPU=i686 ;;
+ x32) LIBCABI=${LIBC}x32 ;;
+ esac
+ fi
+ GUESS=$CPU-pc-linux-$LIBCABI
+ ;;
+ xtensa*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ GUESS=i386-sequent-sysv4
+ ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
+ ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ GUESS=$UNAME_MACHINE-pc-os2-emx
+ ;;
+ i*86:XTS-300:*:STOP)
+ GUESS=$UNAME_MACHINE-unknown-stop
+ ;;
+ i*86:atheos:*:*)
+ GUESS=$UNAME_MACHINE-unknown-atheos
+ ;;
+ i*86:syllable:*:*)
+ GUESS=$UNAME_MACHINE-pc-syllable
+ ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ GUESS=i386-unknown-lynxos$UNAME_RELEASE
+ ;;
+ i*86:*DOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-msdosdjgpp
+ ;;
+ i*86:*:4.*:*)
+ UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL
+ else
+ GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL
+ fi
+ ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL
+ else
+ GUESS=$UNAME_MACHINE-pc-sysv32
+ fi
+ ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configure will decide that
+ # this is a cross-build.
+ GUESS=i586-pc-msdosdjgpp
+ ;;
+ Intel:Mach:3*:*)
+ GUESS=i386-pc-mach3
+ ;;
+ paragon:*:*:*)
+ GUESS=i860-intel-osf1
+ ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4
+ fi
+ ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ GUESS=m68010-convergent-sysv
+ ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ GUESS=m68k-convergent-sysv
+ ;;
+ M680?0:D-NIX:5.3:*)
+ GUESS=m68k-diab-dnix
+ ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ GUESS=m68k-unknown-lynxos$UNAME_RELEASE
+ ;;
+ mc68030:UNIX_System_V:4.*:*)
+ GUESS=m68k-atari-sysv4
+ ;;
+ TSUNAMI:LynxOS:2.*:*)
+ GUESS=sparc-unknown-lynxos$UNAME_RELEASE
+ ;;
+ rs6000:LynxOS:2.*:*)
+ GUESS=rs6000-unknown-lynxos$UNAME_RELEASE
+ ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ GUESS=powerpc-unknown-lynxos$UNAME_RELEASE
+ ;;
+ SM[BE]S:UNIX_SV:*:*)
+ GUESS=mips-dde-sysv$UNAME_RELEASE
+ ;;
+ RM*:ReliantUNIX-*:*:*)
+ GUESS=mips-sni-sysv4
+ ;;
+ RM*:SINIX-*:*:*)
+ GUESS=mips-sni-sysv4
+ ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ GUESS=$UNAME_MACHINE-sni-sysv4
+ else
+ GUESS=ns32k-sni-sysv
+ fi
+ ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ GUESS=i586-unisys-sysv4
+ ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ GUESS=hppa1.1-stratus-sysv4
+ ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ GUESS=i860-stratus-sysv4
+ ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ GUESS=$UNAME_MACHINE-stratus-vos
+ ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ GUESS=hppa1.1-stratus-vos
+ ;;
+ mc68*:A/UX:*:*)
+ GUESS=m68k-apple-aux$UNAME_RELEASE
+ ;;
+ news*:NEWS-OS:6*:*)
+ GUESS=mips-sony-newsos6
+ ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if test -d /usr/nec; then
+ GUESS=mips-nec-sysv$UNAME_RELEASE
+ else
+ GUESS=mips-unknown-sysv$UNAME_RELEASE
+ fi
+ ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ GUESS=powerpc-be-beos
+ ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ GUESS=powerpc-apple-beos
+ ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ GUESS=i586-pc-beos
+ ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ GUESS=i586-pc-haiku
+ ;;
+ ppc:Haiku:*:*) # Haiku running on Apple PowerPC
+ GUESS=powerpc-apple-haiku
+ ;;
+ *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat)
+ GUESS=$UNAME_MACHINE-unknown-haiku
+ ;;
+ SX-4:SUPER-UX:*:*)
+ GUESS=sx4-nec-superux$UNAME_RELEASE
+ ;;
+ SX-5:SUPER-UX:*:*)
+ GUESS=sx5-nec-superux$UNAME_RELEASE
+ ;;
+ SX-6:SUPER-UX:*:*)
+ GUESS=sx6-nec-superux$UNAME_RELEASE
+ ;;
+ SX-7:SUPER-UX:*:*)
+ GUESS=sx7-nec-superux$UNAME_RELEASE
+ ;;
+ SX-8:SUPER-UX:*:*)
+ GUESS=sx8-nec-superux$UNAME_RELEASE
+ ;;
+ SX-8R:SUPER-UX:*:*)
+ GUESS=sx8r-nec-superux$UNAME_RELEASE
+ ;;
+ SX-ACE:SUPER-UX:*:*)
+ GUESS=sxace-nec-superux$UNAME_RELEASE
+ ;;
+ Power*:Rhapsody:*:*)
+ GUESS=powerpc-apple-rhapsody$UNAME_RELEASE
+ ;;
+ *:Rhapsody:*:*)
+ GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE
+ ;;
+ arm64:Darwin:*:*)
+ GUESS=aarch64-apple-darwin$UNAME_RELEASE
+ ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p`
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ if command -v xcode-select > /dev/null 2> /dev/null && \
+ ! xcode-select --print-path > /dev/null 2> /dev/null ; then
+ # Avoid executing cc if there is no toolchain installed as
+ # cc will be a stub that puts up a graphical alert
+ # prompting the user to install developer tools.
+ CC_FOR_BUILD=no_compiler_found
+ else
+ set_cc_for_build
+ fi
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_PPC >/dev/null
+ then
+ UNAME_PROCESSOR=powerpc
+ fi
+ elif test "$UNAME_PROCESSOR" = i386 ; then
+ # uname -m returns i386 or x86_64
+ UNAME_PROCESSOR=$UNAME_MACHINE
+ fi
+ GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE
+ ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = x86; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE
+ ;;
+ *:QNX:*:4*)
+ GUESS=i386-pc-qnx
+ ;;
+ NEO-*:NONSTOP_KERNEL:*:*)
+ GUESS=neo-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
+ GUESS=nse-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSR-*:NONSTOP_KERNEL:*:*)
+ GUESS=nsr-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSV-*:NONSTOP_KERNEL:*:*)
+ GUESS=nsv-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSX-*:NONSTOP_KERNEL:*:*)
+ GUESS=nsx-tandem-nsk$UNAME_RELEASE
+ ;;
+ *:NonStop-UX:*:*)
+ GUESS=mips-compaq-nonstopux
+ ;;
+ BS2000:POSIX*:*:*)
+ GUESS=bs2000-siemens-sysv
+ ;;
+ DS/*:UNIX_System_V:*:*)
+ GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE
+ ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "${cputype-}" = 386; then
+ UNAME_MACHINE=i386
+ elif test "x${cputype-}" != x; then
+ UNAME_MACHINE=$cputype
+ fi
+ GUESS=$UNAME_MACHINE-unknown-plan9
+ ;;
+ *:TOPS-10:*:*)
+ GUESS=pdp10-unknown-tops10
+ ;;
+ *:TENEX:*:*)
+ GUESS=pdp10-unknown-tenex
+ ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ GUESS=pdp10-dec-tops20
+ ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ GUESS=pdp10-xkl-tops20
+ ;;
+ *:TOPS-20:*:*)
+ GUESS=pdp10-unknown-tops20
+ ;;
+ *:ITS:*:*)
+ GUESS=pdp10-unknown-its
+ ;;
+ SEI:*:*:SEIUX)
+ GUESS=mips-sei-seiux$UNAME_RELEASE
+ ;;
+ *:DragonFly:*:*)
+ DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL
+ ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case $UNAME_MACHINE in
+ A*) GUESS=alpha-dec-vms ;;
+ I*) GUESS=ia64-dec-vms ;;
+ V*) GUESS=vax-dec-vms ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ GUESS=i386-pc-xenix
+ ;;
+ i*86:skyos:*:*)
+ SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`
+ GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL
+ ;;
+ i*86:rdos:*:*)
+ GUESS=$UNAME_MACHINE-pc-rdos
+ ;;
+ i*86:Fiwix:*:*)
+ GUESS=$UNAME_MACHINE-pc-fiwix
+ ;;
+ *:AROS:*:*)
+ GUESS=$UNAME_MACHINE-unknown-aros
+ ;;
+ x86_64:VMkernel:*:*)
+ GUESS=$UNAME_MACHINE-unknown-esx
+ ;;
+ amd64:Isilon\ OneFS:*:*)
+ GUESS=x86_64-unknown-onefs
+ ;;
+ *:Unleashed:*:*)
+ GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
+ ;;
+esac
+
+# Do we have a guess based on uname results?
+if test "x$GUESS" != x; then
+ echo "$GUESS"
+ exit
+fi
+
+# No uname command or uname output not recognized.
+set_cc_for_build
+cat > "$dummy.c" <<EOF
+#ifdef _SEQUENT_
+#include <sys/types.h>
+#include <sys/utsname.h>
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#include <signal.h>
+#if defined(_SIZE_T_) || defined(SIGLOST)
+#include <sys/utsname.h>
+#endif
+#endif
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+#include <sys/param.h>
+#if defined (BSD)
+#if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+#else
+#if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#endif
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#else
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname un;
+ uname (&un);
+ printf ("vax-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname *un;
+ uname (&un);
+ printf ("mips-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("mips-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
+
+echo "$0: unable to guess system type" >&2
+
+case $UNAME_MACHINE:$UNAME_SYSTEM in
+ mips:Linux | mips64:Linux)
+ # If we got here on MIPS GNU/Linux, output extra information.
+ cat >&2 <<EOF
+
+NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
+the system type. Please install a C compiler and try again.
+EOF
+ ;;
+esac
+
+cat >&2 <<EOF
+
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
+
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
+and
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+EOF
+
+our_year=`echo $timestamp | sed 's,-.*,,'`
+thisyear=`date +%Y`
+# shellcheck disable=SC2003
+script_age=`expr "$thisyear" - "$our_year"`
+if test "$script_age" -lt 3 ; then
+ cat >&2 <<EOF
+
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches@gnu.org to
+provide the necessary information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = "$UNAME_MACHINE"
+UNAME_RELEASE = "$UNAME_RELEASE"
+UNAME_SYSTEM = "$UNAME_SYSTEM"
+UNAME_VERSION = "$UNAME_VERSION"
+EOF
+fi
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..59bc612
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,290 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to 1 if arpa/inet.h declares `ether_ntohost' */
+#undef ARPA_INET_H_DECLARES_ETHER_NTOHOST
+
+/* define if you want to build the possibly-buggy SMB printer */
+#undef ENABLE_SMB
+
+/* Define to 1 if you have the `bpf_dump' function. */
+#undef HAVE_BPF_DUMP
+
+/* capsicum support available */
+#undef HAVE_CAPSICUM
+
+/* Define to 1 if you have the `cap_enter' function. */
+#undef HAVE_CAP_ENTER
+
+/* Define to 1 if you have the `cap_ioctls_limit' function. */
+#undef HAVE_CAP_IOCTLS_LIMIT
+
+/* Define to 1 if you have the <cap-ng.h> header file. */
+#undef HAVE_CAP_NG_H
+
+/* Define to 1 if you have the `cap_rights_limit' function. */
+#undef HAVE_CAP_RIGHTS_LIMIT
+
+/* Casper support available */
+#undef HAVE_CASPER
+
+/* Define to 1 if you have the declaration of `ether_ntohost' */
+#undef HAVE_DECL_ETHER_NTOHOST
+
+/* Define to 1 if you have the `ether_ntohost' function. */
+#undef HAVE_ETHER_NTOHOST
+
+/* Define to 1 if you have the `EVP_CIPHER_CTX_new' function. */
+#undef HAVE_EVP_CIPHER_CTX_NEW
+
+/* Define to 1 if you have the `EVP_DecryptInit_ex' function. */
+#undef HAVE_EVP_DECRYPTINIT_EX
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
+/* Define to 1 if you have the `getopt_long' function. */
+#undef HAVE_GETOPT_LONG
+
+/* define if you have getrpcbynumber() */
+#undef HAVE_GETRPCBYNUMBER
+
+/* Define to 1 if you have the `getservent' function. */
+#undef HAVE_GETSERVENT
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `cap-ng' library (-lcap-ng). */
+#undef HAVE_LIBCAP_NG
+
+/* Define to 1 if you have the `crypto' library (-lcrypto). */
+#undef HAVE_LIBCRYPTO
+
+/* Define to 1 if you have the `rpc' library (-lrpc). */
+#undef HAVE_LIBRPC
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <net/if.h> header file. */
+#undef HAVE_NET_IF_H
+
+/* Define to 1 if printf(3) does not support the z length modifier. */
+#undef HAVE_NO_PRINTF_Z
+
+/* Define to 1 if you have the `openat' function. */
+#undef HAVE_OPENAT
+
+/* Define to 1 if you have the <openssl/evp.h> header file. */
+#undef HAVE_OPENSSL_EVP_H
+
+/* define if the OS provides AF_INET6 and struct in6_addr */
+#undef HAVE_OS_IPV6_SUPPORT
+
+/* if there's an os_proto.h for this platform, to use additional prototypes */
+#undef HAVE_OS_PROTO_H
+
+/* Define to 1 if you have the `pcap_breakloop' function. */
+#undef HAVE_PCAP_BREAKLOOP
+
+/* Define to 1 if you have the `pcap_create' function. */
+#undef HAVE_PCAP_CREATE
+
+/* define if libpcap has pcap_datalink_name_to_val() */
+#undef HAVE_PCAP_DATALINK_NAME_TO_VAL
+
+/* define if libpcap has pcap_datalink_val_to_description() */
+#undef HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION
+
+/* define if libpcap has pcap_debug */
+#undef HAVE_PCAP_DEBUG
+
+/* Define to 1 if you have the `pcap_dump_flush' function. */
+#undef HAVE_PCAP_DUMP_FLUSH
+
+/* Define to 1 if you have the `pcap_dump_ftell' function. */
+#undef HAVE_PCAP_DUMP_FTELL
+
+/* Define to 1 if you have the `pcap_dump_ftell64' function. */
+#undef HAVE_PCAP_DUMP_FTELL64
+
+/* Define to 1 if you have the `pcap_findalldevs' function. */
+#undef HAVE_PCAP_FINDALLDEVS
+
+/* Define to 1 if you have the `pcap_findalldevs_ex' function. */
+#undef HAVE_PCAP_FINDALLDEVS_EX
+
+/* Define to 1 if you have the `pcap_free_datalinks' function. */
+#undef HAVE_PCAP_FREE_DATALINKS
+
+/* Define to 1 if the system has the type `pcap_if_t'. */
+#undef HAVE_PCAP_IF_T
+
+/* Define to 1 if you have the `pcap_lib_version' function. */
+#undef HAVE_PCAP_LIB_VERSION
+
+/* define if libpcap has pcap_list_datalinks() */
+#undef HAVE_PCAP_LIST_DATALINKS
+
+/* Define to 1 if you have the `pcap_open' function. */
+#undef HAVE_PCAP_OPEN
+
+/* Define to 1 if you have the <pcap/pcap-inttypes.h> header file. */
+#undef HAVE_PCAP_PCAP_INTTYPES_H
+
+/* Define to 1 if you have the `pcap_setdirection' function. */
+#undef HAVE_PCAP_SETDIRECTION
+
+/* Define to 1 if you have the `pcap_set_datalink' function. */
+#undef HAVE_PCAP_SET_DATALINK
+
+/* Define to 1 if you have the `pcap_set_immediate_mode' function. */
+#undef HAVE_PCAP_SET_IMMEDIATE_MODE
+
+/* Define to 1 if you have the `pcap_set_optimizer_debug' function. */
+#undef HAVE_PCAP_SET_OPTIMIZER_DEBUG
+
+/* Define to 1 if you have the `pcap_set_parser_debug' function. */
+#undef HAVE_PCAP_SET_PARSER_DEBUG
+
+/* Define to 1 if you have the `pcap_set_tstamp_precision' function. */
+#undef HAVE_PCAP_SET_TSTAMP_PRECISION
+
+/* Define to 1 if you have the `pcap_set_tstamp_type' function. */
+#undef HAVE_PCAP_SET_TSTAMP_TYPE
+
+/* define if libpcap has pcap_version */
+#undef HAVE_PCAP_VERSION
+
+/* Define to 1 if you have the `pfopen' function. */
+#undef HAVE_PFOPEN
+
+/* Define to 1 if you have the <rpc/rpcent.h> header file. */
+#undef HAVE_RPC_RPCENT_H
+
+/* Define to 1 if you have the <rpc/rpc.h> header file. */
+#undef HAVE_RPC_RPC_H
+
+/* Define to 1 if you have the `setlinebuf' function. */
+#undef HAVE_SETLINEBUF
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strlcat' function. */
+#undef HAVE_STRLCAT
+
+/* Define to 1 if you have the `strlcpy' function. */
+#undef HAVE_STRLCPY
+
+/* Define to 1 if you have the `strsep' function. */
+#undef HAVE_STRSEP
+
+/* Define to 1 if the system has the type `struct ether_addr'. */
+#undef HAVE_STRUCT_ETHER_ADDR
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if the system has the type `uintptr_t'. */
+#undef HAVE_UINTPTR_T
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `vfork' function. */
+#undef HAVE_VFORK
+
+/* define if libpcap has yydebug */
+#undef HAVE_YYDEBUG
+
+/* Define to 1 if netinet/ether.h declares `ether_ntohost' */
+#undef NETINET_ETHER_H_DECLARES_ETHER_NTOHOST
+
+/* Define to 1 if netinet/if_ether.h declares `ether_ntohost' */
+#undef NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST
+
+/* Define to 1 if net/ethernet.h declares `ether_ntohost' */
+#undef NET_ETHERNET_H_DECLARES_ETHER_NTOHOST
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* The size of `void *', as computed by sizeof. */
+#undef SIZEOF_VOID_P
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if sys/ethernet.h declares `ether_ntohost' */
+#undef SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST
+
+/* define if you have ether_ntohost() and it works */
+#undef USE_ETHER_NTOHOST
+
+/* Define if you enable support for libsmi */
+#undef USE_LIBSMI
+
+/* define if should chroot when dropping privileges */
+#undef WITH_CHROOT
+
+/* define if should drop privileges by default */
+#undef WITH_USER
+
+/* define on AIX to get certain functions */
+#undef _SUN
+
+/* to handle Ultrix compilers that don't support const in prototypes */
+#undef const
+
+/* Define as token for inline if inlining supported */
+#undef inline
+
+/* Define to `uint16_t' if u_int16_t not defined. */
+#undef u_int16_t
+
+/* Define to `uint32_t' if u_int32_t not defined. */
+#undef u_int32_t
+
+/* Define to `uint64_t' if u_int64_t not defined. */
+#undef u_int64_t
+
+/* Define to `uint8_t' if u_int8_t not defined. */
+#undef u_int8_t
+
+/* Define to the type of an unsigned integer type wide enough to hold a
+ pointer, if such a type exists, and if the system does not define it. */
+#undef uintptr_t
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..de4259e
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1907 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright 1992-2023 Free Software Foundation, Inc.
+
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2023-01-21'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches to <config-patches@gnu.org>.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
+
+Canonicalize a configuration name.
+
+Options:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright 1992-2023 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo "$1"
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Split fields of configuration type
+# shellcheck disable=SC2162
+saved_IFS=$IFS
+IFS="-" read field1 field2 field3 field4 <<EOF
+$1
+EOF
+IFS=$saved_IFS
+
+# Separate into logical components for further validation
+case $1 in
+ *-*-*-*-*)
+ echo Invalid configuration \`"$1"\': more than four components >&2
+ exit 1
+ ;;
+ *-*-*-*)
+ basic_machine=$field1-$field2
+ basic_os=$field3-$field4
+ ;;
+ *-*-*)
+ # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
+ # parts
+ maybe_os=$field2-$field3
+ case $maybe_os in
+ nto-qnx* | linux-* | uclinux-uclibc* \
+ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
+ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
+ | storm-chaos* | os2-emx* | rtmk-nova* | managarm-*)
+ basic_machine=$field1
+ basic_os=$maybe_os
+ ;;
+ android-linux)
+ basic_machine=$field1-unknown
+ basic_os=linux-android
+ ;;
+ *)
+ basic_machine=$field1-$field2
+ basic_os=$field3
+ ;;
+ esac
+ ;;
+ *-*)
+ # A lone config we happen to match not fitting any pattern
+ case $field1-$field2 in
+ decstation-3100)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ *-*)
+ # Second component is usually, but not always the OS
+ case $field2 in
+ # Prevent following clause from handling this valid os
+ sun*os*)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ zephyr*)
+ basic_machine=$field1-unknown
+ basic_os=$field2
+ ;;
+ # Manufacturers
+ dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
+ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
+ | unicom* | ibm* | next | hp | isi* | apollo | altos* \
+ | convergent* | ncr* | news | 32* | 3600* | 3100* \
+ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
+ | ultra | tti* | harris | dolphin | highlevel | gould \
+ | cbm | ns | masscomp | apple | axis | knuth | cray \
+ | microblaze* | sim | cisco \
+ | oki | wec | wrs | winbond)
+ basic_machine=$field1-$field2
+ basic_os=
+ ;;
+ *)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ *)
+ # Convert single-component short-hands not valid as part of
+ # multi-component configurations.
+ case $field1 in
+ 386bsd)
+ basic_machine=i386-pc
+ basic_os=bsd
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ basic_os=scout
+ ;;
+ alliant)
+ basic_machine=fx80-alliant
+ basic_os=
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ basic_os=
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ basic_os=bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ basic_os=sysv
+ ;;
+ amiga)
+ basic_machine=m68k-unknown
+ basic_os=
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ basic_os=amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ basic_os=sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ basic_os=sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ basic_os=bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ basic_os=aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ basic_os=aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ basic_os=dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ basic_os=linux
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ basic_os=cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ basic_os=bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ basic_os=bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ basic_os=bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ basic_os=bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ basic_os=bsd
+ ;;
+ cray)
+ basic_machine=j90-cray
+ basic_os=unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ basic_os=
+ ;;
+ da30)
+ basic_machine=m68k-da30
+ basic_os=
+ ;;
+ decstation | pmax | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ basic_os=sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ basic_os=dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ basic_os=msdosdjgpp
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ basic_os=ebmon
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ basic_os=ose
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ basic_os=sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ basic_os=go32
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ basic_os=hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ basic_os=xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ basic_os=hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ basic_os=sysv3
+ ;;
+ hp300 | hp300hpux)
+ basic_machine=m68k-hp
+ basic_os=hpux
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ basic_os=bsd
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ basic_os=osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ basic_os=proelf
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ basic_os=mach
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ basic_os=sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ basic_os=linux
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ basic_os=sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ basic_os=sysv
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ basic_os=mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ basic_os=mingw32ce
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ basic_os=morphos
+ ;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ basic_os=moxiebox
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ basic_os=msdos
+ ;;
+ msys)
+ basic_machine=i686-pc
+ basic_os=msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ basic_os=mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ basic_os=nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ basic_os=sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-pc
+ basic_os=netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ basic_os=linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ basic_os=newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ basic_os=newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ basic_os=sysv
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ basic_os=cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ basic_os=cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ basic_os=nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ basic_os=mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ basic_os=nonstopux
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ basic_os=os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ basic_os=ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ basic_os=os68k
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ basic_os=osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ basic_os=linux
+ ;;
+ psp)
+ basic_machine=mipsallegrexel-sony
+ basic_os=psp
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ basic_os=pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ basic_os=rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ basic_os=rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ sei)
+ basic_machine=mips-sei
+ basic_os=seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ basic_os=
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ basic_os=sysv2
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ basic_os=
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ basic_os=sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ basic_os=
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ basic_os=sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ basic_os=sunos4
+ ;;
+ sun3)
+ basic_machine=m68k-sun
+ basic_os=
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ basic_os=sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ basic_os=sunos4
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ basic_os=
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ basic_os=sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ basic_os=sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ basic_os=solaris2
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ basic_os=
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ basic_os=unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ basic_os=dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ basic_os=unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ basic_os=unicos
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ basic_os=tops20
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ basic_os=tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ basic_os=sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ basic_os=none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ basic_os=sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ basic_os=vms
+ ;;
+ vsta)
+ basic_machine=i386-pc
+ basic_os=vsta
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ basic_os=vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ basic_os=vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ basic_os=vxworks
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ basic_os=unicos
+ ;;
+ *)
+ basic_machine=$1
+ basic_os=
+ ;;
+ esac
+ ;;
+esac
+
+# Decode 1-component or ad-hoc basic machines
+case $basic_machine in
+ # Here we handle the default manufacturer of certain CPU types. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ cpu=hppa1.1
+ vendor=winbond
+ ;;
+ op50n)
+ cpu=hppa1.1
+ vendor=oki
+ ;;
+ op60c)
+ cpu=hppa1.1
+ vendor=oki
+ ;;
+ ibm*)
+ cpu=i370
+ vendor=ibm
+ ;;
+ orion105)
+ cpu=clipper
+ vendor=highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ cpu=m68k
+ vendor=apple
+ ;;
+ pmac | pmac-mpw)
+ cpu=powerpc
+ vendor=apple
+ ;;
+
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ cpu=m68000
+ vendor=att
+ ;;
+ 3b*)
+ cpu=we32k
+ vendor=att
+ ;;
+ bluegene*)
+ cpu=powerpc
+ vendor=ibm
+ basic_os=cnk
+ ;;
+ decsystem10* | dec10*)
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops10
+ ;;
+ decsystem20* | dec20*)
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ cpu=m68k
+ vendor=motorola
+ ;;
+ dpx2*)
+ cpu=m68k
+ vendor=bull
+ basic_os=sysv3
+ ;;
+ encore | umax | mmax)
+ cpu=ns32k
+ vendor=encore
+ ;;
+ elxsi)
+ cpu=elxsi
+ vendor=elxsi
+ basic_os=${basic_os:-bsd}
+ ;;
+ fx2800)
+ cpu=i860
+ vendor=alliant
+ ;;
+ genix)
+ cpu=ns32k
+ vendor=ns
+ ;;
+ h3050r* | hiux*)
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ cpu=hppa1.0
+ vendor=hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ cpu=m68000
+ vendor=hp
+ ;;
+ hp9k3[2-9][0-9])
+ cpu=m68k
+ vendor=hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ cpu=hppa1.0
+ vendor=hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ cpu=hppa1.0
+ vendor=hp
+ ;;
+ i*86v32)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv32
+ ;;
+ i*86v4*)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv4
+ ;;
+ i*86v)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv
+ ;;
+ i*86sol2)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=solaris2
+ ;;
+ j90 | j90-cray)
+ cpu=j90
+ vendor=cray
+ basic_os=${basic_os:-unicos}
+ ;;
+ iris | iris4d)
+ cpu=mips
+ vendor=sgi
+ case $basic_os in
+ irix*)
+ ;;
+ *)
+ basic_os=irix4
+ ;;
+ esac
+ ;;
+ miniframe)
+ cpu=m68000
+ vendor=convergent
+ ;;
+ *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ cpu=m68k
+ vendor=atari
+ basic_os=mint
+ ;;
+ news-3600 | risc-news)
+ cpu=mips
+ vendor=sony
+ basic_os=newsos
+ ;;
+ next | m*-next)
+ cpu=m68k
+ vendor=next
+ case $basic_os in
+ openstep*)
+ ;;
+ nextstep*)
+ ;;
+ ns2*)
+ basic_os=nextstep2
+ ;;
+ *)
+ basic_os=nextstep3
+ ;;
+ esac
+ ;;
+ np1)
+ cpu=np1
+ vendor=gould
+ ;;
+ op50n-* | op60c-*)
+ cpu=hppa1.1
+ vendor=oki
+ basic_os=proelf
+ ;;
+ pa-hitachi)
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
+ ;;
+ pbd)
+ cpu=sparc
+ vendor=tti
+ ;;
+ pbb)
+ cpu=m68k
+ vendor=tti
+ ;;
+ pc532)
+ cpu=ns32k
+ vendor=pc532
+ ;;
+ pn)
+ cpu=pn
+ vendor=gould
+ ;;
+ power)
+ cpu=power
+ vendor=ibm
+ ;;
+ ps2)
+ cpu=i386
+ vendor=ibm
+ ;;
+ rm[46]00)
+ cpu=mips
+ vendor=siemens
+ ;;
+ rtpc | rtpc-*)
+ cpu=romp
+ vendor=ibm
+ ;;
+ sde)
+ cpu=mipsisa32
+ vendor=sde
+ basic_os=${basic_os:-elf}
+ ;;
+ simso-wrs)
+ cpu=sparclite
+ vendor=wrs
+ basic_os=vxworks
+ ;;
+ tower | tower-32)
+ cpu=m68k
+ vendor=ncr
+ ;;
+ vpp*|vx|vx-*)
+ cpu=f301
+ vendor=fujitsu
+ ;;
+ w65)
+ cpu=w65
+ vendor=wdc
+ ;;
+ w89k-*)
+ cpu=hppa1.1
+ vendor=winbond
+ basic_os=proelf
+ ;;
+ none)
+ cpu=none
+ vendor=none
+ ;;
+ leon|leon[3-9])
+ cpu=sparc
+ vendor=$basic_machine
+ ;;
+ leon-*|leon[3-9]-*)
+ cpu=sparc
+ vendor=`echo "$basic_machine" | sed 's/-.*//'`
+ ;;
+
+ *-*)
+ # shellcheck disable=SC2162
+ saved_IFS=$IFS
+ IFS="-" read cpu vendor <<EOF
+$basic_machine
+EOF
+ IFS=$saved_IFS
+ ;;
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ cpu=$basic_machine
+ vendor=pc
+ ;;
+ # These rules are duplicated from below for sake of the special case above;
+ # i.e. things that normalized to x86 arches should also default to "pc"
+ pc98)
+ cpu=i386
+ vendor=pc
+ ;;
+ x64 | amd64)
+ cpu=x86_64
+ vendor=pc
+ ;;
+ # Recognize the basic CPU types without company name.
+ *)
+ cpu=$basic_machine
+ vendor=unknown
+ ;;
+esac
+
+unset -v basic_machine
+
+# Decode basic machines in the full and proper CPU-Company form.
+case $cpu-$vendor in
+ # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ craynv-unknown)
+ vendor=cray
+ basic_os=${basic_os:-unicosmp}
+ ;;
+ c90-unknown | c90-cray)
+ vendor=cray
+ basic_os=${Basic_os:-unicos}
+ ;;
+ fx80-unknown)
+ vendor=alliant
+ ;;
+ romp-unknown)
+ vendor=ibm
+ ;;
+ mmix-unknown)
+ vendor=knuth
+ ;;
+ microblaze-unknown | microblazeel-unknown)
+ vendor=xilinx
+ ;;
+ rs6000-unknown)
+ vendor=ibm
+ ;;
+ vax-unknown)
+ vendor=dec
+ ;;
+ pdp11-unknown)
+ vendor=dec
+ ;;
+ we32k-unknown)
+ vendor=att
+ ;;
+ cydra-unknown)
+ vendor=cydrome
+ ;;
+ i370-ibm*)
+ vendor=ibm
+ ;;
+ orion-unknown)
+ vendor=highlevel
+ ;;
+ xps-unknown | xps100-unknown)
+ cpu=xps100
+ vendor=honeywell
+ ;;
+
+ # Here we normalize CPU types with a missing or matching vendor
+ armh-unknown | armh-alt)
+ cpu=armv7l
+ vendor=alt
+ basic_os=${basic_os:-linux-gnueabihf}
+ ;;
+ dpx20-unknown | dpx20-bull)
+ cpu=rs6000
+ vendor=bull
+ basic_os=${basic_os:-bosx}
+ ;;
+
+ # Here we normalize CPU types irrespective of the vendor
+ amd64-*)
+ cpu=x86_64
+ ;;
+ blackfin-*)
+ cpu=bfin
+ basic_os=linux
+ ;;
+ c54x-*)
+ cpu=tic54x
+ ;;
+ c55x-*)
+ cpu=tic55x
+ ;;
+ c6x-*)
+ cpu=tic6x
+ ;;
+ e500v[12]-*)
+ cpu=powerpc
+ basic_os=${basic_os}"spe"
+ ;;
+ mips3*-*)
+ cpu=mips64
+ ;;
+ ms1-*)
+ cpu=mt
+ ;;
+ m68knommu-*)
+ cpu=m68k
+ basic_os=linux
+ ;;
+ m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
+ cpu=s12z
+ ;;
+ openrisc-*)
+ cpu=or32
+ ;;
+ parisc-*)
+ cpu=hppa
+ basic_os=linux
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ cpu=i586
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
+ cpu=i686
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ cpu=i686
+ ;;
+ pentium4-*)
+ cpu=i786
+ ;;
+ pc98-*)
+ cpu=i386
+ ;;
+ ppc-* | ppcbe-*)
+ cpu=powerpc
+ ;;
+ ppcle-* | powerpclittle-*)
+ cpu=powerpcle
+ ;;
+ ppc64-*)
+ cpu=powerpc64
+ ;;
+ ppc64le-* | powerpc64little-*)
+ cpu=powerpc64le
+ ;;
+ sb1-*)
+ cpu=mipsisa64sb1
+ ;;
+ sb1el-*)
+ cpu=mipsisa64sb1el
+ ;;
+ sh5e[lb]-*)
+ cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
+ ;;
+ spur-*)
+ cpu=spur
+ ;;
+ strongarm-* | thumb-*)
+ cpu=arm
+ ;;
+ tx39-*)
+ cpu=mipstx39
+ ;;
+ tx39el-*)
+ cpu=mipstx39el
+ ;;
+ x64-*)
+ cpu=x86_64
+ ;;
+ xscale-* | xscalee[bl]-*)
+ cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
+ ;;
+ arm64-* | aarch64le-*)
+ cpu=aarch64
+ ;;
+
+ # Recognize the canonical CPU Types that limit and/or modify the
+ # company names they are paired with.
+ cr16-*)
+ basic_os=${basic_os:-elf}
+ ;;
+ crisv32-* | etraxfs*-*)
+ cpu=crisv32
+ vendor=axis
+ ;;
+ cris-* | etrax*-*)
+ cpu=cris
+ vendor=axis
+ ;;
+ crx-*)
+ basic_os=${basic_os:-elf}
+ ;;
+ neo-tandem)
+ cpu=neo
+ vendor=tandem
+ ;;
+ nse-tandem)
+ cpu=nse
+ vendor=tandem
+ ;;
+ nsr-tandem)
+ cpu=nsr
+ vendor=tandem
+ ;;
+ nsv-tandem)
+ cpu=nsv
+ vendor=tandem
+ ;;
+ nsx-tandem)
+ cpu=nsx
+ vendor=tandem
+ ;;
+ mipsallegrexel-sony)
+ cpu=mipsallegrexel
+ vendor=sony
+ ;;
+ tile*-*)
+ basic_os=${basic_os:-linux-gnu}
+ ;;
+
+ *)
+ # Recognize the canonical CPU types that are allowed with any
+ # company name.
+ case $cpu in
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | abacus \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
+ | alphapca5[67] | alpha64pca5[67] \
+ | am33_2.0 \
+ | amdgcn \
+ | arc | arceb | arc32 | arc64 \
+ | arm | arm[lb]e | arme[lb] | armv* \
+ | avr | avr32 \
+ | asmjs \
+ | ba \
+ | be32 | be64 \
+ | bfin | bpf | bs2000 \
+ | c[123]* | c30 | [cjt]90 | c4x \
+ | c8051 | clipper | craynv | csky | cydra \
+ | d10v | d30v | dlx | dsp16xx \
+ | e2k | elxsi | epiphany \
+ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+ | h8300 | h8500 \
+ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i*86 | i860 | i960 | ia16 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | loongarch32 | loongarch64 \
+ | m32c | m32r | m32rle \
+ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
+ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
+ | m88110 | m88k | maxq | mb | mcore | mep | metag \
+ | microblaze | microblazeel \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64eb | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r3 | mipsisa32r3el \
+ | mipsisa32r5 | mipsisa32r5el \
+ | mipsisa32r6 | mipsisa32r6el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r3 | mipsisa64r3el \
+ | mipsisa64r5 | mipsisa64r5el \
+ | mipsisa64r6 | mipsisa64r6el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mmix \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nfp \
+ | nios | nios2 | nios2eb | nios2el \
+ | none | np1 | ns16k | ns32k | nvptx \
+ | open8 \
+ | or1k* \
+ | or32 \
+ | orion \
+ | picochip \
+ | pdp10 | pdp11 | pj | pjl | pn | power \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+ | pru \
+ | pyramid \
+ | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
+ | rl78 | romp | rs6000 | rx \
+ | s390 | s390x \
+ | score \
+ | sh | shl \
+ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+ | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+ | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+ | spu \
+ | tahoe \
+ | thumbv7* \
+ | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+ | tron \
+ | ubicom32 \
+ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+ | vax \
+ | visium \
+ | w65 \
+ | wasm32 | wasm64 \
+ | we32k \
+ | x86 | x86_64 | xc16x | xgate | xps100 \
+ | xstormy16 | xtensa* \
+ | ymp \
+ | z8k | z80)
+ ;;
+
+ *)
+ echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+ exit 1
+ ;;
+ esac
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $vendor in
+ digital*)
+ vendor=dec
+ ;;
+ commodore*)
+ vendor=cbm
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if test x$basic_os != x
+then
+
+# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
+# set os.
+case $basic_os in
+ gnu/linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
+ ;;
+ os2-emx)
+ kernel=os2
+ os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
+ ;;
+ nto-qnx*)
+ kernel=nto
+ os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
+ ;;
+ *-*)
+ # shellcheck disable=SC2162
+ saved_IFS=$IFS
+ IFS="-" read kernel os <<EOF
+$basic_os
+EOF
+ IFS=$saved_IFS
+ ;;
+ # Default OS when just kernel was specified
+ nto*)
+ kernel=nto
+ os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
+ ;;
+ linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
+ ;;
+ managarm*)
+ kernel=managarm
+ os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
+ ;;
+ *)
+ kernel=
+ os=$basic_os
+ ;;
+esac
+
+# Now, normalize the OS (knowing we just have one component, it's not a kernel,
+# etc.)
+case $os in
+ # First match some system type aliases that might get confused
+ # with valid system types.
+ # solaris* is a basic system type, with this one exception.
+ auroraux)
+ os=auroraux
+ ;;
+ bluegene*)
+ os=cnk
+ ;;
+ solaris1 | solaris1.*)
+ os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
+ ;;
+ solaris)
+ os=solaris2
+ ;;
+ unixware*)
+ os=sysv4.2uw
+ ;;
+ # es1800 is here to avoid being matched by es* (a different OS)
+ es1800*)
+ os=ose
+ ;;
+ # Some version numbers need modification
+ chorusos*)
+ os=chorusos
+ ;;
+ isc)
+ os=isc2.2
+ ;;
+ sco6)
+ os=sco5v6
+ ;;
+ sco5)
+ os=sco3.2v5
+ ;;
+ sco4)
+ os=sco3.2v4
+ ;;
+ sco3.2.[4-9]*)
+ os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
+ ;;
+ sco*v* | scout)
+ # Don't match below
+ ;;
+ sco*)
+ os=sco3.2v2
+ ;;
+ psos*)
+ os=psos
+ ;;
+ qnx*)
+ os=qnx
+ ;;
+ hiux*)
+ os=hiuxwe2
+ ;;
+ lynx*178)
+ os=lynxos178
+ ;;
+ lynx*5)
+ os=lynxos5
+ ;;
+ lynxos*)
+ # don't get caught up in next wildcard
+ ;;
+ lynx*)
+ os=lynxos
+ ;;
+ mac[0-9]*)
+ os=`echo "$os" | sed -e 's|mac|macos|'`
+ ;;
+ opened*)
+ os=openedition
+ ;;
+ os400*)
+ os=os400
+ ;;
+ sunos5*)
+ os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
+ ;;
+ sunos6*)
+ os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
+ ;;
+ wince*)
+ os=wince
+ ;;
+ utek*)
+ os=bsd
+ ;;
+ dynix*)
+ os=bsd
+ ;;
+ acis*)
+ os=aos
+ ;;
+ atheos*)
+ os=atheos
+ ;;
+ syllable*)
+ os=syllable
+ ;;
+ 386bsd)
+ os=bsd
+ ;;
+ ctix* | uts*)
+ os=sysv
+ ;;
+ nova*)
+ os=rtmk-nova
+ ;;
+ ns2)
+ os=nextstep2
+ ;;
+ # Preserve the version number of sinix5.
+ sinix5.*)
+ os=`echo "$os" | sed -e 's|sinix|sysv|'`
+ ;;
+ sinix*)
+ os=sysv4
+ ;;
+ tpf*)
+ os=tpf
+ ;;
+ triton*)
+ os=sysv3
+ ;;
+ oss*)
+ os=sysv3
+ ;;
+ svr4*)
+ os=sysv4
+ ;;
+ svr3)
+ os=sysv3
+ ;;
+ sysvr4)
+ os=sysv4
+ ;;
+ ose*)
+ os=ose
+ ;;
+ *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+ os=mint
+ ;;
+ dicos*)
+ os=dicos
+ ;;
+ pikeos*)
+ # Until real need of OS specific support for
+ # particular features comes up, bare metal
+ # configurations are quite functional.
+ case $cpu in
+ arm*)
+ os=eabi
+ ;;
+ *)
+ os=elf
+ ;;
+ esac
+ ;;
+ *)
+ # No normalization, but not necessarily accepted, that comes below.
+ ;;
+esac
+
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+kernel=
+case $cpu-$vendor in
+ score-*)
+ os=elf
+ ;;
+ spu-*)
+ os=elf
+ ;;
+ *-acorn)
+ os=riscix1.2
+ ;;
+ arm*-rebel)
+ kernel=linux
+ os=gnu
+ ;;
+ arm*-semi)
+ os=aout
+ ;;
+ c4x-* | tic4x-*)
+ os=coff
+ ;;
+ c8051-*)
+ os=elf
+ ;;
+ clipper-intergraph)
+ os=clix
+ ;;
+ hexagon-*)
+ os=elf
+ ;;
+ tic54x-*)
+ os=coff
+ ;;
+ tic55x-*)
+ os=coff
+ ;;
+ tic6x-*)
+ os=coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=tops20
+ ;;
+ pdp11-*)
+ os=none
+ ;;
+ *-dec | vax-*)
+ os=ultrix4.2
+ ;;
+ m68*-apollo)
+ os=domain
+ ;;
+ i386-sun)
+ os=sunos4.0.2
+ ;;
+ m68000-sun)
+ os=sunos3
+ ;;
+ m68*-cisco)
+ os=aout
+ ;;
+ mep-*)
+ os=elf
+ ;;
+ mips*-cisco)
+ os=elf
+ ;;
+ mips*-*)
+ os=elf
+ ;;
+ or32-*)
+ os=coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=sysv3
+ ;;
+ sparc-* | *-sun)
+ os=sunos4.1.1
+ ;;
+ pru-*)
+ os=elf
+ ;;
+ *-be)
+ os=beos
+ ;;
+ *-ibm)
+ os=aix
+ ;;
+ *-knuth)
+ os=mmixware
+ ;;
+ *-wec)
+ os=proelf
+ ;;
+ *-winbond)
+ os=proelf
+ ;;
+ *-oki)
+ os=proelf
+ ;;
+ *-hp)
+ os=hpux
+ ;;
+ *-hitachi)
+ os=hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=sysv
+ ;;
+ *-cbm)
+ os=amigaos
+ ;;
+ *-dg)
+ os=dgux
+ ;;
+ *-dolphin)
+ os=sysv3
+ ;;
+ m68k-ccur)
+ os=rtu
+ ;;
+ m88k-omron*)
+ os=luna
+ ;;
+ *-next)
+ os=nextstep
+ ;;
+ *-sequent)
+ os=ptx
+ ;;
+ *-crds)
+ os=unos
+ ;;
+ *-ns)
+ os=genix
+ ;;
+ i370-*)
+ os=mvs
+ ;;
+ *-gould)
+ os=sysv
+ ;;
+ *-highlevel)
+ os=bsd
+ ;;
+ *-encore)
+ os=bsd
+ ;;
+ *-sgi)
+ os=irix
+ ;;
+ *-siemens)
+ os=sysv4
+ ;;
+ *-masscomp)
+ os=rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=uxpv
+ ;;
+ *-rom68k)
+ os=coff
+ ;;
+ *-*bug)
+ os=coff
+ ;;
+ *-apple)
+ os=macos
+ ;;
+ *-atari*)
+ os=mint
+ ;;
+ *-wrs)
+ os=vxworks
+ ;;
+ *)
+ os=none
+ ;;
+esac
+
+fi
+
+# Now, validate our (potentially fixed-up) OS.
+case $os in
+ # Sometimes we do "kernel-libc", so those need to count as OSes.
+ musl* | newlib* | relibc* | uclibc*)
+ ;;
+ # Likewise for "kernel-abi"
+ eabi* | gnueabi*)
+ ;;
+ # VxWorks passes extra cpu info in the 4th filed.
+ simlinux | simwindows | spe)
+ ;;
+ # Now accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST end in a * to match a version number.
+ gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
+ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
+ | hiux* | abug | nacl* | netware* | windows* \
+ | os9* | macos* | osx* | ios* \
+ | mpw* | magic* | mmixware* | mon960* | lnews* \
+ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+ | aos* | aros* | cloudabi* | sortix* | twizzler* \
+ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+ | mirbsd* | netbsd* | dicos* | openedition* | ose* \
+ | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
+ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
+ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+ | udi* | lites* | ieee* | go32* | aux* | hcos* \
+ | chorusrdb* | cegcc* | glidix* | serenity* \
+ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+ | midipix* | mingw32* | mingw64* | mint* \
+ | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+ | interix* | uwin* | mks* | rhapsody* | darwin* \
+ | openstep* | oskit* | conix* | pw32* | nonstopux* \
+ | storm-chaos* | tops10* | tenex* | tops20* | its* \
+ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
+ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
+ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+ | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+ | fiwix* | mlibc* )
+ ;;
+ # This one is extra strict with allowed versions
+ sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ ;;
+ none)
+ ;;
+ kernel* )
+ # Restricted further below
+ ;;
+ *)
+ echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# As a final step for OS-related things, validate the OS-kernel combination
+# (given a valid OS), if there is a kernel.
+case $kernel-$os in
+ linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
+ | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* )
+ ;;
+ uclinux-uclibc* )
+ ;;
+ managarm-mlibc* | managarm-kernel* )
+ ;;
+ -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* )
+ # These are just libc implementations, not actual OSes, and thus
+ # require a kernel.
+ echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
+ exit 1
+ ;;
+ -kernel* )
+ echo "Invalid configuration \`$1': \`$os' needs explicit kernel." 1>&2
+ exit 1
+ ;;
+ *-kernel* )
+ echo "Invalid configuration \`$1': \`$kernel' does not support \`$os'." 1>&2
+ exit 1
+ ;;
+ kfreebsd*-gnu* | kopensolaris*-gnu*)
+ ;;
+ vxworks-simlinux | vxworks-simwindows | vxworks-spe)
+ ;;
+ nto-qnx*)
+ ;;
+ os2-emx)
+ ;;
+ *-eabi* | *-gnueabi*)
+ ;;
+ -*)
+ # Blank kernel with real OS is always fine.
+ ;;
+ *-*)
+ echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+case $vendor in
+ unknown)
+ case $cpu-$os in
+ *-riscix*)
+ vendor=acorn
+ ;;
+ *-sunos*)
+ vendor=sun
+ ;;
+ *-cnk* | *-aix*)
+ vendor=ibm
+ ;;
+ *-beos*)
+ vendor=be
+ ;;
+ *-hpux*)
+ vendor=hp
+ ;;
+ *-mpeix*)
+ vendor=hp
+ ;;
+ *-hiux*)
+ vendor=hitachi
+ ;;
+ *-unos*)
+ vendor=crds
+ ;;
+ *-dgux*)
+ vendor=dg
+ ;;
+ *-luna*)
+ vendor=omron
+ ;;
+ *-genix*)
+ vendor=ns
+ ;;
+ *-clix*)
+ vendor=intergraph
+ ;;
+ *-mvs* | *-opened*)
+ vendor=ibm
+ ;;
+ *-os400*)
+ vendor=ibm
+ ;;
+ s390-* | s390x-*)
+ vendor=ibm
+ ;;
+ *-ptx*)
+ vendor=sequent
+ ;;
+ *-tpf*)
+ vendor=ibm
+ ;;
+ *-vxsim* | *-vxworks* | *-windiss*)
+ vendor=wrs
+ ;;
+ *-aux*)
+ vendor=apple
+ ;;
+ *-hms*)
+ vendor=hitachi
+ ;;
+ *-mpw* | *-macos*)
+ vendor=apple
+ ;;
+ *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
+ vendor=atari
+ ;;
+ *-vos*)
+ vendor=stratus
+ ;;
+ esac
+ ;;
+esac
+
+echo "$cpu-$vendor-${kernel:+$kernel-}$os"
+exit
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..53c62d5
--- /dev/null
+++ b/configure
@@ -0,0 +1,9681 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for tcpdump 4.99.4.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='tcpdump'
+PACKAGE_TARNAME='tcpdump'
+PACKAGE_VERSION='4.99.4'
+PACKAGE_STRING='tcpdump 4.99.4'
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_unique_file="tcpdump.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='LTLIBOBJS
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+MAN_MISC_INFO
+MAN_FILE_FORMATS
+LOCALSRC
+V_PCAPDEP
+V_INCLS
+V_GROUP
+V_DEFS
+V_CCOPT
+MKDEP
+DEPENDENCY_CFLAG
+AR
+RANLIB
+PCAP_CONFIG
+PKG_CONFIG
+LIBOBJS
+EGREP
+GREP
+CPP
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+SHLICC2
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+with_gcc
+enable_universal
+with_smi
+enable_smb
+with_user
+with_chroot
+with_sandbox_capsicum
+enable_local_libpcap
+with_crypto
+with_cap_ng
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures tcpdump 4.99.4 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/tcpdump]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of tcpdump 4.99.4:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --disable-universal don't build universal on macOS
+ --enable-smb enable possibly-buggy SMB printer [default=no]
+ --disable-local-libpcap don't look for a local libpcap [default=check for a
+ local libpcap]
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --without-gcc don't use gcc
+ --with-smi link with libsmi (allows to load MIBs on the fly to
+ decode SNMP packets) [default=yes, if available]
+ --with-user=USERNAME drop privileges by default to USERNAME
+ --with-chroot=DIRECTORY when dropping privileges, chroot to DIRECTORY
+ --with-sandbox-capsicum use Capsicum security functions [default=yes, if
+ available]
+ --with-crypto[=DIR] use OpenSSL/libressl libcrypto (located in directory
+ DIR, if specified) [default=yes, if available]
+ --with-cap-ng use libcap-ng [default=yes, if available]
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+tcpdump configure 4.99.4
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval \${$3+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid; break
+else
+ as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lo=$ac_mid; break
+else
+ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid
+else
+ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ long int i = longval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+ ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+ fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by tcpdump $as_me 4.99.4, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+
+
+
+
+
+
+# Check whether --with-gcc was given.
+if test "${with_gcc+set}" = set; then :
+ withval=$with_gcc;
+fi
+
+ V_INCLS=""
+ if test "${srcdir}" != "." ; then
+ V_INCLS="-I$srcdir"
+ fi
+ if test "${CFLAGS+set}" = set; then
+ LBL_CFLAGS="$CFLAGS"
+ fi
+ if test -z "$CC" ; then
+ case "$host_os" in
+
+ bsdi*)
+ # Extract the first word of "shlicc2", so it can be a program name with args.
+set dummy shlicc2; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_SHLICC2+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$SHLICC2"; then
+ ac_cv_prog_SHLICC2="$SHLICC2" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_SHLICC2="yes"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_SHLICC2" && ac_cv_prog_SHLICC2="no"
+fi
+fi
+SHLICC2=$ac_cv_prog_SHLICC2
+if test -n "$SHLICC2"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHLICC2" >&5
+$as_echo "$SHLICC2" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test $SHLICC2 = yes ; then
+ CC=shlicc2
+ export CC
+ fi
+ ;;
+ esac
+ fi
+ if test -z "$CC" -a "$with_gcc" = no ; then
+ CC=cc
+ export CC
+ fi
+
+#
+# Try to enable as many C99 features as we can.
+# At minimum, we want C++/C99-style // comments.
+#
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
+$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
+if ${ac_cv_prog_cc_c99+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+ your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static void
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str;
+ int number;
+ float fnumber;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case 's': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case 'd': // int
+ number = va_arg (args_copy, int);
+ break;
+ case 'f': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+}
+
+int
+main ()
+{
+
+ // Check bool.
+ _Bool success = false;
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ test_varargs ("s, d' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+ || dynamic_array[ni.number - 1] != 543);
+
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c99" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c99"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c99" != xno; then :
+
+fi
+
+
+if test "$ac_cv_prog_cc_c99" = "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The C compiler does not support C99; there may be compiler errors" >&5
+$as_echo "$as_me: WARNING: The C compiler does not support C99; there may be compiler errors" >&2;}
+fi
+
+
+
+
+ if test "$GCC" = yes ; then
+ #
+ # -Werror forces warnings to be errors.
+ #
+ ac_lbl_cc_force_warning_errors=-Werror
+ else
+ V_INCLS="$V_INCLS -I/usr/local/include"
+ LDFLAGS="$LDFLAGS -L/usr/local/lib"
+
+ case "$host_os" in
+
+ darwin*)
+ #
+ # This is assumed either to be GCC or clang, both
+ # of which use -Werror to force warnings to be errors.
+ #
+ ac_lbl_cc_force_warning_errors=-Werror
+ ;;
+
+ hpux*)
+ #
+ # HP C, which is what we presume we're using, doesn't
+ # exit with a non-zero exit status if we hand it an
+ # invalid -W flag, can't be forced to do so even with
+ # +We, and doesn't handle GCC-style -W flags, so we
+ # don't want to try using GCC-style -W flags.
+ #
+ ac_lbl_cc_dont_try_gcc_dashW=yes
+ ;;
+
+ irix*)
+ #
+ # MIPS C, which is what we presume we're using, doesn't
+ # necessarily exit with a non-zero exit status if we
+ # hand it an invalid -W flag, can't be forced to do
+ # so, and doesn't handle GCC-style -W flags, so we
+ # don't want to try using GCC-style -W flags.
+ #
+ ac_lbl_cc_dont_try_gcc_dashW=yes
+ #
+ # It also, apparently, defaults to "char" being
+ # unsigned, unlike most other C implementations;
+ # I suppose we could say "signed char" whenever
+ # we want to guarantee a signed "char", but let's
+ # just force signed chars.
+ #
+ # -xansi is normally the default, but the
+ # configure script was setting it; perhaps -cckr
+ # was the default in the Old Days. (Then again,
+ # that would probably be for backwards compatibility
+ # in the days when ANSI C was Shiny and New, i.e.
+ # 1989 and the early '90's, so maybe we can just
+ # drop support for those compilers.)
+ #
+ # -g is equivalent to -g2, which turns off
+ # optimization; we choose -g3, which generates
+ # debugging information but doesn't turn off
+ # optimization (even if the optimization would
+ # cause inaccuracies in debugging).
+ #
+ V_CCOPT="$V_CCOPT -xansi -signed -g3"
+ ;;
+
+ osf*)
+ #
+ # Presumed to be DEC OSF/1, Digital UNIX, or
+ # Tru64 UNIX.
+ #
+ # The DEC C compiler, which is what we presume we're
+ # using, doesn't exit with a non-zero exit status if we
+ # hand it an invalid -W flag, can't be forced to do
+ # so, and doesn't handle GCC-style -W flags, so we
+ # don't want to try using GCC-style -W flags.
+ #
+ ac_lbl_cc_dont_try_gcc_dashW=yes
+ #
+ # -g is equivalent to -g2, which turns off
+ # optimization; we choose -g3, which generates
+ # debugging information but doesn't turn off
+ # optimization (even if the optimization would
+ # cause inaccuracies in debugging).
+ #
+ V_CCOPT="$V_CCOPT -g3"
+ ;;
+
+ solaris*)
+ #
+ # Assumed to be Sun C, which requires -errwarn to force
+ # warnings to be treated as errors.
+ #
+ ac_lbl_cc_force_warning_errors=-errwarn
+ ;;
+
+ ultrix*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that Ultrix $CC hacks const in prototypes" >&5
+$as_echo_n "checking that Ultrix $CC hacks const in prototypes... " >&6; }
+ if ${ac_cv_lbl_cc_const_proto+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+int
+main ()
+{
+struct a { int b; };
+ void c(const struct a *)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_lbl_cc_const_proto=yes
+else
+ ac_cv_lbl_cc_const_proto=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lbl_cc_const_proto" >&5
+$as_echo "$ac_cv_lbl_cc_const_proto" >&6; }
+ if test $ac_cv_lbl_cc_const_proto = no ; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+ fi
+ ;;
+ esac
+ V_CCOPT="$V_CCOPT -O"
+ fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$V_CCOPT"
+ if ${ac_cv_lbl_inline+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ ac_cv_lbl_inline=""
+ ac_lbl_cc_inline=no
+ for ac_lbl_inline in inline __inline__ __inline
+ do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define inline $ac_lbl_inline
+ static inline struct iltest *foo(void);
+ struct iltest {
+ int iltest1;
+ int iltest2;
+ };
+
+ static inline struct iltest *
+ foo()
+ {
+ static struct iltest xxx;
+
+ return &xxx;
+ }
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_lbl_cc_inline=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test "$ac_lbl_cc_inline" = yes ; then
+ break;
+ fi
+ done
+ if test "$ac_lbl_cc_inline" = yes ; then
+ ac_cv_lbl_inline=$ac_lbl_inline
+ fi
+fi
+
+ CFLAGS="$save_CFLAGS"
+ if test ! -z "$ac_cv_lbl_inline" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lbl_inline" >&5
+$as_echo "$ac_cv_lbl_inline" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define inline $ac_cv_lbl_inline
+_ACEOF
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if ${ac_cv_prog_CPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in fcntl.h rpc/rpc.h rpc/rpcent.h net/if.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+case "$host_os" in
+
+darwin*)
+ # Check whether --enable-universal was given.
+if test "${enable_universal+set}" = set; then :
+ enableval=$enable_universal;
+fi
+
+ if test "$enable_universal" != "no"; then
+ case "$host_os" in
+
+ darwin9.*)
+ #
+ # Leopard. Build for x86 and 32-bit PowerPC, with
+ # x86 first. (That's what Apple does.)
+ #
+ V_CCOPT="$V_CCOPT -arch i386 -arch ppc"
+ LDFLAGS="$LDFLAGS -arch i386 -arch ppc"
+ ;;
+
+ darwin10.*)
+ #
+ # Snow Leopard. Build for x86-64 and x86, with
+ # x86-64 first. (That's what Apple does.)
+ #
+ V_CCOPT="$V_CCOPT -arch x86_64 -arch i386"
+ LDFLAGS="$LDFLAGS -arch x86_64 -arch i386"
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+# Check whether --with-smi was given.
+if test "${with_smi+set}" = set; then :
+ withval=$with_smi;
+else
+ with_smi=yes
+fi
+
+
+if test "x$with_smi" != "xno" ; then
+ ac_fn_c_check_header_mongrel "$LINENO" "smi.h" "ac_cv_header_smi_h" "$ac_includes_default"
+if test "x$ac_cv_header_smi_h" = xyes; then :
+
+ #
+ # OK, we found smi.h. Do we have libsmi with smiInit?
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for smiInit in -lsmi" >&5
+$as_echo_n "checking for smiInit in -lsmi... " >&6; }
+if ${ac_cv_lib_smi_smiInit+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsmi $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char smiInit ();
+int
+main ()
+{
+return smiInit ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_smi_smiInit=yes
+else
+ ac_cv_lib_smi_smiInit=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_smi_smiInit" >&5
+$as_echo "$ac_cv_lib_smi_smiInit" >&6; }
+if test "x$ac_cv_lib_smi_smiInit" = xyes; then :
+
+ #
+ # OK, we have libsmi with smiInit. Can we use it?
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable libsmi" >&5
+$as_echo_n "checking whether to enable libsmi... " >&6; }
+ savedlibs="$LIBS"
+ LIBS="-lsmi $LIBS"
+ if test "$cross_compiling" = yes; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not when cross-compiling" >&5
+$as_echo "not when cross-compiling" >&6; }
+ LIBS="$savedlibs"
+
+
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* libsmi available check */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <smi.h>
+int main()
+{
+ int current, revision, age, n;
+ const int required = 2;
+ if (smiInit(""))
+ exit(1);
+ if (strcmp(SMI_LIBRARY_VERSION, smi_library_version))
+ exit(2);
+ n = sscanf(smi_library_version, "%d:%d:%d", &current, &revision, &age);
+ if (n != 3)
+ exit(3);
+ if (required < current - age || required > current)
+ exit(4);
+ exit(0);
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define USE_LIBSMI 1" >>confdefs.h
+
+
+else
+
+ case $? in
+ 1) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - smiInit failed" >&5
+$as_echo "no - smiInit failed" >&6; } ;;
+ 2) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - header/library version mismatch" >&5
+$as_echo "no - header/library version mismatch" >&6; } ;;
+ 3) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - can't determine library version" >&5
+$as_echo "no - can't determine library version" >&6; } ;;
+ 4) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - too old" >&5
+$as_echo "no - too old" >&6; } ;;
+ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; } ;;
+ esac
+ LIBS="$savedlibs"
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the possibly-buggy SMB printer" >&5
+$as_echo_n "checking whether to enable the possibly-buggy SMB printer... " >&6; }
+# Check whether --enable-smb was given.
+if test "${enable_smb+set}" = set; then :
+ enableval=$enable_smb;
+else
+ enableval=no
+fi
+
+case "$enableval" in
+yes) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define ENABLE_SMB 1" >>confdefs.h
+
+ LOCALSRC="print-smb.c smbutil.c $LOCALSRC"
+ ;;
+*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ;;
+esac
+
+
+# Check whether --with-user was given.
+if test "${with_user+set}" = set; then :
+ withval=$with_user;
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to drop root privileges by default" >&5
+$as_echo_n "checking whether to drop root privileges by default... " >&6; }
+if test ! -z "$with_user" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define WITH_USER "$withval"
+_ACEOF
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: to \"$withval\"" >&5
+$as_echo "to \"$withval\"" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Check whether --with-chroot was given.
+if test "${with_chroot+set}" = set; then :
+ withval=$with_chroot;
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to chroot" >&5
+$as_echo_n "checking whether to chroot... " >&6; }
+if test ! -z "$with_chroot" && test "$with_chroot" != "no" ; then
+
+cat >>confdefs.h <<_ACEOF
+#define WITH_CHROOT "$withval"
+_ACEOF
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: to \"$withval\"" >&5
+$as_echo "to \"$withval\"" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Check whether --with-sandbox-capsicum was given.
+if test "${with_sandbox_capsicum+set}" = set; then :
+ withval=$with_sandbox_capsicum;
+fi
+
+#
+# Check whether various functions are available. If any are, set
+# ac_lbl_capsicum_function_seen to yes; if any are not, set
+# ac_lbl_capsicum_function_not_seen to yes.
+#
+# We don't check cap_rights_init(), as it's a macro, wrapping another
+# function, in at least some versions of FreeBSD, and AC_CHECK_FUNCS()
+# doesn't handle that.
+#
+# All of the ones we check for must be available in order to enable
+# capsicum sandboxing.
+#
+# XXX - do we need to check for all of them, or are there some that, if
+# present, imply others are present?
+#
+if test -z "$with_sandbox_capsicum" || test "$with_sandbox_capsicum" != "no" ; then
+ #
+ # First, make sure we have the required header.
+ #
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/capsicum.h" "ac_cv_header_sys_capsicum_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_capsicum_h" = xyes; then :
+
+ #
+ # We do; now make sure we have the required functions.
+ #
+ for ac_func in cap_enter cap_rights_limit cap_ioctls_limit openat
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+ ac_lbl_capsicum_function_seen=yes
+else
+ ac_lbl_capsicum_function_not_seen=yes
+fi
+done
+
+
+fi
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cap_init in -lcasper" >&5
+$as_echo_n "checking for cap_init in -lcasper... " >&6; }
+if ${ac_cv_lib_casper_cap_init+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcasper $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cap_init ();
+int
+main ()
+{
+return cap_init ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_casper_cap_init=yes
+else
+ ac_cv_lib_casper_cap_init=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_casper_cap_init" >&5
+$as_echo "$ac_cv_lib_casper_cap_init" >&6; }
+if test "x$ac_cv_lib_casper_cap_init" = xyes; then :
+ LIBS="$LIBS -lcasper"
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cap_gethostbyaddr in -lcap_dns" >&5
+$as_echo_n "checking for cap_gethostbyaddr in -lcap_dns... " >&6; }
+if ${ac_cv_lib_cap_dns_cap_gethostbyaddr+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcap_dns $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char cap_gethostbyaddr ();
+int
+main ()
+{
+return cap_gethostbyaddr ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_cap_dns_cap_gethostbyaddr=yes
+else
+ ac_cv_lib_cap_dns_cap_gethostbyaddr=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cap_dns_cap_gethostbyaddr" >&5
+$as_echo "$ac_cv_lib_cap_dns_cap_gethostbyaddr" >&6; }
+if test "x$ac_cv_lib_cap_dns_cap_gethostbyaddr" = xyes; then :
+ LIBS="$LIBS -lcap_dns"
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to sandbox using capsicum" >&5
+$as_echo_n "checking whether to sandbox using capsicum... " >&6; }
+if test "x$ac_lbl_capsicum_function_seen" = "xyes" -a "x$ac_lbl_capsicum_function_not_seen" != "xyes"; then
+
+$as_echo "#define HAVE_CAPSICUM 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to sandbox using Casper library" >&5
+$as_echo_n "checking whether to sandbox using Casper library... " >&6; }
+if test "x$ac_cv_lib_casper_cap_init" = "xyes" -a "x$ac_cv_lib_cap_dns_cap_gethostbyaddr" = "xyes"; then
+
+$as_echo "#define HAVE_CASPER 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+#
+# We must check this before checking whether to check the OS's IPv6,
+# support because, on some platforms (such as SunOS 5.x), the test
+# program requires the extra networking libraries.
+#
+
+ # Most operating systems have gethostbyname() in the default searched
+ # libraries (i.e. libc):
+ # Some OSes (eg. Solaris) place it in libnsl
+ # Some strange OSes (SINIX) have it in libsocket:
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
+$as_echo_n "checking for library containing gethostbyname... " >&6; }
+if ${ac_cv_search_gethostbyname+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' nsl socket resolv; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_gethostbyname=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_gethostbyname+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_gethostbyname+:} false; then :
+
+else
+ ac_cv_search_gethostbyname=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
+$as_echo "$ac_cv_search_gethostbyname" >&6; }
+ac_res=$ac_cv_search_gethostbyname
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+ # Unfortunately libsocket sometimes depends on libnsl and
+ # AC_SEARCH_LIBS isn't up to the task of handling dependencies like this.
+ if test "$ac_cv_search_gethostbyname" = "no"
+ then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lsocket" >&5
+$as_echo_n "checking for gethostbyname in -lsocket... " >&6; }
+if ${ac_cv_lib_socket_gethostbyname+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket -lnsl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_socket_gethostbyname=yes
+else
+ ac_cv_lib_socket_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_gethostbyname" >&5
+$as_echo "$ac_cv_lib_socket_gethostbyname" >&6; }
+if test "x$ac_cv_lib_socket_gethostbyname" = xyes; then :
+ LIBS="-lsocket -lnsl $LIBS"
+fi
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
+$as_echo_n "checking for library containing socket... " >&6; }
+if ${ac_cv_search_socket+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char socket ();
+int
+main ()
+{
+return socket ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' socket; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_socket=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_socket+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_socket+:} false; then :
+
+else
+ ac_cv_search_socket=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
+$as_echo "$ac_cv_search_socket" >&6; }
+ac_res=$ac_cv_search_socket
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5
+$as_echo_n "checking for socket in -lsocket... " >&6; }
+if ${ac_cv_lib_socket_socket+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket -lnsl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char socket ();
+int
+main ()
+{
+return socket ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_socket_socket=yes
+else
+ ac_cv_lib_socket_socket=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5
+$as_echo "$ac_cv_lib_socket_socket" >&6; }
+if test "x$ac_cv_lib_socket_socket" = xyes; then :
+ LIBS="-lsocket -lnsl $LIBS"
+fi
+
+fi
+
+ # DLPI needs putmsg under HPUX so test for -lstr while we're at it
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing putmsg" >&5
+$as_echo_n "checking for library containing putmsg... " >&6; }
+if ${ac_cv_search_putmsg+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char putmsg ();
+int
+main ()
+{
+return putmsg ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' str; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_putmsg=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_putmsg+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_putmsg+:} false; then :
+
+else
+ ac_cv_search_putmsg=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_putmsg" >&5
+$as_echo "$ac_cv_search_putmsg" >&6; }
+ac_res=$ac_cv_search_putmsg
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+
+
+#
+# Check whether AF_INET6 and struct in6_addr are defined.
+# If they aren't both defined, we don't have sufficient OS
+# support for IPv6, so we don't look for IPv6 support libraries,
+# and we define AF_INET6 and struct in6_addr ourselves.
+#
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the operating system supports IPv6" >&5
+$as_echo_n "checking whether the operating system supports IPv6... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <string.h>
+/* AF_INET6 available check */
+#include <sys/types.h>
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
+#include <sys/socket.h>
+#include <netinet/in.h>
+#endif
+#ifdef AF_INET6
+void
+foo(struct in6_addr *addr)
+{
+ memset(addr, 0, sizeof (struct in6_addr));
+}
+#else
+#error "AF_INET6 not defined"
+#endif
+
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_OS_IPV6_SUPPORT 1" >>confdefs.h
+
+ ipv6=yes
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ipv6=no
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ipv6type=unknown
+ipv6lib=none
+ipv6trylibc=no
+
+if test "$ipv6" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking ipv6 stack type" >&5
+$as_echo_n "checking ipv6 stack type... " >&6; }
+ for i in inria kame linux-glibc linux-libinet6 toshiba v6d zeta; do
+ case $i in
+ inria)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <netinet/in.h>
+#ifdef IPV6_INRIA_VERSION
+yes
+#endif
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1; then :
+ ipv6type=$i
+fi
+rm -f conftest*
+
+ ;;
+ kame)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <netinet/in.h>
+#ifdef __KAME__
+yes
+#endif
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1; then :
+ ipv6type=$i;
+ ipv6lib=inet6;
+ ipv6libdir=/usr/local/v6/lib;
+ ipv6trylibc=yes
+fi
+rm -f conftest*
+
+ ;;
+ linux-glibc)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <features.h>
+#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
+yes
+#endif
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1; then :
+ ipv6type=$i
+fi
+rm -f conftest*
+
+ ;;
+ linux-libinet6)
+ if test -d /usr/inet6 -o -f /usr/include/netinet/ip6.h; then
+ ipv6type=$i
+ ipv6lib=inet6
+ ipv6libdir=/usr/inet6/lib
+ ipv6trylibc=yes;
+ CFLAGS="-I/usr/inet6/include $CFLAGS"
+ fi
+ ;;
+ toshiba)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/param.h>
+#ifdef _TOSHIBA_INET6
+yes
+#endif
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1; then :
+ ipv6type=$i;
+ ipv6lib=inet6;
+ ipv6libdir=/usr/local/v6/lib
+fi
+rm -f conftest*
+
+ ;;
+ v6d)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include </usr/local/v6/include/sys/v6config.h>
+#ifdef __V6D__
+yes
+#endif
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1; then :
+ ipv6type=$i;
+ ipv6lib=v6;
+ ipv6libdir=/usr/local/v6/lib;
+ CFLAGS="-I/usr/local/v6/include $CFLAGS"
+fi
+rm -f conftest*
+
+ ;;
+ zeta)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/param.h>
+#ifdef _ZETA_MINAMI_INET6
+yes
+#endif
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1; then :
+ ipv6type=$i;
+ ipv6lib=inet6;
+ ipv6libdir=/usr/local/v6/lib
+fi
+rm -f conftest*
+
+ ;;
+ esac
+ if test "$ipv6type" != "unknown"; then
+ break
+ fi
+ done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ipv6type" >&5
+$as_echo "$ipv6type" >&6; }
+fi
+
+if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then
+ if test -d $ipv6libdir -a -f $ipv6libdir/lib$ipv6lib.a; then
+ LIBS="-L$ipv6libdir -l$ipv6lib $LIBS"
+ echo "You have $ipv6lib library, using it"
+ else
+ if test "$ipv6trylibc" = "yes"; then
+ echo "You do not have $ipv6lib library, using libc"
+ else
+ echo 'Fatal: no $ipv6lib library found. cannot continue.'
+ echo "You need to fetch lib$ipv6lib.a from appropriate"
+ echo 'ipv6 kit and compile beforehand.'
+ exit 1
+ fi
+ fi
+fi
+
+ac_fn_c_check_func "$LINENO" "strlcat" "ac_cv_func_strlcat"
+if test "x$ac_cv_func_strlcat" = xyes; then :
+ $as_echo "#define HAVE_STRLCAT 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" strlcat.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strlcat.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy"
+if test "x$ac_cv_func_strlcpy" = xyes; then :
+ $as_echo "#define HAVE_STRLCPY 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" strlcpy.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strlcpy.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
+if test "x$ac_cv_func_strdup" = xyes; then :
+ $as_echo "#define HAVE_STRDUP 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" strdup.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strdup.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "strsep" "ac_cv_func_strsep"
+if test "x$ac_cv_func_strsep" = xyes; then :
+ $as_echo "#define HAVE_STRSEP 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" strsep.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS strsep.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "getservent" "ac_cv_func_getservent"
+if test "x$ac_cv_func_getservent" = xyes; then :
+ $as_echo "#define HAVE_GETSERVENT 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" getservent.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS getservent.$ac_objext"
+ ;;
+esac
+
+fi
+
+ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long"
+if test "x$ac_cv_func_getopt_long" = xyes; then :
+ $as_echo "#define HAVE_GETOPT_LONG 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" getopt_long.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS getopt_long.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+for ac_func in fork vfork
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+for ac_func in setlinebuf
+do :
+ ac_fn_c_check_func "$LINENO" "setlinebuf" "ac_cv_func_setlinebuf"
+if test "x$ac_cv_func_setlinebuf" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SETLINEBUF 1
+_ACEOF
+
+fi
+done
+
+
+#
+# Make sure we have vsnprintf() and snprintf(); we require them.
+#
+ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf"
+if test "x$ac_cv_func_vsnprintf" = xyes; then :
+
+else
+ as_fn_error $? "vsnprintf() is required but wasn't found" "$LINENO" 5
+fi
+
+ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
+
+else
+ as_fn_error $? "snprintf() is required but wasn't found" "$LINENO" 5
+fi
+
+
+#
+# Define HAVE_NO_PRINTF_Z to make it possible to disable test cases that
+# depend on %zu.
+#
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf(3) supports the z length modifier" >&5
+$as_echo_n "checking whether printf(3) supports the z length modifier... " >&6; }
+if test "$cross_compiling" = yes; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not while cross-compiling" >&5
+$as_echo "not while cross-compiling" >&6; }
+
+
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#include <stdio.h>
+#include <string.h>
+
+int main()
+{
+ char buf[100];
+ snprintf(buf, sizeof(buf), "%zu", sizeof(buf));
+ return strncmp(buf, "100", sizeof(buf)) ? 1 : 0;
+}
+
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define HAVE_NO_PRINTF_Z 1" >>confdefs.h
+
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lrpc" >&5
+$as_echo_n "checking for main in -lrpc... " >&6; }
+if ${ac_cv_lib_rpc_main+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrpc $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_rpc_main=yes
+else
+ ac_cv_lib_rpc_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpc_main" >&5
+$as_echo "$ac_cv_lib_rpc_main" >&6; }
+if test "x$ac_cv_lib_rpc_main" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBRPC 1
+_ACEOF
+
+ LIBS="-lrpc $LIBS"
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getrpcbynumber" >&5
+$as_echo_n "checking for library containing getrpcbynumber... " >&6; }
+if ${ac_cv_search_getrpcbynumber+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char getrpcbynumber ();
+int
+main ()
+{
+return getrpcbynumber ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' nsl; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_getrpcbynumber=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_getrpcbynumber+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_getrpcbynumber+:} false; then :
+
+else
+ ac_cv_search_getrpcbynumber=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getrpcbynumber" >&5
+$as_echo "$ac_cv_search_getrpcbynumber" >&6; }
+ac_res=$ac_cv_search_getrpcbynumber
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+$as_echo "#define HAVE_GETRPCBYNUMBER 1" >>confdefs.h
+
+fi
+
+
+
+ LBL_LIBS="$LIBS"
+ pfopen=/usr/examples/packetfilter/pfopen.c
+ if test -f $pfopen ; then
+ for ac_func in pfopen
+do :
+ ac_fn_c_check_func "$LINENO" "pfopen" "ac_cv_func_pfopen"
+if test "x$ac_cv_func_pfopen" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PFOPEN 1
+_ACEOF
+
+fi
+done
+
+ if test $ac_cv_func_pfopen = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using $pfopen" >&5
+$as_echo "Using $pfopen" >&6; }
+ LIBS="$LIBS $pfopen"
+ fi
+ fi
+ libpcap=FAIL
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to look for a local libpcap" >&5
+$as_echo_n "checking whether to look for a local libpcap... " >&6; }
+ # Check whether --enable-local-libpcap was given.
+if test "${enable_local_libpcap+set}" = set; then :
+ enableval=$enable_local_libpcap;
+else
+ enableval=yes
+fi
+
+ case "$enableval" in
+
+ no)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ #
+ # Don't look for a local libpcap.
+ #
+ using_local_libpcap=no
+ ;;
+
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ #
+ # Look for a local pcap library.
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for local pcap library" >&5
+$as_echo_n "checking for local pcap library... " >&6; }
+ lastdir=FAIL
+ places=`ls $srcdir/.. | sed -e 's,/$,,' -e "s,^,$srcdir/../," | \
+ egrep '/libpcap-[0-9]+\.[0-9]+(\.[0-9]*)?([ab][0-9]*|-PRE-GIT|rc.)?$'`
+ places2=`ls .. | sed -e 's,/$,,' -e "s,^,../," | \
+ egrep '/libpcap-[0-9]+\.[0-9]+(\.[0-9]*)?([ab][0-9]*|-PRE-GIT|rc.)?$'`
+ for dir in $places $srcdir/../libpcap ../libpcap $srcdir/libpcap $places2 ; do
+ basedir=`echo $dir | sed -e 's/[ab][0-9]*$//' | \
+ sed -e 's/-PRE-GIT$//' `
+ if test $lastdir = $basedir ; then
+ continue;
+ fi
+ lastdir=$dir
+ if test -r $dir/libpcap.a ; then
+ libpcap=$dir/libpcap.a
+ local_pcap_dir=$dir
+ fi
+ done
+ if test $libpcap = FAIL ; then
+ #
+ # We didn't find a local libpcap.
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+ using_local_libpcap=no;
+ else
+ #
+ # We found a local libpcap.
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libpcap" >&5
+$as_echo "$libpcap" >&6; }
+ using_local_libpcap=yes
+ fi
+ ;;
+ esac
+
+ if test $using_local_libpcap = no ; then
+ #
+ # We didn't find a local libpcap.
+ # Look for an installed pkg-config.
+ #
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+ if test -n "$PKG_CONFIG" ; then
+ #
+ # We have it. Are there .pc files for libpcap?
+ #
+ # --exists was introduced in pkg-config 0.4.0; that
+ # dates back to late 2000, so we won't worry about
+ # earlier releases that lack it.
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether there are .pc files for libpcap" >&5
+$as_echo_n "checking whether there are .pc files for libpcap... " >&6; }
+ if "$PKG_CONFIG" libpcap --exists ; then
+ #
+ # Yes, so we can use pkg-config to get configuration
+ # information for libpcap.
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ pkg_config_usable=yes
+ else
+ #
+ # No, so we can't use pkg-config to get configuration
+ # information for libpcap.
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ pkg_config_usable=no
+ fi
+ else
+ #
+ # We don't have it, so we obviously can't use it.
+ #
+ pkg_config_usable=no
+ fi
+ if test "$pkg_config_usable" = "yes" ; then
+ #
+ # Found both - use pkg-config to get the include flags for
+ # libpcap and the flags to link with libpcap.
+ #
+ # Please read section 11.6 "Shell Substitutions"
+ # in the autoconf manual before doing anything
+ # to this that involves quoting. Especially note
+ # the statement "There is just no portable way to use
+ # double-quoted strings inside double-quoted back-quoted
+ # expressions (pfew!)."
+ #
+ cflags=`"$PKG_CONFIG" libpcap --cflags`
+ V_INCLS="$cflags $V_INCLS"
+ libpcap=`"$PKG_CONFIG" libpcap --libs`
+ else
+ #
+ # No pkg-config
+ # Look for an installed pcap-config.
+ #
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pcap-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pcap-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PCAP_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PCAP_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PCAP_CONFIG="$PCAP_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PCAP_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PCAP_CONFIG=$ac_cv_path_PCAP_CONFIG
+if test -n "$PCAP_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PCAP_CONFIG" >&5
+$as_echo "$PCAP_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PCAP_CONFIG"; then
+ ac_pt_PCAP_CONFIG=$PCAP_CONFIG
+ # Extract the first word of "pcap-config", so it can be a program name with args.
+set dummy pcap-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PCAP_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_PCAP_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PCAP_CONFIG="$ac_pt_PCAP_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_PCAP_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PCAP_CONFIG=$ac_cv_path_ac_pt_PCAP_CONFIG
+if test -n "$ac_pt_PCAP_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PCAP_CONFIG" >&5
+$as_echo "$ac_pt_PCAP_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_pt_PCAP_CONFIG" = x; then
+ PCAP_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PCAP_CONFIG=$ac_pt_PCAP_CONFIG
+ fi
+else
+ PCAP_CONFIG="$ac_cv_path_PCAP_CONFIG"
+fi
+
+ if test -n "$PCAP_CONFIG" ; then
+ #
+ # Found - use it to get the include flags for
+ # libpcap and the flags to link with libpcap.
+ #
+ # If this is a vendor-supplied pcap-config, which
+ # we define as being "a pcap-config in /usr/bin
+ # or /usr/ccs/bin" (the latter is for Solaris and
+ # Sun/Oracle Studio), there are some issues. Work
+ # around them.
+ #
+ if test \( "$PCAP_CONFIG" = "/usr/bin/pcap-config" \) -o \
+ \( "$PCAP_CONFIG" = "/usr/ccs/bin/pcap-config" \) ; then
+ #
+ # It's vendor-supplied.
+ #
+ case "$host_os" in
+
+ darwin*)
+ #
+ # This is macOS or another Darwin-based OS.
+ #
+ # That means that /usr/bin/pcap-config it
+ # may provide -I/usr/local/include with --cflags
+ # and -L/usr/local/lib with --libs, rather than
+ # pointing to the OS-supplied library and
+ # Xcode-supplied headers. Remember that, so we
+ # ignore those values.
+ #
+ _broken_apple_pcap_config=yes
+ ;;
+
+ solaris*)
+ #
+ # This is Solaris 2 or later, i.e. SunOS 5.x.
+ #
+ # At least on Solaris 11; there's /usr/bin/pcap-config,
+ # which reports -L/usr/lib with --libs, causing
+ # the 32-bit libraries to be found, and there's
+ # /usr/bin/{64bitarch}/pcap-config, where {64bitarch}
+ # is a name for the 64-bit version of the instruction
+ # set, which reports -L /usr/lib/{64bitarch}, causing
+ # the 64-bit libraries to be found.
+ #
+ # So if we're building 64-bit targets, we replace
+ # PCAP_CONFIG with /usr/bin/{64bitarch}; we get
+ # {64bitarch} as the output of "isainfo -n".
+ #
+ # Are we building 32-bit or 64-bit? Get the
+ # size of void *, and check that.
+ #
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+$as_echo_n "checking size of void *... " >&6; }
+if ${ac_cv_sizeof_void_p+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_void_p" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (void *)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_void_p=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+$as_echo "$ac_cv_sizeof_void_p" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+_ACEOF
+
+
+ if test ac_cv_sizeof_void_p -eq 8 ; then
+ isainfo_output=`isainfo -n`
+ if test ! -z "$isainfo_output" ; then
+ #
+ # Success - change PCAP_CONFIG.
+ #
+ PCAP_CONFIG=`echo $PCAP_CONFIG | sed "s;/bin/;/bin/$isainfo_output/;"`
+ fi
+ fi
+ ;;
+ esac
+ fi
+ #
+ # Please read section 11.6 "Shell Substitutions"
+ # in the autoconf manual before doing anything
+ # to this that involves quoting. Especially note
+ # the statement "There is just no portable way to use
+ # double-quoted strings inside double-quoted back-quoted
+ # expressions (pfew!)."
+ #
+ cflags=`"$PCAP_CONFIG" --cflags`
+ #
+ # Work around macOS (and probably other Darwin) brokenness,
+ # by not adding /usr/local/include if it's from the broken
+ # Apple pcap-config.
+ #
+ if test "$_broken_apple_pcap_config" = "yes" ; then
+ #
+ # Strip -I/usr/local/include with sed.
+ #
+ cflags=`echo $cflags | sed 's;-I/usr/local/include;;'`
+ fi
+ V_INCLS="$cflags $V_INCLS"
+ libpcap=`"$PCAP_CONFIG" --libs`
+ #
+ # Work around macOS (and probably other Darwin) brokenness,
+ # by not adding /usr/local/lib if it's from the broken
+ # Apple pcap-config.
+ #
+ if test "$_broken_apple_pcap_config" = "yes" ; then
+ #
+ # Strip -L/usr/local/lib with sed.
+ #
+ libpcap=`echo $libpcap | sed 's;-L/usr/local/lib;;'`
+ fi
+ else
+ #
+ # Not found; look for an installed pcap.
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpcap" >&5
+$as_echo_n "checking for main in -lpcap... " >&6; }
+if ${ac_cv_lib_pcap_main+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpcap $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_pcap_main=yes
+else
+ ac_cv_lib_pcap_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcap_main" >&5
+$as_echo "$ac_cv_lib_pcap_main" >&6; }
+if test "x$ac_cv_lib_pcap_main" = xyes; then :
+ libpcap="-lpcap"
+fi
+
+ if test $libpcap = FAIL ; then
+ as_fn_error $? "see the INSTALL doc for more info" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for extraneous pcap header directories" >&5
+$as_echo_n "checking for extraneous pcap header directories... " >&6; }
+ if test \( ! -r /usr/local/include/pcap.h \) -a \
+ \( ! -r /usr/include/pcap.h \); then
+ if test -r /usr/local/include/pcap/pcap.h; then
+ d="/usr/local/include/pcap"
+ elif test -r /usr/include/pcap/pcap.h; then
+ d="/usr/include/pcap"
+ fi
+ fi
+ if test -z "$d" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+ else
+ V_INCLS="-I$d $V_INCLS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found -- -I$d added" >&5
+$as_echo "found -- -I$d added" >&6; }
+ fi
+ fi
+ fi
+ else
+ #
+ # We found a local libpcap. Add it to the dependencies for
+ # tcpdump.
+ #
+ V_PCAPDEP=$libpcap
+
+ #
+ # Look for its pcap-config script.
+ #
+ # Extract the first word of "pcap-config", so it can be a program name with args.
+set dummy pcap-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PCAP_CONFIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PCAP_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PCAP_CONFIG="$PCAP_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $local_pcap_dir
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PCAP_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PCAP_CONFIG=$ac_cv_path_PCAP_CONFIG
+if test -n "$PCAP_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PCAP_CONFIG" >&5
+$as_echo "$PCAP_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ if test -n "$PCAP_CONFIG"; then
+ #
+ # We don't want its --cflags or --libs output, because
+ # those presume it's installed. For the C compiler flags,
+ # we add the source directory for the local libpcap, so
+ # we pick up its header files.
+ #
+ # We do, however, want its additional libraries, as required
+ # when linking statically, because it makes calls to
+ # routines in those libraries, so we'll need to link with
+ # them, because we'll be linking statically with it.
+ #
+ # If it supports --static-pcap-only. use that, as we will be
+ # linking with a static libpcap but won't be linking
+ # statically with any of the libraries on which it depends;
+ # those libraries might not even have static versions
+ # installed.
+ #
+ # That means we need to find out the libraries on which
+ # libpcap directly depends, so we can link with them, but we
+ # don't need to link with the libraries on which those
+ # libraries depend as, on all UN*Xes with which I'm
+ # familiar, the libraries on which a shared library depends
+ # are stored in the library and are automatically loaded by
+ # the run-time linker, without the executable having to be
+ # linked with those libraries. (This allows a library to be
+ # changed to depend on more libraries without breaking that
+ # library's ABI.)
+ #
+ # The only way to test for that support is to see if the
+ # script contains the string "static-pcap-only"; we can't
+ # try using that flag and checking for errors, as the
+ # versions of the script that didn't have that flag wouldn't
+ # report or return an error for an unsupported command-line
+ # flag. Those older versions provided, with --static, only
+ # the libraries on which libpcap depends, not the
+ # dependencies of those libraries; the versions with
+ # --static-pcap-only provide all the dependencies with
+ # --static, for the benefit of programs that are completely
+ # statically linked, and provide only the direct
+ # dependencies with --static-pcap-only.
+ #
+ if grep -s -q "static-pcap-only" "$PCAP_CONFIG"
+ then
+ static_opt="--static-pcap-only"
+ else
+ static_opt="--static"
+ fi
+ V_INCLS="-I$local_pcap_dir $V_INCLS"
+ additional_libs=`"$PCAP_CONFIG" $static_opt --additional-libs`
+ libpcap="$libpcap $additional_libs"
+ else
+ #
+ # It doesn't have a pcap-config script.
+ # Make sure it has a pcap.h file.
+ #
+ places=`ls $srcdir/.. | sed -e 's,/$,,' -e "s,^,$srcdir/../," | \
+ egrep '/libpcap-[0-9]*.[0-9]*(.[0-9]*)?([ab][0-9]*)?$'`
+ places2=`ls .. | sed -e 's,/$,,' -e "s,^,../," | \
+ egrep '/libpcap-[0-9]*.[0-9]*(.[0-9]*)?([ab][0-9]*)?$'`
+ pcapH=FAIL
+ if test -r $local_pcap_dir/pcap.h; then
+ pcapH=$local_pcap_dir
+ else
+ for dir in $places $srcdir/../libpcap ../libpcap $srcdir/libpcap $places2 ; do
+ if test -r $dir/pcap.h ; then
+ pcapH=$dir
+ fi
+ done
+ fi
+
+ if test $pcapH = FAIL ; then
+ as_fn_error $? "cannot find pcap.h: see INSTALL" "$LINENO" 5
+ fi
+
+ #
+ # Force the compiler to look for header files in the
+ # directory containing pcap.h.
+ #
+ V_INCLS="-I$pcapH $V_INCLS"
+ fi
+ fi
+
+ if test -z "$PKG_CONFIG" -a -z "$PCAP_CONFIG"; then
+ #
+ # We don't have pkg-config or pcap-config; find out any additional
+ # link flags we need. (If we have pkg-config or pcap-config, we
+ # assume it tells us what we need.)
+ #
+ case "$host_os" in
+
+ aix*)
+ #
+ # If libpcap is DLPI-based, we have to use /lib/pse.exp if
+ # present, as we use the STREAMS routines.
+ #
+ # (XXX - true only if we're linking with a static libpcap?)
+ #
+ pseexe="/lib/pse.exp"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $pseexe" >&5
+$as_echo_n "checking for $pseexe... " >&6; }
+ if test -f $pseexe ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ LIBS="$LIBS -I:$pseexe"
+ fi
+
+ #
+ # If libpcap is BPF-based, we need "-lodm" and "-lcfg", as
+ # we use them to load the BPF module.
+ #
+ # (XXX - true only if we're linking with a static libpcap?)
+ #
+ LIBS="$LIBS -lodm -lcfg"
+ ;;
+
+ solaris*)
+ # libdlpi is needed for Solaris 11 and later.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlpi_walk in -ldlpi" >&5
+$as_echo_n "checking for dlpi_walk in -ldlpi... " >&6; }
+if ${ac_cv_lib_dlpi_dlpi_walk+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldlpi -L/lib $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlpi_walk ();
+int
+main ()
+{
+return dlpi_walk ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_dlpi_dlpi_walk=yes
+else
+ ac_cv_lib_dlpi_dlpi_walk=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dlpi_dlpi_walk" >&5
+$as_echo "$ac_cv_lib_dlpi_dlpi_walk" >&6; }
+if test "x$ac_cv_lib_dlpi_dlpi_walk" = xyes; then :
+ LIBS="$LIBS -ldlpi" LDFLAGS="-L/lib $LDFLAGS"
+fi
+
+ ;;
+ esac
+ fi
+
+ LIBS="$libpcap $LIBS"
+
+ ac_fn_c_check_func "$LINENO" "pcap_loop" "ac_cv_func_pcap_loop"
+if test "x$ac_cv_func_pcap_loop" = xyes; then :
+
+else
+
+ as_fn_error $? "This is a bug, please follow the guidelines in CONTRIBUTING.md and include the
+config.log file in your report. If you have downloaded libpcap from
+tcpdump.org, and built it yourself, please also include the config.log
+file from the libpcap source directory, the Makefile from the libpcap
+source directory, and the output of the make process for libpcap, as
+this could be a problem with the libpcap that was built, and we will
+not be able to determine why this is happening, and thus will not be
+able to fix it, without that information, as we have not been able to
+reproduce this problem ourselves." "$LINENO" 5
+
+fi
+
+
+
+#
+# Check for these after AC_LBL_LIBPCAP, so we link with the appropriate
+# libraries (e.g., "-lsocket -lnsl" on Solaris).
+#
+# You are in a twisty little maze of UN*Xes, all different.
+# Some might not have ether_ntohost().
+# Some might have it and declare it in <net/ethernet.h>.
+# Some might have it and declare it in <netinet/ether.h>
+# Some might have it and declare it in <sys/ethernet.h>.
+# Some might have it and declare it in <arpa/inet.h>.
+# Some might have it and declare it in <netinet/if_ether.h>.
+# Some might have it and not declare it in any header file.
+#
+# Before you is a C compiler.
+#
+for ac_func in ether_ntohost
+do :
+ ac_fn_c_check_func "$LINENO" "ether_ntohost" "ac_cv_func_ether_ntohost"
+if test "x$ac_cv_func_ether_ntohost" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_ETHER_NTOHOST 1
+_ACEOF
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for buggy ether_ntohost" >&5
+$as_echo_n "checking for buggy ether_ntohost... " >&6; }
+if ${ac_cv_buggy_ether_ntohost+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test "$cross_compiling" = yes; then :
+ ac_cv_buggy_ether_ntohost="not while cross-compiling"
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <netdb.h>
+ #include <netinet/ether.h>
+ #include <stdlib.h>
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+
+ int
+ main(int argc, char **argv)
+ {
+ u_char ea[6] = { 0xff, 0xff, 0xff, 0xff, 0xff };
+ char name[MAXHOSTNAMELEN];
+
+ ether_ntohost(name, (struct ether_addr *)ea);
+ exit(0);
+ }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_buggy_ether_ntohost=no
+else
+ ac_cv_buggy_ether_ntohost=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_buggy_ether_ntohost" >&5
+$as_echo "$ac_cv_buggy_ether_ntohost" >&6; }
+ if test "$ac_cv_buggy_ether_ntohost" = "no"; then
+
+$as_echo "#define USE_ETHER_NTOHOST 1" >>confdefs.h
+
+ fi
+
+fi
+done
+
+if test "$ac_cv_func_ether_ntohost" = yes -a \
+ "$ac_cv_buggy_ether_ntohost" = "no"; then
+ #
+ # OK, we have ether_ntohost(). Is it declared in <net/ethernet.h>?
+ #
+ # This test fails if we don't have <net/ethernet.h> or if we do
+ # but it doesn't declare ether_ntohost().
+ #
+ ac_fn_c_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" "
+#include <net/ethernet.h>
+
+"
+if test "x$ac_cv_have_decl_ether_ntohost" = xyes; then :
+
+
+$as_echo "#define NET_ETHERNET_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h
+
+
+fi
+
+ #
+ # Did that succeed?
+ #
+ if test "$ac_cv_have_decl_ether_ntohost" != yes; then
+ #
+ # No, how about <netinet/ether.h>, as on Linux?
+ #
+ # This test fails if we don't have <netinet/ether.h>
+ # or if we do but it doesn't declare ether_ntohost().
+ #
+ # Unset ac_cv_have_decl_ether_ntohost so we don't
+ # treat the previous failure as a cached value and
+ # suppress the next test.
+ #
+ unset ac_cv_have_decl_ether_ntohost
+ ac_fn_c_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" "
+#include <netinet/ether.h>
+
+"
+if test "x$ac_cv_have_decl_ether_ntohost" = xyes; then :
+
+
+$as_echo "#define NETINET_ETHER_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h
+
+
+fi
+
+ fi
+ #
+ # Did that succeed?
+ #
+ if test "$ac_cv_have_decl_ether_ntohost" != yes; then
+ #
+ # No, how about <sys/ethernet.h>, as on Solaris 10
+ # and later?
+ #
+ # This test fails if we don't have <sys/ethernet.h>
+ # or if we do but it doesn't declare ether_ntohost().
+ #
+ # Unset ac_cv_have_decl_ether_ntohost so we don't
+ # treat the previous failure as a cached value and
+ # suppress the next test.
+ #
+ unset ac_cv_have_decl_ether_ntohost
+ ac_fn_c_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" "
+#include <sys/ethernet.h>
+
+"
+if test "x$ac_cv_have_decl_ether_ntohost" = xyes; then :
+
+
+$as_echo "#define SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h
+
+
+fi
+
+ fi
+ #
+ # Did that succeed?
+ #
+ if test "$ac_cv_have_decl_ether_ntohost" != yes; then
+ #
+ # No, how about <arpa/inet.h>, as in AIX?
+ #
+ # This test fails if we don't have <arpa/inet.h>
+ # (if we have ether_ntohost(), we should have
+ # networking, and if we have networking, we should
+ # have <arpa/inet.h>) or if we do but it doesn't
+ # declare ether_ntohost().
+ #
+ # Unset ac_cv_have_decl_ether_ntohost so we don't
+ # treat the previous failure as a cached value and
+ # suppress the next test.
+ #
+ unset ac_cv_have_decl_ether_ntohost
+ ac_fn_c_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" "
+#include <arpa/inet.h>
+
+"
+if test "x$ac_cv_have_decl_ether_ntohost" = xyes; then :
+
+
+$as_echo "#define ARPA_INET_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h
+
+
+fi
+
+ fi
+ #
+ # Did that succeed?
+ #
+ if test "$ac_cv_have_decl_ether_ntohost" != yes; then
+ #
+ # No, how about <netinet/if_ether.h>?
+ # On some platforms, it requires <net/if.h> and
+ # <netinet/in.h>, and we always include it with
+ # both of them, so test it with both of them.
+ #
+ # This test fails if we don't have <netinet/if_ether.h>
+ # and the headers we include before it, or if we do but
+ # <netinet/if_ether.h> doesn't declare ether_hostton().
+ #
+ # Unset ac_cv_have_decl_ether_ntohost so we don't
+ # treat the previous failure as a cached value and
+ # suppress the next test.
+ #
+ unset ac_cv_have_decl_ether_ntohost
+ ac_fn_c_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" "
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <net/if.h>
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+
+"
+if test "x$ac_cv_have_decl_ether_ntohost" = xyes; then :
+
+
+$as_echo "#define NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h
+
+
+fi
+
+ fi
+ #
+ # After all that, is ether_ntohost() declared?
+ #
+ if test "$ac_cv_have_decl_ether_ntohost" = yes; then
+ #
+ # Yes.
+ #
+
+$as_echo "#define HAVE_DECL_ETHER_NTOHOST 1" >>confdefs.h
+
+ else
+ #
+ # No, we'll have to declare it ourselves.
+ # Do we have "struct ether_addr" if we include
+ # <netinet/if_ether.h>?
+ #
+ ac_fn_c_check_type "$LINENO" "struct ether_addr" "ac_cv_type_struct_ether_addr" "
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <net/if.h>
+ #include <netinet/in.h>
+ #include <netinet/if_ether.h>
+
+"
+if test "x$ac_cv_type_struct_ether_addr" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_ETHER_ADDR 1
+_ACEOF
+
+
+fi
+
+ fi
+fi
+
+ac_fn_c_check_func "$LINENO" "pcap_list_datalinks" "ac_cv_func_pcap_list_datalinks"
+if test "x$ac_cv_func_pcap_list_datalinks" = xyes; then :
+
+
+$as_echo "#define HAVE_PCAP_LIST_DATALINKS 1" >>confdefs.h
+
+ for ac_func in pcap_free_datalinks
+do :
+ ac_fn_c_check_func "$LINENO" "pcap_free_datalinks" "ac_cv_func_pcap_free_datalinks"
+if test "x$ac_cv_func_pcap_free_datalinks" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PCAP_FREE_DATALINKS 1
+_ACEOF
+
+fi
+done
+
+
+else
+
+ case " $LIBOBJS " in
+ *" datalinks.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS datalinks.$ac_objext"
+ ;;
+esac
+
+
+fi
+
+
+ac_fn_c_check_func "$LINENO" "pcap_datalink_name_to_val" "ac_cv_func_pcap_datalink_name_to_val"
+if test "x$ac_cv_func_pcap_datalink_name_to_val" = xyes; then :
+
+
+$as_echo "#define HAVE_PCAP_DATALINK_NAME_TO_VAL 1" >>confdefs.h
+
+ ac_fn_c_check_func "$LINENO" "pcap_datalink_val_to_description" "ac_cv_func_pcap_datalink_val_to_description"
+if test "x$ac_cv_func_pcap_datalink_val_to_description" = xyes; then :
+
+$as_echo "#define HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION 1" >>confdefs.h
+
+else
+
+ case " $LIBOBJS " in
+ *" dlnames.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS dlnames.$ac_objext"
+ ;;
+esac
+
+
+fi
+
+
+else
+
+ case " $LIBOBJS " in
+ *" dlnames.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS dlnames.$ac_objext"
+ ;;
+esac
+
+
+fi
+
+
+for ac_func in pcap_set_datalink
+do :
+ ac_fn_c_check_func "$LINENO" "pcap_set_datalink" "ac_cv_func_pcap_set_datalink"
+if test "x$ac_cv_func_pcap_set_datalink" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PCAP_SET_DATALINK 1
+_ACEOF
+
+fi
+done
+
+
+for ac_func in pcap_breakloop
+do :
+ ac_fn_c_check_func "$LINENO" "pcap_breakloop" "ac_cv_func_pcap_breakloop"
+if test "x$ac_cv_func_pcap_breakloop" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PCAP_BREAKLOOP 1
+_ACEOF
+
+fi
+done
+
+
+#
+# Do we have the new open API? Check for pcap_create, and assume that,
+# if we do, we also have pcap_activate() and the other new routines
+# introduced in libpcap 1.0.0.
+#
+for ac_func in pcap_create
+do :
+ ac_fn_c_check_func "$LINENO" "pcap_create" "ac_cv_func_pcap_create"
+if test "x$ac_cv_func_pcap_create" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PCAP_CREATE 1
+_ACEOF
+
+fi
+done
+
+if test $ac_cv_func_pcap_create = "yes" ; then
+ #
+ # OK, do we have pcap_set_tstamp_type? If so, assume we have
+ # pcap_list_tstamp_types and pcap_free_tstamp_types as well.
+ #
+ for ac_func in pcap_set_tstamp_type
+do :
+ ac_fn_c_check_func "$LINENO" "pcap_set_tstamp_type" "ac_cv_func_pcap_set_tstamp_type"
+if test "x$ac_cv_func_pcap_set_tstamp_type" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PCAP_SET_TSTAMP_TYPE 1
+_ACEOF
+
+fi
+done
+
+ #
+ # And do we have pcap_set_tstamp_precision? If so, we assume
+ # we also have pcap_open_offline_with_tstamp_precision.
+ #
+ for ac_func in pcap_set_tstamp_precision
+do :
+ ac_fn_c_check_func "$LINENO" "pcap_set_tstamp_precision" "ac_cv_func_pcap_set_tstamp_precision"
+if test "x$ac_cv_func_pcap_set_tstamp_precision" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PCAP_SET_TSTAMP_PRECISION 1
+_ACEOF
+
+fi
+done
+
+fi
+
+#
+# Check for a miscellaneous collection of functions which we use
+# if we have them.
+#
+for ac_func in pcap_findalldevs
+do :
+ ac_fn_c_check_func "$LINENO" "pcap_findalldevs" "ac_cv_func_pcap_findalldevs"
+if test "x$ac_cv_func_pcap_findalldevs" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PCAP_FINDALLDEVS 1
+_ACEOF
+
+fi
+done
+
+if test $ac_cv_func_pcap_findalldevs = "yes" ; then
+ savedcppflags="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $V_INCLS"
+ ac_fn_c_check_type "$LINENO" "pcap_if_t" "ac_cv_type_pcap_if_t" "#include <pcap.h>
+"
+if test "x$ac_cv_type_pcap_if_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_PCAP_IF_T 1
+_ACEOF
+
+
+fi
+
+ CPPFLAGS="$savedcppflags"
+fi
+for ac_func in pcap_dump_flush pcap_lib_version
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+if test $ac_cv_func_pcap_lib_version = "no" ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pcap_version is defined by libpcap" >&5
+$as_echo_n "checking whether pcap_version is defined by libpcap... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ extern char pcap_version[];
+
+ return (int)pcap_version;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_lbl_cv_pcap_version_defined=yes
+else
+ ac_lbl_cv_pcap_version_defined=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$ac_lbl_cv_pcap_version_defined" = yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_PCAP_VERSION 1" >>confdefs.h
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+fi
+for ac_func in pcap_setdirection pcap_set_immediate_mode pcap_dump_ftell64
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+for ac_func in pcap_open pcap_findalldevs_ex
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ac_fn_c_check_func "$LINENO" "pcap_dump_ftell" "ac_cv_func_pcap_dump_ftell"
+if test "x$ac_cv_func_pcap_dump_ftell" = xyes; then :
+ $as_echo "#define HAVE_PCAP_DUMP_FTELL 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" pcap_dump_ftell.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS pcap_dump_ftell.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+
+#
+# Check for special debugging functions
+#
+for ac_func in pcap_set_parser_debug
+do :
+ ac_fn_c_check_func "$LINENO" "pcap_set_parser_debug" "ac_cv_func_pcap_set_parser_debug"
+if test "x$ac_cv_func_pcap_set_parser_debug" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PCAP_SET_PARSER_DEBUG 1
+_ACEOF
+
+fi
+done
+
+if test "$ac_cv_func_pcap_set_parser_debug" = "no" ; then
+ #
+ # OK, we don't have pcap_set_parser_debug() to set the libpcap
+ # filter expression parser debug flag; can we directly set the
+ # flag?
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pcap_debug is defined by libpcap" >&5
+$as_echo_n "checking whether pcap_debug is defined by libpcap... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ extern int pcap_debug;
+
+ return pcap_debug;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_lbl_cv_pcap_debug_defined=yes
+else
+ ac_lbl_cv_pcap_debug_defined=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$ac_lbl_cv_pcap_debug_defined" = yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_PCAP_DEBUG 1" >>confdefs.h
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ #
+ # OK, what about "yydebug"?
+ #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yydebug is defined by libpcap" >&5
+$as_echo_n "checking whether yydebug is defined by libpcap... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ extern int yydebug;
+
+ return yydebug;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_lbl_cv_yydebug_defined=yes
+else
+ ac_lbl_cv_yydebug_defined=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$ac_lbl_cv_yydebug_defined" = yes ; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_YYDEBUG 1" >>confdefs.h
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ fi
+ fi
+fi
+for ac_func in pcap_set_optimizer_debug
+do :
+ ac_fn_c_check_func "$LINENO" "pcap_set_optimizer_debug" "ac_cv_func_pcap_set_optimizer_debug"
+if test "x$ac_cv_func_pcap_set_optimizer_debug" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PCAP_SET_OPTIMIZER_DEBUG 1
+_ACEOF
+
+fi
+done
+
+ac_fn_c_check_func "$LINENO" "bpf_dump" "ac_cv_func_bpf_dump"
+if test "x$ac_cv_func_bpf_dump" = xyes; then :
+ $as_echo "#define HAVE_BPF_DUMP 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" bpf_dump.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS bpf_dump.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+V_GROUP=0
+if test -f /etc/group -a ! -z "`grep '^wheel:' /etc/group`" ; then
+ V_GROUP=wheel
+fi
+#
+# Assume V7/BSD convention for man pages (file formats in section 5,
+# miscellaneous info in section 7).
+#
+MAN_FILE_FORMATS=5
+MAN_MISC_INFO=7
+case "$host_os" in
+
+aix*)
+
+$as_echo "#define _SUN 1" >>confdefs.h
+
+ ;;
+
+hpux*)
+ #
+ # Use System V conventions for man pages.
+ #
+ MAN_FILE_FORMATS=4
+ MAN_MISC_INFO=5
+ ;;
+
+irix*)
+ V_GROUP=sys
+
+ #
+ # Use System V conventions for man pages.
+ #
+ MAN_FILE_FORMATS=4
+ MAN_MISC_INFO=5
+ ;;
+
+osf*)
+ V_GROUP=system
+
+ #
+ # Use System V conventions for man pages.
+ #
+ MAN_FILE_FORMATS=4
+ MAN_MISC_INFO=5
+ ;;
+
+solaris*)
+ V_GROUP=sys
+
+ #
+ # Use System V conventions for man pages.
+ #
+ MAN_FILE_FORMATS=4
+ MAN_MISC_INFO=5
+ ;;
+esac
+
+if test -f /dev/bpf0 ; then
+ V_GROUP=bpf
+fi
+
+#
+# Make sure we have a definition for C99's uintptr_t (regardless of
+# whether the environment is a C99 environment or not).
+#
+
+ ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default"
+if test "x$ac_cv_type_uintptr_t" = xyes; then :
+
+$as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h
+
+else
+ for ac_type in 'unsigned int' 'unsigned long int' \
+ 'unsigned long long int'; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define uintptr_t $ac_type
+_ACEOF
+
+ ac_type=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ test -z "$ac_type" && break
+ done
+fi
+
+
+
+#
+# Check whether we have pcap/pcap-inttypes.h.
+# If we do, we use that to get the C99 types defined.
+#
+savedcppflags="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $V_INCLS"
+for ac_header in pcap/pcap-inttypes.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "pcap/pcap-inttypes.h" "ac_cv_header_pcap_pcap_inttypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_pcap_pcap_inttypes_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PCAP_PCAP_INTTYPES_H 1
+_ACEOF
+
+fi
+
+done
+
+CPPFLAGS="$savedcppflags"
+
+#
+# Define the old BSD specified-width types in terms of the C99 types;
+# we may need them with libpcap include files.
+#
+ac_fn_c_check_type "$LINENO" "u_int8_t" "ac_cv_type_u_int8_t" "$ac_includes_default
+#include <sys/types.h>
+
+"
+if test "x$ac_cv_type_u_int8_t" = xyes; then :
+
+else
+
+$as_echo "#define u_int8_t uint8_t" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "u_int16_t" "ac_cv_type_u_int16_t" "$ac_includes_default
+#include <sys/types.h>
+
+"
+if test "x$ac_cv_type_u_int16_t" = xyes; then :
+
+else
+
+$as_echo "#define u_int16_t uint16_t" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "$ac_includes_default
+#include <sys/types.h>
+
+"
+if test "x$ac_cv_type_u_int32_t" = xyes; then :
+
+else
+
+$as_echo "#define u_int32_t uint32_t" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "$ac_includes_default
+#include <sys/types.h>
+
+"
+if test "x$ac_cv_type_u_int64_t" = xyes; then :
+
+else
+
+$as_echo "#define u_int64_t uint64_t" >>confdefs.h
+
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+
+rm -f os-proto.h
+ if test "${LBL_CFLAGS+set}" = set; then
+ V_CCOPT="$V_CCOPT ${LBL_CFLAGS}"
+ fi
+ if test -f .devel ; then
+ #
+ # Skip all the warning option stuff on some compilers.
+ #
+ if test "$ac_lbl_cc_dont_try_gcc_dashW" != yes; then
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -W option" >&5
+$as_echo_n "checking whether the compiler supports the -W option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -W"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -W"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wall option" >&5
+$as_echo_n "checking whether the compiler supports the -Wall option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wall"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wall"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wassign-enum option" >&5
+$as_echo_n "checking whether the compiler supports the -Wassign-enum option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wassign-enum"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wassign-enum"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wcast-qual option" >&5
+$as_echo_n "checking whether the compiler supports the -Wcast-qual option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wcast-qual"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wcast-qual"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wmissing-prototypes option" >&5
+$as_echo_n "checking whether the compiler supports the -Wmissing-prototypes option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wmissing-prototypes"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wmissing-prototypes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wmissing-variable-declarations option" >&5
+$as_echo_n "checking whether the compiler supports the -Wmissing-variable-declarations option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wmissing-variable-declarations"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wmissing-variable-declarations"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wold-style-definition option" >&5
+$as_echo_n "checking whether the compiler supports the -Wold-style-definition option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wold-style-definition"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wold-style-definition"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wpedantic option" >&5
+$as_echo_n "checking whether the compiler supports the -Wpedantic option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wpedantic"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wpedantic"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wpointer-arith option" >&5
+$as_echo_n "checking whether the compiler supports the -Wpointer-arith option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wpointer-arith"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wpointer-arith"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wpointer-sign option" >&5
+$as_echo_n "checking whether the compiler supports the -Wpointer-sign option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wpointer-sign"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wpointer-sign"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wshadow option" >&5
+$as_echo_n "checking whether the compiler supports the -Wshadow option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wshadow"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wshadow"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wsign-compare option" >&5
+$as_echo_n "checking whether the compiler supports the -Wsign-compare option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wsign-compare"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wsign-compare"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wstrict-prototypes option" >&5
+$as_echo_n "checking whether the compiler supports the -Wstrict-prototypes option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wstrict-prototypes"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wstrict-prototypes"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wunreachable-code-return option" >&5
+$as_echo_n "checking whether the compiler supports the -Wunreachable-code-return option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wunreachable-code-return"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wunreachable-code-return"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wused-but-marked-unused option" >&5
+$as_echo_n "checking whether the compiler supports the -Wused-but-marked-unused option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wused-but-marked-unused"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wused-but-marked-unused"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wwrite-strings option" >&5
+$as_echo_n "checking whether the compiler supports the -Wwrite-strings option... " >&6; }
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wwrite-strings"
+ #
+ # XXX - yes, this depends on the way AC_LANG_WERROR works,
+ # but no mechanism is provided to turn AC_LANG_WERROR on
+ # *and then turn it back off*, so that we *only* do it when
+ # testing compiler options - 15 years after somebody asked
+ # for it:
+ #
+ # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror
+ #
+ save_ac_c_werror_flag="$ac_c_werror_flag"
+ ac_c_werror_flag=yes
+ #
+ # We use AC_LANG_SOURCE() so that we can control the complete
+ # content of the program being compiled. We do not, for example,
+ # want the default "int main()" that AC_LANG_PROGRAM() generates,
+ # as it will generate a warning with -Wold-style-definition, meaning
+ # that we would treat it as not working, as the test will fail if
+ # *any* error output, including a warning due to the flag we're
+ # testing, is generated; see
+ #
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us
+ #
+ # This may, as per those two messages, be fixed in autoconf 2.70,
+ # but we only require 2.64 or newer for now.
+ #
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$save_CFLAGS"
+ V_CCOPT="$V_CCOPT -Wwrite-strings"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$save_CFLAGS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag="$save_ac_c_werror_flag"
+
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports generating dependencies" >&5
+$as_echo_n "checking whether the compiler supports generating dependencies... " >&6; }
+ if test "$GCC" = yes ; then
+ #
+ # GCC, or a compiler deemed to be GCC by AC_PROG_CC (even
+ # though it's not); we assume that, in this case, the flag
+ # would be -M.
+ #
+ ac_lbl_dependency_flag="-M"
+ else
+ #
+ # Not GCC or a compiler deemed to be GCC; what platform is
+ # this? (We're assuming that if the compiler isn't GCC
+ # it's the compiler from the vendor of the OS; that won't
+ # necessarily be true for x86 platforms, where it might be
+ # the Intel C compiler.)
+ #
+ case "$host_os" in
+
+ irix*|osf*|darwin*)
+ #
+ # MIPS C for IRIX, DEC C, and clang all use -M.
+ #
+ ac_lbl_dependency_flag="-M"
+ ;;
+
+ solaris*)
+ #
+ # Sun C uses -xM.
+ #
+ ac_lbl_dependency_flag="-xM"
+ ;;
+
+ hpux*)
+ #
+ # HP's older C compilers don't support this.
+ # HP's newer C compilers support this with
+ # either +M or +Make; the older compilers
+ # interpret +M as something completely
+ # different, so we use +Make so we don't
+ # think it works with the older compilers.
+ #
+ ac_lbl_dependency_flag="+Make"
+ ;;
+
+ *)
+ #
+ # Not one of the above; assume no support for
+ # generating dependencies.
+ #
+ ac_lbl_dependency_flag=""
+ ;;
+ esac
+ fi
+
+ #
+ # Is ac_lbl_dependency_flag defined and, if so, does the compiler
+ # complain about it?
+ #
+ # Note: clang doesn't seem to exit with an error status when handed
+ # an unknown non-warning error, even if you pass it
+ # -Werror=unknown-warning-option. However, it always supports
+ # -M, so the fact that this test always succeeds with clang
+ # isn't an issue.
+ #
+ if test ! -z "$ac_lbl_dependency_flag"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void) { return 0; }
+_ACEOF
+ if { { $as_echo "$as_me:${as_lineno-$LINENO}: eval \"\$CC \$ac_lbl_dependency_flag conftest.c >/dev/null 2>&1\""; } >&5
+ (eval "$CC $ac_lbl_dependency_flag conftest.c >/dev/null 2>&1") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, with $ac_lbl_dependency_flag" >&5
+$as_echo "yes, with $ac_lbl_dependency_flag" >&6; }
+ DEPENDENCY_CFLAG="$ac_lbl_dependency_flag"
+ MKDEP='${top_srcdir}/mkdep'
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ #
+ # We can't run mkdep, so have "make depend" do
+ # nothing.
+ #
+ MKDEP=:
+ fi
+ rm -rf conftest*
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ #
+ # We can't run mkdep, so have "make depend" do
+ # nothing.
+ #
+ MKDEP=:
+ fi
+
+
+
+ #
+ # We used to set -n32 for IRIX 6 when not using GCC (presumed
+ # to mean that we're using MIPS C or MIPSpro C); it specified
+ # the "new" faster 32-bit ABI, introduced in IRIX 6.2. I'm
+ # not sure why that would be something to do *only* with a
+ # .devel file; why should the ABI for which we produce code
+ # depend on .devel?
+ #
+ os=`echo $host_os | sed -e 's/\([0-9][0-9]*\)[^0-9].*$/\1/'`
+ name="lbl/os-$os.h"
+ if test -f $name ; then
+ ln -s $name os-proto.h
+
+$as_echo "#define HAVE_OS_PROTO_H 1" >>confdefs.h
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find $name" >&5
+$as_echo "$as_me: WARNING: can't find $name" >&2;}
+ fi
+ fi
+
+# Check for OpenSSL/libressl libcrypto
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use OpenSSL/libressl libcrypto" >&5
+$as_echo_n "checking whether to use OpenSSL/libressl libcrypto... " >&6; }
+# Specify location for both includes and libraries.
+want_libcrypto=ifavailable
+
+# Check whether --with-crypto was given.
+if test "${with_crypto+set}" = set; then :
+ withval=$with_crypto;
+ if test $withval = no
+ then
+ # User doesn't want to link with libcrypto.
+ want_libcrypto=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ elif test $withval = yes
+ then
+ # User wants to link with libcrypto but hasn't specified
+ # a directory.
+ want_libcrypto=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ # User wants to link with libcrypto and has specified
+ # a directory, so use the provided value.
+ want_libcrypto=yes
+ libcrypto_root=$withval
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, using the version installed in $withval" >&5
+$as_echo "yes, using the version installed in $withval" >&6; }
+
+ #
+ # Put the subdirectories of the libcrypto root directory
+ # at the front of the header and library search path.
+ #
+ CFLAGS="-I$withval/include $CFLAGS"
+ LIBS="-L$withval/lib $LIBS"
+ fi
+
+else
+
+ #
+ # Use libcrypto if it's present, otherwise don't; no directory
+ # was specified.
+ #
+ want_libcrypto=ifavailable
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, if available" >&5
+$as_echo "yes, if available" >&6; }
+
+fi
+
+if test "$want_libcrypto" != "no"; then
+ #
+ # Don't check for libcrypto unless we have its headers;
+ # Apple, bless their pointy little heads, apparently ship
+ # libcrypto as a library, but not the header files, in
+ # El Capitan, probably because they don't want you writing
+ # nasty portable code that could run on other UN*Xes, they
+ # want you writing code that uses their Shiny New Crypto
+ # Library and that only runs on macOS.
+ #
+ ac_fn_c_check_header_mongrel "$LINENO" "openssl/crypto.h" "ac_cv_header_openssl_crypto_h" "$ac_includes_default"
+if test "x$ac_cv_header_openssl_crypto_h" = xyes; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DES_cbc_encrypt in -lcrypto" >&5
+$as_echo_n "checking for DES_cbc_encrypt in -lcrypto... " >&6; }
+if ${ac_cv_lib_crypto_DES_cbc_encrypt+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrypto $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char DES_cbc_encrypt ();
+int
+main ()
+{
+return DES_cbc_encrypt ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_crypto_DES_cbc_encrypt=yes
+else
+ ac_cv_lib_crypto_DES_cbc_encrypt=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_DES_cbc_encrypt" >&5
+$as_echo "$ac_cv_lib_crypto_DES_cbc_encrypt" >&6; }
+if test "x$ac_cv_lib_crypto_DES_cbc_encrypt" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBCRYPTO 1
+_ACEOF
+
+ LIBS="-lcrypto $LIBS"
+
+fi
+
+ if test "$ac_cv_lib_crypto_DES_cbc_encrypt" = "yes"; then
+ for ac_header in openssl/evp.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "openssl/evp.h" "ac_cv_header_openssl_evp_h" "$ac_includes_default"
+if test "x$ac_cv_header_openssl_evp_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_OPENSSL_EVP_H 1
+_ACEOF
+
+fi
+
+done
+
+ #
+ # OK, then:
+ #
+ # 1) do we have EVP_CIPHER_CTX_new?
+ # If so, we use it to allocate an
+ # EVP_CIPHER_CTX, as EVP_CIPHER_CTX may be
+ # opaque; otherwise, we allocate it ourselves.
+ #
+ # 2) do we have EVP_DecryptInit_ex()?
+ # If so, we use it, because we need to be
+ # able to make two "initialize the cipher"
+ # calls, one with the cipher and key, and
+ # one with the IV, and, as of OpenSSL 1.1,
+ # You Can't Do That with EVP_DecryptInit(),
+ # because a call to EVP_DecryptInit() will
+ # unconditionally clear the context, and
+ # if you don't supply a cipher, it'll
+ # clear the cipher, rendering the context
+ # unusable and causing a crash.
+ #
+ for ac_func in EVP_CIPHER_CTX_new EVP_DecryptInit_ex
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+ fi
+
+fi
+
+
+fi
+
+# Check for libcap-ng
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use libcap-ng" >&5
+$as_echo_n "checking whether to use libcap-ng... " >&6; }
+# Specify location for both includes and libraries.
+want_libcap_ng=ifavailable
+
+# Check whether --with-cap_ng was given.
+if test "${with_cap_ng+set}" = set; then :
+ withval=$with_cap_ng;
+ if test $withval = no
+ then
+ want_libcap_ng=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ elif test $withval = yes
+ then
+ want_libcap_ng=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ fi
+
+else
+
+ #
+ # Use libcap-ng if it's present, otherwise don't.
+ #
+ want_libcap_ng=ifavailable
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, if available" >&5
+$as_echo "yes, if available" >&6; }
+
+fi
+
+if test "$want_libcap_ng" != "no"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for capng_change_id in -lcap-ng" >&5
+$as_echo_n "checking for capng_change_id in -lcap-ng... " >&6; }
+if ${ac_cv_lib_cap_ng_capng_change_id+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcap-ng $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char capng_change_id ();
+int
+main ()
+{
+return capng_change_id ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_cap_ng_capng_change_id=yes
+else
+ ac_cv_lib_cap_ng_capng_change_id=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cap_ng_capng_change_id" >&5
+$as_echo "$ac_cv_lib_cap_ng_capng_change_id" >&6; }
+if test "x$ac_cv_lib_cap_ng_capng_change_id" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBCAP_NG 1
+_ACEOF
+
+ LIBS="-lcap-ng $LIBS"
+
+fi
+
+ for ac_header in cap-ng.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "cap-ng.h" "ac_cv_header_cap_ng_h" "$ac_includes_default"
+if test "x$ac_cv_header_cap_ng_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_CAP_NG_H 1
+_ACEOF
+
+fi
+
+done
+
+fi
+
+if test "$missing_includes" = "yes"; then
+ CPPFLAGS="$CPPFLAGS -I$srcdir/missing"
+ V_INCLS="$V_INCLS -I$srcdir/missing"
+fi
+
+
+
+
+
+
+
+
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+ac_config_commands="$ac_config_commands default-1"
+
+ac_config_files="$ac_config_files Makefile tcpdump.1"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by tcpdump $as_me 4.99.4, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+tcpdump config.status 4.99.4
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "tcpdump.1") CONFIG_FILES="$CONFIG_FILES tcpdump.1" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+ ;;
+
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "default-1":C) if test -f .devel; then
+ echo timestamp > stamp-h
+ cat $srcdir/Makefile-devel-adds >> Makefile
+ make depend || exit 1
+fi ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+exit 0
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..18d59b6
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,1027 @@
+dnl Copyright (c) 1994, 1995, 1996, 1997
+dnl The Regents of the University of California. All rights reserved.
+dnl
+dnl Process this file with autoconf to produce a configure script.
+dnl
+
+#
+# See
+#
+# https://ftp.gnu.org/gnu/config/README
+#
+# for the URLs to use to fetch new versions of config.guess and
+# config.sub.
+#
+
+AC_PREREQ(2.69)
+AC_INIT(tcpdump, m4_esyscmd_s([cat VERSION]))
+AC_CONFIG_SRCDIR(tcpdump.c)
+
+AC_CANONICAL_HOST
+
+AC_LBL_C_INIT_BEFORE_CC(V_INCLS)
+#
+# Try to enable as many C99 features as we can.
+# At minimum, we want C++/C99-style // comments.
+#
+AC_PROG_CC_C99
+if test "$ac_cv_prog_cc_c99" = "no"; then
+ AC_MSG_WARN([The C compiler does not support C99; there may be compiler errors])
+fi
+AC_LBL_C_INIT(V_CCOPT, V_INCLS)
+AC_LBL_C_INLINE
+
+AC_CHECK_HEADERS(fcntl.h rpc/rpc.h rpc/rpcent.h net/if.h)
+
+case "$host_os" in
+
+darwin*)
+ AC_ARG_ENABLE(universal,
+ AS_HELP_STRING([--disable-universal],[don't build universal on macOS]))
+ if test "$enable_universal" != "no"; then
+ case "$host_os" in
+
+ darwin9.*)
+ #
+ # Leopard. Build for x86 and 32-bit PowerPC, with
+ # x86 first. (That's what Apple does.)
+ #
+ V_CCOPT="$V_CCOPT -arch i386 -arch ppc"
+ LDFLAGS="$LDFLAGS -arch i386 -arch ppc"
+ ;;
+
+ darwin10.*)
+ #
+ # Snow Leopard. Build for x86-64 and x86, with
+ # x86-64 first. (That's what Apple does.)
+ #
+ V_CCOPT="$V_CCOPT -arch x86_64 -arch i386"
+ LDFLAGS="$LDFLAGS -arch x86_64 -arch i386"
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+AC_ARG_WITH([smi],
+ [AS_HELP_STRING([--with-smi],
+ [link with libsmi (allows to load MIBs on the fly to decode SNMP packets) [default=yes, if available]])],
+ [],
+ [with_smi=yes])
+
+if test "x$with_smi" != "xno" ; then
+ AC_CHECK_HEADER(smi.h,
+ [
+ #
+ # OK, we found smi.h. Do we have libsmi with smiInit?
+ #
+ AC_CHECK_LIB(smi, smiInit,
+ [
+ #
+ # OK, we have libsmi with smiInit. Can we use it?
+ #
+ AC_MSG_CHECKING([whether to enable libsmi])
+ savedlibs="$LIBS"
+ LIBS="-lsmi $LIBS"
+ AC_TRY_RUN(
+ [
+/* libsmi available check */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <smi.h>
+int main()
+{
+ int current, revision, age, n;
+ const int required = 2;
+ if (smiInit(""))
+ exit(1);
+ if (strcmp(SMI_LIBRARY_VERSION, smi_library_version))
+ exit(2);
+ n = sscanf(smi_library_version, "%d:%d:%d", &current, &revision, &age);
+ if (n != 3)
+ exit(3);
+ if (required < current - age || required > current)
+ exit(4);
+ exit(0);
+}
+ ],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(USE_LIBSMI, 1,
+ [Define if you enable support for libsmi])
+ ],
+ [
+ dnl autoconf documentation says that
+ dnl $? contains the exit value.
+ dnl reality is that it does not.
+ dnl We leave this in just in case
+ dnl autoconf ever comes back to
+ dnl match the documentation.
+ case $? in
+ 1) AC_MSG_RESULT(no - smiInit failed) ;;
+ 2) AC_MSG_RESULT(no - header/library version mismatch) ;;
+ 3) AC_MSG_RESULT(no - can't determine library version) ;;
+ 4) AC_MSG_RESULT(no - too old) ;;
+ *) AC_MSG_RESULT(no) ;;
+ esac
+ LIBS="$savedlibs"
+ ],
+ [
+ AC_MSG_RESULT(not when cross-compiling)
+ LIBS="$savedlibs"
+ ]
+ )
+ ])
+ ])
+fi
+
+AC_MSG_CHECKING([whether to enable the possibly-buggy SMB printer])
+AC_ARG_ENABLE([smb],
+ [AS_HELP_STRING([--enable-smb],
+ [enable possibly-buggy SMB printer [default=no]])],
+ [],
+ [enableval=no])
+case "$enableval" in
+yes) AC_MSG_RESULT(yes)
+ AC_DEFINE(ENABLE_SMB, 1,
+ [define if you want to build the possibly-buggy SMB printer])
+ LOCALSRC="print-smb.c smbutil.c $LOCALSRC"
+ ;;
+*) AC_MSG_RESULT(no)
+ ;;
+esac
+
+AC_ARG_WITH(user, [ --with-user=USERNAME drop privileges by default to USERNAME])
+AC_MSG_CHECKING([whether to drop root privileges by default])
+if test ! -z "$with_user" ; then
+ AC_DEFINE_UNQUOTED(WITH_USER, "$withval",
+ [define if should drop privileges by default])
+ AC_MSG_RESULT(to \"$withval\")
+else
+ AC_MSG_RESULT(no)
+fi
+
+AC_ARG_WITH(chroot, [ --with-chroot=DIRECTORY when dropping privileges, chroot to DIRECTORY])
+AC_MSG_CHECKING([whether to chroot])
+if test ! -z "$with_chroot" && test "$with_chroot" != "no" ; then
+ AC_DEFINE_UNQUOTED(WITH_CHROOT, "$withval",
+ [define if should chroot when dropping privileges])
+ AC_MSG_RESULT(to \"$withval\")
+else
+ AC_MSG_RESULT(no)
+fi
+
+AC_ARG_WITH(sandbox-capsicum,
+ AS_HELP_STRING([--with-sandbox-capsicum],
+ [use Capsicum security functions @<:@default=yes, if available@:>@]))
+#
+# Check whether various functions are available. If any are, set
+# ac_lbl_capsicum_function_seen to yes; if any are not, set
+# ac_lbl_capsicum_function_not_seen to yes.
+#
+# We don't check cap_rights_init(), as it's a macro, wrapping another
+# function, in at least some versions of FreeBSD, and AC_CHECK_FUNCS()
+# doesn't handle that.
+#
+# All of the ones we check for must be available in order to enable
+# capsicum sandboxing.
+#
+# XXX - do we need to check for all of them, or are there some that, if
+# present, imply others are present?
+#
+if test -z "$with_sandbox_capsicum" || test "$with_sandbox_capsicum" != "no" ; then
+ #
+ # First, make sure we have the required header.
+ #
+ AC_CHECK_HEADER(sys/capsicum.h,
+ [
+ #
+ # We do; now make sure we have the required functions.
+ #
+ AC_CHECK_FUNCS(cap_enter cap_rights_limit cap_ioctls_limit openat,
+ ac_lbl_capsicum_function_seen=yes,
+ ac_lbl_capsicum_function_not_seen=yes)
+ ])
+ AC_CHECK_LIB(casper, cap_init, LIBS="$LIBS -lcasper")
+ AC_CHECK_LIB(cap_dns, cap_gethostbyaddr, LIBS="$LIBS -lcap_dns")
+fi
+AC_MSG_CHECKING([whether to sandbox using capsicum])
+if test "x$ac_lbl_capsicum_function_seen" = "xyes" -a "x$ac_lbl_capsicum_function_not_seen" != "xyes"; then
+ AC_DEFINE(HAVE_CAPSICUM, 1, [capsicum support available])
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_RESULT(no)
+fi
+AC_MSG_CHECKING([whether to sandbox using Casper library])
+if test "x$ac_cv_lib_casper_cap_init" = "xyes" -a "x$ac_cv_lib_cap_dns_cap_gethostbyaddr" = "xyes"; then
+ AC_DEFINE(HAVE_CASPER, 1, [Casper support available])
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_RESULT(no)
+fi
+
+#
+# We must check this before checking whether to check the OS's IPv6,
+# support because, on some platforms (such as SunOS 5.x), the test
+# program requires the extra networking libraries.
+#
+AC_LBL_LIBRARY_NET
+
+#
+# Check whether AF_INET6 and struct in6_addr are defined.
+# If they aren't both defined, we don't have sufficient OS
+# support for IPv6, so we don't look for IPv6 support libraries,
+# and we define AF_INET6 and struct in6_addr ourselves.
+#
+AC_MSG_CHECKING([whether the operating system supports IPv6])
+AC_COMPILE_IFELSE(
+ [
+ AC_LANG_SOURCE(
+ [[
+#include <string.h>
+/* AF_INET6 available check */
+#include <sys/types.h>
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
+#include <sys/socket.h>
+#include <netinet/in.h>
+#endif
+#ifdef AF_INET6
+void
+foo(struct in6_addr *addr)
+{
+ memset(addr, 0, sizeof (struct in6_addr));
+}
+#else
+#error "AF_INET6 not defined"
+#endif
+ ]])
+ ],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_OS_IPV6_SUPPORT, 1,
+ [define if the OS provides AF_INET6 and struct in6_addr])
+ ipv6=yes
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ipv6=no
+ ]
+)
+
+ipv6type=unknown
+ipv6lib=none
+ipv6trylibc=no
+
+if test "$ipv6" = "yes"; then
+ AC_MSG_CHECKING([ipv6 stack type])
+ for i in inria kame linux-glibc linux-libinet6 toshiba v6d zeta; do
+ case $i in
+ inria)
+ dnl http://www.kame.net/
+ AC_EGREP_CPP(yes,
+[#include <netinet/in.h>
+#ifdef IPV6_INRIA_VERSION
+yes
+#endif],
+ [ipv6type=$i])
+ ;;
+ kame)
+ dnl http://www.kame.net/
+ AC_EGREP_CPP(yes,
+[#include <netinet/in.h>
+#ifdef __KAME__
+yes
+#endif],
+ [ipv6type=$i;
+ ipv6lib=inet6;
+ ipv6libdir=/usr/local/v6/lib;
+ ipv6trylibc=yes])
+ ;;
+ linux-glibc)
+ dnl http://www.v6.linux.or.jp/
+ AC_EGREP_CPP(yes,
+[#include <features.h>
+#if defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
+yes
+#endif],
+ [ipv6type=$i])
+ ;;
+ linux-libinet6)
+ dnl http://www.v6.linux.or.jp/
+ dnl
+ dnl This also matches Solaris 8 and Tru64 UNIX 5.1,
+ dnl and possibly other versions of those OSes
+ dnl
+ if test -d /usr/inet6 -o -f /usr/include/netinet/ip6.h; then
+ ipv6type=$i
+ ipv6lib=inet6
+ ipv6libdir=/usr/inet6/lib
+ ipv6trylibc=yes;
+ CFLAGS="-I/usr/inet6/include $CFLAGS"
+ fi
+ ;;
+ toshiba)
+ AC_EGREP_CPP(yes,
+[#include <sys/param.h>
+#ifdef _TOSHIBA_INET6
+yes
+#endif],
+ [ipv6type=$i;
+ ipv6lib=inet6;
+ ipv6libdir=/usr/local/v6/lib])
+ ;;
+ v6d)
+ AC_EGREP_CPP(yes,
+[#include </usr/local/v6/include/sys/v6config.h>
+#ifdef __V6D__
+yes
+#endif],
+ [ipv6type=$i;
+ ipv6lib=v6;
+ ipv6libdir=/usr/local/v6/lib;
+ CFLAGS="-I/usr/local/v6/include $CFLAGS"])
+ ;;
+ zeta)
+ AC_EGREP_CPP(yes,
+[#include <sys/param.h>
+#ifdef _ZETA_MINAMI_INET6
+yes
+#endif],
+ [ipv6type=$i;
+ ipv6lib=inet6;
+ ipv6libdir=/usr/local/v6/lib])
+ ;;
+ esac
+ if test "$ipv6type" != "unknown"; then
+ break
+ fi
+ done
+ AC_MSG_RESULT($ipv6type)
+fi
+
+if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then
+ if test -d $ipv6libdir -a -f $ipv6libdir/lib$ipv6lib.a; then
+ LIBS="-L$ipv6libdir -l$ipv6lib $LIBS"
+ echo "You have $ipv6lib library, using it"
+ else
+ if test "$ipv6trylibc" = "yes"; then
+ echo "You do not have $ipv6lib library, using libc"
+ else
+ echo 'Fatal: no $ipv6lib library found. cannot continue.'
+ echo "You need to fetch lib$ipv6lib.a from appropriate"
+ echo 'ipv6 kit and compile beforehand.'
+ exit 1
+ fi
+ fi
+fi
+
+AC_REPLACE_FUNCS(strlcat strlcpy strdup strsep getservent getopt_long)
+AC_CHECK_FUNCS(fork vfork)
+AC_CHECK_FUNCS(setlinebuf)
+
+#
+# Make sure we have vsnprintf() and snprintf(); we require them.
+#
+AC_CHECK_FUNC(vsnprintf,,
+ AC_MSG_ERROR([vsnprintf() is required but wasn't found]))
+AC_CHECK_FUNC(snprintf,,
+ AC_MSG_ERROR([snprintf() is required but wasn't found]))
+
+#
+# Define HAVE_NO_PRINTF_Z to make it possible to disable test cases that
+# depend on %zu.
+#
+AC_MSG_CHECKING([whether printf(3) supports the z length modifier])
+AC_RUN_IFELSE(
+ [
+ AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+
+int main()
+{
+ char buf[100];
+ snprintf(buf, sizeof(buf), "%zu", sizeof(buf));
+ return strncmp(buf, "100", sizeof(buf)) ? 1 : 0;
+}
+ ]])
+ ],
+ [
+ AC_MSG_RESULT(yes)
+ ],
+ [
+ AC_MSG_RESULT(no)
+ AC_DEFINE(HAVE_NO_PRINTF_Z, 1,
+ [Define to 1 if printf(3) does not support the z length modifier.])
+ ],
+ [
+ AC_MSG_RESULT(not while cross-compiling)
+ ]
+)
+
+AC_CHECK_LIB(rpc, main) dnl It's unclear why we might need -lrpc
+
+dnl Some platforms may need -lnsl for getrpcbynumber.
+AC_SEARCH_LIBS(getrpcbynumber, nsl,
+ AC_DEFINE(HAVE_GETRPCBYNUMBER, 1, [define if you have getrpcbynumber()]))
+
+AC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS)
+
+#
+# Check for these after AC_LBL_LIBPCAP, so we link with the appropriate
+# libraries (e.g., "-lsocket -lnsl" on Solaris).
+#
+# You are in a twisty little maze of UN*Xes, all different.
+# Some might not have ether_ntohost().
+# Some might have it and declare it in <net/ethernet.h>.
+# Some might have it and declare it in <netinet/ether.h>
+# Some might have it and declare it in <sys/ethernet.h>.
+# Some might have it and declare it in <arpa/inet.h>.
+# Some might have it and declare it in <netinet/if_ether.h>.
+# Some might have it and not declare it in any header file.
+#
+# Before you is a C compiler.
+#
+AC_CHECK_FUNCS(ether_ntohost, [
+ AC_CACHE_CHECK(for buggy ether_ntohost, ac_cv_buggy_ether_ntohost, [
+ AC_TRY_RUN([
+ #include <netdb.h>
+ #include <netinet/ether.h>
+ #include <stdlib.h>
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+
+ int
+ main(int argc, char **argv)
+ {
+ u_char ea[6] = { 0xff, 0xff, 0xff, 0xff, 0xff };
+ char name[MAXHOSTNAMELEN];
+
+ ether_ntohost(name, (struct ether_addr *)ea);
+ exit(0);
+ }
+ ], [ac_cv_buggy_ether_ntohost=no],
+ [ac_cv_buggy_ether_ntohost=yes],
+ [ac_cv_buggy_ether_ntohost="not while cross-compiling"])])
+ if test "$ac_cv_buggy_ether_ntohost" = "no"; then
+ AC_DEFINE(USE_ETHER_NTOHOST, 1,
+ [define if you have ether_ntohost() and it works])
+ fi
+])
+if test "$ac_cv_func_ether_ntohost" = yes -a \
+ "$ac_cv_buggy_ether_ntohost" = "no"; then
+ #
+ # OK, we have ether_ntohost(). Is it declared in <net/ethernet.h>?
+ #
+ # This test fails if we don't have <net/ethernet.h> or if we do
+ # but it doesn't declare ether_ntohost().
+ #
+ AC_CHECK_DECL(ether_ntohost,
+ [
+ AC_DEFINE(NET_ETHERNET_H_DECLARES_ETHER_NTOHOST,,
+ [Define to 1 if net/ethernet.h declares `ether_ntohost'])
+ ],,
+ [
+#include <net/ethernet.h>
+ ])
+ #
+ # Did that succeed?
+ #
+ if test "$ac_cv_have_decl_ether_ntohost" != yes; then
+ #
+ # No, how about <netinet/ether.h>, as on Linux?
+ #
+ # This test fails if we don't have <netinet/ether.h>
+ # or if we do but it doesn't declare ether_ntohost().
+ #
+ # Unset ac_cv_have_decl_ether_ntohost so we don't
+ # treat the previous failure as a cached value and
+ # suppress the next test.
+ #
+ unset ac_cv_have_decl_ether_ntohost
+ AC_CHECK_DECL(ether_ntohost,
+ [
+ AC_DEFINE(NETINET_ETHER_H_DECLARES_ETHER_NTOHOST,,
+ [Define to 1 if netinet/ether.h declares `ether_ntohost'])
+ ],,
+ [
+#include <netinet/ether.h>
+ ])
+ fi
+ #
+ # Did that succeed?
+ #
+ if test "$ac_cv_have_decl_ether_ntohost" != yes; then
+ #
+ # No, how about <sys/ethernet.h>, as on Solaris 10
+ # and later?
+ #
+ # This test fails if we don't have <sys/ethernet.h>
+ # or if we do but it doesn't declare ether_ntohost().
+ #
+ # Unset ac_cv_have_decl_ether_ntohost so we don't
+ # treat the previous failure as a cached value and
+ # suppress the next test.
+ #
+ unset ac_cv_have_decl_ether_ntohost
+ AC_CHECK_DECL(ether_ntohost,
+ [
+ AC_DEFINE(SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST,,
+ [Define to 1 if sys/ethernet.h declares `ether_ntohost'])
+ ],,
+ [
+#include <sys/ethernet.h>
+ ])
+ fi
+ #
+ # Did that succeed?
+ #
+ if test "$ac_cv_have_decl_ether_ntohost" != yes; then
+ #
+ # No, how about <arpa/inet.h>, as in AIX?
+ #
+ # This test fails if we don't have <arpa/inet.h>
+ # (if we have ether_ntohost(), we should have
+ # networking, and if we have networking, we should
+ # have <arpa/inet.h>) or if we do but it doesn't
+ # declare ether_ntohost().
+ #
+ # Unset ac_cv_have_decl_ether_ntohost so we don't
+ # treat the previous failure as a cached value and
+ # suppress the next test.
+ #
+ unset ac_cv_have_decl_ether_ntohost
+ AC_CHECK_DECL(ether_ntohost,
+ [
+ AC_DEFINE(ARPA_INET_H_DECLARES_ETHER_NTOHOST,,
+ [Define to 1 if arpa/inet.h declares `ether_ntohost'])
+ ],,
+ [
+#include <arpa/inet.h>
+ ])
+ fi
+ #
+ # Did that succeed?
+ #
+ if test "$ac_cv_have_decl_ether_ntohost" != yes; then
+ #
+ # No, how about <netinet/if_ether.h>?
+ # On some platforms, it requires <net/if.h> and
+ # <netinet/in.h>, and we always include it with
+ # both of them, so test it with both of them.
+ #
+ # This test fails if we don't have <netinet/if_ether.h>
+ # and the headers we include before it, or if we do but
+ # <netinet/if_ether.h> doesn't declare ether_hostton().
+ #
+ # Unset ac_cv_have_decl_ether_ntohost so we don't
+ # treat the previous failure as a cached value and
+ # suppress the next test.
+ #
+ unset ac_cv_have_decl_ether_ntohost
+ AC_CHECK_DECL(ether_ntohost,
+ [
+ AC_DEFINE(NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST,,
+ [Define to 1 if netinet/if_ether.h declares `ether_ntohost'])
+ ],,
+ [
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <net/if.h>
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+ ])
+ fi
+ #
+ # After all that, is ether_ntohost() declared?
+ #
+ if test "$ac_cv_have_decl_ether_ntohost" = yes; then
+ #
+ # Yes.
+ #
+ AC_DEFINE(HAVE_DECL_ETHER_NTOHOST, 1,
+ [Define to 1 if you have the declaration of `ether_ntohost'])
+ else
+ #
+ # No, we'll have to declare it ourselves.
+ # Do we have "struct ether_addr" if we include
+ # <netinet/if_ether.h>?
+ #
+ AC_CHECK_TYPES(struct ether_addr,,,
+ [
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <net/if.h>
+ #include <netinet/in.h>
+ #include <netinet/if_ether.h>
+ ])
+ fi
+fi
+
+dnl
+dnl Check for "pcap_list_datalinks()" and use a substitute version if
+dnl it's not present. If it is present, check for "pcap_free_datalinks()";
+dnl if it's not present, we don't replace it for now. (We could do so
+dnl on UN*X, but not on Windows, where hilarity ensues if a program
+dnl built with one version of the MSVC support library tries to free
+dnl something allocated by a library built with another version of
+dnl the MSVC support library.)
+dnl
+AC_CHECK_FUNC(pcap_list_datalinks,
+ [
+ AC_DEFINE(HAVE_PCAP_LIST_DATALINKS, 1,
+ [define if libpcap has pcap_list_datalinks()])
+ AC_CHECK_FUNCS(pcap_free_datalinks)
+ ],
+ [
+ AC_LIBOBJ(datalinks)
+ ])
+
+dnl
+dnl Check for "pcap_datalink_name_to_val()", and use a substitute
+dnl version if it's not present. If it is present, check for
+dnl "pcap_datalink_val_to_description()", and if we don't have it,
+dnl use a substitute version.
+dnl
+AC_CHECK_FUNC(pcap_datalink_name_to_val,
+ [
+ AC_DEFINE(HAVE_PCAP_DATALINK_NAME_TO_VAL, 1,
+ [define if libpcap has pcap_datalink_name_to_val()])
+ AC_CHECK_FUNC(pcap_datalink_val_to_description,
+ AC_DEFINE(HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION, 1,
+ [define if libpcap has pcap_datalink_val_to_description()]),
+ [
+ AC_LIBOBJ(dlnames)
+ ])
+ ],
+ [
+ AC_LIBOBJ(dlnames)
+ ])
+
+dnl
+dnl Check for "pcap_set_datalink()"; you can't substitute for it if
+dnl it's absent (it has hooks into libpcap), so just define the
+dnl HAVE_ value if it's there.
+dnl
+AC_CHECK_FUNCS(pcap_set_datalink)
+
+dnl
+dnl Check for "pcap_breakloop()"; you can't substitute for it if
+dnl it's absent (it has hooks into the live capture routines),
+dnl so just define the HAVE_ value if it's there.
+dnl
+AC_CHECK_FUNCS(pcap_breakloop)
+
+#
+# Do we have the new open API? Check for pcap_create, and assume that,
+# if we do, we also have pcap_activate() and the other new routines
+# introduced in libpcap 1.0.0.
+#
+AC_CHECK_FUNCS(pcap_create)
+if test $ac_cv_func_pcap_create = "yes" ; then
+ #
+ # OK, do we have pcap_set_tstamp_type? If so, assume we have
+ # pcap_list_tstamp_types and pcap_free_tstamp_types as well.
+ #
+ AC_CHECK_FUNCS(pcap_set_tstamp_type)
+ #
+ # And do we have pcap_set_tstamp_precision? If so, we assume
+ # we also have pcap_open_offline_with_tstamp_precision.
+ #
+ AC_CHECK_FUNCS(pcap_set_tstamp_precision)
+fi
+
+#
+# Check for a miscellaneous collection of functions which we use
+# if we have them.
+#
+AC_CHECK_FUNCS(pcap_findalldevs)
+if test $ac_cv_func_pcap_findalldevs = "yes" ; then
+dnl Check for libpcap having pcap_findalldevs() but the pcap.h header
+dnl not having pcap_if_t; some versions of Mac OS X shipped with pcap.h
+dnl from 0.6 and libpcap 0.8, so that libpcap had pcap_findalldevs but
+dnl pcap.h didn't have pcap_if_t.
+ savedcppflags="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $V_INCLS"
+ AC_CHECK_TYPES(pcap_if_t, , , [#include <pcap.h>])
+ CPPFLAGS="$savedcppflags"
+fi
+AC_CHECK_FUNCS(pcap_dump_flush pcap_lib_version)
+if test $ac_cv_func_pcap_lib_version = "no" ; then
+ AC_MSG_CHECKING(whether pcap_version is defined by libpcap)
+ AC_TRY_LINK([],
+ [
+ extern char pcap_version[];
+
+ return (int)pcap_version;
+ ],
+ ac_lbl_cv_pcap_version_defined=yes,
+ ac_lbl_cv_pcap_version_defined=no)
+ if test "$ac_lbl_cv_pcap_version_defined" = yes ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_PCAP_VERSION, 1, [define if libpcap has pcap_version])
+ else
+ AC_MSG_RESULT(no)
+ fi
+fi
+AC_CHECK_FUNCS(pcap_setdirection pcap_set_immediate_mode pcap_dump_ftell64)
+AC_CHECK_FUNCS(pcap_open pcap_findalldevs_ex)
+AC_REPLACE_FUNCS(pcap_dump_ftell)
+
+#
+# Check for special debugging functions
+#
+AC_CHECK_FUNCS(pcap_set_parser_debug)
+if test "$ac_cv_func_pcap_set_parser_debug" = "no" ; then
+ #
+ # OK, we don't have pcap_set_parser_debug() to set the libpcap
+ # filter expression parser debug flag; can we directly set the
+ # flag?
+ AC_MSG_CHECKING(whether pcap_debug is defined by libpcap)
+ AC_TRY_LINK([],
+ [
+ extern int pcap_debug;
+
+ return pcap_debug;
+ ],
+ ac_lbl_cv_pcap_debug_defined=yes,
+ ac_lbl_cv_pcap_debug_defined=no)
+ if test "$ac_lbl_cv_pcap_debug_defined" = yes ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_PCAP_DEBUG, 1, [define if libpcap has pcap_debug])
+ else
+ AC_MSG_RESULT(no)
+ #
+ # OK, what about "yydebug"?
+ #
+ AC_MSG_CHECKING(whether yydebug is defined by libpcap)
+ AC_TRY_LINK([],
+ [
+ extern int yydebug;
+
+ return yydebug;
+ ],
+ ac_lbl_cv_yydebug_defined=yes,
+ ac_lbl_cv_yydebug_defined=no)
+ if test "$ac_lbl_cv_yydebug_defined" = yes ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_YYDEBUG, 1, [define if libpcap has yydebug])
+ else
+ AC_MSG_RESULT(no)
+ fi
+ fi
+fi
+AC_CHECK_FUNCS(pcap_set_optimizer_debug)
+AC_REPLACE_FUNCS(bpf_dump) dnl moved to libpcap in 0.6
+
+V_GROUP=0
+if test -f /etc/group -a ! -z "`grep '^wheel:' /etc/group`" ; then
+ V_GROUP=wheel
+fi
+#
+# Assume V7/BSD convention for man pages (file formats in section 5,
+# miscellaneous info in section 7).
+#
+MAN_FILE_FORMATS=5
+MAN_MISC_INFO=7
+case "$host_os" in
+
+aix*)
+ dnl Workaround to enable certain features
+ AC_DEFINE(_SUN,1,[define on AIX to get certain functions])
+ ;;
+
+hpux*)
+ #
+ # Use System V conventions for man pages.
+ #
+ MAN_FILE_FORMATS=4
+ MAN_MISC_INFO=5
+ ;;
+
+irix*)
+ V_GROUP=sys
+
+ #
+ # Use System V conventions for man pages.
+ #
+ MAN_FILE_FORMATS=4
+ MAN_MISC_INFO=5
+ ;;
+
+osf*)
+ V_GROUP=system
+
+ #
+ # Use System V conventions for man pages.
+ #
+ MAN_FILE_FORMATS=4
+ MAN_MISC_INFO=5
+ ;;
+
+solaris*)
+ V_GROUP=sys
+
+ #
+ # Use System V conventions for man pages.
+ #
+ MAN_FILE_FORMATS=4
+ MAN_MISC_INFO=5
+ ;;
+esac
+
+if test -f /dev/bpf0 ; then
+ V_GROUP=bpf
+fi
+
+#
+# Make sure we have a definition for C99's uintptr_t (regardless of
+# whether the environment is a C99 environment or not).
+#
+AC_TYPE_UINTPTR_T
+
+#
+# Check whether we have pcap/pcap-inttypes.h.
+# If we do, we use that to get the C99 types defined.
+#
+savedcppflags="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $V_INCLS"
+AC_CHECK_HEADERS(pcap/pcap-inttypes.h)
+CPPFLAGS="$savedcppflags"
+
+#
+# Define the old BSD specified-width types in terms of the C99 types;
+# we may need them with libpcap include files.
+#
+AC_CHECK_TYPE([u_int8_t], ,
+ [AC_DEFINE([u_int8_t], [uint8_t],
+ [Define to `uint8_t' if u_int8_t not defined.])],
+ [AC_INCLUDES_DEFAULT
+#include <sys/types.h>
+])
+AC_CHECK_TYPE([u_int16_t], ,
+ [AC_DEFINE([u_int16_t], [uint16_t],
+ [Define to `uint16_t' if u_int16_t not defined.])],
+ [AC_INCLUDES_DEFAULT
+#include <sys/types.h>
+])
+AC_CHECK_TYPE([u_int32_t], ,
+ [AC_DEFINE([u_int32_t], [uint32_t],
+ [Define to `uint32_t' if u_int32_t not defined.])],
+ [AC_INCLUDES_DEFAULT
+#include <sys/types.h>
+])
+AC_CHECK_TYPE([u_int64_t], ,
+ [AC_DEFINE([u_int64_t], [uint64_t],
+ [Define to `uint64_t' if u_int64_t not defined.])],
+ [AC_INCLUDES_DEFAULT
+#include <sys/types.h>
+])
+
+AC_PROG_RANLIB
+AC_CHECK_TOOL([AR], [ar])
+
+AC_LBL_DEVEL(V_CCOPT)
+
+# Check for OpenSSL/libressl libcrypto
+AC_MSG_CHECKING(whether to use OpenSSL/libressl libcrypto)
+# Specify location for both includes and libraries.
+want_libcrypto=ifavailable
+AC_ARG_WITH(crypto,
+ AS_HELP_STRING([--with-crypto]@<:@=DIR@:>@,
+ [use OpenSSL/libressl libcrypto (located in directory DIR, if specified) @<:@default=yes, if available@:>@]),
+[
+ if test $withval = no
+ then
+ # User doesn't want to link with libcrypto.
+ want_libcrypto=no
+ AC_MSG_RESULT(no)
+ elif test $withval = yes
+ then
+ # User wants to link with libcrypto but hasn't specified
+ # a directory.
+ want_libcrypto=yes
+ AC_MSG_RESULT(yes)
+ else
+ # User wants to link with libcrypto and has specified
+ # a directory, so use the provided value.
+ want_libcrypto=yes
+ libcrypto_root=$withval
+ AC_MSG_RESULT([yes, using the version installed in $withval])
+
+ #
+ # Put the subdirectories of the libcrypto root directory
+ # at the front of the header and library search path.
+ #
+ CFLAGS="-I$withval/include $CFLAGS"
+ LIBS="-L$withval/lib $LIBS"
+ fi
+],[
+ #
+ # Use libcrypto if it's present, otherwise don't; no directory
+ # was specified.
+ #
+ want_libcrypto=ifavailable
+ AC_MSG_RESULT([yes, if available])
+])
+if test "$want_libcrypto" != "no"; then
+ #
+ # Don't check for libcrypto unless we have its headers;
+ # Apple, bless their pointy little heads, apparently ship
+ # libcrypto as a library, but not the header files, in
+ # El Capitan, probably because they don't want you writing
+ # nasty portable code that could run on other UN*Xes, they
+ # want you writing code that uses their Shiny New Crypto
+ # Library and that only runs on macOS.
+ #
+ AC_CHECK_HEADER(openssl/crypto.h,
+ [
+ AC_CHECK_LIB(crypto, DES_cbc_encrypt)
+ if test "$ac_cv_lib_crypto_DES_cbc_encrypt" = "yes"; then
+ AC_CHECK_HEADERS(openssl/evp.h)
+ #
+ # OK, then:
+ #
+ # 1) do we have EVP_CIPHER_CTX_new?
+ # If so, we use it to allocate an
+ # EVP_CIPHER_CTX, as EVP_CIPHER_CTX may be
+ # opaque; otherwise, we allocate it ourselves.
+ #
+ # 2) do we have EVP_DecryptInit_ex()?
+ # If so, we use it, because we need to be
+ # able to make two "initialize the cipher"
+ # calls, one with the cipher and key, and
+ # one with the IV, and, as of OpenSSL 1.1,
+ # You Can't Do That with EVP_DecryptInit(),
+ # because a call to EVP_DecryptInit() will
+ # unconditionally clear the context, and
+ # if you don't supply a cipher, it'll
+ # clear the cipher, rendering the context
+ # unusable and causing a crash.
+ #
+ AC_CHECK_FUNCS(EVP_CIPHER_CTX_new EVP_DecryptInit_ex)
+ fi
+ ])
+fi
+
+# Check for libcap-ng
+AC_MSG_CHECKING(whether to use libcap-ng)
+# Specify location for both includes and libraries.
+want_libcap_ng=ifavailable
+AC_ARG_WITH(cap_ng,
+ AS_HELP_STRING([--with-cap-ng],
+ [use libcap-ng @<:@default=yes, if available@:>@]),
+[
+ if test $withval = no
+ then
+ want_libcap_ng=no
+ AC_MSG_RESULT(no)
+ elif test $withval = yes
+ then
+ want_libcap_ng=yes
+ AC_MSG_RESULT(yes)
+ fi
+],[
+ #
+ # Use libcap-ng if it's present, otherwise don't.
+ #
+ want_libcap_ng=ifavailable
+ AC_MSG_RESULT([yes, if available])
+])
+if test "$want_libcap_ng" != "no"; then
+ AC_CHECK_LIB(cap-ng, capng_change_id)
+ AC_CHECK_HEADERS(cap-ng.h)
+fi
+
+dnl
+dnl set additional include path if necessary
+if test "$missing_includes" = "yes"; then
+ CPPFLAGS="$CPPFLAGS -I$srcdir/missing"
+ V_INCLS="$V_INCLS -I$srcdir/missing"
+fi
+
+AC_SUBST(V_CCOPT)
+AC_SUBST(V_DEFS)
+AC_SUBST(V_GROUP)
+AC_SUBST(V_INCLS)
+AC_SUBST(V_PCAPDEP)
+AC_SUBST(LOCALSRC)
+AC_SUBST(MAN_FILE_FORMATS)
+AC_SUBST(MAN_MISC_INFO)
+
+AC_PROG_INSTALL
+
+AC_CONFIG_HEADER(config.h)
+
+AC_OUTPUT_COMMANDS([if test -f .devel; then
+ echo timestamp > stamp-h
+ cat $srcdir/Makefile-devel-adds >> Makefile
+ make depend || exit 1
+fi])
+AC_OUTPUT(Makefile tcpdump.1)
+exit 0
diff --git a/cpack.c b/cpack.c
new file mode 100644
index 0000000..9be7b47
--- /dev/null
+++ b/cpack.c
@@ -0,0 +1,220 @@
+/*-
+ * Copyright (c) 2003, 2004 David Young. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of David Young may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DAVID
+ * YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+#include "cpack.h"
+
+const uint8_t *
+nd_cpack_next_boundary(const uint8_t *buf, const uint8_t *p, size_t alignment)
+{
+ size_t misalignment = (size_t)(p - buf) % alignment;
+
+ if (misalignment == 0)
+ return p;
+
+ return p + (alignment - misalignment);
+}
+
+/* Advance to the next wordsize boundary. Return NULL if fewer than
+ * wordsize bytes remain in the buffer after the boundary. Otherwise,
+ * return a pointer to the boundary.
+ */
+const uint8_t *
+nd_cpack_align_and_reserve(struct cpack_state *cs, size_t wordsize)
+{
+ const uint8_t *next;
+
+ /* Ensure alignment. */
+ next = nd_cpack_next_boundary(cs->c_buf, cs->c_next, wordsize);
+
+ /* Too little space for wordsize bytes? */
+ if (next - cs->c_buf + wordsize > cs->c_len)
+ return NULL;
+
+ return next;
+}
+
+/* Advance by N bytes without returning them. */
+int
+nd_cpack_advance(struct cpack_state *cs, const size_t toskip)
+{
+ /* No space left? */
+ if (cs->c_next - cs->c_buf + toskip > cs->c_len)
+ return -1;
+ cs->c_next += toskip;
+ return 0;
+}
+
+int
+nd_cpack_init(struct cpack_state *cs, const uint8_t *buf, size_t buflen)
+{
+ memset(cs, 0, sizeof(*cs));
+
+ cs->c_buf = buf;
+ cs->c_len = buflen;
+ cs->c_next = cs->c_buf;
+
+ return 0;
+}
+
+/* Unpack a 64-bit unsigned integer. */
+int
+nd_cpack_uint64(netdissect_options *ndo, struct cpack_state *cs, uint64_t *u)
+{
+ const uint8_t *next;
+
+ if ((next = nd_cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
+ return -1;
+
+ *u = GET_LE_U_8(next);
+
+ /* Move pointer past the uint64_t. */
+ cs->c_next = next + sizeof(*u);
+ return 0;
+}
+
+/* Unpack a 64-bit signed integer. */
+int
+nd_cpack_int64(netdissect_options *ndo, struct cpack_state *cs, int64_t *u)
+{
+ const uint8_t *next;
+
+ if ((next = nd_cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
+ return -1;
+
+ *u = GET_LE_S_8(next);
+
+ /* Move pointer past the int64_t. */
+ cs->c_next = next + sizeof(*u);
+ return 0;
+}
+
+/* Unpack a 32-bit unsigned integer. */
+int
+nd_cpack_uint32(netdissect_options *ndo, struct cpack_state *cs, uint32_t *u)
+{
+ const uint8_t *next;
+
+ if ((next = nd_cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
+ return -1;
+
+ *u = GET_LE_U_4(next);
+
+ /* Move pointer past the uint32_t. */
+ cs->c_next = next + sizeof(*u);
+ return 0;
+}
+
+/* Unpack a 32-bit signed integer. */
+int
+nd_cpack_int32(netdissect_options *ndo, struct cpack_state *cs, int32_t *u)
+{
+ const uint8_t *next;
+
+ if ((next = nd_cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
+ return -1;
+
+ *u = GET_LE_S_4(next);
+
+ /* Move pointer past the int32_t. */
+ cs->c_next = next + sizeof(*u);
+ return 0;
+}
+
+/* Unpack a 16-bit unsigned integer. */
+int
+nd_cpack_uint16(netdissect_options *ndo, struct cpack_state *cs, uint16_t *u)
+{
+ const uint8_t *next;
+
+ if ((next = nd_cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
+ return -1;
+
+ *u = GET_LE_U_2(next);
+
+ /* Move pointer past the uint16_t. */
+ cs->c_next = next + sizeof(*u);
+ return 0;
+}
+
+/* Unpack a 16-bit signed integer. */
+int
+nd_cpack_int16(netdissect_options *ndo, struct cpack_state *cs, int16_t *u)
+{
+ const uint8_t *next;
+
+ if ((next = nd_cpack_align_and_reserve(cs, sizeof(*u))) == NULL)
+ return -1;
+
+ *u = GET_LE_S_2(next);
+
+ /* Move pointer past the int16_t. */
+ cs->c_next = next + sizeof(*u);
+ return 0;
+}
+
+/* Unpack an 8-bit unsigned integer. */
+int
+nd_cpack_uint8(netdissect_options *ndo, struct cpack_state *cs, uint8_t *u)
+{
+ /* No space left? */
+ if ((size_t)(cs->c_next - cs->c_buf) >= cs->c_len)
+ return -1;
+
+ *u = GET_U_1(cs->c_next);
+
+ /* Move pointer past the uint8_t. */
+ cs->c_next++;
+ return 0;
+}
+
+/* Unpack an 8-bit signed integer. */
+int
+nd_cpack_int8(netdissect_options *ndo, struct cpack_state *cs, int8_t *u)
+{
+ /* No space left? */
+ if ((size_t)(cs->c_next - cs->c_buf) >= cs->c_len)
+ return -1;
+
+ *u = GET_S_1(cs->c_next);
+
+ /* Move pointer past the int8_t. */
+ cs->c_next++;
+ return 0;
+}
diff --git a/cpack.h b/cpack.h
new file mode 100644
index 0000000..4e89300
--- /dev/null
+++ b/cpack.h
@@ -0,0 +1,57 @@
+/*-
+ * Copyright (c) 2003, 2004 David Young. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of David Young may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DAVID
+ * YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ */
+
+#ifndef ND_CPACK_H
+#define ND_CPACK_H
+
+#include "netdissect.h"
+
+struct cpack_state {
+ const uint8_t *c_buf;
+ const uint8_t *c_next;
+ size_t c_len;
+};
+
+int nd_cpack_init(struct cpack_state *, const uint8_t *, size_t);
+
+int nd_cpack_uint8(netdissect_options *, struct cpack_state *, uint8_t *);
+int nd_cpack_int8(netdissect_options *, struct cpack_state *, int8_t *);
+int nd_cpack_uint16(netdissect_options *, struct cpack_state *, uint16_t *);
+int nd_cpack_int16(netdissect_options *, struct cpack_state *, int16_t *);
+int nd_cpack_uint32(netdissect_options *, struct cpack_state *, uint32_t *);
+int nd_cpack_int32(netdissect_options *, struct cpack_state *, int32_t *);
+int nd_cpack_uint64(netdissect_options *, struct cpack_state *, uint64_t *);
+int nd_cpack_int64(netdissect_options *, struct cpack_state *, int64_t *);
+
+const uint8_t *nd_cpack_next_boundary(const uint8_t *buf, const uint8_t *p, size_t alignment);
+const uint8_t *nd_cpack_align_and_reserve(struct cpack_state *cs, size_t wordsize);
+
+extern int nd_cpack_advance(struct cpack_state *, const size_t);
+
+#endif /* ND_CPACK_H */
diff --git a/diag-control.h b/diag-control.h
new file mode 100644
index 0000000..3eb6bca
--- /dev/null
+++ b/diag-control.h
@@ -0,0 +1,186 @@
+/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */
+/*
+ * Copyright (c) 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the Computer Systems
+ * Engineering Group at Lawrence Berkeley Laboratory.
+ * 4. Neither the name of the University nor of the Laboratory may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _diag_control_h
+#define _diag_control_h
+
+#include "compiler-tests.h"
+
+#ifndef _MSC_VER
+ /*
+ * Clang and GCC both support this way of putting pragmas into #defines.
+ * We don't use it unless we have a compiler that supports it; the
+ * warning-suppressing pragmas differ between Clang and GCC, so we test
+ * for both of those separately.
+ */
+ #define DIAG_DO_PRAGMA(x) _Pragma (#x)
+#endif
+
+/*
+ * XL C 12.1 and 13.1 for AIX require no attention in this department.
+ * XL C 16.1 defines both __GNUC__ and __clang__, so has to be tested first.
+ */
+#if ND_IS_AT_LEAST_XL_C_VERSION(16,1)
+ /*
+ * See respective Clang note below.
+ */
+ #define DIAG_OFF_ASSIGN_ENUM \
+ DIAG_DO_PRAGMA(clang diagnostic push) \
+ DIAG_DO_PRAGMA(clang diagnostic ignored "-Wassign-enum")
+ #define DIAG_ON_ASSIGN_ENUM \
+ DIAG_DO_PRAGMA(clang diagnostic pop)
+
+ #define DIAG_OFF_CAST_QUAL
+ #define DIAG_ON_CAST_QUAL
+ #define DIAG_OFF_DEPRECATION
+ #define DIAG_ON_DEPRECATION
+/*
+ * The current clang compilers also define __GNUC__ and __GNUC_MINOR__
+ * thus we need to test the clang case before the GCC one
+ */
+#elif ND_IS_AT_LEAST_CLANG_VERSION(2,8)
+ /*
+ * Clang complains if you OR together multiple enum values of a
+ * given enum type and them pass it as an argument of that enum
+ * type. Some libcap-ng routines use enums to define bit flags;
+ * we want to squelch the warnings that produces.
+ */
+ #define DIAG_OFF_ASSIGN_ENUM \
+ DIAG_DO_PRAGMA(clang diagnostic push) \
+ DIAG_DO_PRAGMA(clang diagnostic ignored "-Wassign-enum")
+ #define DIAG_ON_ASSIGN_ENUM \
+ DIAG_DO_PRAGMA(clang diagnostic pop)
+
+ /*
+ * It also legitimately complains about some code in the BSD
+ * getopt_long() - that code explicitly and deliberately
+ * violates the contract by permuting the argument vector
+ * (declared as char const *argv[], meaning "I won't change
+ * the vector by changing any of its elements), as do the
+ * GNU and Solaris getopt_long(). This is documented in the
+ * man pages for all versions; it can be suppressed by setting
+ * the environment variable POSIXLY_CORRECT or by putting a "+"
+ * at the beginning of the option string.
+ *
+ * We suppress the warning.
+ */
+ #define DIAG_OFF_CAST_QUAL \
+ DIAG_DO_PRAGMA(clang diagnostic push) \
+ DIAG_DO_PRAGMA(clang diagnostic ignored "-Wcast-qual")
+ #define DIAG_ON_CAST_QUAL \
+ DIAG_DO_PRAGMA(clang diagnostic pop)
+
+ /*
+ * Suppress deprecation warnings.
+ */
+ #define DIAG_OFF_DEPRECATION \
+ DIAG_DO_PRAGMA(clang diagnostic push) \
+ DIAG_DO_PRAGMA(clang diagnostic ignored "-Wdeprecated-declarations")
+ #define DIAG_ON_DEPRECATION \
+ DIAG_DO_PRAGMA(clang diagnostic pop)
+
+ /*
+ * Clang supports the generic C11 extension even if run with the -std=gnu99
+ * flag, which leads FreeBSD <sys/cdefs.h> to use the extension, which
+ * results in Clang emitting a -Wc11-extensions warning. The warning is not
+ * documented in the user manual, but it happens with Clang 10.0.1 on
+ * FreeBSD 12.2, so let's use that as a reference.
+ */
+ #if ND_IS_AT_LEAST_CLANG_VERSION(10,0)
+ #define DIAG_OFF_C11_EXTENSIONS \
+ DIAG_DO_PRAGMA(clang diagnostic push) \
+ DIAG_DO_PRAGMA(clang diagnostic ignored "-Wc11-extensions")
+ #define DIAG_ON_C11_EXTENSIONS \
+ DIAG_DO_PRAGMA(clang diagnostic pop)
+ #endif
+#elif ND_IS_AT_LEAST_GNUC_VERSION(4,2)
+ /* GCC apparently doesn't complain about ORing enums together. */
+ #define DIAG_OFF_ASSIGN_ENUM
+ #define DIAG_ON_ASSIGN_ENUM
+
+ /*
+ * It does, however, complain about casting away constness in
+ * missing/getopt_long.c.
+ */
+ #define DIAG_OFF_CAST_QUAL \
+ DIAG_DO_PRAGMA(GCC diagnostic push) \
+ DIAG_DO_PRAGMA(GCC diagnostic ignored "-Wcast-qual")
+ #define DIAG_ON_CAST_QUAL \
+ DIAG_DO_PRAGMA(GCC diagnostic pop)
+
+ /*
+ * Suppress deprecation warnings.
+ */
+ #define DIAG_OFF_DEPRECATION \
+ DIAG_DO_PRAGMA(GCC diagnostic push) \
+ DIAG_DO_PRAGMA(GCC diagnostic ignored "-Wdeprecated-declarations")
+ #define DIAG_ON_DEPRECATION \
+ DIAG_DO_PRAGMA(GCC diagnostic pop)
+ /*
+ * GCC supports -Wc99-c11-compat since version 5.1.0, but the warning does
+ * not trigger for now, so let's just leave it be.
+ */
+#else
+ #define DIAG_OFF_ASSIGN_ENUM
+ #define DIAG_ON_ASSIGN_ENUM
+ #define DIAG_OFF_CAST_QUAL
+ #define DIAG_ON_CAST_QUAL
+ #define DIAG_OFF_DEPRECATION
+ #define DIAG_ON_DEPRECATION
+#endif
+
+#ifndef DIAG_OFF_C11_EXTENSIONS
+#define DIAG_OFF_C11_EXTENSIONS
+#endif
+#ifndef DIAG_ON_C11_EXTENSIONS
+#define DIAG_ON_C11_EXTENSIONS
+#endif
+
+/*
+ * GCC needs this on AIX for longjmp().
+ */
+#if ND_IS_AT_LEAST_GNUC_VERSION(5,1)
+ /*
+ * Beware that the effect of this builtin is more than just squelching the
+ * warning! GCC trusts it enough for the process to segfault if the control
+ * flow reaches the builtin (an infinite empty loop in the same context would
+ * squelch the warning and ruin the process too, albeit in a different way).
+ * So please remember to use this very carefully.
+ */
+ #define ND_UNREACHABLE __builtin_unreachable();
+#else
+ #define ND_UNREACHABLE
+#endif
+
+#endif /* _diag_control_h */
diff --git a/doc/README.NetBSD.md b/doc/README.NetBSD.md
new file mode 100644
index 0000000..b49be0e
--- /dev/null
+++ b/doc/README.NetBSD.md
@@ -0,0 +1,22 @@
+# Compiling tcpdump on NetBSD
+
+NetBSD has two libpcap libraries: one that is always installed as a part of the
+OS and another that can be installed as a package from pkgsrc. Also the usual
+method of compiling with the upstream libpcap in `../libpcap` is available.
+
+GCC, Clang, Autoconf and CMake are presumed to work, if this is not the case,
+please report a bug as explained in the
+[guidelines for contributing](../CONTRIBUTING.md).
+
+## NetBSD 9.3
+
+* Upstream libpcap works.
+* OS libpcap works.
+* pkgsrc libpcap works.
+
+## NetBSD 9.2, 9.1 and 9.0
+
+* Upstream libpcap works.
+* OS libpcap cannot be used due to
+ [this bug](https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=55901).
+
diff --git a/doc/README.Win32.md b/doc/README.Win32.md
new file mode 100644
index 0000000..b7e81d1
--- /dev/null
+++ b/doc/README.Win32.md
@@ -0,0 +1,200 @@
+Building tcpdump on Windows with Visual Studio
+==============================================
+
+Unlike the UN*Xes on which libpcap can capture network traffic, Windows
+has no network traffic capture mechanism that libpcap can use.
+Therefore, libpcap requires a driver, and a library to access the
+driver, provided by the Npcap or WinPcap projects.
+
+Those projects include versions of libpcap built to use that driver and
+library; these instructions are for people who want to build libpcap
+source releases, or libpcap from the Git repository, as a replacement
+for the version provided with Npcap or WinPcap.
+
+Npcap and WinPcap SDK
+---------------------
+
+In order to build tcpdump, you will need to download Npcap and its
+software development kit (SDK) or WinPcap and its software development
+kit.
+
+Npcap is currently being developed and maintained, and offers many
+additional capabilities that WinPcap does not.
+
+WinPcap is no longer being developed or maintained; it should be used
+only if there is some other requirement to use it rather than Npcap,
+such as a requirement to support versions of Windows earlier than
+Windows Vista, which is the earliest version supported by Npcap.
+
+Npcap and its SDK can be downloaded from its [home page](https://npcap.com).
+The SDK is a ZIP archive; create a folder on your `C:` drive, e.g.
+`C:\npcap-sdk`, and put the contents of the ZIP archive into that folder.
+
+The WinPcap installer can be downloaded from
+[here](https://www.winpcap.org/install/default.htm)
+and the WinPcap Developer's Kit can be downloaded from
+[here](https://www.winpcap.org/devel.htm).
+
+Required build tools
+--------------------
+
+The Developer's Kit is a ZIP archive; it contains a folder named
+`WpdPack`, which you should place on your `C:` drive, e.g. `C:\WpdPack`.
+
+Building tcpdump on Windows requires Visual Studio 2015 or later. The
+Community Edition of Visual Studio can be downloaded at no cost from
+[here](https://visualstudio.microsoft.com).
+
+Additional tools are also required. Chocolatey is a package manager for
+Windows with which those tools, and other tools, can be installed; it
+can be downloaded from [here](https://chocolatey.org).
+
+It is a command-line tool; a GUI tool, Chocolatey GUI, is provided as a
+Chocolatey package, which can be installed from the command line:
+
+```
+choco install chocolateygui
+```
+
+For convenience, the `choco install` command can be run with the `-y`
+flag, forcing it to automatically answer all questions asked of the user
+with "yes":
+
+```
+choco install -y chocolateygui
+```
+
+The required tools are:
+
+### CMake ###
+
+libpcap does not provide supported project files for Visual Studio
+(there are currently unsupported project files provided, but we do not
+guarantee that they will work or that we will continue to provide them).
+It does provide files for CMake, which is a cross-platform tool that
+runs on UN\*Xes and on Windows and that can generate project files for
+UN\*X Make, the Ninja build system, and Visual Studio, among other build
+systems.
+
+Visual Studio 2015 does not provide CMake; an installer can be
+downloaded from [here](https://cmake.org/download/).
+
+When you run the installer, you should choose to add CMake to the system
+`PATH` for all users and to create the desktop icon.
+
+CMake can also be installed as the Chocolatey package `cmake`:
+
+```
+choco install -y cmake
+```
+
+Visual Studio 2017 and later provide CMake, so you will not need to
+install CMake if you have installed Visual Studio 2017 or later. They
+include built-in support for CMake-based projects as described
+[here](https://devblogs.microsoft.com/cppblog/cmake-support-in-visual-studio/).
+
+For Visual Studio 2017, make sure "Visual C++ tools for CMake" is
+installed; for Visual Studio 2019, make sure "C++ CMake tools for
+Windows" is installed.
+
+Git
+---
+
+An optional tool, required only if you will be building from a Git
+repository rather than from a release source tarball, is Git. Git is
+provided as an optional installation component, "Git for Windows", with
+Visual Studio 2017 and later.
+
+Building from the Visual Studio GUI
+-----------------------------------
+
+### Visual Studio 2017 ###
+
+Open the folder containing the libpcap source with Open > Folder.
+Visual Studio will run CMake; however, you will need to indicate where
+the Npcap or WinPcap SDK is installed.
+
+To do this, go to Project > "Change CMake Settings" > tcpdump and:
+
+Choose which configuration type to build, if you don't want the default
+Debug build.
+
+In the CMakeSettings.json tab, change cmakeCommandArgs to include
+
+```
+-DPacket_ROOT={path-to-sdk}
+```
+
+where `{path-to-sdk}` is the path of the directory containing the Npcap or
+WinPcap SDK. Note that backslashes in the path must be specified as two
+backslashes.
+
+Save the configuration changes with File > "Save CMakeSettings.json" or
+with Control-S.
+
+Visual Studio will then re-run CMake. If that completes without errors,
+you can build with CMake > "Build All".
+
+### Visual Studio 2019 ###
+
+Open the folder containing the libpcap source with Open > Folder.
+Visual Studio will run CMake; however, you will need to indicate where
+the Npcap or WinPcap SDK is installed.
+
+To do this, go to Project > "CMake Settings for tcpdump" and:
+
+Choose which configuration type to build, if you don't want the default
+Debug build.
+
+Scroll down to "Cmake variables and cache", scroll through the list
+looking for the entry for Packet_ROOT, and either type in the path of
+the directory containing the Npcap or WinPcap SDK or use the "Browse..."
+button to browse for that directory.
+
+Save the configuration changes with File > "Save CMakeSettings.json" or
+with Control-S.
+
+Visual Studio will then re-run CMake. If that completes without errors,
+you can build with Build > "Build All".
+
+Building from the command line
+------------------------------
+
+Start the appropriate Native Tools command line prompt.
+
+Change to the directory into which you want to build tcpdump, possibly
+after creating it first. One choice is to create it as a subdirectory
+of the tcpdump source directory.
+
+Run the command
+
+```
+cmake "-DPacket_ROOT={path-to-sdk}" -G {generator} {path-to-tcpdump-source}
+```
+
+`{path-to-sdk}` is the path of the directory containing the Npcap or
+WinPcap SDK.
+
+`{generator}` is the string "Visual Studio N YYYY", where `N` is the
+version of Visual Studio and `YYYY` is the year number for that version;
+if you are building a 64-bit version of tcpdump, `YYYY` must be followed
+by a space and "Win64". For example, to build a 32-bit version of
+tcpdump with Visual Studio 2017, `{generator}` would be "Visual Studio
+15 2017" and to build a 64-bit version of tcpdump with Visual Studio
+2017, `{generator}` would be "Visual Studio 15 2017 Win64".
+
+`{path-to-tcpdump-source}` is the pathname of the top-level source
+directory for tcpdump.
+
+Run the command
+
+```
+msbuild /m /nologo /p:Configuration={configuration} tcpdump.sln
+```
+
+where `{configuration}` can be "Release", "Debug", or "RelWithDebInfo".
+
+Building with MinGW
+-------------------
+
+(XXX - this should be added)
diff --git a/doc/README.aix.md b/doc/README.aix.md
new file mode 100644
index 0000000..3bfa550
--- /dev/null
+++ b/doc/README.aix.md
@@ -0,0 +1,17 @@
+# Compiling tcpdump on AIX
+
+* Autoconf works everywhere.
+
+## AIX 7.1/POWER7
+
+* Only local libpcap is suitable.
+* CMake 3.16.0 does not work.
+* GCC 8.3.0 and XL C 12.1.0.0 work.
+* System m4 does not work, GNU m4 1.4.17 works.
+
+## AIX 7.2/POWER8
+
+* Only local libpcap is suitable.
+* GCC 7.2.0 and XL C 13.1.3.6 work.
+* System m4 does not work, GNU m4 1.4.17 works.
+
diff --git a/doc/README.solaris.md b/doc/README.solaris.md
new file mode 100644
index 0000000..afdd8f7
--- /dev/null
+++ b/doc/README.solaris.md
@@ -0,0 +1,41 @@
+# Compiling tcpdump on Solaris and related OSes
+
+* Autoconf works everywhere.
+
+## OmniOS r151042/AMD64
+
+* Both system and local libpcap are suitable.
+* CMake 3.23.1 works.
+* GCC 11.2.0 and Clang 14.0.3 work.
+
+## OpenIndiana 2021.04/AMD64
+
+* Both system and local libpcap are suitable.
+* CMake 3.21.1 works.
+* GCC 7.5.0 and GCC 10.3.0 work, Clang 9.0.1 works.
+
+For reference, the tests were done using a system installed from
+`OI-hipster-text-20210430.iso` plus the following packages:
+```shell
+xargs -L1 pkg install <<ENDOFTEXT
+developer/build/autoconf
+developer/build/cmake
+developer/gcc-10
+developer/clang-90
+ENDOFTEXT
+```
+
+## Oracle Solaris 11.4.42/AMD64
+
+* Both system and local libpcap are suitable.
+* GCC 11.2 and Clang 11.0 work.
+
+For reference, the tests were done on a VM booted from `sol-11_4-vbox.ova`
+and updated to 11.4.42.111.0 plus the following packages:
+```shell
+xargs -L1 pkg install <<ENDOFTEXT
+developer/build/autoconf
+developer/gcc
+developer/llvm/clang
+ENDOFTEXT
+```
diff --git a/ethertype.h b/ethertype.h
new file mode 100644
index 0000000..8b71b30
--- /dev/null
+++ b/ethertype.h
@@ -0,0 +1,219 @@
+/*
+ * Copyright (c) 1993, 1994, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/*
+ * Maximum length of the length field in an Ethernet header; any value
+ * greater than this is not a length value, so it's either an Ethernet
+ * type or an invalid value.
+ */
+#define MAX_ETHERNET_LENGTH_VAL 1500
+
+/*
+ * Ethernet types.
+ *
+ * We wrap the declarations with #ifdef, so that if a file includes
+ * <netinet/if_ether.h>, which may declare some of these, we don't
+ * get a bunch of complaints from the C compiler about redefinitions
+ * of these values.
+ *
+ * We declare all of them here so that no file has to include
+ * <netinet/if_ether.h> if all it needs are ETHERTYPE_ values.
+ */
+
+#ifndef ETHERTYPE_LEN
+#define ETHERTYPE_LEN 2
+#endif
+
+#ifndef ETHERTYPE_GRE_ISO
+#define ETHERTYPE_GRE_ISO 0x00FE /* not really an ethertype only used in GRE */
+#endif
+#ifndef ETHERTYPE_PUP
+#define ETHERTYPE_PUP 0x0200 /* PUP protocol */
+#endif
+#ifndef ETHERTYPE_IP
+#define ETHERTYPE_IP 0x0800 /* IP protocol */
+#endif
+#ifndef ETHERTYPE_ARP
+#define ETHERTYPE_ARP 0x0806 /* Addr. resolution protocol */
+#endif
+#ifndef ETHERTYPE_REVARP
+#define ETHERTYPE_REVARP 0x8035 /* reverse Addr. resolution protocol */
+#endif
+#ifndef ETHERTYPE_NS
+#define ETHERTYPE_NS 0x0600
+#endif
+#ifndef ETHERTYPE_SPRITE
+#define ETHERTYPE_SPRITE 0x0500
+#endif
+#ifndef ETHERTYPE_TRAIL
+#define ETHERTYPE_TRAIL 0x1000
+#endif
+#ifndef ETHERTYPE_MOPDL
+#define ETHERTYPE_MOPDL 0x6001
+#endif
+#ifndef ETHERTYPE_MOPRC
+#define ETHERTYPE_MOPRC 0x6002
+#endif
+#ifndef ETHERTYPE_DN
+#define ETHERTYPE_DN 0x6003
+#endif
+#ifndef ETHERTYPE_LAT
+#define ETHERTYPE_LAT 0x6004
+#endif
+#ifndef ETHERTYPE_SCA
+#define ETHERTYPE_SCA 0x6007
+#endif
+#ifndef ETHERTYPE_TEB
+#define ETHERTYPE_TEB 0x6558
+#endif
+#ifndef ETHERTYPE_LANBRIDGE
+#define ETHERTYPE_LANBRIDGE 0x8038
+#endif
+#ifndef ETHERTYPE_DECDNS
+#define ETHERTYPE_DECDNS 0x803c
+#endif
+#ifndef ETHERTYPE_DECDTS
+#define ETHERTYPE_DECDTS 0x803e
+#endif
+#ifndef ETHERTYPE_VEXP
+#define ETHERTYPE_VEXP 0x805b
+#endif
+#ifndef ETHERTYPE_VPROD
+#define ETHERTYPE_VPROD 0x805c
+#endif
+#ifndef ETHERTYPE_ATALK
+#define ETHERTYPE_ATALK 0x809b
+#endif
+#ifndef ETHERTYPE_AARP
+#define ETHERTYPE_AARP 0x80f3
+#endif
+#ifndef ETHERTYPE_TIPC
+#define ETHERTYPE_TIPC 0x88ca
+#endif
+#ifndef ETHERTYPE_8021Q
+#define ETHERTYPE_8021Q 0x8100
+#endif
+
+/* see:
+ https://en.wikipedia.org/wiki/IEEE_802.1Q
+ and https://en.wikipedia.org/wiki/QinQ
+*/
+#ifndef ETHERTYPE_8021Q9100
+#define ETHERTYPE_8021Q9100 0x9100
+#endif
+#ifndef ETHERTYPE_8021Q9200
+#define ETHERTYPE_8021Q9200 0x9200
+#endif
+#ifndef ETHERTYPE_8021QinQ
+#define ETHERTYPE_8021QinQ 0x88a8
+#endif
+#ifndef ETHERTYPE_MACSEC
+#define ETHERTYPE_MACSEC 0x88e5
+#endif
+#ifndef ETHERTYPE_IPX
+#define ETHERTYPE_IPX 0x8137
+#endif
+#ifndef ETHERTYPE_IPV6
+#define ETHERTYPE_IPV6 0x86dd
+#endif
+#ifndef ETHERTYPE_PPP
+#define ETHERTYPE_PPP 0x880b
+#endif
+#ifndef ETHERTYPE_MPCP
+#define ETHERTYPE_MPCP 0x8808
+#endif
+#ifndef ETHERTYPE_SLOW
+#define ETHERTYPE_SLOW 0x8809
+#endif
+#ifndef ETHERTYPE_MPLS
+#define ETHERTYPE_MPLS 0x8847
+#endif
+#ifndef ETHERTYPE_MPLS_MULTI
+#define ETHERTYPE_MPLS_MULTI 0x8848
+#endif
+#ifndef ETHERTYPE_PPPOED
+#define ETHERTYPE_PPPOED 0x8863
+#endif
+#ifndef ETHERTYPE_PPPOES
+#define ETHERTYPE_PPPOES 0x8864
+#endif
+#ifndef ETHERTYPE_NSH
+#define ETHERTYPE_NSH 0x894F
+#endif
+#ifndef ETHERTYPE_PPPOED2
+#define ETHERTYPE_PPPOED2 0x3c12
+#endif
+#ifndef ETHERTYPE_PPPOES2
+#define ETHERTYPE_PPPOES2 0x3c13
+#endif
+#ifndef ETHERTYPE_MS_NLB_HB
+#define ETHERTYPE_MS_NLB_HB 0x886f /* MS Network Load Balancing Heartbeat */
+#endif
+#ifndef ETHERTYPE_JUMBO
+#define ETHERTYPE_JUMBO 0x8870
+#endif
+#ifndef ETHERTYPE_LLDP
+#define ETHERTYPE_LLDP 0x88cc
+#endif
+#ifndef ETHERTYPE_EAPOL
+#define ETHERTYPE_EAPOL 0x888e
+#endif
+#ifndef ETHERTYPE_REALTEK
+#define ETHERTYPE_REALTEK 0x8899 /* Realtek layer 2 protocols and switch tags */
+#endif
+#ifndef ETHERTYPE_AOE
+#define ETHERTYPE_AOE 0x88a2
+#endif
+#ifndef ETHERTYPE_PTP
+#define ETHERTYPE_PTP 0x88f7
+#endif
+#ifndef ETHERTYPE_LOOPBACK
+#define ETHERTYPE_LOOPBACK 0x9000
+#endif
+#ifndef ETHERTYPE_VMAN
+#define ETHERTYPE_VMAN 0x9100 /* Extreme VMAN Protocol */
+#endif
+#ifndef ETHERTYPE_CFM_OLD
+#define ETHERTYPE_CFM_OLD 0xabcd /* 802.1ag depreciated */
+#endif
+#ifndef ETHERTYPE_CFM
+#define ETHERTYPE_CFM 0x8902 /* 802.1ag */
+#endif
+#ifndef ETHERTYPE_IEEE1905_1
+#define ETHERTYPE_IEEE1905_1 0x893a /* IEEE 1905.1 */
+#endif
+#ifndef ETHERTYPE_ISO
+#define ETHERTYPE_ISO 0xfefe /* nonstandard - used in Cisco HDLC encapsulation */
+#endif
+#ifndef ETHERTYPE_CALM_FAST
+#define ETHERTYPE_CALM_FAST 0x1111 /* ISO CALM FAST */
+#endif
+#ifndef ETHERTYPE_GEONET_OLD
+#define ETHERTYPE_GEONET_OLD 0x0707 /* ETSI GeoNetworking (before Jan 2013) */
+#endif
+#ifndef ETHERTYPE_GEONET
+#define ETHERTYPE_GEONET 0x8947 /* ETSI GeoNetworking (Official IEEE registration from Jan 2013) */
+#endif
+#ifndef ETHERTYPE_ARISTA
+#define ETHERTYPE_ARISTA 0xd28b /* Arista Networks vendor specific EtherType */
+#endif
+
+extern const struct tok ethertype_values[];
diff --git a/extract.h b/extract.h
new file mode 100644
index 0000000..d7d803d
--- /dev/null
+++ b/extract.h
@@ -0,0 +1,910 @@
+/*
+ * Copyright (c) 1992, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef EXTRACT_H
+#define EXTRACT_H
+
+#include <string.h>
+
+/*
+ * For 8-bit values; needed to fetch a one-byte value. Byte order
+ * isn't relevant, and alignment isn't an issue.
+ */
+#define EXTRACT_U_1(p) ((uint8_t)(*(p)))
+#define EXTRACT_S_1(p) ((int8_t)(*(p)))
+
+/*
+ * Inline functions or macros to extract possibly-unaligned big-endian
+ * integral values.
+ */
+#include "funcattrs.h"
+#include "netdissect.h"
+#include "diag-control.h"
+
+/*
+ * If we have versions of GCC or Clang that support an __attribute__
+ * to say "if we're building with unsigned behavior sanitization,
+ * don't complain about undefined behavior in this function", we
+ * label these functions with that attribute - we *know* it's undefined
+ * in the C standard, but we *also* know it does what we want with
+ * the ISA we're targeting and the compiler we're using.
+ *
+ * For GCC 4.9.0 and later, we use __attribute__((no_sanitize_undefined));
+ * pre-5.0 GCC doesn't have __has_attribute, and I'm not sure whether
+ * GCC or Clang first had __attribute__((no_sanitize(XXX)).
+ *
+ * For Clang, we check for __attribute__((no_sanitize(XXX)) with
+ * __has_attribute, as there are versions of Clang that support
+ * __attribute__((no_sanitize("undefined")) but don't support
+ * __attribute__((no_sanitize_undefined)).
+ *
+ * We define this here, rather than in funcattrs.h, because we
+ * only want it used here, we don't want it to be broadly used.
+ * (Any printer will get this defined, but this should at least
+ * make it harder for people to find.)
+ */
+#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 409)
+#define UNALIGNED_OK __attribute__((no_sanitize_undefined))
+#elif __has_attribute(no_sanitize)
+#define UNALIGNED_OK __attribute__((no_sanitize("undefined")))
+#else
+#define UNALIGNED_OK
+#endif
+
+#if (defined(__i386__) || defined(_M_IX86) || defined(__X86__) || defined(__x86_64__) || defined(_M_X64)) || \
+ (defined(__m68k__) && (!defined(__mc68000__) && !defined(__mc68010__))) || \
+ (defined(__ppc__) || defined(__ppc64__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PPC64)) || \
+ (defined(__s390__) || defined(__s390x__) || defined(__zarch__))
+/*
+ * The processor natively handles unaligned loads, so we can just
+ * cast the pointer and fetch through it.
+ *
+ * XXX - are those all the x86 tests we need?
+ * XXX - are those the only 68k tests we need not to generated
+ * unaligned accesses if the target is the 68000 or 68010?
+ * XXX - are there any tests we don't need, because some definitions are for
+ * compilers that also predefine the GCC symbols?
+ * XXX - do we need to test for both 32-bit and 64-bit versions of those
+ * architectures in all cases?
+ */
+UNALIGNED_OK static inline uint16_t
+EXTRACT_BE_U_2(const void *p)
+{
+ return ((uint16_t)ntohs(*(const uint16_t *)(p)));
+}
+
+UNALIGNED_OK static inline int16_t
+EXTRACT_BE_S_2(const void *p)
+{
+ return ((int16_t)ntohs(*(const int16_t *)(p)));
+}
+
+UNALIGNED_OK static inline uint32_t
+EXTRACT_BE_U_4(const void *p)
+{
+ return ((uint32_t)ntohl(*(const uint32_t *)(p)));
+}
+
+UNALIGNED_OK static inline int32_t
+EXTRACT_BE_S_4(const void *p)
+{
+ return ((int32_t)ntohl(*(const int32_t *)(p)));
+}
+
+UNALIGNED_OK static inline uint64_t
+EXTRACT_BE_U_8(const void *p)
+{
+ return ((uint64_t)(((uint64_t)ntohl(*((const uint32_t *)(p) + 0))) << 32 |
+ ((uint64_t)ntohl(*((const uint32_t *)(p) + 1))) << 0));
+
+}
+
+UNALIGNED_OK static inline int64_t
+EXTRACT_BE_S_8(const void *p)
+{
+ return ((int64_t)(((int64_t)ntohl(*((const uint32_t *)(p) + 0))) << 32 |
+ ((uint64_t)ntohl(*((const uint32_t *)(p) + 1))) << 0));
+
+}
+
+/*
+ * Extract an IPv4 address, which is in network byte order, and not
+ * necessarily aligned, and provide the result in host byte order.
+ */
+UNALIGNED_OK static inline uint32_t
+EXTRACT_IPV4_TO_HOST_ORDER(const void *p)
+{
+ return ((uint32_t)ntohl(*(const uint32_t *)(p)));
+}
+#elif ND_IS_AT_LEAST_GNUC_VERSION(2,0) && \
+ (defined(__alpha) || defined(__alpha__) || \
+ defined(__mips) || defined(__mips__))
+/*
+ * This is MIPS or Alpha, which don't natively handle unaligned loads,
+ * but which have instructions that can help when doing unaligned
+ * loads, and this is GCC 2.0 or later or a compiler that claims to
+ * be GCC 2.0 or later, which we assume that mean we have
+ * __attribute__((packed)), which we can use to convince the compiler
+ * to generate those instructions.
+ *
+ * Declare packed structures containing a uint16_t and a uint32_t,
+ * cast the pointer to point to one of those, and fetch through it;
+ * the GCC manual doesn't appear to explicitly say that
+ * __attribute__((packed)) causes the compiler to generate unaligned-safe
+ * code, but it appears to do so.
+ *
+ * We do this in case the compiler can generate code using those
+ * instructions to do an unaligned load and pass stuff to "ntohs()" or
+ * "ntohl()", which might be better than the code to fetch the
+ * bytes one at a time and assemble them. (That might not be the
+ * case on a little-endian platform, such as DEC's MIPS machines and
+ * Alpha machines, where "ntohs()" and "ntohl()" might not be done
+ * inline.)
+ *
+ * We do this only for specific architectures because, for example,
+ * at least some versions of GCC, when compiling for 64-bit SPARC,
+ * generate code that assumes alignment if we do this.
+ *
+ * XXX - add other architectures and compilers as possible and
+ * appropriate.
+ *
+ * HP's C compiler, indicated by __HP_cc being defined, supports
+ * "#pragma unaligned N" in version A.05.50 and later, where "N"
+ * specifies a number of bytes at which the typedef on the next
+ * line is aligned, e.g.
+ *
+ * #pragma unalign 1
+ * typedef uint16_t unaligned_uint16_t;
+ *
+ * to define unaligned_uint16_t as a 16-bit unaligned data type.
+ * This could be presumably used, in sufficiently recent versions of
+ * the compiler, with macros similar to those below. This would be
+ * useful only if that compiler could generate better code for PA-RISC
+ * or Itanium than would be generated by a bunch of shifts-and-ORs.
+ *
+ * DEC C, indicated by __DECC being defined, has, at least on Alpha,
+ * an __unaligned qualifier that can be applied to pointers to get the
+ * compiler to generate code that does unaligned loads and stores when
+ * dereferencing the pointer in question.
+ *
+ * XXX - what if the native C compiler doesn't support
+ * __attribute__((packed))? How can we get it to generate unaligned
+ * accesses for *specific* items?
+ */
+typedef struct {
+ uint16_t val;
+} __attribute__((packed)) unaligned_uint16_t;
+
+typedef struct {
+ int16_t val;
+} __attribute__((packed)) unaligned_int16_t;
+
+typedef struct {
+ uint32_t val;
+} __attribute__((packed)) unaligned_uint32_t;
+
+typedef struct {
+ int32_t val;
+} __attribute__((packed)) unaligned_int32_t;
+
+UNALIGNED_OK static inline uint16_t
+EXTRACT_BE_U_2(const void *p)
+{
+ return ((uint16_t)ntohs(((const unaligned_uint16_t *)(p))->val));
+}
+
+UNALIGNED_OK static inline int16_t
+EXTRACT_BE_S_2(const void *p)
+{
+ return ((int16_t)ntohs(((const unaligned_int16_t *)(p))->val));
+}
+
+UNALIGNED_OK static inline uint32_t
+EXTRACT_BE_U_4(const void *p)
+{
+ return ((uint32_t)ntohl(((const unaligned_uint32_t *)(p))->val));
+}
+
+UNALIGNED_OK static inline int32_t
+EXTRACT_BE_S_4(const void *p)
+{
+ return ((int32_t)ntohl(((const unaligned_int32_t *)(p))->val));
+}
+
+UNALIGNED_OK static inline uint64_t
+EXTRACT_BE_U_8(const void *p)
+{
+ return ((uint64_t)(((uint64_t)ntohl(((const unaligned_uint32_t *)(p) + 0)->val)) << 32 |
+ ((uint64_t)ntohl(((const unaligned_uint32_t *)(p) + 1)->val)) << 0));
+}
+
+UNALIGNED_OK static inline int64_t
+EXTRACT_BE_S_8(const void *p)
+{
+ return ((int64_t)(((uint64_t)ntohl(((const unaligned_uint32_t *)(p) + 0)->val)) << 32 |
+ ((uint64_t)ntohl(((const unaligned_uint32_t *)(p) + 1)->val)) << 0));
+}
+
+/*
+ * Extract an IPv4 address, which is in network byte order, and not
+ * necessarily aligned, and provide the result in host byte order.
+ */
+UNALIGNED_OK static inline uint32_t
+EXTRACT_IPV4_TO_HOST_ORDER(const void *p)
+{
+ return ((uint32_t)ntohl(((const unaligned_uint32_t *)(p))->val));
+}
+#else
+/*
+ * This architecture doesn't natively support unaligned loads, and either
+ * this isn't a GCC-compatible compiler, we don't have __attribute__,
+ * or we do but we don't know of any better way with this instruction
+ * set to do unaligned loads, so do unaligned loads of big-endian
+ * quantities the hard way - fetch the bytes one at a time and
+ * assemble them.
+ *
+ * XXX - ARM is a special case. ARMv1 through ARMv5 didn't suppory
+ * unaligned loads; ARMv6 and later support it *but* have a bit in
+ * the system control register that the OS can set and that causes
+ * unaligned loads to fault rather than succeeding.
+ *
+ * At least some OSes may set that flag, so we do *not* treat ARM
+ * as supporting unaligned loads. If your OS supports them on ARM,
+ * and you want to use them, please update the tests in the #if above
+ * to check for ARM *and* for your OS.
+ */
+#define EXTRACT_BE_U_2(p) \
+ ((uint16_t)(((uint16_t)(*((const uint8_t *)(p) + 0)) << 8) | \
+ ((uint16_t)(*((const uint8_t *)(p) + 1)) << 0)))
+#define EXTRACT_BE_S_2(p) \
+ ((int16_t)(((uint16_t)(*((const uint8_t *)(p) + 0)) << 8) | \
+ ((uint16_t)(*((const uint8_t *)(p) + 1)) << 0)))
+#define EXTRACT_BE_U_4(p) \
+ ((uint32_t)(((uint32_t)(*((const uint8_t *)(p) + 0)) << 24) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 1)) << 16) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 2)) << 8) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 3)) << 0)))
+#define EXTRACT_BE_S_4(p) \
+ ((int32_t)(((uint32_t)(*((const uint8_t *)(p) + 0)) << 24) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 1)) << 16) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 2)) << 8) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 3)) << 0)))
+#define EXTRACT_BE_U_8(p) \
+ ((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 0)) << 56) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 48) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 40) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 5)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 6)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 7)) << 0)))
+#define EXTRACT_BE_S_8(p) \
+ ((int64_t)(((uint64_t)(*((const uint8_t *)(p) + 0)) << 56) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 48) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 40) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 5)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 6)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 7)) << 0)))
+
+/*
+ * Extract an IPv4 address, which is in network byte order, and not
+ * necessarily aligned, and provide the result in host byte order.
+ */
+#define EXTRACT_IPV4_TO_HOST_ORDER(p) \
+ ((uint32_t)(((uint32_t)(*((const uint8_t *)(p) + 0)) << 24) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 1)) << 16) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 2)) << 8) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 3)) << 0)))
+#endif /* unaligned access checks */
+
+/*
+ * Extract numerical values in *host* byte order. (Some metadata
+ * headers are in the byte order of the host that wrote the file,
+ * and libpcap translate them to the byte order of the host
+ * reading the file. This means that if a program on that host
+ * reads with libpcap and writes to a new file, the new file will
+ * be written in the byte order of the host writing the file. Thus,
+ * the magic number in pcap files and byte-order magic in pcapng
+ * files can be used to determine the byte order in those metadata
+ * headers.)
+ *
+ * XXX - on platforms that can do unaligned accesses, just cast and
+ * dereference the pointer.
+ */
+static inline uint16_t
+EXTRACT_HE_U_2(const void *p)
+{
+ uint16_t val;
+
+ UNALIGNED_MEMCPY(&val, p, sizeof(uint16_t));
+ return val;
+}
+
+static inline int16_t
+EXTRACT_HE_S_2(const void *p)
+{
+ int16_t val;
+
+ UNALIGNED_MEMCPY(&val, p, sizeof(int16_t));
+ return val;
+}
+
+static inline uint32_t
+EXTRACT_HE_U_4(const void *p)
+{
+ uint32_t val;
+
+ UNALIGNED_MEMCPY(&val, p, sizeof(uint32_t));
+ return val;
+}
+
+static inline int32_t
+EXTRACT_HE_S_4(const void *p)
+{
+ int32_t val;
+
+ UNALIGNED_MEMCPY(&val, p, sizeof(int32_t));
+ return val;
+}
+
+/*
+ * Extract an IPv4 address, which is in network byte order, and which
+ * is not necessarily aligned on a 4-byte boundary, and provide the
+ * result in network byte order.
+ *
+ * This works the same way regardless of the host's byte order.
+ */
+static inline uint32_t
+EXTRACT_IPV4_TO_NETWORK_ORDER(const void *p)
+{
+ uint32_t addr;
+
+ UNALIGNED_MEMCPY(&addr, p, sizeof(uint32_t));
+ return addr;
+}
+
+/*
+ * Non-power-of-2 sizes.
+ */
+#define EXTRACT_BE_U_3(p) \
+ ((uint32_t)(((uint32_t)(*((const uint8_t *)(p) + 0)) << 16) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 2)) << 0)))
+
+#define EXTRACT_BE_S_3(p) \
+ (((*((const uint8_t *)(p) + 0)) & 0x80) ? \
+ ((int32_t)(((uint32_t)(*((const uint8_t *)(p) + 0)) << 16) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 2)) << 0))) : \
+ ((int32_t)(0xFF000000U | \
+ ((uint32_t)(*((const uint8_t *)(p) + 0)) << 16) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 2)) << 0))))
+
+#define EXTRACT_BE_U_5(p) \
+ ((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 0)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 0)))
+
+#define EXTRACT_BE_S_5(p) \
+ (((*((const uint8_t *)(p) + 0)) & 0x80) ? \
+ ((int64_t)(((uint64_t)(*((const uint8_t *)(p) + 0)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 0))) : \
+ ((int64_t)(INT64_T_CONSTANT(0xFFFFFF0000000000U) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 0)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 0))))
+
+#define EXTRACT_BE_U_6(p) \
+ ((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 0)) << 40) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 5)) << 0)))
+
+#define EXTRACT_BE_S_6(p) \
+ (((*((const uint8_t *)(p) + 0)) & 0x80) ? \
+ ((int64_t)(((uint64_t)(*((const uint8_t *)(p) + 0)) << 40) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 5)) << 0))) : \
+ ((int64_t)(INT64_T_CONSTANT(0xFFFFFFFF00000000U) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 0)) << 40) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 5)) << 0))))
+
+#define EXTRACT_BE_U_7(p) \
+ ((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 0)) << 48) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 40) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 5)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 6)) << 0)))
+
+#define EXTRACT_BE_S_7(p) \
+ (((*((const uint8_t *)(p) + 0)) & 0x80) ? \
+ ((int64_t)(((uint64_t)(*((const uint8_t *)(p) + 0)) << 48) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 40) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 5)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 6)) << 0))) : \
+ ((int64_t)(INT64_T_CONSTANT(0xFFFFFFFFFF000000U) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 0)) << 48) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 40) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 5)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 6)) << 0))))
+
+/*
+ * Macros to extract possibly-unaligned little-endian integral values.
+ * XXX - do loads on little-endian machines that support unaligned loads?
+ */
+#define EXTRACT_LE_U_2(p) \
+ ((uint16_t)(((uint16_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint16_t)(*((const uint8_t *)(p) + 0)) << 0)))
+#define EXTRACT_LE_S_2(p) \
+ ((int16_t)(((uint16_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint16_t)(*((const uint8_t *)(p) + 0)) << 0)))
+#define EXTRACT_LE_U_4(p) \
+ ((uint32_t)(((uint32_t)(*((const uint8_t *)(p) + 3)) << 24) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 2)) << 16) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 0)) << 0)))
+#define EXTRACT_LE_S_4(p) \
+ ((int32_t)(((uint32_t)(*((const uint8_t *)(p) + 3)) << 24) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 2)) << 16) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 0)) << 0)))
+#define EXTRACT_LE_U_8(p) \
+ ((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 7)) << 56) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 6)) << 48) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 5)) << 40) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 0)) << 0)))
+#define EXTRACT_LE_S_8(p) \
+ ((int64_t)(((uint64_t)(*((const uint8_t *)(p) + 7)) << 56) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 6)) << 48) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 5)) << 40) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 0)) << 0)))
+
+/*
+ * Non-power-of-2 sizes.
+ */
+
+#define EXTRACT_LE_U_3(p) \
+ ((uint32_t)(((uint32_t)(*((const uint8_t *)(p) + 2)) << 16) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 0)) << 0)))
+#define EXTRACT_LE_S_3(p) \
+ ((int32_t)(((uint32_t)(*((const uint8_t *)(p) + 2)) << 16) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint32_t)(*((const uint8_t *)(p) + 0)) << 0)))
+#define EXTRACT_LE_U_5(p) \
+ ((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 4)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 0)) << 0)))
+#define EXTRACT_LE_U_6(p) \
+ ((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 5)) << 40) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 0)) << 0)))
+#define EXTRACT_LE_U_7(p) \
+ ((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 6)) << 48) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 5)) << 40) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 4)) << 32) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 3)) << 24) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 2)) << 16) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 1)) << 8) | \
+ ((uint64_t)(*((const uint8_t *)(p) + 0)) << 0)))
+
+/*
+ * Macros to check the presence of the values in question.
+ */
+#define ND_TTEST_1(p) ND_TTEST_LEN((p), 1)
+#define ND_TCHECK_1(p) ND_TCHECK_LEN((p), 1)
+
+#define ND_TTEST_2(p) ND_TTEST_LEN((p), 2)
+#define ND_TCHECK_2(p) ND_TCHECK_LEN((p), 2)
+
+#define ND_TTEST_3(p) ND_TTEST_LEN((p), 3)
+#define ND_TCHECK_3(p) ND_TCHECK_LEN((p), 3)
+
+#define ND_TTEST_4(p) ND_TTEST_LEN((p), 4)
+#define ND_TCHECK_4(p) ND_TCHECK_LEN((p), 4)
+
+#define ND_TTEST_5(p) ND_TTEST_LEN((p), 5)
+#define ND_TCHECK_5(p) ND_TCHECK_LEN((p), 5)
+
+#define ND_TTEST_6(p) ND_TTEST_LEN((p), 6)
+#define ND_TCHECK_6(p) ND_TCHECK_LEN((p), 6)
+
+#define ND_TTEST_7(p) ND_TTEST_LEN((p), 7)
+#define ND_TCHECK_7(p) ND_TCHECK_LEN((p), 7)
+
+#define ND_TTEST_8(p) ND_TTEST_LEN((p), 8)
+#define ND_TCHECK_8(p) ND_TCHECK_LEN((p), 8)
+
+#define ND_TTEST_16(p) ND_TTEST_LEN((p), 16)
+#define ND_TCHECK_16(p) ND_TCHECK_LEN((p), 16)
+
+/* get_u_1 and get_s_1 */
+
+static inline uint8_t
+get_u_1(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_1(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_U_1(p);
+}
+
+static inline int8_t
+get_s_1(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_1(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_S_1(p);
+}
+
+/* get_be_u_N */
+
+static inline uint16_t
+get_be_u_2(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_2(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_U_2(p);
+}
+
+static inline uint32_t
+get_be_u_3(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_3(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_U_3(p);
+}
+
+static inline uint32_t
+get_be_u_4(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_4(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_U_4(p);
+}
+
+static inline uint64_t
+get_be_u_5(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_5(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_U_5(p);
+}
+
+static inline uint64_t
+get_be_u_6(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_6(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_U_6(p);
+}
+
+static inline uint64_t
+get_be_u_7(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_7(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_U_7(p);
+}
+
+static inline uint64_t
+get_be_u_8(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_8(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_U_8(p);
+}
+
+/* get_be_s_N */
+
+static inline int16_t
+get_be_s_2(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_2(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_S_2(p);
+}
+
+static inline int32_t
+get_be_s_3(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_3(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_S_3(p);
+}
+
+static inline int32_t
+get_be_s_4(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_4(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_S_4(p);
+}
+
+static inline int64_t
+get_be_s_5(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_5(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_S_5(p);
+}
+
+static inline int64_t
+get_be_s_6(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_6(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_S_6(p);
+}
+
+static inline int64_t
+get_be_s_7(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_7(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_S_7(p);
+}
+
+static inline int64_t
+get_be_s_8(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_8(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_BE_S_8(p);
+}
+
+/* get_he_u_N */
+
+static inline uint16_t
+get_he_u_2(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_2(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_HE_U_2(p);
+}
+
+static inline uint32_t
+get_he_u_4(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_4(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_HE_U_4(p);
+}
+
+/* get_he_s_N */
+
+static inline int16_t
+get_he_s_2(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_2(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_HE_S_2(p);
+}
+
+static inline int32_t
+get_he_s_4(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_4(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_HE_S_4(p);
+}
+
+/* get_le_u_N */
+
+static inline uint16_t
+get_le_u_2(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_2(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_LE_U_2(p);
+}
+
+static inline uint32_t
+get_le_u_3(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_3(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_LE_U_3(p);
+}
+
+static inline uint32_t
+get_le_u_4(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_4(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_LE_U_4(p);
+}
+
+static inline uint64_t
+get_le_u_5(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_5(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_LE_U_5(p);
+}
+
+static inline uint64_t
+get_le_u_6(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_6(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_LE_U_6(p);
+}
+
+static inline uint64_t
+get_le_u_7(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_7(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_LE_U_7(p);
+}
+
+static inline uint64_t
+get_le_u_8(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_8(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_LE_U_8(p);
+}
+
+/* get_le_s_N */
+
+static inline int16_t
+get_le_s_2(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_2(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_LE_S_2(p);
+}
+
+static inline int32_t
+get_le_s_3(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_3(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_LE_S_3(p);
+}
+
+static inline int32_t
+get_le_s_4(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_4(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_LE_S_4(p);
+}
+
+static inline int64_t
+get_le_s_8(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_8(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_LE_S_8(p);
+}
+
+/* get_ipv4_to_{host|network]_order */
+
+static inline uint32_t
+get_ipv4_to_host_order(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_4(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_IPV4_TO_HOST_ORDER(p);
+}
+
+static inline uint32_t
+get_ipv4_to_network_order(netdissect_options *ndo, const u_char *p)
+{
+ if (!ND_TTEST_4(p))
+ nd_trunc_longjmp(ndo);
+ return EXTRACT_IPV4_TO_NETWORK_ORDER(p);
+}
+
+static inline void
+get_cpy_bytes(netdissect_options *ndo, u_char *dst, const u_char *p, size_t len)
+{
+ if (!ND_TTEST_LEN(p, len))
+ nd_trunc_longjmp(ndo);
+ UNALIGNED_MEMCPY(dst, p, len);
+}
+
+#define GET_U_1(p) get_u_1(ndo, (const u_char *)(p))
+#define GET_S_1(p) get_s_1(ndo, (const u_char *)(p))
+
+#define GET_BE_U_2(p) get_be_u_2(ndo, (const u_char *)(p))
+#define GET_BE_U_3(p) get_be_u_3(ndo, (const u_char *)(p))
+#define GET_BE_U_4(p) get_be_u_4(ndo, (const u_char *)(p))
+#define GET_BE_U_5(p) get_be_u_5(ndo, (const u_char *)(p))
+#define GET_BE_U_6(p) get_be_u_6(ndo, (const u_char *)(p))
+#define GET_BE_U_7(p) get_be_u_7(ndo, (const u_char *)(p))
+#define GET_BE_U_8(p) get_be_u_8(ndo, (const u_char *)(p))
+
+#define GET_BE_S_2(p) get_be_s_2(ndo, (const u_char *)(p))
+#define GET_BE_S_3(p) get_be_s_3(ndo, (const u_char *)(p))
+#define GET_BE_S_4(p) get_be_s_4(ndo, (const u_char *)(p))
+#define GET_BE_S_5(p) get_be_s_5(ndo, (const u_char *)(p))
+#define GET_BE_S_6(p) get_be_s_6(ndo, (const u_char *)(p))
+#define GET_BE_S_7(p) get_be_s_7(ndo, (const u_char *)(p))
+#define GET_BE_S_8(p) get_be_s_8(ndo, (const u_char *)(p))
+
+#define GET_HE_U_2(p) get_he_u_2(ndo, (const u_char *)(p))
+#define GET_HE_U_4(p) get_he_u_4(ndo, (const u_char *)(p))
+
+#define GET_HE_S_2(p) get_he_s_2(ndo, (const u_char *)(p))
+#define GET_HE_S_4(p) get_he_s_4(ndo, (const u_char *)(p))
+
+#define GET_LE_U_2(p) get_le_u_2(ndo, (const u_char *)(p))
+#define GET_LE_U_3(p) get_le_u_3(ndo, (const u_char *)(p))
+#define GET_LE_U_4(p) get_le_u_4(ndo, (const u_char *)(p))
+#define GET_LE_U_5(p) get_le_u_5(ndo, (const u_char *)(p))
+#define GET_LE_U_6(p) get_le_u_6(ndo, (const u_char *)(p))
+#define GET_LE_U_7(p) get_le_u_7(ndo, (const u_char *)(p))
+#define GET_LE_U_8(p) get_le_u_8(ndo, (const u_char *)(p))
+
+#define GET_LE_S_2(p) get_le_s_2(ndo, (const u_char *)(p))
+#define GET_LE_S_3(p) get_le_s_3(ndo, (const u_char *)(p))
+#define GET_LE_S_4(p) get_le_s_4(ndo, (const u_char *)(p))
+#define GET_LE_S_8(p) get_le_s_8(ndo, (const u_char *)(p))
+
+#define GET_IPV4_TO_HOST_ORDER(p) get_ipv4_to_host_order(ndo, (const u_char *)(p))
+#define GET_IPV4_TO_NETWORK_ORDER(p) get_ipv4_to_network_order(ndo, (const u_char *)(p))
+
+#define GET_CPY_BYTES(dst, p, len) get_cpy_bytes(ndo, (u_char *)(dst), (const u_char *)(p), len)
+
+#endif /* EXTRACT_H */
diff --git a/fptype.c b/fptype.c
new file mode 100644
index 0000000..8a209bb
--- /dev/null
+++ b/fptype.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 1982, 1986, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+
+#include "netdissect-stdinc.h"
+
+#include "fptype.h"
+
+void
+float_type_check(uint32_t in)
+{
+ union { /* int to float conversion buffer */
+ float f;
+ uint32_t i;
+ } f;
+
+ f.i = in;
+ printf("%.3f\n", f.f*8/1000000);
+}
diff --git a/fptype.h b/fptype.h
new file mode 100644
index 0000000..ad435bd
--- /dev/null
+++ b/fptype.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 1982, 1986, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+extern void float_type_check(uint32_t);
diff --git a/ftmacros.h b/ftmacros.h
new file mode 100644
index 0000000..7975463
--- /dev/null
+++ b/ftmacros.h
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the Computer Systems
+ * Engineering Group at Lawrence Berkeley Laboratory.
+ * 4. Neither the name of the University nor of the Laboratory may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef ftmacros_h
+#define ftmacros_h
+
+/*
+ * Define some feature test macros to make sure that everything we want
+ * to be declared gets declared.
+ *
+ * On some UN*Xes we need to force strtok_r() to be declared.
+ * We do *NOT* want to define _POSIX_C_SOURCE, as that tends
+ * to make non-POSIX APIs that we use unavailable.
+ * XXX - is there no portable way to say "please pollute the
+ * namespace to the maximum extent possible"?
+ */
+#if defined(sun) || defined(__sun)
+ /*
+ * On Solaris Clang defines __EXTENSIONS__ automatically.
+ */
+ #ifndef __EXTENSIONS__
+ #define __EXTENSIONS__
+ #endif
+
+ /*
+ * We also need to define _XPG4_2 in order to get
+ * the Single UNIX Specification version of
+ * recvmsg().
+ */
+ #define _XPG4_2
+#elif defined(_hpux) || defined(hpux) || defined(__hpux)
+ #define _REENTRANT
+
+ /*
+ * We need this to get the versions of socket functions that
+ * use socklen_t. Define it only if it's not already defined,
+ * so we don't get redefiniton warnings.
+ */
+ #ifndef _XOPEN_SOURCE_EXTENDED
+ #define _XOPEN_SOURCE_EXTENDED
+ #endif
+
+ /*
+ * XXX - the list of PA-RISC options for GCC makes it sound as if
+ * building code that uses a particular vintage of UNIX API/ABI
+ * is complicated:
+ *
+ * https://gcc.gnu.org/onlinedocs/gcc/HPPA-Options.html
+ *
+ * See the description of the -munix flag.
+ *
+ * We probably want libpcap to work with programs built for any
+ * UN*X standard. I'm not sure whether that's possible and, if
+ * it is, what sort of stuff it'd have to do.
+ *
+ * It might also be a requirement that we build with a special
+ * flag to allow the library to be used with threaded code, at
+ * least with HP's C compiler; hopefully doing so won't make it
+ * *not* work with *un*-threaded code.
+ */
+#else
+ /*
+ * Turn on _GNU_SOURCE to get everything GNU libc has to offer,
+ * including asprintf(), if we're using GNU libc.
+ *
+ * Unfortunately, one thing it has to offer is a strerror_r()
+ * that's not POSIX-compliant, but we deal with that in
+ * pcap_fmt_errmsg_for_errno().
+ *
+ * We don't limit this to, for example, Linux and Cygwin, because
+ * this might, for example, be GNU/HURD or one of Debian's kFreeBSD
+ * OSes ("GNU/FreeBSD").
+ */
+ #define _GNU_SOURCE
+
+ /*
+ * We turn on both _DEFAULT_SOURCE and _BSD_SOURCE to try to get
+ * the BSD u_XXX types, such as u_int and u_short, defined. We
+ * define _DEFAULT_SOURCE first, so that newer versions of GNU libc
+ * don't whine about _BSD_SOURCE being deprecated; we still have
+ * to define _BSD_SOURCE to handle older versions of GNU libc that
+ * don't support _DEFAULT_SOURCE.
+ *
+ * But, if it's already defined, don't define it, so that we don't
+ * get a warning of it being redefined if it's defined as, for
+ * example, 1.
+ */
+ #ifndef _DEFAULT_SOURCE
+ #define _DEFAULT_SOURCE
+ #endif
+ /* Avoid redefining _BSD_SOURCE if it's already defined as for ex. 1 */
+ #ifndef _BSD_SOURCE
+ #define _BSD_SOURCE
+ #endif
+#endif
+
+#endif
diff --git a/funcattrs.h b/funcattrs.h
new file mode 100644
index 0000000..21f3cc1
--- /dev/null
+++ b/funcattrs.h
@@ -0,0 +1,160 @@
+/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */
+/*
+ * Copyright (c) 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the Computer Systems
+ * Engineering Group at Lawrence Berkeley Laboratory.
+ * 4. Neither the name of the University nor of the Laboratory may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lib_funcattrs_h
+#define lib_funcattrs_h
+
+#include "compiler-tests.h"
+
+/*
+ * Attributes to apply to functions and their arguments, using various
+ * compiler-specific extensions.
+ */
+
+/*
+ * NORETURN, before a function declaration, means "this function
+ * never returns". (It must go before the function declaration, e.g.
+ * "extern NORETURN func(...)" rather than after the function
+ * declaration, as the MSVC version has to go before the declaration.)
+ */
+#if __has_attribute(noreturn) \
+ || ND_IS_AT_LEAST_GNUC_VERSION(2,5) \
+ || ND_IS_AT_LEAST_SUNC_VERSION(5,9) \
+ || ND_IS_AT_LEAST_XL_C_VERSION(10,1) \
+ || ND_IS_AT_LEAST_HP_C_VERSION(6,10)
+ /*
+ * Compiler with support for __attribute((noreturn)), or GCC 2.5 and
+ * later, or some compiler asserting compatibility with GCC 2.5 and
+ * later, or Solaris Studio 12 (Sun C 5.9) and later, or IBM XL C 10.1
+ * and later (do any earlier versions of XL C support this?), or HP aCC
+ * A.06.10 and later.
+ */
+ #define NORETURN __attribute((noreturn))
+
+ /*
+ * However, GCC didn't support that for function *pointers* until GCC
+ * 4.1.0; see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3481.
+ *
+ * Sun C/Oracle Studio C doesn't seem to support it, either.
+ */
+ #if (defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) < 401)) \
+ || (defined(__SUNPRO_C))
+ #define NORETURN_FUNCPTR
+ #else
+ #define NORETURN_FUNCPTR __attribute((noreturn))
+ #endif
+#elif defined(_MSC_VER)
+ /*
+ * MSVC.
+ * It doesn't allow __declspec(noreturn) to be applied to function
+ * pointers.
+ */
+ #define NORETURN __declspec(noreturn)
+ #define NORETURN_FUNCPTR
+#else
+ #define NORETURN
+ #define NORETURN_FUNCPTR
+#endif
+
+/*
+ * WARN_UNUSED_RESULT, before a function declaration, means "the caller
+ * should use the result of this function" (even if it's just a success/
+ * failure indication).
+ */
+#if __has_attribute(warn_unused_result) \
+ || ND_IS_AT_LEAST_GNUC_VERSION(3,4) \
+ || ND_IS_AT_LEAST_HP_C_VERSION(6,25)
+ #define WARN_UNUSED_RESULT __attribute((warn_unused_result))
+#else
+ #define WARN_UNUSED_RESULT
+#endif
+
+/*
+ * PRINTFLIKE(x,y), after a function declaration, means "this function
+ * does printf-style formatting, with the xth argument being the format
+ * string and the yth argument being the first argument for the format
+ * string".
+ */
+#if __has_attribute(__format__) \
+ || ND_IS_AT_LEAST_GNUC_VERSION(2,3) \
+ || ND_IS_AT_LEAST_XL_C_VERSION(10,1) \
+ || ND_IS_AT_LEAST_HP_C_VERSION(6,10)
+ /*
+ * Compiler with support for it, or GCC 2.3 and later, or some compiler
+ * asserting compatibility with GCC 2.3 and later, or IBM XL C 10.1
+ * and later (do any earlier versions of XL C support this?),
+ * or HP aCC A.06.10 and later.
+ */
+ #define PRINTFLIKE(x,y) __attribute__((__format__(__printf__,x,y)))
+
+ /*
+ * However, GCC didn't support that for function *pointers* until GCC
+ * 4.1.0; see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3481.
+ * XL C 16.1 (and possibly some earlier versions, but not 12.1 or 13.1) has
+ * a similar bug, the bugfix for which was made in:
+ * * version 16.1.1.8 for Linux (25 June 2020), which fixes
+ * https://www.ibm.com/support/pages/apar/LI81402
+ * * version 16.1.0.5 for AIX (5 May 2020), which fixes
+ * https://www.ibm.com/support/pages/apar/IJ24678
+ *
+ * When testing versions, keep in mind that XL C 16.1 pretends to be both
+ * GCC 4.2 and Clang 4.0 at once.
+ */
+ #if (ND_IS_AT_LEAST_GNUC_VERSION(4,1) \
+ && !ND_IS_AT_LEAST_XL_C_VERSION(10,1)) \
+ || (ND_IS_AT_LEAST_XL_C_VERSION(16,1) \
+ && (ND_IS_AT_LEAST_XL_C_MODFIX(1, 8) && defined(__linux__)) \
+ || (ND_IS_AT_LEAST_XL_C_MODFIX(0, 5) && defined(_AIX)))
+ #define PRINTFLIKE_FUNCPTR(x,y) __attribute__((__format__(__printf__,x,y)))
+ #endif
+#endif
+
+#if !defined(PRINTFLIKE)
+#define PRINTFLIKE(x,y)
+#endif
+#if !defined(PRINTFLIKE_FUNCPTR)
+#define PRINTFLIKE_FUNCPTR(x,y)
+#endif
+
+/*
+ * For flagging arguments as format strings in MSVC.
+ */
+#ifdef _MSC_VER
+ #include <sal.h>
+ #define FORMAT_STRING(p) _Printf_format_string_ p
+#else
+ #define FORMAT_STRING(p) p
+#endif
+
+#endif /* lib_funcattrs_h */
diff --git a/getservent.h b/getservent.h
new file mode 100644
index 0000000..6fa5f36
--- /dev/null
+++ b/getservent.h
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 1983, 1993 The Regents of the University of California.
+* Copyright (c) 1993 Digital Equipment Corporation.
+* Copyright (c) 2012 G. Vanem <gvanem@yahoo.no>.
+* Copyright (c) 2017 Ali Abdulkadir <autostart.ini@gmail.com>.
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* 2. Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the distribution.
+* 3. All advertising materials mentioning features or use of this software
+* must display the following acknowledgement:
+* This product includes software developed by the University of
+* California, Berkeley and its contributors.
+* 4. Neither the name of the University nor the names of its contributors
+* may be used to endorse or promote products derived from this software
+* without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+* SUCH DAMAGE.
+*/
+
+#ifndef ND_GETSERVENT_H
+#define ND_GETSERVENT_H
+
+#ifdef _NETDB_H_
+/* Just in case... */
+#error netdb.h and getservent.h are incompatible
+#else
+#define _NETDB_H_
+#endif
+
+#ifdef _WIN32
+#define __PATH_SYSROOT "SYSTEMROOT"
+#define __PATH_ETC_INET "\\System32\\drivers\\etc\\"
+#define __PATH_SERVICES "services"
+#else
+/*
+* The idea here is to be able to replace "PREFIX" in __PATH_SYSROOT with a variable
+* that could, for example, point to an alternative install location.
+*/
+#define __PATH_SYSROOT "PREFIX"
+#define __PATH_ETC_INET "/etc/"
+#define __PATH_SERVICES __PATH_ETC_INET"services"
+#endif
+
+#define MAXALIASES 35
+
+void endservent (void);
+struct servent *getservent(void);
+void setservent (int f);
+
+#endif /* ! ND_GETSERVENT_H */
diff --git a/gmpls.c b/gmpls.c
new file mode 100644
index 0000000..f0646f1
--- /dev/null
+++ b/gmpls.c
@@ -0,0 +1,192 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "gmpls.h"
+
+/* rfc3471 */
+const struct tok gmpls_link_prot_values[] = {
+ { 0x01, "Extra Traffic"},
+ { 0x02, "Unprotected"},
+ { 0x04, "Shared"},
+ { 0x08, "Dedicated 1:1"},
+ { 0x10, "Dedicated 1+1"},
+ { 0x20, "Enhanced"},
+ { 0x40, "Reserved"},
+ { 0x80, "Reserved"},
+ { 0, NULL }
+};
+
+/* rfc3471 */
+const struct tok gmpls_switch_cap_values[] = {
+ { GMPLS_PSC1, "Packet-Switch Capable-1"},
+ { GMPLS_PSC2, "Packet-Switch Capable-2"},
+ { GMPLS_PSC3, "Packet-Switch Capable-3"},
+ { GMPLS_PSC4, "Packet-Switch Capable-4"},
+ { GMPLS_L2SC, "Layer-2 Switch Capable"},
+ { GMPLS_TSC, "Time-Division-Multiplex"},
+ { GMPLS_LSC, "Lambda-Switch Capable"},
+ { GMPLS_FSC, "Fiber-Switch Capable"},
+ { 0, NULL }
+};
+
+/* rfc4205 */
+const struct tok gmpls_switch_cap_tsc_indication_values[] = {
+ { 0, "Standard SONET/SDH" },
+ { 1, "Arbitrary SONET/SDH" },
+ { 0, NULL }
+};
+
+/* rfc3471 */
+const struct tok gmpls_encoding_values[] = {
+ { 1, "Packet"},
+ { 2, "Ethernet V2/DIX"},
+ { 3, "ANSI/ETSI PDH"},
+ { 4, "Reserved"},
+ { 5, "SDH ITU-T G.707/SONET ANSI T1.105"},
+ { 6, "Reserved"},
+ { 7, "Digital Wrapper"},
+ { 8, "Lambda (photonic)"},
+ { 9, "Fiber"},
+ { 10, "Reserved"},
+ { 11, "FiberChannel"},
+ { 0, NULL }
+};
+
+/* rfc3471 */
+const struct tok gmpls_payload_values[] = {
+ { 0, "Unknown"},
+ { 1, "Reserved"},
+ { 2, "Reserved"},
+ { 3, "Reserved"},
+ { 4, "Reserved"},
+ { 5, "Asynchronous mapping of E4"},
+ { 6, "Asynchronous mapping of DS3/T3"},
+ { 7, "Asynchronous mapping of E3"},
+ { 8, "Bit synchronous mapping of E3"},
+ { 9, "Byte synchronous mapping of E3"},
+ { 10, "Asynchronous mapping of DS2/T2"},
+ { 11, "Bit synchronous mapping of DS2/T2"},
+ { 12, "Reserved"},
+ { 13, "Asynchronous mapping of E1"},
+ { 14, "Byte synchronous mapping of E1"},
+ { 15, "Byte synchronous mapping of 31 * DS0"},
+ { 16, "Asynchronous mapping of DS1/T1"},
+ { 17, "Bit synchronous mapping of DS1/T1"},
+ { 18, "Byte synchronous mapping of DS1/T1"},
+ { 19, "VC-11 in VC-12"},
+ { 20, "Reserved"},
+ { 21, "Reserved"},
+ { 22, "DS1 SF Asynchronous"},
+ { 23, "DS1 ESF Asynchronous"},
+ { 24, "DS3 M23 Asynchronous"},
+ { 25, "DS3 C-Bit Parity Asynchronous"},
+ { 26, "VT/LOVC"},
+ { 27, "STS SPE/HOVC"},
+ { 28, "POS - No Scrambling, 16 bit CRC"},
+ { 29, "POS - No Scrambling, 32 bit CRC"},
+ { 30, "POS - Scrambling, 16 bit CRC"},
+ { 31, "POS - Scrambling, 32 bit CRC"},
+ { 32, "ATM mapping"},
+ { 33, "Ethernet PHY"},
+ { 34, "SONET/SDH"},
+ { 35, "Reserved (SONET deprecated)"},
+ { 36, "Digital Wrapper"},
+ { 37, "Lambda"},
+ { 38, "ANSI/ETSI PDH"},
+ { 39, "Reserved"},
+ { 40, "Link Access Protocol SDH (X.85 and X.86)"},
+ { 41, "FDDI"},
+ { 42, "DQDB (ETSI ETS 300 216)"},
+ { 43, "FiberChannel-3 (Services)"},
+ { 44, "HDLC"},
+ { 45, "Ethernet V2/DIX (only)"},
+ { 46, "Ethernet 802.3 (only)"},
+/* draft-ietf-ccamp-gmpls-g709-04.txt */
+ { 47, "G.709 ODUj"},
+ { 48, "G.709 OTUk(v)"},
+ { 49, "CBR/CBRa"},
+ { 50, "CBRb"},
+ { 51, "BSOT"},
+ { 52, "BSNT"},
+ { 53, "IP/PPP (GFP)"},
+ { 54, "Ethernet MAC (framed GFP)"},
+ { 55, "Ethernet PHY (transparent GFP)"},
+ { 56, "ESCON"},
+ { 57, "FICON"},
+ { 58, "Fiber Channel"},
+ { 0, NULL }
+};
+
+/*
+ * Link Type values used by LMP Service Discovery (specifically, the Client
+ * Port Service Attributes Object). See UNI 1.0 section 9.4.2 for details.
+ */
+const struct tok lmp_sd_service_config_cpsa_link_type_values[] = {
+ { 5, "SDH ITU-T G.707"},
+ { 6, "SONET ANSI T1.105"},
+ { 0, NULL}
+};
+
+/*
+ * Signal Type values for SDH links used by LMP Service Discovery (specifically,
+ * the Client Port Service Attributes Object). See UNI 1.0 section 9.4.2 for
+ * details.
+ */
+const struct tok lmp_sd_service_config_cpsa_signal_type_sdh_values[] = {
+ { 5, "VC-3"},
+ { 6, "VC-4"},
+ { 7, "STM-0"},
+ { 8, "STM-1"},
+ { 9, "STM-4"},
+ { 10, "STM-16"},
+ { 11, "STM-64"},
+ { 12, "STM-256"},
+ { 0, NULL}
+};
+
+/*
+ * Signal Type values for SONET links used by LMP Service Discovery (specifically,
+ * the Client Port Service Attributes Object). See UNI 1.0 section 9.4.2 for
+ * details.
+ */
+const struct tok lmp_sd_service_config_cpsa_signal_type_sonet_values[] = {
+ { 5, "STS-1 SPE"},
+ { 6, "STS-3c SPE"},
+ { 7, "STS-1"},
+ { 8, "STM-3"},
+ { 9, "STM-12"},
+ { 10, "STM-48"},
+ { 11, "STM-192"},
+ { 12, "STM-768"},
+ { 0, NULL}
+};
+
+#define DIFFSERV_BC_MODEL_RDM 0 /* draft-ietf-tewg-diff-te-proto-07 */
+#define DIFFSERV_BC_MODEL_MAM 1 /* draft-ietf-tewg-diff-te-proto-07 */
+#define DIFFSERV_BC_MODEL_EXTD_MAM 254 /* experimental */
+
+const struct tok diffserv_te_bc_values[] = {
+ { DIFFSERV_BC_MODEL_RDM, "Russian dolls"},
+ { DIFFSERV_BC_MODEL_MAM, "Maximum allocation"},
+ { DIFFSERV_BC_MODEL_EXTD_MAM, "Maximum allocation with E-LSP support"},
+ { 0, NULL }
+};
diff --git a/gmpls.h b/gmpls.h
new file mode 100644
index 0000000..32fa811
--- /dev/null
+++ b/gmpls.h
@@ -0,0 +1,33 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+#define GMPLS_PSC1 1
+#define GMPLS_PSC2 2
+#define GMPLS_PSC3 3
+#define GMPLS_PSC4 4
+#define GMPLS_L2SC 51
+#define GMPLS_TSC 100
+#define GMPLS_LSC 150
+#define GMPLS_FSC 200
+
+extern const struct tok gmpls_link_prot_values[];
+extern const struct tok gmpls_switch_cap_values[];
+extern const struct tok gmpls_switch_cap_tsc_indication_values[];
+extern const struct tok gmpls_encoding_values[];
+extern const struct tok gmpls_payload_values[];
+extern const struct tok diffserv_te_bc_values[];
+extern const struct tok lmp_sd_service_config_cpsa_link_type_values[];
+extern const struct tok lmp_sd_service_config_cpsa_signal_type_sdh_values[];
+extern const struct tok lmp_sd_service_config_cpsa_signal_type_sonet_values[];
diff --git a/in_cksum.c b/in_cksum.c
new file mode 100644
index 0000000..eb7c634
--- /dev/null
+++ b/in_cksum.c
@@ -0,0 +1,200 @@
+/* in_cksum.c
+ * 4.4-Lite-2 Internet checksum routine, modified to take a vector of
+ * pointers/lengths giving the pieces to be checksummed. Also using
+ * Tahoe/CGI version of ADDCARRY(x) macro instead of from portable version.
+ */
+
+/*
+ * Copyright (c) 1988, 1992, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)in_cksum.c 8.1 (Berkeley) 6/10/93
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+
+/*
+ * Checksum routine for Internet Protocol family headers (Portable Version).
+ *
+ * This routine is very heavily used in the network
+ * code and should be modified for each CPU to be as fast as possible.
+ */
+
+#define ADDCARRY(x) {if ((x) > 65535) (x) -= 65535;}
+#define REDUCE {l_util.l = sum; sum = l_util.s[0] + l_util.s[1]; ADDCARRY(sum);}
+
+uint16_t
+in_cksum(const struct cksum_vec *vec, int veclen)
+{
+ const uint16_t *w;
+ int sum = 0;
+ int mlen = 0;
+ int byte_swapped = 0;
+
+ union {
+ uint8_t c[2];
+ uint16_t s;
+ } s_util;
+ union {
+ uint16_t s[2];
+ uint32_t l;
+ } l_util;
+
+ for (; veclen != 0; vec++, veclen--) {
+ if (vec->len == 0)
+ continue;
+ w = (const uint16_t *)(const void *)vec->ptr;
+ if (mlen == -1) {
+ /*
+ * The first byte of this chunk is the continuation
+ * of a word spanning between this chunk and the
+ * last chunk.
+ *
+ * s_util.c[0] is already saved when scanning previous
+ * chunk.
+ */
+ s_util.c[1] = *(const uint8_t *)w;
+ sum += s_util.s;
+ w = (const uint16_t *)(const void *)((const uint8_t *)w + 1);
+ mlen = vec->len - 1;
+ } else
+ mlen = vec->len;
+ /*
+ * Force to even boundary.
+ */
+ if ((1 & (uintptr_t) w) && (mlen > 0)) {
+ REDUCE;
+ sum <<= 8;
+ s_util.c[0] = *(const uint8_t *)w;
+ w = (const uint16_t *)(const void *)((const uint8_t *)w + 1);
+ mlen--;
+ byte_swapped = 1;
+ }
+ /*
+ * Unroll the loop to make overhead from
+ * branches &c small.
+ */
+ while ((mlen -= 32) >= 0) {
+ sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
+ sum += w[4]; sum += w[5]; sum += w[6]; sum += w[7];
+ sum += w[8]; sum += w[9]; sum += w[10]; sum += w[11];
+ sum += w[12]; sum += w[13]; sum += w[14]; sum += w[15];
+ w += 16;
+ }
+ mlen += 32;
+ while ((mlen -= 8) >= 0) {
+ sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
+ w += 4;
+ }
+ mlen += 8;
+ if (mlen == 0 && byte_swapped == 0)
+ continue;
+ REDUCE;
+ while ((mlen -= 2) >= 0) {
+ sum += *w++;
+ }
+ if (byte_swapped) {
+ REDUCE;
+ sum <<= 8;
+ byte_swapped = 0;
+ if (mlen == -1) {
+ s_util.c[1] = *(const uint8_t *)w;
+ sum += s_util.s;
+ mlen = 0;
+ } else
+ mlen = -1;
+ } else if (mlen == -1)
+ s_util.c[0] = *(const uint8_t *)w;
+ }
+ if (mlen == -1) {
+ /* The last mbuf has odd # of bytes. Follow the
+ standard (the odd byte may be shifted left by 8 bits
+ or not as determined by endian-ness of the machine) */
+ s_util.c[1] = 0;
+ sum += s_util.s;
+ }
+ REDUCE;
+ return (~sum & 0xffff);
+}
+
+/*
+ * Given the host-byte-order value of the checksum field in a packet
+ * header, and the network-byte-order computed checksum of the data
+ * that the checksum covers (including the checksum itself), compute
+ * what the checksum field *should* have been.
+ */
+uint16_t
+in_cksum_shouldbe(uint16_t sum, uint16_t computed_sum)
+{
+ uint32_t shouldbe;
+
+ /*
+ * The value that should have gone into the checksum field
+ * is the negative of the value gotten by summing up everything
+ * *but* the checksum field.
+ *
+ * We can compute that by subtracting the value of the checksum
+ * field from the sum of all the data in the packet, and then
+ * computing the negative of that value.
+ *
+ * "sum" is the value of the checksum field, and "computed_sum"
+ * is the negative of the sum of all the data in the packets,
+ * so that's -(-computed_sum - sum), or (sum + computed_sum).
+ *
+ * All the arithmetic in question is one's complement, so the
+ * addition must include an end-around carry; we do this by
+ * doing the arithmetic in 32 bits (with no sign-extension),
+ * and then adding the upper 16 bits of the sum, which contain
+ * the carry, to the lower 16 bits of the sum, and then do it
+ * again in case *that* sum produced a carry.
+ *
+ * As RFC 1071 notes, the checksum can be computed without
+ * byte-swapping the 16-bit words; summing 16-bit words
+ * on a big-endian machine gives a big-endian checksum, which
+ * can be directly stuffed into the big-endian checksum fields
+ * in protocol headers, and summing words on a little-endian
+ * machine gives a little-endian checksum, which must be
+ * byte-swapped before being stuffed into a big-endian checksum
+ * field.
+ *
+ * "computed_sum" is a network-byte-order value, so we must put
+ * it in host byte order before subtracting it from the
+ * host-byte-order value from the header; the adjusted checksum
+ * will be in host byte order, which is what we'll return.
+ */
+ shouldbe = sum;
+ shouldbe += ntohs(computed_sum);
+ shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
+ shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
+ return (uint16_t)shouldbe;
+}
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..b44de09
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,250 @@
+#! /bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission. M.I.T. makes no representations about the
+# suitability of this software for any purpose. It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
diff --git a/interface.h b/interface.h
new file mode 100644
index 0000000..58e5ab3
--- /dev/null
+++ b/interface.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 1988-2002
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef tcpdump_interface_h
+#define tcpdump_interface_h
+
+#ifdef HAVE_OS_PROTO_H
+#include "os-proto.h"
+#endif
+
+#include "funcattrs.h"
+
+#include <stdarg.h>
+
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#ifndef HAVE_STRLCAT
+extern size_t strlcat(char *, const char *, size_t);
+#endif
+#ifndef HAVE_STRLCPY
+extern size_t strlcpy(char *, const char *, size_t);
+#endif
+
+#ifndef HAVE_STRDUP
+extern char *strdup(const char *);
+#endif
+
+#ifndef HAVE_STRSEP
+extern char *strsep(char **, const char *);
+#endif
+
+#endif
+
+extern char *program_name; /* used to generate self-identifying messages */
+
+#include <pcap.h>
+
+#ifndef HAVE_BPF_DUMP
+struct bpf_program;
+#endif
+
+/*
+ * With Capsicum bpf_dump() may be not declared even if HAVE_BPF_DUMP is set.
+ */
+#if !defined(HAVE_BPF_DUMP) || \
+ (defined(HAVE_BPF_DUMP) && HAVE_CAPSICUM && !defined(bpf_dump))
+extern void bpf_dump(const struct bpf_program *, int);
+
+#endif
diff --git a/ip.h b/ip.h
new file mode 100644
index 0000000..ca87548
--- /dev/null
+++ b/ip.h
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 1982, 1986, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)ip.h 8.2 (Berkeley) 6/1/94
+ */
+
+#ifndef netdissect_ip_h
+#define netdissect_ip_h
+
+/*
+ * Definitions for internet protocol version 4.
+ * Per RFC 791, September 1981.
+ */
+#define IPVERSION 4
+
+/*
+ * Structure of an internet header, naked of options.
+ *
+ * We declare ip_len and ip_off to be short, rather than u_short
+ * pragmatically since otherwise unsigned comparisons can result
+ * against negative integers quite easily, and fail in subtle ways.
+ */
+struct ip {
+ nd_uint8_t ip_vhl; /* header length, version */
+#define IP_V(ip) ((GET_U_1((ip)->ip_vhl) & 0xf0) >> 4)
+#define IP_HL(ip) (GET_U_1((ip)->ip_vhl) & 0x0f)
+ nd_uint8_t ip_tos; /* type of service */
+ nd_uint16_t ip_len; /* total length */
+ nd_uint16_t ip_id; /* identification */
+ nd_uint16_t ip_off; /* fragment offset field */
+#define IP_DF 0x4000 /* don't fragment flag */
+#define IP_MF 0x2000 /* more fragments flag */
+#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
+ nd_uint8_t ip_ttl; /* time to live */
+ nd_uint8_t ip_p; /* protocol */
+ nd_uint16_t ip_sum; /* checksum */
+ nd_ipv4 ip_src,ip_dst; /* source and dest address */
+};
+
+#define IP_MAXPACKET 65535 /* maximum packet size */
+
+/*
+ * Definitions for IP type of service (ip_tos)
+ */
+#define IPTOS_LOWDELAY 0x10
+#define IPTOS_THROUGHPUT 0x08
+#define IPTOS_RELIABILITY 0x04
+
+/*
+ * Definitions for IP precedence (also in ip_tos) (hopefully unused)
+ */
+#define IPTOS_PREC_NETCONTROL 0xe0
+#define IPTOS_PREC_INTERNETCONTROL 0xc0
+#define IPTOS_PREC_CRITIC_ECP 0xa0
+#define IPTOS_PREC_FLASHOVERRIDE 0x80
+#define IPTOS_PREC_FLASH 0x60
+#define IPTOS_PREC_IMMEDIATE 0x40
+#define IPTOS_PREC_PRIORITY 0x20
+#define IPTOS_PREC_ROUTINE 0x00
+
+/*
+ * Definitions for options.
+ */
+#define IPOPT_COPIED(o) ((o)&0x80)
+#define IPOPT_CLASS(o) ((o)&0x60)
+#define IPOPT_NUMBER(o) ((o)&0x1f)
+
+#define IPOPT_CONTROL 0x00
+#define IPOPT_RESERVED1 0x20
+#define IPOPT_DEBMEAS 0x40
+#define IPOPT_RESERVED2 0x60
+
+#define IPOPT_EOL 0 /* end of option list */
+#define IPOPT_NOP 1 /* no operation */
+
+#define IPOPT_RR 7 /* record packet route */
+#define IPOPT_TS 68 /* timestamp */
+#define IPOPT_RFC1393 82 /* traceroute RFC 1393 */
+#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */
+#define IPOPT_LSRR 131 /* loose source route */
+#define IPOPT_SATID 136 /* satnet id */
+#define IPOPT_SSRR 137 /* strict source route */
+#define IPOPT_RA 148 /* router-alert, rfc2113 */
+
+/*
+ * Offsets to fields in options other than EOL and NOP.
+ */
+#define IPOPT_OPTVAL 0 /* option ID */
+#define IPOPT_OLEN 1 /* option length */
+#define IPOPT_OFFSET 2 /* offset within option */
+#define IPOPT_MINOFF 4 /* min value of above */
+
+/*
+ * Time stamp option structure.
+ */
+struct ip_timestamp {
+ nd_uint8_t ipt_code; /* IPOPT_TS */
+ nd_uint8_t ipt_len; /* size of structure (variable) */
+ nd_uint8_t ipt_ptr; /* index of current entry */
+ nd_uint8_t ipt_oflwflg; /* flags, overflow counter */
+#define IPTS_OFLW(ip) (((ipt)->ipt_oflwflg & 0xf0) >> 4)
+#define IPTS_FLG(ip) ((ipt)->ipt_oflwflg & 0x0f)
+ union ipt_timestamp {
+ nd_uint32_t ipt_time[1];
+ struct ipt_ta {
+ nd_ipv4 ipt_addr;
+ nd_uint32_t ipt_time;
+ } ipt_ta[1];
+ } ipt_timestamp;
+};
+
+/* flag bits for ipt_flg */
+#define IPOPT_TS_TSONLY 0 /* timestamps only */
+#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */
+#define IPOPT_TS_PRESPEC 3 /* specified modules only */
+
+/* bits for security (not byte swapped) */
+#define IPOPT_SECUR_UNCLASS 0x0000
+#define IPOPT_SECUR_CONFID 0xf135
+#define IPOPT_SECUR_EFTO 0x789a
+#define IPOPT_SECUR_MMMM 0xbc4d
+#define IPOPT_SECUR_RESTR 0xaf13
+#define IPOPT_SECUR_SECRET 0xd788
+#define IPOPT_SECUR_TOPSECRET 0x6bc5
+
+/*
+ * Internet implementation parameters.
+ */
+#define MAXTTL 255 /* maximum time to live (seconds) */
+#define IPDEFTTL 64 /* default ttl, from RFC 1340 */
+#define IPFRAGTTL 60 /* time to live for frags, slowhz */
+#define IPTTLDEC 1 /* subtracted when forwarding */
+
+#define IP_MSS 576 /* default maximum segment size */
+#endif /* netdissect_ip_h */
diff --git a/ip6.h b/ip6.h
new file mode 100644
index 0000000..f927d20
--- /dev/null
+++ b/ip6.h
@@ -0,0 +1,212 @@
+/* NetBSD: ip6.h,v 1.9 2000/07/13 05:34:21 itojun Exp */
+/* $KAME: ip6.h,v 1.9 2000/07/02 21:01:32 itojun Exp $ */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Copyright (c) 1982, 1986, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)ip.h 8.1 (Berkeley) 6/10/93
+ */
+
+#ifndef ND_IP6_H_
+#define ND_IP6_H_
+
+/*
+ * Definition for internet protocol version 6.
+ * RFC 2460
+ */
+
+struct ip6_hdr {
+ union {
+ struct ip6_hdrctl {
+ nd_uint32_t ip6_un1_flow; /* 20 bits of flow-ID */
+ nd_uint16_t ip6_un1_plen; /* payload length */
+ nd_uint8_t ip6_un1_nxt; /* next header */
+ nd_uint8_t ip6_un1_hlim; /* hop limit */
+ } ip6_un1;
+ nd_uint8_t ip6_un2_vfc; /* 4 bits version, top 4 bits class */
+ } ip6_ctlun;
+ nd_ipv6 ip6_src; /* source address */
+ nd_ipv6 ip6_dst; /* destination address */
+};
+
+#define ip6_vfc ip6_ctlun.ip6_un2_vfc
+#define IP6_VERSION(ip6_hdr) ((GET_U_1((ip6_hdr)->ip6_vfc) & 0xf0) >> 4)
+#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow
+#define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen
+#define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt
+#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim
+#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim
+
+/* in network endian */
+#define IPV6_FLOWINFO_MASK ((uint32_t)htonl(0x0fffffff)) /* flow info (28 bits) */
+#define IPV6_FLOWLABEL_MASK ((uint32_t)htonl(0x000fffff)) /* flow label (20 bits) */
+
+/*
+ * Extension Headers
+ */
+
+struct ip6_ext {
+ nd_uint8_t ip6e_nxt;
+ nd_uint8_t ip6e_len;
+};
+
+/* Hop-by-Hop options header */
+struct ip6_hbh {
+ nd_uint8_t ip6h_nxt; /* next header */
+ nd_uint8_t ip6h_len; /* length in units of 8 octets */
+ /* followed by options */
+};
+
+/* Destination options header */
+struct ip6_dest {
+ nd_uint8_t ip6d_nxt; /* next header */
+ nd_uint8_t ip6d_len; /* length in units of 8 octets */
+ /* followed by options */
+};
+
+/* https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml */
+
+/* Option types and related macros */
+#define IP6OPT_PAD1 0x00 /* 00 0 00000 */
+#define IP6OPT_PADN 0x01 /* 00 0 00001 */
+#define IP6OPT_JUMBO 0xC2 /* 11 0 00010 = 194 */
+#define IP6OPT_JUMBO_LEN 6
+#define IP6OPT_RPL 0x63 /* 01 1 00011 */
+#define IP6OPT_TUN_ENC_LIMIT 0x04 /* 00 0 00100 */
+#define IP6OPT_ROUTER_ALERT 0x05 /* 00 0 00101 */
+
+#define IP6OPT_RTALERT_LEN 4
+#define IP6OPT_RTALERT_MLD 0 /* Datagram contains an MLD message */
+#define IP6OPT_RTALERT_RSVP 1 /* Datagram contains an RSVP message */
+#define IP6OPT_RTALERT_ACTNET 2 /* contains an Active Networks msg */
+#define IP6OPT_MINLEN 2
+
+#define IP6OPT_QUICK_START 0x26 /* 00 1 00110 */
+#define IP6OPT_CALIPSO 0x07 /* 00 0 00111 */
+#define IP6OPT_SMF_DPD 0x08 /* 00 0 01000 */
+#define IP6OPT_HOME_ADDRESS 0xc9 /* 11 0 01001 */
+#define IP6OPT_HOMEADDR_MINLEN 18
+#define IP6OPT_EID 0x8a /* 10 0 01010 */
+#define IP6OPT_ILNP_NOTICE 0x8b /* 10 0 01011 */
+#define IP6OPT_LINE_ID 0x8c /* 10 0 01100 */
+#define IP6OPT_MPL 0x6d /* 01 1 01101 */
+#define IP6OPT_IP_DFF 0xee /* 11 1 01110 */
+
+#define IP6OPT_TYPE(o) ((o) & 0xC0)
+#define IP6OPT_TYPE_SKIP 0x00
+#define IP6OPT_TYPE_DISCARD 0x40
+#define IP6OPT_TYPE_FORCEICMP 0x80
+#define IP6OPT_TYPE_ICMP 0xC0
+
+#define IP6OPT_MUTABLE 0x20
+
+/* Routing header */
+struct ip6_rthdr {
+ nd_uint8_t ip6r_nxt; /* next header */
+ nd_uint8_t ip6r_len; /* length in units of 8 octets */
+ nd_uint8_t ip6r_type; /* routing type */
+ nd_uint8_t ip6r_segleft; /* segments left */
+ /* followed by routing type specific data */
+};
+
+#define IPV6_RTHDR_TYPE_0 0
+#define IPV6_RTHDR_TYPE_2 2
+#define IPV6_RTHDR_TYPE_4 4
+
+/* Type 0 Routing header */
+/* Also used for Type 2 */
+struct ip6_rthdr0 {
+ nd_uint8_t ip6r0_nxt; /* next header */
+ nd_uint8_t ip6r0_len; /* length in units of 8 octets */
+ nd_uint8_t ip6r0_type; /* always zero */
+ nd_uint8_t ip6r0_segleft; /* segments left */
+ nd_uint32_t ip6r0_reserved; /* reserved field */
+ nd_ipv6 ip6r0_addr[1]; /* up to 23 addresses */
+};
+
+/**
+ * Type 4 Routing header
+ * known as Segment Routing Header 'SRH'
+ */
+struct ip6_srh {
+ nd_uint8_t srh_nxt; /* next header */
+ nd_uint8_t srh_len; /* length in units of 8 octets */
+ nd_uint8_t srh_type; /* Routing Type 4 */
+ nd_uint8_t srh_segleft; /* segments left */
+ nd_uint8_t srh_last_ent; /* Last Entry*/
+ nd_uint8_t srh_flags; /* Flags */
+ nd_uint16_t srh_tag; /* Tag */
+ nd_ipv6 srh_segments[1]; /* SRH segments list*/
+};
+
+/* Fragment header */
+struct ip6_frag {
+ nd_uint8_t ip6f_nxt; /* next header */
+ nd_uint8_t ip6f_reserved; /* reserved field */
+ nd_uint16_t ip6f_offlg; /* offset, reserved, and flag */
+ nd_uint32_t ip6f_ident; /* identification */
+};
+
+#define IP6F_OFF_MASK 0xfff8 /* mask out offset from ip6f_offlg */
+#define IP6F_RESERVED_MASK 0x0006 /* reserved bits in ip6f_offlg */
+#define IP6F_MORE_FRAG 0x0001 /* more-fragments flag */
+
+#endif /* not ND_IP6_H_ */
diff --git a/ipproto.c b/ipproto.c
new file mode 100644
index 0000000..a3b0714
--- /dev/null
+++ b/ipproto.c
@@ -0,0 +1,362 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "ipproto.h"
+
+const struct tok ipproto_values[] = {
+ { IPPROTO_HOPOPTS, "Options" },
+ { IPPROTO_ICMP, "ICMP" },
+ { IPPROTO_IGMP, "IGMP" },
+ { IPPROTO_IPV4, "IPIP" },
+ { IPPROTO_TCP, "TCP" },
+ { IPPROTO_EGP, "EGP" },
+ { IPPROTO_PIGP, "IGRP" },
+ { IPPROTO_UDP, "UDP" },
+ { IPPROTO_DCCP, "DCCP" },
+ { IPPROTO_IPV6, "IPv6" },
+ { IPPROTO_ROUTING, "Routing" },
+ { IPPROTO_FRAGMENT, "Fragment" },
+ { IPPROTO_RSVP, "RSVP" },
+ { IPPROTO_GRE, "GRE" },
+ { IPPROTO_ESP, "ESP" },
+ { IPPROTO_AH, "AH" },
+ { IPPROTO_MOBILE, "Mobile IP" },
+ { IPPROTO_ICMPV6, "ICMPv6" },
+ { IPPROTO_MOBILITY_OLD, "Mobile IP (old)" },
+ { IPPROTO_EIGRP, "EIGRP" },
+ { IPPROTO_OSPF, "OSPF" },
+ { IPPROTO_PIM, "PIM" },
+ { IPPROTO_IPCOMP, "Compressed IP" },
+ { IPPROTO_VRRP, "VRRP" }, /* See also CARP. */
+ { IPPROTO_PGM, "PGM" },
+ { IPPROTO_SCTP, "SCTP" },
+ { IPPROTO_MOBILITY, "Mobility" },
+ { IPPROTO_ETHERNET, "Ethernet" },
+ { 0, NULL }
+};
+
+/*
+ * For completeness the number space in the array below comes from IANA:
+ * https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
+ * However, the spelling tries to match that of /etc/protocols to achieve as
+ * much consistency as possible with the previously implemented behaviour,
+ * which was based on getprotobynumber (3).
+ */
+static const char *netdb_protocol_names[256] = {
+ "hopopt", /* 0 (IPPROTO_HOPOPTS, IPv6 Hop-by-Hop Option) */
+ "icmp", /* 1 (IPPROTO_ICMP, Internet Control Message) */
+ "igmp", /* 2 (IPPROTO_IGMP, Internet Group Management) */
+ "ggp", /* 3 (Gateway-to-Gateway) */
+ "ipencap", /* 4 (IPPROTO_IPV4, IPv4 encapsulation) */
+ "st", /* 5 (Stream, ST datagram mode) */
+ "tcp", /* 6 (IPPROTO_TCP, Transmission Control) */
+ "cbt", /* 7 (CBT) */
+ "egp", /* 8 (IPPROTO_EGP, Exterior Gateway Protocol) */
+ "igp", /* 9 (IPPROTO_PIGP, "any private interior gateway
+ * (used by Cisco for their IGRP)")
+ */
+ "bbn-rcc-mon", /* 10 (BBN RCC Monitoring) */
+ "nvp-ii", /* 11 (Network Voice Protocol) */
+ "pup", /* 12 (PARC universal packet protocol) */
+ "argus", /* 13 (ARGUS) */
+ "emcon", /* 14 (EMCON) */
+ "xnet", /* 15 (Cross Net Debugger) */
+ "chaos", /* 16 (Chaos) */
+ "udp", /* 17 (IPPROTO_UDP, User Datagram) */
+ "mux", /* 18 (Multiplexing) */
+ "dcn-meas", /* 19 (DCN Measurement Subsystems) */
+ "hmp", /* 20 (Host Monitoring) */
+ "prm", /* 21 (Packet Radio Measurement) */
+ "xns-idp", /* 22 (XEROX NS IDP) */
+ "trunk-1", /* 23 (Trunk-1) */
+ "trunk-2", /* 24 (Trunk-2) */
+ "leaf-1", /* 25 (Leaf-1) */
+ "leaf-2", /* 26 (Leaf-2) */
+ "rdp", /* 27 (Reliable Data Protocol) */
+ "irtp", /* 28 (Internet Reliable Transaction) */
+ "iso-tp4", /* 29 (ISO Transport Protocol Class 4) */
+ "netblt", /* 30 (Bulk Data Transfer Protocol) */
+ "mfe-nsp", /* 31 (MFE Network Services Protocol) */
+ "merit-inp", /* 32 (MERIT Internodal Protocol) */
+ "dccp", /* 33 (IPPROTO_DCCP, Datagram Congestion
+ * Control Protocol)
+ */
+ "3pc", /* 34 (Third Party Connect Protocol) */
+ "idpr", /* 35 (Inter-Domain Policy Routing Protocol) */
+ "xtp", /* 36 (Xpress Transfer Protocol) */
+ "ddp", /* 37 (Datagram Delivery Protocol) */
+ "idpr-cmtp", /* 38 (IDPR Control Message Transport Proto) */
+ "tp++", /* 39 (TP++ Transport Protocol) */
+ "il", /* 40 (IL Transport Protocol) */
+ "ipv6", /* 41 (IPPROTO_IPV6, IPv6 encapsulation) */
+ "sdrp", /* 42 (Source Demand Routing Protocol) */
+ "ipv6-route", /* 43 (IPPROTO_ROUTING, Routing Header for IPv6) */
+ "ipv6-frag", /* 44 (IPPROTO_FRAGMENT, Fragment Header for
+ * IPv6)
+ */
+ "idrp", /* 45 (Inter-Domain Routing Protocol) */
+ "rsvp", /* 46 (IPPROTO_RSVP, Reservation Protocol) */
+ "gre", /* 47 (IPPROTO_GRE, Generic Routing
+ * Encapsulation)
+ */
+ "dsr", /* 48 (Dynamic Source Routing Protocol) */
+ "bna", /* 49 (BNA) */
+ "esp", /* 50 (IPPROTO_ESP, Encap Security Payload) */
+ "ah", /* 51 (IPPROTO_AH, Authentication Header) */
+ "i-nlsp", /* 52 (Integrated Net Layer Security TUBA) */
+ "swipe", /* 53 (IP with Encryption) */
+ "narp", /* 54 (NBMA Address Resolution Protocol) */
+ "mobile", /* 55 (IPPROTO_MOBILE, IP Mobility) */
+ "tlsp", /* 56 (Transport Layer Security Protocol using
+ * Kryptonet key management)
+ */
+ "skip", /* 57 (SKIP) */
+ "ipv6-icmp", /* 58 (IPPROTO_ICMPV6, ICMP for IPv6) */
+ "ipv6-nonxt", /* 59 (IPPROTO_NONE, No Next Header for IPv6) */
+ "ipv6-opts", /* 60 (IPPROTO_DSTOPTS, Destination Options for
+ * IPv6)
+ */
+ NULL, /* 61 (any host internal protocol) */
+ "cftp", /* 62 (IPPROTO_MOBILITY_OLD, CFTP, see the note
+ * in ipproto.h)
+ */
+ NULL, /* 63 (any local network) */
+ "sat-expak", /* 64 (SATNET and Backroom EXPAK) */
+ "kryptolan", /* 65 (Kryptolan) */
+ "rvd", /* 66 (MIT Remote Virtual Disk Protocol) */
+ "ippc", /* 67 (Internet Pluribus Packet Core) */
+ NULL, /* 68 (any distributed file system) */
+ "sat-mon", /* 69 (SATNET Monitoring) */
+ "visa", /* 70 (VISA Protocol) */
+ "ipcv", /* 71 (Internet Packet Core Utility) */
+ "cpnx", /* 72 (Computer Protocol Network Executive) */
+ "rspf", /* 73 (Radio Shortest Path First, CPHB -- Computer
+ * Protocol Heart Beat -- in IANA)
+ */
+ "wsn", /* 74 (Wang Span Network) */
+ "pvp", /* 75 (Packet Video Protocol) */
+ "br-sat-mon", /* 76 (Backroom SATNET Monitoring) */
+ "sun-nd", /* 77 (IPPROTO_ND, SUN ND PROTOCOL-Temporary) */
+ "wb-mon", /* 78 (WIDEBAND Monitoring) */
+ "wb-expak", /* 79 (WIDEBAND EXPAK) */
+ "iso-ip", /* 80 (ISO Internet Protocol) */
+ "vmtp", /* 81 (Versatile Message Transport) */
+ "secure-vmtp", /* 82 (Secure VMTP) */
+ "vines", /* 83 (VINES) */
+ "ttp", /* 84 (Transaction Transport Protocol, also IPTM --
+ * Internet Protocol Traffic Manager)
+ */
+ "nsfnet-igp", /* 85 (NSFNET-IGP) */
+ "dgp", /* 86 (Dissimilar Gateway Protocol) */
+ "tcf", /* 87 (TCF) */
+ "eigrp", /* 88 (IPPROTO_EIGRP, Cisco EIGRP) */
+ "ospf", /* 89 (IPPROTO_OSPF, Open Shortest Path First
+ * IGP)
+ */
+ "sprite-rpc", /* 90 (Sprite RPC Protocol) */
+ "larp", /* 91 (Locus Address Resolution Protocol) */
+ "mtp", /* 92 (Multicast Transport Protocol) */
+ "ax.25", /* 93 (AX.25 Frames) */
+ "ipip", /* 94 (IP-within-IP Encapsulation Protocol) */
+ "micp", /* 95 (Mobile Internetworking Control Pro.) */
+ "scc-sp", /* 96 (Semaphore Communications Sec. Pro.) */
+ "etherip", /* 97 (Ethernet-within-IP Encapsulation) */
+ "encap", /* 98 (Encapsulation Header) */
+ NULL, /* 99 (any private encryption scheme) */
+ "gmtp", /* 100 (GMTP) */
+ "ifmp", /* 101 (Ipsilon Flow Management Protocol) */
+ "pnni", /* 102 (PNNI over IP) */
+ "pim", /* 103 (IPPROTO_PIM, Protocol Independent
+ * Multicast)
+ */
+ "aris", /* 104 (ARIS) */
+ "scps", /* 105 (SCPS) */
+ "qnx", /* 106 (QNX) */
+ "a/n", /* 107 (Active Networks) */
+ "ipcomp", /* 108 (IPPROTO_IPCOMP, IP Payload Compression
+ * Protocol)
+ */
+ "snp", /* 109 (Sitara Networks Protocol) */
+ "compaq-peer", /* 110 (Compaq Peer Protocol) */
+ "ipx-in-ip", /* 111 (IPX in IP) */
+ "vrrp", /* 112 (IPPROTO_VRRP, Virtual Router Redundancy
+ * Protocol)
+ */
+ "pgm", /* 113 (IPPROTO_PGM, PGM Reliable Transport
+ * Protocol)
+ */
+ NULL, /* 114 (any 0-hop protocol) */
+ "l2tp", /* 115 (Layer Two Tunneling Protocol) */
+ "ddx", /* 116 (D-II Data Exchange (DDX)) */
+ "iatp", /* 117 (Interactive Agent Transfer Protocol) */
+ "stp", /* 118 (Schedule Transfer Protocol) */
+ "srp", /* 119 (SpectraLink Radio Protocol) */
+ "uti", /* 120 (UTI) */
+ "smp", /* 121 (Simple Message Protocol) */
+ "sm", /* 122 (Simple Multicast Protocol) */
+ "ptp", /* 123 (Performance Transparency Protocol) */
+ "isis", /* 124 (ISIS over IPv4) */
+ "fire", /* 125 (FIRE) */
+ "crtp", /* 126 (Combat Radio Transport Protocol) */
+ "crudp", /* 127 (Combat Radio User Datagram) */
+ "sscopmce", /* 128 (SSCOPMCE) */
+ "iplt", /* 129 (IPLT) */
+ "sps", /* 130 (Secure Packet Shield) */
+ "pipe", /* 131 (Private IP Encapsulation within IP) */
+ "sctp", /* 132 (IPPROTO_SCTP, Stream Control Transmission
+ * Protocol)
+ */
+ "fc", /* 133 (Fibre Channel) */
+ "rsvp-e2e-ignore", /* 134 (RSVP-E2E-IGNORE) */
+ "mobility-header", /* 135 (IPPROTO_MOBILITY, Mobility Header) */
+ "udplite", /* 136 (UDPLite) */
+ "mpls-in-ip", /* 137 (MPLS-in-IP) */
+ "manet", /* 138 (MANET Protocols) */
+ "hip", /* 139 (Host Identity Protocol) */
+ "shim6", /* 140 (Shim6 Protocol) */
+ "wesp", /* 141 (Wrapped Encapsulating Security Payload) */
+ "rohc", /* 142 (Robust Header Compression) */
+ NULL, /* 143 (unassigned) */
+ NULL, /* 144 (unassigned) */
+ NULL, /* 145 (unassigned) */
+ NULL, /* 146 (unassigned) */
+ NULL, /* 147 (unassigned) */
+ NULL, /* 148 (unassigned) */
+ NULL, /* 149 (unassigned) */
+ NULL, /* 150 (unassigned) */
+ NULL, /* 151 (unassigned) */
+ NULL, /* 152 (unassigned) */
+ NULL, /* 153 (unassigned) */
+ NULL, /* 154 (unassigned) */
+ NULL, /* 155 (unassigned) */
+ NULL, /* 156 (unassigned) */
+ NULL, /* 157 (unassigned) */
+ NULL, /* 158 (unassigned) */
+ NULL, /* 159 (unassigned) */
+ NULL, /* 160 (unassigned) */
+ NULL, /* 161 (unassigned) */
+ NULL, /* 162 (unassigned) */
+ NULL, /* 163 (unassigned) */
+ NULL, /* 164 (unassigned) */
+ NULL, /* 165 (unassigned) */
+ NULL, /* 166 (unassigned) */
+ NULL, /* 167 (unassigned) */
+ NULL, /* 168 (unassigned) */
+ NULL, /* 169 (unassigned) */
+ NULL, /* 170 (unassigned) */
+ NULL, /* 171 (unassigned) */
+ NULL, /* 172 (unassigned) */
+ NULL, /* 173 (unassigned) */
+ NULL, /* 174 (unassigned) */
+ NULL, /* 175 (unassigned) */
+ NULL, /* 176 (unassigned) */
+ NULL, /* 177 (unassigned) */
+ NULL, /* 178 (unassigned) */
+ NULL, /* 179 (unassigned) */
+ NULL, /* 180 (unassigned) */
+ NULL, /* 181 (unassigned) */
+ NULL, /* 182 (unassigned) */
+ NULL, /* 183 (unassigned) */
+ NULL, /* 184 (unassigned) */
+ NULL, /* 185 (unassigned) */
+ NULL, /* 186 (unassigned) */
+ NULL, /* 187 (unassigned) */
+ NULL, /* 188 (unassigned) */
+ NULL, /* 189 (unassigned) */
+ NULL, /* 190 (unassigned) */
+ NULL, /* 191 (unassigned) */
+ NULL, /* 192 (unassigned) */
+ NULL, /* 193 (unassigned) */
+ NULL, /* 194 (unassigned) */
+ NULL, /* 195 (unassigned) */
+ NULL, /* 196 (unassigned) */
+ NULL, /* 197 (unassigned) */
+ NULL, /* 198 (unassigned) */
+ NULL, /* 199 (unassigned) */
+ NULL, /* 200 (unassigned) */
+ NULL, /* 201 (unassigned) */
+ NULL, /* 202 (unassigned) */
+ NULL, /* 203 (unassigned) */
+ NULL, /* 204 (unassigned) */
+ NULL, /* 205 (unassigned) */
+ NULL, /* 206 (unassigned) */
+ NULL, /* 207 (unassigned) */
+ NULL, /* 208 (unassigned) */
+ NULL, /* 209 (unassigned) */
+ NULL, /* 210 (unassigned) */
+ NULL, /* 211 (unassigned) */
+ NULL, /* 212 (unassigned) */
+ NULL, /* 213 (unassigned) */
+ NULL, /* 214 (unassigned) */
+ NULL, /* 215 (unassigned) */
+ NULL, /* 216 (unassigned) */
+ NULL, /* 217 (unassigned) */
+ NULL, /* 218 (unassigned) */
+ NULL, /* 219 (unassigned) */
+ NULL, /* 220 (unassigned) */
+ NULL, /* 221 (unassigned) */
+ NULL, /* 222 (unassigned) */
+ NULL, /* 223 (unassigned) */
+ NULL, /* 224 (unassigned) */
+ NULL, /* 225 (unassigned) */
+ NULL, /* 226 (unassigned) */
+ NULL, /* 227 (unassigned) */
+ NULL, /* 228 (unassigned) */
+ NULL, /* 229 (unassigned) */
+ NULL, /* 230 (unassigned) */
+ NULL, /* 231 (unassigned) */
+ NULL, /* 232 (unassigned) */
+ NULL, /* 233 (unassigned) */
+ NULL, /* 234 (unassigned) */
+ NULL, /* 235 (unassigned) */
+ NULL, /* 236 (unassigned) */
+ NULL, /* 237 (unassigned) */
+ NULL, /* 238 (unassigned) */
+ NULL, /* 239 (unassigned) */
+ NULL, /* 240 (unassigned) */
+ NULL, /* 241 (unassigned) */
+ NULL, /* 242 (unassigned) */
+ NULL, /* 243 (unassigned) */
+ NULL, /* 244 (unassigned) */
+ NULL, /* 245 (unassigned) */
+ NULL, /* 246 (unassigned) */
+ NULL, /* 247 (unassigned) */
+ NULL, /* 248 (unassigned) */
+ NULL, /* 249 (unassigned) */
+ NULL, /* 250 (unassigned) */
+ NULL, /* 251 (unassigned) */
+ NULL, /* 252 (unassigned) */
+ "exptest-253", /* 253 (Use for experimentation and testing,
+ * RFC 3692)
+ */
+ "exptest-254", /* 254 (Use for experimentation and testing,
+ * RFC 3692)
+ */
+ "reserved", /* 255 (reserved) */
+};
+
+/* The function enforces the array index to be 8-bit. */
+const char *
+netdb_protoname (const uint8_t protoid)
+{
+ return netdb_protocol_names[protoid];
+}
diff --git a/ipproto.h b/ipproto.h
new file mode 100644
index 0000000..30be911
--- /dev/null
+++ b/ipproto.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 1982, 1986, 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * From:
+ * @(#)in.h 8.3 (Berkeley) 1/3/94
+ * $FreeBSD: src/sys/netinet/in.h,v 1.38.2.3 1999/08/29 16:29:34 peter Exp $
+ */
+
+extern const struct tok ipproto_values[];
+extern const char *netdb_protoname (const uint8_t);
+
+#ifndef IPPROTO_IP
+#define IPPROTO_IP 0 /* dummy for IP */
+#endif
+#ifndef IPPROTO_HOPOPTS
+#define IPPROTO_HOPOPTS 0 /* IPv6 hop-by-hop options */
+#endif
+#ifndef IPPROTO_ICMP
+#define IPPROTO_ICMP 1 /* control message protocol */
+#endif
+#ifndef IPPROTO_IGMP
+#define IPPROTO_IGMP 2 /* group mgmt protocol */
+#endif
+#ifndef IPPROTO_IPV4
+#define IPPROTO_IPV4 4
+#endif
+#ifndef IPPROTO_TCP
+#define IPPROTO_TCP 6 /* tcp */
+#endif
+#ifndef IPPROTO_EGP
+#define IPPROTO_EGP 8 /* exterior gateway protocol */
+#endif
+#ifndef IPPROTO_PIGP
+#define IPPROTO_PIGP 9
+#endif
+#ifndef IPPROTO_UDP
+#define IPPROTO_UDP 17 /* user datagram protocol */
+#endif
+#ifndef IPPROTO_DCCP
+#define IPPROTO_DCCP 33 /* datagram congestion control protocol */
+#endif
+#ifndef IPPROTO_IPV6
+#define IPPROTO_IPV6 41
+#endif
+#ifndef IPPROTO_ROUTING
+#define IPPROTO_ROUTING 43 /* IPv6 routing header */
+#endif
+#ifndef IPPROTO_FRAGMENT
+#define IPPROTO_FRAGMENT 44 /* IPv6 fragmentation header */
+#endif
+#ifndef IPPROTO_RSVP
+#define IPPROTO_RSVP 46 /* resource reservation */
+#endif
+#ifndef IPPROTO_GRE
+#define IPPROTO_GRE 47 /* General Routing Encap. */
+#endif
+#ifndef IPPROTO_ESP
+#define IPPROTO_ESP 50 /* SIPP Encap Sec. Payload */
+#endif
+#ifndef IPPROTO_AH
+#define IPPROTO_AH 51 /* SIPP Auth Header */
+#endif
+#ifndef IPPROTO_MOBILE
+#define IPPROTO_MOBILE 55
+#endif
+#ifndef IPPROTO_ICMPV6
+#define IPPROTO_ICMPV6 58 /* ICMPv6 */
+#endif
+#ifndef IPPROTO_NONE
+#define IPPROTO_NONE 59 /* IPv6 no next header */
+#endif
+#ifndef IPPROTO_DSTOPTS
+#define IPPROTO_DSTOPTS 60 /* IPv6 destination options */
+#endif
+#ifndef IPPROTO_MOBILITY_OLD
+/*
+ * The current Protocol Numbers list says that the IP protocol number for
+ * mobility headers is 135; it cites RFC 6275 (obsoletes RFC 3775).
+ *
+ * It appears that 62 used to be used, even though that's assigned to
+ * a protocol called CFTP; however, the only reference for CFTP is a
+ * Network Message from BBN back in 1982, so, for now, we support 62,
+ * as well as 135, as a protocol number for mobility headers.
+ */
+#define IPPROTO_MOBILITY_OLD 62
+#endif
+#ifndef IPPROTO_ND
+#define IPPROTO_ND 77 /* Sun net disk proto (temp.) */
+#endif
+#ifndef IPPROTO_EIGRP
+#define IPPROTO_EIGRP 88 /* Cisco/GXS IGRP */
+#endif
+#ifndef IPPROTO_OSPF
+#define IPPROTO_OSPF 89
+#endif
+#ifndef IPPROTO_PIM
+#define IPPROTO_PIM 103
+#endif
+#ifndef IPPROTO_IPCOMP
+#define IPPROTO_IPCOMP 108
+#endif
+#ifndef IPPROTO_VRRP
+#define IPPROTO_VRRP 112 /* See also CARP. */
+#endif
+#ifndef IPPROTO_PGM
+#define IPPROTO_PGM 113
+#endif
+#ifndef IPPROTO_SCTP
+#define IPPROTO_SCTP 132
+#endif
+#ifndef IPPROTO_MOBILITY
+#define IPPROTO_MOBILITY 135
+#endif
+#ifndef IPPROTO_ETHERNET
+#define IPPROTO_ETHERNET 143 /* TEMPORARY - registered 2020-01-31, expires 2021-01-31 */
+#endif
diff --git a/l2vpn.c b/l2vpn.c
new file mode 100644
index 0000000..9111cf6
--- /dev/null
+++ b/l2vpn.c
@@ -0,0 +1,95 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include "netdissect.h"
+#include "l2vpn.h"
+
+/*
+ * BGP Layer 2 Encapsulation Types
+ *
+ * RFC 6624
+ *
+ * https://www.iana.org/assignments/bgp-parameters/bgp-parameters.xhtml#bgp-l2-encapsulation-types-registry
+ */
+const struct tok l2vpn_encaps_values[] = {
+ { 0, "Reserved"},
+ { 1, "Frame Relay"},
+ { 2, "ATM AAL5 SDU VCC transport"},
+ { 3, "ATM transparent cell transport"},
+ { 4, "Ethernet (VLAN) Tagged Mode"},
+ { 5, "Ethernet Raw Mode"},
+ { 6, "Cisco HDLC"},
+ { 7, "PPP"},
+ { 8, "SONET/SDH Circuit Emulation Service over MPLS"},
+ { 9, "ATM n-to-one VCC cell transport"},
+ { 10, "ATM n-to-one VPC cell transport"},
+ { 11, "IP layer 2 transport"},
+ { 15, "Frame Relay Port mode"},
+ { 17, "Structure-agnostic E1 over packet"},
+ { 18, "Structure-agnostic T1 (DS1) over packet"},
+ { 19, "VPLS"},
+ { 20, "Structure-agnostic T3 (DS3) over packet"},
+ { 21, "Nx64kbit/s Basic Service using Structure-aware"},
+ { 25, "Frame Relay DLCI"},
+ { 40, "Structure-agnostic E3 over packet"},
+ { 41, "Octet-aligned playload for Structure-agnostic DS1 circuits"},
+ { 42, "E1 Nx64kbit/s with CAS using Structure-aware"},
+ { 43, "DS1 (ESF) Nx64kbit/s with CAS using Structure-aware"},
+ { 44, "DS1 (SF) Nx64kbit/s with CAS using Structure-aware"},
+ { 0, NULL}
+};
+
+/*
+ * MPLS Pseudowire Types
+ *
+ * RFC 4446
+ *
+ * https://www.iana.org/assignments/pwe3-parameters/pwe3-parameters.xhtml#pwe3-parameters-2
+ */
+const struct tok mpls_pw_types_values[] = {
+ { 0x0000, "Reserved"},
+ { 0x0001, "Frame Relay DLCI (Martini Mode)"},
+ { 0x0002, "ATM AAL5 SDU VCC transport"},
+ { 0x0003, "ATM transparent cell transport"},
+ { 0x0004, "Ethernet VLAN"},
+ { 0x0005, "Ethernet"},
+ { 0x0006, "Cisco-HDLC"},
+ { 0x0007, "PPP"},
+ { 0x0008, "SONET/SDH Circuit Emulation Service over MPLS"},
+ { 0x0009, "ATM n-to-one VCC cell transport"},
+ { 0x000a, "ATM n-to-one VPC cell transport"},
+ { 0x000b, "IP Layer2 Transport"},
+ { 0x000c, "ATM one-to-one VCC Cell Mode"},
+ { 0x000d, "ATM one-to-one VPC Cell Mode"},
+ { 0x000e, "ATM AAL5 PDU VCC transport"},
+ { 0x000f, "Frame-Relay Port mode"},
+ { 0x0010, "SONET/SDH Circuit Emulation over Packet"},
+ { 0x0011, "Structure-agnostic E1 over Packet"},
+ { 0x0012, "Structure-agnostic T1 (DS1) over Packet"},
+ { 0x0013, "Structure-agnostic E3 over Packet"},
+ { 0x0014, "Structure-agnostic T3 (DS3) over Packet"},
+ { 0x0015, "CESoPSN basic mode"},
+ { 0x0016, "TDMoIP basic mode"},
+ { 0x0017, "CESoPSN TDM with CAS"},
+ { 0x0018, "TDMoIP TDM with CAS"},
+ { 0x0019, "Frame Relay DLCI"},
+ { 0x0040, "IP-interworking"},
+ { 0, NULL}
+};
diff --git a/l2vpn.h b/l2vpn.h
new file mode 100644
index 0000000..98b6fcc
--- /dev/null
+++ b/l2vpn.h
@@ -0,0 +1,17 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+extern const struct tok l2vpn_encaps_values[];
+extern const struct tok mpls_pw_types_values[];
diff --git a/lbl/os-osf4.h b/lbl/os-osf4.h
new file mode 100644
index 0000000..359bf36
--- /dev/null
+++ b/lbl/os-osf4.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* Prototypes missing in Digital UNIX 4.x */
+int snprintf(char *, size_t, const char *, ...);
+int vsnprintf(char *, size_t, const char *, va_list);
diff --git a/lbl/os-solaris2.h b/lbl/os-solaris2.h
new file mode 100644
index 0000000..aedba4e
--- /dev/null
+++ b/lbl/os-solaris2.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* Prototypes missing in SunOS 5 */
+#if defined(_STDIO_H) && defined(HAVE_SETLINEBUF)
+int setlinebuf(FILE *);
+#endif
+char *strerror(int);
+int snprintf(char *, size_t, const char *, ...);
diff --git a/lbl/os-sunos4.h b/lbl/os-sunos4.h
new file mode 100644
index 0000000..0e63270
--- /dev/null
+++ b/lbl/os-sunos4.h
@@ -0,0 +1,211 @@
+/*
+ * Copyright (c) 1989, 1990, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* Prototypes missing in SunOS 4 */
+#ifdef FILE
+int _filbuf(FILE *);
+int _flsbuf(u_char, FILE *);
+int fclose(FILE *);
+int fflush(FILE *);
+int fgetc(FILE *);
+int fprintf(FILE *, const char *, ...);
+int fputc(int, FILE *);
+int fputs(const char *, FILE *);
+u_int fread(void *, u_int, u_int, FILE *);
+int fseek(FILE *, long, int);
+u_int fwrite(const void *, u_int, u_int, FILE *);
+int pclose(FILE *);
+void rewind(FILE *);
+void setbuf(FILE *, char *);
+int setlinebuf(FILE *);
+int ungetc(int, FILE *);
+int vfprintf(FILE *, const char *, ...);
+int vprintf(const char *, ...);
+#endif
+
+#if __GNUC__ <= 1
+int read(int, char *, u_int);
+int write(int, char *, u_int);
+#endif
+
+long a64l(const char *);
+#ifdef __STDC__
+struct sockaddr;
+#endif
+int accept(int, struct sockaddr *, int *);
+int bind(int, struct sockaddr *, int);
+int bcmp(const void *, const void *, u_int);
+void bcopy(const void *, void *, u_int);
+void bzero(void *, int);
+int chroot(const char *);
+int close(int);
+void closelog(void);
+int connect(int, struct sockaddr *, int);
+char *crypt(const char *, const char *);
+int daemon(int, int);
+int fchmod(int, int);
+int fchown(int, int, int);
+void endgrent(void);
+void endpwent(void);
+void endservent(void);
+#ifdef __STDC__
+struct ether_addr;
+#endif
+struct ether_addr *ether_aton(const char *);
+int flock(int, int);
+#ifdef __STDC__
+struct stat;
+#endif
+int fstat(int, struct stat *);
+#ifdef __STDC__
+struct statfs;
+#endif
+int fstatfs(int, struct statfs *);
+int fsync(int);
+#ifdef __STDC__
+struct timeb;
+#endif
+int ftime(struct timeb *);
+int ftruncate(int, off_t);
+int getdtablesize(void);
+long gethostid(void);
+int gethostname(char *, int);
+int getopt(int, char * const *, const char *);
+int getpagesize(void);
+char *getpass(char *);
+int getpeername(int, struct sockaddr *, int *);
+int getpriority(int, int);
+#ifdef __STDC__
+struct rlimit;
+#endif
+int getrlimit(int, struct rlimit *);
+int getsockname(int, struct sockaddr *, int *);
+int getsockopt(int, int, int, char *, int *);
+#ifdef __STDC__
+struct timeval;
+struct timezone;
+#endif
+int gettimeofday(struct timeval *, struct timezone *);
+char *getusershell(void);
+char *getwd(char *);
+int initgroups(const char *, int);
+int ioctl(int, int, caddr_t);
+int iruserok(u_long, int, char *, char *);
+int isatty(int);
+int killpg(int, int);
+int listen(int, int);
+#ifdef __STDC__
+struct utmp;
+#endif
+void login(struct utmp *);
+int logout(const char *);
+off_t lseek(int, off_t, int);
+int lstat(const char *, struct stat *);
+int mkstemp(char *);
+char *mktemp(char *);
+int munmap(caddr_t, int);
+void openlog(const char *, int, int);
+void perror(const char *);
+int printf(const char *, ...);
+int puts(const char *);
+long random(void);
+int readlink(const char *, char *, int);
+#ifdef __STDC__
+struct iovec;
+#endif
+int readv(int, struct iovec *, int);
+int recv(int, char *, u_int, int);
+int recvfrom(int, char *, u_int, int, struct sockaddr *, int *);
+int rename(const char *, const char *);
+int rcmd(char **, u_short, char *, char *, char *, int *);
+int rresvport(int *);
+int send(int, char *, u_int, int);
+int sendto(int, char *, u_int, int, struct sockaddr *, int);
+int setenv(const char *, const char *, int);
+int seteuid(int);
+int setpriority(int, int, int);
+int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+int setpgrp(int, int);
+void setpwent(void);
+int setrlimit(int, struct rlimit *);
+void setservent(int);
+int setsockopt(int, int, int, char *, int);
+int shutdown(int, int);
+int sigblock(int);
+void (*signal (int, void (*) (int))) (int);
+int sigpause(int);
+int sigsetmask(int);
+#ifdef __STDC__
+struct sigvec;
+#endif
+int sigvec(int, struct sigvec *, struct sigvec*);
+int snprintf(char *, size_t, const char *, ...);
+int socket(int, int, int);
+int socketpair(int, int, int, int *);
+int symlink(const char *, const char *);
+void srandom(int);
+int sscanf(char *, const char *, ...);
+int stat(const char *, struct stat *);
+int statfs(char *, struct statfs *);
+char *strerror(int);
+#ifdef __STDC__
+struct tm;
+#endif
+int strftime(char *, int, char *, struct tm *);
+long strtol(const char *, char **, int);
+void sync(void);
+void syslog(int, const char *, ...);
+int system(const char *);
+long tell(int);
+time_t time(time_t *);
+char *timezone(int, int);
+int tolower(int);
+int toupper(int);
+int truncate(char *, off_t);
+void unsetenv(const char *);
+int vfork(void);
+int vsprintf(char *, const char *, ...);
+int writev(int, struct iovec *, int);
+#ifdef __STDC__
+struct rusage;
+#endif
+int utimes(const char *, struct timeval *);
+#if __GNUC__ <= 1
+int wait(int *);
+pid_t wait3(int *, int, struct rusage *);
+#endif
+
+/* Ugly signal hacking */
+#ifdef SIG_ERR
+#undef SIG_ERR
+#define SIG_ERR (void (*)(int))-1
+#undef SIG_DFL
+#define SIG_DFL (void (*)(int))0
+#undef SIG_IGN
+#define SIG_IGN (void (*)(int))1
+
+#ifdef KERNEL
+#undef SIG_CATCH
+#define SIG_CATCH (void (*)(int))2
+#endif
+#undef SIG_HOLD
+#define SIG_HOLD (void (*)(int))3
+#endif
diff --git a/lbl/os-ultrix4.h b/lbl/os-ultrix4.h
new file mode 100644
index 0000000..891def2
--- /dev/null
+++ b/lbl/os-ultrix4.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 1990, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* Prototypes missing in Ultrix 4 */
+int bcmp(const char *, const char *, u_int);
+void bcopy(const void *, void *, u_int);
+void bzero(void *, u_int);
+void endservent(void);
+int getopt(int, char * const *, const char *);
+#ifdef __STDC__
+struct timeval;
+struct timezone;
+#endif
+int gettimeofday(struct timeval *, struct timezone *);
+int ioctl(int, int, caddr_t);
+int pfopen(char *, int);
+int setlinebuf(FILE *);
+int socket(int, int, int);
diff --git a/llc.h b/llc.h
new file mode 100644
index 0000000..ec8d069
--- /dev/null
+++ b/llc.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 1993, 1994, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/*
+ * Definitions for information in the LLC header.
+ */
+
+#define LLC_U_FMT 3
+#define LLC_GSAP 1
+#define LLC_IG 1 /* Individual / Group */
+#define LLC_S_FMT 1
+
+#define LLC_U_POLL 0x10
+#define LLC_IS_POLL 0x0100
+#define LLC_XID_FI 0x81
+
+#define LLC_U_CMD(u) ((u) & 0xef)
+#define LLC_UI 0x03
+#define LLC_UA 0x63
+#define LLC_DISC 0x43
+#define LLC_DM 0x0f
+#define LLC_SABME 0x6f
+#define LLC_TEST 0xe3
+#define LLC_XID 0xaf
+#define LLC_FRMR 0x87
+
+#define LLC_S_CMD(is) (((is) >> 2) & 0x03)
+#define LLC_RR 0x0001
+#define LLC_RNR 0x0005
+#define LLC_REJ 0x0009
+
+#define LLC_IS_NR(is) (((is) >> 9) & 0x7f)
+#define LLC_I_NS(is) (((is) >> 1) & 0x7f)
+
+#ifndef LLCSAP_NULL
+#define LLCSAP_NULL 0x00
+#endif
+#ifndef LLCSAP_GLOBAL
+#define LLCSAP_GLOBAL 0xff
+#endif
+#ifndef LLCSAP_8021B_I
+#define LLCSAP_8021B_I 0x02
+#endif
+#ifndef LLCSAP_8021B_G
+#define LLCSAP_8021B_G 0x03
+#endif
+#ifndef LLCSAP_SNA
+#define LLCSAP_SNA 0x04
+#endif
+#ifndef LLCSAP_IP
+#define LLCSAP_IP 0x06
+#endif
+#ifndef LLCSAP_PROWAYNM
+#define LLCSAP_PROWAYNM 0x0e
+#endif
+#ifndef LLCSAP_8021D
+#define LLCSAP_8021D 0x42
+#endif
+#ifndef LLCSAP_RS511
+#define LLCSAP_RS511 0x4e
+#endif
+#ifndef LLCSAP_ISO8208
+#define LLCSAP_ISO8208 0x7e
+#endif
+#ifndef LLCSAP_PROWAY
+#define LLCSAP_PROWAY 0x8e
+#endif
+#ifndef LLCSAP_SNAP
+#define LLCSAP_SNAP 0xaa
+#endif
+#ifndef LLCSAP_IPX
+#define LLCSAP_IPX 0xe0
+#endif
+#ifndef LLCSAP_NETBEUI
+#define LLCSAP_NETBEUI 0xf0
+#endif
+#ifndef LLCSAP_ISONS
+#define LLCSAP_ISONS 0xfe
+#endif
+
+/*
+ * PIDs for use with OUI_CISCO.
+ */
+#define PID_CISCO_CDP 0x2000 /* Cisco Discovery Protocol */
+#define PID_CISCO_VTP 0x2003 /* Cisco VLAN Trunk Protocol */
+#define PID_CISCO_DTP 0x2004 /* Cisco Dynamic Trunk Protocol */
+#define PID_CISCO_UDLD 0x0111 /* Unidirectional Link Detection */
+#define PID_CISCO_PVST 0x010b /* Per VLAN Spanning Tree+ and RPVST+ */
+#define PID_CISCO_VLANBRIDGE 0x010c /* "VLAN Bridge", according to Wireshark */
+
+/*
+ * PIDs for use with OUI_RFC2684.
+ */
+#define PID_RFC2684_ETH_FCS 0x0001 /* Ethernet, with FCS */
+#define PID_RFC2684_ETH_NOFCS 0x0007 /* Ethernet, without FCS */
+#define PID_RFC2684_802_4_FCS 0x0002 /* 802.4, with FCS */
+#define PID_RFC2684_802_4_NOFCS 0x0008 /* 802.4, without FCS */
+#define PID_RFC2684_802_5_FCS 0x0003 /* 802.5, with FCS */
+#define PID_RFC2684_802_5_NOFCS 0x0009 /* 802.5, without FCS */
+#define PID_RFC2684_FDDI_FCS 0x0004 /* FDDI, with FCS */
+#define PID_RFC2684_FDDI_NOFCS 0x000a /* FDDI, without FCS */
+#define PID_RFC2684_802_6_FCS 0x0005 /* 802.6, with FCS */
+#define PID_RFC2684_802_6_NOFCS 0x000b /* 802.6, without FCS */
+#define PID_RFC2684_BPDU 0x000e /* BPDUs */
diff --git a/machdep.c b/machdep.c
new file mode 100644
index 0000000..2578b73
--- /dev/null
+++ b/machdep.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stddef.h>
+
+#ifdef __osf__
+#include <stdio.h>
+#include <sys/sysinfo.h>
+#include <sys/proc.h>
+#endif /* __osf__ */
+
+#include "varattrs.h"
+#include "machdep.h"
+
+/*
+ * On platforms where the CPU doesn't support unaligned loads, force
+ * unaligned accesses to abort with SIGBUS, rather than being fixed
+ * up (slowly) by the OS kernel; on those platforms, misaligned accesses
+ * are bugs, and we want tcpdump to crash so that the bugs are reported.
+ *
+ * The only OS on which this is necessary is DEC OSF/1^W^WDigital
+ * UNIX^W^WTru64 UNIX.
+ */
+int
+abort_on_misalignment(char *ebuf _U_, size_t ebufsiz _U_)
+{
+#ifdef __osf__
+ static int buf[2] = { SSIN_UACPROC, UAC_SIGBUS };
+
+ if (setsysinfo(SSI_NVPAIRS, (caddr_t)buf, 1, 0, 0) < 0) {
+ (void)snprintf(ebuf, ebufsiz, "setsysinfo: errno %d", errno);
+ return (-1);
+ }
+#endif
+ return (0);
+}
diff --git a/machdep.h b/machdep.h
new file mode 100644
index 0000000..ba8ed38
--- /dev/null
+++ b/machdep.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+#ifndef netdissect_machdep_h
+#define netdissect_machdep_h
+
+int abort_on_misalignment(char *, size_t);
+#endif
diff --git a/makemib b/makemib
new file mode 100755
index 0000000..97e7875
--- /dev/null
+++ b/makemib
@@ -0,0 +1,247 @@
+#!/bin/sh
+#
+# Copyright (c) 1990, 1996
+# John Robert LoVerso. All rights reserved.
+# SMIv2 parsing copyright (c) 1999
+# William C. Fenner.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notices, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notices, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#
+# This script will read either ASN.1-style MIB files or the ".defs" files
+# created by the ISODE "mosy" program on such files.
+#
+# The output of this script is the "mib.h" file used by tcpdumps' ASN.1/SNMP
+# decoding code.
+#
+# This script needs to be run by "gawk" (GNU awk). "nawk" will work, but
+# dump will get a recursion error if you process LARGE mibs. While it would
+# by farily easy to rewrite this not to use recursion (and also easy to
+# eliminate use of gsub and functions to use classic "awk"), you have to
+# order the structure declarations in defined-first order for the compiler
+# not to barf; too bad tsort doesn't take arguments.
+#
+
+cat << EOF
+/*
+ * This file was generated by tcpdump/makemib on `date`
+ * You probably don't want to edit this by hand!
+ *
+ * struct mib somename = { desc, oid-octet, type, child-pointer, next-pointer
+};
+ */
+
+EOF
+
+awk '
+BEGIN {
+ debug=0;
+ # for sanity, we prep the namespace with objects from RFC-1155
+ # (we manually establish the root)
+ oid["iso"]=1
+ oidadd("org", "iso", 3)
+ oidadd("dod", "org", 6)
+ oidadd("internet", "dod", 1)
+ oidadd("directory", "internet", 1)
+ oidadd("mgmt", "internet", 2)
+#XXX oidadd("mib", "mgmt", 1)
+ oidadd("mib-2", "mgmt", 1)
+ oidadd("experimental", "internet", 3)
+ oidadd("private", "internet", 4)
+ oidadd("enterprises", "private", 1)
+ oidadd("ip", "mib-2", 4)
+ oidadd("transmission", "mib-2", 10)
+
+ holddesc="none"
+}
+
+#
+# Read mosy "*.defs" file. mosy does all the parsing work; we just read
+# its simple and straightforward output. It would not be too hard to make
+# tcpdump directly read mosy output, but...
+#
+# Ignore these unless the current file is called something.defs; false
+# positives are too common in DESCRIPTIONs.
+
+NF > 1 && index($2,".")>0 && FILENAME ~ /\.defs/ {
+ # currently ignore items of the form "{ iso.3.6.1 }"
+ if (split($2, p, ".") == 2) {
+ oidadd($1, p[1], p[2])
+ }
+ next
+}
+
+#
+# Must be a MIB file
+# Make it easier to parse - used to be done by sed
+{ sub(/--\*.*\*--/, ""); sub(/--.*/, ""); gsub(/[{}]/, " & "); }
+
+#
+# this next section is simple and naive, but does the job ok
+#
+
+# foo OBJECT IDENTIFIER ::= { baz 17 }
+# or
+# foo OBJECT IDENTIFIER ::=
+# { baz 17 }
+$2$3$4 == "OBJECTIDENTIFIER::=" {
+ holddesc="none"
+ if (NF == 8)
+ oidadd($1, $6, $7)
+ if (NF == 4)
+ holddesc=$1
+ next
+}
+$1 == "{" && holddesc != "none" && NF == 4 {
+ oidadd(holddesc, $2, $3)
+ holddesc="none"
+}
+#
+# foo OBJECT IDENTIFIER
+# ::= { bar 1 }
+$2$3 == "OBJECTIDENTIFIER" && $1 != "SYNTAX" && NF == 3 {
+ holddesc=$1
+}
+#
+# foo
+# OBJECT IDENTIFIER ::= { bar 1 }
+# a couple of heuristics to exclude single words in e.g. long
+# DESCRIPTION clauses
+NF == 1 && $1 ~ "[a-z][a-z]*[A-Z]" && $1 !~ /[(){}.,]/ && holddesc == "none" {
+ holddesc=$1
+}
+$1$2$3 == "OBJECTIDENTIFIER::=" && holddesc != "none" {
+ oidadd(holddesc, $5, $6)
+ holddesc="none"
+}
+#
+# "normal" style
+# foo OBJECT-TYPE ...
+# ...
+# ::= { baz 5 }
+$2 == "MODULE-IDENTITY" || $2 == "MODULE-COMPLIANCE" ||
+ $2 == "OBJECT-IDENTITY" || $2 == "OBJECT-TYPE" ||
+ $2 == "OBJECT-GROUP" ||
+ $2 == "NOTIFICATION-TYPE" || $2 == "NOTIFICATION-GROUP" {
+ holddesc=$1
+}
+$1 == "::=" && holddesc != "none" && NF == 5 {
+ oidadd(holddesc, $3, $4)
+ holddesc="none"
+}
+#
+# foo ::= { baz 17 }
+$2$3 == "::={" {
+ oidadd($1,$4,$5)
+ holddesc="none"
+}
+
+
+#
+# End of the road - output the data.
+#
+
+END {
+ print "struct obj"
+ dump("iso")
+ print "*mibroot = &_iso_obj;"
+}
+
+function inn(file) {
+ if (file == "" || file == "-")
+ return ""
+ return " in " file
+}
+
+#
+# add a new object to the tree
+#
+# new OBJECT IDENTIFIER ::= { parent value }
+#
+
+function oidadd(new, parent, value) {
+ # Ignore 0.0
+ if (parent == "0" && value == 0)
+ return
+ if (debug)
+ print "/* oidadd" inn(FILENAME) ":", new, "in", parent, "as", value, "line", $0, "*/"
+ # use safe C identifiers
+ gsub(/[-&\/]/,"",new)
+ gsub(/[-&\/]/,"",parent)
+ # check if parent missing
+ if (oid[parent] == "") {
+ printf "/* parse problem%s: no parent for %s.%s(%d) */\n", \
+ inn(FILENAME), parent, new, value
+ return
+ }
+ # check if parent.value already exists
+ if (oid[new] > 0 && oid[new] != value) {
+ printf "/* parse problem%s: dup %s.%s(%d) != old (%d) */\n", \
+ inn(FILENAME), parent, new, value, oid[new]
+ return
+ }
+ # check for new name for parent.value
+ if (child[parent] != "") {
+ for (sib = child[parent]; sib != ""; sib = sibling[sib])
+ if (oid[sib] == value) {
+ if (new != sib)
+ printf "/* parse problem%s: new name" \
+ " \"%s\"" \
+ " for %s.%s(%d) ignored */\n", \
+ inn(FILENAME), new, parent, \
+ sib, value
+ return
+ }
+ }
+
+ oid[new]=value
+ if (child[parent] == "") {
+ child[parent] = new
+ } else {
+ sibling[new] = child[parent]
+ child[parent] = new
+ }
+}
+
+#
+# old(?) routine to recurse down the tree (in postfix order for convenience)
+#
+
+function dump(item, c, s) {
+# newitem=sofar"."item"("oid[item]")"
+# printf "/* %s c=%s s=%s */\n", newitem, child[item], sibling[item]
+ c="NULL"
+ if (child[item] != "") {
+ dump(child[item])
+ c = "&_"child[item]"_obj"
+ }
+ s="NULL"
+ if (sibling[item] != "") {
+ dump(sibling[item])
+ s = "&_"sibling[item]"_obj"
+ }
+ printf "_%s_obj = {\n\t\"%s\", %d, 0,\n\t%s, %s\n},\n", \
+ item, item, oid[item], c, s
+}
+' $@
+exit 0
diff --git a/mib.h b/mib.h
new file mode 100644
index 0000000..6c8e63c
--- /dev/null
+++ b/mib.h
@@ -0,0 +1,1460 @@
+/*
+ * This file was generated by tcpdump/makemib on Wed Sep 26 12:12:31 EDT 1990
+ * You probably don't want to edit this by hand!
+ *
+ * struct mib somename = { desc, oid-octet, type, child-pointer, next-pointer
+};
+ */
+
+/* parse problem: new name "mib" for mgmt.mib(1) ignored */
+/* parse problem: no parent for 0.nullSpecific(0) */
+static struct obj
+_proteon_obj = {
+ "proteon", 1, 0,
+ NULL, NULL
+},
+_ibm_obj = {
+ "ibm", 2, 0,
+ NULL, &_proteon_obj
+},
+_cmu_obj = {
+ "cmu", 3, 0,
+ NULL, &_ibm_obj
+},
+_unix_obj = {
+ "unix", 4, 0,
+ NULL, &_cmu_obj
+},
+_acc_obj = {
+ "acc", 5, 0,
+ NULL, &_unix_obj
+},
+_twg_obj = {
+ "twg", 6, 0,
+ NULL, &_acc_obj
+},
+_cayman_obj = {
+ "cayman", 7, 0,
+ NULL, &_twg_obj
+},
+_nysernet_obj = {
+ "nysernet", 8, 0,
+ NULL, &_cayman_obj
+},
+_cisco_obj = {
+ "cisco", 9, 0,
+ NULL, &_nysernet_obj
+},
+_nsc_obj = {
+ "nsc", 10, 0,
+ NULL, &_cisco_obj
+},
+_hp_obj = {
+ "hp", 11, 0,
+ NULL, &_nsc_obj
+},
+_epilogue_obj = {
+ "epilogue", 12, 0,
+ NULL, &_hp_obj
+},
+_utennessee_obj = {
+ "utennessee", 13, 0,
+ NULL, &_epilogue_obj
+},
+_bbn_obj = {
+ "bbn", 14, 0,
+ NULL, &_utennessee_obj
+},
+_xylogics_obj = {
+ "xylogics", 15, 0,
+ NULL, &_bbn_obj
+},
+_unisys_obj = {
+ "unisys", 16, 0,
+ NULL, &_xylogics_obj
+},
+_canstar_obj = {
+ "canstar", 17, 0,
+ NULL, &_unisys_obj
+},
+_wellfleet_obj = {
+ "wellfleet", 18, 0,
+ NULL, &_canstar_obj
+},
+_trw_obj = {
+ "trw", 19, 0,
+ NULL, &_wellfleet_obj
+},
+_mit_obj = {
+ "mit", 20, 0,
+ NULL, &_trw_obj
+},
+_eon_obj = {
+ "eon", 21, 0,
+ NULL, &_mit_obj
+},
+_spartacus_obj = {
+ "spartacus", 22, 0,
+ NULL, &_eon_obj
+},
+_excelan_obj = {
+ "excelan", 23, 0,
+ NULL, &_spartacus_obj
+},
+_spider_obj = {
+ "spider", 24, 0,
+ NULL, &_excelan_obj
+},
+_nsfnet_obj = {
+ "nsfnet", 25, 0,
+ NULL, &_spider_obj
+},
+_sytek_obj = {
+ "sytek", 26, 0,
+ NULL, &_nsfnet_obj
+},
+_intergraph_obj = {
+ "intergraph", 27, 0,
+ NULL, &_sytek_obj
+},
+_interlan_obj = {
+ "interlan", 28, 0,
+ NULL, &_intergraph_obj
+},
+_vitalink_obj = {
+ "vitalink", 29, 0,
+ NULL, &_interlan_obj
+},
+_ulana_obj = {
+ "ulana", 30, 0,
+ NULL, &_vitalink_obj
+},
+_nswc_obj = {
+ "nswc", 31, 0,
+ NULL, &_ulana_obj
+},
+_santacruzoperation_obj = {
+ "santacruzoperation", 32, 0,
+ NULL, &_nswc_obj
+},
+_xyplex_obj = {
+ "xyplex", 33, 0,
+ NULL, &_santacruzoperation_obj
+},
+_cray_obj = {
+ "cray", 34, 0,
+ NULL, &_xyplex_obj
+},
+_bellnorthernresearch_obj = {
+ "bellnorthernresearch", 35, 0,
+ NULL, &_cray_obj
+},
+_dec_obj = {
+ "dec", 36, 0,
+ NULL, &_bellnorthernresearch_obj
+},
+_touch_obj = {
+ "touch", 37, 0,
+ NULL, &_dec_obj
+},
+_networkresearchcorp_obj = {
+ "networkresearchcorp", 38, 0,
+ NULL, &_touch_obj
+},
+_baylor_obj = {
+ "baylor", 39, 0,
+ NULL, &_networkresearchcorp_obj
+},
+_nmfeccllnl_obj = {
+ "nmfeccllnl", 40, 0,
+ NULL, &_baylor_obj
+},
+_sri_obj = {
+ "sri", 41, 0,
+ NULL, &_nmfeccllnl_obj
+},
+_sun_obj = {
+ "sun", 42, 0,
+ NULL, &_sri_obj
+},
+_3com_obj = {
+ "3com", 43, 0,
+ NULL, &_sun_obj
+},
+_cmc_obj = {
+ "cmc", 44, 0,
+ NULL, &_3com_obj
+},
+_synoptics_obj = {
+ "synoptics", 45, 0,
+ NULL, &_cmc_obj
+},
+_cheyenne_obj = {
+ "cheyenne", 46, 0,
+ NULL, &_synoptics_obj
+},
+_prime_obj = {
+ "prime", 47, 0,
+ NULL, &_cheyenne_obj
+},
+_mcnc_obj = {
+ "mcnc", 48, 0,
+ NULL, &_prime_obj
+},
+_chipcom_obj = {
+ "chipcom", 49, 0,
+ NULL, &_mcnc_obj
+},
+_opticaldatasystems_obj = {
+ "opticaldatasystems", 50, 0,
+ NULL, &_chipcom_obj
+},
+_gated_obj = {
+ "gated", 51, 0,
+ NULL, &_opticaldatasystems_obj
+},
+_cabletron_obj = {
+ "cabletron", 52, 0,
+ NULL, &_gated_obj
+},
+_apollo_obj = {
+ "apollo", 53, 0,
+ NULL, &_cabletron_obj
+},
+_desktalksystems_obj = {
+ "desktalksystems", 54, 0,
+ NULL, &_apollo_obj
+},
+_ssds_obj = {
+ "ssds", 55, 0,
+ NULL, &_desktalksystems_obj
+},
+_castlerock_obj = {
+ "castlerock", 56, 0,
+ NULL, &_ssds_obj
+},
+_mips_obj = {
+ "mips", 57, 0,
+ NULL, &_castlerock_obj
+},
+_tgv_obj = {
+ "tgv", 58, 0,
+ NULL, &_mips_obj
+},
+_silicongraphics_obj = {
+ "silicongraphics", 59, 0,
+ NULL, &_tgv_obj
+},
+_ubc_obj = {
+ "ubc", 60, 0,
+ NULL, &_silicongraphics_obj
+},
+_merit_obj = {
+ "merit", 61, 0,
+ NULL, &_ubc_obj
+},
+_fibercom_obj = {
+ "fibercom", 62, 0,
+ NULL, &_merit_obj
+},
+_apple_obj = {
+ "apple", 63, 0,
+ NULL, &_fibercom_obj
+},
+_gandalf_obj = {
+ "gandalf", 64, 0,
+ NULL, &_apple_obj
+},
+_dartmouth_obj = {
+ "dartmouth", 65, 0,
+ NULL, &_gandalf_obj
+},
+_davidsystems_obj = {
+ "davidsystems", 66, 0,
+ NULL, &_dartmouth_obj
+},
+_reuter_obj = {
+ "reuter", 67, 0,
+ NULL, &_davidsystems_obj
+},
+_cornell_obj = {
+ "cornell", 68, 0,
+ NULL, &_reuter_obj
+},
+_tmac_obj = {
+ "tmac", 69, 0,
+ NULL, &_cornell_obj
+},
+_locus_obj = {
+ "locus", 70, 0,
+ NULL, &_tmac_obj
+},
+_nasa_obj = {
+ "nasa", 71, 0,
+ NULL, &_locus_obj
+},
+_retix_obj = {
+ "retix", 72, 0,
+ NULL, &_nasa_obj
+},
+_boeing_obj = {
+ "boeing", 73, 0,
+ NULL, &_retix_obj
+},
+_att_obj = {
+ "att", 74, 0,
+ NULL, &_boeing_obj
+},
+_ungermannbass_obj = {
+ "ungermannbass", 75, 0,
+ NULL, &_att_obj
+},
+_digitalanalysis_obj = {
+ "digitalanalysis", 76, 0,
+ NULL, &_ungermannbass_obj
+},
+_hplanman_obj = {
+ "hplanman", 77, 0,
+ NULL, &_digitalanalysis_obj
+},
+_netlabs_obj = {
+ "netlabs", 78, 0,
+ NULL, &_hplanman_obj
+},
+_icl_obj = {
+ "icl", 79, 0,
+ NULL, &_netlabs_obj
+},
+_auspex_obj = {
+ "auspex", 80, 0,
+ NULL, &_icl_obj
+},
+_lannet_obj = {
+ "lannet", 81, 0,
+ NULL, &_auspex_obj
+},
+_ncd_obj = {
+ "ncd", 82, 0,
+ NULL, &_lannet_obj
+},
+_raycom_obj = {
+ "raycom", 83, 0,
+ NULL, &_ncd_obj
+},
+_pirellifocom_obj = {
+ "pirellifocom", 84, 0,
+ NULL, &_raycom_obj
+},
+_datability_obj = {
+ "datability", 85, 0,
+ NULL, &_pirellifocom_obj
+},
+_networkappltech_obj = {
+ "networkappltech", 86, 0,
+ NULL, &_datability_obj
+},
+_link_obj = {
+ "link", 87, 0,
+ NULL, &_networkappltech_obj
+},
+_nyu_obj = {
+ "nyu", 88, 0,
+ NULL, &_link_obj
+},
+_rnd_obj = {
+ "rnd", 89, 0,
+ NULL, &_nyu_obj
+},
+_intercon_obj = {
+ "intercon", 90, 0,
+ NULL, &_rnd_obj
+},
+_learningtree_obj = {
+ "learningtree", 91, 0,
+ NULL, &_intercon_obj
+},
+_webstercomputer_obj = {
+ "webstercomputer", 92, 0,
+ NULL, &_learningtree_obj
+},
+_frontier_obj = {
+ "frontier", 93, 0,
+ NULL, &_webstercomputer_obj
+},
+_nokia_obj = {
+ "nokia", 94, 0,
+ NULL, &_frontier_obj
+},
+_allenbradley_obj = {
+ "allenbradley", 95, 0,
+ NULL, &_nokia_obj
+},
+_cern_obj = {
+ "cern", 96, 0,
+ NULL, &_allenbradley_obj
+},
+_sigma_obj = {
+ "sigma", 97, 0,
+ NULL, &_cern_obj
+},
+_emergingtech_obj = {
+ "emergingtech", 98, 0,
+ NULL, &_sigma_obj
+},
+_snmpresearch_obj = {
+ "snmpresearch", 99, 0,
+ NULL, &_emergingtech_obj
+},
+_ohiostate_obj = {
+ "ohiostate", 100, 0,
+ NULL, &_snmpresearch_obj
+},
+_ultra_obj = {
+ "ultra", 101, 0,
+ NULL, &_ohiostate_obj
+},
+_ccur_obj = {
+ "ccur", 136, 0,
+ NULL, &_ultra_obj
+},
+_enterprises_obj = {
+ "enterprises", 1, 0,
+ &_ccur_obj, NULL
+},
+_snmpInPkts_obj = {
+ "snmpInPkts", 1, 0,
+ NULL, NULL
+},
+_snmpOutPkts_obj = {
+ "snmpOutPkts", 2, 0,
+ NULL, &_snmpInPkts_obj
+},
+_snmpInBadVersions_obj = {
+ "snmpInBadVersions", 3, 0,
+ NULL, &_snmpOutPkts_obj
+},
+_snmpInBadCommunityNames_obj = {
+ "snmpInBadCommunityNames", 4, 0,
+ NULL, &_snmpInBadVersions_obj
+},
+_snmpInBadCommunityUses_obj = {
+ "snmpInBadCommunityUses", 5, 0,
+ NULL, &_snmpInBadCommunityNames_obj
+},
+_snmpInASNParseErrs_obj = {
+ "snmpInASNParseErrs", 6, 0,
+ NULL, &_snmpInBadCommunityUses_obj
+},
+_snmpInBadTypes_obj = {
+ "snmpInBadTypes", 7, 0,
+ NULL, &_snmpInASNParseErrs_obj
+},
+_snmpInTooBigs_obj = {
+ "snmpInTooBigs", 8, 0,
+ NULL, &_snmpInBadTypes_obj
+},
+_snmpInNoSuchNames_obj = {
+ "snmpInNoSuchNames", 9, 0,
+ NULL, &_snmpInTooBigs_obj
+},
+_snmpInBadValues_obj = {
+ "snmpInBadValues", 10, 0,
+ NULL, &_snmpInNoSuchNames_obj
+},
+_snmpInReadOnlys_obj = {
+ "snmpInReadOnlys", 11, 0,
+ NULL, &_snmpInBadValues_obj
+},
+_snmpInGenErrs_obj = {
+ "snmpInGenErrs", 12, 0,
+ NULL, &_snmpInReadOnlys_obj
+},
+_snmpInTotalReqVars_obj = {
+ "snmpInTotalReqVars", 13, 0,
+ NULL, &_snmpInGenErrs_obj
+},
+_snmpInTotalSetVars_obj = {
+ "snmpInTotalSetVars", 14, 0,
+ NULL, &_snmpInTotalReqVars_obj
+},
+_snmpInGetRequests_obj = {
+ "snmpInGetRequests", 15, 0,
+ NULL, &_snmpInTotalSetVars_obj
+},
+_snmpInGetNexts_obj = {
+ "snmpInGetNexts", 16, 0,
+ NULL, &_snmpInGetRequests_obj
+},
+_snmpInSetRequests_obj = {
+ "snmpInSetRequests", 17, 0,
+ NULL, &_snmpInGetNexts_obj
+},
+_snmpInGetResponses_obj = {
+ "snmpInGetResponses", 18, 0,
+ NULL, &_snmpInSetRequests_obj
+},
+_snmpInTraps_obj = {
+ "snmpInTraps", 19, 0,
+ NULL, &_snmpInGetResponses_obj
+},
+_snmpOutTooBigs_obj = {
+ "snmpOutTooBigs", 20, 0,
+ NULL, &_snmpInTraps_obj
+},
+_snmpOutNoSuchNames_obj = {
+ "snmpOutNoSuchNames", 21, 0,
+ NULL, &_snmpOutTooBigs_obj
+},
+_snmpOutBadValues_obj = {
+ "snmpOutBadValues", 22, 0,
+ NULL, &_snmpOutNoSuchNames_obj
+},
+_snmpOutReadOnlys_obj = {
+ "snmpOutReadOnlys", 23, 0,
+ NULL, &_snmpOutBadValues_obj
+},
+_snmpOutGenErrs_obj = {
+ "snmpOutGenErrs", 24, 0,
+ NULL, &_snmpOutReadOnlys_obj
+},
+_snmpOutGetRequests_obj = {
+ "snmpOutGetRequests", 25, 0,
+ NULL, &_snmpOutGenErrs_obj
+},
+_snmpOutGetNexts_obj = {
+ "snmpOutGetNexts", 26, 0,
+ NULL, &_snmpOutGetRequests_obj
+},
+_snmpOutSetRequests_obj = {
+ "snmpOutSetRequests", 27, 0,
+ NULL, &_snmpOutGetNexts_obj
+},
+_snmpOutGetResponses_obj = {
+ "snmpOutGetResponses", 28, 0,
+ NULL, &_snmpOutSetRequests_obj
+},
+_snmpOutTraps_obj = {
+ "snmpOutTraps", 29, 0,
+ NULL, &_snmpOutGetResponses_obj
+},
+_snmpEnableAuthTraps_obj = {
+ "snmpEnableAuthTraps", 30, 0,
+ NULL, &_snmpOutTraps_obj
+},
+_egpNeighState_obj = {
+ "egpNeighState", 1, 0,
+ NULL, NULL
+},
+_egpNeighAddr_obj = {
+ "egpNeighAddr", 2, 0,
+ NULL, &_egpNeighState_obj
+},
+_egpNeighAs_obj = {
+ "egpNeighAs", 3, 0,
+ NULL, &_egpNeighAddr_obj
+},
+_egpNeighInMsgs_obj = {
+ "egpNeighInMsgs", 4, 0,
+ NULL, &_egpNeighAs_obj
+},
+_egpNeighInErrs_obj = {
+ "egpNeighInErrs", 5, 0,
+ NULL, &_egpNeighInMsgs_obj
+},
+_egpNeighOutMsgs_obj = {
+ "egpNeighOutMsgs", 6, 0,
+ NULL, &_egpNeighInErrs_obj
+},
+_egpNeighOutErrs_obj = {
+ "egpNeighOutErrs", 7, 0,
+ NULL, &_egpNeighOutMsgs_obj
+},
+_egpNeighInErrMsgs_obj = {
+ "egpNeighInErrMsgs", 8, 0,
+ NULL, &_egpNeighOutErrs_obj
+},
+_egpNeighOutErrMsgs_obj = {
+ "egpNeighOutErrMsgs", 9, 0,
+ NULL, &_egpNeighInErrMsgs_obj
+},
+_egpNeighStateUps_obj = {
+ "egpNeighStateUps", 10, 0,
+ NULL, &_egpNeighOutErrMsgs_obj
+},
+_egpNeighStateDowns_obj = {
+ "egpNeighStateDowns", 11, 0,
+ NULL, &_egpNeighStateUps_obj
+},
+_egpNeighIntervalHello_obj = {
+ "egpNeighIntervalHello", 12, 0,
+ NULL, &_egpNeighStateDowns_obj
+},
+_egpNeighIntervalPoll_obj = {
+ "egpNeighIntervalPoll", 13, 0,
+ NULL, &_egpNeighIntervalHello_obj
+},
+_egpNeighMode_obj = {
+ "egpNeighMode", 14, 0,
+ NULL, &_egpNeighIntervalPoll_obj
+},
+_egpNeighEventTrigger_obj = {
+ "egpNeighEventTrigger", 15, 0,
+ NULL, &_egpNeighMode_obj
+},
+_egpNeighEntry_obj = {
+ "egpNeighEntry", 1, 0,
+ &_egpNeighEventTrigger_obj, NULL
+},
+_egpInMsgs_obj = {
+ "egpInMsgs", 1, 0,
+ NULL, NULL
+},
+_egpInErrors_obj = {
+ "egpInErrors", 2, 0,
+ NULL, &_egpInMsgs_obj
+},
+_egpOutMsgs_obj = {
+ "egpOutMsgs", 3, 0,
+ NULL, &_egpInErrors_obj
+},
+_egpOutErrors_obj = {
+ "egpOutErrors", 4, 0,
+ NULL, &_egpOutMsgs_obj
+},
+_egpNeighTable_obj = {
+ "egpNeighTable", 5, 0,
+ &_egpNeighEntry_obj, &_egpOutErrors_obj
+},
+_egpAs_obj = {
+ "egpAs", 6, 0,
+ NULL, &_egpNeighTable_obj
+},
+_udpLocalAddress_obj = {
+ "udpLocalAddress", 1, 0,
+ NULL, NULL
+},
+_udpLocalPort_obj = {
+ "udpLocalPort", 2, 0,
+ NULL, &_udpLocalAddress_obj
+},
+_udpEntry_obj = {
+ "udpEntry", 1, 0,
+ &_udpLocalPort_obj, NULL
+},
+_udpInDatagrams_obj = {
+ "udpInDatagrams", 1, 0,
+ NULL, NULL
+},
+_udpNoPorts_obj = {
+ "udpNoPorts", 2, 0,
+ NULL, &_udpInDatagrams_obj
+},
+_udpInErrors_obj = {
+ "udpInErrors", 3, 0,
+ NULL, &_udpNoPorts_obj
+},
+_udpOutDatagrams_obj = {
+ "udpOutDatagrams", 4, 0,
+ NULL, &_udpInErrors_obj
+},
+_udpTable_obj = {
+ "udpTable", 5, 0,
+ &_udpEntry_obj, &_udpOutDatagrams_obj
+},
+_tcpConnState_obj = {
+ "tcpConnState", 1, 0,
+ NULL, NULL
+},
+_tcpConnLocalAddress_obj = {
+ "tcpConnLocalAddress", 2, 0,
+ NULL, &_tcpConnState_obj
+},
+_tcpConnLocalPort_obj = {
+ "tcpConnLocalPort", 3, 0,
+ NULL, &_tcpConnLocalAddress_obj
+},
+_tcpConnRemAddress_obj = {
+ "tcpConnRemAddress", 4, 0,
+ NULL, &_tcpConnLocalPort_obj
+},
+_tcpConnRemPort_obj = {
+ "tcpConnRemPort", 5, 0,
+ NULL, &_tcpConnRemAddress_obj
+},
+_tcpConnEntry_obj = {
+ "tcpConnEntry", 1, 0,
+ &_tcpConnRemPort_obj, NULL
+},
+_tcpRtoAlgorithm_obj = {
+ "tcpRtoAlgorithm", 1, 0,
+ NULL, NULL
+},
+_tcpRtoMin_obj = {
+ "tcpRtoMin", 2, 0,
+ NULL, &_tcpRtoAlgorithm_obj
+},
+_tcpRtoMax_obj = {
+ "tcpRtoMax", 3, 0,
+ NULL, &_tcpRtoMin_obj
+},
+_tcpMaxConn_obj = {
+ "tcpMaxConn", 4, 0,
+ NULL, &_tcpRtoMax_obj
+},
+_tcpActiveOpens_obj = {
+ "tcpActiveOpens", 5, 0,
+ NULL, &_tcpMaxConn_obj
+},
+_tcpPassiveOpens_obj = {
+ "tcpPassiveOpens", 6, 0,
+ NULL, &_tcpActiveOpens_obj
+},
+_tcpAttemptFails_obj = {
+ "tcpAttemptFails", 7, 0,
+ NULL, &_tcpPassiveOpens_obj
+},
+_tcpEstabResets_obj = {
+ "tcpEstabResets", 8, 0,
+ NULL, &_tcpAttemptFails_obj
+},
+_tcpCurrEstab_obj = {
+ "tcpCurrEstab", 9, 0,
+ NULL, &_tcpEstabResets_obj
+},
+_tcpInSegs_obj = {
+ "tcpInSegs", 10, 0,
+ NULL, &_tcpCurrEstab_obj
+},
+_tcpOutSegs_obj = {
+ "tcpOutSegs", 11, 0,
+ NULL, &_tcpInSegs_obj
+},
+_tcpRetransSegs_obj = {
+ "tcpRetransSegs", 12, 0,
+ NULL, &_tcpOutSegs_obj
+},
+_tcpConnTable_obj = {
+ "tcpConnTable", 13, 0,
+ &_tcpConnEntry_obj, &_tcpRetransSegs_obj
+},
+_tcpInErrs_obj = {
+ "tcpInErrs", 14, 0,
+ NULL, &_tcpConnTable_obj
+},
+_tcpOutRsts_obj = {
+ "tcpOutRsts", 15, 0,
+ NULL, &_tcpInErrs_obj
+},
+_icmpInMsgs_obj = {
+ "icmpInMsgs", 1, 0,
+ NULL, NULL
+},
+_icmpInErrors_obj = {
+ "icmpInErrors", 2, 0,
+ NULL, &_icmpInMsgs_obj
+},
+_icmpInDestUnreachs_obj = {
+ "icmpInDestUnreachs", 3, 0,
+ NULL, &_icmpInErrors_obj
+},
+_icmpInTimeExcds_obj = {
+ "icmpInTimeExcds", 4, 0,
+ NULL, &_icmpInDestUnreachs_obj
+},
+_icmpInParmProbs_obj = {
+ "icmpInParmProbs", 5, 0,
+ NULL, &_icmpInTimeExcds_obj
+},
+_icmpInSrcQuenchs_obj = {
+ "icmpInSrcQuenchs", 6, 0,
+ NULL, &_icmpInParmProbs_obj
+},
+_icmpInRedirects_obj = {
+ "icmpInRedirects", 7, 0,
+ NULL, &_icmpInSrcQuenchs_obj
+},
+_icmpInEchos_obj = {
+ "icmpInEchos", 8, 0,
+ NULL, &_icmpInRedirects_obj
+},
+_icmpInEchoReps_obj = {
+ "icmpInEchoReps", 9, 0,
+ NULL, &_icmpInEchos_obj
+},
+_icmpInTimestamps_obj = {
+ "icmpInTimestamps", 10, 0,
+ NULL, &_icmpInEchoReps_obj
+},
+_icmpInTimestampReps_obj = {
+ "icmpInTimestampReps", 11, 0,
+ NULL, &_icmpInTimestamps_obj
+},
+_icmpInAddrMasks_obj = {
+ "icmpInAddrMasks", 12, 0,
+ NULL, &_icmpInTimestampReps_obj
+},
+_icmpInAddrMaskReps_obj = {
+ "icmpInAddrMaskReps", 13, 0,
+ NULL, &_icmpInAddrMasks_obj
+},
+_icmpOutMsgs_obj = {
+ "icmpOutMsgs", 14, 0,
+ NULL, &_icmpInAddrMaskReps_obj
+},
+_icmpOutErrors_obj = {
+ "icmpOutErrors", 15, 0,
+ NULL, &_icmpOutMsgs_obj
+},
+_icmpOutDestUnreachs_obj = {
+ "icmpOutDestUnreachs", 16, 0,
+ NULL, &_icmpOutErrors_obj
+},
+_icmpOutTimeExcds_obj = {
+ "icmpOutTimeExcds", 17, 0,
+ NULL, &_icmpOutDestUnreachs_obj
+},
+_icmpOutParmProbs_obj = {
+ "icmpOutParmProbs", 18, 0,
+ NULL, &_icmpOutTimeExcds_obj
+},
+_icmpOutSrcQuenchs_obj = {
+ "icmpOutSrcQuenchs", 19, 0,
+ NULL, &_icmpOutParmProbs_obj
+},
+_icmpOutRedirects_obj = {
+ "icmpOutRedirects", 20, 0,
+ NULL, &_icmpOutSrcQuenchs_obj
+},
+_icmpOutEchos_obj = {
+ "icmpOutEchos", 21, 0,
+ NULL, &_icmpOutRedirects_obj
+},
+_icmpOutEchoReps_obj = {
+ "icmpOutEchoReps", 22, 0,
+ NULL, &_icmpOutEchos_obj
+},
+_icmpOutTimestamps_obj = {
+ "icmpOutTimestamps", 23, 0,
+ NULL, &_icmpOutEchoReps_obj
+},
+_icmpOutTimestampReps_obj = {
+ "icmpOutTimestampReps", 24, 0,
+ NULL, &_icmpOutTimestamps_obj
+},
+_icmpOutAddrMasks_obj = {
+ "icmpOutAddrMasks", 25, 0,
+ NULL, &_icmpOutTimestampReps_obj
+},
+_icmpOutAddrMaskReps_obj = {
+ "icmpOutAddrMaskReps", 26, 0,
+ NULL, &_icmpOutAddrMasks_obj
+},
+_ipNetToMediaIfIndex_obj = {
+ "ipNetToMediaIfIndex", 1, 0,
+ NULL, NULL
+},
+_ipNetToMediaPhysAddress_obj = {
+ "ipNetToMediaPhysAddress", 2, 0,
+ NULL, &_ipNetToMediaIfIndex_obj
+},
+_ipNetToMediaNetAddress_obj = {
+ "ipNetToMediaNetAddress", 3, 0,
+ NULL, &_ipNetToMediaPhysAddress_obj
+},
+_ipNetToMediaType_obj = {
+ "ipNetToMediaType", 4, 0,
+ NULL, &_ipNetToMediaNetAddress_obj
+},
+_ipNetToMediaEntry_obj = {
+ "ipNetToMediaEntry", 1, 0,
+ &_ipNetToMediaType_obj, NULL
+},
+_ipRouteDest_obj = {
+ "ipRouteDest", 1, 0,
+ NULL, NULL
+},
+_ipRouteIfIndex_obj = {
+ "ipRouteIfIndex", 2, 0,
+ NULL, &_ipRouteDest_obj
+},
+_ipRouteMetric1_obj = {
+ "ipRouteMetric1", 3, 0,
+ NULL, &_ipRouteIfIndex_obj
+},
+_ipRouteMetric2_obj = {
+ "ipRouteMetric2", 4, 0,
+ NULL, &_ipRouteMetric1_obj
+},
+_ipRouteMetric3_obj = {
+ "ipRouteMetric3", 5, 0,
+ NULL, &_ipRouteMetric2_obj
+},
+_ipRouteMetric4_obj = {
+ "ipRouteMetric4", 6, 0,
+ NULL, &_ipRouteMetric3_obj
+},
+_ipRouteNextHop_obj = {
+ "ipRouteNextHop", 7, 0,
+ NULL, &_ipRouteMetric4_obj
+},
+_ipRouteType_obj = {
+ "ipRouteType", 8, 0,
+ NULL, &_ipRouteNextHop_obj
+},
+_ipRouteProto_obj = {
+ "ipRouteProto", 9, 0,
+ NULL, &_ipRouteType_obj
+},
+_ipRouteAge_obj = {
+ "ipRouteAge", 10, 0,
+ NULL, &_ipRouteProto_obj
+},
+_ipRouteMask_obj = {
+ "ipRouteMask", 11, 0,
+ NULL, &_ipRouteAge_obj
+},
+_ipRouteEntry_obj = {
+ "ipRouteEntry", 1, 0,
+ &_ipRouteMask_obj, NULL
+},
+_ipAdEntAddr_obj = {
+ "ipAdEntAddr", 1, 0,
+ NULL, NULL
+},
+_ipAdEntIfIndex_obj = {
+ "ipAdEntIfIndex", 2, 0,
+ NULL, &_ipAdEntAddr_obj
+},
+_ipAdEntNetMask_obj = {
+ "ipAdEntNetMask", 3, 0,
+ NULL, &_ipAdEntIfIndex_obj
+},
+_ipAdEntBcastAddr_obj = {
+ "ipAdEntBcastAddr", 4, 0,
+ NULL, &_ipAdEntNetMask_obj
+},
+_ipAdEntReasmMaxSize_obj = {
+ "ipAdEntReasmMaxSize", 5, 0,
+ NULL, &_ipAdEntBcastAddr_obj
+},
+_ipAddrEntry_obj = {
+ "ipAddrEntry", 1, 0,
+ &_ipAdEntReasmMaxSize_obj, NULL
+},
+_ipForwarding_obj = {
+ "ipForwarding", 1, 0,
+ NULL, NULL
+},
+_ipDefaultTTL_obj = {
+ "ipDefaultTTL", 2, 0,
+ NULL, &_ipForwarding_obj
+},
+_ipInReceives_obj = {
+ "ipInReceives", 3, 0,
+ NULL, &_ipDefaultTTL_obj
+},
+_ipInHdrErrors_obj = {
+ "ipInHdrErrors", 4, 0,
+ NULL, &_ipInReceives_obj
+},
+_ipInAddrErrors_obj = {
+ "ipInAddrErrors", 5, 0,
+ NULL, &_ipInHdrErrors_obj
+},
+_ipForwDatagrams_obj = {
+ "ipForwDatagrams", 6, 0,
+ NULL, &_ipInAddrErrors_obj
+},
+_ipInUnknownProtos_obj = {
+ "ipInUnknownProtos", 7, 0,
+ NULL, &_ipForwDatagrams_obj
+},
+_ipInDiscards_obj = {
+ "ipInDiscards", 8, 0,
+ NULL, &_ipInUnknownProtos_obj
+},
+_ipInDelivers_obj = {
+ "ipInDelivers", 9, 0,
+ NULL, &_ipInDiscards_obj
+},
+_ipOutRequests_obj = {
+ "ipOutRequests", 10, 0,
+ NULL, &_ipInDelivers_obj
+},
+_ipOutDiscards_obj = {
+ "ipOutDiscards", 11, 0,
+ NULL, &_ipOutRequests_obj
+},
+_ipOutNoRoutes_obj = {
+ "ipOutNoRoutes", 12, 0,
+ NULL, &_ipOutDiscards_obj
+},
+_ipReasmTimeout_obj = {
+ "ipReasmTimeout", 13, 0,
+ NULL, &_ipOutNoRoutes_obj
+},
+_ipReasmReqds_obj = {
+ "ipReasmReqds", 14, 0,
+ NULL, &_ipReasmTimeout_obj
+},
+_ipReasmOKs_obj = {
+ "ipReasmOKs", 15, 0,
+ NULL, &_ipReasmReqds_obj
+},
+_ipReasmFails_obj = {
+ "ipReasmFails", 16, 0,
+ NULL, &_ipReasmOKs_obj
+},
+_ipFragOKs_obj = {
+ "ipFragOKs", 17, 0,
+ NULL, &_ipReasmFails_obj
+},
+_ipFragFails_obj = {
+ "ipFragFails", 18, 0,
+ NULL, &_ipFragOKs_obj
+},
+_ipFragCreates_obj = {
+ "ipFragCreates", 19, 0,
+ NULL, &_ipFragFails_obj
+},
+_ipAddrTable_obj = {
+ "ipAddrTable", 20, 0,
+ &_ipAddrEntry_obj, &_ipFragCreates_obj
+},
+_ipRoutingTable_obj = {
+ "ipRoutingTable", 21, 0,
+ &_ipRouteEntry_obj, &_ipAddrTable_obj
+},
+_ipNetToMediaTable_obj = {
+ "ipNetToMediaTable", 22, 0,
+ &_ipNetToMediaEntry_obj, &_ipRoutingTable_obj
+},
+_atIfIndex_obj = {
+ "atIfIndex", 1, 0,
+ NULL, NULL
+},
+_atPhysAddress_obj = {
+ "atPhysAddress", 2, 0,
+ NULL, &_atIfIndex_obj
+},
+_atNetAddress_obj = {
+ "atNetAddress", 3, 0,
+ NULL, &_atPhysAddress_obj
+},
+_atEntry_obj = {
+ "atEntry", 1, 0,
+ &_atNetAddress_obj, NULL
+},
+_atTable_obj = {
+ "atTable", 1, 0,
+ &_atEntry_obj, NULL
+},
+_ifIndex_obj = {
+ "ifIndex", 1, 0,
+ NULL, NULL
+},
+_ifDescr_obj = {
+ "ifDescr", 2, 0,
+ NULL, &_ifIndex_obj
+},
+_ifType_obj = {
+ "ifType", 3, 0,
+ NULL, &_ifDescr_obj
+},
+_ifMtu_obj = {
+ "ifMtu", 4, 0,
+ NULL, &_ifType_obj
+},
+_ifSpeed_obj = {
+ "ifSpeed", 5, 0,
+ NULL, &_ifMtu_obj
+},
+_ifPhysAddress_obj = {
+ "ifPhysAddress", 6, 0,
+ NULL, &_ifSpeed_obj
+},
+_ifAdminStatus_obj = {
+ "ifAdminStatus", 7, 0,
+ NULL, &_ifPhysAddress_obj
+},
+_ifOperStatus_obj = {
+ "ifOperStatus", 8, 0,
+ NULL, &_ifAdminStatus_obj
+},
+_ifLastChange_obj = {
+ "ifLastChange", 9, 0,
+ NULL, &_ifOperStatus_obj
+},
+_ifInOctets_obj = {
+ "ifInOctets", 10, 0,
+ NULL, &_ifLastChange_obj
+},
+_ifInUcastPkts_obj = {
+ "ifInUcastPkts", 11, 0,
+ NULL, &_ifInOctets_obj
+},
+_ifInNUcastPkts_obj = {
+ "ifInNUcastPkts", 12, 0,
+ NULL, &_ifInUcastPkts_obj
+},
+_ifInDiscards_obj = {
+ "ifInDiscards", 13, 0,
+ NULL, &_ifInNUcastPkts_obj
+},
+_ifInErrors_obj = {
+ "ifInErrors", 14, 0,
+ NULL, &_ifInDiscards_obj
+},
+_ifInUnknownProtos_obj = {
+ "ifInUnknownProtos", 15, 0,
+ NULL, &_ifInErrors_obj
+},
+_ifOutOctets_obj = {
+ "ifOutOctets", 16, 0,
+ NULL, &_ifInUnknownProtos_obj
+},
+_ifOutUcastPkts_obj = {
+ "ifOutUcastPkts", 17, 0,
+ NULL, &_ifOutOctets_obj
+},
+_ifOutNUcastPkts_obj = {
+ "ifOutNUcastPkts", 18, 0,
+ NULL, &_ifOutUcastPkts_obj
+},
+_ifOutDiscards_obj = {
+ "ifOutDiscards", 19, 0,
+ NULL, &_ifOutNUcastPkts_obj
+},
+_ifOutErrors_obj = {
+ "ifOutErrors", 20, 0,
+ NULL, &_ifOutDiscards_obj
+},
+_ifOutQLen_obj = {
+ "ifOutQLen", 21, 0,
+ NULL, &_ifOutErrors_obj
+},
+_ifSpecific_obj = {
+ "ifSpecific", 22, 0,
+ NULL, &_ifOutQLen_obj
+},
+_ifEntry_obj = {
+ "ifEntry", 1, 0,
+ &_ifSpecific_obj, NULL
+},
+_ifNumber_obj = {
+ "ifNumber", 1, 0,
+ NULL, NULL
+},
+_ifTable_obj = {
+ "ifTable", 2, 0,
+ &_ifEntry_obj, &_ifNumber_obj
+},
+_sysDescr_obj = {
+ "sysDescr", 1, 0,
+ NULL, NULL
+},
+_sysObjectID_obj = {
+ "sysObjectID", 2, 0,
+ NULL, &_sysDescr_obj
+},
+_sysUpTime_obj = {
+ "sysUpTime", 3, 0,
+ NULL, &_sysObjectID_obj
+},
+_sysContact_obj = {
+ "sysContact", 4, 0,
+ NULL, &_sysUpTime_obj
+},
+_sysName_obj = {
+ "sysName", 5, 0,
+ NULL, &_sysContact_obj
+},
+_sysLocation_obj = {
+ "sysLocation", 6, 0,
+ NULL, &_sysName_obj
+},
+_sysServices_obj = {
+ "sysServices", 7, 0,
+ NULL, &_sysLocation_obj
+},
+_system_obj = {
+ "system", 1, 0,
+ &_sysServices_obj, NULL
+},
+_interfaces_obj = {
+ "interfaces", 2, 0,
+ &_ifTable_obj, &_system_obj
+},
+_at_obj = {
+ "at", 3, 0,
+ &_atTable_obj, &_interfaces_obj
+},
+_ip_obj = {
+ "ip", 4, 0,
+ &_ipNetToMediaTable_obj, &_at_obj
+},
+_icmp_obj = {
+ "icmp", 5, 0,
+ &_icmpOutAddrMaskReps_obj, &_ip_obj
+},
+_tcp_obj = {
+ "tcp", 6, 0,
+ &_tcpOutRsts_obj, &_icmp_obj
+},
+_udp_obj = {
+ "udp", 7, 0,
+ &_udpTable_obj, &_tcp_obj
+},
+_egp_obj = {
+ "egp", 8, 0,
+ &_egpAs_obj, &_udp_obj
+},
+_transmission_obj = {
+ "transmission", 10, 0,
+ NULL, &_egp_obj
+},
+_snmp_obj = {
+ "snmp", 11, 0,
+ &_snmpEnableAuthTraps_obj, &_transmission_obj
+},
+_usmMIBCompliances_obj = {
+ "usmMIBCompliances", 1, 0,
+ NULL, NULL
+},
+_usmMIBGroups_obj = {
+ "usmMIBGroups", 2, 0,
+ NULL, &_usmMIBCompliances_obj
+},
+_usmUserEngineID_obj = {
+ "usmUserEngineID", 1, 0,
+ NULL, NULL
+},
+_usmUserName_obj = {
+ "usmUserName", 2, 0,
+ NULL, &_usmUserEngineID_obj
+},
+_usmUserSecurityName_obj = {
+ "usmUserSecurityName", 3, 0,
+ NULL, &_usmUserName_obj
+},
+_usmUserCloneFrom_obj = {
+ "usmUserCloneFrom", 4, 0,
+ NULL, &_usmUserSecurityName_obj
+},
+_usmUserAuthProtocol_obj = {
+ "usmUserAuthProtocol", 5, 0,
+ NULL, &_usmUserCloneFrom_obj
+},
+_usmUserAuthKeyChange_obj = {
+ "usmUserAuthKeyChange", 6, 0,
+ NULL, &_usmUserAuthProtocol_obj
+},
+_usmUserOwnAuthKeyChange_obj = {
+ "usmUserOwnAuthKeyChange", 7, 0,
+ NULL, &_usmUserAuthKeyChange_obj
+},
+_usmUserPrivProtocol_obj = {
+ "usmUserPrivProtocol", 8, 0,
+ NULL, &_usmUserOwnAuthKeyChange_obj
+},
+_usmUserPrivKeyChange_obj = {
+ "usmUserPrivKeyChange", 9, 0,
+ NULL, &_usmUserPrivProtocol_obj
+},
+_usmUserOwnPrivKeyChange_obj = {
+ "usmUserOwnPrivKeyChange", 10, 0,
+ NULL, &_usmUserPrivKeyChange_obj
+},
+_usmUserPublic_obj = {
+ "usmUserPublic", 11, 0,
+ NULL, &_usmUserOwnPrivKeyChange_obj
+},
+_usmUserStorageType_obj = {
+ "usmUserStorageType", 12, 0,
+ NULL, &_usmUserPublic_obj
+},
+_usmUserStatus_obj = {
+ "usmUserStatus", 13, 0,
+ NULL, &_usmUserStorageType_obj
+},
+_usmUserEntry_obj = {
+ "usmUserEntry", 1, 0,
+ &_usmUserStatus_obj, NULL
+},
+_usmUserSpinLock_obj = {
+ "usmUserSpinLock", 1, 0,
+ NULL, NULL
+},
+_usmUserTable_obj = {
+ "usmUserTable", 2, 0,
+ &_usmUserEntry_obj, &_usmUserSpinLock_obj
+},
+_usmStatsUnsupportedSecLevels_obj = {
+ "usmStatsUnsupportedSecLevels", 1, 0,
+ NULL, NULL
+},
+_usmStatsNotInTimeWindows_obj = {
+ "usmStatsNotInTimeWindows", 2, 0,
+ NULL, &_usmStatsUnsupportedSecLevels_obj
+},
+_usmStatsUnknownUserNames_obj = {
+ "usmStatsUnknownUserNames", 3, 0,
+ NULL, &_usmStatsNotInTimeWindows_obj
+},
+_usmStatsUnknownEngineIDs_obj = {
+ "usmStatsUnknownEngineIDs", 4, 0,
+ NULL, &_usmStatsUnknownUserNames_obj
+},
+_usmStatsWrongDigests_obj = {
+ "usmStatsWrongDigests", 5, 0,
+ NULL, &_usmStatsUnknownEngineIDs_obj
+},
+_usmStatsDecryptionErrors_obj = {
+ "usmStatsDecryptionErrors", 6, 0,
+ NULL, &_usmStatsWrongDigests_obj
+},
+_usmStats_obj = {
+ "usmStats", 1, 0,
+ &_usmStatsDecryptionErrors_obj, NULL
+},
+_usmUser_obj = {
+ "usmUser", 2, 0,
+ &_usmUserTable_obj, &_usmStats_obj
+},
+_usmMIBObjects_obj = {
+ "usmMIBObjects", 1, 0,
+ &_usmUser_obj, NULL
+},
+_usmMIBConformance_obj = {
+ "usmMIBConformance", 2, 0,
+ &_usmMIBGroups_obj, &_usmMIBObjects_obj
+},
+_snmpMPDMIBCompliances_obj = {
+ "snmpMPDMIBCompliances", 1, 0,
+ NULL, NULL
+},
+_snmpMPDMIBGroups_obj = {
+ "snmpMPDMIBGroups", 2, 0,
+ NULL, &_snmpMPDMIBCompliances_obj
+},
+_snmpUnknownSecurityModels_obj = {
+ "snmpUnknownSecurityModels", 1, 0,
+ NULL, NULL
+},
+_snmpInvalidMsgs_obj = {
+ "snmpInvalidMsgs", 2, 0,
+ NULL, &_snmpUnknownSecurityModels_obj
+},
+_snmpUnknownPDUHandlers_obj = {
+ "snmpUnknownPDUHandlers", 3, 0,
+ NULL, &_snmpInvalidMsgs_obj
+},
+_snmpMPDStats_obj = {
+ "snmpMPDStats", 1, 0,
+ &_snmpUnknownPDUHandlers_obj, NULL
+},
+_snmpMPDAdmin_obj = {
+ "snmpMPDAdmin", 1, 0,
+ NULL, NULL
+},
+_snmpMPDMIBObjects_obj = {
+ "snmpMPDMIBObjects", 2, 0,
+ &_snmpMPDStats_obj, &_snmpMPDAdmin_obj
+},
+_snmpMPDMIBConformance_obj = {
+ "snmpMPDMIBConformance", 3, 0,
+ &_snmpMPDMIBGroups_obj, &_snmpMPDMIBObjects_obj
+},
+_snmpEngineID_obj = {
+ "snmpEngineID", 1, 0,
+ NULL, NULL
+},
+_snmpEngineBoots_obj = {
+ "snmpEngineBoots", 2, 0,
+ NULL, &_snmpEngineID_obj
+},
+_snmpEngineTime_obj = {
+ "snmpEngineTime", 3, 0,
+ NULL, &_snmpEngineBoots_obj
+},
+_snmpEngineMaxMessageSize_obj = {
+ "snmpEngineMaxMessageSize", 4, 0,
+ NULL, &_snmpEngineTime_obj
+},
+_snmpEngine_obj = {
+ "snmpEngine", 1, 0,
+ &_snmpEngineMaxMessageSize_obj, NULL
+},
+_snmpFrameworkAdmin_obj = {
+ "snmpFrameworkAdmin", 1, 0,
+ NULL, NULL
+},
+_snmpFrameworkMIBObjects_obj = {
+ "snmpFrameworkMIBObjects", 2, 0,
+ &_snmpEngine_obj, &_snmpFrameworkAdmin_obj
+},
+_snmpFrameworkMIBConformance_obj = {
+ "snmpFrameworkMIBConformance", 3, 0,
+ NULL, &_snmpFrameworkMIBObjects_obj
+},
+_snmpFrameworkMIB_obj = {
+ "snmpFrameworkMIB", 10, 0,
+ &_snmpFrameworkMIBConformance_obj, NULL
+},
+_snmpMPDMIB_obj = {
+ "snmpMPDMIB", 11, 0,
+ &_snmpMPDMIBConformance_obj, &_snmpFrameworkMIB_obj
+},
+_snmpUsmMIB_obj = {
+ "snmpUsmMIB", 15, 0,
+ &_usmMIBConformance_obj, &_snmpMPDMIB_obj
+},
+_snmpModules_obj = {
+ "snmpModules", 3, 0,
+ &_snmpUsmMIB_obj, NULL
+},
+_mib_obj = {
+ "mib", 1, 0,
+ &_snmp_obj, NULL
+},
+_directory_obj = {
+ "directory", 1, 0,
+ NULL, NULL
+},
+_mgmt_obj = {
+ "mgmt", 2, 0,
+ &_mib_obj, &_directory_obj
+},
+_experimental_obj = {
+ "experimental", 3, 0,
+ NULL, &_mgmt_obj
+},
+_private_obj = {
+ "private", 4, 0,
+ &_enterprises_obj, &_experimental_obj
+},
+_security_obj = {
+ "security", 5, 0,
+ NULL, &_private_obj
+},
+_snmpV2_obj = {
+ "snmpV2", 6, 0,
+ &_snmpModules_obj, &_security_obj
+},
+_internet_obj = {
+ "internet", 1, 0,
+ &_snmpV2_obj, NULL
+},
+_dod_obj = {
+ "dod", 6, 0,
+ &_internet_obj, NULL
+},
+_org_obj = {
+ "org", 3, 0,
+ &_dod_obj, NULL
+},
+_iso_obj = {
+ "iso", 1, 0,
+ &_org_obj, NULL
+},
+*mibroot = &_iso_obj;
diff --git a/missing/datalinks.c b/missing/datalinks.c
new file mode 100644
index 0000000..17f60be
--- /dev/null
+++ b/missing/datalinks.c
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the Computer Systems
+ * Engineering Group at Lawrence Berkeley Laboratory.
+ * 4. Neither the name of the University nor of the Laboratory may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <netdissect-stdinc.h>
+
+#include <pcap.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "pcap-missing.h"
+
+/*
+ * Stub versions for platforms that don't support them.
+ */
+int
+pcap_list_datalinks(pcap_t *p, int **dlt_buffer)
+{
+ /*
+ * This platform doesn't support changing the DLT for an
+ * interface. Return a list of DLTs containing only the
+ * DLT this device supports.
+ */
+ *dlt_buffer = (int*)malloc(sizeof(**dlt_buffer));
+ if (*dlt_buffer == NULL)
+ return (-1);
+ **dlt_buffer = pcap_datalink(p);
+ return (1);
+}
diff --git a/missing/dlnames.c b/missing/dlnames.c
new file mode 100644
index 0000000..03c2b38
--- /dev/null
+++ b/missing/dlnames.c
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the Computer Systems
+ * Engineering Group at Lawrence Berkeley Laboratory.
+ * 4. Neither the name of the University nor of the Laboratory may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <netdissect-stdinc.h>
+
+#include <pcap.h>
+#include <string.h>
+
+#include "pcap-missing.h"
+#include "ascii_strcasecmp.h"
+
+struct dlt_choice {
+ const char *name;
+ const char *description;
+ int dlt;
+};
+
+#define DLT_CHOICE(code, description) { #code, description, code }
+#define DLT_CHOICE_SENTINEL { NULL, NULL, 0 }
+
+static struct dlt_choice dlt_choices[] = {
+ DLT_CHOICE(DLT_NULL, "BSD loopback"),
+ DLT_CHOICE(DLT_EN10MB, "Ethernet"),
+ DLT_CHOICE(DLT_IEEE802, "Token ring"),
+ DLT_CHOICE(DLT_ARCNET, "ARCNET"),
+ DLT_CHOICE(DLT_SLIP, "SLIP"),
+ DLT_CHOICE(DLT_PPP, "PPP"),
+ DLT_CHOICE(DLT_FDDI, "FDDI"),
+ DLT_CHOICE(DLT_ATM_RFC1483, "RFC 1483 IP-over-ATM"),
+ DLT_CHOICE(DLT_RAW, "Raw IP"),
+#ifdef DLT_SLIP_BSDOS
+ DLT_CHOICE(DLT_SLIP_BSDOS, "BSD/OS SLIP"),
+#endif
+#ifdef DLT_PPP_BSDOS
+ DLT_CHOICE(DLT_PPP_BSDOS, "BSD/OS PPP"),
+#endif
+#ifdef DLT_ATM_CLIP
+ DLT_CHOICE(DLT_ATM_CLIP, "Linux Classical IP-over-ATM"),
+#endif
+#ifdef DLT_PPP_SERIAL
+ DLT_CHOICE(DLT_PPP_SERIAL, "PPP over serial"),
+#endif
+#ifdef DLT_PPP_ETHER
+ DLT_CHOICE(DLT_PPP_ETHER, "PPPoE"),
+#endif
+#ifdef DLT_C_HDLC
+ DLT_CHOICE(DLT_C_HDLC, "Cisco HDLC"),
+#endif
+#ifdef DLT_IEEE802_11
+ DLT_CHOICE(DLT_IEEE802_11, "802.11"),
+#endif
+#ifdef DLT_FRELAY
+ DLT_CHOICE(DLT_FRELAY, "Frame Relay"),
+#endif
+#ifdef DLT_LOOP
+ DLT_CHOICE(DLT_LOOP, "OpenBSD loopback"),
+#endif
+#ifdef DLT_ENC
+ DLT_CHOICE(DLT_ENC, "OpenBSD encapsulated IP"),
+#endif
+#ifdef DLT_LINUX_SLL
+ DLT_CHOICE(DLT_LINUX_SLL, "Linux cooked"),
+#endif
+#ifdef DLT_LTALK
+ DLT_CHOICE(DLT_LTALK, "Localtalk"),
+#endif
+#ifdef DLT_PFLOG
+ DLT_CHOICE(DLT_PFLOG, "OpenBSD pflog file"),
+#endif
+#ifdef DLT_PRISM_HEADER
+ DLT_CHOICE(DLT_PRISM_HEADER, "802.11 plus Prism header"),
+#endif
+#ifdef DLT_IP_OVER_FC
+ DLT_CHOICE(DLT_IP_OVER_FC, "RFC 2625 IP-over-Fibre Channel"),
+#endif
+#ifdef DLT_SUNATM
+ DLT_CHOICE(DLT_SUNATM, "Sun raw ATM"),
+#endif
+#ifdef DLT_IEEE802_11_RADIO
+ DLT_CHOICE(DLT_IEEE802_11_RADIO, "802.11 plus radio information header"),
+#endif
+#ifdef DLT_ARCNET_LINUX
+ DLT_CHOICE(DLT_ARCNET_LINUX, "Linux ARCNET"),
+#endif
+#ifdef DLT_LINUX_IRDA
+ DLT_CHOICE(DLT_LINUX_IRDA, "Linux IrDA"),
+#endif
+#ifdef DLT_CIP
+ DLT_CHOICE(DLT_CIP, "Linux Classical IP-over-ATM"),
+#endif
+#ifdef DLT_HDLC
+ DLT_CHOICE(DLT_HDLC, "Cisco HDLC"),
+#endif
+ DLT_CHOICE_SENTINEL
+};
+
+#ifndef HAVE_PCAP_DATALINK_NAME_TO_VAL
+int
+pcap_datalink_name_to_val(const char *name)
+{
+ int i;
+
+ for (i = 0; dlt_choices[i].name != NULL; i++) {
+ if (ascii_strcasecmp(dlt_choices[i].name + sizeof("DLT_") - 1,
+ name) == 0)
+ return (dlt_choices[i].dlt);
+ }
+ return (-1);
+}
+
+const char *
+pcap_datalink_val_to_name(int dlt)
+{
+ int i;
+
+ for (i = 0; dlt_choices[i].name != NULL; i++) {
+ if (dlt_choices[i].dlt == dlt)
+ return (dlt_choices[i].name + sizeof("DLT_") - 1);
+ }
+ return (NULL);
+}
+#endif
+
+const char *
+pcap_datalink_val_to_description(int dlt)
+{
+ int i;
+
+ for (i = 0; dlt_choices[i].name != NULL; i++) {
+ if (dlt_choices[i].dlt == dlt)
+ return (dlt_choices[i].description);
+ }
+ return (NULL);
+}
diff --git a/missing/getopt_long.c b/missing/getopt_long.c
new file mode 100644
index 0000000..ece0006
--- /dev/null
+++ b/missing/getopt_long.c
@@ -0,0 +1,636 @@
+/* $OpenBSD: getopt_long.c,v 1.22 2006/10/04 21:29:04 jmc Exp $ */
+/* $NetBSD: getopt_long.c,v 1.15 2002/01/31 22:43:40 tv Exp $ */
+
+/*
+ * Copyright (c) 2002 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Sponsored in part by the Defense Advanced Research Projects
+ * Agency (DARPA) and Air Force Research Laboratory, Air Force
+ * Materiel Command, USAF, under agreement number F39502-99-1-0512.
+ */
+/*-
+ * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Dieter Baron and Thomas Klausner.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <errno.h>
+#include "getopt_long.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+
+#include "diag-control.h"
+
+#define GNU_COMPATIBLE /* Be more compatible, configure's use us! */
+
+#define PRINT_ERROR ((opterr) && (*options != ':'))
+
+#define FLAG_PERMUTE 0x01 /* permute non-options to the end of argv */
+#define FLAG_ALLARGS 0x02 /* treat non-options as args to option "-1" */
+#define FLAG_LONGONLY 0x04 /* operate as getopt_long_only */
+
+/* return values */
+#define BADCH (int)'?'
+#define BADARG ((*options == ':') ? (int)':' : (int)'?')
+#define INORDER (int)1
+
+#define EMSG ""
+
+#ifdef GNU_COMPATIBLE
+#define NO_PREFIX (-1)
+#define D_PREFIX 0
+#define DD_PREFIX 1
+#define W_PREFIX 2
+#endif
+
+char *optarg;
+int optind, opterr = 1, optopt;
+
+static int getopt_internal(int, char * const *, const char *,
+ const struct option *, int *, int);
+static int parse_long_options(char * const *, const char *,
+ const struct option *, int *, int, int);
+static int gcd(int, int);
+static void permute_args(int, int, int, char * const *);
+
+static const char *place = EMSG; /* option letter processing */
+
+static int nonopt_start = -1; /* first non option argument (for permute) */
+static int nonopt_end = -1; /* first option after non options (for permute) */
+
+/* Error messages */
+static const char recargchar[] = "option requires an argument -- %c";
+static const char illoptchar[] = "illegal option -- %c"; /* From P1003.2 */
+#ifdef GNU_COMPATIBLE
+static int dash_prefix = NO_PREFIX;
+static const char gnuoptchar[] = "invalid option -- %c";
+
+static const char recargstring[] = "option `%s%s' requires an argument";
+static const char ambig[] = "option `%s%.*s' is ambiguous";
+static const char noarg[] = "option `%s%.*s' doesn't allow an argument";
+static const char illoptstring[] = "unrecognized option `%s%s'";
+#else
+static const char recargstring[] = "option requires an argument -- %s";
+static const char ambig[] = "ambiguous option -- %.*s";
+static const char noarg[] = "option doesn't take an argument -- %.*s";
+static const char illoptstring[] = "unknown option -- %s";
+#endif
+
+/*
+ * Compute the greatest common divisor of a and b.
+ */
+static int
+gcd(int a, int b)
+{
+ int c;
+
+ c = a % b;
+ while (c != 0) {
+ a = b;
+ b = c;
+ c = a % b;
+ }
+
+ return (b);
+}
+
+/*
+ * Exchange the block from nonopt_start to nonopt_end with the block
+ * from nonopt_end to opt_end (keeping the same order of arguments
+ * in each block).
+ */
+static void
+permute_args(int panonopt_start, int panonopt_end, int opt_end,
+ char * const *nargv)
+{
+ int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos;
+ char *swap;
+
+ /*
+ * compute lengths of blocks and number and size of cycles
+ */
+ nnonopts = panonopt_end - panonopt_start;
+ nopts = opt_end - panonopt_end;
+ ncycle = gcd(nnonopts, nopts);
+ cyclelen = (opt_end - panonopt_start) / ncycle;
+
+ for (i = 0; i < ncycle; i++) {
+ cstart = panonopt_end+i;
+ pos = cstart;
+ for (j = 0; j < cyclelen; j++) {
+ if (pos >= panonopt_end)
+ pos -= nnonopts;
+ else
+ pos += nopts;
+ /*
+ * This is annoying - I guess the
+ * "char * const argv[]" in the declaration
+ * of getopt() - and thus getopt_long() -
+ * means that it makes a promise not to
+ * shuffle the arguments, but here we are,
+ * shuffling the arguments.
+ *
+ * (No, it's not a promise that it won't
+ * modify any of the argument strings.
+ * It's a promise that it won't modify
+ * the array of pointers to the argument
+ * strings.)
+ *
+ * So squelch the cast warnings.
+ */
+ swap = nargv[pos];
+DIAG_OFF_CAST_QUAL
+ /* LINTED const cast */
+ ((char **) nargv)[pos] = nargv[cstart];
+ /* LINTED const cast */
+ ((char **)nargv)[cstart] = swap;
+DIAG_ON_CAST_QUAL
+ }
+ }
+}
+
+static void
+warnx(const char *fmt, ...)
+{
+ extern char *program_name;
+ va_list ap;
+
+ va_start(ap, fmt);
+ fprintf(stderr, "%s: ", program_name);
+ vfprintf(stderr, fmt, ap);
+ fprintf(stderr, "\n");
+ va_end(ap);
+}
+
+/*
+ * parse_long_options --
+ * Parse long options in argc/argv argument vector.
+ * Returns -1 if short_too is set and the option does not match long_options.
+ */
+static int
+parse_long_options(char * const *nargv, const char *options,
+ const struct option *long_options, int *idx, int short_too, int flags)
+{
+ const char *current_argv, *has_equal;
+#ifdef GNU_COMPATIBLE
+ const char *current_dash;
+#endif
+ size_t current_argv_len;
+ int i, match, exact_match, second_partial_match;
+
+ current_argv = place;
+#ifdef GNU_COMPATIBLE
+ switch (dash_prefix) {
+ case D_PREFIX:
+ current_dash = "-";
+ break;
+ case DD_PREFIX:
+ current_dash = "--";
+ break;
+ case W_PREFIX:
+ current_dash = "-W ";
+ break;
+ default:
+ current_dash = "";
+ break;
+ }
+#endif
+ match = -1;
+ exact_match = 0;
+ second_partial_match = 0;
+
+ optind++;
+
+ if ((has_equal = strchr(current_argv, '=')) != NULL) {
+ /* argument found (--option=arg) */
+ current_argv_len = has_equal - current_argv;
+ has_equal++;
+ } else
+ current_argv_len = strlen(current_argv);
+
+ for (i = 0; long_options[i].name; i++) {
+ /* find matching long option */
+ if (strncmp(current_argv, long_options[i].name,
+ current_argv_len))
+ continue;
+
+ if (strlen(long_options[i].name) == current_argv_len) {
+ /* exact match */
+ match = i;
+ exact_match = 1;
+ break;
+ }
+ /*
+ * If this is a known short option, don't allow
+ * a partial match of a single character.
+ */
+ if (short_too && current_argv_len == 1)
+ continue;
+
+ if (match == -1) /* first partial match */
+ match = i;
+ else if ((flags & FLAG_LONGONLY) ||
+ long_options[i].has_arg !=
+ long_options[match].has_arg ||
+ long_options[i].flag != long_options[match].flag ||
+ long_options[i].val != long_options[match].val)
+ second_partial_match = 1;
+ }
+ if (!exact_match && second_partial_match) {
+ /* ambiguous abbreviation */
+ if (PRINT_ERROR)
+ warnx(ambig,
+#ifdef GNU_COMPATIBLE
+ current_dash,
+#endif
+ (int)current_argv_len,
+ current_argv);
+ optopt = 0;
+ return (BADCH);
+ }
+ if (match != -1) { /* option found */
+ if (long_options[match].has_arg == no_argument
+ && has_equal) {
+ if (PRINT_ERROR)
+ warnx(noarg,
+#ifdef GNU_COMPATIBLE
+ current_dash,
+#endif
+ (int)current_argv_len,
+ current_argv);
+ /*
+ * XXX: GNU sets optopt to val regardless of flag
+ */
+ if (long_options[match].flag == NULL)
+ optopt = long_options[match].val;
+ else
+ optopt = 0;
+#ifdef GNU_COMPATIBLE
+ return (BADCH);
+#else
+ return (BADARG);
+#endif
+ }
+ if (long_options[match].has_arg == required_argument ||
+ long_options[match].has_arg == optional_argument) {
+DIAG_OFF_CAST_QUAL
+ if (has_equal)
+ optarg = (char *)has_equal;
+ else if (long_options[match].has_arg ==
+ required_argument) {
+ /*
+ * optional argument doesn't use next nargv
+ */
+ optarg = nargv[optind++];
+ }
+DIAG_ON_CAST_QUAL
+ }
+ if ((long_options[match].has_arg == required_argument)
+ && (optarg == NULL)) {
+ /*
+ * Missing argument; leading ':' indicates no error
+ * should be generated.
+ */
+ if (PRINT_ERROR)
+ warnx(recargstring,
+#ifdef GNU_COMPATIBLE
+ current_dash,
+#endif
+ current_argv);
+ /*
+ * XXX: GNU sets optopt to val regardless of flag
+ */
+ if (long_options[match].flag == NULL)
+ optopt = long_options[match].val;
+ else
+ optopt = 0;
+ --optind;
+ return (BADARG);
+ }
+ } else { /* unknown option */
+ if (short_too) {
+ --optind;
+ return (-1);
+ }
+ if (PRINT_ERROR)
+ warnx(illoptstring,
+#ifdef GNU_COMPATIBLE
+ current_dash,
+#endif
+ current_argv);
+ optopt = 0;
+ return (BADCH);
+ }
+ if (idx)
+ *idx = match;
+ if (long_options[match].flag) {
+ *long_options[match].flag = long_options[match].val;
+ return (0);
+ } else
+ return (long_options[match].val);
+}
+
+/*
+ * getopt_internal --
+ * Parse argc/argv argument vector. Called by user level routines.
+ */
+static int
+getopt_internal(int nargc, char * const *nargv, const char *options,
+ const struct option *long_options, int *idx, int flags)
+{
+ char *oli; /* option letter list index */
+ int optchar, short_too;
+ int posixly_correct; /* no static, can be changed on the fly */
+
+ if (options == NULL)
+ return (-1);
+
+ /*
+ * Disable GNU extensions if POSIXLY_CORRECT is set or options
+ * string begins with a '+'.
+ */
+ posixly_correct = (getenv("POSIXLY_CORRECT") != NULL);
+#ifdef GNU_COMPATIBLE
+ if (*options == '-')
+ flags |= FLAG_ALLARGS;
+ else if (posixly_correct || *options == '+')
+ flags &= ~FLAG_PERMUTE;
+#else
+ if (posixly_correct || *options == '+')
+ flags &= ~FLAG_PERMUTE;
+ else if (*options == '-')
+ flags |= FLAG_ALLARGS;
+#endif
+ if (*options == '+' || *options == '-')
+ options++;
+
+ /*
+ * XXX Some GNU programs (like cvs) set optind to 0 instead of
+ * XXX using optreset. Work around this braindamage.
+ */
+ if (optind == 0)
+ optind = 1;
+
+ optarg = NULL;
+start:
+ if (!*place) { /* update scanning pointer */
+ if (optind >= nargc) { /* end of argument vector */
+ place = EMSG;
+ if (nonopt_end != -1) {
+ /* do permutation, if we have to */
+ permute_args(nonopt_start, nonopt_end,
+ optind, nargv);
+ optind -= nonopt_end - nonopt_start;
+ }
+ else if (nonopt_start != -1) {
+ /*
+ * If we skipped non-options, set optind
+ * to the first of them.
+ */
+ optind = nonopt_start;
+ }
+ nonopt_start = nonopt_end = -1;
+ return (-1);
+ }
+ if (*(place = nargv[optind]) != '-' ||
+#ifdef GNU_COMPATIBLE
+ place[1] == '\0') {
+#else
+ (place[1] == '\0' && strchr(options, '-') == NULL)) {
+#endif
+ place = EMSG; /* found non-option */
+ if (flags & FLAG_ALLARGS) {
+ /*
+ * GNU extension:
+ * return non-option as argument to option 1
+ */
+ optarg = nargv[optind++];
+ return (INORDER);
+ }
+ if (!(flags & FLAG_PERMUTE)) {
+ /*
+ * If no permutation wanted, stop parsing
+ * at first non-option.
+ */
+ return (-1);
+ }
+ /* do permutation */
+ if (nonopt_start == -1)
+ nonopt_start = optind;
+ else if (nonopt_end != -1) {
+ permute_args(nonopt_start, nonopt_end,
+ optind, nargv);
+ nonopt_start = optind -
+ (nonopt_end - nonopt_start);
+ nonopt_end = -1;
+ }
+ optind++;
+ /* process next argument */
+ goto start;
+ }
+ if (nonopt_start != -1 && nonopt_end == -1)
+ nonopt_end = optind;
+
+ /*
+ * If we have "-" do nothing, if "--" we are done.
+ */
+ if (place[1] != '\0' && *++place == '-' && place[1] == '\0') {
+ optind++;
+ place = EMSG;
+ /*
+ * We found an option (--), so if we skipped
+ * non-options, we have to permute.
+ */
+ if (nonopt_end != -1) {
+ permute_args(nonopt_start, nonopt_end,
+ optind, nargv);
+ optind -= nonopt_end - nonopt_start;
+ }
+ nonopt_start = nonopt_end = -1;
+ return (-1);
+ }
+ }
+
+ /*
+ * Check long options if:
+ * 1) we were passed some
+ * 2) the arg is not just "-"
+ * 3) either the arg starts with -- we are getopt_long_only()
+ */
+ if (long_options != NULL && place != nargv[optind] &&
+ (*place == '-' || (flags & FLAG_LONGONLY))) {
+ short_too = 0;
+#ifdef GNU_COMPATIBLE
+ dash_prefix = D_PREFIX;
+#endif
+ if (*place == '-') {
+ place++; /* --foo long option */
+#ifdef GNU_COMPATIBLE
+ dash_prefix = DD_PREFIX;
+#endif
+ } else if (*place != ':' && strchr(options, *place) != NULL)
+ short_too = 1; /* could be short option too */
+
+ optchar = parse_long_options(nargv, options, long_options,
+ idx, short_too, flags);
+ if (optchar != -1) {
+ place = EMSG;
+ return (optchar);
+ }
+ }
+
+ if ((optchar = (int)*place++) == (int)':' ||
+ (optchar == (int)'-' && *place != '\0') ||
+ (oli = strchr(options, optchar)) == NULL) {
+ /*
+ * If the user specified "-" and '-' isn't listed in
+ * options, return -1 (non-option) as per POSIX.
+ * Otherwise, it is an unknown option character (or ':').
+ */
+ if (optchar == (int)'-' && *place == '\0')
+ return (-1);
+ if (!*place)
+ ++optind;
+#ifdef GNU_COMPATIBLE
+ if (PRINT_ERROR)
+ warnx(posixly_correct ? illoptchar : gnuoptchar,
+ optchar);
+#else
+ if (PRINT_ERROR)
+ warnx(illoptchar, optchar);
+#endif
+ optopt = optchar;
+ return (BADCH);
+ }
+ if (long_options != NULL && optchar == 'W' && oli[1] == ';') {
+ /* -W long-option */
+ if (*place) /* no space */
+ /* NOTHING */;
+ else if (++optind >= nargc) { /* no arg */
+ place = EMSG;
+ if (PRINT_ERROR)
+ warnx(recargchar, optchar);
+ optopt = optchar;
+ return (BADARG);
+ } else /* white space */
+ place = nargv[optind];
+#ifdef GNU_COMPATIBLE
+ dash_prefix = W_PREFIX;
+#endif
+ optchar = parse_long_options(nargv, options, long_options,
+ idx, 0, flags);
+ place = EMSG;
+ return (optchar);
+ }
+ if (*++oli != ':') { /* doesn't take argument */
+ if (!*place)
+ ++optind;
+ } else { /* takes (optional) argument */
+ optarg = NULL;
+ if (*place) { /* no white space */
+DIAG_OFF_CAST_QUAL
+ optarg = (char *)place;
+DIAG_ON_CAST_QUAL
+ } else if (oli[1] != ':') { /* arg not optional */
+ if (++optind >= nargc) { /* no arg */
+ place = EMSG;
+ if (PRINT_ERROR)
+ warnx(recargchar, optchar);
+ optopt = optchar;
+ return (BADARG);
+ } else
+ optarg = nargv[optind];
+ }
+ place = EMSG;
+ ++optind;
+ }
+ /* dump back option letter */
+ return (optchar);
+}
+
+#ifdef REPLACE_GETOPT
+/*
+ * getopt --
+ * Parse argc/argv argument vector.
+ *
+ * [eventually this will replace the BSD getopt]
+ */
+int
+getopt(int nargc, char * const *nargv, const char *options)
+{
+
+ /*
+ * We don't pass FLAG_PERMUTE to getopt_internal() since
+ * the BSD getopt(3) (unlike GNU) has never done this.
+ *
+ * Furthermore, since many privileged programs call getopt()
+ * before dropping privileges it makes sense to keep things
+ * as simple (and bug-free) as possible.
+ */
+ return (getopt_internal(nargc, nargv, options, NULL, NULL, 0));
+}
+#endif /* REPLACE_GETOPT */
+
+/*
+ * getopt_long --
+ * Parse argc/argv argument vector.
+ */
+int
+getopt_long(int nargc, char * const *nargv, const char *options,
+ const struct option *long_options, int *idx)
+{
+
+ return (getopt_internal(nargc, nargv, options, long_options, idx,
+ FLAG_PERMUTE));
+}
+
+/*
+ * getopt_long_only --
+ * Parse argc/argv argument vector.
+ */
+int
+getopt_long_only(int nargc, char * const *nargv, const char *options,
+ const struct option *long_options, int *idx)
+{
+
+ return (getopt_internal(nargc, nargv, options, long_options, idx,
+ FLAG_PERMUTE|FLAG_LONGONLY));
+}
diff --git a/missing/getopt_long.h b/missing/getopt_long.h
new file mode 100644
index 0000000..af97965
--- /dev/null
+++ b/missing/getopt_long.h
@@ -0,0 +1,66 @@
+/* $NetBSD: getopt.h,v 1.4 2000/07/07 10:43:54 ad Exp $ */
+/* $FreeBSD$ */
+
+/*-
+ * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Dieter Baron and Thomas Klausner.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ND_GETOPT_LONG_H_
+#define ND_GETOPT_LONG_H_
+
+/*
+ * GNU-like getopt_long()/getopt_long_only() with 4.4BSD optreset extension.
+ * getopt() is declared here too for GNU programs.
+ */
+#define no_argument 0
+#define required_argument 1
+#define optional_argument 2
+
+struct option {
+ /* name of long option */
+ const char *name;
+ /*
+ * one of no_argument, required_argument, and optional_argument:
+ * whether option takes an argument
+ */
+ int has_arg;
+ /* if not NULL, set *flag to val when option found */
+ int *flag;
+ /* if flag not NULL, value to set *flag to; else return value */
+ int val;
+};
+
+int getopt_long(int, char * const *, const char *,
+ const struct option *, int *);
+int getopt_long_only(int, char * const *, const char *,
+ const struct option *, int *);
+
+extern char *optarg; /* getopt(3) external variables */
+extern int optind, opterr, optopt;
+
+#endif /* ! ND_GETOPT_LONG_H_ */
diff --git a/missing/getservent.c b/missing/getservent.c
new file mode 100644
index 0000000..39cee06
--- /dev/null
+++ b/missing/getservent.c
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 1983, 1993 The Regents of the University of California.
+ * Copyright (c) 1993 Digital Equipment Corporation.
+ * Copyright (c) 2012 G. Vanem <gvanem@yahoo.no>.
+ * Copyright (c) 2017 Ali Abdulkadir <autostart.ini@gmail.com>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <netdissect-stdinc.h>
+#include <getservent.h>
+
+static FILE *servf = NULL;
+static char line[BUFSIZ+1];
+static struct servent serv;
+static char *serv_aliases[MAXALIASES];
+int _serv_stayopen;
+const char *etc_path(const char *file);
+
+/*
+* Check if <file> exists in the current directory and, if so, return it.
+* Else return either "%SYSTEMROOT%\System32\drivers\etc\<file>"
+* or $PREFIX/etc/<file>.
+* "<file>" is aka __PATH_SERVICES (aka "services" on Windows and
+* "/etc/services" on other platforms that would need this).
+*/
+const char *etc_path(const char *file)
+{
+ const char *env = getenv(__PATH_SYSROOT);
+ static char path[_MAX_PATH];
+
+ /* see if "<file>" exists locally or whether __PATH_SYSROOT is valid */
+ if (fopen(file, "r") || !env)
+ return (file);
+ else
+#ifdef _WIN32
+ snprintf(path, sizeof(path), "%s%s%s", env, __PATH_ETC_INET, file);
+#else
+ snprintf(path, sizeof(path), "%s%s", env, file);
+#endif
+ return (path);
+}
+
+void
+setservent(int f)
+{
+ if (servf == NULL)
+ servf = fopen(etc_path(__PATH_SERVICES), "r");
+ else
+ rewind(servf);
+ _serv_stayopen |= f;
+}
+
+void
+endservent(void)
+{
+ if (servf) {
+ fclose(servf);
+ servf = NULL;
+ }
+ _serv_stayopen = 0;
+}
+
+struct servent *
+getservent(void)
+{
+ char *p;
+ char *cp, **q;
+
+ if (servf == NULL && (servf = fopen(etc_path(__PATH_SERVICES), "r")) == NULL)
+ return (NULL);
+
+again:
+ if ((p = fgets(line, BUFSIZ, servf)) == NULL)
+ return (NULL);
+ if (*p == '#')
+ goto again;
+ cp = strpbrk(p, "#\n");
+ if (cp == NULL)
+ goto again;
+ *cp = '\0';
+ serv.s_name = p;
+ p = strpbrk(p, " \t");
+ if (p == NULL)
+ goto again;
+ *p++ = '\0';
+ while (*p == ' ' || *p == '\t')
+ p++;
+ cp = strpbrk(p, ",/");
+ if (cp == NULL)
+ goto again;
+ *cp++ = '\0';
+ serv.s_port = htons((u_short)atoi(p));
+ serv.s_proto = cp;
+ q = serv.s_aliases = serv_aliases;
+ cp = strpbrk(cp, " \t");
+ if (cp != NULL)
+ *cp++ = '\0';
+ while (cp && *cp) {
+ if (*cp == ' ' || *cp == '\t') {
+ cp++;
+ continue;
+ }
+ if (q < &serv_aliases[MAXALIASES - 1])
+ *q++ = cp;
+ cp = strpbrk(cp, " \t");
+ if (cp != NULL)
+ *cp++ = '\0';
+ }
+ *q = NULL;
+ return (&serv);
+}
diff --git a/missing/pcap_dump_ftell.c b/missing/pcap_dump_ftell.c
new file mode 100644
index 0000000..ddc5166
--- /dev/null
+++ b/missing/pcap_dump_ftell.c
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the Computer Systems
+ * Engineering Group at Lawrence Berkeley Laboratory.
+ * 4. Neither the name of the University nor of the Laboratory may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include <stdio.h>
+#include <pcap.h>
+
+#include "pcap-missing.h"
+
+long
+pcap_dump_ftell(pcap_dumper_t *p)
+{
+ /* FIXME: Using pcap_dump_file(p) would be a better style. That would
+ * require to test if pcap_dump_file() is available, and to substitute it,
+ * if it is not.
+ */
+ return (ftell((FILE *)p));
+}
diff --git a/missing/snprintf.c b/missing/snprintf.c
new file mode 100644
index 0000000..dfff6ee
--- /dev/null
+++ b/missing/snprintf.c
@@ -0,0 +1,510 @@
+/*
+ * Copyright (c) 1995-1999 Kungliga Tekniska Högskolan
+ * (Royal Institute of Technology, Stockholm, Sweden).
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the Institute nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/types.h>
+
+#include "netdissect.h"
+
+enum format_flags {
+ minus_flag = 1,
+ plus_flag = 2,
+ space_flag = 4,
+ alternate_flag = 8,
+ zero_flag = 16
+};
+
+/*
+ * Common state
+ */
+
+struct state {
+ unsigned char *str;
+ unsigned char *s;
+ unsigned char *theend;
+ size_t sz;
+ size_t max_sz;
+ int (*append_char)(struct state *, unsigned char);
+ int (*reserve)(struct state *, size_t);
+ /* XXX - methods */
+};
+
+#if 0
+static int
+as_reserve (struct state *state, size_t n)
+{
+ if (state->s + n > state->theend) {
+ int off = state->s - state->str;
+ unsigned char *tmp;
+
+ if (state->max_sz && state->sz >= state->max_sz)
+ return 1;
+
+ state->sz = max(state->sz * 2, state->sz + n);
+ if (state->max_sz)
+ state->sz = min(state->sz, state->max_sz);
+ tmp = realloc (state->str, state->sz);
+ if (tmp == NULL)
+ return 1;
+ state->str = tmp;
+ state->s = state->str + off;
+ state->theend = state->str + state->sz - 1;
+ }
+ return 0;
+}
+
+static int
+as_append_char (struct state *state, unsigned char c)
+{
+ if(as_reserve (state, 1))
+ return 1;
+ else {
+ *state->s++ = c;
+ return 0;
+ }
+}
+#endif
+
+static int
+append_number(struct state *state,
+ unsigned long num, unsigned base, char *rep,
+ int width, int prec, int flags, int minusp)
+{
+ int len = 0;
+ int i;
+
+ /* given precision, ignore zero flag */
+ if(prec != -1)
+ flags &= ~zero_flag;
+ else
+ prec = 1;
+ /* zero value with zero precision -> "" */
+ if(prec == 0 && num == 0)
+ return 0;
+ do{
+ if((*state->append_char)(state, rep[num % base]))
+ return 1;
+ len++;
+ num /= base;
+ }while(num);
+ prec -= len;
+ /* pad with prec zeros */
+ while(prec-- > 0){
+ if((*state->append_char)(state, '0'))
+ return 1;
+ len++;
+ }
+ /* add length of alternate prefix (added later) to len */
+ if(flags & alternate_flag && (base == 16 || base == 8))
+ len += base / 8;
+ /* pad with zeros */
+ if(flags & zero_flag){
+ width -= len;
+ if(minusp || (flags & space_flag) || (flags & plus_flag))
+ width--;
+ while(width-- > 0){
+ if((*state->append_char)(state, '0'))
+ return 1;
+ len++;
+ }
+ }
+ /* add alternate prefix */
+ if(flags & alternate_flag && (base == 16 || base == 8)){
+ if(base == 16)
+ if((*state->append_char)(state, rep[10] + 23)) /* XXX */
+ return 1;
+ if((*state->append_char)(state, '0'))
+ return 1;
+ }
+ /* add sign */
+ if(minusp){
+ if((*state->append_char)(state, '-'))
+ return 1;
+ len++;
+ } else if(flags & plus_flag) {
+ if((*state->append_char)(state, '+'))
+ return 1;
+ len++;
+ } else if(flags & space_flag) {
+ if((*state->append_char)(state, ' '))
+ return 1;
+ len++;
+ }
+ if(flags & minus_flag)
+ /* swap before padding with spaces */
+ for(i = 0; i < len / 2; i++){
+ char c = state->s[-i-1];
+ state->s[-i-1] = state->s[-len+i];
+ state->s[-len+i] = c;
+ }
+ width -= len;
+ while(width-- > 0){
+ if((*state->append_char)(state, ' '))
+ return 1;
+ len++;
+ }
+ if(!(flags & minus_flag))
+ /* swap after padding with spaces */
+ for(i = 0; i < len / 2; i++){
+ char c = state->s[-i-1];
+ state->s[-i-1] = state->s[-len+i];
+ state->s[-len+i] = c;
+ }
+
+ return 0;
+}
+
+static int
+append_string (struct state *state,
+ unsigned char *arg,
+ int width,
+ int prec,
+ int flags)
+{
+ if(prec != -1)
+ width -= prec;
+ else
+ width -= strlen((char *)arg);
+ if(!(flags & minus_flag))
+ while(width-- > 0)
+ if((*state->append_char) (state, ' '))
+ return 1;
+ if (prec != -1) {
+ while (*arg && prec--)
+ if ((*state->append_char) (state, *arg++))
+ return 1;
+ } else {
+ while (*arg)
+ if ((*state->append_char) (state, *arg++))
+ return 1;
+ }
+ if(flags & minus_flag)
+ while(width-- > 0)
+ if((*state->append_char) (state, ' '))
+ return 1;
+ return 0;
+}
+
+static int
+append_char(struct state *state,
+ unsigned char arg,
+ int width,
+ int flags)
+{
+ while(!(flags & minus_flag) && --width > 0)
+ if((*state->append_char) (state, ' '))
+ return 1;
+
+ if((*state->append_char) (state, arg))
+ return 1;
+ while((flags & minus_flag) && --width > 0)
+ if((*state->append_char) (state, ' '))
+ return 1;
+
+ return 0;
+}
+
+/*
+ * This can't be made into a function...
+ */
+
+#define PARSE_INT_FORMAT(res, arg, unsig) \
+if (long_flag) \
+ res = (unsig long)va_arg(arg, unsig long); \
+else if (short_flag) \
+ res = (unsig short)va_arg(arg, unsig int); \
+else \
+ res = (unsig int)va_arg(arg, unsig int)
+
+/*
+ * zyxprintf - return 0 or -1
+ */
+
+static int
+xyzprintf (struct state *state, const char *char_format, va_list ap)
+{
+ const unsigned char *format = (const unsigned char *)char_format;
+ unsigned char c;
+
+ while((c = *format++)) {
+ if (c == '%') {
+ int flags = 0;
+ int width = 0;
+ int prec = -1;
+ int long_flag = 0;
+ int short_flag = 0;
+
+ /* flags */
+ while((c = *format++)){
+ if(c == '-')
+ flags |= minus_flag;
+ else if(c == '+')
+ flags |= plus_flag;
+ else if(c == ' ')
+ flags |= space_flag;
+ else if(c == '#')
+ flags |= alternate_flag;
+ else if(c == '0')
+ flags |= zero_flag;
+ else
+ break;
+ }
+
+ if((flags & space_flag) && (flags & plus_flag))
+ flags ^= space_flag;
+
+ if((flags & minus_flag) && (flags & zero_flag))
+ flags ^= zero_flag;
+
+ /* width */
+ if (isdigit(c))
+ do {
+ width = width * 10 + c - '0';
+ c = *format++;
+ } while(isdigit(c));
+ else if(c == '*') {
+ width = va_arg(ap, int);
+ c = *format++;
+ }
+
+ /* precision */
+ if (c == '.') {
+ prec = 0;
+ c = *format++;
+ if (isdigit(c))
+ do {
+ prec = prec * 10 + c - '0';
+ c = *format++;
+ } while(isdigit(c));
+ else if (c == '*') {
+ prec = va_arg(ap, int);
+ c = *format++;
+ }
+ }
+
+ /* size */
+
+ if (c == 'h') {
+ short_flag = 1;
+ c = *format++;
+ } else if (c == 'l') {
+ long_flag = 1;
+ c = *format++;
+ }
+
+ switch (c) {
+ case 'c' :
+ if(append_char(state, va_arg(ap, int), width, flags))
+ return -1;
+ break;
+ case 's' :
+ if (append_string(state,
+ va_arg(ap, unsigned char*),
+ width,
+ prec,
+ flags))
+ return -1;
+ break;
+ case 'd' :
+ case 'i' : {
+ long arg;
+ unsigned long num;
+ int minusp = 0;
+
+ PARSE_INT_FORMAT(arg, ap, signed);
+
+ if (arg < 0) {
+ minusp = 1;
+ num = -arg;
+ } else
+ num = arg;
+
+ if (append_number (state, num, 10, "0123456789",
+ width, prec, flags, minusp))
+ return -1;
+ break;
+ }
+ case 'u' : {
+ unsigned long arg;
+
+ PARSE_INT_FORMAT(arg, ap, unsigned);
+
+ if (append_number (state, arg, 10, "0123456789",
+ width, prec, flags, 0))
+ return -1;
+ break;
+ }
+ case 'o' : {
+ unsigned long arg;
+
+ PARSE_INT_FORMAT(arg, ap, unsigned);
+
+ if (append_number (state, arg, 010, "01234567",
+ width, prec, flags, 0))
+ return -1;
+ break;
+ }
+ case 'x' : {
+ unsigned long arg;
+
+ PARSE_INT_FORMAT(arg, ap, unsigned);
+
+ if (append_number (state, arg, 0x10, "0123456789abcdef",
+ width, prec, flags, 0))
+ return -1;
+ break;
+ }
+ case 'X' :{
+ unsigned long arg;
+
+ PARSE_INT_FORMAT(arg, ap, unsigned);
+
+ if (append_number (state, arg, 0x10, "0123456789ABCDEF",
+ width, prec, flags, 0))
+ return -1;
+ break;
+ }
+ case 'p' : {
+ unsigned long arg = (unsigned long)va_arg(ap, void*);
+
+ if (append_number (state, arg, 0x10, "0123456789ABCDEF",
+ width, prec, flags, 0))
+ return -1;
+ break;
+ }
+ case 'n' : {
+ int *arg = va_arg(ap, int *);
+ *arg = state->s - state->str;
+ break;
+ }
+ case '\0' :
+ --format;
+ /* FALLTHROUGH */
+ case '%' :
+ if ((*state->append_char)(state, c))
+ return -1;
+ break;
+ default :
+ if ( (*state->append_char)(state, '%')
+ || (*state->append_char)(state, c))
+ return -1;
+ break;
+ }
+ } else
+ if ((*state->append_char) (state, c))
+ return -1;
+ }
+ return 0;
+}
+
+#if 0
+#ifndef HAVE_ASPRINTF
+int
+asprintf (char **ret, const char *format, ...)
+{
+ va_list args;
+ int val;
+
+ va_start(args, format);
+ val = vasprintf (ret, format, args);
+
+#ifdef PARANOIA
+ {
+ int ret2;
+ char *tmp;
+ tmp = malloc (val + 1);
+ if (tmp == NULL)
+ abort ();
+
+ ret2 = vsprintf (tmp, format, args);
+ if (val != ret2 || strcmp(*ret, tmp))
+ abort ();
+ free (tmp);
+ }
+#endif
+
+ va_end(args);
+ return val;
+}
+#endif
+
+#ifndef HAVE_VASNPRINTF
+int
+nd_vasnprintf (char **ret, size_t max_sz, const char *format, va_list args)
+{
+ int st;
+ size_t len;
+ struct state state;
+
+ state.max_sz = max_sz;
+ state.sz = 1;
+ state.str = malloc(state.sz);
+ if (state.str == NULL) {
+ *ret = NULL;
+ return -1;
+ }
+ state.s = state.str;
+ state.theend = state.s + state.sz - 1;
+ state.append_char = as_append_char;
+ state.reserve = as_reserve;
+
+ st = xyzprintf (&state, format, args);
+ if (st) {
+ free (state.str);
+ *ret = NULL;
+ return -1;
+ } else {
+ char *tmp;
+
+ *state.s = '\0';
+ len = state.s - state.str;
+ tmp = realloc (state.str, len+1);
+ if (tmp == NULL) {
+ free (state.str);
+ *ret = NULL;
+ return -1;
+ }
+ *ret = tmp;
+ return len;
+ }
+}
+#endif
+#endif
diff --git a/missing/strdup.c b/missing/strdup.c
new file mode 100644
index 0000000..9cbf35a
--- /dev/null
+++ b/missing/strdup.c
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "netdissect.h"
+
+char *
+strdup(str)
+ const char *str;
+{
+ size_t len;
+ char *copy;
+
+ len = strlen(str) + 1;
+ if ((copy = malloc(len)) == NULL)
+ return (NULL);
+ memcpy(copy, str, len);
+ return (copy);
+}
diff --git a/missing/strlcat.c b/missing/strlcat.c
new file mode 100644
index 0000000..fab7d04
--- /dev/null
+++ b/missing/strlcat.c
@@ -0,0 +1,73 @@
+/* $NetBSD: strlcat.c,v 1.5 1999/09/20 04:39:47 lukem Exp $ */
+/* from OpenBSD: strlcat.c,v 1.2 1999/06/17 16:28:58 millert Exp */
+
+/*
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <netdissect-stdinc.h>
+
+#include <string.h>
+
+#include "netdissect.h"
+
+/*
+ * Appends src to string dst of size siz (unlike strncat, siz is the
+ * full size of dst, not space left). At most siz-1 characters
+ * will be copied. Always NUL terminates (unless siz == 0).
+ * Returns strlen(src); if retval >= siz, truncation occurred.
+ */
+size_t
+strlcat(char *dst, const char *src, size_t siz)
+{
+ char *d = dst;
+ const char *s = src;
+ size_t n = siz;
+ size_t dlen;
+
+ /* Find the end of dst and adjust bytes left but don't go past end */
+ while (*d != '\0' && n-- != 0)
+ d++;
+ dlen = d - dst;
+ n = siz - dlen;
+
+ if (n == 0)
+ return(dlen + strlen(s));
+ while (*s != '\0') {
+ if (n != 1) {
+ *d++ = *s;
+ n--;
+ }
+ s++;
+ }
+ *d = '\0';
+
+ return(dlen + (s - src)); /* count does not include NUL */
+}
diff --git a/missing/strlcpy.c b/missing/strlcpy.c
new file mode 100644
index 0000000..9a0b6e6
--- /dev/null
+++ b/missing/strlcpy.c
@@ -0,0 +1,70 @@
+/* $NetBSD: strlcpy.c,v 1.5 1999/09/20 04:39:47 lukem Exp $ */
+/* from OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp */
+
+/*
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <netdissect-stdinc.h>
+
+#include <string.h>
+
+#include "netdissect.h"
+
+/*
+ * Copy src to string dst of size siz. At most siz-1 characters
+ * will be copied. Always NUL terminates (unless siz == 0).
+ * Returns strlen(src); if retval >= siz, truncation occurred.
+ */
+size_t
+strlcpy(char *dst, const char *src, size_t siz)
+{
+ char *d = dst;
+ const char *s = src;
+ size_t n = siz;
+
+ /* Copy as many bytes as will fit */
+ if (n != 0 && --n != 0) {
+ do {
+ if ((*d++ = *s++) == 0)
+ break;
+ } while (--n != 0);
+ }
+
+ /* Not enough room in dst, add NUL and traverse rest of src */
+ if (n == 0) {
+ if (siz != 0)
+ *d = '\0'; /* NUL-terminate dst */
+ while (*s++)
+ ;
+ }
+
+ return(s - src - 1); /* count does not include NUL */
+}
diff --git a/missing/strsep.c b/missing/strsep.c
new file mode 100644
index 0000000..05f10bc
--- /dev/null
+++ b/missing/strsep.c
@@ -0,0 +1,80 @@
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <netdissect-stdinc.h>
+
+#include <string.h>
+
+#include "netdissect.h"
+
+/*
+ * Get next token from string *stringp, where tokens are possibly-empty
+ * strings separated by characters from delim.
+ *
+ * Writes NULs into the string at *stringp to end tokens.
+ * delim need not remain constant from call to call.
+ * On return, *stringp points past the last NUL written (if there might
+ * be further tokens), or is NULL (if there are definitely no more tokens).
+ *
+ * If *stringp is NULL, strsep returns NULL.
+ */
+char *
+strsep(char **stringp, const char *delim)
+{
+ char *s;
+ const char *spanp;
+ int c, sc;
+ char *tok;
+
+ if ((s = *stringp) == NULL)
+ return (NULL);
+ for (tok = s;;) {
+ c = *s++;
+ spanp = delim;
+ do {
+ if ((sc = *spanp++) == c) {
+ if (c == 0)
+ s = NULL;
+ else
+ s[-1] = 0;
+ *stringp = s;
+ return (tok);
+ }
+ } while (sc != 0);
+ }
+ /* NOTREACHED */
+}
diff --git a/mkdep b/mkdep
new file mode 100755
index 0000000..caf547e
--- /dev/null
+++ b/mkdep
@@ -0,0 +1,116 @@
+#!/bin/sh -
+#
+# Copyright (c) 1994, 1996
+# The Regents of the University of California. All rights reserved.
+#
+# Redistribution and use in source and binary forms are permitted
+# provided that this notice is preserved and that due credit is given
+# to the University of California at Berkeley. The name of the University
+# may not be used to endorse or promote products derived from this
+# software without specific prior written permission. This software
+# is provided ``as is'' without express or implied warranty.
+#
+# @(#)mkdep.sh 5.11 (Berkeley) 5/5/88
+#
+
+MAKE=Makefile # default makefile name is "Makefile"
+CC=cc # default C compiler is "cc"
+DEPENDENCY_CFLAG=-M # default dependency-generation flag is -M
+SOURCE_DIRECTORY=. # default source directory is the current directory
+
+# No command-line flags seen yet.
+flags=""
+while :
+ do case "$1" in
+ # -c allows you to specify the C compiler
+ -c)
+ CC=$2
+ shift; shift ;;
+
+ # -f allows you to select a makefile name
+ -f)
+ MAKE=$2
+ shift; shift ;;
+
+ # -m allows you to specify the dependency-generation flag
+ -m)
+ DEPENDENCY_CFLAG=$2
+ shift; shift ;;
+
+ # the -p flag produces "program: program.c" style dependencies
+ # so .o's don't get produced
+ -p)
+ SED='s;\.o;;'
+ shift ;;
+
+ # -s allows you to specify the source directory
+ -s)
+ SOURCE_DIRECTORY=$2
+ shift; shift ;;
+
+ # other command-line flag
+ -*)
+ flags="$flags $1"
+ shift ;;
+
+ *)
+ break ;;
+ esac
+done
+
+if [ $# = 0 ] ; then
+ echo 'usage: mkdep [-p] [-c cc] [-f makefile] [-m dependency-cflag] [-s source-directory] [flags] file ...'
+ exit 1
+fi
+
+if [ ! -w $MAKE ]; then
+ echo "mkdep: no writeable file \"$MAKE\""
+ exit 1
+fi
+
+TMP=/tmp/mkdep$$
+
+trap 'rm -f $TMP ; exit 1' 1 2 3 13 15
+
+cp $MAKE ${MAKE}.bak
+
+sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP
+
+cat << _EOF_ >> $TMP
+# DO NOT DELETE THIS LINE -- mkdep uses it.
+# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
+
+_EOF_
+
+# If your compiler doesn't have -M, add it. If you can't, the next two
+# lines will try and replace the "cc -M". The real problem is that this
+# hack can't deal with anything that requires a search path, and doesn't
+# even try for anything using bracket (<>) syntax.
+#
+# grep -E '^#include[[:blank:]]*".*"' /dev/null $* |
+# sed -e 's/:[^"]*"\([^"]*\)".*/: \1/' -e 's/\.c/.o/' |
+
+#
+# Construct a list of source files with paths relative to the source directory.
+#
+sources=""
+for srcfile in $*
+do
+ sources="$sources $SOURCE_DIRECTORY/$srcfile"
+done
+
+# XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait"
+$CC $DEPENDENCY_CFLAG $flags $sources |
+sed "
+ s; \./; ;g
+ $SED" >> $TMP
+
+cat << _EOF_ >> $TMP
+
+# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
+_EOF_
+
+# copy to preserve permissions
+cp $TMP $MAKE
+rm -f ${MAKE}.bak $TMP
+exit 0
diff --git a/mpls.h b/mpls.h
new file mode 100644
index 0000000..d7e8fc1
--- /dev/null
+++ b/mpls.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2001 WIDE Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#define LABEL_MASK 0xfffff000
+#define LABEL_SHIFT 12
+#define TC_MASK 0x00000e00
+#define TC_SHIFT 9
+#define STACK_MASK 0x00000100
+#define STACK_SHIFT 8
+#define TTL_MASK 0x000000ff
+#define TTL_SHIFT 0
+
+#define MPLS_LABEL(x) (((x) & LABEL_MASK) >> LABEL_SHIFT)
+#define MPLS_TC(x) (((x) & TC_MASK) >> TC_SHIFT)
+#define MPLS_STACK(x) (((x) & STACK_MASK) >> STACK_SHIFT)
+#define MPLS_TTL(x) (((x) & TTL_MASK) >> TTL_SHIFT)
diff --git a/nameser.h b/nameser.h
new file mode 100644
index 0000000..2a1854f
--- /dev/null
+++ b/nameser.h
@@ -0,0 +1,331 @@
+/*
+ * Copyright (c) 1983, 1989, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)nameser.h 8.2 (Berkeley) 2/16/94
+ * -
+ * Portions Copyright (c) 1993 by Digital Equipment Corporation.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies, and that
+ * the name of Digital Equipment Corporation not be used in advertising or
+ * publicity pertaining to distribution of the document or software without
+ * specific, written prior permission.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
+ * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ * -
+ * --Copyright--
+ */
+
+#ifndef _NAMESER_H_
+#define _NAMESER_H_
+
+#include <sys/types.h>
+
+/*
+ * Define constants based on rfc883
+ */
+#define PACKETSZ 512 /* maximum packet size */
+#define MAXDNAME 256 /* maximum domain name */
+#define MAXCDNAME 255 /* maximum compressed domain name */
+#define MAXLABEL 63 /* maximum length of domain label */
+ /* Number of bytes of fixed size data in query structure */
+#define QFIXEDSZ 4
+ /* number of bytes of fixed size data in resource record */
+#define RRFIXEDSZ 10
+
+/*
+ * Currently defined opcodes
+ */
+#define QUERY 0x0 /* standard query */
+#define IQUERY 0x1 /* inverse query */
+#define STATUS 0x2 /* nameserver status query */
+#if 0
+#define xxx 0x3 /* 0x3 reserved */
+#endif
+ /* non standard - supports ALLOW_UPDATES stuff from Mike Schwartz */
+#define UPDATEA 0x9 /* add resource record */
+#define UPDATED 0xa /* delete a specific resource record */
+#define UPDATEDA 0xb /* delete all named resource record */
+#define UPDATEM 0xc /* modify a specific resource record */
+#define UPDATEMA 0xd /* modify all named resource record */
+
+#define ZONEINIT 0xe /* initial zone transfer */
+#define ZONEREF 0xf /* incremental zone referesh */
+
+/*
+ * Undefine various #defines from various System V-flavored OSes (Solaris,
+ * SINIX, HP-UX) so the compiler doesn't whine that we redefine them.
+ */
+#ifdef T_NULL
+#undef T_NULL
+#endif
+#ifdef T_OPT
+#undef T_OPT
+#endif
+#ifdef T_UNSPEC
+#undef T_UNSPEC
+#endif
+#ifdef NOERROR
+#undef NOERROR
+#endif
+
+/*
+ * Currently defined response codes
+ */
+#define NOERROR 0 /* no error */
+#define FORMERR 1 /* format error */
+#define SERVFAIL 2 /* server failure */
+#define NXDOMAIN 3 /* non existent domain */
+#define NOTIMP 4 /* not implemented */
+#define REFUSED 5 /* query refused */
+ /* non standard */
+#define NOCHANGE 0xf /* update failed to change db */
+
+/*
+ * Type values for resources and queries
+ */
+#define T_A 1 /* host address */
+#define T_NS 2 /* authoritative server */
+#define T_MD 3 /* mail destination */
+#define T_MF 4 /* mail forwarder */
+#define T_CNAME 5 /* connonical name */
+#define T_SOA 6 /* start of authority zone */
+#define T_MB 7 /* mailbox domain name */
+#define T_MG 8 /* mail group member */
+#define T_MR 9 /* mail rename name */
+#define T_NULL 10 /* null resource record */
+#define T_WKS 11 /* well known service */
+#define T_PTR 12 /* domain name pointer */
+#define T_HINFO 13 /* host information */
+#define T_MINFO 14 /* mailbox information */
+#define T_MX 15 /* mail routing information */
+#define T_TXT 16 /* text strings */
+#define T_RP 17 /* responsible person */
+#define T_AFSDB 18 /* AFS cell database */
+#define T_X25 19 /* X_25 calling address */
+#define T_ISDN 20 /* ISDN calling address */
+#define T_RT 21 /* router */
+#define T_NSAP 22 /* NSAP address */
+#define T_NSAP_PTR 23 /* reverse lookup for NSAP */
+#define T_SIG 24 /* security signature */
+#define T_KEY 25 /* security key */
+#define T_PX 26 /* X.400 mail mapping */
+#define T_GPOS 27 /* geographical position (withdrawn) */
+#define T_AAAA 28 /* IP6 Address */
+#define T_LOC 29 /* Location Information */
+#define T_NXT 30 /* Next Valid Name in Zone */
+#define T_EID 31 /* Endpoint identifier */
+#define T_NIMLOC 32 /* Nimrod locator */
+#define T_SRV 33 /* Server selection */
+#define T_ATMA 34 /* ATM Address */
+#define T_NAPTR 35 /* Naming Authority PoinTeR */
+#define T_KX 36 /* Key Exchanger */
+#define T_CERT 37 /* Certificates in the DNS */
+#define T_A6 38 /* IP6 address */
+#define T_DNAME 39 /* non-terminal redirection */
+#define T_SINK 40 /* unknown */
+#define T_OPT 41 /* EDNS0 option (meta-RR) */
+#define T_APL 42 /* lists of address prefixes */
+#define T_DS 43 /* Delegation Signer */
+#define T_SSHFP 44 /* SSH Fingerprint */
+#define T_IPSECKEY 45 /* IPsec keying material */
+#define T_RRSIG 46 /* new security signature */
+#define T_NSEC 47 /* provable insecure information */
+#define T_DNSKEY 48 /* new security key */
+#define T_DHCID 49 /* DHCP IDentifier */
+#define T_NSEC3 50 /* Next SECure record v3 */
+#define T_NSEC3PARAM 51 /* NSEC3 PARAMeter */
+#define T_TLSA 52 /* TLS Authentication */
+#define T_SMIMEA 53 /* S/MIME Authentication */
+/* Unassigned */
+#define T_HIP 55 /* Host Identity Protocol */
+#define T_NINFO 56 /* zone status information */
+#define T_RKEY 57 /* Record encryption KEY */
+#define T_TALINK 58 /* Trust Anchor LINK */
+#define T_CDS 59 /* Child Delegation Signer */
+#define T_CDNSKEY 60 /* Child DNSKEY */
+#define T_OPENPGPKEY 61 /* OpenPGP KEY */
+#define T_CSYNC 62 /* Child to parent SYNCronization */
+#define T_ZONEMD 63 /* ZONE data Message Digest */
+#define T_SVCB 64 /* SerViCe Binding */
+#define T_HTTPS 65 /* HTTPS binding */
+ /* non standard */
+#define T_SPF 99 /* sender policy framework */
+#define T_UINFO 100 /* user (finger) information */
+#define T_UID 101 /* user ID */
+#define T_GID 102 /* group ID */
+#define T_UNSPEC 103 /* Unspecified format (binary data) */
+#define T_NID 104 /* Node IDentifier */
+#define T_L32 105 /* Locator 32-bit */
+#define T_L64 106 /* Locator 64-bit */
+#define T_LP 107 /* Locator Pointer */
+#define T_EUI48 108 /* an EUI-48 address */
+#define T_EUI64 109 /* an EUI-64 address */
+ /* Query type values which do not appear in resource records */
+#define T_TKEY 249 /* Transaction Key [RFC2930] */
+#define T_TSIG 250 /* Transaction Signature [RFC2845] */
+#define T_IXFR 251 /* incremental transfer [RFC1995] */
+#define T_AXFR 252 /* transfer zone of authority */
+#define T_MAILB 253 /* transfer mailbox records */
+#define T_MAILA 254 /* transfer mail agent records */
+#define T_ANY 255 /* wildcard match */
+#define T_URI 256 /* uri records [RFC7553] */
+#define T_CAA 257 /* Certification Authority Authorization */
+#define T_AVC 258 /* Application Visibility and Control */
+#define T_DOA 259 /* Digital Object Architecture */
+#define T_AMTRELAY 260 /* Automatic Multicast Tunneling RELAY */
+#define T_TA 32768 /* DNSSEC Trust Authorities */
+#define T_DLV 32769 /* DNSSEC Lookaside Validation */
+
+/*
+ * Values for class field
+ */
+
+#define C_IN 1 /* the arpa internet */
+#define C_CHAOS 3 /* for chaos net (MIT) */
+#define C_HS 4 /* for Hesiod name server (MIT) (XXX) */
+ /* Query class values which do not appear in resource records */
+#define C_ANY 255 /* wildcard match */
+#define C_QU 0x8000 /* mDNS QU flag in queries */
+#define C_CACHE_FLUSH 0x8000 /* mDNS cache flush flag in replies */
+
+/*
+ * Values for EDNS option types
+ */
+#define E_LLQ 1 /* long lived queries protocol */
+#define E_UL 2 /* dynamic dns update leases */
+#define E_NSID 3 /* name server identifier */
+#define E_DAU 5 /* signal DNSSEC algorithm understood */
+#define E_DHU 6 /* signal DS hash understood */
+#define E_N3U 7 /* signal NSEC3 hash understood */
+#define E_ECS 8 /* EDNS client subnet */
+#define E_EXPIRE 9 /* zone expiration */
+#define E_COOKIE 10 /* DNS cookies */
+#define E_KEEPALIVE 11 /* TCP keepalive */
+#define E_PADDING 12 /* pad DNS messages */
+#define E_CHAIN 13 /* chain DNS queries */
+#define E_KEYTAG 14 /* EDNS key tag */
+#define E_CLIENTTAG 16 /* EDNS client tag */
+#define E_SERVERTAG 17 /* EDNS server tag */
+
+/*
+ * Values for DNSSEC Algorithms
+ * https://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml
+ */
+
+#define A_DELETE 0
+#define A_RSAMD5 1
+#define A_DH 2
+#define A_DSA 3
+#define A_RSASHA1 5
+#define A_DSA_NSEC3_SHA1 6
+#define A_RSASHA1_NSEC3_SHA1 7
+#define A_RSASHA256 8
+#define A_RSASHA512 10
+#define A_ECC_GOST 12
+#define A_ECDSAP256SHA256 13
+#define A_ECDSAP384SHA384 14
+#define A_ED25519 15
+#define A_ED448 16
+#define A_INDIRECT 252
+#define A_PRIVATEDNS 253
+#define A_PRIVATEOID 254
+
+/*
+ * Values for NSEC3 algorithms
+ * https://www.iana.org/assignments/dnssec-nsec3-parameters/dnssec-nsec3-parameters.xhtml
+ */
+#define NSEC_SHA1 1
+
+/*
+ * Values for delegation signer algorithms
+ * https://www.iana.org/assignments/ds-rr-types/ds-rr-types.xhtml
+ */
+#define DS_SHA1 1
+#define DS_SHA256 2
+#define DS_GOST 3
+#define DS_SHA384 4
+
+
+/*
+ * Status return codes for T_UNSPEC conversion routines
+ */
+#define CONV_SUCCESS 0
+#define CONV_OVERFLOW -1
+#define CONV_BADFMT -2
+#define CONV_BADCKSUM -3
+#define CONV_BADBUFLEN -4
+
+/*
+ * Structure for query header.
+ */
+typedef struct {
+ nd_uint16_t id; /* query identification number */
+ nd_uint16_t flags; /* QR, Opcode, AA, TC, RD, RA, RCODE */
+ nd_uint16_t qdcount; /* number of question entries */
+ nd_uint16_t ancount; /* number of answer entries */
+ nd_uint16_t nscount; /* number of authority entries */
+ nd_uint16_t arcount; /* number of resource entries */
+} dns_header_t;
+
+/*
+ * Macros for subfields of flag fields.
+ */
+#define DNS_QR(flags) ((flags) & 0x8000) /* response flag */
+#define DNS_OPCODE(flags) (((flags) >> 11) & 0xF) /* purpose of message */
+#define DNS_AA(flags) (flags & 0x0400) /* authoritative answer */
+#define DNS_TC(flags) (flags & 0x0200) /* truncated message */
+#define DNS_RD(flags) (flags & 0x0100) /* recursion desired */
+#define DNS_RA(flags) (flags & 0x0080) /* recursion available */
+#define DNS_AD(flags) (flags & 0x0020) /* authentic data from named */
+#define DNS_CD(flags) (flags & 0x0010) /* checking disabled by resolver */
+#define DNS_RCODE(flags) (flags & 0x000F) /* response code */
+
+/*
+ * Defines for handling compressed domain names, EDNS0 labels, etc.
+ */
+#define TYPE_MASK 0xc0 /* mask for the type bits of the item */
+#define TYPE_INDIR 0xc0 /* 11.... - pointer */
+#define TYPE_RESERVED 0x80 /* 10.... - reserved */
+#define TYPE_EDNS0 0x40 /* 01.... - EDNS(0) label */
+#define TYPE_LABEL 0x00 /* 00.... - regular label */
+# define EDNS0_ELT_BITLABEL 0x01
+
+#endif /* !_NAMESER_H_ */
diff --git a/netdissect-alloc.c b/netdissect-alloc.c
new file mode 100644
index 0000000..c625d34
--- /dev/null
+++ b/netdissect-alloc.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2018 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include "netdissect-alloc.h"
+
+static void nd_add_alloc_list(netdissect_options *, nd_mem_chunk_t *);
+
+/*
+ * nd_free_all() is intended to be used after a packet printing
+ */
+
+/* Add a memory chunk in allocation linked list */
+static void
+nd_add_alloc_list(netdissect_options *ndo, nd_mem_chunk_t *chunkp)
+{
+ if (ndo->ndo_last_mem_p == NULL) /* first memory allocation */
+ chunkp->prev_mem_p = NULL;
+ else /* previous memory allocation */
+ chunkp->prev_mem_p = ndo->ndo_last_mem_p;
+ ndo->ndo_last_mem_p = chunkp;
+}
+
+/* malloc replacement, with tracking in a linked list */
+void *
+nd_malloc(netdissect_options *ndo, size_t size)
+{
+ nd_mem_chunk_t *chunkp = malloc(sizeof(nd_mem_chunk_t) + size);
+ if (chunkp == NULL)
+ return NULL;
+ nd_add_alloc_list(ndo, chunkp);
+ return chunkp + 1;
+}
+
+/* Free chunks in allocation linked list from last to first */
+void
+nd_free_all(netdissect_options *ndo)
+{
+ nd_mem_chunk_t *current, *previous;
+ current = ndo->ndo_last_mem_p;
+ while (current != NULL) {
+ previous = current->prev_mem_p;
+ free(current);
+ current = previous;
+ }
+ ndo->ndo_last_mem_p = NULL;
+}
diff --git a/netdissect-alloc.h b/netdissect-alloc.h
new file mode 100644
index 0000000..862c900
--- /dev/null
+++ b/netdissect-alloc.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2018 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef netdissect_alloc_h
+#define netdissect_alloc_h
+
+#include <stdarg.h>
+#include "netdissect-stdinc.h"
+#include "netdissect.h"
+
+typedef struct nd_mem_chunk {
+ void *prev_mem_p;
+ /* variable size data */
+} nd_mem_chunk_t;
+
+void * nd_malloc(netdissect_options *, size_t);
+void nd_free_all(netdissect_options *);
+
+#endif /* netdissect_alloc_h */
diff --git a/netdissect-ctype.h b/netdissect-ctype.h
new file mode 100644
index 0000000..9f82200
--- /dev/null
+++ b/netdissect-ctype.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 1988-1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Copyright (c) 1998-2012 Michael Richardson <mcr@tcpdump.org>
+ * The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef netdissect_ctype_h
+#define netdissect_ctype_h
+
+/*
+ * Locale-independent macros for testing character properties and
+ * stripping the 8th bit from characters.
+ *
+ * Byte values outside the ASCII range are considered unprintable, so
+ * both ND_ASCII_ISPRINT() and ND_ASCII_ISGRAPH() return "false" for them.
+ *
+ * Assumed to be handed a value between 0 and 255, i.e. don't hand them
+ * a char, as those might be in the range -128 to 127.
+ */
+#define ND_ISASCII(c) (!((c) & 0x80)) /* value is an ASCII code point */
+#define ND_ASCII_ISPRINT(c) ((c) >= 0x20 && (c) <= 0x7E)
+#define ND_ASCII_ISGRAPH(c) ((c) > 0x20 && (c) <= 0x7E)
+#define ND_ASCII_ISDIGIT(c) ((c) >= '0' && (c) <= '9')
+#define ND_TOASCII(c) ((c) & 0x7F)
+
+/*
+ * Locale-independent macros for converting to upper or lower case.
+ *
+ * Byte values outside the ASCII range are not converted. Byte values
+ * *in* the ASCII range are converted to byte values in the ASCII range;
+ * in particular, 'i' is upper-cased to 'I" and 'I' is lower-cased to 'i',
+ * even in Turkish locales.
+ */
+#define ND_ASCII_TOLOWER(c) (((c) >= 'A' && (c) <= 'Z') ? (c) - 'A' + 'a' : (c))
+#define ND_ASCII_TOUPPER(c) (((c) >= 'a' && (c) <= 'z') ? (c) - 'a' + 'A' : (c))
+
+#endif /* netdissect-ctype.h */
+
diff --git a/netdissect-stdinc.h b/netdissect-stdinc.h
new file mode 100644
index 0000000..e81c90b
--- /dev/null
+++ b/netdissect-stdinc.h
@@ -0,0 +1,382 @@
+/*
+ * Copyright (c) 2002 - 2003
+ * NetGroup, Politecnico di Torino (Italy)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the Politecnico di Torino nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Include the appropriate OS header files on Windows and various flavors
+ * of UNIX, include various non-OS header files on Windows, and define
+ * various items as needed, to isolate most of netdissect's platform
+ * differences to this one file.
+ */
+
+#ifndef netdissect_stdinc_h
+#define netdissect_stdinc_h
+
+#include "ftmacros.h"
+
+#include <errno.h>
+
+#include "compiler-tests.h"
+
+#include "varattrs.h"
+
+/*
+ * If we're compiling with Visual Studio, make sure we have at least
+ * VS 2015 or later, so we have sufficient C99 support.
+ *
+ * XXX - verify that we have at least C99 support on UN*Xes?
+ *
+ * What about MinGW or various DOS toolchains? We're currently assuming
+ * sufficient C99 support there.
+ */
+#if defined(_MSC_VER)
+ /*
+ * Make sure we have VS 2015 or later.
+ */
+ #if _MSC_VER < 1900
+ #error "Building tcpdump requires VS 2015 or later"
+ #endif
+#endif
+
+/*
+ * Get the C99 types, and the PRI[doux]64 format strings, defined.
+ */
+#ifdef HAVE_PCAP_PCAP_INTTYPES_H
+ /*
+ * We have pcap/pcap-inttypes.h; use that, as it'll do all the
+ * work, and won't cause problems if a file includes this file
+ * and later includes a pcap header file that also includes
+ * pcap/pcap-inttypes.h.
+ */
+ #include <pcap/pcap-inttypes.h>
+#else
+ /*
+ * OK, we don't have pcap/pcap-inttypes.h, so we'll have to
+ * do the work ourselves, but at least we don't have to
+ * worry about other headers including it and causing
+ * clashes.
+ */
+
+ /*
+ * Include <inttypes.h> to get the integer types and PRi[doux]64 values
+ * defined.
+ *
+ * If the compiler is MSVC, we require VS 2015 or newer, so we
+ * have <inttypes.h> - and support for %zu in the formatted
+ * printing functions.
+ *
+ * If the compiler is MinGW, we assume we have <inttypes.h> - and
+ * support for %zu in the formatted printing functions.
+ *
+ * If the target is UN*X, we assume we have a C99-or-later development
+ * environment, and thus have <inttypes.h> - and support for %zu in
+ * the formatted printing functions.
+ *
+ * If the target is MS-DOS, we assume we have <inttypes.h> - and support
+ * for %zu in the formatted printing functions.
+ */
+ #include <inttypes.h>
+
+ #if defined(_MSC_VER)
+ /*
+ * Suppress definition of intN_t in bittypes.h, which might be included
+ * by <pcap/pcap.h> in older versions of WinPcap.
+ * (Yes, HAVE_U_INTn_T, as the definition guards are UN*X-oriented.)
+ */
+ #define HAVE_U_INT8_T
+ #define HAVE_U_INT16_T
+ #define HAVE_U_INT32_T
+ #define HAVE_U_INT64_T
+ #endif
+#endif /* HAVE_PCAP_PCAP_INTTYPES_H */
+
+#ifdef _WIN32
+
+/*
+ * Includes and definitions for Windows.
+ */
+
+#include <stdio.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#include <time.h>
+#include <io.h>
+#include <fcntl.h>
+#include <sys/types.h>
+
+#ifdef _MSC_VER
+ /*
+ * Compiler is MSVC.
+ *
+ * We require VS 2015 or newer, so we have strtoll(). Use that for
+ * strtoint64_t().
+ */
+ #define strtoint64_t strtoll
+
+ /*
+ * And we have LL as a suffix for constants, so use that.
+ */
+ #define INT64_T_CONSTANT(constant) (constant##LL)
+#else
+ /*
+ * Non-Microsoft compiler.
+ *
+ * XXX - should we use strtoll or should we use _strtoi64()?
+ */
+ #define strtoint64_t strtoll
+
+ /*
+ * Assume LL works.
+ */
+ #define INT64_T_CONSTANT(constant) (constant##LL)
+#endif
+
+#ifdef _MSC_VER
+ /*
+ * Microsoft tries to avoid polluting the C namespace with UN*Xisms,
+ * by adding a preceding underscore; we *want* the UN*Xisms, so add
+ * #defines to let us use them.
+ */
+ #define isatty _isatty
+ #define stat _stat
+ #define strdup _strdup
+ #define open _open
+ #define read _read
+ #define close _close
+ #define O_RDONLY _O_RDONLY
+
+ /*
+ * We define our_fstat64 as _fstati64, and define our_statb as
+ * struct _stati64, so we get 64-bit file sizes.
+ */
+ #define our_fstat _fstati64
+ #define our_statb struct _stati64
+
+ /*
+ * If <crtdbg.h> has been included, and _DEBUG is defined, and
+ * __STDC__ is zero, <crtdbg.h> will define strdup() to call
+ * _strdup_dbg(). So if it's already defined, don't redefine
+ * it.
+ */
+ #ifndef strdup
+ #define strdup _strdup
+ #endif
+
+ /*
+ * Windows doesn't have ssize_t; routines such as _read() return int.
+ */
+ typedef int ssize_t;
+#endif /* _MSC_VER */
+
+/*
+ * With MSVC, for C, __inline is used to make a function an inline.
+ */
+#ifdef _MSC_VER
+#define inline __inline
+#endif
+
+#if defined(AF_INET6) && !defined(HAVE_OS_IPV6_SUPPORT)
+#define HAVE_OS_IPV6_SUPPORT
+#endif
+
+#ifndef INET6_ADDRSTRLEN
+#define INET6_ADDRSTRLEN 46
+#endif
+
+/* It is in MSVC's <errno.h>, but not defined in MingW+Watcom.
+ */
+#ifndef EAFNOSUPPORT
+#define EAFNOSUPPORT WSAEAFNOSUPPORT
+#endif
+
+#ifndef caddr_t
+typedef char *caddr_t;
+#endif /* caddr_t */
+
+#define MAXHOSTNAMELEN 64
+
+#else /* _WIN32 */
+
+/*
+ * Includes and definitions for various flavors of UN*X.
+ */
+
+#include <unistd.h>
+#include <netdb.h>
+#include <sys/param.h>
+#include <sys/types.h> /* concession to AIX */
+#include <sys/time.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#include <time.h>
+
+#include <arpa/inet.h>
+
+/*
+ * We should have large file support enabled, if it's available,
+ * so just use fstat as our_fstat and struct stat as our_statb.
+ */
+#define our_fstat fstat
+#define our_statb struct stat
+
+/*
+ * Assume all UN*Xes have strtoll(), and use it for strtoint64_t().
+ */
+#define strtoint64_t strtoll
+
+/*
+ * Assume LL works.
+ */
+#define INT64_T_CONSTANT(constant) (constant##LL)
+#endif /* _WIN32 */
+
+/*
+ * Function attributes, for various compilers.
+ */
+#include "funcattrs.h"
+
+/*
+ * fopen() read and write modes for text files and binary files.
+ */
+#if defined(_WIN32) || defined(MSDOS)
+ #define FOPEN_READ_TXT "rt"
+ #define FOPEN_READ_BIN "rb"
+ #define FOPEN_WRITE_TXT "wt"
+ #define FOPEN_WRITE_BIN "wb"
+#else
+ #define FOPEN_READ_TXT "r"
+ #define FOPEN_READ_BIN FOPEN_READ_TXT
+ #define FOPEN_WRITE_TXT "w"
+ #define FOPEN_WRITE_BIN FOPEN_WRITE_TXT
+#endif
+
+/*
+ * Inline x86 assembler-language versions of ntoh[ls]() and hton[ls](),
+ * defined if the OS doesn't provide them. These assume no more than
+ * an 80386, so, for example, it avoids the bswap instruction added in
+ * the 80486.
+ *
+ * (We don't use them on macOS; Apple provides their own, which *doesn't*
+ * avoid the bswap instruction, as macOS only supports machines that
+ * have it.)
+ */
+#if defined(__GNUC__) && defined(__i386__) && !defined(__APPLE__) && !defined(__ntohl)
+ #undef ntohl
+ #undef ntohs
+ #undef htonl
+ #undef htons
+
+ static __inline__ unsigned long __ntohl (unsigned long x);
+ static __inline__ unsigned short __ntohs (unsigned short x);
+
+ #define ntohl(x) __ntohl(x)
+ #define ntohs(x) __ntohs(x)
+ #define htonl(x) __ntohl(x)
+ #define htons(x) __ntohs(x)
+
+ static __inline__ unsigned long __ntohl (unsigned long x)
+ {
+ __asm__ ("xchgb %b0, %h0\n\t" /* swap lower bytes */
+ "rorl $16, %0\n\t" /* swap words */
+ "xchgb %b0, %h0" /* swap higher bytes */
+ : "=q" (x) : "0" (x));
+ return (x);
+ }
+
+ static __inline__ unsigned short __ntohs (unsigned short x)
+ {
+ __asm__ ("xchgb %b0, %h0" /* swap bytes */
+ : "=q" (x) : "0" (x));
+ return (x);
+ }
+#endif
+
+/*
+ * If the OS doesn't define AF_INET6 and struct in6_addr:
+ *
+ * define AF_INET6, so we can use it internally as a "this is an
+ * IPv6 address" indication;
+ *
+ * define struct in6_addr so that we can use it for IPv6 addresses.
+ */
+#ifndef HAVE_OS_IPV6_SUPPORT
+#ifndef AF_INET6
+#define AF_INET6 24
+
+struct in6_addr {
+ union {
+ __uint8_t __u6_addr8[16];
+ __uint16_t __u6_addr16[8];
+ __uint32_t __u6_addr32[4];
+ } __u6_addr; /* 128-bit IP6 address */
+};
+#endif
+#endif
+
+#ifndef NI_MAXHOST
+#define NI_MAXHOST 1025
+#endif
+
+#ifndef INET_ADDRSTRLEN
+#define INET_ADDRSTRLEN 16
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+/*
+ * Statement attributes, for various compilers.
+ *
+ * This was introduced sufficiently recently that compilers implementing
+ * it also implement __has_attribute() (for example, GCC 5.0 and later
+ * have __has_attribute(), and the "fallthrough" attribute was introduced
+ * in GCC 7).
+ *
+ * Unfortunately, Clang does this wrong - a statement
+ *
+ * __attribute__ ((fallthrough));
+ *
+ * produces bogus -Wmissing-declaration "declaration does not declare
+ * anything" warnings (dear Clang: that's not a declaration, it's an
+ * empty statement). GCC, however, has no trouble with this.
+ */
+#if __has_attribute(fallthrough) && !defined(__clang__)
+# define ND_FALL_THROUGH __attribute__ ((fallthrough))
+#else
+# define ND_FALL_THROUGH
+#endif /* __has_attribute(fallthrough) */
+
+#endif /* netdissect_stdinc_h */
diff --git a/netdissect.c b/netdissect.c
new file mode 100644
index 0000000..000d1ff
--- /dev/null
+++ b/netdissect.c
@@ -0,0 +1,301 @@
+/*
+ * Copyright (c) 1988-1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Copyright (c) 1998-2012 Michael Richardson <mcr@tcpdump.org>
+ * The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include "netdissect.h"
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef USE_LIBSMI
+#include <smi.h>
+#endif
+
+/*
+ * Initialize anything that must be initialized before dissecting
+ * packets.
+ *
+ * This should be called at the beginning of the program; it does
+ * not need to be called, and should not be called, for every
+ * netdissect_options structure.
+ */
+int
+nd_init(char *errbuf, size_t errbuf_size)
+{
+#ifdef _WIN32
+ WORD wVersionRequested;
+ WSADATA wsaData;
+ int err;
+
+ /*
+ * Request Winsock 2.2; we expect Winsock 2.
+ */
+ wVersionRequested = MAKEWORD(2, 2);
+ err = WSAStartup(wVersionRequested, &wsaData);
+ if (err != 0) {
+ strlcpy(errbuf, "Attempting to initialize Winsock failed",
+ errbuf_size);
+ return (-1);
+ }
+#endif /* _WIN32 */
+
+#ifdef USE_LIBSMI
+ /*
+ * XXX - should we just fail if this fails? Some of the
+ * libsmi calls may fail.
+ */
+ smiInit("tcpdump");
+#endif
+
+ /*
+ * Clears the error buffer, and uses it so we don't get
+ * "unused argument" warnings at compile time.
+ */
+ strlcpy(errbuf, "", errbuf_size);
+ return (0);
+}
+
+/*
+ * Clean up anything that ndo_init() did.
+ */
+void
+nd_cleanup(void)
+{
+#ifdef USE_LIBSMI
+ /*
+ * This appears, in libsmi 0.4.8, to do nothing if smiInit()
+ * wasn't done or failed, so we call it unconditionally.
+ */
+ smiExit();
+#endif
+
+#ifdef _WIN32
+ /*
+ * Undo the WSAStartup() call above.
+ */
+ WSACleanup();
+#endif
+}
+
+int
+nd_have_smi_support(void)
+{
+#ifdef USE_LIBSMI
+ return (1);
+#else
+ return (0);
+#endif
+}
+
+/*
+ * Indicates whether an SMI module has been loaded, so that we can use
+ * libsmi to translate OIDs.
+ */
+int nd_smi_module_loaded;
+
+int
+nd_load_smi_module(const char *module, char *errbuf, size_t errbuf_size)
+{
+#ifdef USE_LIBSMI
+ if (smiLoadModule(module) == 0) {
+ snprintf(errbuf, errbuf_size, "could not load MIB module %s",
+ module);
+ return (-1);
+ }
+ nd_smi_module_loaded = 1;
+ return (0);
+#else
+ snprintf(errbuf, errbuf_size, "MIB module %s not loaded: no libsmi support",
+ module);
+ return (-1);
+#endif
+}
+
+const char *
+nd_smi_version_string(void)
+{
+#ifdef USE_LIBSMI
+ return (smi_version_string);
+#else
+ return (NULL);
+#endif
+}
+
+
+int
+nd_push_buffer(netdissect_options *ndo, u_char *new_buffer,
+ const u_char *new_packetp, const u_int newlen)
+{
+ struct netdissect_saved_packet_info *ndspi;
+
+ ndspi = (struct netdissect_saved_packet_info *)malloc(sizeof(struct netdissect_saved_packet_info));
+ if (ndspi == NULL)
+ return (0); /* fail */
+ ndspi->ndspi_buffer = new_buffer;
+ ndspi->ndspi_packetp = ndo->ndo_packetp;
+ ndspi->ndspi_snapend = ndo->ndo_snapend;
+ ndspi->ndspi_prev = ndo->ndo_packet_info_stack;
+
+ ndo->ndo_packetp = new_packetp;
+ ndo->ndo_snapend = new_packetp + newlen;
+ ndo->ndo_packet_info_stack = ndspi;
+
+ return (1); /* success */
+}
+
+
+/*
+ * In a given netdissect_options structure:
+ *
+ * push the current packet information onto the packet information
+ * stack;
+ *
+ * given a pointer into the packet and a length past that point in
+ * the packet, calculate a new snapshot end that's at the lower
+ * of the current snapshot end and that point in the packet;
+ *
+ * set the snapshot end to that new value.
+ */
+int
+nd_push_snaplen(netdissect_options *ndo, const u_char *bp, const u_int newlen)
+{
+ struct netdissect_saved_packet_info *ndspi;
+ u_int snaplen_remaining;
+
+ ndspi = (struct netdissect_saved_packet_info *)malloc(sizeof(struct netdissect_saved_packet_info));
+ if (ndspi == NULL)
+ return (0); /* fail */
+ ndspi->ndspi_buffer = NULL; /* no new buffer */
+ ndspi->ndspi_packetp = ndo->ndo_packetp;
+ ndspi->ndspi_snapend = ndo->ndo_snapend;
+ ndspi->ndspi_prev = ndo->ndo_packet_info_stack;
+
+ /*
+ * Push the saved previous data onto the stack.
+ */
+ ndo->ndo_packet_info_stack = ndspi;
+
+ /*
+ * Find out how many bytes remain after the current snapend.
+ *
+ * We're restricted to packets with at most UINT_MAX bytes;
+ * cast the result to u_int, so that we don't get truncation
+ * warnings on LP64 and LLP64 platforms. (ptrdiff_t is
+ * signed and we want an unsigned difference; the pointer
+ * should at most be equal to snapend, and must *never*
+ * be past snapend.)
+ */
+ snaplen_remaining = (u_int)(ndo->ndo_snapend - bp);
+
+ /*
+ * If the new snapend is smaller than the one calculated
+ * above, set the snapend to that value, otherwise leave
+ * it unchanged.
+ */
+ if (newlen <= snaplen_remaining) {
+ /* Snapend isn't past the previous snapend */
+ ndo->ndo_snapend = bp + newlen;
+ }
+
+ return (1); /* success */
+}
+
+/*
+ * In a given netdissect_options structure:
+ *
+ * given a pointer into the packet and a length past that point in
+ * the packet, calculate a new snapshot end that's at the lower
+ * of the previous snapshot end - or, if there is no previous
+ * snapshot end, the current snapshot end - and that point in the
+ * packet;
+ *
+ * set the snapshot end to that new value.
+ *
+ * This is to change the current snapshot end. This may increase the
+ * snapshot end, as it may be used, for example, for a Jumbo Payload
+ * option in IPv6. It must not increase it past the snapshot length
+ * atop which the current one was pushed, however.
+ */
+void
+nd_change_snaplen(netdissect_options *ndo, const u_char *bp, const u_int newlen)
+{
+ struct netdissect_saved_packet_info *ndspi;
+ const u_char *previous_snapend;
+ u_int snaplen_remaining;
+
+ ndspi = ndo->ndo_packet_info_stack;
+ if (ndspi->ndspi_prev != NULL)
+ previous_snapend = ndspi->ndspi_prev->ndspi_snapend;
+ else
+ previous_snapend = ndo->ndo_snapend;
+
+ /*
+ * Find out how many bytes remain after the previous
+ * snapend - or, if there is no previous snapend, after
+ * the current snapend.
+ *
+ * We're restricted to packets with at most UINT_MAX bytes;
+ * cast the result to u_int, so that we don't get truncation
+ * warnings on LP64 and LLP64 platforms. (ptrdiff_t is
+ * signed and we want an unsigned difference; the pointer
+ * should at most be equal to snapend, and must *never*
+ * be past snapend.)
+ */
+ snaplen_remaining = (u_int)(previous_snapend - bp);
+
+ /*
+ * If the new snapend is smaller than the one calculated
+ * above, set the snapend to that value, otherwise leave
+ * it unchanged.
+ */
+ if (newlen <= snaplen_remaining) {
+ /* Snapend isn't past the previous snapend */
+ ndo->ndo_snapend = bp + newlen;
+ }
+}
+
+void
+nd_pop_packet_info(netdissect_options *ndo)
+{
+ struct netdissect_saved_packet_info *ndspi;
+
+ ndspi = ndo->ndo_packet_info_stack;
+ ndo->ndo_packetp = ndspi->ndspi_packetp;
+ ndo->ndo_snapend = ndspi->ndspi_snapend;
+ ndo->ndo_packet_info_stack = ndspi->ndspi_prev;
+
+ free(ndspi->ndspi_buffer);
+ free(ndspi);
+}
+
+void
+nd_pop_all_packet_info(netdissect_options *ndo)
+{
+ while (ndo->ndo_packet_info_stack != NULL)
+ nd_pop_packet_info(ndo);
+}
diff --git a/netdissect.h b/netdissect.h
new file mode 100644
index 0000000..b1074ef
--- /dev/null
+++ b/netdissect.h
@@ -0,0 +1,794 @@
+/*
+ * Copyright (c) 1988-1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Copyright (c) 1998-2012 Michael Richardson <mcr@tcpdump.org>
+ * The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef netdissect_h
+#define netdissect_h
+
+#ifdef HAVE_OS_PROTO_H
+#include "os-proto.h"
+#endif
+#include <sys/types.h>
+#include <setjmp.h>
+#include "status-exit-codes.h"
+#include "funcattrs.h" /* for PRINTFLIKE_FUNCPTR() */
+#include "diag-control.h" /* for ND_UNREACHABLE */
+
+/*
+ * Data types corresponding to multi-byte integral values within data
+ * structures. These are defined as arrays of octets, so that they're
+ * not aligned on their "natural" boundaries, and so that you *must*
+ * use the EXTRACT_ macros to extract them (which you should be doing
+ * *anyway*, so as not to assume a particular byte order or alignment
+ * in your code).
+ *
+ * We even want EXTRACT_U_1 used for 8-bit integral values, so we
+ * define nd_uint8_t and nd_int8_t as arrays as well.
+ */
+typedef unsigned char nd_uint8_t[1];
+typedef unsigned char nd_uint16_t[2];
+typedef unsigned char nd_uint24_t[3];
+typedef unsigned char nd_uint32_t[4];
+typedef unsigned char nd_uint40_t[5];
+typedef unsigned char nd_uint48_t[6];
+typedef unsigned char nd_uint56_t[7];
+typedef unsigned char nd_uint64_t[8];
+
+typedef signed char nd_int8_t[1];
+
+/*
+ * "unsigned char" so that sign extension isn't done on the
+ * individual bytes while they're being assembled.
+ */
+typedef unsigned char nd_int32_t[4];
+typedef unsigned char nd_int64_t[8];
+
+#define FMAXINT (4294967296.0) /* floating point rep. of MAXINT */
+
+/*
+ * Use this for IPv4 addresses and netmasks.
+ *
+ * It's defined as an array of octets, so that it's not guaranteed to
+ * be aligned on its "natural" boundary (in some packet formats, it
+ * *isn't* so aligned). We have separate EXTRACT_ calls for them;
+ * sometimes you want the host-byte-order value, other times you want
+ * the network-byte-order value.
+ *
+ * Don't use EXTRACT_BE_U_4() on them, use EXTRACT_IPV4_TO_HOST_ORDER()
+ * if you want them in host byte order and EXTRACT_IPV4_TO_NETWORK_ORDER()
+ * if you want them in network byte order (which you want with system APIs
+ * that expect network-order IPv4 addresses, such as inet_ntop()).
+ *
+ * If, on your little-endian machine (e.g., an "IBM-compatible PC", no matter
+ * what the OS, or an Intel Mac, no matter what the OS), you get the wrong
+ * answer, and you've used EXTRACT_BE_U_4(), do *N*O*T* "fix" this by using
+ * EXTRACT_LE_U_4(), fix it by using EXTRACT_IPV4_TO_NETWORK_ORDER(),
+ * otherwise you're breaking the result on big-endian machines (e.g.,
+ * most PowerPC/Power ISA machines, System/390 and z/Architecture, SPARC,
+ * etc.).
+ *
+ * Yes, people do this; that's why Wireshark has tvb_get_ipv4(), to extract
+ * an IPv4 address from a packet data buffer; it was introduced in reaction
+ * to somebody who *had* done that.
+ */
+typedef unsigned char nd_ipv4[4];
+
+/*
+ * Use this for IPv6 addresses and netmasks.
+ */
+typedef unsigned char nd_ipv6[16];
+
+/*
+ * Use this for MAC addresses.
+ */
+#define MAC_ADDR_LEN 6U /* length of MAC addresses */
+typedef unsigned char nd_mac_addr[MAC_ADDR_LEN];
+
+/*
+ * Use this for blobs of bytes; make them arrays of nd_byte.
+ */
+typedef unsigned char nd_byte;
+
+/*
+ * Round up x to a multiple of y; y must be a power of 2.
+ */
+#ifndef roundup2
+#define roundup2(x, y) (((x)+((u_int)((y)-1)))&(~((u_int)((y)-1))))
+#endif
+
+#include <stdarg.h>
+#include <pcap.h>
+
+#include "ip.h" /* struct ip for nextproto4_cksum() */
+#include "ip6.h" /* struct ip6 for nextproto6_cksum() */
+
+#ifndef HAVE_STRLCAT
+extern size_t strlcat (char *, const char *, size_t);
+#endif
+#ifndef HAVE_STRLCPY
+extern size_t strlcpy (char *, const char *, size_t);
+#endif
+
+#ifndef HAVE_STRDUP
+extern char *strdup (const char *str);
+#endif
+
+#ifndef HAVE_STRSEP
+extern char *strsep(char **, const char *);
+#endif
+
+struct tok {
+ u_int v; /* value */
+ const char *s; /* string */
+};
+
+/* tok2str is deprecated */
+extern const char *tok2str(const struct tok *, const char *, u_int);
+extern char *bittok2str(const struct tok *, const char *, u_int);
+extern char *bittok2str_nosep(const struct tok *, const char *, u_int);
+
+/* Initialize netdissect. */
+extern int nd_init(char *, size_t);
+/* Clean up netdissect. */
+extern void nd_cleanup(void);
+
+/* Do we have libsmi support? */
+extern int nd_have_smi_support(void);
+/* Load an SMI module. */
+extern int nd_load_smi_module(const char *, char *, size_t);
+/* Flag indicating whether an SMI module has been loaded. */
+extern int nd_smi_module_loaded;
+/* Version number of the SMI library, or NULL if we don't have libsmi support. */
+extern const char *nd_smi_version_string(void);
+
+typedef struct netdissect_options netdissect_options;
+
+#define IF_PRINTER_ARGS (netdissect_options *, const struct pcap_pkthdr *, const u_char *)
+
+typedef void (*if_printer) IF_PRINTER_ARGS;
+
+/*
+ * In case the data in a buffer needs to be processed by being decrypted,
+ * decompressed, etc. before it's dissected, we can't process it in place,
+ * we have to allocate a new buffer for the processed data.
+ *
+ * We keep a stack of those buffers; when we allocate a new buffer, we
+ * push the current one onto a stack, and when we're done with the new
+ * buffer, we free the current buffer and pop the previous one off the
+ * stack.
+ *
+ * A buffer has a beginning and end pointer, and a link to the previous
+ * buffer on the stack.
+ *
+ * In other cases, we temporarily adjust the snapshot end to reflect a
+ * packet-length field in the packet data and, when finished dissecting
+ * that part of the packet, restore the old snapshot end. We keep that
+ * on the stack with null buffer pointer, meaning there's nothing to
+ * free.
+ */
+struct netdissect_saved_packet_info {
+ u_char *ndspi_buffer; /* pointer to allocated buffer data */
+ const u_char *ndspi_packetp; /* saved beginning of data */
+ const u_char *ndspi_snapend; /* saved end of data */
+ struct netdissect_saved_packet_info *ndspi_prev; /* previous buffer on the stack */
+};
+
+/* 'val' value(s) for longjmp */
+#define ND_TRUNCATED 1
+
+struct netdissect_options {
+ int ndo_bflag; /* print 4 byte ASes in ASDOT notation */
+ int ndo_eflag; /* print ethernet header */
+ int ndo_fflag; /* don't translate "foreign" IP address */
+ int ndo_Kflag; /* don't check IP, TCP or UDP checksums */
+ int ndo_nflag; /* leave addresses as numbers */
+ int ndo_Nflag; /* remove domains from printed host names */
+ int ndo_qflag; /* quick (shorter) output */
+ int ndo_Sflag; /* print raw TCP sequence numbers */
+ int ndo_tflag; /* print packet arrival time */
+ int ndo_uflag; /* Print undecoded NFS handles */
+ int ndo_vflag; /* verbosity level */
+ int ndo_xflag; /* print packet in hex */
+ int ndo_Xflag; /* print packet in hex/ASCII */
+ int ndo_Aflag; /* print packet only in ASCII observing TAB,
+ * LF, CR and SPACE as graphical chars
+ */
+ int ndo_Hflag; /* dissect 802.11s draft mesh standard */
+ const char *ndo_protocol; /* protocol */
+ jmp_buf ndo_early_end; /* jmp_buf for setjmp()/longjmp() */
+ void *ndo_last_mem_p; /* pointer to the last allocated memory chunk */
+ int ndo_packet_number; /* print a packet number in the beginning of line */
+ int ndo_suppress_default_print; /* don't use default_print() for unknown packet types */
+ int ndo_tstamp_precision; /* requested time stamp precision */
+ const char *program_name; /* Name of the program using the library */
+
+ char *ndo_espsecret;
+ struct sa_list *ndo_sa_list_head; /* used by print-esp.c */
+ struct sa_list *ndo_sa_default;
+
+ char *ndo_sigsecret; /* Signature verification secret key */
+
+ int ndo_packettype; /* as specified by -T */
+
+ int ndo_snaplen;
+ int ndo_ll_hdr_len; /* link-layer header length */
+
+ /*global pointers to beginning and end of current packet (during printing) */
+ const u_char *ndo_packetp;
+ const u_char *ndo_snapend;
+
+ /* stack of saved packet boundary and buffer information */
+ struct netdissect_saved_packet_info *ndo_packet_info_stack;
+
+ /* pointer to the if_printer function */
+ if_printer ndo_if_printer;
+
+ /* pointer to void function to output stuff */
+ void (*ndo_default_print)(netdissect_options *,
+ const u_char *bp, u_int length);
+
+ /* pointer to function to do regular output */
+ int (*ndo_printf)(netdissect_options *,
+ const char *fmt, ...)
+ PRINTFLIKE_FUNCPTR(2, 3);
+ /* pointer to function to output errors */
+ void NORETURN_FUNCPTR (*ndo_error)(netdissect_options *,
+ status_exit_codes_t status,
+ const char *fmt, ...)
+ PRINTFLIKE_FUNCPTR(3, 4);
+ /* pointer to function to output warnings */
+ void (*ndo_warning)(netdissect_options *,
+ const char *fmt, ...)
+ PRINTFLIKE_FUNCPTR(2, 3);
+};
+
+extern WARN_UNUSED_RESULT int nd_push_buffer(netdissect_options *, u_char *, const u_char *, const u_int);
+extern WARN_UNUSED_RESULT int nd_push_snaplen(netdissect_options *, const u_char *, const u_int);
+extern void nd_change_snaplen(netdissect_options *, const u_char *, const u_int);
+extern void nd_pop_packet_info(netdissect_options *);
+extern void nd_pop_all_packet_info(netdissect_options *);
+
+static inline NORETURN void
+nd_trunc_longjmp(netdissect_options *ndo)
+{
+ longjmp(ndo->ndo_early_end, ND_TRUNCATED);
+#ifdef _AIX
+ /*
+ * In AIX <setjmp.h> decorates longjmp() with "#pragma leaves", which tells
+ * XL C that the function is noreturn, but GCC remains unaware of that and
+ * yields a "'noreturn' function does return" warning.
+ */
+ ND_UNREACHABLE
+#endif /* _AIX */
+}
+
+#define PT_VAT 1 /* Visual Audio Tool */
+#define PT_WB 2 /* distributed White Board */
+#define PT_RPC 3 /* Remote Procedure Call */
+#define PT_RTP 4 /* Real-Time Applications protocol */
+#define PT_RTCP 5 /* Real-Time Applications control protocol */
+#define PT_SNMP 6 /* Simple Network Management Protocol */
+#define PT_CNFP 7 /* Cisco NetFlow protocol */
+#define PT_TFTP 8 /* trivial file transfer protocol */
+#define PT_AODV 9 /* Ad-hoc On-demand Distance Vector Protocol */
+#define PT_CARP 10 /* Common Address Redundancy Protocol */
+#define PT_RADIUS 11 /* RADIUS authentication Protocol */
+#define PT_ZMTP1 12 /* ZeroMQ Message Transport Protocol 1.0 */
+#define PT_VXLAN 13 /* Virtual eXtensible Local Area Network */
+#define PT_PGM 14 /* [UDP-encapsulated] Pragmatic General Multicast */
+#define PT_PGM_ZMTP1 15 /* ZMTP/1.0 inside PGM (native or UDP-encapsulated) */
+#define PT_LMP 16 /* Link Management Protocol */
+#define PT_RESP 17 /* RESP */
+#define PT_PTP 18 /* PTP */
+#define PT_SOMEIP 19 /* Autosar SOME/IP Protocol */
+#define PT_DOMAIN 20 /* Domain Name System (DNS) */
+
+#define ND_MIN(a,b) ((a)>(b)?(b):(a))
+#define ND_MAX(a,b) ((b)>(a)?(b):(a))
+
+/* For source or destination ports tests (UDP, TCP, ...) */
+#define IS_SRC_OR_DST_PORT(p) (sport == (p) || dport == (p))
+
+/*
+ * Maximum snapshot length. This should be enough to capture the full
+ * packet on most network interfaces.
+ *
+ *
+ * Somewhat arbitrary, but chosen to be:
+ *
+ * 1) big enough for maximum-size Linux loopback packets (65549)
+ * and some USB packets captured with USBPcap:
+ *
+ * https://desowin.org/usbpcap/
+ *
+ * (> 131072, < 262144)
+ *
+ * and
+ *
+ * 2) small enough not to cause attempts to allocate huge amounts of
+ * memory; some applications might use the snapshot length in a
+ * savefile header to control the size of the buffer they allocate,
+ * so a size of, say, 2^31-1 might not work well.
+ *
+ * XXX - does it need to be bigger still? Note that, for versions of
+ * libpcap with pcap_create()/pcap_activate(), if no -s flag is specified
+ * or -s 0 is specified, we won't set the snapshot length at all, and will
+ * let libpcap choose a snapshot length; newer versions may choose a bigger
+ * value than 262144 for D-Bus, for example.
+ */
+#define MAXIMUM_SNAPLEN 262144
+
+/*
+ * True if "l" bytes from "p" were captured.
+ *
+ * The "ndo->ndo_snapend - (l) <= ndo->ndo_snapend" checks to make sure
+ * "l" isn't so large that "ndo->ndo_snapend - (l)" underflows.
+ *
+ * The check is for <= rather than < because "l" might be 0.
+ *
+ * We cast the pointers to uintptr_t to make sure that the compiler
+ * doesn't optimize away any of these tests (which it is allowed to
+ * do, as adding an integer to, or subtracting an integer from, a
+ * pointer assumes that the pointer is a pointer to an element of an
+ * array and that the result of the addition or subtraction yields a
+ * pointer to another member of the array, so that, for example, if
+ * you subtract a positive integer from a pointer, the result is
+ * guaranteed to be less than the original pointer value). See
+ *
+ * https://www.kb.cert.org/vuls/id/162289
+ */
+
+/*
+ * Test in two parts to avoid these warnings:
+ * comparison of unsigned expression >= 0 is always true [-Wtype-limits],
+ * comparison is always true due to limited range of data type [-Wtype-limits].
+ */
+#define IS_NOT_NEGATIVE(x) (((x) > 0) || ((x) == 0))
+
+#define ND_TTEST_LEN(p, l) \
+ (IS_NOT_NEGATIVE(l) && \
+ ((uintptr_t)ndo->ndo_snapend - (l) <= (uintptr_t)ndo->ndo_snapend && \
+ (uintptr_t)(p) <= (uintptr_t)ndo->ndo_snapend - (l)))
+
+/* True if "*(p)" was captured */
+#define ND_TTEST_SIZE(p) ND_TTEST_LEN(p, sizeof(*(p)))
+
+/* Bail out if "l" bytes from "p" were not captured */
+#ifdef ND_LONGJMP_FROM_TCHECK
+#define ND_TCHECK_LEN(p, l) if (!ND_TTEST_LEN(p, l)) nd_trunc_longjmp(ndo)
+#else
+#define ND_TCHECK_LEN(p, l) if (!ND_TTEST_LEN(p, l)) goto trunc
+#endif
+
+/* Bail out if "*(p)" was not captured */
+#define ND_TCHECK_SIZE(p) ND_TCHECK_LEN(p, sizeof(*(p)))
+
+/*
+ * Number of bytes between two pointers.
+ */
+#define ND_BYTES_BETWEEN(p1, p2) ((u_int)(((const uint8_t *)(p1)) - (const uint8_t *)(p2)))
+
+/*
+ * Number of bytes remaining in the captured data, starting at the
+ * byte pointed to by the argument.
+ */
+#define ND_BYTES_AVAILABLE_AFTER(p) ND_BYTES_BETWEEN(ndo->ndo_snapend, (p))
+
+/* Check length < minimum for invalid packet with a custom message, format %u */
+#define ND_LCHECKMSG_U(length, minimum, what) \
+if ((length) < (minimum)) { \
+ND_PRINT(" [%s %u < %u]", (what), (length), (minimum)); \
+goto invalid; \
+}
+
+/* Check length < minimum for invalid packet with #length message, format %u */
+#define ND_LCHECK_U(length, minimum) \
+ND_LCHECKMSG_U((length), (minimum), (#length))
+
+/* Check length < minimum for invalid packet with a custom message, format %zu */
+#define ND_LCHECKMSG_ZU(length, minimum, what) \
+if ((length) < (minimum)) { \
+ND_PRINT(" [%s %u < %zu]", (what), (length), (minimum)); \
+goto invalid; \
+}
+
+/* Check length < minimum for invalid packet with #length message, format %zu */
+#define ND_LCHECK_ZU(length, minimum) \
+ND_LCHECKMSG_ZU((length), (minimum), (#length))
+
+#define ND_PRINT(...) (ndo->ndo_printf)(ndo, __VA_ARGS__)
+#define ND_DEFAULTPRINT(ap, length) (*ndo->ndo_default_print)(ndo, ap, length)
+
+extern void ts_print(netdissect_options *, const struct timeval *);
+extern void signed_relts_print(netdissect_options *, int32_t);
+extern void unsigned_relts_print(netdissect_options *, uint32_t);
+
+extern const char *nd_format_time(char *buf, size_t bufsize,
+ const char *format, const struct tm *timeptr);
+
+extern void fn_print_char(netdissect_options *, u_char);
+extern void fn_print_str(netdissect_options *, const u_char *);
+extern u_int nd_printztn(netdissect_options *, const u_char *, u_int, const u_char *);
+extern int nd_printn(netdissect_options *, const u_char *, u_int, const u_char *);
+extern void nd_printjnp(netdissect_options *, const u_char *, u_int);
+
+/*
+ * Flags for txtproto_print().
+ */
+#define RESP_CODE_SECOND_TOKEN 0x00000001 /* response code is second token in response line */
+
+extern void txtproto_print(netdissect_options *, const u_char *, u_int,
+ const char **, u_int);
+
+#if (defined(__i386__) || defined(_M_IX86) || defined(__X86__) || defined(__x86_64__) || defined(_M_X64)) || \
+ (defined(__arm__) || defined(_M_ARM) || defined(__aarch64__)) || \
+ (defined(__m68k__) && (!defined(__mc68000__) && !defined(__mc68010__))) || \
+ (defined(__ppc__) || defined(__ppc64__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PPC64)) || \
+ (defined(__s390__) || defined(__s390x__) || defined(__zarch__)) || \
+ defined(__vax__)
+/*
+ * The processor natively handles unaligned loads, so just use memcpy()
+ * and memcmp(), to enable those optimizations.
+ *
+ * XXX - are those all the x86 tests we need?
+ * XXX - do we need to worry about ARMv1 through ARMv5, which didn't
+ * support unaligned loads, and, if so, do we need to worry about all
+ * of them, or just some of them, e.g. ARMv5?
+ * XXX - are those the only 68k tests we need not to generated
+ * unaligned accesses if the target is the 68000 or 68010?
+ * XXX - are there any tests we don't need, because some definitions are for
+ * compilers that also predefine the GCC symbols?
+ * XXX - do we need to test for both 32-bit and 64-bit versions of those
+ * architectures in all cases?
+ */
+#define UNALIGNED_MEMCPY(p, q, l) memcpy((p), (q), (l))
+#define UNALIGNED_MEMCMP(p, q, l) memcmp((p), (q), (l))
+#else
+/*
+ * The processor doesn't natively handle unaligned loads,
+ * and the compiler might "helpfully" optimize memcpy()
+ * and memcmp(), when handed pointers that would normally
+ * be properly aligned, into sequences that assume proper
+ * alignment.
+ *
+ * Do copies and compares of possibly-unaligned data by
+ * calling routines that wrap memcpy() and memcmp(), to
+ * prevent that optimization.
+ */
+extern void unaligned_memcpy(void *, const void *, size_t);
+extern int unaligned_memcmp(const void *, const void *, size_t);
+#define UNALIGNED_MEMCPY(p, q, l) unaligned_memcpy((p), (q), (l))
+#define UNALIGNED_MEMCMP(p, q, l) unaligned_memcmp((p), (q), (l))
+#endif
+
+#define PLURAL_SUFFIX(n) \
+ (((n) != 1) ? "s" : "")
+
+extern const char *tok2strary_internal(const char **, int, const char *, int);
+#define tok2strary(a,f,i) tok2strary_internal(a, sizeof(a)/sizeof(a[0]),f,i)
+
+struct uint_tokary
+{
+ u_int uintval;
+ const struct tok *tokary;
+};
+
+extern const struct tok *uint2tokary_internal(const struct uint_tokary[], const size_t, const u_int);
+#define uint2tokary(a, i) uint2tokary_internal(a, sizeof(a)/sizeof(a[0]), i)
+
+extern if_printer lookup_printer(int);
+
+#define ND_DEBUG {printf(" [%s:%d %s] ", __FILE__, __LINE__, __func__); fflush(stdout);}
+
+/* The DLT printer routines */
+
+extern void ap1394_if_print IF_PRINTER_ARGS;
+extern void arcnet_if_print IF_PRINTER_ARGS;
+extern void arcnet_linux_if_print IF_PRINTER_ARGS;
+extern void atm_if_print IF_PRINTER_ARGS;
+extern void brcm_tag_if_print IF_PRINTER_ARGS;
+extern void brcm_tag_prepend_if_print IF_PRINTER_ARGS;
+extern void bt_if_print IF_PRINTER_ARGS;
+extern void chdlc_if_print IF_PRINTER_ARGS;
+extern void cip_if_print IF_PRINTER_ARGS;
+extern void dsa_if_print IF_PRINTER_ARGS;
+extern void edsa_if_print IF_PRINTER_ARGS;
+extern void enc_if_print IF_PRINTER_ARGS;
+extern void ether_if_print IF_PRINTER_ARGS;
+extern void fddi_if_print IF_PRINTER_ARGS;
+extern void fr_if_print IF_PRINTER_ARGS;
+extern void ieee802_11_if_print IF_PRINTER_ARGS;
+extern void ieee802_11_radio_avs_if_print IF_PRINTER_ARGS;
+extern void ieee802_11_radio_if_print IF_PRINTER_ARGS;
+extern void ieee802_15_4_if_print IF_PRINTER_ARGS;
+extern void ieee802_15_4_tap_if_print IF_PRINTER_ARGS;
+extern void ipfc_if_print IF_PRINTER_ARGS;
+extern void ipnet_if_print IF_PRINTER_ARGS;
+extern void ipoib_if_print IF_PRINTER_ARGS;
+extern void juniper_atm1_if_print IF_PRINTER_ARGS;
+extern void juniper_atm2_if_print IF_PRINTER_ARGS;
+extern void juniper_chdlc_if_print IF_PRINTER_ARGS;
+extern void juniper_es_if_print IF_PRINTER_ARGS;
+extern void juniper_ether_if_print IF_PRINTER_ARGS;
+extern void juniper_frelay_if_print IF_PRINTER_ARGS;
+extern void juniper_ggsn_if_print IF_PRINTER_ARGS;
+extern void juniper_mfr_if_print IF_PRINTER_ARGS;
+extern void juniper_mlfr_if_print IF_PRINTER_ARGS;
+extern void juniper_mlppp_if_print IF_PRINTER_ARGS;
+extern void juniper_monitor_if_print IF_PRINTER_ARGS;
+extern void juniper_ppp_if_print IF_PRINTER_ARGS;
+extern void juniper_pppoe_atm_if_print IF_PRINTER_ARGS;
+extern void juniper_pppoe_if_print IF_PRINTER_ARGS;
+extern void juniper_services_if_print IF_PRINTER_ARGS;
+extern void ltalk_if_print IF_PRINTER_ARGS;
+extern void mfr_if_print IF_PRINTER_ARGS;
+extern void netanalyzer_if_print IF_PRINTER_ARGS;
+extern void netanalyzer_transparent_if_print IF_PRINTER_ARGS;
+extern void nflog_if_print IF_PRINTER_ARGS;
+extern void null_if_print IF_PRINTER_ARGS;
+extern void pflog_if_print IF_PRINTER_ARGS;
+extern void pktap_if_print IF_PRINTER_ARGS;
+extern void ppi_if_print IF_PRINTER_ARGS;
+extern void ppp_bsdos_if_print IF_PRINTER_ARGS;
+extern void ppp_hdlc_if_print IF_PRINTER_ARGS;
+extern void ppp_if_print IF_PRINTER_ARGS;
+extern void pppoe_if_print IF_PRINTER_ARGS;
+extern void prism_if_print IF_PRINTER_ARGS;
+extern void raw_if_print IF_PRINTER_ARGS;
+extern void sl_bsdos_if_print IF_PRINTER_ARGS;
+extern void sl_if_print IF_PRINTER_ARGS;
+extern void sll2_if_print IF_PRINTER_ARGS;
+extern void sll_if_print IF_PRINTER_ARGS;
+extern void sunatm_if_print IF_PRINTER_ARGS;
+extern void symantec_if_print IF_PRINTER_ARGS;
+extern void token_if_print IF_PRINTER_ARGS;
+extern void unsupported_if_print IF_PRINTER_ARGS;
+extern void usb_linux_48_byte_if_print IF_PRINTER_ARGS;
+extern void usb_linux_64_byte_if_print IF_PRINTER_ARGS;
+extern void vsock_if_print IF_PRINTER_ARGS;
+
+/*
+ * Structure passed to some printers to allow them to print
+ * link-layer address information if ndo_eflag isn't set
+ * (because they are for protocols that don't have their
+ * own addresses, so that we'd want to report link-layer
+ * address information).
+ *
+ * This contains a pointer to an address and a pointer to a routine
+ * to which we pass that pointer in order to get a string.
+ */
+struct lladdr_info {
+ const char *(*addr_string)(netdissect_options *, const u_char *);
+ const u_char *addr;
+};
+
+/* The printer routines. */
+
+extern void aarp_print(netdissect_options *, const u_char *, u_int);
+extern int ah_print(netdissect_options *, const u_char *);
+extern void ahcp_print(netdissect_options *, const u_char *, u_int);
+extern void aodv_print(netdissect_options *, const u_char *, u_int, int);
+extern void aoe_print(netdissect_options *, const u_char *, const u_int);
+extern int arista_ethertype_print(netdissect_options *,const u_char *, u_int);
+extern void arp_print(netdissect_options *, const u_char *, u_int, u_int);
+extern void ascii_print(netdissect_options *, const u_char *, u_int);
+extern void atalk_print(netdissect_options *, const u_char *, u_int);
+extern void atm_print(netdissect_options *, u_int, u_int, u_int, const u_char *, u_int, u_int);
+extern void babel_print(netdissect_options *, const u_char *, u_int);
+extern void bcm_li_print(netdissect_options *, const u_char *, u_int);
+extern void beep_print(netdissect_options *, const u_char *, u_int);
+extern void bfd_print(netdissect_options *, const u_char *, u_int, u_int);
+extern void bgp_print(netdissect_options *, const u_char *, u_int);
+extern const char *bgp_vpn_rd_print(netdissect_options *, const u_char *);
+extern void bootp_print(netdissect_options *, const u_char *, u_int);
+extern void calm_fast_print(netdissect_options *, const u_char *, u_int, const struct lladdr_info *);
+extern void carp_print(netdissect_options *, const u_char *, u_int, u_int);
+extern void cdp_print(netdissect_options *, const u_char *, u_int);
+extern void cfm_print(netdissect_options *, const u_char *, u_int);
+extern u_int chdlc_print(netdissect_options *, const u_char *, u_int);
+extern void cisco_autorp_print(netdissect_options *, const u_char *, u_int);
+extern void cnfp_print(netdissect_options *, const u_char *);
+extern void dccp_print(netdissect_options *, const u_char *, const u_char *, u_int);
+extern void decnet_print(netdissect_options *, const u_char *, u_int, u_int);
+extern void dhcp6_print(netdissect_options *, const u_char *, u_int);
+extern int dstopt_process(netdissect_options *, const u_char *);
+extern void dtp_print(netdissect_options *, const u_char *, u_int);
+extern void dvmrp_print(netdissect_options *, const u_char *, u_int);
+extern void eap_print(netdissect_options *, const u_char *, u_int);
+extern void eapol_print(netdissect_options *, const u_char *);
+extern void egp_print(netdissect_options *, const u_char *, u_int);
+extern void eigrp_print(netdissect_options *, const u_char *, u_int);
+extern void esp_print(netdissect_options *, const u_char *, u_int, const u_char *, u_int, int, u_int);
+extern u_int ether_print(netdissect_options *, const u_char *, u_int, u_int, void (*)(netdissect_options *, const u_char *), const u_char *);
+extern u_int ether_switch_tag_print(netdissect_options *, const u_char *, u_int, u_int, void (*)(netdissect_options *, const u_char *), u_int);
+extern int ethertype_print(netdissect_options *, u_short, const u_char *, u_int, u_int, const struct lladdr_info *, const struct lladdr_info *);
+extern u_int fddi_print(netdissect_options *, const u_char *, u_int, u_int);
+extern void forces_print(netdissect_options *, const u_char *, u_int);
+extern u_int fr_print(netdissect_options *, const u_char *, u_int);
+extern int frag6_print(netdissect_options *, const u_char *, const u_char *);
+extern void ftp_print(netdissect_options *, const u_char *, u_int);
+extern void geneve_print(netdissect_options *, const u_char *, u_int);
+extern void geonet_print(netdissect_options *, const u_char *, u_int, const struct lladdr_info *);
+extern void gre_print(netdissect_options *, const u_char *, u_int);
+extern int hbhopt_process(netdissect_options *, const u_char *, int *, uint32_t *);
+extern void hex_and_ascii_print(netdissect_options *, const char *, const u_char *, u_int);
+extern void hex_print(netdissect_options *, const char *ident, const u_char *cp, u_int);
+extern void hex_print_with_offset(netdissect_options *, const char *ident, const u_char *cp, u_int, u_int);
+extern void hncp_print(netdissect_options *, const u_char *, u_int);
+extern void hsrp_print(netdissect_options *, const u_char *, u_int);
+extern void http_print(netdissect_options *, const u_char *, u_int);
+extern void icmp6_print(netdissect_options *, const u_char *, u_int, const u_char *, int);
+extern void icmp_print(netdissect_options *, const u_char *, u_int, const u_char *, int);
+extern u_int ieee802_15_4_print(netdissect_options *, const u_char *, u_int);
+extern u_int ieee802_11_radio_print(netdissect_options *, const u_char *, u_int, u_int);
+extern void igmp_print(netdissect_options *, const u_char *, u_int);
+extern void igrp_print(netdissect_options *, const u_char *, u_int);
+extern void ip6_print(netdissect_options *, const u_char *, u_int);
+extern void ipN_print(netdissect_options *, const u_char *, u_int);
+extern void ip_print(netdissect_options *, const u_char *, u_int);
+extern void ipcomp_print(netdissect_options *, const u_char *);
+extern void ipx_netbios_print(netdissect_options *, const u_char *, u_int);
+extern void ipx_print(netdissect_options *, const u_char *, u_int);
+extern void isakmp_print(netdissect_options *, const u_char *, u_int, const u_char *);
+extern void isakmp_rfc3948_print(netdissect_options *, const u_char *, u_int, const u_char *, int, int, u_int);
+extern void isoclns_print(netdissect_options *, const u_char *, u_int);
+extern void krb_print(netdissect_options *, const u_char *);
+extern void l2tp_print(netdissect_options *, const u_char *, u_int);
+extern void lane_print(netdissect_options *, const u_char *, u_int, u_int);
+extern void ldp_print(netdissect_options *, const u_char *, u_int);
+extern void lisp_print(netdissect_options *, const u_char *, u_int);
+extern u_int llap_print(netdissect_options *, const u_char *, u_int);
+extern int llc_print(netdissect_options *, const u_char *, u_int, u_int, const struct lladdr_info *, const struct lladdr_info *);
+extern void lldp_print(netdissect_options *, const u_char *, u_int);
+extern void lmp_print(netdissect_options *, const u_char *, u_int);
+extern void loopback_print(netdissect_options *, const u_char *, u_int);
+extern void lspping_print(netdissect_options *, const u_char *, u_int);
+extern void lwapp_control_print(netdissect_options *, const u_char *, u_int, int);
+extern void lwapp_data_print(netdissect_options *, const u_char *, u_int);
+extern void lwres_print(netdissect_options *, const u_char *, u_int);
+extern void m3ua_print(netdissect_options *, const u_char *, const u_int);
+extern int macsec_print(netdissect_options *, const u_char **,
+ u_int *, u_int *, u_int *, const struct lladdr_info *,
+ const struct lladdr_info *);
+extern u_int mfr_print(netdissect_options *, const u_char *, u_int);
+extern void mobile_print(netdissect_options *, const u_char *, u_int);
+extern int mobility_print(netdissect_options *, const u_char *, const u_char *);
+extern void mpcp_print(netdissect_options *, const u_char *, u_int);
+extern void mpls_print(netdissect_options *, const u_char *, u_int);
+extern int mptcp_print(netdissect_options *, const u_char *, u_int, u_char);
+extern void msdp_print(netdissect_options *, const u_char *, u_int);
+extern void msnlb_print(netdissect_options *, const u_char *);
+extern void nbt_tcp_print(netdissect_options *, const u_char *, u_int);
+extern void nbt_udp137_print(netdissect_options *, const u_char *, u_int);
+extern void nbt_udp138_print(netdissect_options *, const u_char *, u_int);
+extern void netbeui_print(netdissect_options *, u_short, const u_char *, u_int);
+extern void nfsreply_print(netdissect_options *, const u_char *, u_int, const u_char *);
+extern void nfsreply_noaddr_print(netdissect_options *, const u_char *, u_int, const u_char *);
+extern void nfsreq_noaddr_print(netdissect_options *, const u_char *, u_int, const u_char *);
+extern const u_char *fqdn_print(netdissect_options *, const u_char *, const u_char *);
+extern void domain_print(netdissect_options *, const u_char *, u_int, int, int);
+extern void nsh_print(netdissect_options *, const u_char *, u_int);
+extern void ntp_print(netdissect_options *, const u_char *, u_int);
+extern void oam_print(netdissect_options *, const u_char *, u_int, u_int);
+extern void olsr_print(netdissect_options *, const u_char *, u_int, int);
+extern void openflow_print(netdissect_options *, const u_char *, u_int);
+extern void ospf6_print(netdissect_options *, const u_char *, u_int);
+extern void ospf_print(netdissect_options *, const u_char *, u_int, const u_char *);
+extern int ospf_grace_lsa_print(netdissect_options *, const u_char *, u_int);
+extern int ospf_te_lsa_print(netdissect_options *, const u_char *, u_int);
+extern void otv_print(netdissect_options *, const u_char *, u_int);
+extern void pgm_print(netdissect_options *, const u_char *, u_int, const u_char *);
+extern void pim_print(netdissect_options *, const u_char *, u_int, const u_char *);
+extern void pimv1_print(netdissect_options *, const u_char *, u_int);
+extern u_int ppp_print(netdissect_options *, const u_char *, u_int);
+extern u_int pppoe_print(netdissect_options *, const u_char *, u_int);
+extern void pptp_print(netdissect_options *, const u_char *);
+extern void ptp_print(netdissect_options *, const u_char *, u_int);
+extern int print_unknown_data(netdissect_options *, const u_char *, const char *, u_int);
+extern const char *q922_string(netdissect_options *, const u_char *, u_int);
+extern void q933_print(netdissect_options *, const u_char *, u_int);
+extern void radius_print(netdissect_options *, const u_char *, u_int);
+extern void resp_print(netdissect_options *, const u_char *, u_int);
+extern void rip_print(netdissect_options *, const u_char *, u_int);
+extern void ripng_print(netdissect_options *, const u_char *, unsigned int);
+extern void rpki_rtr_print(netdissect_options *, const u_char *, u_int);
+extern void rsvp_print(netdissect_options *, const u_char *, u_int);
+extern int rt6_print(netdissect_options *, const u_char *, const u_char *);
+extern void rtl_print(netdissect_options *, const u_char *, u_int, const struct lladdr_info *, const struct lladdr_info *);
+extern void rtsp_print(netdissect_options *, const u_char *, u_int);
+extern void rx_print(netdissect_options *, const u_char *, u_int, uint16_t, uint16_t, const u_char *);
+extern void sctp_print(netdissect_options *, const u_char *, const u_char *, u_int);
+extern void sflow_print(netdissect_options *, const u_char *, u_int);
+extern void ssh_print(netdissect_options *, const u_char *, u_int);
+extern void sip_print(netdissect_options *, const u_char *, u_int);
+extern void slow_print(netdissect_options *, const u_char *, u_int);
+extern void smb_tcp_print(netdissect_options *, const u_char *, u_int);
+extern void smtp_print(netdissect_options *, const u_char *, u_int);
+extern int snap_print(netdissect_options *, const u_char *, u_int, u_int, const struct lladdr_info *, const struct lladdr_info *, u_int);
+extern void snmp_print(netdissect_options *, const u_char *, u_int);
+extern void stp_print(netdissect_options *, const u_char *, u_int);
+extern void sunrpc_print(netdissect_options *, const u_char *, u_int, const u_char *);
+extern void syslog_print(netdissect_options *, const u_char *, u_int);
+extern void tcp_print(netdissect_options *, const u_char *, u_int, const u_char *, int);
+extern void telnet_print(netdissect_options *, const u_char *, u_int);
+extern void tftp_print(netdissect_options *, const u_char *, u_int);
+extern void timed_print(netdissect_options *, const u_char *);
+extern void tipc_print(netdissect_options *, const u_char *, u_int, u_int);
+extern u_int token_print(netdissect_options *, const u_char *, u_int, u_int);
+extern void udld_print(netdissect_options *, const u_char *, u_int);
+extern void udp_print(netdissect_options *, const u_char *, u_int, const u_char *, int, u_int);
+extern int vjc_print(netdissect_options *, const u_char *, u_short);
+extern void vqp_print(netdissect_options *, const u_char *, u_int);
+extern void vrrp_print(netdissect_options *, const u_char *, u_int, const u_char *, int, int);
+extern void vtp_print(netdissect_options *, const u_char *, const u_int);
+extern void vxlan_gpe_print(netdissect_options *, const u_char *, u_int);
+extern void vxlan_print(netdissect_options *, const u_char *, u_int);
+extern void wb_print(netdissect_options *, const u_char *, u_int);
+extern void whois_print(netdissect_options *, const u_char *, u_int);
+extern void zep_print(netdissect_options *, const u_char *, u_int);
+extern void zephyr_print(netdissect_options *, const u_char *, u_int);
+extern void zmtp1_print(netdissect_options *, const u_char *, u_int);
+extern void zmtp1_datagram_print(netdissect_options *, const u_char *, const u_int);
+extern void someip_print(netdissect_options *, const u_char *, const u_int);
+
+/* checksum routines */
+extern void init_checksum(void);
+extern uint16_t verify_crc10_cksum(uint16_t, const u_char *, int);
+extern uint16_t create_osi_cksum(const uint8_t *, int, int);
+
+struct cksum_vec {
+ const uint8_t *ptr;
+ int len;
+};
+extern uint16_t in_cksum(const struct cksum_vec *, int);
+extern uint16_t in_cksum_shouldbe(uint16_t, uint16_t);
+
+/* IP protocol demuxing routines */
+extern void ip_demux_print(netdissect_options *, const u_char *, u_int, u_int, int, u_int, uint8_t, const u_char *);
+
+extern uint16_t nextproto4_cksum(netdissect_options *, const struct ip *, const uint8_t *, u_int, u_int, uint8_t);
+
+/* in print-ip6.c */
+extern uint16_t nextproto6_cksum(netdissect_options *, const struct ip6_hdr *, const uint8_t *, u_int, u_int, uint8_t);
+
+/* Utilities */
+extern void nd_print_trunc(netdissect_options *);
+extern void nd_print_protocol(netdissect_options *);
+extern void nd_print_protocol_caps(netdissect_options *);
+extern void nd_print_invalid(netdissect_options *);
+
+extern int mask2plen(uint32_t);
+extern int mask62plen(const u_char *);
+
+extern const char *dnnum_string(netdissect_options *, u_short);
+
+extern int decode_prefix4(netdissect_options *, const u_char *, u_int, char *, size_t);
+extern int decode_prefix6(netdissect_options *, const u_char *, u_int, char *, size_t);
+
+extern void esp_decodesecret_print(netdissect_options *);
+extern int esp_decrypt_buffer_by_ikev2_print(netdissect_options *, int,
+ const u_char spii[8],
+ const u_char spir[8],
+ const u_char *, const u_char *);
+
+#endif /* netdissect_h */
diff --git a/nfs.h b/nfs.h
new file mode 100644
index 0000000..87ba1a7
--- /dev/null
+++ b/nfs.h
@@ -0,0 +1,417 @@
+/* NetBSD: nfs.h,v 1.1 1996/05/23 22:49:53 fvdl Exp */
+
+/*
+ * Copyright (c) 1989, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Rick Macklem at The University of Guelph.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)nfsproto.h 8.2 (Berkeley) 3/30/95
+ */
+
+/*
+ * nfs definitions as per the Version 2 and 3 specs
+ */
+
+/*
+ * Constants as defined in the Sun NFS Version 2 and 3 specs.
+ * "NFS: Network File System Protocol Specification" RFC1094
+ * and in the "NFS: Network File System Version 3 Protocol
+ * Specification"
+ */
+
+#define NFS_PORT 2049
+#define NFS_PROG 100003
+#define NFS_VER2 2
+#define NFS_VER3 3
+#define NFS_V2MAXDATA 8192
+#define NFS_MAXDGRAMDATA 16384
+#define NFS_MAXDATA 32768
+#define NFS_MAXPATHLEN 1024
+#define NFS_MAXNAMLEN 255
+#define NFS_MAXPKTHDR 404
+#define NFS_MAXPACKET (NFS_MAXPKTHDR + NFS_MAXDATA)
+#define NFS_MINPACKET 20
+#define NFS_FABLKSIZE 512 /* Size in bytes of a block wrt fa_blocks */
+
+/* Stat numbers for rpc returns (version 2 and 3) */
+#define NFS_OK 0
+#define NFSERR_PERM 1
+#define NFSERR_NOENT 2
+#define NFSERR_IO 5
+#define NFSERR_NXIO 6
+#define NFSERR_ACCES 13
+#define NFSERR_EXIST 17
+#define NFSERR_XDEV 18 /* Version 3 only */
+#define NFSERR_NODEV 19
+#define NFSERR_NOTDIR 20
+#define NFSERR_ISDIR 21
+#define NFSERR_INVAL 22 /* Version 3 only */
+#define NFSERR_FBIG 27
+#define NFSERR_NOSPC 28
+#define NFSERR_ROFS 30
+#define NFSERR_MLINK 31 /* Version 3 only */
+#define NFSERR_NAMETOL 63
+#define NFSERR_NOTEMPTY 66
+#define NFSERR_DQUOT 69
+#define NFSERR_STALE 70
+#define NFSERR_REMOTE 71 /* Version 3 only */
+#define NFSERR_WFLUSH 99 /* Version 2 only */
+#define NFSERR_BADHANDLE 10001 /* The rest Version 3 only */
+#define NFSERR_NOT_SYNC 10002
+#define NFSERR_BAD_COOKIE 10003
+#define NFSERR_NOTSUPP 10004
+#define NFSERR_TOOSMALL 10005
+#define NFSERR_SERVERFAULT 10006
+#define NFSERR_BADTYPE 10007
+#define NFSERR_JUKEBOX 10008
+#define NFSERR_TRYLATER NFSERR_JUKEBOX
+#define NFSERR_STALEWRITEVERF 30001 /* Fake return for nfs_commit() */
+
+#define NFSERR_RETVOID 0x20000000 /* Return void, not error */
+#define NFSERR_AUTHERR 0x40000000 /* Mark an authentication error */
+#define NFSERR_RETERR 0x80000000 /* Mark an error return for V3 */
+
+/* Sizes in bytes of various nfs rpc components */
+#define NFSX_UNSIGNED 4
+
+/* specific to NFS Version 2 */
+#define NFSX_V2FH 32
+#define NFSX_V2FATTR 68
+#define NFSX_V2SATTR 32
+#define NFSX_V2COOKIE 4
+#define NFSX_V2STATFS 20
+
+/* specific to NFS Version 3 */
+#if 0
+#define NFSX_V3FH (sizeof (fhandle_t)) /* size this server uses */
+#endif
+#define NFSX_V3FHMAX 64 /* max. allowed by protocol */
+#define NFSX_V3FATTR 84
+#define NFSX_V3SATTR 60 /* max. all fields filled in */
+#define NFSX_V3POSTOPATTR (NFSX_V3FATTR + NFSX_UNSIGNED)
+#define NFSX_V3WCCDATA (NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED)
+#define NFSX_V3COOKIEVERF 8
+#define NFSX_V3WRITEVERF 8
+#define NFSX_V3CREATEVERF 8
+#define NFSX_V3STATFS 52
+#define NFSX_V3FSINFO 48
+#define NFSX_V3PATHCONF 24
+
+/* variants for both versions */
+#define NFSX_FH(v3) ((v3) ? (NFSX_V3FHMAX + NFSX_UNSIGNED) : \
+ NFSX_V2FH)
+#define NFSX_SRVFH(v3) ((v3) ? NFSX_V3FH : NFSX_V2FH)
+#define NFSX_FATTR(v3) ((v3) ? NFSX_V3FATTR : NFSX_V2FATTR)
+#define NFSX_PREOPATTR(v3) ((v3) ? (7 * NFSX_UNSIGNED) : 0)
+#define NFSX_POSTOPATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : 0)
+#define NFSX_POSTOPORFATTR(v3) ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : \
+ NFSX_V2FATTR)
+#define NFSX_WCCDATA(v3) ((v3) ? NFSX_V3WCCDATA : 0)
+#define NFSX_WCCORFATTR(v3) ((v3) ? NFSX_V3WCCDATA : NFSX_V2FATTR)
+#define NFSX_COOKIEVERF(v3) ((v3) ? NFSX_V3COOKIEVERF : 0)
+#define NFSX_WRITEVERF(v3) ((v3) ? NFSX_V3WRITEVERF : 0)
+#define NFSX_READDIR(v3) ((v3) ? (5 * NFSX_UNSIGNED) : \
+ (2 * NFSX_UNSIGNED))
+#define NFSX_STATFS(v3) ((v3) ? NFSX_V3STATFS : NFSX_V2STATFS)
+
+/* nfs rpc procedure numbers (before version mapping) */
+#define NFSPROC_NULL 0
+#define NFSPROC_GETATTR 1
+#define NFSPROC_SETATTR 2
+#define NFSPROC_LOOKUP 3
+#define NFSPROC_ACCESS 4
+#define NFSPROC_READLINK 5
+#define NFSPROC_READ 6
+#define NFSPROC_WRITE 7
+#define NFSPROC_CREATE 8
+#define NFSPROC_MKDIR 9
+#define NFSPROC_SYMLINK 10
+#define NFSPROC_MKNOD 11
+#define NFSPROC_REMOVE 12
+#define NFSPROC_RMDIR 13
+#define NFSPROC_RENAME 14
+#define NFSPROC_LINK 15
+#define NFSPROC_READDIR 16
+#define NFSPROC_READDIRPLUS 17
+#define NFSPROC_FSSTAT 18
+#define NFSPROC_FSINFO 19
+#define NFSPROC_PATHCONF 20
+#define NFSPROC_COMMIT 21
+
+/* And leasing (nqnfs) procedure numbers (must be last) */
+#define NQNFSPROC_GETLEASE 22
+#define NQNFSPROC_VACATED 23
+#define NQNFSPROC_EVICTED 24
+
+#define NFSPROC_NOOP 25
+#define NFS_NPROCS 26
+
+/* Actual Version 2 procedure numbers */
+#define NFSV2PROC_NULL 0
+#define NFSV2PROC_GETATTR 1
+#define NFSV2PROC_SETATTR 2
+#define NFSV2PROC_NOOP 3
+#define NFSV2PROC_ROOT NFSV2PROC_NOOP /* Obsolete */
+#define NFSV2PROC_LOOKUP 4
+#define NFSV2PROC_READLINK 5
+#define NFSV2PROC_READ 6
+#define NFSV2PROC_WRITECACHE NFSV2PROC_NOOP /* Obsolete */
+#define NFSV2PROC_WRITE 8
+#define NFSV2PROC_CREATE 9
+#define NFSV2PROC_REMOVE 10
+#define NFSV2PROC_RENAME 11
+#define NFSV2PROC_LINK 12
+#define NFSV2PROC_SYMLINK 13
+#define NFSV2PROC_MKDIR 14
+#define NFSV2PROC_RMDIR 15
+#define NFSV2PROC_READDIR 16
+#define NFSV2PROC_STATFS 17
+
+/*
+ * Constants used by the Version 3 protocol for various RPCs
+ */
+#define NFSV3SATTRTIME_DONTCHANGE 0
+#define NFSV3SATTRTIME_TOSERVER 1
+#define NFSV3SATTRTIME_TOCLIENT 2
+
+#define NFSV3ATTRTIME_NMODES 3
+
+#define NFSV3ACCESS_READ 0x01
+#define NFSV3ACCESS_LOOKUP 0x02
+#define NFSV3ACCESS_MODIFY 0x04
+#define NFSV3ACCESS_EXTEND 0x08
+#define NFSV3ACCESS_DELETE 0x10
+#define NFSV3ACCESS_EXECUTE 0x20
+#define NFSV3ACCESS_FULL 0x3f
+
+#define NFSV3WRITE_UNSTABLE 0
+#define NFSV3WRITE_DATASYNC 1
+#define NFSV3WRITE_FILESYNC 2
+
+#define NFSV3WRITE_NMODES 3
+
+#define NFSV3CREATE_UNCHECKED 0
+#define NFSV3CREATE_GUARDED 1
+#define NFSV3CREATE_EXCLUSIVE 2
+
+#define NFSV3CREATE_NMODES 3
+
+#define NFSV3FSINFO_LINK 0x01
+#define NFSV3FSINFO_SYMLINK 0x02
+#define NFSV3FSINFO_HOMOGENEOUS 0x08
+#define NFSV3FSINFO_CANSETTIME 0x10
+
+/* Conversion macros */
+#define vtonfsv2_mode(t,m) \
+ txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \
+ MAKEIMODE((t), (m)))
+#define vtonfsv3_mode(m) txdr_unsigned((m) & 07777)
+#define nfstov_mode(a) (fxdr_unsigned(uint16_t, (a))&07777)
+#define vtonfsv2_type(a) txdr_unsigned(nfsv2_type[((int32_t)(a))])
+#define vtonfsv3_type(a) txdr_unsigned(nfsv3_type[((int32_t)(a))])
+#define nfsv2tov_type(a) nv2tov_type[fxdr_unsigned(uint32_t,(a))&0x7]
+#define nfsv3tov_type(a) nv3tov_type[fxdr_unsigned(uint32_t,(a))&0x7]
+
+/* File types */
+typedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5,
+ NFSOCK=6, NFFIFO=7 } nfs_type;
+
+/*
+ * Structs for common parts of the rpc's
+ *
+ * NOTE: these structures are not always overlaid directly on the
+ * packet data - sometimes we declare a local variable of that type,
+ * and fill it up with fields extracted using byte pointers - so we
+ * don't use nd_ types for their members.
+ */
+
+/*
+ * File Handle (32 bytes for version 2), variable up to 64 for version 3.
+ * File Handles of up to NFS_SMALLFH in size are stored directly in the
+ * nfs node, whereas larger ones are malloc'd. (This never happens when
+ * NFS_SMALLFH is set to 64.)
+ * NFS_SMALLFH should be in the range of 32 to 64 and be divisible by 4.
+ */
+#ifndef NFS_SMALLFH
+#define NFS_SMALLFH 64
+#endif
+union nfsfh {
+/* fhandle_t fh_generic; */
+ u_char fh_bytes[NFS_SMALLFH];
+};
+typedef union nfsfh nfsfh_t;
+
+struct nfsv2_time {
+ nd_uint32_t nfsv2_sec;
+ nd_uint32_t nfsv2_usec;
+};
+typedef struct nfsv2_time nfstime2;
+
+struct nfsv3_time {
+ nd_uint32_t nfsv3_sec;
+ nd_uint32_t nfsv3_nsec;
+};
+typedef struct nfsv3_time nfstime3;
+
+/*
+ * NFS Version 3 special file number.
+ */
+struct nfsv3_spec {
+ nd_uint32_t specdata1;
+ nd_uint32_t specdata2;
+};
+typedef struct nfsv3_spec nfsv3spec;
+
+/*
+ * File attributes and setable attributes. These structures cover both
+ * NFS version 2 and the version 3 protocol. Note that the union is only
+ * used so that one pointer can refer to both variants. These structures
+ * go out on the wire and must be densely packed, so no quad data types
+ * are used. (all fields are longs or u_longs or structures of same)
+ * NB: You can't do sizeof(struct nfs_fattr), you must use the
+ * NFSX_FATTR(v3) macro.
+ */
+struct nfs_fattr {
+ nd_uint32_t fa_type;
+ nd_uint32_t fa_mode;
+ nd_uint32_t fa_nlink;
+ nd_uint32_t fa_uid;
+ nd_uint32_t fa_gid;
+ union {
+ struct {
+ nd_uint32_t nfsv2fa_size;
+ nd_uint32_t nfsv2fa_blocksize;
+ nd_uint32_t nfsv2fa_rdev;
+ nd_uint32_t nfsv2fa_blocks;
+ nd_uint32_t nfsv2fa_fsid;
+ nd_uint32_t nfsv2fa_fileid;
+ nfstime2 nfsv2fa_atime;
+ nfstime2 nfsv2fa_mtime;
+ nfstime2 nfsv2fa_ctime;
+ } fa_nfsv2;
+ struct {
+ nd_uint64_t nfsv3fa_size;
+ nd_uint64_t nfsv3fa_used;
+ nfsv3spec nfsv3fa_rdev;
+ nd_uint64_t nfsv3fa_fsid;
+ nd_uint64_t nfsv3fa_fileid;
+ nfstime3 nfsv3fa_atime;
+ nfstime3 nfsv3fa_mtime;
+ nfstime3 nfsv3fa_ctime;
+ } fa_nfsv3;
+ } fa_un;
+};
+
+/* and some ugly defines for accessing union components */
+#define fa2_size fa_un.fa_nfsv2.nfsv2fa_size
+#define fa2_blocksize fa_un.fa_nfsv2.nfsv2fa_blocksize
+#define fa2_rdev fa_un.fa_nfsv2.nfsv2fa_rdev
+#define fa2_blocks fa_un.fa_nfsv2.nfsv2fa_blocks
+#define fa2_fsid fa_un.fa_nfsv2.nfsv2fa_fsid
+#define fa2_fileid fa_un.fa_nfsv2.nfsv2fa_fileid
+#define fa2_atime fa_un.fa_nfsv2.nfsv2fa_atime
+#define fa2_mtime fa_un.fa_nfsv2.nfsv2fa_mtime
+#define fa2_ctime fa_un.fa_nfsv2.nfsv2fa_ctime
+#define fa3_size fa_un.fa_nfsv3.nfsv3fa_size
+#define fa3_used fa_un.fa_nfsv3.nfsv3fa_used
+#define fa3_rdev fa_un.fa_nfsv3.nfsv3fa_rdev
+#define fa3_fsid fa_un.fa_nfsv3.nfsv3fa_fsid
+#define fa3_fileid fa_un.fa_nfsv3.nfsv3fa_fileid
+#define fa3_atime fa_un.fa_nfsv3.nfsv3fa_atime
+#define fa3_mtime fa_un.fa_nfsv3.nfsv3fa_mtime
+#define fa3_ctime fa_un.fa_nfsv3.nfsv3fa_ctime
+
+struct nfsv2_sattr {
+ nd_uint32_t sa_mode;
+ nd_uint32_t sa_uid;
+ nd_uint32_t sa_gid;
+ nd_uint32_t sa_size;
+ nfstime2 sa_atime;
+ nfstime2 sa_mtime;
+};
+
+struct nfs_statfs {
+ union {
+ struct {
+ nd_uint32_t nfsv2sf_tsize;
+ nd_uint32_t nfsv2sf_bsize;
+ nd_uint32_t nfsv2sf_blocks;
+ nd_uint32_t nfsv2sf_bfree;
+ nd_uint32_t nfsv2sf_bavail;
+ } sf_nfsv2;
+ struct {
+ nd_uint64_t nfsv3sf_tbytes;
+ nd_uint64_t nfsv3sf_fbytes;
+ nd_uint64_t nfsv3sf_abytes;
+ nd_uint64_t nfsv3sf_tfiles;
+ nd_uint64_t nfsv3sf_ffiles;
+ nd_uint64_t nfsv3sf_afiles;
+ nd_uint32_t nfsv3sf_invarsec;
+ } sf_nfsv3;
+ } sf_un;
+};
+
+#define sf_tsize sf_un.sf_nfsv2.nfsv2sf_tsize
+#define sf_bsize sf_un.sf_nfsv2.nfsv2sf_bsize
+#define sf_blocks sf_un.sf_nfsv2.nfsv2sf_blocks
+#define sf_bfree sf_un.sf_nfsv2.nfsv2sf_bfree
+#define sf_bavail sf_un.sf_nfsv2.nfsv2sf_bavail
+#define sf_tbytes sf_un.sf_nfsv3.nfsv3sf_tbytes
+#define sf_fbytes sf_un.sf_nfsv3.nfsv3sf_fbytes
+#define sf_abytes sf_un.sf_nfsv3.nfsv3sf_abytes
+#define sf_tfiles sf_un.sf_nfsv3.nfsv3sf_tfiles
+#define sf_ffiles sf_un.sf_nfsv3.nfsv3sf_ffiles
+#define sf_afiles sf_un.sf_nfsv3.nfsv3sf_afiles
+#define sf_invarsec sf_un.sf_nfsv3.nfsv3sf_invarsec
+
+struct nfsv3_fsinfo {
+ nd_uint32_t fs_rtmax;
+ nd_uint32_t fs_rtpref;
+ nd_uint32_t fs_rtmult;
+ nd_uint32_t fs_wtmax;
+ nd_uint32_t fs_wtpref;
+ nd_uint32_t fs_wtmult;
+ nd_uint32_t fs_dtpref;
+ nd_uint64_t fs_maxfilesize;
+ nfstime3 fs_timedelta;
+ nd_uint32_t fs_properties;
+};
+
+struct nfsv3_pathconf {
+ nd_uint32_t pc_linkmax;
+ nd_uint32_t pc_namemax;
+ nd_uint32_t pc_notrunc;
+ nd_uint32_t pc_chownrestricted;
+ nd_uint32_t pc_caseinsensitive;
+ nd_uint32_t pc_casepreserving;
+};
diff --git a/nfsfh.h b/nfsfh.h
new file mode 100644
index 0000000..bf378bb
--- /dev/null
+++ b/nfsfh.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1993, 1994 Jeffrey C. Mogul, Digital Equipment Corporation,
+ * Western Research Laboratory. All rights reserved.
+ * Copyright (c) 2001 Compaq Computer Corporation. All rights reserved.
+ *
+ * Permission to use, copy, and modify this software and its
+ * documentation is hereby granted only under the following terms and
+ * conditions. Both the above copyright notice and this permission
+ * notice must appear in all copies of the software, derivative works
+ * or modified versions, and any portions thereof, and both notices
+ * must appear in supporting documentation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND COMPAQ COMPUTER CORPORATION
+ * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
+ * EVENT SHALL COMPAQ COMPUTER CORPORATION BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+/*
+ * nfsfh.h - NFS file handle definitions (for portable use)
+ *
+ * Jeffrey C. Mogul
+ * Digital Equipment Corporation
+ * Western Research Laboratory
+ */
+
+/*
+ * Internal representation of dev_t, because different NFS servers
+ * that we might be spying upon use different external representations.
+ */
+typedef struct {
+ uint32_t Minor; /* upper case to avoid clashing with macro names */
+ uint32_t Major;
+} my_devt;
+
+#define dev_eq(a,b) ((a.Minor == b.Minor) && (a.Major == b.Major))
+
+/*
+ * Many file servers now use a large file system ID. This is
+ * our internal representation of that.
+ */
+typedef struct {
+ my_devt Fsid_dev; /* XXX avoid name conflict with AIX */
+ char Opaque_Handle[2 * 32 + 1];
+ uint32_t fsid_code;
+} my_fsid;
+
+#define fsid_eq(a,b) ((a.fsid_code == b.fsid_code) &&\
+ dev_eq(a.Fsid_dev, b.Fsid_dev))
+
+extern void Parse_fh(netdissect_options *, const unsigned char *, u_int, my_fsid *, uint32_t *, const char **, const char **, int);
diff --git a/nlpid.c b/nlpid.c
new file mode 100644
index 0000000..59f6e59
--- /dev/null
+++ b/nlpid.c
@@ -0,0 +1,41 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include "netdissect.h"
+#include "nlpid.h"
+
+const struct tok nlpid_values[] = {
+ { NLPID_NULLNS, "NULL" },
+ { NLPID_Q933, "Q.933" },
+ { NLPID_LMI, "LMI" },
+ { NLPID_SNAP, "SNAP" },
+ { NLPID_CLNP, "CLNP" },
+ { NLPID_ESIS, "ES-IS" },
+ { NLPID_ISIS, "IS-IS" },
+ { NLPID_CONS, "CONS" },
+ { NLPID_IDRP, "IDRP" },
+ { NLPID_SPB, "ISIS_SPB" },
+ { NLPID_MFR, "FRF.15" },
+ { NLPID_IP, "IPv4" },
+ { NLPID_PPP, "PPP" },
+ { NLPID_X25_ESIS, "X25 ES-IS" },
+ { NLPID_IP6, "IPv6" },
+ { 0, NULL }
+};
diff --git a/nlpid.h b/nlpid.h
new file mode 100644
index 0000000..a3a6905
--- /dev/null
+++ b/nlpid.h
@@ -0,0 +1,32 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+extern const struct tok nlpid_values[];
+
+#define NLPID_NULLNS 0x00
+#define NLPID_Q933 0x08 /* ANSI T1.617 Annex D or ITU-T Q.933 Annex A */
+#define NLPID_LMI 0x09 /* The original, aka Cisco, aka Gang of Four */
+#define NLPID_SNAP 0x80
+#define NLPID_CLNP 0x81 /* iso9577 */
+#define NLPID_ESIS 0x82 /* iso9577 */
+#define NLPID_ISIS 0x83 /* iso9577 */
+#define NLPID_CONS 0x84
+#define NLPID_IDRP 0x85
+#define NLPID_MFR 0xb1 /* FRF.15 */
+#define NLPID_SPB 0xc1 /* IEEE 802.1aq/D4.5 */
+#define NLPID_IP 0xcc
+#define NLPID_PPP 0xcf
+#define NLPID_X25_ESIS 0x8a
+#define NLPID_IP6 0x8e
diff --git a/ntp.c b/ntp.c
new file mode 100644
index 0000000..ec8f659
--- /dev/null
+++ b/ntp.c
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "ntp.h"
+
+#include "extract.h"
+
+#define JAN_1970 INT64_T_CONSTANT(2208988800) /* 1970 - 1900 in seconds */
+
+void
+p_ntp_time(netdissect_options *ndo,
+ const struct l_fixedpt *lfp)
+{
+ uint32_t i;
+ uint32_t uf;
+ uint32_t f;
+ double ff;
+
+ i = GET_BE_U_4(lfp->int_part);
+ uf = GET_BE_U_4(lfp->fraction);
+ ff = uf;
+ if (ff < 0.0) /* some compilers are buggy */
+ ff += FMAXINT;
+ ff = ff / FMAXINT; /* shift radix point by 32 bits */
+ f = (uint32_t)(ff * 1000000000.0); /* treat fraction as parts per billion */
+ ND_PRINT("%u.%09u", i, f);
+
+ /*
+ * print the UTC time in human-readable format.
+ */
+ if (i) {
+ int64_t seconds_64bit = (int64_t)i - JAN_1970;
+ time_t seconds;
+ char time_buf[128];
+ const char *time_string;
+
+ seconds = (time_t)seconds_64bit;
+ if (seconds != seconds_64bit) {
+ /*
+ * It doesn't fit into a time_t, so we can't hand it
+ * to gmtime.
+ */
+ time_string = "[Time is too large to fit into a time_t]";
+ } else {
+ /* use ISO 8601 (RFC3339) format */
+ time_string = nd_format_time(time_buf, sizeof (time_buf),
+ "%Y-%m-%dT%H:%M:%SZ", gmtime(&seconds));
+ }
+ ND_PRINT(" (%s)", time_string);
+ }
+}
diff --git a/ntp.h b/ntp.h
new file mode 100644
index 0000000..78644e2
--- /dev/null
+++ b/ntp.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+
+/*
+ * Structure definitions for NTP fixed point values
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Integer Part |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Fraction Part |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Integer Part | Fraction Part |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+*/
+struct l_fixedpt {
+ nd_uint32_t int_part;
+ nd_uint32_t fraction;
+};
+
+struct s_fixedpt {
+ nd_uint16_t int_part;
+ nd_uint16_t fraction;
+};
+
+void p_ntp_time(netdissect_options *, const struct l_fixedpt *);
diff --git a/openflow.h b/openflow.h
new file mode 100644
index 0000000..2d56d15
--- /dev/null
+++ b/openflow.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2013 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* OpenFlow: protocol between controller and datapath. */
+
+/* for netdissect_options */
+#include "netdissect.h"
+
+#define OF_FWD(n) { \
+ cp += (n); \
+ len -= (n); \
+}
+
+#define OF_CHK_FWD(n) { \
+ ND_TCHECK_LEN(cp, (n)); \
+ cp += (n); \
+ len -= (n); \
+}
+
+#define OF_VER_1_0 0x01U
+#define OF_VER_1_1 0x02U
+#define OF_VER_1_2 0x03U
+#define OF_VER_1_3 0x04U
+#define OF_VER_1_4 0x05U
+#define OF_VER_1_5 0x06U
+
+#define OF_HEADER_FIXLEN 8U
+
+#define ONF_EXP_ONF 0x4f4e4600
+#define ONF_EXP_BUTE 0xff000001
+#define ONF_EXP_NOVIFLOW 0xff000002
+#define ONF_EXP_L3 0xff000003
+#define ONF_EXP_L4L7 0xff000004
+#define ONF_EXP_WMOB 0xff000005
+#define ONF_EXP_FABS 0xff000006
+#define ONF_EXP_OTRANS 0xff000007
+#define ONF_EXP_NBLNCTU 0xff000008
+#define ONF_EXP_MPCE 0xff000009
+#define ONF_EXP_MPLSTPSPTN 0xff00000a
+extern const struct tok onf_exp_str[];
+
+extern const char * of_vendor_name(const uint32_t);
+extern void of_bitmap_print(netdissect_options *ndo,
+ const struct tok *, const uint32_t, const uint32_t);
+extern void of_data_print(netdissect_options *ndo,
+ const u_char *, const u_int);
+
+/*
+ * Routines to handle various versions of OpenFlow.
+ */
+
+struct of_msgtypeinfo {
+ /* Should not be NULL. */
+ const char *name;
+ /* May be NULL to mean "message body printing is not implemented". */
+ void (*decoder)(netdissect_options *ndo, const u_char *, const u_int);
+ enum {
+ REQ_NONE, /* Message body length may be anything. */
+ REQ_FIXLEN, /* Message body length must be == req_value. */
+ REQ_MINLEN, /* Message body length must be >= req_value. */
+ } req_what;
+ uint16_t req_value;
+};
+
+extern const struct of_msgtypeinfo *of10_identify_msgtype(const uint8_t);
+extern const struct of_msgtypeinfo *of13_identify_msgtype(const uint8_t);
diff --git a/ospf.h b/ospf.h
new file mode 100644
index 0000000..97e2384
--- /dev/null
+++ b/ospf.h
@@ -0,0 +1,325 @@
+/*
+ * Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * OSPF support contributed by Jeffrey Honig (jch@mitchell.cit.cornell.edu)
+ */
+#define OSPF_TYPE_HELLO 1 /* Hello */
+#define OSPF_TYPE_DD 2 /* Database Description */
+#define OSPF_TYPE_LS_REQ 3 /* Link State Request */
+#define OSPF_TYPE_LS_UPDATE 4 /* Link State Update */
+#define OSPF_TYPE_LS_ACK 5 /* Link State Ack */
+
+/* Options field
+ *
+ * +------------------------------------+
+ * | DN | O | DC | L | N/P | MC | E | T |
+ * +------------------------------------+
+ *
+ */
+
+#define OSPF_OPTION_MT 0x01 /* MT bit: multi-topology */
+#define OSPF_OPTION_E 0x02 /* E bit: External routes advertised */
+#define OSPF_OPTION_MC 0x04 /* MC bit: Multicast capable */
+#define OSPF_OPTION_NP 0x08 /* N/P bit: NSSA capable */
+#define OSPF_OPTION_L 0x10 /* L bit: Packet contains LLS data block */
+#define OSPF_OPTION_DC 0x20 /* DC bit: Demand circuit capable */
+#define OSPF_OPTION_O 0x40 /* O bit: Opaque LSA capable */
+#define OSPF_OPTION_DN 0x80 /* DN bit: Up/Down Bit capable - draft-ietf-ospf-2547-dnbit-04 */
+
+/* ospf_authtype */
+#define OSPF_AUTH_NONE 0 /* No auth-data */
+#define OSPF_AUTH_SIMPLE 1 /* Simple password */
+#define OSPF_AUTH_SIMPLE_LEN 8 /* max length of simple authentication */
+#define OSPF_AUTH_MD5 2 /* MD5 authentication */
+#define OSPF_AUTH_MD5_LEN 16 /* length of MD5 authentication */
+
+/* db_flags */
+#define OSPF_DB_INIT 0x04
+#define OSPF_DB_MORE 0x02
+#define OSPF_DB_MASTER 0x01
+#define OSPF_DB_RESYNC 0x08 /* RFC4811 */
+
+/* ls_type */
+#define LS_TYPE_ROUTER 1 /* router link */
+#define LS_TYPE_NETWORK 2 /* network link */
+#define LS_TYPE_SUM_IP 3 /* summary link */
+#define LS_TYPE_SUM_ABR 4 /* summary area link */
+#define LS_TYPE_ASE 5 /* ASE */
+#define LS_TYPE_GROUP 6 /* Group membership (multicast */
+ /* extensions 23 July 1991) */
+#define LS_TYPE_NSSA 7 /* rfc3101 - Not so Stubby Areas */
+#define LS_TYPE_OPAQUE_LL 9 /* rfc2370 - Opaque Link Local */
+#define LS_TYPE_OPAQUE_AL 10 /* rfc2370 - Opaque Link Local */
+#define LS_TYPE_OPAQUE_DW 11 /* rfc2370 - Opaque Domain Wide */
+
+#define LS_OPAQUE_TYPE_TE 1 /* rfc3630 */
+#define LS_OPAQUE_TYPE_GRACE 3 /* rfc3623 */
+#define LS_OPAQUE_TYPE_RI 4 /* draft-ietf-ospf-cap-03 */
+
+#define LS_OPAQUE_TE_TLV_ROUTER 1 /* rfc3630 */
+#define LS_OPAQUE_TE_TLV_LINK 2 /* rfc3630 */
+
+#define LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE 1 /* rfc3630 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_LINK_ID 2 /* rfc3630 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_LOCAL_IP 3 /* rfc3630 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_REMOTE_IP 4 /* rfc3630 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_TE_METRIC 5 /* rfc3630 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_MAX_BW 6 /* rfc3630 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_MAX_RES_BW 7 /* rfc3630 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_UNRES_BW 8 /* rfc3630 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_ADMIN_GROUP 9 /* rfc3630 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_LINK_LOCAL_REMOTE_ID 11 /* rfc4203 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_LINK_PROTECTION_TYPE 14 /* rfc4203 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_INTF_SW_CAP_DESCR 15 /* rfc4203 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_SHARED_RISK_GROUP 16 /* rfc4203 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_BW_CONSTRAINTS 17 /* rfc4124 */
+
+#define LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE_PTP 1 /* rfc3630 */
+#define LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE_MA 2 /* rfc3630 */
+
+#define LS_OPAQUE_GRACE_TLV_PERIOD 1 /* rfc3623 */
+#define LS_OPAQUE_GRACE_TLV_REASON 2 /* rfc3623 */
+#define LS_OPAQUE_GRACE_TLV_INT_ADDRESS 3 /* rfc3623 */
+
+#define LS_OPAQUE_GRACE_TLV_REASON_UNKNOWN 0 /* rfc3623 */
+#define LS_OPAQUE_GRACE_TLV_REASON_SW_RESTART 1 /* rfc3623 */
+#define LS_OPAQUE_GRACE_TLV_REASON_SW_UPGRADE 2 /* rfc3623 */
+#define LS_OPAQUE_GRACE_TLV_REASON_CP_SWITCH 3 /* rfc3623 */
+
+#define LS_OPAQUE_RI_TLV_CAP 1 /* draft-ietf-ospf-cap-03 */
+
+
+/* rla_link.link_type */
+#define RLA_TYPE_ROUTER 1 /* point-to-point to another router */
+#define RLA_TYPE_TRANSIT 2 /* connection to transit network */
+#define RLA_TYPE_STUB 3 /* connection to stub network */
+#define RLA_TYPE_VIRTUAL 4 /* virtual link */
+
+/* rla_flags */
+#define RLA_FLAG_B 0x01
+#define RLA_FLAG_E 0x02
+#define RLA_FLAG_V 0x04
+#define RLA_FLAG_W 0x08
+#define RLA_FLAG_NT 0x10 /* RFC3101 Appendix B */
+#define RLA_FLAG_H 0x80
+
+/* sla_tosmetric breakdown */
+#define SLA_MASK_TOS 0x7f000000
+#define SLA_MASK_METRIC 0x00ffffff
+#define SLA_SHIFT_TOS 24
+
+/* asla_tosmetric breakdown */
+#define ASLA_FLAG_EXTERNAL 0x80000000
+#define ASLA_MASK_TOS 0x7f000000
+#define ASLA_SHIFT_TOS 24
+#define ASLA_MASK_METRIC 0x00ffffff
+
+/* multicast vertex type */
+#define MCLA_VERTEX_ROUTER 1
+#define MCLA_VERTEX_NETWORK 2
+
+/* Link-Local-Signaling */
+#define OSPF_LLS_HDRLEN 4U /* RFC5613 Section 2.2 */
+
+#define OSPF_LLS_EO 1 /* RFC4811, RFC4812 */
+#define OSPF_LLS_MD5 2 /* RFC4813 */
+
+#define OSPF_LLS_EO_LR 0x00000001 /* RFC4811 */
+#define OSPF_LLS_EO_RS 0x00000002 /* RFC4812 */
+
+/*
+ * TOS metric struct (will be 0 or more in router links update)
+ */
+struct tos_metric {
+ nd_uint8_t tos_type;
+ nd_uint8_t reserved;
+ nd_uint16_t tos_metric;
+};
+struct tos_link {
+ nd_uint8_t link_type;
+ nd_uint8_t link_tos_count;
+ nd_uint16_t tos_metric;
+};
+union un_tos {
+ struct tos_link link;
+ struct tos_metric metrics;
+};
+
+/* link state advertisement header */
+struct lsa_hdr {
+ nd_uint16_t ls_age;
+ nd_uint8_t ls_options;
+ nd_uint8_t ls_type;
+ union {
+ nd_ipv4 lsa_id;
+ struct { /* opaque LSAs change the LSA-ID field */
+ nd_uint8_t opaque_type;
+ nd_uint24_t opaque_id;
+ } opaque_field;
+ } un_lsa_id;
+ nd_ipv4 ls_router;
+ nd_uint32_t ls_seq;
+ nd_uint16_t ls_chksum;
+ nd_uint16_t ls_length;
+};
+
+/* link state advertisement */
+struct lsa {
+ struct lsa_hdr ls_hdr;
+
+ /* Link state types */
+ union {
+ /* Router links advertisements */
+ struct {
+ nd_uint8_t rla_flags;
+ nd_byte rla_zero;
+ nd_uint16_t rla_count;
+ struct rlalink {
+ nd_ipv4 link_id;
+ nd_ipv4 link_data;
+ union un_tos un_tos;
+ } rla_link[1]; /* may repeat */
+ } un_rla;
+
+ /* Network links advertisements */
+ struct {
+ nd_ipv4 nla_mask;
+ nd_ipv4 nla_router[1]; /* may repeat */
+ } un_nla;
+
+ /* Summary links advertisements */
+ struct {
+ nd_ipv4 sla_mask;
+ nd_uint32_t sla_tosmetric[1]; /* may repeat */
+ } un_sla;
+
+ /* AS external links advertisements */
+ struct {
+ nd_ipv4 asla_mask;
+ struct aslametric {
+ nd_uint32_t asla_tosmetric;
+ nd_ipv4 asla_forward;
+ nd_ipv4 asla_tag;
+ } asla_metric[1]; /* may repeat */
+ } un_asla;
+
+ /* Multicast group membership */
+ struct mcla {
+ nd_uint32_t mcla_vtype;
+ nd_ipv4 mcla_vid;
+ } un_mcla[1];
+
+ /* Opaque TE LSA */
+ struct {
+ nd_uint16_t type;
+ nd_uint16_t length;
+ nd_byte data[1]; /* may repeat */
+ } un_te_lsa_tlv[1]; /* may repeat */
+
+ /* Opaque Grace LSA */
+ struct {
+ nd_uint16_t type;
+ nd_uint16_t length;
+ nd_byte data[1]; /* may repeat */
+ } un_grace_tlv[1]; /* may repeat */
+
+ /* Opaque Router information LSA */
+ struct {
+ nd_uint16_t type;
+ nd_uint16_t length;
+ nd_byte data[1]; /* may repeat */
+ } un_ri_tlv[1]; /* may repeat */
+
+ /* Unknown LSA */
+ struct unknown {
+ nd_byte data[1]; /* may repeat */
+ } un_unknown[1];
+
+ } lsa_un;
+};
+
+#define OSPF_AUTH_SIZE 8
+
+/*
+ * the main header
+ */
+struct ospfhdr {
+ nd_uint8_t ospf_version;
+ nd_uint8_t ospf_type;
+ nd_uint16_t ospf_len;
+ nd_ipv4 ospf_routerid;
+ nd_ipv4 ospf_areaid;
+ nd_uint16_t ospf_chksum;
+ nd_uint16_t ospf_authtype;
+ nd_byte ospf_authdata[OSPF_AUTH_SIZE];
+ union {
+
+ /* Hello packet */
+ struct {
+ nd_ipv4 hello_mask;
+ nd_uint16_t hello_helloint;
+ nd_uint8_t hello_options;
+ nd_uint8_t hello_priority;
+ nd_uint32_t hello_deadint;
+ nd_ipv4 hello_dr;
+ nd_ipv4 hello_bdr;
+ nd_ipv4 hello_neighbor[1]; /* may repeat */
+ } un_hello;
+
+ /* Database Description packet */
+ struct {
+ nd_uint16_t db_ifmtu;
+ nd_uint8_t db_options;
+ nd_uint8_t db_flags;
+ nd_uint32_t db_seq;
+ struct lsa_hdr db_lshdr[1]; /* may repeat */
+ } un_db;
+
+ /* Link State Request */
+ struct lsr {
+ nd_uint32_t ls_type;
+ union {
+ nd_ipv4 ls_stateid;
+ struct { /* opaque LSAs change the LSA-ID field */
+ nd_uint8_t opaque_type;
+ nd_uint24_t opaque_id;
+ } opaque_field;
+ } un_ls_stateid;
+ nd_ipv4 ls_router;
+ } un_lsr[1]; /* may repeat */
+
+ /* Link State Update */
+ struct {
+ nd_uint32_t lsu_count;
+ struct lsa lsu_lsa[1]; /* may repeat */
+ } un_lsu;
+
+ /* Link State Acknowledgement */
+ struct {
+ struct lsa_hdr lsa_lshdr[1]; /* may repeat */
+ } un_lsa ;
+ } ospf_un ;
+};
+
+#define ospf_hello ospf_un.un_hello
+#define ospf_db ospf_un.un_db
+#define ospf_lsr ospf_un.un_lsr
+#define ospf_lsu ospf_un.un_lsu
+#define ospf_lsa ospf_un.un_lsa
diff --git a/oui.c b/oui.c
new file mode 100644
index 0000000..25d08e2
--- /dev/null
+++ b/oui.c
@@ -0,0 +1,131 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include "netdissect.h"
+#include "oui.h"
+
+/* FIXME complete OUI list using a script */
+
+const struct tok oui_values[] = {
+ { OUI_ENCAP_ETHER, "Ethernet" },
+ { OUI_CISCO, "Cisco" },
+ { OUI_IANA, "IANA" },
+ { OUI_NORTEL, "Nortel Networks SONMP" },
+ { OUI_CISCO_90, "Cisco bridged" },
+ { OUI_RFC2684, "Ethernet bridged" },
+ { OUI_ATM_FORUM, "ATM Forum" },
+ { OUI_CABLE_BPDU, "DOCSIS Spanning Tree" },
+ { OUI_APPLETALK, "Appletalk" },
+ { OUI_JUNIPER, "Juniper" },
+ { OUI_HP, "Hewlett-Packard" },
+ { OUI_IEEE_8021_PRIVATE, "IEEE 802.1 Private"},
+ { OUI_IEEE_8023_PRIVATE, "IEEE 802.3 Private"},
+ { OUI_TIA, "ANSI/TIA"},
+ { OUI_DCBX, "DCBX"},
+ { OUI_NICIRA, "Nicira Networks" },
+ { OUI_BSN, "Big Switch Networks" },
+ { OUI_VELLO, "Vello Systems" },
+ { OUI_HP2, "HP" },
+ { OUI_HPLABS, "HP-Labs" },
+ { OUI_INFOBLOX, "Infoblox Inc" },
+ { OUI_ONLAB, "Open Networking Lab" },
+ { OUI_FREESCALE, "Freescale" },
+ { OUI_NETRONOME, "Netronome" },
+ { OUI_BROADCOM, "Broadcom" },
+ { OUI_PMC_SIERRA, "PMC-Sierra" },
+ { OUI_ERICSSON, "Ericsson" },
+ { 0, NULL }
+};
+
+/*
+ * SMI Network Management Private Enterprise Codes for organizations.
+ *
+ * XXX - these also appear in FreeRadius dictionary files, with items such
+ * as
+ *
+ * VENDOR Cisco 9
+ *
+ * List taken from Ethereal's epan/sminmpec.c.
+ */
+const struct tok smi_values[] = {
+ { SMI_IETF, "IETF (reserved)"},
+ { SMI_ACC, "ACC"},
+ { SMI_CISCO, "Cisco"},
+ { SMI_HEWLETT_PACKARD, "Hewlett Packard"},
+ { SMI_SUN_MICROSYSTEMS, "Sun Microsystems"},
+ { SMI_MERIT, "Merit"},
+ { SMI_AT_AND_T, "AT&T"},
+ { SMI_MOTOROLA, "Motorola"},
+ { SMI_SHIVA, "Shiva"},
+ { SMI_ERICSSON, "Ericsson AB"},
+ { SMI_CISCO_VPN5000, "Cisco VPN 5000"},
+ { SMI_LIVINGSTON, "Livingston"},
+ { SMI_MICROSOFT, "Microsoft"},
+ { SMI_3COM, "3Com"},
+ { SMI_ASCEND, "Ascend"},
+ { SMI_BAY, "Bay Networks"},
+ { SMI_FOUNDRY, "Foundry"},
+ { SMI_VERSANET, "Versanet"},
+ { SMI_REDBACK, "Redback"},
+ { SMI_JUNIPER, "Juniper Networks"},
+ { SMI_APTIS, "Aptis"},
+ { SMI_DT_AG, "Deutsche Telekom AG"},
+ { SMI_IXIA, "Ixia Communications"},
+ { SMI_CISCO_VPN3000, "Cisco VPN 3000"},
+ { SMI_COSINE, "CoSine Communications"},
+ { SMI_NETSCREEN, "Netscreen"},
+ { SMI_SHASTA, "Shasta"},
+ { SMI_NOMADIX, "Nomadix"},
+ { SMI_T_MOBILE, "T-Mobile"},
+ { SMI_BROADBAND_FORUM, "The Broadband Forum"},
+ { SMI_ZTE, "ZTE"},
+ { SMI_SIEMENS, "Siemens"},
+ { SMI_CABLELABS, "CableLabs"},
+ { SMI_UNISPHERE, "Unisphere Networks"},
+ { SMI_CISCO_BBSM, "Cisco BBSM"},
+ { SMI_THE3GPP2, "3rd Generation Partnership Project 2 (3GPP2)"},
+ { SMI_SKT_TELECOM, "SK Telecom"},
+ { SMI_IP_UNPLUGGED, "ipUnplugged"},
+ { SMI_ISSANNI, "Issanni Communications"},
+ { SMI_NETSCALER, "Netscaler"},
+ { SMI_DE_TE_MOBIL, "T-Mobile"},
+ { SMI_QUINTUM, "Quintum"},
+ { SMI_INTERLINK, "Interlink"},
+ { SMI_CNCTC, "CNCTC"},
+ { SMI_STARENT_NETWORKS, "Starent Networks"},
+ { SMI_COLUBRIS, "Colubris"},
+ { SMI_THE3GPP, "3GPP"},
+ { SMI_GEMTEK_SYSTEMS, "Gemtek-Systems"},
+ { SMI_BARRACUDA, "Barracuda Networks"},
+ { SMI_ERICSSON_PKT_CORE, "Ericsson AB - Packet Core Networks"},
+ { SMI_DACOM, "dacom"},
+ { SMI_COLUMBIA_UNIVERSITY, "Columbia University"},
+ { SMI_FORTINET, "Fortinet"},
+ { SMI_VERIZON, "Verizon Wireless"},
+ { SMI_PLIXER, "Plixer"},
+ { SMI_WIFI_ALLIANCE, "Wi-Fi Alliance"},
+ { SMI_T_SYSTEMS_NOVA, "T-Systems Nova"},
+ { SMI_CHINATELECOM_GUANZHOU, "China Telecom - Guangzhou Research Institute"},
+ { SMI_GIGAMON, "Gigamon Systems"},
+ { SMI_CACE, "CACE Technologies"},
+ { SMI_NTOP, "ntop"},
+ { SMI_ERICSSON_CANADA_INC, "Ericsson Canada"},
+ { 0, NULL}
+};
diff --git a/oui.h b/oui.h
new file mode 100644
index 0000000..3c82475
--- /dev/null
+++ b/oui.h
@@ -0,0 +1,119 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+extern const struct tok oui_values[];
+extern const struct tok smi_values[];
+
+#define OUI_ENCAP_ETHER 0x000000 /* encapsulated Ethernet */
+#define OUI_CISCO 0x00000c /* Cisco protocols */
+#define OUI_IANA 0x00005E /* IANA */
+#define OUI_NORTEL 0x000081 /* Nortel SONMP */
+#define OUI_CISCO_90 0x0000f8 /* Cisco bridging */
+#define OUI_RFC2684 0x0080c2 /* RFC 2427/2684 bridged Ethernet */
+#define OUI_ATM_FORUM 0x00A03E /* ATM Forum */
+#define OUI_CABLE_BPDU 0x00E02F /* DOCSIS spanning tree BPDU */
+#define OUI_APPLETALK 0x080007 /* Appletalk */
+#define OUI_JUNIPER 0x009069 /* Juniper */
+#define OUI_HP 0x080009 /* Hewlett-Packard */
+#define OUI_IEEE_8021_PRIVATE 0x0080c2 /* IEEE 802.1 Organisation Specific - Annex F */
+#define OUI_IEEE_8023_PRIVATE 0x00120f /* IEEE 802.3 Organisation Specific - Annex G */
+#define OUI_TIA 0x0012bb /* TIA - Telecommunications Industry Association - ANSI/TIA-1057- 2006 */
+#define OUI_DCBX 0x001B21 /* DCBX */
+#define OUI_NICIRA 0x002320 /* Nicira Networks */
+#define OUI_BSN 0x5c16c7 /* Big Switch Networks */
+#define OUI_VELLO 0xb0d2f5 /* Vello Systems */
+#define OUI_HP2 0x002481 /* HP too */
+#define OUI_HPLABS 0x0004ea /* HP-Labs */
+#define OUI_INFOBLOX 0x748771 /* Infoblox Inc */
+#define OUI_ONLAB 0xa42305 /* Open Networking Lab */
+#define OUI_FREESCALE 0x00049f /* Freescale */
+#define OUI_NETRONOME 0x0015ad /* Netronome */
+#define OUI_BROADCOM 0x001018 /* Broadcom */
+#define OUI_PMC_SIERRA 0x00e004 /* PMC-Sierra */
+#define OUI_ERICSSON 0xd0f0db /* Ericsson */
+
+/*
+ * These are SMI Network Management Private Enterprise Codes for
+ * organizations; see
+ *
+ * https://www.iana.org/assignments/enterprise-numbers
+ *
+ * for a list.
+ *
+ * List taken from Ethereal's epan/sminmpec.h.
+ */
+#define SMI_IETF 0 /* reserved - used by the IETF in L2TP? */
+#define SMI_ACC 5
+#define SMI_CISCO 9
+#define SMI_HEWLETT_PACKARD 11
+#define SMI_SUN_MICROSYSTEMS 42
+#define SMI_MERIT 61
+#define SMI_AT_AND_T 74
+#define SMI_MOTOROLA 161
+#define SMI_SHIVA 166
+#define SMI_ERICSSON 193
+#define SMI_CISCO_VPN5000 255
+#define SMI_LIVINGSTON 307
+#define SMI_MICROSOFT 311
+#define SMI_3COM 429
+#define SMI_ASCEND 529
+#define SMI_BAY 1584
+#define SMI_FOUNDRY 1991
+#define SMI_VERSANET 2180
+#define SMI_REDBACK 2352
+#define SMI_JUNIPER 2636
+#define SMI_APTIS 2637
+#define SMI_DT_AG 2937
+#define SMI_IXIA 3054
+#define SMI_CISCO_VPN3000 3076
+#define SMI_COSINE 3085
+#define SMI_SHASTA 3199
+#define SMI_NETSCREEN 3224
+#define SMI_NOMADIX 3309
+#define SMI_T_MOBILE 3414
+#define SMI_BROADBAND_FORUM 3561
+#define SMI_ZTE 3902
+#define SMI_SIEMENS 4329
+#define SMI_CABLELABS 4491
+#define SMI_UNISPHERE 4874
+#define SMI_CISCO_BBSM 5263
+#define SMI_THE3GPP2 5535
+#define SMI_SKT_TELECOM 5806
+#define SMI_IP_UNPLUGGED 5925
+#define SMI_ISSANNI 5948
+#define SMI_NETSCALER 5951
+#define SMI_DE_TE_MOBIL 6490
+#define SMI_QUINTUM 6618
+#define SMI_INTERLINK 6728
+#define SMI_CNCTC 7951
+#define SMI_STARENT_NETWORKS 8164
+#define SMI_COLUBRIS 8744
+#define SMI_THE3GPP 10415
+#define SMI_GEMTEK_SYSTEMS 10529
+#define SMI_BARRACUDA 10704
+#define SMI_ERICSSON_PKT_CORE 10923
+#define SMI_DACOM 11665
+#define SMI_COLUMBIA_UNIVERSITY 11862
+#define SMI_FORTINET 12356
+#define SMI_VERIZON 12951
+#define SMI_PLIXER 13745
+#define SMI_WIFI_ALLIANCE 14122
+#define SMI_T_SYSTEMS_NOVA 16787
+#define SMI_CHINATELECOM_GUANZHOU 20942
+#define SMI_GIGAMON 26866
+#define SMI_CACE 32622
+/* Greater than 32,767 need to be tagged unsigned. */
+#define SMI_NTOP 35632u
+#define SMI_ERICSSON_CANADA_INC 46098u
diff --git a/packetdat.awk b/packetdat.awk
new file mode 100644
index 0000000..292e219
--- /dev/null
+++ b/packetdat.awk
@@ -0,0 +1,61 @@
+BEGIN {
+ # we need to know (usual) packet size to convert byte numbers
+ # to packet numbers
+ if (packetsize <= 0)
+ packetsize = 512
+ }
+$5 !~ /[SR]/ {
+ # print out per-packet data in the form:
+ # <packet #>
+ # <start sequence #>
+ # <1st send time>
+ # <last send time>
+ # <1st ack time>
+ # <last ack time>
+ # <# sends>
+ # <# acks>
+
+ n = split ($1,t,":")
+ tim = t[1]*3600 + t[2]*60 + t[3]
+ if ($6 != "ack") {
+ i = index($6,":")
+ strtSeq = substr($6,1,i-1)
+ id = 1.5 + (strtSeq - 1) / packetsize
+ id -= id % 1
+ if (maxId < id)
+ maxId = id
+ if (firstSend[id] == 0) {
+ firstSend[id] = tim
+ seqNo[id] = strtSeq
+ }
+ lastSend[id] = tim
+ timesSent[id]++
+ totalPackets++
+ } else {
+ id = 1 + ($7 - 2) / packetsize
+ id -= id % 1
+ timesAcked[id]++
+ if (firstAck[id] == 0)
+ firstAck[id] = tim
+ lastAck[id] = tim
+ totalAcks++
+ }
+ }
+END {
+ print "# " maxId " chunks. " totalPackets " packets sent. " \
+ totalAcks " acks."
+ # for packets that were implicitly acked, make the ack time
+ # be the ack time of next explicitly acked packet.
+ for (i = maxId-1; i > 0; --i)
+ while (i > 0 && firstAck[i] == 0) {
+ lastAck[i] = firstAck[i] = firstAck[i+1]
+ --i
+ }
+ tzero = firstSend[1]
+ for (i = 1; i <= maxId; i++)
+ printf "%d\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t%d\n",\
+ i, seqNo[i], \
+ firstSend[i] - tzero, lastSend[i] - tzero,\
+ firstAck[i] - tzero, lastAck[i] - tzero,\
+ timesSent[i], timesAcked[i]
+ }
diff --git a/parsenfsfh.c b/parsenfsfh.c
new file mode 100644
index 0000000..cd94369
--- /dev/null
+++ b/parsenfsfh.c
@@ -0,0 +1,462 @@
+/*
+ * Copyright (c) 1993, 1994 Jeffrey C. Mogul, Digital Equipment Corporation,
+ * Western Research Laboratory. All rights reserved.
+ * Copyright (c) 2001 Compaq Computer Corporation. All rights reserved.
+ *
+ * Permission to use, copy, and modify this software and its
+ * documentation is hereby granted only under the following terms and
+ * conditions. Both the above copyright notice and this permission
+ * notice must appear in all copies of the software, derivative works
+ * or modified versions, and any portions thereof, and both notices
+ * must appear in supporting documentation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND COMPAQ COMPUTER CORPORATION
+ * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO
+ * EVENT SHALL COMPAQ COMPUTER CORPORATION BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+/*
+ * parsenfsfh.c - portable parser for NFS file handles
+ * uses all sorts of heuristics
+ *
+ * Jeffrey C. Mogul
+ * Digital Equipment Corporation
+ * Western Research Laboratory
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "netdissect-ctype.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "nfsfh.h"
+
+/*
+ * This routine attempts to parse a file handle (in network byte order),
+ * using heuristics to guess what kind of format it is in. See the
+ * file "fhandle_layouts" for a detailed description of the various
+ * patterns we know about.
+ *
+ * The file handle is parsed into our internal representation of a
+ * file-system id, and an internal representation of an inode-number.
+ */
+
+#define FHT_UNKNOWN 0
+#define FHT_AUSPEX 1
+#define FHT_DECOSF 2
+#define FHT_IRIX4 3
+#define FHT_IRIX5 4
+#define FHT_SUNOS3 5
+#define FHT_SUNOS4 6
+#define FHT_ULTRIX 7
+#define FHT_VMSUCX 8
+#define FHT_SUNOS5 9
+#define FHT_AIX32 10
+#define FHT_HPUX9 11
+#define FHT_BSD44 12
+
+static int is_UCX(netdissect_options *, const unsigned char *, u_int);
+
+void
+Parse_fh(netdissect_options *ndo, const unsigned char *fh, u_int len,
+ my_fsid *fsidp, uint32_t *inop,
+ const char **osnamep, /* if non-NULL, return OS name here */
+ const char **fsnamep, /* if non-NULL, return server fs name here (for VMS) */
+ int ourself) /* true if file handle was generated on this host */
+{
+ const unsigned char *fhp = fh;
+ uint32_t temp;
+ int fhtype = FHT_UNKNOWN;
+ u_int i;
+
+ /*
+ * Require at least 16 bytes of file handle; it's variable-length
+ * in NFSv3. "len" is in units of 32-bit words, not bytes.
+ */
+ if (len < 16/4)
+ fhtype = FHT_UNKNOWN;
+ else {
+ if (ourself) {
+ /* File handle generated on this host, no need for guessing */
+#if defined(IRIX40)
+ fhtype = FHT_IRIX4;
+#endif
+#if defined(IRIX50)
+ fhtype = FHT_IRIX5;
+#endif
+#if defined(IRIX51)
+ fhtype = FHT_IRIX5;
+#endif
+#if defined(SUNOS4)
+ fhtype = FHT_SUNOS4;
+#endif
+#if defined(SUNOS5)
+ fhtype = FHT_SUNOS5;
+#endif
+#if defined(ultrix)
+ fhtype = FHT_ULTRIX;
+#endif
+#if defined(__osf__)
+ fhtype = FHT_DECOSF;
+#endif
+#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) \
+ || defined(__OpenBSD__)
+ fhtype = FHT_BSD44;
+#endif
+ }
+ /*
+ * This is basically a big decision tree
+ */
+ else if ((GET_U_1(fhp) == 0) && (GET_U_1(fhp + 1) == 0)) {
+ /* bytes[0,1] == (0,0); rules out Ultrix, IRIX5, SUNOS5 */
+ /* probably rules out HP-UX, AIX unless they allow major=0 */
+ if ((GET_U_1(fhp + 2) == 0) && (GET_U_1(fhp + 3) == 0)) {
+ /* bytes[2,3] == (0,0); must be Auspex */
+ /* XXX or could be Ultrix+MASSBUS "hp" disk? */
+ fhtype = FHT_AUSPEX;
+ }
+ else {
+ /*
+ * bytes[2,3] != (0,0); rules out Auspex, could be
+ * DECOSF, SUNOS4, or IRIX4
+ */
+ if ((GET_U_1(fhp + 4) != 0) && (GET_U_1(fhp + 5) == 0) &&
+ (GET_U_1(fhp + 8) == 12) && (GET_U_1(fhp + 9) == 0)) {
+ /* seems to be DECOSF, with minor == 0 */
+ fhtype = FHT_DECOSF;
+ }
+ else {
+ /* could be SUNOS4 or IRIX4 */
+ /* XXX the test of fhp[5] == 8 could be wrong */
+ if ((GET_U_1(fhp + 4) == 0) && (GET_U_1(fhp + 5) == 8) && (GET_U_1(fhp + 6) == 0) &&
+ (GET_U_1(fhp + 7) == 0)) {
+ /* looks like a length, not a file system typecode */
+ fhtype = FHT_IRIX4;
+ }
+ else {
+ /* by elimination */
+ fhtype = FHT_SUNOS4;
+ }
+ }
+ }
+ }
+ else {
+ /*
+ * bytes[0,1] != (0,0); rules out Auspex, IRIX4, SUNOS4
+ * could be IRIX5, DECOSF, UCX, Ultrix, SUNOS5
+ * could be AIX, HP-UX
+ */
+ if ((GET_U_1(fhp + 2) == 0) && (GET_U_1(fhp + 3) == 0)) {
+ /*
+ * bytes[2,3] == (0,0); rules out OSF, probably not UCX
+ * (unless the exported device name is just one letter!),
+ * could be Ultrix, IRIX5, AIX, or SUNOS5
+ * might be HP-UX (depends on their values for minor devs)
+ */
+ if ((GET_U_1(fhp + 6) == 0) && (GET_U_1(fhp + 7) == 0)) {
+ fhtype = FHT_BSD44;
+ }
+ /*XXX we probably only need to test of these two bytes */
+ else if ((len >= 24/4) && (GET_U_1(fhp + 21) == 0) && (GET_U_1(fhp + 23) == 0)) {
+ fhtype = FHT_ULTRIX;
+ }
+ else {
+ /* Could be SUNOS5/IRIX5, maybe AIX */
+ /* XXX no obvious difference between SUNOS5 and IRIX5 */
+ if (GET_U_1(fhp + 9) == 10)
+ fhtype = FHT_SUNOS5;
+ /* XXX what about AIX? */
+ }
+ }
+ else {
+ /*
+ * bytes[2,3] != (0,0); rules out Ultrix, could be
+ * DECOSF, SUNOS5, IRIX5, AIX, HP-UX, or UCX
+ */
+ if ((GET_U_1(fhp + 8) == 12) && (GET_U_1(fhp + 9) == 0)) {
+ fhtype = FHT_DECOSF;
+ }
+ else if ((GET_U_1(fhp + 8) == 0) && (GET_U_1(fhp + 9) == 10)) {
+ /* could be SUNOS5/IRIX5, AIX, HP-UX */
+ if ((GET_U_1(fhp + 7) == 0) && (GET_U_1(fhp + 6) == 0) &&
+ (GET_U_1(fhp + 5) == 0) && (GET_U_1(fhp + 4) == 0)) {
+ /* XXX is this always true of HP-UX? */
+ fhtype = FHT_HPUX9;
+ }
+ else if (GET_U_1(fhp + 7) == 2) {
+ /* This would be MNT_NFS on AIX, which is impossible */
+ fhtype = FHT_SUNOS5; /* or maybe IRIX5 */
+ }
+ else {
+ /*
+ * XXX Could be SUNOS5/IRIX5 or AIX. I don't
+ * XXX see any way to disambiguate these, so
+ * XXX I'm going with the more likely guess.
+ * XXX Sorry, Big Blue.
+ */
+ fhtype = FHT_SUNOS5; /* or maybe IRIX5 */
+ }
+ }
+ else {
+ if (is_UCX(ndo, fhp, len)) {
+ fhtype = FHT_VMSUCX;
+ }
+ else {
+ fhtype = FHT_UNKNOWN;
+ }
+ }
+ }
+ }
+ }
+
+ /* XXX still needs to handle SUNOS3 */
+
+ switch (fhtype) {
+ case FHT_AUSPEX:
+ fsidp->Fsid_dev.Minor = GET_U_1(fhp + 7);
+ fsidp->Fsid_dev.Major = GET_U_1(fhp + 6);
+ fsidp->fsid_code = 0;
+
+ *inop = GET_BE_U_4(fhp + 12);
+
+ if (osnamep)
+ *osnamep = "Auspex";
+ break;
+
+ case FHT_BSD44:
+ fsidp->Fsid_dev.Minor = GET_U_1(fhp);
+ fsidp->Fsid_dev.Major = GET_U_1(fhp + 1);
+ fsidp->fsid_code = 0;
+
+ *inop = GET_LE_U_4(fhp + 12);
+
+ if (osnamep)
+ *osnamep = "BSD 4.4";
+ break;
+
+ case FHT_DECOSF:
+ fsidp->fsid_code = GET_LE_U_4(fhp + 4);
+ /* XXX could ignore 3 high-order bytes */
+
+ temp = GET_LE_U_4(fhp);
+ fsidp->Fsid_dev.Minor = temp & 0xFFFFF;
+ fsidp->Fsid_dev.Major = (temp>>20) & 0xFFF;
+
+ *inop = GET_LE_U_4(fhp + 12);
+ if (osnamep)
+ *osnamep = "OSF";
+ break;
+
+ case FHT_IRIX4:
+ fsidp->Fsid_dev.Minor = GET_U_1(fhp + 3);
+ fsidp->Fsid_dev.Major = GET_U_1(fhp + 2);
+ fsidp->fsid_code = 0;
+
+ *inop = GET_BE_U_4(fhp + 8);
+
+ if (osnamep)
+ *osnamep = "IRIX4";
+ break;
+
+ case FHT_IRIX5:
+ fsidp->Fsid_dev.Minor = GET_BE_U_2(fhp + 2);
+ fsidp->Fsid_dev.Major = GET_BE_U_2(fhp);
+ fsidp->fsid_code = GET_BE_U_4(fhp + 4);
+
+ *inop = GET_BE_U_4(fhp + 12);
+
+ if (osnamep)
+ *osnamep = "IRIX5";
+ break;
+
+#ifdef notdef
+ case FHT_SUNOS3:
+ /*
+ * XXX - none of the heuristics above return this.
+ * Are there any SunOS 3.x systems around to care about?
+ */
+ if (osnamep)
+ *osnamep = "SUNOS3";
+ break;
+#endif
+
+ case FHT_SUNOS4:
+ fsidp->Fsid_dev.Minor = GET_U_1(fhp + 3);
+ fsidp->Fsid_dev.Major = GET_U_1(fhp + 2);
+ fsidp->fsid_code = GET_BE_U_4(fhp + 4);
+
+ *inop = GET_BE_U_4(fhp + 12);
+
+ if (osnamep)
+ *osnamep = "SUNOS4";
+ break;
+
+ case FHT_SUNOS5:
+ temp = GET_BE_U_2(fhp);
+ fsidp->Fsid_dev.Major = (temp>>2) & 0x3FFF;
+ temp = GET_BE_U_3(fhp + 1);
+ fsidp->Fsid_dev.Minor = temp & 0x3FFFF;
+ fsidp->fsid_code = GET_BE_U_4(fhp + 4);
+
+ *inop = GET_BE_U_4(fhp + 12);
+
+ if (osnamep)
+ *osnamep = "SUNOS5";
+ break;
+
+ case FHT_ULTRIX:
+ fsidp->fsid_code = 0;
+ fsidp->Fsid_dev.Minor = GET_U_1(fhp);
+ fsidp->Fsid_dev.Major = GET_U_1(fhp + 1);
+
+ temp = GET_LE_U_4(fhp + 4);
+ *inop = temp;
+ if (osnamep)
+ *osnamep = "Ultrix";
+ break;
+
+ case FHT_VMSUCX:
+ /* No numeric file system ID, so hash on the device-name */
+ if (sizeof(*fsidp) >= 14) {
+ if (sizeof(*fsidp) > 14)
+ memset((char *)fsidp, 0, sizeof(*fsidp));
+ /* just use the whole thing */
+ memcpy((char *)fsidp, (const char *)fh, 14);
+ }
+ else {
+ uint32_t tempa[4]; /* at least 16 bytes, maybe more */
+
+ memset((char *)tempa, 0, sizeof(tempa));
+ memcpy((char *)tempa, (const char *)fh, 14); /* ensure alignment */
+ fsidp->Fsid_dev.Minor = tempa[0] + (tempa[1]<<1);
+ fsidp->Fsid_dev.Major = tempa[2] + (tempa[3]<<1);
+ fsidp->fsid_code = 0;
+ }
+
+ /* VMS file ID is: (RVN, FidHi, FidLo) */
+ *inop = (((uint32_t) GET_U_1(fhp + 26)) << 24) |
+ (((uint32_t) GET_U_1(fhp + 27)) << 16) |
+ (GET_LE_U_2(fhp + 22) << 0);
+
+ /* Caller must save (and null-terminate?) this value */
+ if (fsnamep)
+ *fsnamep = (const char *)(fhp + 1);
+
+ if (osnamep)
+ *osnamep = "VMS";
+ break;
+
+ case FHT_AIX32:
+ fsidp->Fsid_dev.Minor = GET_BE_U_2(fhp + 2);
+ fsidp->Fsid_dev.Major = GET_BE_U_2(fhp);
+ fsidp->fsid_code = GET_BE_U_4(fhp + 4);
+
+ *inop = GET_BE_U_4(fhp + 12);
+
+ if (osnamep)
+ *osnamep = "AIX32";
+ break;
+
+ case FHT_HPUX9:
+ fsidp->Fsid_dev.Major = GET_U_1(fhp);
+ temp = GET_BE_U_3(fhp + 1);
+ fsidp->Fsid_dev.Minor = temp;
+ fsidp->fsid_code = GET_BE_U_4(fhp + 4);
+
+ *inop = GET_BE_U_4(fhp + 12);
+
+ if (osnamep)
+ *osnamep = "HPUX9";
+ break;
+
+ case FHT_UNKNOWN:
+#ifdef DEBUG
+ /* XXX debugging */
+ for (i = 0; i < len*4; i++)
+ (void)fprintf(stderr, "%x.", GET_U_1(fhp + i));
+ (void)fprintf(stderr, "\n");
+#endif
+ /* Save the actual handle, so it can be display with -u */
+ for (i = 0; i < len*4 && i*2 < sizeof(fsidp->Opaque_Handle) - 1; i++)
+ (void)snprintf(&(fsidp->Opaque_Handle[i*2]), 3, "%.2X",
+ GET_U_1(fhp + i));
+ fsidp->Opaque_Handle[i*2] = '\0';
+
+ /* XXX for now, give "bogus" values to aid debugging */
+ fsidp->fsid_code = 0;
+ fsidp->Fsid_dev.Minor = 257;
+ fsidp->Fsid_dev.Major = 257;
+ *inop = 1;
+
+ /* display will show this string instead of (257,257) */
+ if (fsnamep)
+ *fsnamep = "Unknown";
+
+ if (osnamep)
+ *osnamep = "Unknown";
+ break;
+
+ }
+}
+
+/*
+ * Is this a VMS UCX file handle?
+ * Check for:
+ * (1) leading code byte [XXX not yet]
+ * (2) followed by string of printing chars & spaces
+ * (3) followed by string of nulls
+ */
+static int
+is_UCX(netdissect_options *ndo, const unsigned char *fhp, u_int len)
+{
+ u_int i;
+ int seen_null = 0;
+
+ /*
+ * Require at least 28 bytes of file handle; it's variable-length
+ * in NFSv3. "len" is in units of 32-bit words, not bytes.
+ */
+ if (len < 28/4)
+ return(0);
+
+ for (i = 1; i < 14; i++) {
+ if (ND_ASCII_ISPRINT(GET_U_1(fhp + i))) {
+ if (seen_null)
+ return(0);
+ else
+ continue;
+ }
+ else if (GET_U_1(fhp + i) == 0) {
+ seen_null = 1;
+ continue;
+ }
+ else
+ return(0);
+ }
+
+ return(1);
+}
diff --git a/pcap-missing.h b/pcap-missing.h
new file mode 100644
index 0000000..92706b1
--- /dev/null
+++ b/pcap-missing.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 1988-2002
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef netdissect_pcap_missing_h
+#define netdissect_pcap_missing_h
+
+/*
+ * Declarations of functions that might be missing from libpcap.
+ */
+
+#ifndef HAVE_PCAP_LIST_DATALINKS
+extern int pcap_list_datalinks(pcap_t *, int **);
+#endif
+
+#ifndef HAVE_PCAP_DATALINK_NAME_TO_VAL
+/*
+ * We assume no platform has one but not the other.
+ */
+extern int pcap_datalink_name_to_val(const char *);
+extern const char *pcap_datalink_val_to_name(int);
+#endif
+
+#ifndef HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION
+extern const char *pcap_datalink_val_to_description(int);
+#endif
+
+#ifndef HAVE_PCAP_DUMP_FTELL
+extern long pcap_dump_ftell(pcap_dumper_t *);
+#endif
+
+#endif /* netdissect_pcap_missing_h */
diff --git a/pflog.h b/pflog.h
new file mode 100644
index 0000000..a629eba
--- /dev/null
+++ b/pflog.h
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 1982, 1986, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * pflog headers, at least as they exist now.
+ */
+#define PFLOG_IFNAMSIZ 16
+#define PFLOG_RULESET_NAME_SIZE 16
+
+/*
+ * Direction values.
+ */
+#define PF_INOUT 0
+#define PF_IN 1
+#define PF_OUT 2
+#if defined(__OpenBSD__)
+#define PF_FWD 3
+#endif
+
+/*
+ * Reason values.
+ */
+#define PFRES_MATCH 0
+#define PFRES_BADOFF 1
+#define PFRES_FRAG 2
+#define PFRES_SHORT 3
+#define PFRES_NORM 4
+#define PFRES_MEMORY 5
+#define PFRES_TS 6
+#define PFRES_CONGEST 7
+#define PFRES_IPOPTIONS 8
+#define PFRES_PROTCKSUM 9
+#define PFRES_BADSTATE 10
+#define PFRES_STATEINS 11
+#define PFRES_MAXSTATES 12
+#define PFRES_SRCLIMIT 13
+#define PFRES_SYNPROXY 14
+#if defined(__FreeBSD__)
+#define PFRES_MAPFAILED 15
+#elif defined(__NetBSD__)
+#define PFRES_STATELOCKED 15
+#elif defined(__OpenBSD__)
+#define PFRES_TRANSLATE 15
+#define PFRES_NOROUTE 16
+#elif defined(__APPLE__)
+#define PFRES_DUMMYNET 15
+#endif
+
+/*
+ * Action values.
+ */
+#define PF_PASS 0
+#define PF_DROP 1
+#define PF_SCRUB 2
+#define PF_NOSCRUB 3
+#define PF_NAT 4
+#define PF_NONAT 5
+#define PF_BINAT 6
+#define PF_NOBINAT 7
+#define PF_RDR 8
+#define PF_NORDR 9
+#define PF_SYNPROXY_DROP 10
+#if defined(__FreeBSD__)
+#define PF_DEFER 11
+#elif defined(__OpenBSD__)
+#define PF_DEFER 11
+#define PF_MATCH 12
+#define PF_DIVERT 13
+#define PF_RT 14
+#define PF_AFRT 15
+#elif defined(__APPLE__)
+#define PF_DUMMYNET 11
+#define PF_NODUMMYNET 12
+#define PF_NAT64 13
+#define PF_NONAT64 14
+#endif
+
+struct pf_addr {
+ union {
+ nd_ipv4 v4;
+ nd_ipv6 v6;
+ } pfa; /* 128-bit address */
+#define v4 pfa.v4
+#define v6 pfa.v6
+};
+
+struct pfloghdr {
+ uint8_t length;
+ uint8_t af;
+ uint8_t action;
+ uint8_t reason;
+ char ifname[PFLOG_IFNAMSIZ];
+ char ruleset[PFLOG_RULESET_NAME_SIZE];
+ uint32_t rulenr;
+ uint32_t subrulenr;
+ uint32_t uid;
+ int32_t pid;
+ uint32_t rule_uid;
+ int32_t rule_pid;
+ uint8_t dir;
+#if defined(__OpenBSD__)
+ uint8_t rewritten;
+ uint8_t naf;
+ uint8_t pad[1];
+#else
+ uint8_t pad[3];
+#endif
+#if defined(__FreeBSD__)
+ uint32_t ridentifier;
+ uint8_t reserve;
+ uint8_t pad2[3];
+#elif defined(__OpenBSD__)
+ struct pf_addr saddr;
+ struct pf_addr daddr;
+ uint16_t sport;
+ uint16_t dport;
+#endif
+};
+
+
+
diff --git a/ppp.h b/ppp.h
new file mode 100644
index 0000000..830fad9
--- /dev/null
+++ b/ppp.h
@@ -0,0 +1,68 @@
+/*
+ * Point to Point Protocol (PPP) RFC1331
+ *
+ * Copyright 1989 by Carnegie Mellon.
+ *
+ * Permission to use, copy, modify, and distribute this program for any
+ * purpose and without fee is hereby granted, provided that this copyright
+ * and permission notice appear on all copies and supporting documentation,
+ * the name of Carnegie Mellon not be used in advertising or publicity
+ * pertaining to distribution of the program without specific prior
+ * permission, and notice be given in supporting documentation that copying
+ * and distribution is by permission of Carnegie Mellon and Stanford
+ * University. Carnegie Mellon makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ */
+#define PPP_HDRLEN 4 /* length of PPP header */
+
+#define PPP_ADDRESS 0xff /* The address byte value */
+#define PPP_CONTROL 0x03 /* The control byte value */
+
+#define PPP_PPPD_IN 0x00 /* non-standard for DLT_PPP_PPPD */
+#define PPP_PPPD_OUT 0x01 /* non-standard for DLT_PPP_PPPD */
+
+/* Protocol numbers */
+#define PPP_IP 0x0021 /* Raw IP */
+#define PPP_OSI 0x0023 /* OSI Network Layer */
+#define PPP_NS 0x0025 /* Xerox NS IDP */
+#define PPP_DECNET 0x0027 /* DECnet Phase IV */
+#define PPP_APPLE 0x0029 /* Appletalk */
+#define PPP_IPX 0x002b /* Novell IPX */
+#define PPP_VJC 0x002d /* Van Jacobson Compressed TCP/IP */
+#define PPP_VJNC 0x002f /* Van Jacobson Uncompressed TCP/IP */
+#define PPP_BRPDU 0x0031 /* Bridging PDU */
+#define PPP_STII 0x0033 /* Stream Protocol (ST-II) */
+#define PPP_VINES 0x0035 /* Banyan Vines */
+#define PPP_ML 0x003d /* Multi-Link PPP */
+#define PPP_IPV6 0x0057 /* IPv6 */
+#define PPP_COMP 0x00fd /* Compressed Datagram */
+
+#define PPP_HELLO 0x0201 /* 802.1d Hello Packets */
+#define PPP_LUXCOM 0x0231 /* Luxcom */
+#define PPP_SNS 0x0233 /* Sigma Network Systems */
+#define PPP_MPLS_UCAST 0x0281 /* rfc 3032 */
+#define PPP_MPLS_MCAST 0x0283 /* rfc 3022 */
+
+#define PPP_IPCP 0x8021 /* IP Control Protocol */
+#define PPP_OSICP 0x8023 /* OSI Network Layer Control Protocol */
+#define PPP_NSCP 0x8025 /* Xerox NS IDP Control Protocol */
+#define PPP_DECNETCP 0x8027 /* DECnet Control Protocol */
+#define PPP_APPLECP 0x8029 /* Appletalk Control Protocol */
+#define PPP_IPXCP 0x802b /* Novell IPX Control Protocol */
+#define PPP_STIICP 0x8033 /* Strean Protocol Control Protocol */
+#define PPP_VINESCP 0x8035 /* Banyan Vines Control Protocol */
+#define PPP_IPV6CP 0x8057 /* IPv6 Control Protocol */
+#define PPP_CCP 0x80fd /* Compress Control Protocol */
+#define PPP_MPLSCP 0x8281 /* rfc 3022 */
+
+#define PPP_LCP 0xc021 /* Link Control Protocol */
+#define PPP_PAP 0xc023 /* Password Authentication Protocol */
+#define PPP_LQM 0xc025 /* Link Quality Monitoring */
+#define PPP_SPAP 0xc027
+#define PPP_CHAP 0xc223 /* Challenge Handshake Authentication Protocol */
+#define PPP_BACP 0xc02b /* Bandwidth Allocation Control Protocol */
+#define PPP_BAP 0xc02d /* BAP */
+#define PPP_MPCP 0xc03d /* Multi-Link */
+#define PPP_SPAP_OLD 0xc123
+#define PPP_EAP 0xc227
diff --git a/print-802_11.c b/print-802_11.c
new file mode 100644
index 0000000..62cc9a5
--- /dev/null
+++ b/print-802_11.c
@@ -0,0 +1,3533 @@
+/*
+ * Copyright (c) 2001
+ * Fortress Technologies, Inc. All rights reserved.
+ * Charlie Lenahan (clenahan@fortresstech.com)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IEEE 802.11 printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+
+#include "extract.h"
+
+#include "cpack.h"
+
+
+/* Lengths of 802.11 header components. */
+#define IEEE802_11_FC_LEN 2
+#define IEEE802_11_DUR_LEN 2
+#define IEEE802_11_DA_LEN 6
+#define IEEE802_11_SA_LEN 6
+#define IEEE802_11_BSSID_LEN 6
+#define IEEE802_11_RA_LEN 6
+#define IEEE802_11_TA_LEN 6
+#define IEEE802_11_ADDR1_LEN 6
+#define IEEE802_11_SEQ_LEN 2
+#define IEEE802_11_CTL_LEN 2
+#define IEEE802_11_CARRIED_FC_LEN 2
+#define IEEE802_11_HT_CONTROL_LEN 4
+#define IEEE802_11_IV_LEN 3
+#define IEEE802_11_KID_LEN 1
+
+/* Frame check sequence length. */
+#define IEEE802_11_FCS_LEN 4
+
+/* Lengths of beacon components. */
+#define IEEE802_11_TSTAMP_LEN 8
+#define IEEE802_11_BCNINT_LEN 2
+#define IEEE802_11_CAPINFO_LEN 2
+#define IEEE802_11_LISTENINT_LEN 2
+
+#define IEEE802_11_AID_LEN 2
+#define IEEE802_11_STATUS_LEN 2
+#define IEEE802_11_REASON_LEN 2
+
+/* Length of previous AP in reassocation frame */
+#define IEEE802_11_AP_LEN 6
+
+#define T_MGMT 0x0 /* management */
+#define T_CTRL 0x1 /* control */
+#define T_DATA 0x2 /* data */
+#define T_RESV 0x3 /* reserved */
+
+#define ST_ASSOC_REQUEST 0x0
+#define ST_ASSOC_RESPONSE 0x1
+#define ST_REASSOC_REQUEST 0x2
+#define ST_REASSOC_RESPONSE 0x3
+#define ST_PROBE_REQUEST 0x4
+#define ST_PROBE_RESPONSE 0x5
+/* RESERVED 0x6 */
+/* RESERVED 0x7 */
+#define ST_BEACON 0x8
+#define ST_ATIM 0x9
+#define ST_DISASSOC 0xA
+#define ST_AUTH 0xB
+#define ST_DEAUTH 0xC
+#define ST_ACTION 0xD
+/* RESERVED 0xE */
+/* RESERVED 0xF */
+
+static const struct tok st_str[] = {
+ { ST_ASSOC_REQUEST, "Assoc Request" },
+ { ST_ASSOC_RESPONSE, "Assoc Response" },
+ { ST_REASSOC_REQUEST, "ReAssoc Request" },
+ { ST_REASSOC_RESPONSE, "ReAssoc Response" },
+ { ST_PROBE_REQUEST, "Probe Request" },
+ { ST_PROBE_RESPONSE, "Probe Response" },
+ { ST_BEACON, "Beacon" },
+ { ST_ATIM, "ATIM" },
+ { ST_DISASSOC, "Disassociation" },
+ { ST_AUTH, "Authentication" },
+ { ST_DEAUTH, "DeAuthentication" },
+ { ST_ACTION, "Action" },
+ { 0, NULL }
+};
+
+#define CTRL_CONTROL_WRAPPER 0x7
+#define CTRL_BAR 0x8
+#define CTRL_BA 0x9
+#define CTRL_PS_POLL 0xA
+#define CTRL_RTS 0xB
+#define CTRL_CTS 0xC
+#define CTRL_ACK 0xD
+#define CTRL_CF_END 0xE
+#define CTRL_END_ACK 0xF
+
+static const struct tok ctrl_str[] = {
+ { CTRL_CONTROL_WRAPPER, "Control Wrapper" },
+ { CTRL_BAR, "BAR" },
+ { CTRL_BA, "BA" },
+ { CTRL_PS_POLL, "Power Save-Poll" },
+ { CTRL_RTS, "Request-To-Send" },
+ { CTRL_CTS, "Clear-To-Send" },
+ { CTRL_ACK, "Acknowledgment" },
+ { CTRL_CF_END, "CF-End" },
+ { CTRL_END_ACK, "CF-End+CF-Ack" },
+ { 0, NULL }
+};
+
+#define DATA_DATA 0x0
+#define DATA_DATA_CF_ACK 0x1
+#define DATA_DATA_CF_POLL 0x2
+#define DATA_DATA_CF_ACK_POLL 0x3
+#define DATA_NODATA 0x4
+#define DATA_NODATA_CF_ACK 0x5
+#define DATA_NODATA_CF_POLL 0x6
+#define DATA_NODATA_CF_ACK_POLL 0x7
+
+#define DATA_QOS_DATA 0x8
+#define DATA_QOS_DATA_CF_ACK 0x9
+#define DATA_QOS_DATA_CF_POLL 0xA
+#define DATA_QOS_DATA_CF_ACK_POLL 0xB
+#define DATA_QOS_NODATA 0xC
+#define DATA_QOS_CF_POLL_NODATA 0xE
+#define DATA_QOS_CF_ACK_POLL_NODATA 0xF
+
+/*
+ * The subtype field of a data frame is, in effect, composed of 4 flag
+ * bits - CF-Ack, CF-Poll, Null (means the frame doesn't actually have
+ * any data), and QoS.
+ */
+#define DATA_FRAME_IS_CF_ACK(x) ((x) & 0x01)
+#define DATA_FRAME_IS_CF_POLL(x) ((x) & 0x02)
+#define DATA_FRAME_IS_NULL(x) ((x) & 0x04)
+#define DATA_FRAME_IS_QOS(x) ((x) & 0x08)
+
+/*
+ * Bits in the frame control field.
+ */
+#define FC_VERSION(fc) ((fc) & 0x3)
+#define FC_TYPE(fc) (((fc) >> 2) & 0x3)
+#define FC_SUBTYPE(fc) (((fc) >> 4) & 0xF)
+#define FC_TO_DS(fc) ((fc) & 0x0100)
+#define FC_FROM_DS(fc) ((fc) & 0x0200)
+#define FC_MORE_FLAG(fc) ((fc) & 0x0400)
+#define FC_RETRY(fc) ((fc) & 0x0800)
+#define FC_POWER_MGMT(fc) ((fc) & 0x1000)
+#define FC_MORE_DATA(fc) ((fc) & 0x2000)
+#define FC_PROTECTED(fc) ((fc) & 0x4000)
+#define FC_ORDER(fc) ((fc) & 0x8000)
+
+struct mgmt_header_t {
+ nd_uint16_t fc;
+ nd_uint16_t duration;
+ nd_mac_addr da;
+ nd_mac_addr sa;
+ nd_mac_addr bssid;
+ nd_uint16_t seq_ctrl;
+};
+
+#define MGMT_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
+ IEEE802_11_DA_LEN+IEEE802_11_SA_LEN+\
+ IEEE802_11_BSSID_LEN+IEEE802_11_SEQ_LEN)
+
+#define CAPABILITY_ESS(cap) ((cap) & 0x0001)
+#define CAPABILITY_IBSS(cap) ((cap) & 0x0002)
+#define CAPABILITY_CFP(cap) ((cap) & 0x0004)
+#define CAPABILITY_CFP_REQ(cap) ((cap) & 0x0008)
+#define CAPABILITY_PRIVACY(cap) ((cap) & 0x0010)
+
+struct ssid_t {
+ uint8_t element_id;
+ uint8_t length;
+ u_char ssid[33]; /* 32 + 1 for null */
+};
+
+struct rates_t {
+ uint8_t element_id;
+ uint8_t length;
+ uint8_t rate[16];
+};
+
+struct challenge_t {
+ uint8_t element_id;
+ uint8_t length;
+ uint8_t text[254]; /* 1-253 + 1 for null */
+};
+
+struct fh_t {
+ uint8_t element_id;
+ uint8_t length;
+ uint16_t dwell_time;
+ uint8_t hop_set;
+ uint8_t hop_pattern;
+ uint8_t hop_index;
+};
+
+struct ds_t {
+ uint8_t element_id;
+ uint8_t length;
+ uint8_t channel;
+};
+
+struct cf_t {
+ uint8_t element_id;
+ uint8_t length;
+ uint8_t count;
+ uint8_t period;
+ uint16_t max_duration;
+ uint16_t dur_remaining;
+};
+
+struct tim_t {
+ uint8_t element_id;
+ uint8_t length;
+ uint8_t count;
+ uint8_t period;
+ uint8_t bitmap_control;
+ uint8_t bitmap[251];
+};
+
+#define E_SSID 0
+#define E_RATES 1
+#define E_FH 2
+#define E_DS 3
+#define E_CF 4
+#define E_TIM 5
+#define E_IBSS 6
+/* reserved 7 */
+/* reserved 8 */
+/* reserved 9 */
+/* reserved 10 */
+/* reserved 11 */
+/* reserved 12 */
+/* reserved 13 */
+/* reserved 14 */
+/* reserved 15 */
+/* reserved 16 */
+
+#define E_CHALLENGE 16
+/* reserved 17 */
+/* reserved 18 */
+/* reserved 19 */
+/* reserved 16 */
+/* reserved 16 */
+
+
+struct mgmt_body_t {
+ uint8_t timestamp[IEEE802_11_TSTAMP_LEN];
+ uint16_t beacon_interval;
+ uint16_t listen_interval;
+ uint16_t status_code;
+ uint16_t aid;
+ u_char ap[IEEE802_11_AP_LEN];
+ uint16_t reason_code;
+ uint16_t auth_alg;
+ uint16_t auth_trans_seq_num;
+ int challenge_present;
+ struct challenge_t challenge;
+ uint16_t capability_info;
+ int ssid_present;
+ struct ssid_t ssid;
+ int rates_present;
+ struct rates_t rates;
+ int ds_present;
+ struct ds_t ds;
+ int cf_present;
+ struct cf_t cf;
+ int fh_present;
+ struct fh_t fh;
+ int tim_present;
+ struct tim_t tim;
+};
+
+struct ctrl_control_wrapper_hdr_t {
+ nd_uint16_t fc;
+ nd_uint16_t duration;
+ nd_mac_addr addr1;
+ nd_uint16_t carried_fc[IEEE802_11_CARRIED_FC_LEN];
+ nd_uint16_t ht_control[IEEE802_11_HT_CONTROL_LEN];
+};
+
+#define CTRL_CONTROL_WRAPPER_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
+ IEEE802_11_ADDR1_LEN+\
+ IEEE802_11_CARRIED_FC_LEN+\
+ IEEE802_11_HT_CONTROL_LEN)
+
+struct ctrl_rts_hdr_t {
+ nd_uint16_t fc;
+ nd_uint16_t duration;
+ nd_mac_addr ra;
+ nd_mac_addr ta;
+};
+
+#define CTRL_RTS_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
+ IEEE802_11_RA_LEN+IEEE802_11_TA_LEN)
+
+struct ctrl_cts_hdr_t {
+ nd_uint16_t fc;
+ nd_uint16_t duration;
+ nd_mac_addr ra;
+};
+
+#define CTRL_CTS_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+IEEE802_11_RA_LEN)
+
+struct ctrl_ack_hdr_t {
+ nd_uint16_t fc;
+ nd_uint16_t duration;
+ nd_mac_addr ra;
+};
+
+#define CTRL_ACK_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+IEEE802_11_RA_LEN)
+
+struct ctrl_ps_poll_hdr_t {
+ nd_uint16_t fc;
+ nd_uint16_t aid;
+ nd_mac_addr bssid;
+ nd_mac_addr ta;
+};
+
+#define CTRL_PS_POLL_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_AID_LEN+\
+ IEEE802_11_BSSID_LEN+IEEE802_11_TA_LEN)
+
+struct ctrl_end_hdr_t {
+ nd_uint16_t fc;
+ nd_uint16_t duration;
+ nd_mac_addr ra;
+ nd_mac_addr bssid;
+};
+
+#define CTRL_END_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
+ IEEE802_11_RA_LEN+IEEE802_11_BSSID_LEN)
+
+struct ctrl_end_ack_hdr_t {
+ nd_uint16_t fc;
+ nd_uint16_t duration;
+ nd_mac_addr ra;
+ nd_mac_addr bssid;
+};
+
+#define CTRL_END_ACK_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
+ IEEE802_11_RA_LEN+IEEE802_11_BSSID_LEN)
+
+struct ctrl_ba_hdr_t {
+ nd_uint16_t fc;
+ nd_uint16_t duration;
+ nd_mac_addr ra;
+};
+
+#define CTRL_BA_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+IEEE802_11_RA_LEN)
+
+struct ctrl_bar_hdr_t {
+ nd_uint16_t fc;
+ nd_uint16_t dur;
+ nd_mac_addr ra;
+ nd_mac_addr ta;
+ nd_uint16_t ctl;
+ nd_uint16_t seq;
+};
+
+#define CTRL_BAR_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\
+ IEEE802_11_RA_LEN+IEEE802_11_TA_LEN+\
+ IEEE802_11_CTL_LEN+IEEE802_11_SEQ_LEN)
+
+struct meshcntl_t {
+ nd_uint8_t flags;
+ nd_uint8_t ttl;
+ nd_uint32_t seq;
+ nd_mac_addr addr4;
+ nd_mac_addr addr5;
+ nd_mac_addr addr6;
+};
+
+#define IV_IV(iv) ((iv) & 0xFFFFFF)
+#define IV_PAD(iv) (((iv) >> 24) & 0x3F)
+#define IV_KEYID(iv) (((iv) >> 30) & 0x03)
+
+#define PRINT_SSID(p) \
+ if (p.ssid_present) { \
+ ND_PRINT(" ("); \
+ fn_print_str(ndo, p.ssid.ssid); \
+ ND_PRINT(")"); \
+ }
+
+#define PRINT_RATE(_sep, _r, _suf) \
+ ND_PRINT("%s%2.1f%s", _sep, (.5 * ((_r) & 0x7f)), _suf)
+#define PRINT_RATES(p) \
+ if (p.rates_present) { \
+ int z; \
+ const char *sep = " ["; \
+ for (z = 0; z < p.rates.length ; z++) { \
+ PRINT_RATE(sep, p.rates.rate[z], \
+ (p.rates.rate[z] & 0x80 ? "*" : "")); \
+ sep = " "; \
+ } \
+ if (p.rates.length != 0) \
+ ND_PRINT(" Mbit]"); \
+ }
+
+#define PRINT_DS_CHANNEL(p) \
+ if (p.ds_present) \
+ ND_PRINT(" CH: %u", p.ds.channel); \
+ ND_PRINT("%s", \
+ CAPABILITY_PRIVACY(p.capability_info) ? ", PRIVACY" : "");
+
+#define MAX_MCS_INDEX 76
+
+/*
+ * Indices are:
+ *
+ * the MCS index (0-76);
+ *
+ * 0 for 20 MHz, 1 for 40 MHz;
+ *
+ * 0 for a long guard interval, 1 for a short guard interval.
+ */
+static const float ieee80211_float_htrates[MAX_MCS_INDEX+1][2][2] = {
+ /* MCS 0 */
+ { /* 20 Mhz */ { 6.5f, /* SGI */ 7.2f, },
+ /* 40 Mhz */ { 13.5f, /* SGI */ 15.0f, },
+ },
+
+ /* MCS 1 */
+ { /* 20 Mhz */ { 13.0f, /* SGI */ 14.4f, },
+ /* 40 Mhz */ { 27.0f, /* SGI */ 30.0f, },
+ },
+
+ /* MCS 2 */
+ { /* 20 Mhz */ { 19.5f, /* SGI */ 21.7f, },
+ /* 40 Mhz */ { 40.5f, /* SGI */ 45.0f, },
+ },
+
+ /* MCS 3 */
+ { /* 20 Mhz */ { 26.0f, /* SGI */ 28.9f, },
+ /* 40 Mhz */ { 54.0f, /* SGI */ 60.0f, },
+ },
+
+ /* MCS 4 */
+ { /* 20 Mhz */ { 39.0f, /* SGI */ 43.3f, },
+ /* 40 Mhz */ { 81.0f, /* SGI */ 90.0f, },
+ },
+
+ /* MCS 5 */
+ { /* 20 Mhz */ { 52.0f, /* SGI */ 57.8f, },
+ /* 40 Mhz */ { 108.0f, /* SGI */ 120.0f, },
+ },
+
+ /* MCS 6 */
+ { /* 20 Mhz */ { 58.5f, /* SGI */ 65.0f, },
+ /* 40 Mhz */ { 121.5f, /* SGI */ 135.0f, },
+ },
+
+ /* MCS 7 */
+ { /* 20 Mhz */ { 65.0f, /* SGI */ 72.2f, },
+ /* 40 Mhz */ { 135.0f, /* SGI */ 150.0f, },
+ },
+
+ /* MCS 8 */
+ { /* 20 Mhz */ { 13.0f, /* SGI */ 14.4f, },
+ /* 40 Mhz */ { 27.0f, /* SGI */ 30.0f, },
+ },
+
+ /* MCS 9 */
+ { /* 20 Mhz */ { 26.0f, /* SGI */ 28.9f, },
+ /* 40 Mhz */ { 54.0f, /* SGI */ 60.0f, },
+ },
+
+ /* MCS 10 */
+ { /* 20 Mhz */ { 39.0f, /* SGI */ 43.3f, },
+ /* 40 Mhz */ { 81.0f, /* SGI */ 90.0f, },
+ },
+
+ /* MCS 11 */
+ { /* 20 Mhz */ { 52.0f, /* SGI */ 57.8f, },
+ /* 40 Mhz */ { 108.0f, /* SGI */ 120.0f, },
+ },
+
+ /* MCS 12 */
+ { /* 20 Mhz */ { 78.0f, /* SGI */ 86.7f, },
+ /* 40 Mhz */ { 162.0f, /* SGI */ 180.0f, },
+ },
+
+ /* MCS 13 */
+ { /* 20 Mhz */ { 104.0f, /* SGI */ 115.6f, },
+ /* 40 Mhz */ { 216.0f, /* SGI */ 240.0f, },
+ },
+
+ /* MCS 14 */
+ { /* 20 Mhz */ { 117.0f, /* SGI */ 130.0f, },
+ /* 40 Mhz */ { 243.0f, /* SGI */ 270.0f, },
+ },
+
+ /* MCS 15 */
+ { /* 20 Mhz */ { 130.0f, /* SGI */ 144.4f, },
+ /* 40 Mhz */ { 270.0f, /* SGI */ 300.0f, },
+ },
+
+ /* MCS 16 */
+ { /* 20 Mhz */ { 19.5f, /* SGI */ 21.7f, },
+ /* 40 Mhz */ { 40.5f, /* SGI */ 45.0f, },
+ },
+
+ /* MCS 17 */
+ { /* 20 Mhz */ { 39.0f, /* SGI */ 43.3f, },
+ /* 40 Mhz */ { 81.0f, /* SGI */ 90.0f, },
+ },
+
+ /* MCS 18 */
+ { /* 20 Mhz */ { 58.5f, /* SGI */ 65.0f, },
+ /* 40 Mhz */ { 121.5f, /* SGI */ 135.0f, },
+ },
+
+ /* MCS 19 */
+ { /* 20 Mhz */ { 78.0f, /* SGI */ 86.7f, },
+ /* 40 Mhz */ { 162.0f, /* SGI */ 180.0f, },
+ },
+
+ /* MCS 20 */
+ { /* 20 Mhz */ { 117.0f, /* SGI */ 130.0f, },
+ /* 40 Mhz */ { 243.0f, /* SGI */ 270.0f, },
+ },
+
+ /* MCS 21 */
+ { /* 20 Mhz */ { 156.0f, /* SGI */ 173.3f, },
+ /* 40 Mhz */ { 324.0f, /* SGI */ 360.0f, },
+ },
+
+ /* MCS 22 */
+ { /* 20 Mhz */ { 175.5f, /* SGI */ 195.0f, },
+ /* 40 Mhz */ { 364.5f, /* SGI */ 405.0f, },
+ },
+
+ /* MCS 23 */
+ { /* 20 Mhz */ { 195.0f, /* SGI */ 216.7f, },
+ /* 40 Mhz */ { 405.0f, /* SGI */ 450.0f, },
+ },
+
+ /* MCS 24 */
+ { /* 20 Mhz */ { 26.0f, /* SGI */ 28.9f, },
+ /* 40 Mhz */ { 54.0f, /* SGI */ 60.0f, },
+ },
+
+ /* MCS 25 */
+ { /* 20 Mhz */ { 52.0f, /* SGI */ 57.8f, },
+ /* 40 Mhz */ { 108.0f, /* SGI */ 120.0f, },
+ },
+
+ /* MCS 26 */
+ { /* 20 Mhz */ { 78.0f, /* SGI */ 86.7f, },
+ /* 40 Mhz */ { 162.0f, /* SGI */ 180.0f, },
+ },
+
+ /* MCS 27 */
+ { /* 20 Mhz */ { 104.0f, /* SGI */ 115.6f, },
+ /* 40 Mhz */ { 216.0f, /* SGI */ 240.0f, },
+ },
+
+ /* MCS 28 */
+ { /* 20 Mhz */ { 156.0f, /* SGI */ 173.3f, },
+ /* 40 Mhz */ { 324.0f, /* SGI */ 360.0f, },
+ },
+
+ /* MCS 29 */
+ { /* 20 Mhz */ { 208.0f, /* SGI */ 231.1f, },
+ /* 40 Mhz */ { 432.0f, /* SGI */ 480.0f, },
+ },
+
+ /* MCS 30 */
+ { /* 20 Mhz */ { 234.0f, /* SGI */ 260.0f, },
+ /* 40 Mhz */ { 486.0f, /* SGI */ 540.0f, },
+ },
+
+ /* MCS 31 */
+ { /* 20 Mhz */ { 260.0f, /* SGI */ 288.9f, },
+ /* 40 Mhz */ { 540.0f, /* SGI */ 600.0f, },
+ },
+
+ /* MCS 32 */
+ { /* 20 Mhz */ { 0.0f, /* SGI */ 0.0f, }, /* not valid */
+ /* 40 Mhz */ { 6.0f, /* SGI */ 6.7f, },
+ },
+
+ /* MCS 33 */
+ { /* 20 Mhz */ { 39.0f, /* SGI */ 43.3f, },
+ /* 40 Mhz */ { 81.0f, /* SGI */ 90.0f, },
+ },
+
+ /* MCS 34 */
+ { /* 20 Mhz */ { 52.0f, /* SGI */ 57.8f, },
+ /* 40 Mhz */ { 108.0f, /* SGI */ 120.0f, },
+ },
+
+ /* MCS 35 */
+ { /* 20 Mhz */ { 65.0f, /* SGI */ 72.2f, },
+ /* 40 Mhz */ { 135.0f, /* SGI */ 150.0f, },
+ },
+
+ /* MCS 36 */
+ { /* 20 Mhz */ { 58.5f, /* SGI */ 65.0f, },
+ /* 40 Mhz */ { 121.5f, /* SGI */ 135.0f, },
+ },
+
+ /* MCS 37 */
+ { /* 20 Mhz */ { 78.0f, /* SGI */ 86.7f, },
+ /* 40 Mhz */ { 162.0f, /* SGI */ 180.0f, },
+ },
+
+ /* MCS 38 */
+ { /* 20 Mhz */ { 97.5f, /* SGI */ 108.3f, },
+ /* 40 Mhz */ { 202.5f, /* SGI */ 225.0f, },
+ },
+
+ /* MCS 39 */
+ { /* 20 Mhz */ { 52.0f, /* SGI */ 57.8f, },
+ /* 40 Mhz */ { 108.0f, /* SGI */ 120.0f, },
+ },
+
+ /* MCS 40 */
+ { /* 20 Mhz */ { 65.0f, /* SGI */ 72.2f, },
+ /* 40 Mhz */ { 135.0f, /* SGI */ 150.0f, },
+ },
+
+ /* MCS 41 */
+ { /* 20 Mhz */ { 65.0f, /* SGI */ 72.2f, },
+ /* 40 Mhz */ { 135.0f, /* SGI */ 150.0f, },
+ },
+
+ /* MCS 42 */
+ { /* 20 Mhz */ { 78.0f, /* SGI */ 86.7f, },
+ /* 40 Mhz */ { 162.0f, /* SGI */ 180.0f, },
+ },
+
+ /* MCS 43 */
+ { /* 20 Mhz */ { 91.0f, /* SGI */ 101.1f, },
+ /* 40 Mhz */ { 189.0f, /* SGI */ 210.0f, },
+ },
+
+ /* MCS 44 */
+ { /* 20 Mhz */ { 91.0f, /* SGI */ 101.1f, },
+ /* 40 Mhz */ { 189.0f, /* SGI */ 210.0f, },
+ },
+
+ /* MCS 45 */
+ { /* 20 Mhz */ { 104.0f, /* SGI */ 115.6f, },
+ /* 40 Mhz */ { 216.0f, /* SGI */ 240.0f, },
+ },
+
+ /* MCS 46 */
+ { /* 20 Mhz */ { 78.0f, /* SGI */ 86.7f, },
+ /* 40 Mhz */ { 162.0f, /* SGI */ 180.0f, },
+ },
+
+ /* MCS 47 */
+ { /* 20 Mhz */ { 97.5f, /* SGI */ 108.3f, },
+ /* 40 Mhz */ { 202.5f, /* SGI */ 225.0f, },
+ },
+
+ /* MCS 48 */
+ { /* 20 Mhz */ { 97.5f, /* SGI */ 108.3f, },
+ /* 40 Mhz */ { 202.5f, /* SGI */ 225.0f, },
+ },
+
+ /* MCS 49 */
+ { /* 20 Mhz */ { 117.0f, /* SGI */ 130.0f, },
+ /* 40 Mhz */ { 243.0f, /* SGI */ 270.0f, },
+ },
+
+ /* MCS 50 */
+ { /* 20 Mhz */ { 136.5f, /* SGI */ 151.7f, },
+ /* 40 Mhz */ { 283.5f, /* SGI */ 315.0f, },
+ },
+
+ /* MCS 51 */
+ { /* 20 Mhz */ { 136.5f, /* SGI */ 151.7f, },
+ /* 40 Mhz */ { 283.5f, /* SGI */ 315.0f, },
+ },
+
+ /* MCS 52 */
+ { /* 20 Mhz */ { 156.0f, /* SGI */ 173.3f, },
+ /* 40 Mhz */ { 324.0f, /* SGI */ 360.0f, },
+ },
+
+ /* MCS 53 */
+ { /* 20 Mhz */ { 65.0f, /* SGI */ 72.2f, },
+ /* 40 Mhz */ { 135.0f, /* SGI */ 150.0f, },
+ },
+
+ /* MCS 54 */
+ { /* 20 Mhz */ { 78.0f, /* SGI */ 86.7f, },
+ /* 40 Mhz */ { 162.0f, /* SGI */ 180.0f, },
+ },
+
+ /* MCS 55 */
+ { /* 20 Mhz */ { 91.0f, /* SGI */ 101.1f, },
+ /* 40 Mhz */ { 189.0f, /* SGI */ 210.0f, },
+ },
+
+ /* MCS 56 */
+ { /* 20 Mhz */ { 78.0f, /* SGI */ 86.7f, },
+ /* 40 Mhz */ { 162.0f, /* SGI */ 180.0f, },
+ },
+
+ /* MCS 57 */
+ { /* 20 Mhz */ { 91.0f, /* SGI */ 101.1f, },
+ /* 40 Mhz */ { 189.0f, /* SGI */ 210.0f, },
+ },
+
+ /* MCS 58 */
+ { /* 20 Mhz */ { 104.0f, /* SGI */ 115.6f, },
+ /* 40 Mhz */ { 216.0f, /* SGI */ 240.0f, },
+ },
+
+ /* MCS 59 */
+ { /* 20 Mhz */ { 117.0f, /* SGI */ 130.0f, },
+ /* 40 Mhz */ { 243.0f, /* SGI */ 270.0f, },
+ },
+
+ /* MCS 60 */
+ { /* 20 Mhz */ { 104.0f, /* SGI */ 115.6f, },
+ /* 40 Mhz */ { 216.0f, /* SGI */ 240.0f, },
+ },
+
+ /* MCS 61 */
+ { /* 20 Mhz */ { 117.0f, /* SGI */ 130.0f, },
+ /* 40 Mhz */ { 243.0f, /* SGI */ 270.0f, },
+ },
+
+ /* MCS 62 */
+ { /* 20 Mhz */ { 130.0f, /* SGI */ 144.4f, },
+ /* 40 Mhz */ { 270.0f, /* SGI */ 300.0f, },
+ },
+
+ /* MCS 63 */
+ { /* 20 Mhz */ { 130.0f, /* SGI */ 144.4f, },
+ /* 40 Mhz */ { 270.0f, /* SGI */ 300.0f, },
+ },
+
+ /* MCS 64 */
+ { /* 20 Mhz */ { 143.0f, /* SGI */ 158.9f, },
+ /* 40 Mhz */ { 297.0f, /* SGI */ 330.0f, },
+ },
+
+ /* MCS 65 */
+ { /* 20 Mhz */ { 97.5f, /* SGI */ 108.3f, },
+ /* 40 Mhz */ { 202.5f, /* SGI */ 225.0f, },
+ },
+
+ /* MCS 66 */
+ { /* 20 Mhz */ { 117.0f, /* SGI */ 130.0f, },
+ /* 40 Mhz */ { 243.0f, /* SGI */ 270.0f, },
+ },
+
+ /* MCS 67 */
+ { /* 20 Mhz */ { 136.5f, /* SGI */ 151.7f, },
+ /* 40 Mhz */ { 283.5f, /* SGI */ 315.0f, },
+ },
+
+ /* MCS 68 */
+ { /* 20 Mhz */ { 117.0f, /* SGI */ 130.0f, },
+ /* 40 Mhz */ { 243.0f, /* SGI */ 270.0f, },
+ },
+
+ /* MCS 69 */
+ { /* 20 Mhz */ { 136.5f, /* SGI */ 151.7f, },
+ /* 40 Mhz */ { 283.5f, /* SGI */ 315.0f, },
+ },
+
+ /* MCS 70 */
+ { /* 20 Mhz */ { 156.0f, /* SGI */ 173.3f, },
+ /* 40 Mhz */ { 324.0f, /* SGI */ 360.0f, },
+ },
+
+ /* MCS 71 */
+ { /* 20 Mhz */ { 175.5f, /* SGI */ 195.0f, },
+ /* 40 Mhz */ { 364.5f, /* SGI */ 405.0f, },
+ },
+
+ /* MCS 72 */
+ { /* 20 Mhz */ { 156.0f, /* SGI */ 173.3f, },
+ /* 40 Mhz */ { 324.0f, /* SGI */ 360.0f, },
+ },
+
+ /* MCS 73 */
+ { /* 20 Mhz */ { 175.5f, /* SGI */ 195.0f, },
+ /* 40 Mhz */ { 364.5f, /* SGI */ 405.0f, },
+ },
+
+ /* MCS 74 */
+ { /* 20 Mhz */ { 195.0f, /* SGI */ 216.7f, },
+ /* 40 Mhz */ { 405.0f, /* SGI */ 450.0f, },
+ },
+
+ /* MCS 75 */
+ { /* 20 Mhz */ { 195.0f, /* SGI */ 216.7f, },
+ /* 40 Mhz */ { 405.0f, /* SGI */ 450.0f, },
+ },
+
+ /* MCS 76 */
+ { /* 20 Mhz */ { 214.5f, /* SGI */ 238.3f, },
+ /* 40 Mhz */ { 445.5f, /* SGI */ 495.0f, },
+ },
+};
+
+static const char *auth_alg_text[]={"Open System","Shared Key","EAP"};
+#define NUM_AUTH_ALGS (sizeof(auth_alg_text) / sizeof(auth_alg_text[0]))
+
+static const char *status_text[] = {
+ "Successful", /* 0 */
+ "Unspecified failure", /* 1 */
+ "TDLS wakeup schedule rejected but alternative schedule "
+ "provided", /* 2 */
+ "TDLS wakeup schedule rejected",/* 3 */
+ "Reserved", /* 4 */
+ "Security disabled", /* 5 */
+ "Unacceptable lifetime", /* 6 */
+ "Not in same BSS", /* 7 */
+ "Reserved", /* 8 */
+ "Reserved", /* 9 */
+ "Cannot Support all requested capabilities in the Capability "
+ "Information field", /* 10 */
+ "Reassociation denied due to inability to confirm that association "
+ "exists", /* 11 */
+ "Association denied due to reason outside the scope of this "
+ "standard", /* 12 */
+ "Responding STA does not support the specified authentication "
+ "algorithm", /* 13 */
+ "Received an Authentication frame with authentication transaction "
+ "sequence number out of expected sequence", /* 14 */
+ "Authentication rejected because of challenge failure", /* 15 */
+ "Authentication rejected due to timeout waiting for next frame in "
+ "sequence", /* 16 */
+ "Association denied because AP is unable to handle "
+ "additional associated STAs", /* 17 */
+ "Association denied due to requesting STA not supporting "
+ "all of the data rates in the BSSBasicRateSet parameter, "
+ "the Basic HT-MCS Set field of the HT Operation "
+ "parameter, or the Basic VHT-MCS and NSS Set field in "
+ "the VHT Operation parameter", /* 18 */
+ "Association denied due to requesting STA not supporting "
+ "the short preamble option", /* 19 */
+ "Reserved", /* 20 */
+ "Reserved", /* 21 */
+ "Association request rejected because Spectrum Management "
+ "capability is required", /* 22 */
+ "Association request rejected because the information in the "
+ "Power Capability element is unacceptable", /* 23 */
+ "Association request rejected because the information in the "
+ "Supported Channels element is unacceptable", /* 24 */
+ "Association denied due to requesting STA not supporting "
+ "the Short Slot Time option", /* 25 */
+ "Reserved", /* 26 */
+ "Association denied because the requested STA does not support HT "
+ "features", /* 27 */
+ "R0KH unreachable", /* 28 */
+ "Association denied because the requesting STA does not "
+ "support the phased coexistence operation (PCO) "
+ "transition time required by the AP", /* 29 */
+ "Association request rejected temporarily; try again "
+ "later", /* 30 */
+ "Robust management frame policy violation", /* 31 */
+ "Unspecified, QoS-related failure", /* 32 */
+ "Association denied because QoS AP or PCP has "
+ "insufficient bandwidth to handle another QoS "
+ "STA", /* 33 */
+ "Association denied due to excessive frame loss rates and/or "
+ "poor conditions on current operating channel", /* 34 */
+ "Association (with QoS BSS) denied because the requesting STA "
+ "does not support the QoS facility", /* 35 */
+ "Reserved", /* 36 */
+ "The request has been declined", /* 37 */
+ "The request has not been successful as one or more parameters "
+ "have invalid values", /* 38 */
+ "The allocation or TS has not been created because the request "
+ "cannot be honored; however, a suggested TSPEC/DMG TSPEC is "
+ "provided so that the initiating STA can attempt to set "
+ "another allocation or TS with the suggested changes to the "
+ "TSPEC/DMG TSPEC", /* 39 */
+ "Invalid element, i.e., an element defined in this standard "
+ "for which the content does not meet the specifications in "
+ "Clause 9", /* 40 */
+ "Invalid group cipher", /* 41 */
+ "Invalid pairwise cipher", /* 42 */
+ "Invalid AKMP", /* 43 */
+ "Unsupported RSNE version", /* 44 */
+ "Invalid RSNE capabilities", /* 45 */
+ "Cipher suite rejected because of security policy", /* 46 */
+ "The TS or allocation has not been created; however, the "
+ "HC or PCP might be capable of creating a TS or "
+ "allocation, in response to a request, after the time "
+ "indicated in the TS Delay element", /* 47 */
+ "Direct Link is not allowed in the BSS by policy", /* 48 */
+ "The Destination STA is not present within this BSS", /* 49 */
+ "The Destination STA is not a QoS STA", /* 50 */
+
+ "Association denied because the listen interval is "
+ "too large", /* 51 */
+ "Invalid FT Action frame count", /* 52 */
+ "Invalid pairwise master key identifier (PMKID)", /* 53 */
+ "Invalid MDE", /* 54 */
+ "Invalid FTE", /* 55 */
+ "Requested TCLAS processing is not supported by the AP "
+ "or PCP", /* 56 */
+ "The AP or PCP has insufficient TCLAS processing "
+ "resources to satisfy the request", /* 57 */
+ "The TS has not been created because the request "
+ "cannot be honored; however, the HC or PCP suggests "
+ "that the STA transition to a different BSS to set up "
+ "the TS", /* 58 */
+ "GAS Advertisement Protocol not supported", /* 59 */
+ "No outstanding GAS request", /* 60 */
+ "GAS Response not received from the Advertisement "
+ "Server", /* 61 */
+ "STA timed out waiting for GAS Query Response", /* 62 */
+ "LARGE GAS Response is larger than query response "
+ "length limit", /* 63 */
+ "Request refused because home network does not support "
+ "request", /* 64 */
+ "Advertisement Server in the network is not currently "
+ "reachable", /* 65 */
+ "Reserved", /* 66 */
+ "Request refused due to permissions received via SSPN "
+ "interface", /* 67 */
+ "Request refused because the AP or PCP does not "
+ "support unauthenticated access", /* 68 */
+ "Reserved", /* 69 */
+ "Reserved", /* 70 */
+ "Reserved", /* 71 */
+ "Invalid contents of RSNE", /* 72 */
+ "U-APSD coexistence is not supported", /* 73 */
+ "Requested U-APSD coexistence mode is not supported", /* 74 */
+ "Requested Interval/Duration value cannot be "
+ "supported with U-APSD coexistence", /* 75 */
+ "Authentication is rejected because an Anti-Clogging "
+ "Token is required", /* 76 */
+ "Authentication is rejected because the offered "
+ "finite cyclic group is not supported", /* 77 */
+ "The TBTT adjustment request has not been successful "
+ "because the STA could not find an alternative TBTT", /* 78 */
+ "Transmission failure", /* 79 */
+ "Requested TCLAS Not Supported", /* 80 */
+ "TCLAS Resources Exhausted", /* 81 */
+ "Rejected with Suggested BSS transition", /* 82 */
+ "Reject with recommended schedule", /* 83 */
+ "Reject because no wakeup schedule specified", /* 84 */
+ "Success, the destination STA is in power save mode", /* 85 */
+ "FST pending, in process of admitting FST session", /* 86 */
+ "Performing FST now", /* 87 */
+ "FST pending, gap(s) in block ack window", /* 88 */
+ "Reject because of U-PID setting", /* 89 */
+ "Reserved", /* 90 */
+ "Reserved", /* 91 */
+ "(Re)Association refused for some external reason", /* 92 */
+ "(Re)Association refused because of memory limits "
+ "at the AP", /* 93 */
+ "(Re)Association refused because emergency services "
+ "are not supported at the AP", /* 94 */
+ "GAS query response not yet received", /* 95 */
+ "Reject since the request is for transition to a "
+ "frequency band subject to DSE procedures and "
+ "FST Initiator is a dependent STA", /* 96 */
+ "Requested TCLAS processing has been terminated by "
+ "the AP", /* 97 */
+ "The TS schedule conflicts with an existing "
+ "schedule; an alternative schedule is provided", /* 98 */
+ "The association has been denied; however, one or "
+ "more Multi-band elements are included that can "
+ "be used by the receiving STA to join the BSS", /* 99 */
+ "The request failed due to a reservation conflict", /* 100 */
+ "The request failed due to exceeded MAF limit", /* 101 */
+ "The request failed due to exceeded MCCA track "
+ "limit", /* 102 */
+ "Association denied because the information in the"
+ "Spectrum Management field is unacceptable", /* 103 */
+ "Association denied because the requesting STA "
+ "does not support VHT features", /* 104 */
+ "Enablement denied", /* 105 */
+ "Enablement denied due to restriction from an "
+ "authorized GDB", /* 106 */
+ "Authorization deenabled", /* 107 */
+};
+#define NUM_STATUSES (sizeof(status_text) / sizeof(status_text[0]))
+
+static const char *reason_text[] = {
+ "Reserved", /* 0 */
+ "Unspecified reason", /* 1 */
+ "Previous authentication no longer valid", /* 2 */
+ "Deauthenticated because sending STA is leaving (or has left) "
+ "IBSS or ESS", /* 3 */
+ "Disassociated due to inactivity", /* 4 */
+ "Disassociated because AP is unable to handle all currently "
+ " associated STAs", /* 5 */
+ "Class 2 frame received from nonauthenticated STA", /* 6 */
+ "Class 3 frame received from nonassociated STA", /* 7 */
+ "Disassociated because sending STA is leaving "
+ "(or has left) BSS", /* 8 */
+ "STA requesting (re)association is not authenticated with "
+ "responding STA", /* 9 */
+ "Disassociated because the information in the Power Capability "
+ "element is unacceptable", /* 10 */
+ "Disassociated because the information in the Supported Channels "
+ "element is unacceptable", /* 11 */
+ "Disassociated due to BSS transition management", /* 12 */
+ "Invalid element, i.e., an element defined in this standard for "
+ "which the content does not meet the specifications "
+ "in Clause 9", /* 13 */
+ "Message integrity code (MIC) failure", /* 14 */
+ "4-Way Handshake timeout", /* 15 */
+ "Group key handshake timeout", /* 16 */
+ "Information element in 4-Way Handshake different from (Re)Association"
+ "Request/Probe Response/Beacon frame", /* 17 */
+ "Invalid group cipher", /* 18 */
+ "Invalid pairwise cipher", /* 19 */
+ "Invalid AKMP", /* 20 */
+ "Unsupported RSNE version", /* 21 */
+ "Invalid RSNE capabilities", /* 22 */
+ "IEEE 802.1X authentication failed", /* 23 */
+ "Cipher suite rejected because of the security policy", /* 24 */
+ "TDLS direct-link teardown due to TDLS peer STA "
+ "unreachable via the TDLS direct link", /* 25 */
+ "TDLS direct-link teardown for unspecified reason", /* 26 */
+ "Disassociated because session terminated by SSP request",/* 27 */
+ "Disassociated because of lack of SSP roaming agreement",/* 28 */
+ "Requested service rejected because of SSP cipher suite or "
+ "AKM requirement", /* 29 */
+ "Requested service not authorized in this location", /* 30 */
+ "TS deleted because QoS AP lacks sufficient bandwidth for this "
+ "QoS STA due to a change in BSS service characteristics or "
+ "operational mode (e.g. an HT BSS change from 40 MHz channel "
+ "to 20 MHz channel)", /* 31 */
+ "Disassociated for unspecified, QoS-related reason", /* 32 */
+ "Disassociated because QoS AP lacks sufficient bandwidth for this "
+ "QoS STA", /* 33 */
+ "Disassociated because of excessive number of frames that need to be "
+ "acknowledged, but are not acknowledged due to AP transmissions "
+ "and/or poor channel conditions", /* 34 */
+ "Disassociated because STA is transmitting outside the limits "
+ "of its TXOPs", /* 35 */
+ "Requested from peer STA as the STA is leaving the BSS "
+ "(or resetting)", /* 36 */
+ "Requested from peer STA as it does not want to use the "
+ "mechanism", /* 37 */
+ "Requested from peer STA as the STA received frames using the "
+ "mechanism for which a set up is required", /* 38 */
+ "Requested from peer STA due to time out", /* 39 */
+ "Reserved", /* 40 */
+ "Reserved", /* 41 */
+ "Reserved", /* 42 */
+ "Reserved", /* 43 */
+ "Reserved", /* 44 */
+ "Peer STA does not support the requested cipher suite", /* 45 */
+ "In a DLS Teardown frame: The teardown was initiated by the "
+ "DLS peer. In a Disassociation frame: Disassociated because "
+ "authorized access limit reached", /* 46 */
+ "In a DLS Teardown frame: The teardown was initiated by the "
+ "AP. In a Disassociation frame: Disassociated due to external "
+ "service requirements", /* 47 */
+ "Invalid FT Action frame count", /* 48 */
+ "Invalid pairwise master key identifier (PMKID)", /* 49 */
+ "Invalid MDE", /* 50 */
+ "Invalid FTE", /* 51 */
+ "Mesh peering canceled for unknown reasons", /* 52 */
+ "The mesh STA has reached the supported maximum number of "
+ "peer mesh STAs", /* 53 */
+ "The received information violates the Mesh Configuration "
+ "policy configured in the mesh STA profile", /* 54 */
+ "The mesh STA has received a Mesh Peering Close frame "
+ "requesting to close the mesh peering", /* 55 */
+ "The mesh STA has resent dot11MeshMaxRetries Mesh "
+ "Peering Open frames, without receiving a Mesh Peering "
+ "Confirm frame", /* 56 */
+ "The confirmTimer for the mesh peering instance times out", /* 57 */
+ "The mesh STA fails to unwrap the GTK or the values in the "
+ "wrapped contents do not match", /* 58 */
+ "The mesh STA receives inconsistent information about the "
+ "mesh parameters between mesh peering Management frames", /* 59 */
+ "The mesh STA fails the authenticated mesh peering exchange "
+ "because due to failure in selecting either the pairwise "
+ "ciphersuite or group ciphersuite", /* 60 */
+ "The mesh STA does not have proxy information for this "
+ "external destination", /* 61 */
+ "The mesh STA does not have forwarding information for this "
+ "destination", /* 62 */
+ "The mesh STA determines that the link to the next hop of an "
+ "active path in its forwarding information is no longer "
+ "usable", /* 63 */
+ "The Deauthentication frame was sent because the MAC "
+ "address of the STA already exists in the mesh BSS", /* 64 */
+ "The mesh STA performs channel switch to meet regulatory "
+ "requirements", /* 65 */
+ "The mesh STA performs channel switching with unspecified "
+ "reason", /* 66 */
+};
+#define NUM_REASONS (sizeof(reason_text) / sizeof(reason_text[0]))
+
+static int
+wep_print(netdissect_options *ndo,
+ const u_char *p)
+{
+ uint32_t iv;
+
+ ND_TCHECK_LEN(p, IEEE802_11_IV_LEN + IEEE802_11_KID_LEN);
+ iv = GET_LE_U_4(p);
+
+ ND_PRINT(" IV:%3x Pad %x KeyID %x", IV_IV(iv), IV_PAD(iv),
+ IV_KEYID(iv));
+
+ return 1;
+trunc:
+ return 0;
+}
+
+static int
+parse_elements(netdissect_options *ndo,
+ struct mgmt_body_t *pbody, const u_char *p, int offset,
+ u_int length)
+{
+ u_int elementlen;
+ struct ssid_t ssid;
+ struct challenge_t challenge;
+ struct rates_t rates;
+ struct ds_t ds;
+ struct cf_t cf;
+ struct tim_t tim;
+
+ /*
+ * We haven't seen any elements yet.
+ */
+ pbody->challenge_present = 0;
+ pbody->ssid_present = 0;
+ pbody->rates_present = 0;
+ pbody->ds_present = 0;
+ pbody->cf_present = 0;
+ pbody->tim_present = 0;
+
+ while (length != 0) {
+ /* Make sure we at least have the element ID and length. */
+ ND_TCHECK_2(p + offset);
+ if (length < 2)
+ goto trunc;
+ elementlen = GET_U_1(p + offset + 1);
+
+ /* Make sure we have the entire element. */
+ ND_TCHECK_LEN(p + offset + 2, elementlen);
+ if (length < elementlen + 2)
+ goto trunc;
+
+ switch (GET_U_1(p + offset)) {
+ case E_SSID:
+ memcpy(&ssid, p + offset, 2);
+ offset += 2;
+ length -= 2;
+ if (ssid.length != 0) {
+ if (ssid.length > sizeof(ssid.ssid) - 1)
+ return 0;
+ memcpy(&ssid.ssid, p + offset, ssid.length);
+ offset += ssid.length;
+ length -= ssid.length;
+ }
+ ssid.ssid[ssid.length] = '\0';
+ /*
+ * Present and not truncated.
+ *
+ * If we haven't already seen an SSID IE,
+ * copy this one, otherwise ignore this one,
+ * so we later report the first one we saw.
+ */
+ if (!pbody->ssid_present) {
+ pbody->ssid = ssid;
+ pbody->ssid_present = 1;
+ }
+ break;
+ case E_CHALLENGE:
+ memcpy(&challenge, p + offset, 2);
+ offset += 2;
+ length -= 2;
+ if (challenge.length != 0) {
+ if (challenge.length >
+ sizeof(challenge.text) - 1)
+ return 0;
+ memcpy(&challenge.text, p + offset,
+ challenge.length);
+ offset += challenge.length;
+ length -= challenge.length;
+ }
+ challenge.text[challenge.length] = '\0';
+ /*
+ * Present and not truncated.
+ *
+ * If we haven't already seen a challenge IE,
+ * copy this one, otherwise ignore this one,
+ * so we later report the first one we saw.
+ */
+ if (!pbody->challenge_present) {
+ pbody->challenge = challenge;
+ pbody->challenge_present = 1;
+ }
+ break;
+ case E_RATES:
+ memcpy(&rates, p + offset, 2);
+ offset += 2;
+ length -= 2;
+ if (rates.length != 0) {
+ if (rates.length > sizeof(rates.rate))
+ return 0;
+ memcpy(&rates.rate, p + offset, rates.length);
+ offset += rates.length;
+ length -= rates.length;
+ }
+ /*
+ * Present and not truncated.
+ *
+ * If we haven't already seen a rates IE,
+ * copy this one if it's not zero-length,
+ * otherwise ignore this one, so we later
+ * report the first one we saw.
+ *
+ * We ignore zero-length rates IEs as some
+ * devices seem to put a zero-length rates
+ * IE, followed by an SSID IE, followed by
+ * a non-zero-length rates IE into frames,
+ * even though IEEE Std 802.11-2007 doesn't
+ * seem to indicate that a zero-length rates
+ * IE is valid.
+ */
+ if (!pbody->rates_present && rates.length != 0) {
+ pbody->rates = rates;
+ pbody->rates_present = 1;
+ }
+ break;
+ case E_DS:
+ memcpy(&ds, p + offset, 2);
+ offset += 2;
+ length -= 2;
+ if (ds.length != 1) {
+ offset += ds.length;
+ length -= ds.length;
+ break;
+ }
+ ds.channel = GET_U_1(p + offset);
+ offset += 1;
+ length -= 1;
+ /*
+ * Present and not truncated.
+ *
+ * If we haven't already seen a DS IE,
+ * copy this one, otherwise ignore this one,
+ * so we later report the first one we saw.
+ */
+ if (!pbody->ds_present) {
+ pbody->ds = ds;
+ pbody->ds_present = 1;
+ }
+ break;
+ case E_CF:
+ memcpy(&cf, p + offset, 2);
+ offset += 2;
+ length -= 2;
+ if (cf.length != 6) {
+ offset += cf.length;
+ length -= cf.length;
+ break;
+ }
+ cf.count = GET_U_1(p + offset);
+ offset += 1;
+ length -= 1;
+ cf.period = GET_U_1(p + offset);
+ offset += 1;
+ length -= 1;
+ cf.max_duration = GET_LE_U_2(p + offset);
+ offset += 2;
+ length -= 2;
+ cf.dur_remaining = GET_LE_U_2(p + offset);
+ offset += 2;
+ length -= 2;
+ /*
+ * Present and not truncated.
+ *
+ * If we haven't already seen a CF IE,
+ * copy this one, otherwise ignore this one,
+ * so we later report the first one we saw.
+ */
+ if (!pbody->cf_present) {
+ pbody->cf = cf;
+ pbody->cf_present = 1;
+ }
+ break;
+ case E_TIM:
+ memcpy(&tim, p + offset, 2);
+ offset += 2;
+ length -= 2;
+ if (tim.length <= 3U) {
+ offset += tim.length;
+ length -= tim.length;
+ break;
+ }
+ if (tim.length - 3U > sizeof(tim.bitmap))
+ return 0;
+ tim.count = GET_U_1(p + offset);
+ offset += 1;
+ length -= 1;
+ tim.period = GET_U_1(p + offset);
+ offset += 1;
+ length -= 1;
+ tim.bitmap_control = GET_U_1(p + offset);
+ offset += 1;
+ length -= 1;
+ memcpy(tim.bitmap, p + offset, tim.length - 3);
+ offset += tim.length - 3;
+ length -= tim.length - 3;
+ /*
+ * Present and not truncated.
+ *
+ * If we haven't already seen a TIM IE,
+ * copy this one, otherwise ignore this one,
+ * so we later report the first one we saw.
+ */
+ if (!pbody->tim_present) {
+ pbody->tim = tim;
+ pbody->tim_present = 1;
+ }
+ break;
+ default:
+#if 0
+ ND_PRINT("(1) unhandled element_id (%u) ",
+ GET_U_1(p + offset));
+#endif
+ offset += 2 + elementlen;
+ length -= 2 + elementlen;
+ break;
+ }
+ }
+
+ /* No problems found. */
+ return 1;
+trunc:
+ return 0;
+}
+
+/*********************************************************************************
+ * Print Handle functions for the management frame types
+ *********************************************************************************/
+
+static int
+handle_beacon(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ struct mgmt_body_t pbody;
+ int offset = 0;
+ int ret;
+
+ memset(&pbody, 0, sizeof(pbody));
+
+ ND_TCHECK_LEN(p, IEEE802_11_TSTAMP_LEN + IEEE802_11_BCNINT_LEN +
+ IEEE802_11_CAPINFO_LEN);
+ if (length < IEEE802_11_TSTAMP_LEN + IEEE802_11_BCNINT_LEN +
+ IEEE802_11_CAPINFO_LEN)
+ goto trunc;
+ memcpy(&pbody.timestamp, p, IEEE802_11_TSTAMP_LEN);
+ offset += IEEE802_11_TSTAMP_LEN;
+ length -= IEEE802_11_TSTAMP_LEN;
+ pbody.beacon_interval = GET_LE_U_2(p + offset);
+ offset += IEEE802_11_BCNINT_LEN;
+ length -= IEEE802_11_BCNINT_LEN;
+ pbody.capability_info = GET_LE_U_2(p + offset);
+ offset += IEEE802_11_CAPINFO_LEN;
+ length -= IEEE802_11_CAPINFO_LEN;
+
+ ret = parse_elements(ndo, &pbody, p, offset, length);
+
+ PRINT_SSID(pbody);
+ PRINT_RATES(pbody);
+ ND_PRINT(" %s",
+ CAPABILITY_ESS(pbody.capability_info) ? "ESS" : "IBSS");
+ PRINT_DS_CHANNEL(pbody);
+
+ return ret;
+trunc:
+ return 0;
+}
+
+static int
+handle_assoc_request(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ struct mgmt_body_t pbody;
+ int offset = 0;
+ int ret;
+
+ memset(&pbody, 0, sizeof(pbody));
+
+ ND_TCHECK_LEN(p, IEEE802_11_CAPINFO_LEN + IEEE802_11_LISTENINT_LEN);
+ if (length < IEEE802_11_CAPINFO_LEN + IEEE802_11_LISTENINT_LEN)
+ goto trunc;
+ pbody.capability_info = GET_LE_U_2(p);
+ offset += IEEE802_11_CAPINFO_LEN;
+ length -= IEEE802_11_CAPINFO_LEN;
+ pbody.listen_interval = GET_LE_U_2(p + offset);
+ offset += IEEE802_11_LISTENINT_LEN;
+ length -= IEEE802_11_LISTENINT_LEN;
+
+ ret = parse_elements(ndo, &pbody, p, offset, length);
+
+ PRINT_SSID(pbody);
+ PRINT_RATES(pbody);
+ return ret;
+trunc:
+ return 0;
+}
+
+static int
+handle_assoc_response(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ struct mgmt_body_t pbody;
+ int offset = 0;
+ int ret;
+
+ memset(&pbody, 0, sizeof(pbody));
+
+ ND_TCHECK_LEN(p, IEEE802_11_CAPINFO_LEN + IEEE802_11_STATUS_LEN +
+ IEEE802_11_AID_LEN);
+ if (length < IEEE802_11_CAPINFO_LEN + IEEE802_11_STATUS_LEN +
+ IEEE802_11_AID_LEN)
+ goto trunc;
+ pbody.capability_info = GET_LE_U_2(p);
+ offset += IEEE802_11_CAPINFO_LEN;
+ length -= IEEE802_11_CAPINFO_LEN;
+ pbody.status_code = GET_LE_U_2(p + offset);
+ offset += IEEE802_11_STATUS_LEN;
+ length -= IEEE802_11_STATUS_LEN;
+ pbody.aid = GET_LE_U_2(p + offset);
+ offset += IEEE802_11_AID_LEN;
+ length -= IEEE802_11_AID_LEN;
+
+ ret = parse_elements(ndo, &pbody, p, offset, length);
+
+ ND_PRINT(" AID(%x) :%s: %s", ((uint16_t)(pbody.aid << 2 )) >> 2 ,
+ CAPABILITY_PRIVACY(pbody.capability_info) ? " PRIVACY " : "",
+ (pbody.status_code < NUM_STATUSES
+ ? status_text[pbody.status_code]
+ : "n/a"));
+
+ return ret;
+trunc:
+ return 0;
+}
+
+static int
+handle_reassoc_request(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ struct mgmt_body_t pbody;
+ int offset = 0;
+ int ret;
+
+ memset(&pbody, 0, sizeof(pbody));
+
+ ND_TCHECK_LEN(p, IEEE802_11_CAPINFO_LEN + IEEE802_11_LISTENINT_LEN +
+ IEEE802_11_AP_LEN);
+ if (length < IEEE802_11_CAPINFO_LEN + IEEE802_11_LISTENINT_LEN +
+ IEEE802_11_AP_LEN)
+ goto trunc;
+ pbody.capability_info = GET_LE_U_2(p);
+ offset += IEEE802_11_CAPINFO_LEN;
+ length -= IEEE802_11_CAPINFO_LEN;
+ pbody.listen_interval = GET_LE_U_2(p + offset);
+ offset += IEEE802_11_LISTENINT_LEN;
+ length -= IEEE802_11_LISTENINT_LEN;
+ memcpy(&pbody.ap, p+offset, IEEE802_11_AP_LEN);
+ offset += IEEE802_11_AP_LEN;
+ length -= IEEE802_11_AP_LEN;
+
+ ret = parse_elements(ndo, &pbody, p, offset, length);
+
+ PRINT_SSID(pbody);
+ ND_PRINT(" AP : %s", etheraddr_string(ndo, pbody.ap ));
+
+ return ret;
+trunc:
+ return 0;
+}
+
+static int
+handle_reassoc_response(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ /* Same as a Association Response */
+ return handle_assoc_response(ndo, p, length);
+}
+
+static int
+handle_probe_request(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ struct mgmt_body_t pbody;
+ int offset = 0;
+ int ret;
+
+ memset(&pbody, 0, sizeof(pbody));
+
+ ret = parse_elements(ndo, &pbody, p, offset, length);
+
+ PRINT_SSID(pbody);
+ PRINT_RATES(pbody);
+
+ return ret;
+}
+
+static int
+handle_probe_response(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ struct mgmt_body_t pbody;
+ int offset = 0;
+ int ret;
+
+ memset(&pbody, 0, sizeof(pbody));
+
+ ND_TCHECK_LEN(p, IEEE802_11_TSTAMP_LEN + IEEE802_11_BCNINT_LEN +
+ IEEE802_11_CAPINFO_LEN);
+ if (length < IEEE802_11_TSTAMP_LEN + IEEE802_11_BCNINT_LEN +
+ IEEE802_11_CAPINFO_LEN)
+ goto trunc;
+ memcpy(&pbody.timestamp, p, IEEE802_11_TSTAMP_LEN);
+ offset += IEEE802_11_TSTAMP_LEN;
+ length -= IEEE802_11_TSTAMP_LEN;
+ pbody.beacon_interval = GET_LE_U_2(p + offset);
+ offset += IEEE802_11_BCNINT_LEN;
+ length -= IEEE802_11_BCNINT_LEN;
+ pbody.capability_info = GET_LE_U_2(p + offset);
+ offset += IEEE802_11_CAPINFO_LEN;
+ length -= IEEE802_11_CAPINFO_LEN;
+
+ ret = parse_elements(ndo, &pbody, p, offset, length);
+
+ PRINT_SSID(pbody);
+ PRINT_RATES(pbody);
+ PRINT_DS_CHANNEL(pbody);
+
+ return ret;
+trunc:
+ return 0;
+}
+
+static int
+handle_atim(void)
+{
+ /* the frame body for ATIM is null. */
+ return 1;
+}
+
+static int
+handle_disassoc(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ struct mgmt_body_t pbody;
+
+ memset(&pbody, 0, sizeof(pbody));
+
+ ND_TCHECK_LEN(p, IEEE802_11_REASON_LEN);
+ if (length < IEEE802_11_REASON_LEN)
+ goto trunc;
+ pbody.reason_code = GET_LE_U_2(p);
+
+ ND_PRINT(": %s",
+ (pbody.reason_code < NUM_REASONS)
+ ? reason_text[pbody.reason_code]
+ : "Reserved");
+
+ return 1;
+trunc:
+ return 0;
+}
+
+static int
+handle_auth(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ struct mgmt_body_t pbody;
+ int offset = 0;
+ int ret;
+
+ memset(&pbody, 0, sizeof(pbody));
+
+ ND_TCHECK_6(p);
+ if (length < 6)
+ goto trunc;
+ pbody.auth_alg = GET_LE_U_2(p);
+ offset += 2;
+ length -= 2;
+ pbody.auth_trans_seq_num = GET_LE_U_2(p + offset);
+ offset += 2;
+ length -= 2;
+ pbody.status_code = GET_LE_U_2(p + offset);
+ offset += 2;
+ length -= 2;
+
+ ret = parse_elements(ndo, &pbody, p, offset, length);
+
+ if ((pbody.auth_alg == 1) &&
+ ((pbody.auth_trans_seq_num == 2) ||
+ (pbody.auth_trans_seq_num == 3))) {
+ ND_PRINT(" (%s)-%x [Challenge Text] %s",
+ (pbody.auth_alg < NUM_AUTH_ALGS)
+ ? auth_alg_text[pbody.auth_alg]
+ : "Reserved",
+ pbody.auth_trans_seq_num,
+ ((pbody.auth_trans_seq_num % 2)
+ ? ((pbody.status_code < NUM_STATUSES)
+ ? status_text[pbody.status_code]
+ : "n/a") : ""));
+ return ret;
+ }
+ ND_PRINT(" (%s)-%x: %s",
+ (pbody.auth_alg < NUM_AUTH_ALGS)
+ ? auth_alg_text[pbody.auth_alg]
+ : "Reserved",
+ pbody.auth_trans_seq_num,
+ (pbody.auth_trans_seq_num % 2)
+ ? ((pbody.status_code < NUM_STATUSES)
+ ? status_text[pbody.status_code]
+ : "n/a")
+ : "");
+
+ return ret;
+trunc:
+ return 0;
+}
+
+static int
+handle_deauth(netdissect_options *ndo,
+ const uint8_t *src, const u_char *p, u_int length)
+{
+ struct mgmt_body_t pbody;
+ const char *reason = NULL;
+
+ memset(&pbody, 0, sizeof(pbody));
+
+ ND_TCHECK_LEN(p, IEEE802_11_REASON_LEN);
+ if (length < IEEE802_11_REASON_LEN)
+ goto trunc;
+ pbody.reason_code = GET_LE_U_2(p);
+
+ reason = (pbody.reason_code < NUM_REASONS)
+ ? reason_text[pbody.reason_code]
+ : "Reserved";
+
+ if (ndo->ndo_eflag) {
+ ND_PRINT(": %s", reason);
+ } else {
+ ND_PRINT(" (%s): %s", GET_ETHERADDR_STRING(src), reason);
+ }
+ return 1;
+trunc:
+ return 0;
+}
+
+#define PRINT_HT_ACTION(v) (\
+ (v) == 0 ? ND_PRINT("TxChWidth"): \
+ (v) == 1 ? ND_PRINT("MIMOPwrSave"): \
+ ND_PRINT("Act#%u", (v)))
+#define PRINT_BA_ACTION(v) (\
+ (v) == 0 ? ND_PRINT("ADDBA Request"): \
+ (v) == 1 ? ND_PRINT("ADDBA Response"): \
+ (v) == 2 ? ND_PRINT("DELBA"): \
+ ND_PRINT("Act#%u", (v)))
+#define PRINT_MESHLINK_ACTION(v) (\
+ (v) == 0 ? ND_PRINT("Request"): \
+ (v) == 1 ? ND_PRINT("Report"): \
+ ND_PRINT("Act#%u", (v)))
+#define PRINT_MESHPEERING_ACTION(v) (\
+ (v) == 0 ? ND_PRINT("Open"): \
+ (v) == 1 ? ND_PRINT("Confirm"): \
+ (v) == 2 ? ND_PRINT("Close"): \
+ ND_PRINT("Act#%u", (v)))
+#define PRINT_MESHPATH_ACTION(v) (\
+ (v) == 0 ? ND_PRINT("Request"): \
+ (v) == 1 ? ND_PRINT("Report"): \
+ (v) == 2 ? ND_PRINT("Error"): \
+ (v) == 3 ? ND_PRINT("RootAnnouncement"): \
+ ND_PRINT("Act#%u", (v)))
+
+#define PRINT_MESH_ACTION(v) (\
+ (v) == 0 ? ND_PRINT("MeshLink"): \
+ (v) == 1 ? ND_PRINT("HWMP"): \
+ (v) == 2 ? ND_PRINT("Gate Announcement"): \
+ (v) == 3 ? ND_PRINT("Congestion Control"): \
+ (v) == 4 ? ND_PRINT("MCCA Setup Request"): \
+ (v) == 5 ? ND_PRINT("MCCA Setup Reply"): \
+ (v) == 6 ? ND_PRINT("MCCA Advertisement Request"): \
+ (v) == 7 ? ND_PRINT("MCCA Advertisement"): \
+ (v) == 8 ? ND_PRINT("MCCA Teardown"): \
+ (v) == 9 ? ND_PRINT("TBTT Adjustment Request"): \
+ (v) == 10 ? ND_PRINT("TBTT Adjustment Response"): \
+ ND_PRINT("Act#%u", (v)))
+#define PRINT_MULTIHOP_ACTION(v) (\
+ (v) == 0 ? ND_PRINT("Proxy Update"): \
+ (v) == 1 ? ND_PRINT("Proxy Update Confirmation"): \
+ ND_PRINT("Act#%u", (v)))
+#define PRINT_SELFPROT_ACTION(v) (\
+ (v) == 1 ? ND_PRINT("Peering Open"): \
+ (v) == 2 ? ND_PRINT("Peering Confirm"): \
+ (v) == 3 ? ND_PRINT("Peering Close"): \
+ (v) == 4 ? ND_PRINT("Group Key Inform"): \
+ (v) == 5 ? ND_PRINT("Group Key Acknowledge"): \
+ ND_PRINT("Act#%u", (v)))
+
+static int
+handle_action(netdissect_options *ndo,
+ const uint8_t *src, const u_char *p, u_int length)
+{
+ ND_TCHECK_2(p);
+ if (length < 2)
+ goto trunc;
+ if (ndo->ndo_eflag) {
+ ND_PRINT(": ");
+ } else {
+ ND_PRINT(" (%s): ", GET_ETHERADDR_STRING(src));
+ }
+ switch (GET_U_1(p)) {
+ case 0: ND_PRINT("Spectrum Management Act#%u", GET_U_1(p + 1)); break;
+ case 1: ND_PRINT("QoS Act#%u", GET_U_1(p + 1)); break;
+ case 2: ND_PRINT("DLS Act#%u", GET_U_1(p + 1)); break;
+ case 3: ND_PRINT("BA "); PRINT_BA_ACTION(GET_U_1(p + 1)); break;
+ case 7: ND_PRINT("HT "); PRINT_HT_ACTION(GET_U_1(p + 1)); break;
+ case 13: ND_PRINT("MeshAction "); PRINT_MESH_ACTION(GET_U_1(p + 1)); break;
+ case 14:
+ ND_PRINT("MultiohopAction ");
+ PRINT_MULTIHOP_ACTION(GET_U_1(p + 1)); break;
+ case 15:
+ ND_PRINT("SelfprotectAction ");
+ PRINT_SELFPROT_ACTION(GET_U_1(p + 1)); break;
+ case 127: ND_PRINT("Vendor Act#%u", GET_U_1(p + 1)); break;
+ default:
+ ND_PRINT("Reserved(%u) Act#%u", GET_U_1(p), GET_U_1(p + 1));
+ break;
+ }
+ return 1;
+trunc:
+ return 0;
+}
+
+
+/*********************************************************************************
+ * Print Body funcs
+ *********************************************************************************/
+
+
+static int
+mgmt_body_print(netdissect_options *ndo,
+ uint16_t fc, const uint8_t *src, const u_char *p, u_int length)
+{
+ ND_PRINT("%s", tok2str(st_str, "Unhandled Management subtype(%x)", FC_SUBTYPE(fc)));
+
+ /* There may be a problem w/ AP not having this bit set */
+ if (FC_PROTECTED(fc))
+ return wep_print(ndo, p);
+ switch (FC_SUBTYPE(fc)) {
+ case ST_ASSOC_REQUEST:
+ return handle_assoc_request(ndo, p, length);
+ case ST_ASSOC_RESPONSE:
+ return handle_assoc_response(ndo, p, length);
+ case ST_REASSOC_REQUEST:
+ return handle_reassoc_request(ndo, p, length);
+ case ST_REASSOC_RESPONSE:
+ return handle_reassoc_response(ndo, p, length);
+ case ST_PROBE_REQUEST:
+ return handle_probe_request(ndo, p, length);
+ case ST_PROBE_RESPONSE:
+ return handle_probe_response(ndo, p, length);
+ case ST_BEACON:
+ return handle_beacon(ndo, p, length);
+ case ST_ATIM:
+ return handle_atim();
+ case ST_DISASSOC:
+ return handle_disassoc(ndo, p, length);
+ case ST_AUTH:
+ return handle_auth(ndo, p, length);
+ case ST_DEAUTH:
+ return handle_deauth(ndo, src, p, length);
+ case ST_ACTION:
+ return handle_action(ndo, src, p, length);
+ default:
+ return 1;
+ }
+}
+
+
+/*********************************************************************************
+ * Handles printing all the control frame types
+ *********************************************************************************/
+
+static int
+ctrl_body_print(netdissect_options *ndo,
+ uint16_t fc, const u_char *p)
+{
+ ND_PRINT("%s", tok2str(ctrl_str, "Unknown Ctrl Subtype", FC_SUBTYPE(fc)));
+ switch (FC_SUBTYPE(fc)) {
+ case CTRL_CONTROL_WRAPPER:
+ /* XXX - requires special handling */
+ break;
+ case CTRL_BAR:
+ ND_TCHECK_LEN(p, CTRL_BAR_HDRLEN);
+ if (!ndo->ndo_eflag)
+ ND_PRINT(" RA:%s TA:%s CTL(%x) SEQ(%u) ",
+ GET_ETHERADDR_STRING(((const struct ctrl_bar_hdr_t *)p)->ra),
+ GET_ETHERADDR_STRING(((const struct ctrl_bar_hdr_t *)p)->ta),
+ GET_LE_U_2(((const struct ctrl_bar_hdr_t *)p)->ctl),
+ GET_LE_U_2(((const struct ctrl_bar_hdr_t *)p)->seq));
+ break;
+ case CTRL_BA:
+ ND_TCHECK_LEN(p, CTRL_BA_HDRLEN);
+ if (!ndo->ndo_eflag)
+ ND_PRINT(" RA:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_ba_hdr_t *)p)->ra));
+ break;
+ case CTRL_PS_POLL:
+ ND_TCHECK_LEN(p, CTRL_PS_POLL_HDRLEN);
+ ND_PRINT(" AID(%x)",
+ GET_LE_U_2(((const struct ctrl_ps_poll_hdr_t *)p)->aid));
+ break;
+ case CTRL_RTS:
+ ND_TCHECK_LEN(p, CTRL_RTS_HDRLEN);
+ if (!ndo->ndo_eflag)
+ ND_PRINT(" TA:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_rts_hdr_t *)p)->ta));
+ break;
+ case CTRL_CTS:
+ ND_TCHECK_LEN(p, CTRL_CTS_HDRLEN);
+ if (!ndo->ndo_eflag)
+ ND_PRINT(" RA:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_cts_hdr_t *)p)->ra));
+ break;
+ case CTRL_ACK:
+ ND_TCHECK_LEN(p, CTRL_ACK_HDRLEN);
+ if (!ndo->ndo_eflag)
+ ND_PRINT(" RA:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_ack_hdr_t *)p)->ra));
+ break;
+ case CTRL_CF_END:
+ ND_TCHECK_LEN(p, CTRL_END_HDRLEN);
+ if (!ndo->ndo_eflag)
+ ND_PRINT(" RA:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_end_hdr_t *)p)->ra));
+ break;
+ case CTRL_END_ACK:
+ ND_TCHECK_LEN(p, CTRL_END_ACK_HDRLEN);
+ if (!ndo->ndo_eflag)
+ ND_PRINT(" RA:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_end_ack_hdr_t *)p)->ra));
+ break;
+ }
+ return 1;
+trunc:
+ return 0;
+}
+
+/*
+ * Data Frame - Address field contents
+ *
+ * To Ds | From DS | Addr 1 | Addr 2 | Addr 3 | Addr 4
+ * 0 | 0 | DA | SA | BSSID | n/a
+ * 0 | 1 | DA | BSSID | SA | n/a
+ * 1 | 0 | BSSID | SA | DA | n/a
+ * 1 | 1 | RA | TA | DA | SA
+ */
+
+/*
+ * Function to get source and destination MAC addresses for a data frame.
+ */
+static void
+get_data_src_dst_mac(uint16_t fc, const u_char *p, const uint8_t **srcp,
+ const uint8_t **dstp)
+{
+#define ADDR1 (p + 4)
+#define ADDR2 (p + 10)
+#define ADDR3 (p + 16)
+#define ADDR4 (p + 24)
+
+ if (!FC_TO_DS(fc)) {
+ if (!FC_FROM_DS(fc)) {
+ /* not To DS and not From DS */
+ *srcp = ADDR2;
+ *dstp = ADDR1;
+ } else {
+ /* not To DS and From DS */
+ *srcp = ADDR3;
+ *dstp = ADDR1;
+ }
+ } else {
+ if (!FC_FROM_DS(fc)) {
+ /* To DS and not From DS */
+ *srcp = ADDR2;
+ *dstp = ADDR3;
+ } else {
+ /* To DS and From DS */
+ *srcp = ADDR4;
+ *dstp = ADDR3;
+ }
+ }
+
+#undef ADDR1
+#undef ADDR2
+#undef ADDR3
+#undef ADDR4
+}
+
+static void
+get_mgmt_src_dst_mac(const u_char *p, const uint8_t **srcp, const uint8_t **dstp)
+{
+ const struct mgmt_header_t *hp = (const struct mgmt_header_t *) p;
+
+ if (srcp != NULL)
+ *srcp = hp->sa;
+ if (dstp != NULL)
+ *dstp = hp->da;
+}
+
+/*
+ * Print Header funcs
+ */
+
+static void
+data_header_print(netdissect_options *ndo, uint16_t fc, const u_char *p)
+{
+ u_int subtype = FC_SUBTYPE(fc);
+
+ if (DATA_FRAME_IS_CF_ACK(subtype) || DATA_FRAME_IS_CF_POLL(subtype) ||
+ DATA_FRAME_IS_QOS(subtype)) {
+ ND_PRINT("CF ");
+ if (DATA_FRAME_IS_CF_ACK(subtype)) {
+ if (DATA_FRAME_IS_CF_POLL(subtype))
+ ND_PRINT("Ack/Poll");
+ else
+ ND_PRINT("Ack");
+ } else {
+ if (DATA_FRAME_IS_CF_POLL(subtype))
+ ND_PRINT("Poll");
+ }
+ if (DATA_FRAME_IS_QOS(subtype))
+ ND_PRINT("+QoS");
+ ND_PRINT(" ");
+ }
+
+#define ADDR1 (p + 4)
+#define ADDR2 (p + 10)
+#define ADDR3 (p + 16)
+#define ADDR4 (p + 24)
+
+ if (!FC_TO_DS(fc) && !FC_FROM_DS(fc)) {
+ ND_PRINT("DA:%s SA:%s BSSID:%s ",
+ GET_ETHERADDR_STRING(ADDR1), GET_ETHERADDR_STRING(ADDR2),
+ GET_ETHERADDR_STRING(ADDR3));
+ } else if (!FC_TO_DS(fc) && FC_FROM_DS(fc)) {
+ ND_PRINT("DA:%s BSSID:%s SA:%s ",
+ GET_ETHERADDR_STRING(ADDR1), GET_ETHERADDR_STRING(ADDR2),
+ GET_ETHERADDR_STRING(ADDR3));
+ } else if (FC_TO_DS(fc) && !FC_FROM_DS(fc)) {
+ ND_PRINT("BSSID:%s SA:%s DA:%s ",
+ GET_ETHERADDR_STRING(ADDR1), GET_ETHERADDR_STRING(ADDR2),
+ GET_ETHERADDR_STRING(ADDR3));
+ } else if (FC_TO_DS(fc) && FC_FROM_DS(fc)) {
+ ND_PRINT("RA:%s TA:%s DA:%s SA:%s ",
+ GET_ETHERADDR_STRING(ADDR1), GET_ETHERADDR_STRING(ADDR2),
+ GET_ETHERADDR_STRING(ADDR3), GET_ETHERADDR_STRING(ADDR4));
+ }
+
+#undef ADDR1
+#undef ADDR2
+#undef ADDR3
+#undef ADDR4
+}
+
+static void
+mgmt_header_print(netdissect_options *ndo, const u_char *p)
+{
+ const struct mgmt_header_t *hp = (const struct mgmt_header_t *) p;
+
+ ND_PRINT("BSSID:%s DA:%s SA:%s ",
+ GET_ETHERADDR_STRING((hp)->bssid), GET_ETHERADDR_STRING((hp)->da),
+ GET_ETHERADDR_STRING((hp)->sa));
+}
+
+static void
+ctrl_header_print(netdissect_options *ndo, uint16_t fc, const u_char *p)
+{
+ switch (FC_SUBTYPE(fc)) {
+ case CTRL_BAR:
+ ND_PRINT(" RA:%s TA:%s CTL(%x) SEQ(%u) ",
+ GET_ETHERADDR_STRING(((const struct ctrl_bar_hdr_t *)p)->ra),
+ GET_ETHERADDR_STRING(((const struct ctrl_bar_hdr_t *)p)->ta),
+ GET_LE_U_2(((const struct ctrl_bar_hdr_t *)p)->ctl),
+ GET_LE_U_2(((const struct ctrl_bar_hdr_t *)p)->seq));
+ break;
+ case CTRL_BA:
+ ND_PRINT("RA:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_ba_hdr_t *)p)->ra));
+ break;
+ case CTRL_PS_POLL:
+ ND_PRINT("BSSID:%s TA:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_ps_poll_hdr_t *)p)->bssid),
+ GET_ETHERADDR_STRING(((const struct ctrl_ps_poll_hdr_t *)p)->ta));
+ break;
+ case CTRL_RTS:
+ ND_PRINT("RA:%s TA:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_rts_hdr_t *)p)->ra),
+ GET_ETHERADDR_STRING(((const struct ctrl_rts_hdr_t *)p)->ta));
+ break;
+ case CTRL_CTS:
+ ND_PRINT("RA:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_cts_hdr_t *)p)->ra));
+ break;
+ case CTRL_ACK:
+ ND_PRINT("RA:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_ack_hdr_t *)p)->ra));
+ break;
+ case CTRL_CF_END:
+ ND_PRINT("RA:%s BSSID:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_end_hdr_t *)p)->ra),
+ GET_ETHERADDR_STRING(((const struct ctrl_end_hdr_t *)p)->bssid));
+ break;
+ case CTRL_END_ACK:
+ ND_PRINT("RA:%s BSSID:%s ",
+ GET_ETHERADDR_STRING(((const struct ctrl_end_ack_hdr_t *)p)->ra),
+ GET_ETHERADDR_STRING(((const struct ctrl_end_ack_hdr_t *)p)->bssid));
+ break;
+ default:
+ /* We shouldn't get here - we should already have quit */
+ break;
+ }
+}
+
+static int
+extract_header_length(netdissect_options *ndo,
+ uint16_t fc)
+{
+ int len;
+
+ switch (FC_TYPE(fc)) {
+ case T_MGMT:
+ return MGMT_HDRLEN;
+ case T_CTRL:
+ switch (FC_SUBTYPE(fc)) {
+ case CTRL_CONTROL_WRAPPER:
+ return CTRL_CONTROL_WRAPPER_HDRLEN;
+ case CTRL_BAR:
+ return CTRL_BAR_HDRLEN;
+ case CTRL_BA:
+ return CTRL_BA_HDRLEN;
+ case CTRL_PS_POLL:
+ return CTRL_PS_POLL_HDRLEN;
+ case CTRL_RTS:
+ return CTRL_RTS_HDRLEN;
+ case CTRL_CTS:
+ return CTRL_CTS_HDRLEN;
+ case CTRL_ACK:
+ return CTRL_ACK_HDRLEN;
+ case CTRL_CF_END:
+ return CTRL_END_HDRLEN;
+ case CTRL_END_ACK:
+ return CTRL_END_ACK_HDRLEN;
+ default:
+ ND_PRINT("unknown 802.11 ctrl frame subtype (%u)", FC_SUBTYPE(fc));
+ return 0;
+ }
+ case T_DATA:
+ len = (FC_TO_DS(fc) && FC_FROM_DS(fc)) ? 30 : 24;
+ if (DATA_FRAME_IS_QOS(FC_SUBTYPE(fc)))
+ len += 2;
+ return len;
+ default:
+ ND_PRINT("unknown 802.11 frame type (%u)", FC_TYPE(fc));
+ return 0;
+ }
+}
+
+static int
+extract_mesh_header_length(netdissect_options *ndo, const u_char *p)
+{
+ return (GET_U_1(p) &~ 3) ? 0 : 6*(1 + (GET_U_1(p) & 3));
+}
+
+/*
+ * Print the 802.11 MAC header.
+ */
+static void
+ieee_802_11_hdr_print(netdissect_options *ndo,
+ uint16_t fc, const u_char *p, u_int hdrlen,
+ u_int meshdrlen)
+{
+ if (ndo->ndo_vflag) {
+ if (FC_MORE_DATA(fc))
+ ND_PRINT("More Data ");
+ if (FC_MORE_FLAG(fc))
+ ND_PRINT("More Fragments ");
+ if (FC_POWER_MGMT(fc))
+ ND_PRINT("Pwr Mgmt ");
+ if (FC_RETRY(fc))
+ ND_PRINT("Retry ");
+ if (FC_ORDER(fc))
+ ND_PRINT("Strictly Ordered ");
+ if (FC_PROTECTED(fc))
+ ND_PRINT("Protected ");
+ if (FC_TYPE(fc) != T_CTRL || FC_SUBTYPE(fc) != CTRL_PS_POLL)
+ ND_PRINT("%uus ",
+ GET_LE_U_2(((const struct mgmt_header_t *)p)->duration));
+ }
+ if (meshdrlen != 0) {
+ const struct meshcntl_t *mc =
+ (const struct meshcntl_t *)(p + hdrlen - meshdrlen);
+ u_int ae = GET_U_1(mc->flags) & 3;
+
+ ND_PRINT("MeshData (AE %u TTL %u seq %u", ae,
+ GET_U_1(mc->ttl), GET_LE_U_4(mc->seq));
+ if (ae > 0)
+ ND_PRINT(" A4:%s", GET_ETHERADDR_STRING(mc->addr4));
+ if (ae > 1)
+ ND_PRINT(" A5:%s", GET_ETHERADDR_STRING(mc->addr5));
+ if (ae > 2)
+ ND_PRINT(" A6:%s", GET_ETHERADDR_STRING(mc->addr6));
+ ND_PRINT(") ");
+ }
+
+ switch (FC_TYPE(fc)) {
+ case T_MGMT:
+ mgmt_header_print(ndo, p);
+ break;
+ case T_CTRL:
+ ctrl_header_print(ndo, fc, p);
+ break;
+ case T_DATA:
+ data_header_print(ndo, fc, p);
+ break;
+ default:
+ break;
+ }
+}
+
+static u_int
+ieee802_11_print(netdissect_options *ndo,
+ const u_char *p, u_int length, u_int orig_caplen, int pad,
+ u_int fcslen)
+{
+ uint16_t fc;
+ u_int caplen, hdrlen, meshdrlen;
+ struct lladdr_info src, dst;
+ int llc_hdrlen;
+
+ ndo->ndo_protocol = "802.11";
+ caplen = orig_caplen;
+ /* Remove FCS, if present */
+ if (length < fcslen) {
+ nd_print_trunc(ndo);
+ return caplen;
+ }
+ length -= fcslen;
+ if (caplen > length) {
+ /* Amount of FCS in actual packet data, if any */
+ fcslen = caplen - length;
+ caplen -= fcslen;
+ ndo->ndo_snapend -= fcslen;
+ }
+
+ if (caplen < IEEE802_11_FC_LEN) {
+ nd_print_trunc(ndo);
+ return orig_caplen;
+ }
+
+ fc = GET_LE_U_2(p);
+ hdrlen = extract_header_length(ndo, fc);
+ if (hdrlen == 0) {
+ /* Unknown frame type or control frame subtype; quit. */
+ return (0);
+ }
+ if (pad)
+ hdrlen = roundup2(hdrlen, 4);
+ if (ndo->ndo_Hflag && FC_TYPE(fc) == T_DATA &&
+ DATA_FRAME_IS_QOS(FC_SUBTYPE(fc))) {
+ if(!ND_TTEST_1(p + hdrlen)) {
+ nd_print_trunc(ndo);
+ return hdrlen;
+ }
+ meshdrlen = extract_mesh_header_length(ndo, p + hdrlen);
+ hdrlen += meshdrlen;
+ } else
+ meshdrlen = 0;
+
+ if (caplen < hdrlen) {
+ nd_print_trunc(ndo);
+ return hdrlen;
+ }
+
+ if (ndo->ndo_eflag)
+ ieee_802_11_hdr_print(ndo, fc, p, hdrlen, meshdrlen);
+
+ /*
+ * Go past the 802.11 header.
+ */
+ length -= hdrlen;
+ caplen -= hdrlen;
+ p += hdrlen;
+
+ src.addr_string = etheraddr_string;
+ dst.addr_string = etheraddr_string;
+ switch (FC_TYPE(fc)) {
+ case T_MGMT:
+ get_mgmt_src_dst_mac(p - hdrlen, &src.addr, &dst.addr);
+ if (!mgmt_body_print(ndo, fc, src.addr, p, length)) {
+ nd_print_trunc(ndo);
+ return hdrlen;
+ }
+ break;
+ case T_CTRL:
+ if (!ctrl_body_print(ndo, fc, p - hdrlen)) {
+ nd_print_trunc(ndo);
+ return hdrlen;
+ }
+ break;
+ case T_DATA:
+ if (DATA_FRAME_IS_NULL(FC_SUBTYPE(fc)))
+ return hdrlen; /* no-data frame */
+ /* There may be a problem w/ AP not having this bit set */
+ if (FC_PROTECTED(fc)) {
+ ND_PRINT("Data");
+ if (!wep_print(ndo, p)) {
+ nd_print_trunc(ndo);
+ return hdrlen;
+ }
+ } else {
+ get_data_src_dst_mac(fc, p - hdrlen, &src.addr, &dst.addr);
+ llc_hdrlen = llc_print(ndo, p, length, caplen, &src, &dst);
+ if (llc_hdrlen < 0) {
+ /*
+ * Some kinds of LLC packet we cannot
+ * handle intelligently
+ */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ llc_hdrlen = -llc_hdrlen;
+ }
+ hdrlen += llc_hdrlen;
+ }
+ break;
+ default:
+ /* We shouldn't get here - we should already have quit */
+ break;
+ }
+
+ return hdrlen;
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the 802.11 header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+ieee802_11_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ ndo->ndo_protocol = "802.11";
+ ndo->ndo_ll_hdr_len += ieee802_11_print(ndo, p, h->len, h->caplen, 0, 0);
+}
+
+
+/* $FreeBSD: src/sys/net80211/ieee80211_radiotap.h,v 1.5 2005/01/22 20:12:05 sam Exp $ */
+/* NetBSD: ieee802_11_radio.h,v 1.2 2006/02/26 03:04:03 dyoung Exp */
+
+/*-
+ * Copyright (c) 2003, 2004 David Young. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of David Young may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DAVID
+ * YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ */
+
+/* A generic radio capture format is desirable. It must be
+ * rigidly defined (e.g., units for fields should be given),
+ * and easily extensible.
+ *
+ * The following is an extensible radio capture format. It is
+ * based on a bitmap indicating which fields are present.
+ *
+ * I am trying to describe precisely what the application programmer
+ * should expect in the following, and for that reason I tell the
+ * units and origin of each measurement (where it applies), or else I
+ * use sufficiently weaselly language ("is a monotonically nondecreasing
+ * function of...") that I cannot set false expectations for lawyerly
+ * readers.
+ */
+
+/*
+ * The radio capture header precedes the 802.11 header.
+ *
+ * Note well: all radiotap fields are little-endian.
+ */
+struct ieee80211_radiotap_header {
+ nd_uint8_t it_version; /* Version 0. Only increases
+ * for drastic changes,
+ * introduction of compatible
+ * new fields does not count.
+ */
+ nd_uint8_t it_pad;
+ nd_uint16_t it_len; /* length of the whole
+ * header in bytes, including
+ * it_version, it_pad,
+ * it_len, and data fields.
+ */
+ nd_uint32_t it_present; /* A bitmap telling which
+ * fields are present. Set bit 31
+ * (0x80000000) to extend the
+ * bitmap by another 32 bits.
+ * Additional extensions are made
+ * by setting bit 31.
+ */
+};
+
+/* Name Data type Units
+ * ---- --------- -----
+ *
+ * IEEE80211_RADIOTAP_TSFT uint64_t microseconds
+ *
+ * Value in microseconds of the MAC's 64-bit 802.11 Time
+ * Synchronization Function timer when the first bit of the
+ * MPDU arrived at the MAC. For received frames, only.
+ *
+ * IEEE80211_RADIOTAP_CHANNEL 2 x uint16_t MHz, bitmap
+ *
+ * Tx/Rx frequency in MHz, followed by flags (see below).
+ * Note that IEEE80211_RADIOTAP_XCHANNEL must be used to
+ * represent an HT channel as there is not enough room in
+ * the flags word.
+ *
+ * IEEE80211_RADIOTAP_FHSS uint16_t see below
+ *
+ * For frequency-hopping radios, the hop set (first byte)
+ * and pattern (second byte).
+ *
+ * IEEE80211_RADIOTAP_RATE uint8_t 500kb/s or index
+ *
+ * Tx/Rx data rate. If bit 0x80 is set then it represents an
+ * an MCS index and not an IEEE rate.
+ *
+ * IEEE80211_RADIOTAP_DBM_ANTSIGNAL int8_t decibels from
+ * one milliwatt (dBm)
+ *
+ * RF signal power at the antenna, decibel difference from
+ * one milliwatt.
+ *
+ * IEEE80211_RADIOTAP_DBM_ANTNOISE int8_t decibels from
+ * one milliwatt (dBm)
+ *
+ * RF noise power at the antenna, decibel difference from one
+ * milliwatt.
+ *
+ * IEEE80211_RADIOTAP_DB_ANTSIGNAL uint8_t decibel (dB)
+ *
+ * RF signal power at the antenna, decibel difference from an
+ * arbitrary, fixed reference.
+ *
+ * IEEE80211_RADIOTAP_DB_ANTNOISE uint8_t decibel (dB)
+ *
+ * RF noise power at the antenna, decibel difference from an
+ * arbitrary, fixed reference point.
+ *
+ * IEEE80211_RADIOTAP_LOCK_QUALITY uint16_t unitless
+ *
+ * Quality of Barker code lock. Unitless. Monotonically
+ * nondecreasing with "better" lock strength. Called "Signal
+ * Quality" in datasheets. (Is there a standard way to measure
+ * this?)
+ *
+ * IEEE80211_RADIOTAP_TX_ATTENUATION uint16_t unitless
+ *
+ * Transmit power expressed as unitless distance from max
+ * power set at factory calibration. 0 is max power.
+ * Monotonically nondecreasing with lower power levels.
+ *
+ * IEEE80211_RADIOTAP_DB_TX_ATTENUATION uint16_t decibels (dB)
+ *
+ * Transmit power expressed as decibel distance from max power
+ * set at factory calibration. 0 is max power. Monotonically
+ * nondecreasing with lower power levels.
+ *
+ * IEEE80211_RADIOTAP_DBM_TX_POWER int8_t decibels from
+ * one milliwatt (dBm)
+ *
+ * Transmit power expressed as dBm (decibels from a 1 milliwatt
+ * reference). This is the absolute power level measured at
+ * the antenna port.
+ *
+ * IEEE80211_RADIOTAP_FLAGS uint8_t bitmap
+ *
+ * Properties of transmitted and received frames. See flags
+ * defined below.
+ *
+ * IEEE80211_RADIOTAP_ANTENNA uint8_t antenna index
+ *
+ * Unitless indication of the Rx/Tx antenna for this packet.
+ * The first antenna is antenna 0.
+ *
+ * IEEE80211_RADIOTAP_RX_FLAGS uint16_t bitmap
+ *
+ * Properties of received frames. See flags defined below.
+ *
+ * IEEE80211_RADIOTAP_XCHANNEL uint32_t bitmap
+ * uint16_t MHz
+ * uint8_t channel number
+ * uint8_t .5 dBm
+ *
+ * Extended channel specification: flags (see below) followed by
+ * frequency in MHz, the corresponding IEEE channel number, and
+ * finally the maximum regulatory transmit power cap in .5 dBm
+ * units. This property supersedes IEEE80211_RADIOTAP_CHANNEL
+ * and only one of the two should be present.
+ *
+ * IEEE80211_RADIOTAP_MCS uint8_t known
+ * uint8_t flags
+ * uint8_t mcs
+ *
+ * Bitset indicating which fields have known values, followed
+ * by bitset of flag values, followed by the MCS rate index as
+ * in IEEE 802.11n.
+ *
+ *
+ * IEEE80211_RADIOTAP_AMPDU_STATUS u32, u16, u8, u8 unitless
+ *
+ * Contains the AMPDU information for the subframe.
+ *
+ * IEEE80211_RADIOTAP_VHT u16, u8, u8, u8[4], u8, u8, u16
+ *
+ * Contains VHT information about this frame.
+ *
+ * IEEE80211_RADIOTAP_VENDOR_NAMESPACE
+ * uint8_t OUI[3]
+ * uint8_t subspace
+ * uint16_t length
+ *
+ * The Vendor Namespace Field contains three sub-fields. The first
+ * sub-field is 3 bytes long. It contains the vendor's IEEE 802
+ * Organizationally Unique Identifier (OUI). The fourth byte is a
+ * vendor-specific "namespace selector."
+ *
+ */
+enum ieee80211_radiotap_type {
+ IEEE80211_RADIOTAP_TSFT = 0,
+ IEEE80211_RADIOTAP_FLAGS = 1,
+ IEEE80211_RADIOTAP_RATE = 2,
+ IEEE80211_RADIOTAP_CHANNEL = 3,
+ IEEE80211_RADIOTAP_FHSS = 4,
+ IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
+ IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
+ IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
+ IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
+ IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
+ IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
+ IEEE80211_RADIOTAP_ANTENNA = 11,
+ IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
+ IEEE80211_RADIOTAP_DB_ANTNOISE = 13,
+ IEEE80211_RADIOTAP_RX_FLAGS = 14,
+ /* NB: gap for netbsd definitions */
+ IEEE80211_RADIOTAP_XCHANNEL = 18,
+ IEEE80211_RADIOTAP_MCS = 19,
+ IEEE80211_RADIOTAP_AMPDU_STATUS = 20,
+ IEEE80211_RADIOTAP_VHT = 21,
+ IEEE80211_RADIOTAP_NAMESPACE = 29,
+ IEEE80211_RADIOTAP_VENDOR_NAMESPACE = 30,
+ IEEE80211_RADIOTAP_EXT = 31
+};
+
+/* channel attributes */
+#define IEEE80211_CHAN_TURBO 0x00010 /* Turbo channel */
+#define IEEE80211_CHAN_CCK 0x00020 /* CCK channel */
+#define IEEE80211_CHAN_OFDM 0x00040 /* OFDM channel */
+#define IEEE80211_CHAN_2GHZ 0x00080 /* 2 GHz spectrum channel. */
+#define IEEE80211_CHAN_5GHZ 0x00100 /* 5 GHz spectrum channel */
+#define IEEE80211_CHAN_PASSIVE 0x00200 /* Only passive scan allowed */
+#define IEEE80211_CHAN_DYN 0x00400 /* Dynamic CCK-OFDM channel */
+#define IEEE80211_CHAN_GFSK 0x00800 /* GFSK channel (FHSS PHY) */
+#define IEEE80211_CHAN_GSM 0x01000 /* 900 MHz spectrum channel */
+#define IEEE80211_CHAN_STURBO 0x02000 /* 11a static turbo channel only */
+#define IEEE80211_CHAN_HALF 0x04000 /* Half rate channel */
+#define IEEE80211_CHAN_QUARTER 0x08000 /* Quarter rate channel */
+#define IEEE80211_CHAN_HT20 0x10000 /* HT 20 channel */
+#define IEEE80211_CHAN_HT40U 0x20000 /* HT 40 channel w/ ext above */
+#define IEEE80211_CHAN_HT40D 0x40000 /* HT 40 channel w/ ext below */
+
+/* Useful combinations of channel characteristics, borrowed from Ethereal */
+#define IEEE80211_CHAN_A \
+ (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
+#define IEEE80211_CHAN_B \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
+#define IEEE80211_CHAN_G \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
+#define IEEE80211_CHAN_TA \
+ (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
+#define IEEE80211_CHAN_TG \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN | IEEE80211_CHAN_TURBO)
+
+
+/* For IEEE80211_RADIOTAP_FLAGS */
+#define IEEE80211_RADIOTAP_F_CFP 0x01 /* sent/received
+ * during CFP
+ */
+#define IEEE80211_RADIOTAP_F_SHORTPRE 0x02 /* sent/received
+ * with short
+ * preamble
+ */
+#define IEEE80211_RADIOTAP_F_WEP 0x04 /* sent/received
+ * with WEP encryption
+ */
+#define IEEE80211_RADIOTAP_F_FRAG 0x08 /* sent/received
+ * with fragmentation
+ */
+#define IEEE80211_RADIOTAP_F_FCS 0x10 /* frame includes FCS */
+#define IEEE80211_RADIOTAP_F_DATAPAD 0x20 /* frame has padding between
+ * 802.11 header and payload
+ * (to 32-bit boundary)
+ */
+#define IEEE80211_RADIOTAP_F_BADFCS 0x40 /* does not pass FCS check */
+
+/* For IEEE80211_RADIOTAP_RX_FLAGS */
+#define IEEE80211_RADIOTAP_F_RX_BADFCS 0x0001 /* frame failed crc check */
+#define IEEE80211_RADIOTAP_F_RX_PLCP_CRC 0x0002 /* frame failed PLCP CRC check */
+
+/* For IEEE80211_RADIOTAP_MCS known */
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_KNOWN 0x01
+#define IEEE80211_RADIOTAP_MCS_MCS_INDEX_KNOWN 0x02 /* MCS index field */
+#define IEEE80211_RADIOTAP_MCS_GUARD_INTERVAL_KNOWN 0x04
+#define IEEE80211_RADIOTAP_MCS_HT_FORMAT_KNOWN 0x08
+#define IEEE80211_RADIOTAP_MCS_FEC_TYPE_KNOWN 0x10
+#define IEEE80211_RADIOTAP_MCS_STBC_KNOWN 0x20
+#define IEEE80211_RADIOTAP_MCS_NESS_KNOWN 0x40
+#define IEEE80211_RADIOTAP_MCS_NESS_BIT_1 0x80
+
+/* For IEEE80211_RADIOTAP_MCS flags */
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_MASK 0x03
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_20 0
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_40 1
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_20L 2
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_20U 3
+#define IEEE80211_RADIOTAP_MCS_SHORT_GI 0x04 /* short guard interval */
+#define IEEE80211_RADIOTAP_MCS_HT_GREENFIELD 0x08
+#define IEEE80211_RADIOTAP_MCS_FEC_LDPC 0x10
+#define IEEE80211_RADIOTAP_MCS_STBC_MASK 0x60
+#define IEEE80211_RADIOTAP_MCS_STBC_1 1
+#define IEEE80211_RADIOTAP_MCS_STBC_2 2
+#define IEEE80211_RADIOTAP_MCS_STBC_3 3
+#define IEEE80211_RADIOTAP_MCS_STBC_SHIFT 5
+#define IEEE80211_RADIOTAP_MCS_NESS_BIT_0 0x80
+
+/* For IEEE80211_RADIOTAP_AMPDU_STATUS */
+#define IEEE80211_RADIOTAP_AMPDU_REPORT_ZEROLEN 0x0001
+#define IEEE80211_RADIOTAP_AMPDU_IS_ZEROLEN 0x0002
+#define IEEE80211_RADIOTAP_AMPDU_LAST_KNOWN 0x0004
+#define IEEE80211_RADIOTAP_AMPDU_IS_LAST 0x0008
+#define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR 0x0010
+#define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN 0x0020
+
+/* For IEEE80211_RADIOTAP_VHT known */
+#define IEEE80211_RADIOTAP_VHT_STBC_KNOWN 0x0001
+#define IEEE80211_RADIOTAP_VHT_TXOP_PS_NA_KNOWN 0x0002
+#define IEEE80211_RADIOTAP_VHT_GUARD_INTERVAL_KNOWN 0x0004
+#define IEEE80211_RADIOTAP_VHT_SGI_NSYM_DIS_KNOWN 0x0008
+#define IEEE80211_RADIOTAP_VHT_LDPC_EXTRA_OFDM_SYM_KNOWN 0x0010
+#define IEEE80211_RADIOTAP_VHT_BEAMFORMED_KNOWN 0x0020
+#define IEEE80211_RADIOTAP_VHT_BANDWIDTH_KNOWN 0x0040
+#define IEEE80211_RADIOTAP_VHT_GROUP_ID_KNOWN 0x0080
+#define IEEE80211_RADIOTAP_VHT_PARTIAL_AID_KNOWN 0x0100
+
+/* For IEEE80211_RADIOTAP_VHT flags */
+#define IEEE80211_RADIOTAP_VHT_STBC 0x01
+#define IEEE80211_RADIOTAP_VHT_TXOP_PS_NA 0x02
+#define IEEE80211_RADIOTAP_VHT_SHORT_GI 0x04
+#define IEEE80211_RADIOTAP_VHT_SGI_NSYM_M10_9 0x08
+#define IEEE80211_RADIOTAP_VHT_LDPC_EXTRA_OFDM_SYM 0x10
+#define IEEE80211_RADIOTAP_VHT_BEAMFORMED 0x20
+
+#define IEEE80211_RADIOTAP_VHT_BANDWIDTH_MASK 0x1f
+
+#define IEEE80211_RADIOTAP_VHT_NSS_MASK 0x0f
+#define IEEE80211_RADIOTAP_VHT_MCS_MASK 0xf0
+#define IEEE80211_RADIOTAP_VHT_MCS_SHIFT 4
+
+#define IEEE80211_RADIOTAP_CODING_LDPC_USERn 0x01
+
+#define IEEE80211_CHAN_FHSS \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_GFSK)
+#define IEEE80211_CHAN_A \
+ (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
+#define IEEE80211_CHAN_B \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
+#define IEEE80211_CHAN_PUREG \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM)
+#define IEEE80211_CHAN_G \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
+
+#define IS_CHAN_FHSS(flags) \
+ ((flags & IEEE80211_CHAN_FHSS) == IEEE80211_CHAN_FHSS)
+#define IS_CHAN_A(flags) \
+ ((flags & IEEE80211_CHAN_A) == IEEE80211_CHAN_A)
+#define IS_CHAN_B(flags) \
+ ((flags & IEEE80211_CHAN_B) == IEEE80211_CHAN_B)
+#define IS_CHAN_PUREG(flags) \
+ ((flags & IEEE80211_CHAN_PUREG) == IEEE80211_CHAN_PUREG)
+#define IS_CHAN_G(flags) \
+ ((flags & IEEE80211_CHAN_G) == IEEE80211_CHAN_G)
+#define IS_CHAN_ANYG(flags) \
+ (IS_CHAN_PUREG(flags) || IS_CHAN_G(flags))
+
+static void
+print_chaninfo(netdissect_options *ndo,
+ uint16_t freq, uint32_t flags, uint32_t presentflags)
+{
+ ND_PRINT("%u MHz", freq);
+ if (presentflags & (1 << IEEE80211_RADIOTAP_MCS)) {
+ /*
+ * We have the MCS field, so this is 11n, regardless
+ * of what the channel flags say.
+ */
+ ND_PRINT(" 11n");
+ } else {
+ if (IS_CHAN_FHSS(flags))
+ ND_PRINT(" FHSS");
+ if (IS_CHAN_A(flags)) {
+ if (flags & IEEE80211_CHAN_HALF)
+ ND_PRINT(" 11a/10Mhz");
+ else if (flags & IEEE80211_CHAN_QUARTER)
+ ND_PRINT(" 11a/5Mhz");
+ else
+ ND_PRINT(" 11a");
+ }
+ if (IS_CHAN_ANYG(flags)) {
+ if (flags & IEEE80211_CHAN_HALF)
+ ND_PRINT(" 11g/10Mhz");
+ else if (flags & IEEE80211_CHAN_QUARTER)
+ ND_PRINT(" 11g/5Mhz");
+ else
+ ND_PRINT(" 11g");
+ } else if (IS_CHAN_B(flags))
+ ND_PRINT(" 11b");
+ if (flags & IEEE80211_CHAN_TURBO)
+ ND_PRINT(" Turbo");
+ }
+ /*
+ * These apply to 11n.
+ */
+ if (flags & IEEE80211_CHAN_HT20)
+ ND_PRINT(" ht/20");
+ else if (flags & IEEE80211_CHAN_HT40D)
+ ND_PRINT(" ht/40-");
+ else if (flags & IEEE80211_CHAN_HT40U)
+ ND_PRINT(" ht/40+");
+ ND_PRINT(" ");
+}
+
+static int
+print_radiotap_field(netdissect_options *ndo,
+ struct cpack_state *s, uint32_t bit, uint8_t *flagsp,
+ uint32_t presentflags)
+{
+ u_int i;
+ int rc;
+
+ switch (bit) {
+
+ case IEEE80211_RADIOTAP_TSFT: {
+ uint64_t tsft;
+
+ rc = nd_cpack_uint64(ndo, s, &tsft);
+ if (rc != 0)
+ goto trunc;
+ ND_PRINT("%" PRIu64 "us tsft ", tsft);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_FLAGS: {
+ uint8_t flagsval;
+
+ rc = nd_cpack_uint8(ndo, s, &flagsval);
+ if (rc != 0)
+ goto trunc;
+ *flagsp = flagsval;
+ if (flagsval & IEEE80211_RADIOTAP_F_CFP)
+ ND_PRINT("cfp ");
+ if (flagsval & IEEE80211_RADIOTAP_F_SHORTPRE)
+ ND_PRINT("short preamble ");
+ if (flagsval & IEEE80211_RADIOTAP_F_WEP)
+ ND_PRINT("wep ");
+ if (flagsval & IEEE80211_RADIOTAP_F_FRAG)
+ ND_PRINT("fragmented ");
+ if (flagsval & IEEE80211_RADIOTAP_F_BADFCS)
+ ND_PRINT("bad-fcs ");
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_RATE: {
+ uint8_t rate;
+
+ rc = nd_cpack_uint8(ndo, s, &rate);
+ if (rc != 0)
+ goto trunc;
+ /*
+ * XXX On FreeBSD rate & 0x80 means we have an MCS. On
+ * Linux and AirPcap it does not. (What about
+ * macOS, NetBSD, OpenBSD, and DragonFly BSD?)
+ *
+ * This is an issue either for proprietary extensions
+ * to 11a or 11g, which do exist, or for 11n
+ * implementations that stuff a rate value into
+ * this field, which also appear to exist.
+ *
+ * We currently handle that by assuming that
+ * if the 0x80 bit is set *and* the remaining
+ * bits have a value between 0 and 15 it's
+ * an MCS value, otherwise it's a rate. If
+ * there are cases where systems that use
+ * "0x80 + MCS index" for MCS indices > 15,
+ * or stuff a rate value here between 64 and
+ * 71.5 Mb/s in here, we'll need a preference
+ * setting. Such rates do exist, e.g. 11n
+ * MCS 7 at 20 MHz with a long guard interval.
+ */
+ if (rate >= 0x80 && rate <= 0x8f) {
+ /*
+ * XXX - we don't know the channel width
+ * or guard interval length, so we can't
+ * convert this to a data rate.
+ *
+ * If you want us to show a data rate,
+ * use the MCS field, not the Rate field;
+ * the MCS field includes not only the
+ * MCS index, it also includes bandwidth
+ * and guard interval information.
+ *
+ * XXX - can we get the channel width
+ * from XChannel and the guard interval
+ * information from Flags, at least on
+ * FreeBSD?
+ */
+ ND_PRINT("MCS %u ", rate & 0x7f);
+ } else
+ ND_PRINT("%2.1f Mb/s ", .5 * rate);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_CHANNEL: {
+ uint16_t frequency;
+ uint16_t flags;
+
+ rc = nd_cpack_uint16(ndo, s, &frequency);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint16(ndo, s, &flags);
+ if (rc != 0)
+ goto trunc;
+ /*
+ * If CHANNEL and XCHANNEL are both present, skip
+ * CHANNEL.
+ */
+ if (presentflags & (1 << IEEE80211_RADIOTAP_XCHANNEL))
+ break;
+ print_chaninfo(ndo, frequency, flags, presentflags);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_FHSS: {
+ uint8_t hopset;
+ uint8_t hoppat;
+
+ rc = nd_cpack_uint8(ndo, s, &hopset);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint8(ndo, s, &hoppat);
+ if (rc != 0)
+ goto trunc;
+ ND_PRINT("fhset %u fhpat %u ", hopset, hoppat);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_DBM_ANTSIGNAL: {
+ int8_t dbm_antsignal;
+
+ rc = nd_cpack_int8(ndo, s, &dbm_antsignal);
+ if (rc != 0)
+ goto trunc;
+ ND_PRINT("%ddBm signal ", dbm_antsignal);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_DBM_ANTNOISE: {
+ int8_t dbm_antnoise;
+
+ rc = nd_cpack_int8(ndo, s, &dbm_antnoise);
+ if (rc != 0)
+ goto trunc;
+ ND_PRINT("%ddBm noise ", dbm_antnoise);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_LOCK_QUALITY: {
+ uint16_t lock_quality;
+
+ rc = nd_cpack_uint16(ndo, s, &lock_quality);
+ if (rc != 0)
+ goto trunc;
+ ND_PRINT("%u sq ", lock_quality);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_TX_ATTENUATION: {
+ int16_t tx_attenuation;
+
+ rc = nd_cpack_int16(ndo, s, &tx_attenuation);
+ if (rc != 0)
+ goto trunc;
+ ND_PRINT("%d tx power ", -tx_attenuation);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_DB_TX_ATTENUATION: {
+ int8_t db_tx_attenuation;
+
+ rc = nd_cpack_int8(ndo, s, &db_tx_attenuation);
+ if (rc != 0)
+ goto trunc;
+ ND_PRINT("%ddB tx attenuation ", -db_tx_attenuation);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_DBM_TX_POWER: {
+ int8_t dbm_tx_power;
+
+ rc = nd_cpack_int8(ndo, s, &dbm_tx_power);
+ if (rc != 0)
+ goto trunc;
+ ND_PRINT("%ddBm tx power ", dbm_tx_power);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_ANTENNA: {
+ uint8_t antenna;
+
+ rc = nd_cpack_uint8(ndo, s, &antenna);
+ if (rc != 0)
+ goto trunc;
+ ND_PRINT("antenna %u ", antenna);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_DB_ANTSIGNAL: {
+ uint8_t db_antsignal;
+
+ rc = nd_cpack_uint8(ndo, s, &db_antsignal);
+ if (rc != 0)
+ goto trunc;
+ ND_PRINT("%udB signal ", db_antsignal);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_DB_ANTNOISE: {
+ uint8_t db_antnoise;
+
+ rc = nd_cpack_uint8(ndo, s, &db_antnoise);
+ if (rc != 0)
+ goto trunc;
+ ND_PRINT("%udB noise ", db_antnoise);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_RX_FLAGS: {
+ uint16_t rx_flags;
+
+ rc = nd_cpack_uint16(ndo, s, &rx_flags);
+ if (rc != 0)
+ goto trunc;
+ /* Do nothing for now */
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_XCHANNEL: {
+ uint32_t flags;
+ uint16_t frequency;
+ uint8_t channel;
+ uint8_t maxpower;
+
+ rc = nd_cpack_uint32(ndo, s, &flags);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint16(ndo, s, &frequency);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint8(ndo, s, &channel);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint8(ndo, s, &maxpower);
+ if (rc != 0)
+ goto trunc;
+ print_chaninfo(ndo, frequency, flags, presentflags);
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_MCS: {
+ uint8_t known;
+ uint8_t flags;
+ uint8_t mcs_index;
+ static const char *ht_bandwidth[4] = {
+ "20 MHz",
+ "40 MHz",
+ "20 MHz (L)",
+ "20 MHz (U)"
+ };
+ float htrate;
+
+ rc = nd_cpack_uint8(ndo, s, &known);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint8(ndo, s, &flags);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint8(ndo, s, &mcs_index);
+ if (rc != 0)
+ goto trunc;
+ if (known & IEEE80211_RADIOTAP_MCS_MCS_INDEX_KNOWN) {
+ /*
+ * We know the MCS index.
+ */
+ if (mcs_index <= MAX_MCS_INDEX) {
+ /*
+ * And it's in-range.
+ */
+ if (known & (IEEE80211_RADIOTAP_MCS_BANDWIDTH_KNOWN|IEEE80211_RADIOTAP_MCS_GUARD_INTERVAL_KNOWN)) {
+ /*
+ * And we know both the bandwidth and
+ * the guard interval, so we can look
+ * up the rate.
+ */
+ htrate =
+ ieee80211_float_htrates
+ [mcs_index]
+ [((flags & IEEE80211_RADIOTAP_MCS_BANDWIDTH_MASK) == IEEE80211_RADIOTAP_MCS_BANDWIDTH_40 ? 1 : 0)]
+ [((flags & IEEE80211_RADIOTAP_MCS_SHORT_GI) ? 1 : 0)];
+ } else {
+ /*
+ * We don't know both the bandwidth
+ * and the guard interval, so we can
+ * only report the MCS index.
+ */
+ htrate = 0.0;
+ }
+ } else {
+ /*
+ * The MCS value is out of range.
+ */
+ htrate = 0.0;
+ }
+ if (htrate != 0.0) {
+ /*
+ * We have the rate.
+ * Print it.
+ */
+ ND_PRINT("%.1f Mb/s MCS %u ", htrate, mcs_index);
+ } else {
+ /*
+ * We at least have the MCS index.
+ * Print it.
+ */
+ ND_PRINT("MCS %u ", mcs_index);
+ }
+ }
+ if (known & IEEE80211_RADIOTAP_MCS_BANDWIDTH_KNOWN) {
+ ND_PRINT("%s ",
+ ht_bandwidth[flags & IEEE80211_RADIOTAP_MCS_BANDWIDTH_MASK]);
+ }
+ if (known & IEEE80211_RADIOTAP_MCS_GUARD_INTERVAL_KNOWN) {
+ ND_PRINT("%s GI ",
+ (flags & IEEE80211_RADIOTAP_MCS_SHORT_GI) ?
+ "short" : "long");
+ }
+ if (known & IEEE80211_RADIOTAP_MCS_HT_FORMAT_KNOWN) {
+ ND_PRINT("%s ",
+ (flags & IEEE80211_RADIOTAP_MCS_HT_GREENFIELD) ?
+ "greenfield" : "mixed");
+ }
+ if (known & IEEE80211_RADIOTAP_MCS_FEC_TYPE_KNOWN) {
+ ND_PRINT("%s FEC ",
+ (flags & IEEE80211_RADIOTAP_MCS_FEC_LDPC) ?
+ "LDPC" : "BCC");
+ }
+ if (known & IEEE80211_RADIOTAP_MCS_STBC_KNOWN) {
+ ND_PRINT("RX-STBC%u ",
+ (flags & IEEE80211_RADIOTAP_MCS_STBC_MASK) >> IEEE80211_RADIOTAP_MCS_STBC_SHIFT);
+ }
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_AMPDU_STATUS: {
+ uint32_t reference_num;
+ uint16_t flags;
+ uint8_t delim_crc;
+ uint8_t reserved;
+
+ rc = nd_cpack_uint32(ndo, s, &reference_num);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint16(ndo, s, &flags);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint8(ndo, s, &delim_crc);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint8(ndo, s, &reserved);
+ if (rc != 0)
+ goto trunc;
+ /* Do nothing for now */
+ break;
+ }
+
+ case IEEE80211_RADIOTAP_VHT: {
+ uint16_t known;
+ uint8_t flags;
+ uint8_t bandwidth;
+ uint8_t mcs_nss[4];
+ uint8_t coding;
+ uint8_t group_id;
+ uint16_t partial_aid;
+ static const char *vht_bandwidth[32] = {
+ "20 MHz",
+ "40 MHz",
+ "20 MHz (L)",
+ "20 MHz (U)",
+ "80 MHz",
+ "80 MHz (L)",
+ "80 MHz (U)",
+ "80 MHz (LL)",
+ "80 MHz (LU)",
+ "80 MHz (UL)",
+ "80 MHz (UU)",
+ "160 MHz",
+ "160 MHz (L)",
+ "160 MHz (U)",
+ "160 MHz (LL)",
+ "160 MHz (LU)",
+ "160 MHz (UL)",
+ "160 MHz (UU)",
+ "160 MHz (LLL)",
+ "160 MHz (LLU)",
+ "160 MHz (LUL)",
+ "160 MHz (UUU)",
+ "160 MHz (ULL)",
+ "160 MHz (ULU)",
+ "160 MHz (UUL)",
+ "160 MHz (UUU)",
+ "unknown (26)",
+ "unknown (27)",
+ "unknown (28)",
+ "unknown (29)",
+ "unknown (30)",
+ "unknown (31)"
+ };
+
+ rc = nd_cpack_uint16(ndo, s, &known);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint8(ndo, s, &flags);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint8(ndo, s, &bandwidth);
+ if (rc != 0)
+ goto trunc;
+ for (i = 0; i < 4; i++) {
+ rc = nd_cpack_uint8(ndo, s, &mcs_nss[i]);
+ if (rc != 0)
+ goto trunc;
+ }
+ rc = nd_cpack_uint8(ndo, s, &coding);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint8(ndo, s, &group_id);
+ if (rc != 0)
+ goto trunc;
+ rc = nd_cpack_uint16(ndo, s, &partial_aid);
+ if (rc != 0)
+ goto trunc;
+ for (i = 0; i < 4; i++) {
+ u_int nss, mcs;
+ nss = mcs_nss[i] & IEEE80211_RADIOTAP_VHT_NSS_MASK;
+ mcs = (mcs_nss[i] & IEEE80211_RADIOTAP_VHT_MCS_MASK) >> IEEE80211_RADIOTAP_VHT_MCS_SHIFT;
+
+ if (nss == 0)
+ continue;
+
+ ND_PRINT("User %u MCS %u ", i, mcs);
+ ND_PRINT("%s FEC ",
+ (coding & (IEEE80211_RADIOTAP_CODING_LDPC_USERn << i)) ?
+ "LDPC" : "BCC");
+ }
+ if (known & IEEE80211_RADIOTAP_VHT_BANDWIDTH_KNOWN) {
+ ND_PRINT("%s ",
+ vht_bandwidth[bandwidth & IEEE80211_RADIOTAP_VHT_BANDWIDTH_MASK]);
+ }
+ if (known & IEEE80211_RADIOTAP_VHT_GUARD_INTERVAL_KNOWN) {
+ ND_PRINT("%s GI ",
+ (flags & IEEE80211_RADIOTAP_VHT_SHORT_GI) ?
+ "short" : "long");
+ }
+ break;
+ }
+
+ default:
+ /* this bit indicates a field whose
+ * size we do not know, so we cannot
+ * proceed. Just print the bit number.
+ */
+ ND_PRINT("[bit %u] ", bit);
+ return -1;
+ }
+
+ return 0;
+
+trunc:
+ nd_print_trunc(ndo);
+ return rc;
+}
+
+
+static int
+print_in_radiotap_namespace(netdissect_options *ndo,
+ struct cpack_state *s, uint8_t *flags,
+ uint32_t presentflags, int bit0)
+{
+#define BITNO_32(x) (((x) >> 16) ? 16 + BITNO_16((x) >> 16) : BITNO_16((x)))
+#define BITNO_16(x) (((x) >> 8) ? 8 + BITNO_8((x) >> 8) : BITNO_8((x)))
+#define BITNO_8(x) (((x) >> 4) ? 4 + BITNO_4((x) >> 4) : BITNO_4((x)))
+#define BITNO_4(x) (((x) >> 2) ? 2 + BITNO_2((x) >> 2) : BITNO_2((x)))
+#define BITNO_2(x) (((x) & 2) ? 1 : 0)
+ uint32_t present, next_present;
+ int bitno;
+ enum ieee80211_radiotap_type bit;
+ int rc;
+
+ for (present = presentflags; present; present = next_present) {
+ /*
+ * Clear the least significant bit that is set.
+ */
+ next_present = present & (present - 1);
+
+ /*
+ * Get the bit number, within this presence word,
+ * of the remaining least significant bit that
+ * is set.
+ */
+ bitno = BITNO_32(present ^ next_present);
+
+ /*
+ * Stop if this is one of the "same meaning
+ * in all presence flags" bits.
+ */
+ if (bitno >= IEEE80211_RADIOTAP_NAMESPACE)
+ break;
+
+ /*
+ * Get the radiotap bit number of that bit.
+ */
+ bit = (enum ieee80211_radiotap_type)(bit0 + bitno);
+
+ rc = print_radiotap_field(ndo, s, bit, flags, presentflags);
+ if (rc != 0)
+ return rc;
+ }
+
+ return 0;
+}
+
+u_int
+ieee802_11_radio_print(netdissect_options *ndo,
+ const u_char *p, u_int length, u_int caplen)
+{
+#define BIT(n) (1U << n)
+#define IS_EXTENDED(__p) \
+ (GET_LE_U_4(__p) & BIT(IEEE80211_RADIOTAP_EXT)) != 0
+
+ struct cpack_state cpacker;
+ const struct ieee80211_radiotap_header *hdr;
+ uint32_t presentflags;
+ const nd_uint32_t *presentp, *last_presentp;
+ int vendor_namespace;
+ uint8_t vendor_oui[3];
+ uint8_t vendor_subnamespace;
+ uint16_t skip_length;
+ int bit0;
+ u_int len;
+ uint8_t flags;
+ int pad;
+ u_int fcslen;
+
+ ndo->ndo_protocol = "802.11_radio";
+ if (caplen < sizeof(*hdr)) {
+ nd_print_trunc(ndo);
+ return caplen;
+ }
+
+ hdr = (const struct ieee80211_radiotap_header *)p;
+
+ len = GET_LE_U_2(hdr->it_len);
+ if (len < sizeof(*hdr)) {
+ /*
+ * The length is the length of the entire header, so
+ * it must be as large as the fixed-length part of
+ * the header.
+ */
+ nd_print_trunc(ndo);
+ return caplen;
+ }
+
+ /*
+ * If we don't have the entire radiotap header, just give up.
+ */
+ if (caplen < len) {
+ nd_print_trunc(ndo);
+ return caplen;
+ }
+ nd_cpack_init(&cpacker, (const uint8_t *)hdr, len); /* align against header start */
+ nd_cpack_advance(&cpacker, sizeof(*hdr)); /* includes the 1st bitmap */
+ for (last_presentp = &hdr->it_present;
+ (const u_char*)(last_presentp + 1) <= p + len &&
+ IS_EXTENDED(last_presentp);
+ last_presentp++)
+ nd_cpack_advance(&cpacker, sizeof(hdr->it_present)); /* more bitmaps */
+
+ /* are there more bitmap extensions than bytes in header? */
+ if ((const u_char*)(last_presentp + 1) > p + len) {
+ nd_print_trunc(ndo);
+ return caplen;
+ }
+
+ /*
+ * Start out at the beginning of the default radiotap namespace.
+ */
+ bit0 = 0;
+ vendor_namespace = 0;
+ memset(vendor_oui, 0, 3);
+ vendor_subnamespace = 0;
+ skip_length = 0;
+ /* Assume no flags */
+ flags = 0;
+ /* Assume no Atheros padding between 802.11 header and body */
+ pad = 0;
+ /* Assume no FCS at end of frame */
+ fcslen = 0;
+ for (presentp = &hdr->it_present; presentp <= last_presentp;
+ presentp++) {
+ presentflags = GET_LE_U_4(presentp);
+
+ /*
+ * If this is a vendor namespace, we don't handle it.
+ */
+ if (vendor_namespace) {
+ /*
+ * Skip past the stuff we don't understand.
+ * If we add support for any vendor namespaces,
+ * it'd be added here; use vendor_oui and
+ * vendor_subnamespace to interpret the fields.
+ */
+ if (nd_cpack_advance(&cpacker, skip_length) != 0) {
+ /*
+ * Ran out of space in the packet.
+ */
+ break;
+ }
+
+ /*
+ * We've skipped it all; nothing more to
+ * skip.
+ */
+ skip_length = 0;
+ } else {
+ if (print_in_radiotap_namespace(ndo, &cpacker,
+ &flags, presentflags, bit0) != 0) {
+ /*
+ * Fatal error - can't process anything
+ * more in the radiotap header.
+ */
+ break;
+ }
+ }
+
+ /*
+ * Handle the namespace switch bits; we've already handled
+ * the extension bit in all but the last word above.
+ */
+ switch (presentflags &
+ (BIT(IEEE80211_RADIOTAP_NAMESPACE)|BIT(IEEE80211_RADIOTAP_VENDOR_NAMESPACE))) {
+
+ case 0:
+ /*
+ * We're not changing namespaces.
+ * advance to the next 32 bits in the current
+ * namespace.
+ */
+ bit0 += 32;
+ break;
+
+ case BIT(IEEE80211_RADIOTAP_NAMESPACE):
+ /*
+ * We're switching to the radiotap namespace.
+ * Reset the presence-bitmap index to 0, and
+ * reset the namespace to the default radiotap
+ * namespace.
+ */
+ bit0 = 0;
+ vendor_namespace = 0;
+ memset(vendor_oui, 0, 3);
+ vendor_subnamespace = 0;
+ skip_length = 0;
+ break;
+
+ case BIT(IEEE80211_RADIOTAP_VENDOR_NAMESPACE):
+ /*
+ * We're switching to a vendor namespace.
+ * Reset the presence-bitmap index to 0,
+ * note that we're in a vendor namespace,
+ * and fetch the fields of the Vendor Namespace
+ * item.
+ */
+ bit0 = 0;
+ vendor_namespace = 1;
+ if ((nd_cpack_align_and_reserve(&cpacker, 2)) == NULL) {
+ nd_print_trunc(ndo);
+ break;
+ }
+ if (nd_cpack_uint8(ndo, &cpacker, &vendor_oui[0]) != 0) {
+ nd_print_trunc(ndo);
+ break;
+ }
+ if (nd_cpack_uint8(ndo, &cpacker, &vendor_oui[1]) != 0) {
+ nd_print_trunc(ndo);
+ break;
+ }
+ if (nd_cpack_uint8(ndo, &cpacker, &vendor_oui[2]) != 0) {
+ nd_print_trunc(ndo);
+ break;
+ }
+ if (nd_cpack_uint8(ndo, &cpacker, &vendor_subnamespace) != 0) {
+ nd_print_trunc(ndo);
+ break;
+ }
+ if (nd_cpack_uint16(ndo, &cpacker, &skip_length) != 0) {
+ nd_print_trunc(ndo);
+ break;
+ }
+ break;
+
+ default:
+ /*
+ * Illegal combination. The behavior in this
+ * case is undefined by the radiotap spec; we
+ * just ignore both bits.
+ */
+ break;
+ }
+ }
+
+ if (flags & IEEE80211_RADIOTAP_F_DATAPAD)
+ pad = 1; /* Atheros padding */
+ if (flags & IEEE80211_RADIOTAP_F_FCS)
+ fcslen = 4; /* FCS at end of packet */
+ return len + ieee802_11_print(ndo, p + len, length - len, caplen - len, pad,
+ fcslen);
+#undef BITNO_32
+#undef BITNO_16
+#undef BITNO_8
+#undef BITNO_4
+#undef BITNO_2
+#undef BIT
+}
+
+static u_int
+ieee802_11_radio_avs_print(netdissect_options *ndo,
+ const u_char *p, u_int length, u_int caplen)
+{
+ uint32_t caphdr_len;
+
+ ndo->ndo_protocol = "802.11_radio_avs";
+ if (caplen < 8) {
+ nd_print_trunc(ndo);
+ return caplen;
+ }
+
+ caphdr_len = GET_BE_U_4(p + 4);
+ if (caphdr_len < 8) {
+ /*
+ * Yow! The capture header length is claimed not
+ * to be large enough to include even the version
+ * cookie or capture header length!
+ */
+ nd_print_trunc(ndo);
+ return caplen;
+ }
+
+ if (caplen < caphdr_len) {
+ nd_print_trunc(ndo);
+ return caplen;
+ }
+
+ return caphdr_len + ieee802_11_print(ndo, p + caphdr_len,
+ length - caphdr_len, caplen - caphdr_len, 0, 0);
+}
+
+#define PRISM_HDR_LEN 144
+
+#define WLANCAP_MAGIC_COOKIE_BASE 0x80211000
+#define WLANCAP_MAGIC_COOKIE_V1 0x80211001
+#define WLANCAP_MAGIC_COOKIE_V2 0x80211002
+
+/*
+ * For DLT_PRISM_HEADER; like DLT_IEEE802_11, but with an extra header,
+ * containing information such as radio information, which we
+ * currently ignore.
+ *
+ * If, however, the packet begins with WLANCAP_MAGIC_COOKIE_V1 or
+ * WLANCAP_MAGIC_COOKIE_V2, it's really DLT_IEEE802_11_RADIO_AVS
+ * (currently, on Linux, there's no ARPHRD_ type for
+ * DLT_IEEE802_11_RADIO_AVS, as there is a ARPHRD_IEEE80211_PRISM
+ * for DLT_PRISM_HEADER, so ARPHRD_IEEE80211_PRISM is used for
+ * the AVS header, and the first 4 bytes of the header are used to
+ * indicate whether it's a Prism header or an AVS header).
+ */
+void
+prism_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+ uint32_t msgcode;
+
+ ndo->ndo_protocol = "prism";
+ if (caplen < 4) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+
+ msgcode = GET_BE_U_4(p);
+ if (msgcode == WLANCAP_MAGIC_COOKIE_V1 ||
+ msgcode == WLANCAP_MAGIC_COOKIE_V2) {
+ ndo->ndo_ll_hdr_len += ieee802_11_radio_avs_print(ndo, p, length, caplen);
+ return;
+ }
+
+ if (caplen < PRISM_HDR_LEN) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+
+ p += PRISM_HDR_LEN;
+ length -= PRISM_HDR_LEN;
+ caplen -= PRISM_HDR_LEN;
+ ndo->ndo_ll_hdr_len += PRISM_HDR_LEN;
+ ndo->ndo_ll_hdr_len += ieee802_11_print(ndo, p, length, caplen, 0, 0);
+}
+
+/*
+ * For DLT_IEEE802_11_RADIO; like DLT_IEEE802_11, but with an extra
+ * header, containing information such as radio information.
+ */
+void
+ieee802_11_radio_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ ndo->ndo_protocol = "802.11_radio";
+ ndo->ndo_ll_hdr_len += ieee802_11_radio_print(ndo, p, h->len, h->caplen);
+}
+
+/*
+ * For DLT_IEEE802_11_RADIO_AVS; like DLT_IEEE802_11, but with an
+ * extra header, containing information such as radio information,
+ * which we currently ignore.
+ */
+void
+ieee802_11_radio_avs_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ ndo->ndo_protocol = "802.11_radio_avs";
+ ndo->ndo_ll_hdr_len += ieee802_11_radio_avs_print(ndo, p, h->len, h->caplen);
+}
diff --git a/print-802_15_4.c b/print-802_15_4.c
new file mode 100644
index 0000000..fd75b15
--- /dev/null
+++ b/print-802_15_4.c
@@ -0,0 +1,2556 @@
+/*
+ * Copyright (c) 2009
+ * Siemens AG, All rights reserved.
+ * Dmitry Eremin-Solenikov (dbaryshkov@gmail.com)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IEEE 802.15.4 printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+
+#include "extract.h"
+
+#define CHECK_BIT(num,bit) (((num) >> (bit)) & 0x1)
+
+#define BROKEN_6TISCH_PAN_ID_COMPRESSION 0
+
+/* Frame types from Table 7-1 of 802.15.4-2015 */
+static const char *ftypes[] = {
+ "Beacon", /* 0 */
+ "Data", /* 1 */
+ "ACK", /* 2 */
+ "Command", /* 3 */
+ "Reserved", /* 4 */
+ "Multipurpose", /* 5 */
+ "Fragment", /* 6 */
+ "Extended" /* 7 */
+};
+
+/* Element IDs for Header IEs from Table 7-7 of 802.15.4-2015 */
+static const char *h_ie_names[] = {
+ "Vendor Specific Header IE", /* 0x00 */
+ "Reserved 0x01", /* 0x01 */
+ "Reserved 0x02", /* 0x02 */
+ "Reserved 0x03", /* 0x03 */
+ "Reserved 0x04", /* 0x04 */
+ "Reserved 0x05", /* 0x05 */
+ "Reserved 0x06", /* 0x06 */
+ "Reserved 0x07", /* 0x07 */
+ "Reserved 0x08", /* 0x08 */
+ "Reserved 0x09", /* 0x09 */
+ "Reserved 0x0a", /* 0x0a */
+ "Reserved 0x0b", /* 0x0b */
+ "Reserved 0x0c", /* 0x0c */
+ "Reserved 0x0d", /* 0x0d */
+ "Reserved 0x0e", /* 0x0e */
+ "Reserved 0x0f", /* 0x0f */
+ "Reserved 0x10", /* 0x10 */
+ "Reserved 0x11", /* 0x11 */
+ "Reserved 0x12", /* 0x12 */
+ "Reserved 0x13", /* 0x13 */
+ "Reserved 0x14", /* 0x14 */
+ "Reserved 0x15", /* 0x15 */
+ "Reserved 0x16", /* 0x16 */
+ "Reserved 0x17", /* 0x17 */
+ "Reserved 0x18", /* 0x18 */
+ "Reserved 0x19", /* 0x19 */
+ "LE CSL IE", /* 0x1a */
+ "LE RIT IE", /* 0x1b */
+ "DSME PAN descriptor IE", /* 0x1c */
+ "Rendezvous Time IE", /* 0x1d */
+ "Time Correction IE", /* 0x1e */
+ "Reserved 0x1f", /* 0x1f */
+ "Reserved 0x20", /* 0x20 */
+ "Extended DSME PAN descriptor IE", /* 0x21 */
+ "Fragment Sequence Context Description IE", /* 0x22 */
+ "Simplified Superframe Specification IE", /* 0x23 */
+ "Simplified GTS Specification IE", /* 0x24 */
+ "LECIM Capabilities IE", /* 0x25 */
+ "TRLE Descriptor IE", /* 0x26 */
+ "RCC Capabilities IE", /* 0x27 */
+ "RCCN Descriptor IE", /* 0x28 */
+ "Global Time IE", /* 0x29 */
+ "Omnibus Header IE", /* 0x2a */
+ "DA IE", /* 0x2b */
+ "Reserved 0x2c", /* 0x2c */
+ "Reserved 0x2d", /* 0x2d */
+ "Reserved 0x2e", /* 0x2e */
+ "Reserved 0x2f", /* 0x2f */
+ "Reserved 0x30", /* 0x30 */
+ "Reserved 0x31", /* 0x31 */
+ "Reserved 0x32", /* 0x32 */
+ "Reserved 0x33", /* 0x33 */
+ "Reserved 0x34", /* 0x34 */
+ "Reserved 0x35", /* 0x35 */
+ "Reserved 0x36", /* 0x36 */
+ "Reserved 0x37", /* 0x37 */
+ "Reserved 0x38", /* 0x38 */
+ "Reserved 0x39", /* 0x39 */
+ "Reserved 0x3a", /* 0x3a */
+ "Reserved 0x3b", /* 0x3b */
+ "Reserved 0x3c", /* 0x3c */
+ "Reserved 0x3d", /* 0x3d */
+ "Reserved 0x3e", /* 0x3e */
+ "Reserved 0x3f", /* 0x3f */
+ "Reserved 0x40", /* 0x40 */
+ "Reserved 0x41", /* 0x41 */
+ "Reserved 0x42", /* 0x42 */
+ "Reserved 0x43", /* 0x43 */
+ "Reserved 0x44", /* 0x44 */
+ "Reserved 0x45", /* 0x45 */
+ "Reserved 0x46", /* 0x46 */
+ "Reserved 0x47", /* 0x47 */
+ "Reserved 0x48", /* 0x48 */
+ "Reserved 0x49", /* 0x49 */
+ "Reserved 0x4a", /* 0x4a */
+ "Reserved 0x4b", /* 0x4b */
+ "Reserved 0x4c", /* 0x4c */
+ "Reserved 0x4d", /* 0x4d */
+ "Reserved 0x4e", /* 0x4e */
+ "Reserved 0x4f", /* 0x4f */
+ "Reserved 0x50", /* 0x50 */
+ "Reserved 0x51", /* 0x51 */
+ "Reserved 0x52", /* 0x52 */
+ "Reserved 0x53", /* 0x53 */
+ "Reserved 0x54", /* 0x54 */
+ "Reserved 0x55", /* 0x55 */
+ "Reserved 0x56", /* 0x56 */
+ "Reserved 0x57", /* 0x57 */
+ "Reserved 0x58", /* 0x58 */
+ "Reserved 0x59", /* 0x59 */
+ "Reserved 0x5a", /* 0x5a */
+ "Reserved 0x5b", /* 0x5b */
+ "Reserved 0x5c", /* 0x5c */
+ "Reserved 0x5d", /* 0x5d */
+ "Reserved 0x5e", /* 0x5e */
+ "Reserved 0x5f", /* 0x5f */
+ "Reserved 0x60", /* 0x60 */
+ "Reserved 0x61", /* 0x61 */
+ "Reserved 0x62", /* 0x62 */
+ "Reserved 0x63", /* 0x63 */
+ "Reserved 0x64", /* 0x64 */
+ "Reserved 0x65", /* 0x65 */
+ "Reserved 0x66", /* 0x66 */
+ "Reserved 0x67", /* 0x67 */
+ "Reserved 0x68", /* 0x68 */
+ "Reserved 0x69", /* 0x69 */
+ "Reserved 0x6a", /* 0x6a */
+ "Reserved 0x6b", /* 0x6b */
+ "Reserved 0x6c", /* 0x6c */
+ "Reserved 0x6d", /* 0x6d */
+ "Reserved 0x6e", /* 0x6e */
+ "Reserved 0x6f", /* 0x6f */
+ "Reserved 0x70", /* 0x70 */
+ "Reserved 0x71", /* 0x71 */
+ "Reserved 0x72", /* 0x72 */
+ "Reserved 0x73", /* 0x73 */
+ "Reserved 0x74", /* 0x74 */
+ "Reserved 0x75", /* 0x75 */
+ "Reserved 0x76", /* 0x76 */
+ "Reserved 0x77", /* 0x77 */
+ "Reserved 0x78", /* 0x78 */
+ "Reserved 0x79", /* 0x79 */
+ "Reserved 0x7a", /* 0x7a */
+ "Reserved 0x7b", /* 0x7b */
+ "Reserved 0x7c", /* 0x7c */
+ "Reserved 0x7d", /* 0x7d */
+ "Header Termination 1 IE", /* 0x7e */
+ "Header Termination 2 IE" /* 0x7f */
+};
+
+/* Payload IE Group IDs from Table 7-15 of 802.15.4-2015 */
+static const char *p_ie_names[] = {
+ "ESDU IE", /* 0x00 */
+ "MLME IE", /* 0x01 */
+ "Vendor Specific Nested IE", /* 0x02 */
+ "Multiplexed IE (802.15.9)", /* 0x03 */
+ "Omnibus Payload Group IE", /* 0x04 */
+ "IETF IE", /* 0x05 */
+ "Reserved 0x06", /* 0x06 */
+ "Reserved 0x07", /* 0x07 */
+ "Reserved 0x08", /* 0x08 */
+ "Reserved 0x09", /* 0x09 */
+ "Reserved 0x0a", /* 0x0a */
+ "Reserved 0x0b", /* 0x0b */
+ "Reserved 0x0c", /* 0x0c */
+ "Reserved 0x0d", /* 0x0d */
+ "Reserved 0x0e", /* 0x0e */
+ "List termination" /* 0x0f */
+};
+
+/* Sub-ID for short format from Table 7-16 of 802.15.4-2015 */
+static const char *p_mlme_short_names[] = {
+ "Reserved for long format 0x0", /* 0x00 */
+ "Reserved for long format 0x1", /* 0x01 */
+ "Reserved for long format 0x2", /* 0x02 */
+ "Reserved for long format 0x3", /* 0x03 */
+ "Reserved for long format 0x4", /* 0x04 */
+ "Reserved for long format 0x5", /* 0x05 */
+ "Reserved for long format 0x6", /* 0x06 */
+ "Reserved for long format 0x7", /* 0x07 */
+ "Reserved for long format 0x8", /* 0x08 */
+ "Reserved for long format 0x9", /* 0x09 */
+ "Reserved for long format 0xa", /* 0x0a */
+ "Reserved for long format 0xb", /* 0x0b */
+ "Reserved for long format 0xc", /* 0x0c */
+ "Reserved for long format 0xd", /* 0x0d */
+ "Reserved for long format 0xe", /* 0x0e */
+ "Reserved for long format 0xf", /* 0x0f */
+ "Reserved 0x10", /* 0x10 */
+ "Reserved 0x11", /* 0x11 */
+ "Reserved 0x12", /* 0x12 */
+ "Reserved 0x13", /* 0x13 */
+ "Reserved 0x14", /* 0x14 */
+ "Reserved 0x15", /* 0x15 */
+ "Reserved 0x16", /* 0x16 */
+ "Reserved 0x17", /* 0x17 */
+ "Reserved 0x18", /* 0x18 */
+ "Reserved 0x19", /* 0x19 */
+ "TSCH Synchronization IE", /* 0x1a */
+ "TSCH Slotframe and Link IE", /* 0x1b */
+ "TSCH Timeslot IE", /* 0x1c */
+ "Hopping timing IE", /* 0x1d */
+ "Enhanced Beacon Filter IE", /* 0x1e */
+ "MAC Metrics IE", /* 0x1f */
+ "All MAC Metrics IE", /* 0x20 */
+ "Coexistence Specification IE", /* 0x21 */
+ "SUN Device Capabilities IE", /* 0x22 */
+ "SUN FSK Generic PHY IE", /* 0x23 */
+ "Mode Switch Parameter IE", /* 0x24 */
+ "PHY Parameter Change IE", /* 0x25 */
+ "O-QPSK PHY Mode IE", /* 0x26 */
+ "PCA Allocation IE", /* 0x27 */
+ "LECIM DSSS Operating Mode IE", /* 0x28 */
+ "LECIM FSK Operating Mode IE", /* 0x29 */
+ "Reserved 0x2a", /* 0x2a */
+ "TVWS PHY Operating Mode Description IE", /* 0x2b */
+ "TVWS Device Capabilities IE", /* 0x2c */
+ "TVWS Device Category IE", /* 0x2d */
+ "TVWS Device Identiication IE", /* 0x2e */
+ "TVWS Device Location IE", /* 0x2f */
+ "TVWS Channel Information Query IE", /* 0x30 */
+ "TVWS Channel Information Source IE", /* 0x31 */
+ "CTM IE", /* 0x32 */
+ "Timestamp IE", /* 0x33 */
+ "Timestamp Difference IE", /* 0x34 */
+ "TMCTP Specification IE", /* 0x35 */
+ "RCC PHY Operating Mode IE", /* 0x36 */
+ "Reserved 0x37", /* 0x37 */
+ "Reserved 0x38", /* 0x38 */
+ "Reserved 0x39", /* 0x39 */
+ "Reserved 0x3a", /* 0x3a */
+ "Reserved 0x3b", /* 0x3b */
+ "Reserved 0x3c", /* 0x3c */
+ "Reserved 0x3d", /* 0x3d */
+ "Reserved 0x3e", /* 0x3e */
+ "Reserved 0x3f", /* 0x3f */
+ "Reserved 0x40", /* 0x40 */
+ "Reserved 0x41", /* 0x41 */
+ "Reserved 0x42", /* 0x42 */
+ "Reserved 0x43", /* 0x43 */
+ "Reserved 0x44", /* 0x44 */
+ "Reserved 0x45", /* 0x45 */
+ "Reserved 0x46", /* 0x46 */
+ "Reserved 0x47", /* 0x47 */
+ "Reserved 0x48", /* 0x48 */
+ "Reserved 0x49", /* 0x49 */
+ "Reserved 0x4a", /* 0x4a */
+ "Reserved 0x4b", /* 0x4b */
+ "Reserved 0x4c", /* 0x4c */
+ "Reserved 0x4d", /* 0x4d */
+ "Reserved 0x4e", /* 0x4e */
+ "Reserved 0x4f", /* 0x4f */
+ "Reserved 0x50", /* 0x50 */
+ "Reserved 0x51", /* 0x51 */
+ "Reserved 0x52", /* 0x52 */
+ "Reserved 0x53", /* 0x53 */
+ "Reserved 0x54", /* 0x54 */
+ "Reserved 0x55", /* 0x55 */
+ "Reserved 0x56", /* 0x56 */
+ "Reserved 0x57", /* 0x57 */
+ "Reserved 0x58", /* 0x58 */
+ "Reserved 0x59", /* 0x59 */
+ "Reserved 0x5a", /* 0x5a */
+ "Reserved 0x5b", /* 0x5b */
+ "Reserved 0x5c", /* 0x5c */
+ "Reserved 0x5d", /* 0x5d */
+ "Reserved 0x5e", /* 0x5e */
+ "Reserved 0x5f", /* 0x5f */
+ "Reserved 0x60", /* 0x60 */
+ "Reserved 0x61", /* 0x61 */
+ "Reserved 0x62", /* 0x62 */
+ "Reserved 0x63", /* 0x63 */
+ "Reserved 0x64", /* 0x64 */
+ "Reserved 0x65", /* 0x65 */
+ "Reserved 0x66", /* 0x66 */
+ "Reserved 0x67", /* 0x67 */
+ "Reserved 0x68", /* 0x68 */
+ "Reserved 0x69", /* 0x69 */
+ "Reserved 0x6a", /* 0x6a */
+ "Reserved 0x6b", /* 0x6b */
+ "Reserved 0x6c", /* 0x6c */
+ "Reserved 0x6d", /* 0x6d */
+ "Reserved 0x6e", /* 0x6e */
+ "Reserved 0x6f", /* 0x6f */
+ "Reserved 0x70", /* 0x70 */
+ "Reserved 0x71", /* 0x71 */
+ "Reserved 0x72", /* 0x72 */
+ "Reserved 0x73", /* 0x73 */
+ "Reserved 0x74", /* 0x74 */
+ "Reserved 0x75", /* 0x75 */
+ "Reserved 0x76", /* 0x76 */
+ "Reserved 0x77", /* 0x77 */
+ "Reserved 0x78", /* 0x78 */
+ "Reserved 0x79", /* 0x79 */
+ "Reserved 0x7a", /* 0x7a */
+ "Reserved 0x7b", /* 0x7b */
+ "Reserved 0x7c", /* 0x7c */
+ "Reserved 0x7d", /* 0x7d */
+ "Reserved 0x7e", /* 0x7e */
+ "Reserved 0x7f" /* 0x7f */
+};
+
+/* Sub-ID for long format from Table 7-17 of 802.15.4-2015 */
+static const char *p_mlme_long_names[] = {
+ "Reserved 0x00", /* 0x00 */
+ "Reserved 0x01", /* 0x01 */
+ "Reserved 0x02", /* 0x02 */
+ "Reserved 0x03", /* 0x03 */
+ "Reserved 0x04", /* 0x04 */
+ "Reserved 0x05", /* 0x05 */
+ "Reserved 0x06", /* 0x06 */
+ "Reserved 0x07", /* 0x07 */
+ "Vendor Specific MLME Nested IE", /* 0x08 */
+ "Channel Hopping IE", /* 0x09 */
+ "Reserved 0x0a", /* 0x0a */
+ "Reserved 0x0b", /* 0x0b */
+ "Reserved 0x0c", /* 0x0c */
+ "Reserved 0x0d", /* 0x0d */
+ "Reserved 0x0e", /* 0x0e */
+ "Reserved 0x0f" /* 0x0f */
+};
+
+/* MAC commands from Table 7-49 of 802.15.4-2015 */
+static const char *mac_c_names[] = {
+ "Reserved 0x00", /* 0x00 */
+ "Association Request command", /* 0x01 */
+ "Association Response command", /* 0x02 */
+ "Disassociation Notification command", /* 0x03 */
+ "Data Request command", /* 0x04 */
+ "PAN ID Conflict Notification command", /* 0x05 */
+ "Orphan Notification command", /* 0x06 */
+ "Beacon Request command", /* 0x07 */
+ "Coordinator realignment command", /* 0x08 */
+ "GTS request command", /* 0x09 */
+ "TRLE Management Request command", /* 0x0a */
+ "TRLE Management Response command", /* 0x0b */
+ "Reserved 0x0c", /* 0x0c */
+ "Reserved 0x0d", /* 0x0d */
+ "Reserved 0x0e", /* 0x0e */
+ "Reserved 0x0f", /* 0x0f */
+ "Reserved 0x10", /* 0x10 */
+ "Reserved 0x11", /* 0x11 */
+ "Reserved 0x12", /* 0x12 */
+ "DSME Association Request command", /* 0x13 */
+ "DSME Association Response command", /* 0x14 */
+ "DSME GTS Request command", /* 0x15 */
+ "DSME GTS Response command", /* 0x16 */
+ "DSME GTS Notify command", /* 0x17 */
+ "DSME Information Request command", /* 0x18 */
+ "DSME Information Response command", /* 0x19 */
+ "DSME Beacon Allocation Notification command", /* 0x1a */
+ "DSME Beacon Collision Notification command", /* 0x1b */
+ "DSME Link Report command", /* 0x1c */
+ "Reserved 0x1d", /* 0x1d */
+ "Reserved 0x1e", /* 0x1e */
+ "Reserved 0x1f", /* 0x1f */
+ "RIT Data Request command", /* 0x20 */
+ "DBS Request command", /* 0x21 */
+ "DBS Response command", /* 0x22 */
+ "RIT Data Response command", /* 0x23 */
+ "Vendor Specific command", /* 0x24 */
+ "Reserved 0x25", /* 0x25 */
+ "Reserved 0x26", /* 0x26 */
+ "Reserved 0x27", /* 0x27 */
+ "Reserved 0x28", /* 0x28 */
+ "Reserved 0x29", /* 0x29 */
+ "Reserved 0x2a", /* 0x2a */
+ "Reserved 0x2b", /* 0x2b */
+ "Reserved 0x2c", /* 0x2c */
+ "Reserved 0x2d", /* 0x2d */
+ "Reserved 0x2e", /* 0x2e */
+ "Reserved 0x2f" /* 0x2f */
+};
+
+/*
+ * Frame Control subfields.
+ */
+#define FC_FRAME_TYPE(fc) ((fc) & 0x7)
+#define FC_FRAME_VERSION(fc) (((fc) >> 12) & 0x3)
+
+#define FC_ADDRESSING_MODE_NONE 0x00
+#define FC_ADDRESSING_MODE_RESERVED 0x01
+#define FC_ADDRESSING_MODE_SHORT 0x02
+#define FC_ADDRESSING_MODE_LONG 0x03
+
+/*
+ * IEEE 802.15.4 CRC 16 function. This is using CCITT polynomical of 0x1021,
+ * but the initial value is 0, and the bits are reversed for both in and out.
+ * See section 7.2.10 of 802.15.4-2015 for more information.
+ */
+static uint16_t
+ieee802_15_4_crc16(netdissect_options *ndo, const u_char *p,
+ u_int data_len)
+{
+ uint16_t crc;
+ u_char x, y;
+
+ crc = 0x0000; /* Note, initial value is 0x0000 not 0xffff. */
+
+ while (data_len != 0){
+ y = GET_U_1(p);
+ p++;
+ /* Reverse bits on input */
+ y = (((y & 0xaa) >> 1) | ((y & 0x55) << 1));
+ y = (((y & 0xcc) >> 2) | ((y & 0x33) << 2));
+ y = (((y & 0xf0) >> 4) | ((y & 0x0f) << 4));
+ /* Update CRC */
+ x = crc >> 8 ^ y;
+ x ^= x >> 4;
+ crc = ((uint16_t)(crc << 8)) ^
+ ((uint16_t)(x << 12)) ^
+ ((uint16_t)(x << 5)) ^
+ ((uint16_t)x);
+ data_len--;
+ }
+ /* Reverse bits on output */
+ crc = (((crc & 0xaaaa) >> 1) | ((crc & 0x5555) << 1));
+ crc = (((crc & 0xcccc) >> 2) | ((crc & 0x3333) << 2));
+ crc = (((crc & 0xf0f0) >> 4) | ((crc & 0x0f0f) << 4));
+ crc = (((crc & 0xff00) >> 8) | ((crc & 0x00ff) << 8));
+ return crc;
+}
+
+/*
+ * Reverses the bits of the 32-bit word.
+ */
+static uint32_t
+ieee802_15_4_reverse32(uint32_t x)
+{
+ x = ((x & 0x55555555) << 1) | ((x >> 1) & 0x55555555);
+ x = ((x & 0x33333333) << 2) | ((x >> 2) & 0x33333333);
+ x = ((x & 0x0F0F0F0F) << 4) | ((x >> 4) & 0x0F0F0F0F);
+ x = (x << 24) | ((x & 0xFF00) << 8) |
+ ((x >> 8) & 0xFF00) | (x >> 24);
+ return x;
+}
+
+/*
+ * IEEE 802.15.4 CRC 32 function. This is using ANSI X3.66-1979 polynomical of
+ * 0x04C11DB7, but the initial value is 0, and the bits are reversed for both
+ * in and out. See section 7.2.10 of 802.15.4-2015 for more information.
+ */
+static uint32_t
+ieee802_15_4_crc32(netdissect_options *ndo, const u_char *p,
+ u_int data_len)
+{
+ uint32_t crc, byte;
+ int b;
+
+ crc = 0x00000000; /* Note, initial value is 0x00000000 not 0xffffffff */
+
+ while (data_len != 0){
+ byte = GET_U_1(p);
+ p++;
+ /* Reverse bits on input */
+ byte = ieee802_15_4_reverse32(byte);
+ /* Update CRC */
+ for(b = 0; b <= 7; b++) {
+ if ((int) (crc ^ byte) < 0)
+ crc = (crc << 1) ^ 0x04C11DB7;
+ else
+ crc = crc << 1;
+ byte = byte << 1;
+ }
+ data_len--;
+ }
+ /* Reverse bits on output */
+ crc = ieee802_15_4_reverse32(crc);
+ return crc;
+}
+
+/*
+ * Find out the address length based on the address type. See table 7-3 of
+ * 802.15.4-2015. Returns the address length.
+ */
+static int
+ieee802_15_4_addr_len(uint16_t addr_type)
+{
+ switch (addr_type) {
+ case FC_ADDRESSING_MODE_NONE: /* None. */
+ return 0;
+ break;
+ case FC_ADDRESSING_MODE_RESERVED: /* Reserved, there used to be 8-bit
+ * address type in one amendment, but
+ * that and the feature using it was
+ * removed during 802.15.4-2015
+ * maintenance process. */
+ return -1;
+ break;
+ case FC_ADDRESSING_MODE_SHORT: /* Short. */
+ return 2;
+ break;
+ case FC_ADDRESSING_MODE_LONG: /* Extended. */
+ return 8;
+ break;
+ }
+ return 0;
+}
+
+/*
+ * Print out the ieee 802.15.4 address.
+ */
+static void
+ieee802_15_4_print_addr(netdissect_options *ndo, const u_char *p,
+ int dst_addr_len)
+{
+ switch (dst_addr_len) {
+ case 0:
+ ND_PRINT("none");
+ break;
+ case 2:
+ ND_PRINT("%04x", GET_LE_U_2(p));
+ break;
+ case 8:
+ ND_PRINT("%s", GET_LE64ADDR_STRING(p));
+ break;
+ }
+}
+
+/*
+ * Beacon frame superframe specification structure. Used in the old Beacon
+ * frames, and in the DSME PAN Descriptor IE. See section 7.3.1.3 of the
+ * 802.15.4-2015.
+ */
+static void
+ieee802_15_4_print_superframe_specification(netdissect_options *ndo,
+ uint16_t ss)
+{
+ if (ndo->ndo_vflag < 1) {
+ return;
+ }
+ ND_PRINT("\n\tBeacon order = %d, Superframe order = %d, ",
+ (ss & 0xf), ((ss >> 4) & 0xf));
+ ND_PRINT("Final CAP Slot = %d",
+ ((ss >> 8) & 0xf));
+ if (CHECK_BIT(ss, 12)) { ND_PRINT(", BLE enabled"); }
+ if (CHECK_BIT(ss, 14)) { ND_PRINT(", PAN Coordinator"); }
+ if (CHECK_BIT(ss, 15)) { ND_PRINT(", Association Permit"); }
+}
+
+/*
+ * Beacon frame gts info structure. Used in the old Beacon frames, and
+ * in the DSME PAN Descriptor IE. See section 7.3.1.4 of 802.15.4-2015.
+ *
+ * Returns number of byts consumed from the packet or -1 in case of error.
+ */
+static int
+ieee802_15_4_print_gts_info(netdissect_options *ndo,
+ const u_char *p,
+ u_int data_len)
+{
+ uint8_t gts_spec, gts_cnt;
+ u_int len;
+ int i;
+
+ gts_spec = GET_U_1(p);
+ gts_cnt = gts_spec & 0x7;
+
+ if (gts_cnt == 0) {
+ if (ndo->ndo_vflag > 0) {
+ ND_PRINT("\n\tGTS Descriptor Count = %d, ", gts_cnt);
+ }
+ return 1;
+ }
+ len = 1 + 1 + gts_cnt * 3;
+
+ if (data_len < len) {
+ ND_PRINT(" [ERROR: Truncated GTS Info List]");
+ return -1;
+ }
+ if (ndo->ndo_vflag < 2) {
+ return len;
+ }
+ ND_PRINT("GTS Descriptor Count = %d, ", gts_cnt);
+ ND_PRINT("GTS Directions Mask = %02x, [ ",
+ GET_U_1(p + 1) & 0x7f);
+
+ for(i = 0; i < gts_cnt; i++) {
+ ND_PRINT("[ ");
+ ieee802_15_4_print_addr(ndo, p + 2 + i * 3, 2);
+ ND_PRINT(", Start slot = %d, Length = %d ] ",
+ GET_U_1(p + 2 + i * 3 + 1) & 0x0f,
+ (GET_U_1(p + 2 + i * 3 + 1) >> 4) & 0x0f);
+ }
+ ND_PRINT("]");
+ return len;
+}
+
+/*
+ * Beacon frame pending address structure. Used in the old Beacon frames, and
+ * in the DSME PAN Descriptor IE. See section 7.3.1.5 of 802.15.4-2015.
+ *
+ * Returns number of byts consumed from the packet or -1 in case of error.
+ */
+static int16_t
+ieee802_15_4_print_pending_addresses(netdissect_options *ndo,
+ const u_char *p,
+ u_int data_len)
+{
+ uint8_t pas, s_cnt, e_cnt, len, i;
+
+ pas = GET_U_1(p);
+ s_cnt = pas & 0x7;
+ e_cnt = (pas >> 4) & 0x7;
+ len = 1 + s_cnt * 2 + e_cnt * 8;
+ if (ndo->ndo_vflag > 0) {
+ ND_PRINT("\n\tPending address list, "
+ "# short addresses = %d, # extended addresses = %d",
+ s_cnt, e_cnt);
+ }
+ if (data_len < len) {
+ ND_PRINT(" [ERROR: Pending address list truncated]");
+ return -1;
+ }
+ if (ndo->ndo_vflag < 2) {
+ return len;
+ }
+ if (s_cnt != 0) {
+ ND_PRINT(", Short address list = [ ");
+ for(i = 0; i < s_cnt; i++) {
+ ieee802_15_4_print_addr(ndo, p + 1 + i * 2, 2);
+ ND_PRINT(" ");
+ }
+ ND_PRINT("]");
+ }
+ if (e_cnt != 0) {
+ ND_PRINT(", Extended address list = [ ");
+ for(i = 0; i < e_cnt; i++) {
+ ieee802_15_4_print_addr(ndo, p + 1 + s_cnt * 2 +
+ i * 8, 8);
+ ND_PRINT(" ");
+ }
+ ND_PRINT("]");
+ }
+ return len;
+}
+
+/*
+ * Print header ie content.
+ */
+static void
+ieee802_15_4_print_header_ie(netdissect_options *ndo,
+ const u_char *p,
+ uint16_t ie_len,
+ int element_id)
+{
+ int i;
+
+ switch (element_id) {
+ case 0x00: /* Vendor Specific Header IE */
+ if (ie_len < 3) {
+ ND_PRINT("[ERROR: Vendor OUI missing]");
+ } else {
+ ND_PRINT("OUI = 0x%02x%02x%02x, ", GET_U_1(p),
+ GET_U_1(p + 1), GET_U_1(p + 2));
+ ND_PRINT("Data = ");
+ for(i = 3; i < ie_len; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + i));
+ }
+ }
+ break;
+ case 0x1a: /* LE CSL IE */
+ if (ie_len < 4) {
+ ND_PRINT("[ERROR: Truncated CSL IE]");
+ } else {
+ ND_PRINT("CSL Phase = %d, CSL Period = %d",
+ GET_LE_U_2(p), GET_LE_U_2(p + 2));
+ if (ie_len >= 6) {
+ ND_PRINT(", Rendezvous time = %d",
+ GET_LE_U_2(p + 4));
+ }
+ if (ie_len != 4 && ie_len != 6) {
+ ND_PRINT(" [ERROR: CSL IE length wrong]");
+ }
+ }
+ break;
+ case 0x1b: /* LE RIT IE */
+ if (ie_len < 4) {
+ ND_PRINT("[ERROR: Truncated RIT IE]");
+ } else {
+ ND_PRINT("Time to First Listen = %d, # of Repeat Listen = %d, Repeat Listen Interval = %d",
+ GET_U_1(p),
+ GET_U_1(p + 1),
+ GET_LE_U_2(p + 2));
+ }
+ break;
+ case 0x1c: /* DSME PAN Descriptor IE */
+ /*FALLTHROUGH*/
+ case 0x21: /* Extended DSME PAN descriptor IE */
+ if (ie_len < 2) {
+ ND_PRINT("[ERROR: Truncated DSME PAN IE]");
+ } else {
+ uint16_t ss, ptr, ulen;
+ int16_t len;
+ int hopping_present;
+
+ hopping_present = 0;
+
+ ss = GET_LE_U_2(p);
+ ieee802_15_4_print_superframe_specification(ndo, ss);
+ if (ie_len < 3) {
+ ND_PRINT("[ERROR: Truncated before pending addresses field]");
+ break;
+ }
+ ptr = 2;
+ len = ieee802_15_4_print_pending_addresses(ndo,
+ p + ptr,
+ ie_len -
+ ptr);
+ if (len < 0) {
+ break;
+ }
+ ptr += len;
+
+ if (element_id == 0x21) {
+ /* Extended version. */
+ if (ie_len < ptr + 2) {
+ ND_PRINT("[ERROR: Truncated before DSME Superframe Specification]");
+ break;
+ }
+ ss = GET_LE_U_2(p + ptr);
+ ptr += 2;
+ ND_PRINT("Multi-superframe Order = %d", ss & 0xff);
+ ND_PRINT(", %s", ((ss & 0x100) ?
+ "Channel hopping mode" :
+ "Channel adaptation mode"));
+ if (ss & 0x400) {
+ ND_PRINT(", CAP reduction enabled");
+ }
+ if (ss & 0x800) {
+ ND_PRINT(", Deferred beacon enabled");
+ }
+ if (ss & 0x1000) {
+ ND_PRINT(", Hopping Sequence Present");
+ hopping_present = 1;
+ }
+ } else {
+ if (ie_len < ptr + 1) {
+ ND_PRINT("[ERROR: Truncated before DSME Superframe Specification]");
+ break;
+ }
+ ss = GET_U_1(p + ptr);
+ ptr++;
+ ND_PRINT("Multi-superframe Order = %d",
+ ss & 0x0f);
+ ND_PRINT(", %s", ((ss & 0x10) ?
+ "Channel hopping mode" :
+ "Channel adaptation mode"));
+ if (ss & 0x40) {
+ ND_PRINT(", CAP reduction enabled");
+ }
+ if (ss & 0x80) {
+ ND_PRINT(", Deferred beacon enabled");
+ }
+ }
+ if (ie_len < ptr + 8) {
+ ND_PRINT(" [ERROR: Truncated before Time synchronization specification]");
+ break;
+ }
+ ND_PRINT("Beacon timestamp = %" PRIu64 ", offset = %d",
+ GET_LE_U_6(p + ptr),
+ GET_LE_U_2(p + ptr + 6));
+ ptr += 8;
+ if (ie_len < ptr + 4) {
+ ND_PRINT(" [ERROR: Truncated before Beacon Bitmap]");
+ break;
+ }
+
+ ulen = GET_LE_U_2(p + ptr + 2);
+ ND_PRINT("SD Index = %d, Bitmap len = %d, ",
+ GET_LE_U_2(p + ptr), ulen);
+ ptr += 4;
+ if (ie_len < ptr + ulen) {
+ ND_PRINT(" [ERROR: Truncated in SD bitmap]");
+ break;
+ }
+ ND_PRINT(" SD Bitmap = ");
+ for(i = 0; i < ulen; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + ptr + i));
+ }
+ ptr += ulen;
+
+ if (ie_len < ptr + 5) {
+ ND_PRINT(" [ERROR: Truncated before Channel hopping specification]");
+ break;
+ }
+
+ ulen = GET_LE_U_2(p + ptr + 4);
+ ND_PRINT("Hopping Seq ID = %d, PAN Coordinator BSN = %d, "
+ "Channel offset = %d, Bitmap length = %d, ",
+ GET_U_1(p + ptr),
+ GET_U_1(p + ptr + 1),
+ GET_LE_U_2(p + ptr + 2),
+ ulen);
+ ptr += 5;
+ if (ie_len < ptr + ulen) {
+ ND_PRINT(" [ERROR: Truncated in Channel offset bitmap]");
+ break;
+ }
+ ND_PRINT(" Channel offset bitmap = ");
+ for(i = 0; i < ulen; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + ptr + i));
+ }
+ ptr += ulen;
+ if (hopping_present) {
+ if (ie_len < ptr + 1) {
+ ND_PRINT(" [ERROR: Truncated in Hopping Sequence length]");
+ break;
+ }
+ ulen = GET_U_1(p + ptr);
+ ptr++;
+ ND_PRINT("Hopping Seq length = %d [ ", ulen);
+
+ /* The specification is not clear how the
+ hopping sequence is encoded, I assume two
+ octet unsigned integers for each channel. */
+
+ if (ie_len < ptr + ulen * 2) {
+ ND_PRINT(" [ERROR: Truncated in Channel offset bitmap]");
+ break;
+ }
+ for(i = 0; i < ulen; i++) {
+ ND_PRINT("%02x ",
+ GET_LE_U_2(p + ptr + i * 2));
+ }
+ ND_PRINT("]");
+ ptr += ulen * 2;
+ }
+ }
+ break;
+ case 0x1d: /* Rendezvous Tome IE */
+ if (ie_len != 4) {
+ ND_PRINT("[ERROR: Length != 2]");
+ } else {
+ uint16_t r_time, w_u_interval;
+ r_time = GET_LE_U_2(p);
+ w_u_interval = GET_LE_U_2(p + 2);
+
+ ND_PRINT("Rendezvous time = %d, Wake-up Interval = %d",
+ r_time, w_u_interval);
+ }
+ break;
+ case 0x1e: /* Time correction IE */
+ if (ie_len != 2) {
+ ND_PRINT("[ERROR: Length != 2]");
+ } else {
+ uint16_t val;
+ int16_t timecorr;
+
+ val = GET_LE_U_2(p);
+ if (val & 0x8000) { ND_PRINT("Negative "); }
+ val &= 0xfff;
+ val <<= 4;
+ timecorr = val;
+ timecorr >>= 4;
+
+ ND_PRINT("Ack time correction = %d, ", timecorr);
+ }
+ break;
+ case 0x22: /* Fragment Sequence Content Description IE */
+ /* XXX Not implemented */
+ case 0x23: /* Simplified Superframe Specification IE */
+ /* XXX Not implemented */
+ case 0x24: /* Simplified GTS Specification IE */
+ /* XXX Not implemented */
+ case 0x25: /* LECIM Capabilities IE */
+ /* XXX Not implemented */
+ case 0x26: /* TRLE Descriptor IE */
+ /* XXX Not implemented */
+ case 0x27: /* RCC Capabilities IE */
+ /* XXX Not implemented */
+ case 0x28: /* RCCN Descriptor IE */
+ /* XXX Not implemented */
+ case 0x29: /* Global Time IE */
+ /* XXX Not implemented */
+ case 0x2b: /* DA IE */
+ /* XXX Not implemented */
+ default:
+ ND_PRINT("IE Data = ");
+ for(i = 0; i < ie_len; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + i));
+ }
+ break;
+ }
+}
+
+/*
+ * Parse and print Header IE list. See 7.4.2 of 802.15.4-2015 for
+ * more information.
+ *
+ * Returns number of byts consumed from the packet or -1 in case of error.
+ */
+static int
+ieee802_15_4_print_header_ie_list(netdissect_options *ndo,
+ const u_char *p,
+ u_int caplen,
+ int *payload_ie_present)
+{
+ int len, ie, element_id, i;
+ uint16_t ie_len;
+
+ *payload_ie_present = 0;
+ len = 0;
+ do {
+ if (caplen < 2) {
+ ND_PRINT("[ERROR: Truncated header IE]");
+ return -1;
+ }
+ /* Extract IE Header */
+ ie = GET_LE_U_2(p);
+ if (CHECK_BIT(ie, 15)) {
+ ND_PRINT("[ERROR: Header IE with type 1] ");
+ }
+ /* Get length and Element ID */
+ ie_len = ie & 0x7f;
+ element_id = (ie >> 7) & 0xff;
+ if (element_id > 127) {
+ ND_PRINT("Reserved Element ID %02x, length = %d ",
+ element_id, ie_len);
+ } else {
+ if (ie_len == 0) {
+ ND_PRINT("\n\t%s [", h_ie_names[element_id]);
+ } else {
+ ND_PRINT("\n\t%s [ length = %d, ",
+ h_ie_names[element_id], ie_len);
+ }
+ }
+ if (caplen < 2U + ie_len) {
+ ND_PRINT("[ERROR: Truncated IE data]");
+ return -1;
+ }
+ /* Skip header */
+ p += 2;
+
+ /* Parse and print content. */
+ if (ndo->ndo_vflag > 3 && ie_len != 0) {
+ ieee802_15_4_print_header_ie(ndo, p,
+ ie_len, element_id);
+ } else {
+ if (ie_len != 0) {
+ ND_PRINT("IE Data = ");
+ for(i = 0; i < ie_len; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + i));
+ }
+ }
+ }
+ ND_PRINT("] ");
+ len += 2 + ie_len;
+ p += ie_len;
+ caplen -= 2 + ie_len;
+ if (element_id == 0x7e) {
+ *payload_ie_present = 1;
+ break;
+ }
+ if (element_id == 0x7f) {
+ break;
+ }
+ } while (caplen != 0);
+ return len;
+}
+
+/*
+ * Print MLME ie content.
+ */
+static void
+ieee802_15_4_print_mlme_ie(netdissect_options *ndo,
+ const u_char *p,
+ uint16_t sub_ie_len,
+ int sub_id)
+{
+ int i, j;
+ uint16_t len;
+
+ /* Note, as there is no overlap with the long and short
+ MLME sub IDs, we can just use one switch here. */
+ switch (sub_id) {
+ case 0x08: /* Vendor Specific Nested IE */
+ if (sub_ie_len < 3) {
+ ND_PRINT("[ERROR: Vendor OUI missing]");
+ } else {
+ ND_PRINT("OUI = 0x%02x%02x%02x, ",
+ GET_U_1(p),
+ GET_U_1(p + 1),
+ GET_U_1(p + 2));
+ ND_PRINT("Data = ");
+ for(i = 3; i < sub_ie_len; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + i));
+ }
+ }
+ break;
+ case 0x09: /* Channel Hopping IE */
+ if (sub_ie_len < 1) {
+ ND_PRINT("[ERROR: Hopping sequence ID missing]");
+ } else if (sub_ie_len == 1) {
+ ND_PRINT("Hopping Sequence ID = %d", GET_U_1(p));
+ p++;
+ sub_ie_len--;
+ } else {
+ uint16_t channel_page, number_of_channels;
+
+ ND_PRINT("Hopping Sequence ID = %d", GET_U_1(p));
+ p++;
+ sub_ie_len--;
+ if (sub_ie_len < 7) {
+ ND_PRINT("[ERROR: IE truncated]");
+ break;
+ }
+ channel_page = GET_U_1(p);
+ number_of_channels = GET_LE_U_2(p + 1);
+ ND_PRINT("Channel Page = %d, Number of Channels = %d, ",
+ channel_page, number_of_channels);
+ ND_PRINT("Phy Configuration = 0x%08x, ",
+ GET_LE_U_4(p + 3));
+ p += 7;
+ sub_ie_len -= 7;
+ if (channel_page == 9 || channel_page == 10) {
+ len = (number_of_channels + 7) / 8;
+ if (sub_ie_len < len) {
+ ND_PRINT("[ERROR: IE truncated]");
+ break;
+ }
+ ND_PRINT("Extended bitmap = 0x");
+ for(i = 0; i < len; i++) {
+ ND_PRINT("%02x", GET_U_1(p + i));
+ }
+ ND_PRINT(", ");
+ p += len;
+ sub_ie_len -= len;
+ }
+ if (sub_ie_len < 2) {
+ ND_PRINT("[ERROR: IE truncated]");
+ break;
+ }
+ len = GET_LE_U_2(p);
+ p += 2;
+ sub_ie_len -= 2;
+ ND_PRINT("Hopping Seq length = %d [ ", len);
+
+ if (sub_ie_len < len * 2) {
+ ND_PRINT(" [ERROR: IE truncated]");
+ break;
+ }
+ for(i = 0; i < len; i++) {
+ ND_PRINT("%02x ", GET_LE_U_2(p + i * 2));
+ }
+ ND_PRINT("]");
+ p += len * 2;
+ sub_ie_len -= len * 2;
+ if (sub_ie_len < 2) {
+ ND_PRINT("[ERROR: IE truncated]");
+ break;
+ }
+ ND_PRINT("Current hop = %d", GET_LE_U_2(p));
+ }
+
+ break;
+ case 0x1a: /* TSCH Synchronization IE. */
+ if (sub_ie_len < 6) {
+ ND_PRINT("[ERROR: Length != 6]");
+ }
+ ND_PRINT("ASN = %010" PRIx64 ", Join Metric = %d ",
+ GET_LE_U_5(p), GET_U_1(p + 5));
+ break;
+ case 0x1b: /* TSCH Slotframe and Link IE. */
+ {
+ int sf_num, off, links, opts;
+
+ if (sub_ie_len < 1) {
+ ND_PRINT("[ERROR: Truncated IE]");
+ break;
+ }
+ sf_num = GET_U_1(p);
+ ND_PRINT("Slotframes = %d ", sf_num);
+ off = 1;
+ for(i = 0; i < sf_num; i++) {
+ if (sub_ie_len < off + 4) {
+ ND_PRINT("[ERROR: Truncated IE before slotframes]");
+ break;
+ }
+ links = GET_U_1(p + off + 3);
+ ND_PRINT("\n\t\t\t[ Handle %d, size = %d, links = %d ",
+ GET_U_1(p + off),
+ GET_LE_U_2(p + off + 1),
+ links);
+ off += 4;
+ for(j = 0; j < links; j++) {
+ if (sub_ie_len < off + 5) {
+ ND_PRINT("[ERROR: Truncated IE links]");
+ break;
+ }
+ opts = GET_U_1(p + off + 4);
+ ND_PRINT("\n\t\t\t\t[ Timeslot = %d, Offset = %d, Options = ",
+ GET_LE_U_2(p + off),
+ GET_LE_U_2(p + off + 2));
+ if (opts & 0x1) { ND_PRINT("TX "); }
+ if (opts & 0x2) { ND_PRINT("RX "); }
+ if (opts & 0x4) { ND_PRINT("Shared "); }
+ if (opts & 0x8) {
+ ND_PRINT("Timekeeping ");
+ }
+ if (opts & 0x10) {
+ ND_PRINT("Priority ");
+ }
+ off += 5;
+ ND_PRINT("] ");
+ }
+ ND_PRINT("] ");
+ }
+ }
+ break;
+ case 0x1c: /* TSCH Timeslot IE. */
+ if (sub_ie_len == 1) {
+ ND_PRINT("Time slot ID = %d ", GET_U_1(p));
+ } else if (sub_ie_len == 25) {
+ ND_PRINT("Time slot ID = %d, CCA Offset = %d, CCA = %d, TX Offset = %d, RX Offset = %d, RX Ack Delay = %d, TX Ack Delay = %d, RX Wait = %d, Ack Wait = %d, RX TX = %d, Max Ack = %d, Max TX = %d, Time slot Length = %d ",
+ GET_U_1(p),
+ GET_LE_U_2(p + 1),
+ GET_LE_U_2(p + 3),
+ GET_LE_U_2(p + 5),
+ GET_LE_U_2(p + 7),
+ GET_LE_U_2(p + 9),
+ GET_LE_U_2(p + 11),
+ GET_LE_U_2(p + 13),
+ GET_LE_U_2(p + 15),
+ GET_LE_U_2(p + 17),
+ GET_LE_U_2(p + 19),
+ GET_LE_U_2(p + 21),
+ GET_LE_U_2(p + 23));
+ } else if (sub_ie_len == 27) {
+ ND_PRINT("Time slot ID = %d, CCA Offset = %d, CCA = %d, TX Offset = %d, RX Offset = %d, RX Ack Delay = %d, TX Ack Delay = %d, RX Wait = %d, Ack Wait = %d, RX TX = %d, Max Ack = %d, Max TX = %d, Time slot Length = %d ",
+ GET_U_1(p),
+ GET_LE_U_2(p + 1),
+ GET_LE_U_2(p + 3),
+ GET_LE_U_2(p + 5),
+ GET_LE_U_2(p + 7),
+ GET_LE_U_2(p + 9),
+ GET_LE_U_2(p + 11),
+ GET_LE_U_2(p + 13),
+ GET_LE_U_2(p + 15),
+ GET_LE_U_2(p + 17),
+ GET_LE_U_2(p + 19),
+ GET_LE_U_3(p + 21),
+ GET_LE_U_3(p + 24));
+ } else {
+ ND_PRINT("[ERROR: Length not 1, 25, or 27]");
+ ND_PRINT("\n\t\t\tIE Data = ");
+ for(i = 0; i < sub_ie_len; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + i));
+ }
+ }
+ break;
+ case 0x1d: /* Hopping timing IE */
+ /* XXX Not implemented */
+ case 0x1e: /* Enhanced Beacon Filter IE */
+ /* XXX Not implemented */
+ case 0x1f: /* MAC Metrics IE */
+ /* XXX Not implemented */
+ case 0x20: /* All MAC Metrics IE */
+ /* XXX Not implemented */
+ case 0x21: /* Coexistence Specification IE */
+ /* XXX Not implemented */
+ case 0x22: /* SUN Device Capabilities IE */
+ /* XXX Not implemented */
+ case 0x23: /* SUN FSK Generic PHY IE */
+ /* XXX Not implemented */
+ case 0x24: /* Mode Switch Parameter IE */
+ /* XXX Not implemented */
+ case 0x25: /* PHY Parameter Change IE */
+ /* XXX Not implemented */
+ case 0x26: /* O-QPSK PHY Mode IE */
+ /* XXX Not implemented */
+ case 0x27: /* PCA Allocation IE */
+ /* XXX Not implemented */
+ case 0x28: /* LECIM DSSS Operating Mode IE */
+ /* XXX Not implemented */
+ case 0x29: /* LECIM FSK Operating Mode IE */
+ /* XXX Not implemented */
+ case 0x2b: /* TVWS PHY Operating Mode Description IE */
+ /* XXX Not implemented */
+ case 0x2c: /* TVWS Device Capabilities IE */
+ /* XXX Not implemented */
+ case 0x2d: /* TVWS Device Category IE */
+ /* XXX Not implemented */
+ case 0x2e: /* TVWS Device Identification IE */
+ /* XXX Not implemented */
+ case 0x2f: /* TVWS Device Location IE */
+ /* XXX Not implemented */
+ case 0x30: /* TVWS Channel Information Query IE */
+ /* XXX Not implemented */
+ case 0x31: /* TVWS Channel Information Source IE */
+ /* XXX Not implemented */
+ case 0x32: /* CTM IE */
+ /* XXX Not implemented */
+ case 0x33: /* Timestamp IE */
+ /* XXX Not implemented */
+ case 0x34: /* Timestamp Difference IE */
+ /* XXX Not implemented */
+ case 0x35: /* TMCTP Specification IE */
+ /* XXX Not implemented */
+ case 0x36: /* TCC PHY Operating Mode IE */
+ /* XXX Not implemented */
+ default:
+ ND_PRINT("IE Data = ");
+ for(i = 0; i < sub_ie_len; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + i));
+ }
+ break;
+ }
+}
+
+/*
+ * MLME IE list parsing and printing. See 7.4.3.2 of 802.15.4-2015
+ * for more information.
+ */
+static void
+ieee802_15_4_print_mlme_ie_list(netdissect_options *ndo,
+ const u_char *p,
+ uint16_t ie_len)
+{
+ int ie, sub_id, i, type;
+ uint16_t sub_ie_len;
+
+ do {
+ if (ie_len < 2) {
+ ND_PRINT("[ERROR: Truncated MLME IE]");
+ return;
+ }
+ /* Extract IE header */
+ ie = GET_LE_U_2(p);
+ type = CHECK_BIT(ie, 15);
+ if (type) {
+ /* Long type */
+ sub_ie_len = ie & 0x3ff;
+ sub_id = (ie >> 11) & 0x0f;
+ } else {
+ sub_ie_len = ie & 0xff;
+ sub_id = (ie >> 8) & 0x7f;
+ }
+
+ /* Skip the IE header */
+ p += 2;
+
+ if (type == 0) {
+ ND_PRINT("\n\t\t%s [ length = %d, ",
+ p_mlme_short_names[sub_id], sub_ie_len);
+ } else {
+ ND_PRINT("\n\t\t%s [ length = %d, ",
+ p_mlme_long_names[sub_id], sub_ie_len);
+ }
+
+ if (ie_len < 2 + sub_ie_len) {
+ ND_PRINT("[ERROR: Truncated IE data]");
+ return;
+ }
+ if (sub_ie_len != 0) {
+ if (ndo->ndo_vflag > 3) {
+ ieee802_15_4_print_mlme_ie(ndo, p, sub_ie_len, sub_id);
+ } else if (ndo->ndo_vflag > 2) {
+ ND_PRINT("IE Data = ");
+ for(i = 0; i < sub_ie_len; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + i));
+ }
+ }
+ }
+ ND_PRINT("] ");
+ p += sub_ie_len;
+ ie_len -= 2 + sub_ie_len;
+ } while (ie_len > 0);
+}
+
+/*
+ * Multiplexd IE (802.15.9) parsing and printing.
+ *
+ * Returns number of bytes consumed from packet or -1 in case of error.
+ */
+static void
+ieee802_15_4_print_mpx_ie(netdissect_options *ndo,
+ const u_char *p,
+ uint16_t ie_len)
+{
+ int transfer_type, tid;
+ int fragment_number, data_start;
+ int i;
+
+ data_start = 0;
+ if (ie_len < 1) {
+ ND_PRINT("[ERROR: Transaction control byte missing]");
+ return;
+ }
+
+ transfer_type = GET_U_1(p) & 0x7;
+ tid = GET_U_1(p) >> 3;
+ switch (transfer_type) {
+ case 0x00: /* Full upper layer frame. */
+ case 0x01: /* Full upper layer frame with small Multiplex ID. */
+ ND_PRINT("Type = Full upper layer fragment%s, ",
+ (transfer_type == 0x01 ?
+ " with small Multiplex ID" : ""));
+ if (transfer_type == 0x00) {
+ if (ie_len < 3) {
+ ND_PRINT("[ERROR: Multiplex ID missing]");
+ return;
+ }
+ data_start = 3;
+ ND_PRINT("tid = 0x%02x, Multiplex ID = 0x%04x, ",
+ tid, GET_LE_U_2(p + 1));
+ } else {
+ data_start = 1;
+ ND_PRINT("Multiplex ID = 0x%04x, ", tid);
+ }
+ break;
+ case 0x02: /* First, or middle, Fragments */
+ case 0x04: /* Last fragment */
+ if (ie_len < 2) {
+ ND_PRINT("[ERROR: fragment number missing]");
+ return;
+ }
+
+ fragment_number = GET_U_1(p + 1);
+ ND_PRINT("Type = %s, tid = 0x%02x, fragment = 0x%02x, ",
+ (transfer_type == 0x02 ?
+ (fragment_number == 0 ?
+ "First fragment" : "Middle fragment") :
+ "Last fragment"), tid,
+ fragment_number);
+ data_start = 2;
+ if (fragment_number == 0) {
+ int total_size, multiplex_id;
+
+ if (ie_len < 6) {
+ ND_PRINT("[ERROR: Total upper layer size or multiplex ID missing]");
+ return;
+ }
+ total_size = GET_LE_U_2(p + 2);
+ multiplex_id = GET_LE_U_2(p + 4);
+ ND_PRINT("Total upper layer size = 0x%04x, Multiplex ID = 0x%04x, ",
+ total_size, multiplex_id);
+ data_start = 6;
+ }
+ break;
+ case 0x06: /* Abort code */
+ if (ie_len == 1) {
+ ND_PRINT("Type = Abort, tid = 0x%02x, no max size given",
+ tid);
+ } else if (ie_len == 3) {
+ ND_PRINT("Type = Abort, tid = 0x%02x, max size = 0x%04x",
+ tid, GET_LE_U_2(p + 1));
+ } else {
+ ND_PRINT("Type = Abort, tid = 0x%02x, invalid length = %d (not 1 or 3)",
+ tid, ie_len);
+ ND_PRINT("Abort data = ");
+ for(i = 1; i < ie_len; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + i));
+ }
+ }
+ return;
+ /* NOTREACHED */
+ break;
+ case 0x03: /* Reserved */
+ case 0x05: /* Reserved */
+ case 0x07: /* Reserved */
+ ND_PRINT("Type = %d (Reserved), tid = 0x%02x, ",
+ transfer_type, tid);
+ data_start = 1;
+ break;
+ }
+
+ ND_PRINT("Upper layer data = ");
+ for(i = data_start; i < ie_len; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + i));
+ }
+}
+
+/*
+ * Payload IE list parsing and printing. See 7.4.3 of 802.15.4-2015
+ * for more information.
+ *
+ * Returns number of byts consumed from the packet or -1 in case of error.
+ */
+static int
+ieee802_15_4_print_payload_ie_list(netdissect_options *ndo,
+ const u_char *p,
+ u_int caplen)
+{
+ int len, ie, group_id, i;
+ uint16_t ie_len;
+
+ len = 0;
+ do {
+ if (caplen < 2) {
+ ND_PRINT("[ERROR: Truncated header IE]");
+ return -1;
+ }
+ /* Extract IE header */
+ ie = GET_LE_U_2(p);
+ if ((CHECK_BIT(ie, 15)) == 0) {
+ ND_PRINT("[ERROR: Payload IE with type 0] ");
+ }
+ ie_len = ie & 0x3ff;
+ group_id = (ie >> 11) & 0x0f;
+
+ /* Skip the IE header */
+ p += 2;
+ if (ie_len == 0) {
+ ND_PRINT("\n\t%s [", p_ie_names[group_id]);
+ } else {
+ ND_PRINT("\n\t%s [ length = %d, ",
+ p_ie_names[group_id], ie_len);
+ }
+ if (caplen < 2U + ie_len) {
+ ND_PRINT("[ERROR: Truncated IE data]");
+ return -1;
+ }
+ if (ndo->ndo_vflag > 3 && ie_len != 0) {
+ switch (group_id) {
+ case 0x1: /* MLME IE */
+ ieee802_15_4_print_mlme_ie_list(ndo, p, ie_len);
+ break;
+ case 0x2: /* Vendor Specific Nested IE */
+ if (ie_len < 3) {
+ ND_PRINT("[ERROR: Vendor OUI missing]");
+ } else {
+ ND_PRINT("OUI = 0x%02x%02x%02x, ",
+ GET_U_1(p),
+ GET_U_1(p + 1),
+ GET_U_1(p + 2));
+ ND_PRINT("Data = ");
+ for(i = 3; i < ie_len; i++) {
+ ND_PRINT("%02x ",
+ GET_U_1(p + i));
+ }
+ }
+ break;
+ case 0x3: /* Multiplexed IE (802.15.9) */
+ ieee802_15_4_print_mpx_ie(ndo, p, ie_len);
+ break;
+ case 0x5: /* IETF IE */
+ if (ie_len < 1) {
+ ND_PRINT("[ERROR: Subtype ID missing]");
+ } else {
+ ND_PRINT("Subtype ID = 0x%02x, Subtype content = ",
+ GET_U_1(p));
+ for(i = 1; i < ie_len; i++) {
+ ND_PRINT("%02x ",
+ GET_U_1(p + i));
+ }
+ }
+ break;
+ default:
+ ND_PRINT("IE Data = ");
+ for(i = 0; i < ie_len; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + i));
+ }
+ break;
+ }
+ } else {
+ if (ie_len != 0) {
+ ND_PRINT("IE Data = ");
+ for(i = 0; i < ie_len; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + i));
+ }
+ }
+ }
+ ND_PRINT("]\n\t");
+ len += 2 + ie_len;
+ p += ie_len;
+ caplen -= 2 + ie_len;
+ if (group_id == 0xf) {
+ break;
+ }
+ } while (caplen > 0);
+ return len;
+}
+
+/*
+ * Parse and print auxiliary security header.
+ *
+ * Returns number of byts consumed from the packet or -1 in case of error.
+ */
+static int
+ieee802_15_4_print_aux_sec_header(netdissect_options *ndo,
+ const u_char *p,
+ u_int caplen,
+ int *security_level)
+{
+ int sc, key_id_mode, len;
+
+ if (caplen < 1) {
+ ND_PRINT("[ERROR: Truncated before Aux Security Header]");
+ return -1;
+ }
+ sc = GET_U_1(p);
+ len = 1;
+ *security_level = sc & 0x7;
+ key_id_mode = (sc >> 3) & 0x3;
+
+ caplen -= 1;
+ p += 1;
+
+ if (ndo->ndo_vflag > 0) {
+ ND_PRINT("\n\tSecurity Level %d, Key Id Mode %d, ",
+ *security_level, key_id_mode);
+ }
+ if ((CHECK_BIT(sc, 5)) == 0) {
+ if (caplen < 4) {
+ ND_PRINT("[ERROR: Truncated before Frame Counter]");
+ return -1;
+ }
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT("Frame Counter 0x%08x ",
+ GET_LE_U_4(p));
+ }
+ p += 4;
+ caplen -= 4;
+ len += 4;
+ }
+ switch (key_id_mode) {
+ case 0x00: /* Implicit. */
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT("Implicit");
+ }
+ return len;
+ break;
+ case 0x01: /* Key Index, nothing to print here. */
+ break;
+ case 0x02: /* PAN and Short address Key Source, and Key Index. */
+ if (caplen < 4) {
+ ND_PRINT("[ERROR: Truncated before Key Source]");
+ return -1;
+ }
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT("KeySource 0x%04x:%0x4x, ",
+ GET_LE_U_2(p), GET_LE_U_2(p + 2));
+ }
+ p += 4;
+ caplen -= 4;
+ len += 4;
+ break;
+ case 0x03: /* Extended address and Key Index. */
+ if (caplen < 8) {
+ ND_PRINT("[ERROR: Truncated before Key Source]");
+ return -1;
+ }
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT("KeySource %s, ", GET_LE64ADDR_STRING(p));
+ }
+ p += 4;
+ caplen -= 4;
+ len += 4;
+ break;
+ }
+ if (caplen < 1) {
+ ND_PRINT("[ERROR: Truncated before Key Index]");
+ return -1;
+ }
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT("KeyIndex 0x%02x, ", GET_U_1(p));
+ }
+ caplen -= 1;
+ p += 1;
+ len += 1;
+ return len;
+}
+
+/*
+ * Print command data.
+ *
+ * Returns number of byts consumed from the packet or -1 in case of error.
+ */
+static int
+ieee802_15_4_print_command_data(netdissect_options *ndo,
+ uint8_t command_id,
+ const u_char *p,
+ u_int caplen)
+{
+ u_int i;
+
+ switch (command_id) {
+ case 0x01: /* Association Request */
+ if (caplen != 1) {
+ ND_PRINT("Invalid Association request command length");
+ return -1;
+ } else {
+ uint8_t cap_info;
+ cap_info = GET_U_1(p);
+ ND_PRINT("%s%s%s%s%s%s",
+ ((cap_info & 0x02) ?
+ "FFD, " : "RFD, "),
+ ((cap_info & 0x04) ?
+ "AC powered, " : ""),
+ ((cap_info & 0x08) ?
+ "Receiver on when idle, " : ""),
+ ((cap_info & 0x10) ?
+ "Fast association, " : ""),
+ ((cap_info & 0x40) ?
+ "Security supported, " : ""),
+ ((cap_info & 0x80) ?
+ "Allocate address, " : ""));
+ return caplen;
+ }
+ break;
+ case 0x02: /* Association Response */
+ if (caplen != 3) {
+ ND_PRINT("Invalid Association response command length");
+ return -1;
+ } else {
+ ND_PRINT("Short address = ");
+ ieee802_15_4_print_addr(ndo, p, 2);
+ switch (GET_U_1(p + 2)) {
+ case 0x00:
+ ND_PRINT(", Association successful");
+ break;
+ case 0x01:
+ ND_PRINT(", PAN at capacity");
+ break;
+ case 0x02:
+ ND_PRINT(", PAN access denied");
+ break;
+ case 0x03:
+ ND_PRINT(", Hooping sequence offset duplication");
+ break;
+ case 0x80:
+ ND_PRINT(", Fast association successful");
+ break;
+ default:
+ ND_PRINT(", Status = 0x%02x",
+ GET_U_1(p + 2));
+ break;
+ }
+ return caplen;
+ }
+ break;
+ case 0x03: /* Diassociation Notification command */
+ if (caplen != 1) {
+ ND_PRINT("Invalid Disassociation Notification command length");
+ return -1;
+ } else {
+ switch (GET_U_1(p)) {
+ case 0x00:
+ ND_PRINT("Reserved");
+ break;
+ case 0x01:
+ ND_PRINT("Reason = The coordinator wishes the device to leave PAN");
+ break;
+ case 0x02:
+ ND_PRINT("Reason = The device wishes to leave the PAN");
+ break;
+ default:
+ ND_PRINT("Reason = 0x%02x", GET_U_1(p + 2));
+ break;
+ }
+ return caplen;
+ }
+
+ /* Following ones do not have any data. */
+ case 0x04: /* Data Request command */
+ case 0x05: /* PAN ID Conflict Notification command */
+ case 0x06: /* Orphan Notification command */
+ case 0x07: /* Beacon Request command */
+ /* Should not have any data. */
+ return 0;
+ case 0x08: /* Coordinator Realignment command */
+ if (caplen < 7 || caplen > 8) {
+ ND_PRINT("Invalid Coordinator Realignment command length");
+ return -1;
+ } else {
+ uint16_t channel, page;
+
+ ND_PRINT("Pan ID = 0x%04x, Coordinator short address = ",
+ GET_LE_U_2(p));
+ ieee802_15_4_print_addr(ndo, p + 2, 2);
+ channel = GET_U_1(p + 4);
+
+ if (caplen == 8) {
+ page = GET_U_1(p + 7);
+ } else {
+ page = 0x80;
+ }
+ if (CHECK_BIT(page, 7)) {
+ /* No page present, instead we have msb of
+ channel in the page. */
+ channel |= (page & 0x7f) << 8;
+ ND_PRINT(", Channel Number = %d", channel);
+ } else {
+ ND_PRINT(", Channel Number = %d, page = %d",
+ channel, page);
+ }
+ ND_PRINT(", Short address = ");
+ ieee802_15_4_print_addr(ndo, p + 5, 2);
+ return caplen;
+ }
+ break;
+ case 0x09: /* GTS Request command */
+ if (caplen != 1) {
+ ND_PRINT("Invalid GTS Request command length");
+ return -1;
+ } else {
+ uint8_t gts;
+
+ gts = GET_U_1(p);
+ ND_PRINT("GTS Length = %d, %s, %s",
+ gts & 0xf,
+ (CHECK_BIT(gts, 4) ?
+ "Receive-only GTS" : "Transmit-only GTS"),
+ (CHECK_BIT(gts, 5) ?
+ "GTS allocation" : "GTS deallocations"));
+ return caplen;
+ }
+ break;
+ case 0x13: /* DSME Association Request command */
+ /* XXX Not implemented */
+ case 0x14: /* DSME Association Response command */
+ /* XXX Not implemented */
+ case 0x15: /* DSME GTS Request command */
+ /* XXX Not implemented */
+ case 0x16: /* DSME GTS Response command */
+ /* XXX Not implemented */
+ case 0x17: /* DSME GTS Notify command */
+ /* XXX Not implemented */
+ case 0x18: /* DSME Information Request command */
+ /* XXX Not implemented */
+ case 0x19: /* DSME Information Response command */
+ /* XXX Not implemented */
+ case 0x1a: /* DSME Beacon Allocation Notification command */
+ /* XXX Not implemented */
+ case 0x1b: /* DSME Beacon Collision Notification command */
+ /* XXX Not implemented */
+ case 0x1c: /* DSME Link Report command */
+ /* XXX Not implemented */
+ case 0x20: /* RIT Data Request command */
+ /* XXX Not implemented */
+ case 0x21: /* DBS Request command */
+ /* XXX Not implemented */
+ case 0x22: /* DBS Response command */
+ /* XXX Not implemented */
+ case 0x23: /* RIT Data Response command */
+ /* XXX Not implemented */
+ case 0x24: /* Vendor Specific command */
+ /* XXX Not implemented */
+ case 0x0a: /* TRLE Management Request command */
+ /* XXX Not implemented */
+ case 0x0b: /* TRLE Management Response command */
+ /* XXX Not implemented */
+ default:
+ ND_PRINT("Command Data = ");
+ for(i = 0; i < caplen; i++) {
+ ND_PRINT("%02x ", GET_U_1(p + i));
+ }
+ break;
+ }
+ return 0;
+}
+
+/*
+ * Parse and print frames following standard format.
+ *
+ * Returns FALSE in case of error.
+ */
+static u_int
+ieee802_15_4_std_frames(netdissect_options *ndo,
+ const u_char *p, u_int caplen,
+ uint16_t fc)
+{
+ int len, frame_version, pan_id_comp;
+ int frame_type;
+ int src_pan, dst_pan, src_addr_len, dst_addr_len;
+ int security_level;
+ u_int miclen = 0;
+ int payload_ie_present;
+ uint8_t seq;
+ uint32_t fcs, crc_check;
+ const u_char *mic_start = NULL;
+
+ payload_ie_present = 0;
+
+ crc_check = 0;
+ /* Assume 2 octet FCS, the FCS length depends on the PHY, and we do not
+ know about that. */
+ if (caplen < 4) {
+ /* Cannot have FCS, assume no FCS. */
+ fcs = 0;
+ } else {
+ /* Test for 4 octet FCS. */
+ fcs = GET_LE_U_4(p + caplen - 4);
+ crc_check = ieee802_15_4_crc32(ndo, p, caplen - 4);
+ if (crc_check == fcs) {
+ /* Remove FCS */
+ caplen -= 4;
+ } else {
+ /* Test for 2 octet FCS. */
+ fcs = GET_LE_U_2(p + caplen - 2);
+ crc_check = ieee802_15_4_crc16(ndo, p, caplen - 2);
+ if (crc_check == fcs) {
+ /* Remove FCS */
+ caplen -= 2;
+ } else {
+ /* Wrong FCS, FCS might not be included in the
+ captured frame, do not remove it. */
+ }
+ }
+ }
+
+ /* Frame version. */
+ frame_version = FC_FRAME_VERSION(fc);
+ frame_type = FC_FRAME_TYPE(fc);
+ ND_PRINT("v%d ", frame_version);
+
+ if (ndo->ndo_vflag > 2) {
+ if (CHECK_BIT(fc, 3)) { ND_PRINT("Security Enabled, "); }
+ if (CHECK_BIT(fc, 4)) { ND_PRINT("Frame Pending, "); }
+ if (CHECK_BIT(fc, 5)) { ND_PRINT("AR, "); }
+ if (CHECK_BIT(fc, 6)) { ND_PRINT("PAN ID Compression, "); }
+ if (CHECK_BIT(fc, 8)) { ND_PRINT("Sequence Number Suppression, "); }
+ if (CHECK_BIT(fc, 9)) { ND_PRINT("IE present, "); }
+ }
+
+ /* Check for the sequence number suppression. */
+ if (CHECK_BIT(fc, 8)) {
+ /* Sequence number is suppressed. */
+ if (frame_version < 2) {
+ /* Sequence number can only be suppressed for frame
+ version 2 or higher, this is invalid frame. */
+ ND_PRINT("[ERROR: Sequence number suppressed on frames where version < 2]");
+ }
+ if (ndo->ndo_vflag)
+ ND_PRINT("seq suppressed ");
+ if (caplen < 2) {
+ nd_print_trunc(ndo);
+ return 0;
+ }
+ p += 2;
+ caplen -= 2;
+ } else {
+ seq = GET_U_1(p + 2);
+ if (ndo->ndo_vflag)
+ ND_PRINT("seq %02x ", seq);
+ if (caplen < 3) {
+ nd_print_trunc(ndo);
+ return 0;
+ }
+ p += 3;
+ caplen -= 3;
+ }
+
+ /* See which parts of addresses we have. */
+ dst_addr_len = ieee802_15_4_addr_len((fc >> 10) & 0x3);
+ src_addr_len = ieee802_15_4_addr_len((fc >> 14) & 0x3);
+ if (src_addr_len < 0) {
+ ND_PRINT("[ERROR: Invalid src address mode]");
+ return 0;
+ }
+ if (dst_addr_len < 0) {
+ ND_PRINT("[ERROR: Invalid dst address mode]");
+ return 0;
+ }
+ src_pan = 0;
+ dst_pan = 0;
+ pan_id_comp = CHECK_BIT(fc, 6);
+
+ /* The PAN ID Compression rules are complicated. */
+
+ /* First check old versions, where the rules are simple. */
+ if (frame_version < 2) {
+ if (pan_id_comp) {
+ src_pan = 0;
+ dst_pan = 1;
+ if (dst_addr_len <= 0 || src_addr_len <= 0) {
+ /* Invalid frame, PAN ID Compression must be 0
+ if only one address in the frame. */
+ ND_PRINT("[ERROR: PAN ID Compression != 0, and only one address with frame version < 2]");
+ }
+ } else {
+ src_pan = 1;
+ dst_pan = 1;
+ }
+ if (dst_addr_len <= 0) {
+ dst_pan = 0;
+ }
+ if (src_addr_len <= 0) {
+ src_pan = 0;
+ }
+ } else {
+ /* Frame version 2 rules are more complicated, and they depend
+ on the address modes of the frame, generic rules are same,
+ but then there are some special cases. */
+ if (pan_id_comp) {
+ src_pan = 0;
+ dst_pan = 1;
+ } else {
+ src_pan = 1;
+ dst_pan = 1;
+ }
+ if (dst_addr_len <= 0) {
+ dst_pan = 0;
+ }
+ if (src_addr_len <= 0) {
+ src_pan = 0;
+ }
+ if (pan_id_comp) {
+ if (src_addr_len == 0 &&
+ dst_addr_len == 0) {
+ /* Both addresses are missing, but PAN ID
+ compression set, special case we have
+ destination PAN but no addresses. */
+ dst_pan = 1;
+ } else if ((src_addr_len == 0 &&
+ dst_addr_len > 0) ||
+ (src_addr_len > 0 &&
+ dst_addr_len == 0)) {
+ /* Only one address present, and PAN ID
+ compression is set, we do not have PAN id at
+ all. */
+ dst_pan = 0;
+ src_pan = 0;
+ } else if (src_addr_len == 8 &&
+ dst_addr_len == 8) {
+ /* Both addresses are Extended, and PAN ID
+ compression set, we do not have PAN ID at
+ all. */
+ dst_pan = 0;
+ src_pan = 0;
+ }
+ } else {
+ /* Special cases where PAN ID Compression is not set. */
+ if (src_addr_len == 8 &&
+ dst_addr_len == 8) {
+ /* Both addresses are Extended, and PAN ID
+ compression not set, we do have only one PAN
+ ID (destination). */
+ dst_pan = 1;
+ src_pan = 0;
+ }
+#ifdef BROKEN_6TISCH_PAN_ID_COMPRESSION
+ if (src_addr_len == 8 &&
+ dst_addr_len == 2) {
+ /* Special case for the broken 6tisch
+ implementations. */
+ src_pan = 0;
+ }
+#endif /* BROKEN_6TISCH_PAN_ID_COMPRESSION */
+ }
+ }
+
+ /* Print dst PAN and address. */
+ if (dst_pan) {
+ if (caplen < 2) {
+ ND_PRINT("[ERROR: Truncated before dst_pan]");
+ return 0;
+ }
+ ND_PRINT("%04x:", GET_LE_U_2(p));
+ p += 2;
+ caplen -= 2;
+ } else {
+ ND_PRINT("-:");
+ }
+ if (caplen < (u_int) dst_addr_len) {
+ ND_PRINT("[ERROR: Truncated before dst_addr]");
+ return 0;
+ }
+ ieee802_15_4_print_addr(ndo, p, dst_addr_len);
+ p += dst_addr_len;
+ caplen -= dst_addr_len;
+
+ ND_PRINT(" < ");
+
+ /* Print src PAN and address. */
+ if (src_pan) {
+ if (caplen < 2) {
+ ND_PRINT("[ERROR: Truncated before dst_pan]");
+ return 0;
+ }
+ ND_PRINT("%04x:", GET_LE_U_2(p));
+ p += 2;
+ caplen -= 2;
+ } else {
+ ND_PRINT("-:");
+ }
+ if (caplen < (u_int) src_addr_len) {
+ ND_PRINT("[ERROR: Truncated before dst_addr]");
+ return 0;
+ }
+ ieee802_15_4_print_addr(ndo, p, src_addr_len);
+ ND_PRINT(" ");
+ p += src_addr_len;
+ caplen -= src_addr_len;
+ if (CHECK_BIT(fc, 3)) {
+ /*
+ * XXX - if frame_version is 0, this is the 2003
+ * spec, and you don't have the auxiliary security
+ * header, you have a frame counter and key index
+ * for the AES-CTR and AES-CCM security suites but
+ * not for the AES-CBC-MAC security suite.
+ */
+ len = ieee802_15_4_print_aux_sec_header(ndo, p, caplen,
+ &security_level);
+ if (len < 0) {
+ return 0;
+ }
+ ND_TCHECK_LEN(p, len);
+ p += len;
+ caplen -= len;
+ } else {
+ security_level = 0;
+ }
+
+ switch (security_level) {
+ case 0: /*FALLTHOUGH */
+ case 4:
+ miclen = 0;
+ break;
+ case 1: /*FALLTHOUGH */
+ case 5:
+ miclen = 4;
+ break;
+ case 2: /*FALLTHOUGH */
+ case 6:
+ miclen = 8;
+ break;
+ case 3: /*FALLTHOUGH */
+ case 7:
+ miclen = 16;
+ break;
+ }
+
+ /* Remove MIC */
+ if (miclen != 0) {
+ if (caplen < miclen) {
+ ND_PRINT("[ERROR: Truncated before MIC]");
+ return 0;
+ }
+ caplen -= miclen;
+ mic_start = p + caplen;
+ }
+
+ /* Parse Information elements if present */
+ if (CHECK_BIT(fc, 9)) {
+ /* Yes we have those. */
+ len = ieee802_15_4_print_header_ie_list(ndo, p, caplen,
+ &payload_ie_present);
+ if (len < 0) {
+ return 0;
+ }
+ p += len;
+ caplen -= len;
+ }
+
+ if (payload_ie_present) {
+ if (security_level >= 4) {
+ ND_PRINT("Payload IEs present, but encrypted, cannot print ");
+ } else {
+ len = ieee802_15_4_print_payload_ie_list(ndo, p, caplen);
+ if (len < 0) {
+ return 0;
+ }
+ p += len;
+ caplen -= len;
+ }
+ }
+
+ /* Print MIC */
+ if (ndo->ndo_vflag > 2 && miclen != 0) {
+ ND_PRINT("\n\tMIC ");
+
+ for (u_int micoffset = 0; micoffset < miclen; micoffset++) {
+ ND_PRINT("%02x", GET_U_1(mic_start + micoffset));
+ }
+ ND_PRINT(" ");
+ }
+
+ /* Print FCS */
+ if (ndo->ndo_vflag > 2) {
+ if (crc_check == fcs) {
+ ND_PRINT("FCS %x ", fcs);
+ } else {
+ ND_PRINT("wrong FCS %x vs %x (assume no FCS stored) ",
+ fcs, crc_check);
+ }
+ }
+
+ /* Payload print */
+ switch (frame_type) {
+ case 0x00: /* Beacon */
+ if (frame_version < 2) {
+ if (caplen < 2) {
+ ND_PRINT("[ERROR: Truncated before beacon information]");
+ break;
+ } else {
+ uint16_t ss;
+
+ ss = GET_LE_U_2(p);
+ ieee802_15_4_print_superframe_specification(ndo, ss);
+ p += 2;
+ caplen -= 2;
+
+ /* GTS */
+ if (caplen < 1) {
+ ND_PRINT("[ERROR: Truncated before GTS info]");
+ break;
+ }
+
+ len = ieee802_15_4_print_gts_info(ndo, p, caplen);
+ if (len < 0) {
+ break;
+ }
+
+ p += len;
+ caplen -= len;
+
+ /* Pending Addresses */
+ if (caplen < 1) {
+ ND_PRINT("[ERROR: Truncated before pending addresses]");
+ break;
+ }
+ len = ieee802_15_4_print_pending_addresses(ndo, p, caplen);
+ if (len < 0) {
+ break;
+ }
+ ND_TCHECK_LEN(p, len);
+ p += len;
+ caplen -= len;
+ }
+ }
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+
+ break;
+ case 0x01: /* Data */
+ case 0x02: /* Acknowledgement */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ break;
+ case 0x03: /* MAC Command */
+ if (caplen < 1) {
+ ND_PRINT("[ERROR: Truncated before Command ID]");
+ } else {
+ uint8_t command_id;
+
+ command_id = GET_U_1(p);
+ if (command_id >= 0x30) {
+ ND_PRINT("Command ID = Reserved 0x%02x ",
+ command_id);
+ } else {
+ ND_PRINT("Command ID = %s ",
+ mac_c_names[command_id]);
+ }
+ p++;
+ caplen--;
+ if (caplen != 0) {
+ len = ieee802_15_4_print_command_data(ndo, command_id, p, caplen);
+ if (len >= 0) {
+ p += len;
+ caplen -= len;
+ }
+ }
+ }
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ break;
+ }
+ return 1;
+}
+
+/*
+ * Print and parse Multipurpose frames.
+ *
+ * Returns FALSE in case of error.
+ */
+static u_int
+ieee802_15_4_mp_frame(netdissect_options *ndo,
+ const u_char *p, u_int caplen,
+ uint16_t fc)
+{
+ int len, frame_version, pan_id_present;
+ int src_addr_len, dst_addr_len;
+ int security_level;
+ u_int miclen = 0;
+ int ie_present, payload_ie_present, security_enabled;
+ uint8_t seq;
+ uint32_t fcs, crc_check;
+ const u_char *mic_start = NULL;
+
+ pan_id_present = 0;
+ ie_present = 0;
+ payload_ie_present = 0;
+ security_enabled = 0;
+ crc_check = 0;
+
+ /* Assume 2 octet FCS, the FCS length depends on the PHY, and we do not
+ know about that. */
+ if (caplen < 3) {
+ /* Cannot have FCS, assume no FCS. */
+ fcs = 0;
+ } else {
+ if (caplen > 4) {
+ /* Test for 4 octet FCS. */
+ fcs = GET_LE_U_4(p + caplen - 4);
+ crc_check = ieee802_15_4_crc32(ndo, p, caplen - 4);
+ if (crc_check == fcs) {
+ /* Remove FCS */
+ caplen -= 4;
+ } else {
+ fcs = GET_LE_U_2(p + caplen - 2);
+ crc_check = ieee802_15_4_crc16(ndo, p, caplen - 2);
+ if (crc_check == fcs) {
+ /* Remove FCS */
+ caplen -= 2;
+ }
+ }
+ } else {
+ fcs = GET_LE_U_2(p + caplen - 2);
+ crc_check = ieee802_15_4_crc16(ndo, p, caplen - 2);
+ if (crc_check == fcs) {
+ /* Remove FCS */
+ caplen -= 2;
+ }
+ }
+ }
+
+ if (CHECK_BIT(fc, 3)) {
+ /* Long Frame Control */
+
+ /* Frame version. */
+ frame_version = FC_FRAME_VERSION(fc);
+ ND_PRINT("v%d ", frame_version);
+
+ pan_id_present = CHECK_BIT(fc, 8);
+ ie_present = CHECK_BIT(fc, 15);
+ security_enabled = CHECK_BIT(fc, 9);
+
+ if (ndo->ndo_vflag > 2) {
+ if (security_enabled) { ND_PRINT("Security Enabled, "); }
+ if (CHECK_BIT(fc, 11)) { ND_PRINT("Frame Pending, "); }
+ if (CHECK_BIT(fc, 14)) { ND_PRINT("AR, "); }
+ if (pan_id_present) { ND_PRINT("PAN ID Present, "); }
+ if (CHECK_BIT(fc, 10)) {
+ ND_PRINT("Sequence Number Suppression, ");
+ }
+ if (ie_present) { ND_PRINT("IE present, "); }
+ }
+
+ /* Check for the sequence number suppression. */
+ if (CHECK_BIT(fc, 10)) {
+ /* Sequence number is suppressed, but long version. */
+ if (caplen < 2) {
+ nd_print_trunc(ndo);
+ return 0;
+ }
+ p += 2;
+ caplen -= 2;
+ } else {
+ seq = GET_U_1(p + 2);
+ if (ndo->ndo_vflag)
+ ND_PRINT("seq %02x ", seq);
+ if (caplen < 3) {
+ nd_print_trunc(ndo);
+ return 0;
+ }
+ p += 3;
+ caplen -= 3;
+ }
+ } else {
+ /* Short format of header, but with seq no */
+ seq = GET_U_1(p + 1);
+ p += 2;
+ caplen -= 2;
+ if (ndo->ndo_vflag)
+ ND_PRINT("seq %02x ", seq);
+ }
+
+ /* See which parts of addresses we have. */
+ dst_addr_len = ieee802_15_4_addr_len((fc >> 4) & 0x3);
+ src_addr_len = ieee802_15_4_addr_len((fc >> 6) & 0x3);
+ if (src_addr_len < 0) {
+ ND_PRINT("[ERROR: Invalid src address mode]");
+ return 0;
+ }
+ if (dst_addr_len < 0) {
+ ND_PRINT("[ERROR: Invalid dst address mode]");
+ return 0;
+ }
+
+ /* Print dst PAN and address. */
+ if (pan_id_present) {
+ if (caplen < 2) {
+ ND_PRINT("[ERROR: Truncated before dst_pan]");
+ return 0;
+ }
+ ND_PRINT("%04x:", GET_LE_U_2(p));
+ p += 2;
+ caplen -= 2;
+ } else {
+ ND_PRINT("-:");
+ }
+ if (caplen < (u_int) dst_addr_len) {
+ ND_PRINT("[ERROR: Truncated before dst_addr]");
+ return 0;
+ }
+ ieee802_15_4_print_addr(ndo, p, dst_addr_len);
+ p += dst_addr_len;
+ caplen -= dst_addr_len;
+
+ ND_PRINT(" < ");
+
+ /* Print src PAN and address. */
+ ND_PRINT(" -:");
+ if (caplen < (u_int) src_addr_len) {
+ ND_PRINT("[ERROR: Truncated before dst_addr]");
+ return 0;
+ }
+ ieee802_15_4_print_addr(ndo, p, src_addr_len);
+ ND_PRINT(" ");
+ p += src_addr_len;
+ caplen -= src_addr_len;
+
+ if (security_enabled) {
+ len = ieee802_15_4_print_aux_sec_header(ndo, p, caplen,
+ &security_level);
+ if (len < 0) {
+ return 0;
+ }
+ ND_TCHECK_LEN(p, len);
+ p += len;
+ caplen -= len;
+ } else {
+ security_level = 0;
+ }
+
+ switch (security_level) {
+ case 0: /*FALLTHOUGH */
+ case 4:
+ miclen = 0;
+ break;
+ case 1: /*FALLTHOUGH */
+ case 5:
+ miclen = 4;
+ break;
+ case 2: /*FALLTHOUGH */
+ case 6:
+ miclen = 8;
+ break;
+ case 3: /*FALLTHOUGH */
+ case 7:
+ miclen = 16;
+ break;
+ }
+
+ /* Remove MIC */
+ if (miclen != 0) {
+ if (caplen < miclen) {
+ ND_PRINT("[ERROR: Truncated before MIC]");
+ return 0;
+ }
+ caplen -= miclen;
+ mic_start = p + caplen;
+ }
+
+ /* Parse Information elements if present */
+ if (ie_present) {
+ /* Yes we have those. */
+ len = ieee802_15_4_print_header_ie_list(ndo, p, caplen,
+ &payload_ie_present);
+ if (len < 0) {
+ return 0;
+ }
+ p += len;
+ caplen -= len;
+ }
+
+ if (payload_ie_present) {
+ if (security_level >= 4) {
+ ND_PRINT("Payload IEs present, but encrypted, cannot print ");
+ } else {
+ len = ieee802_15_4_print_payload_ie_list(ndo, p,
+ caplen);
+ if (len < 0) {
+ return 0;
+ }
+ p += len;
+ caplen -= len;
+ }
+ }
+
+ /* Print MIC */
+ if (ndo->ndo_vflag > 2 && miclen != 0) {
+ ND_PRINT("\n\tMIC ");
+
+ for (u_int micoffset = 0; micoffset < miclen; micoffset++) {
+ ND_PRINT("%02x", GET_U_1(mic_start + micoffset));
+ }
+ ND_PRINT(" ");
+ }
+
+
+ /* Print FCS */
+ if (ndo->ndo_vflag > 2) {
+ if (crc_check == fcs) {
+ ND_PRINT("FCS %x ", fcs);
+ } else {
+ ND_PRINT("wrong FCS %x vs %x (assume no FCS stored) ",
+ fcs, crc_check);
+ }
+ }
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+
+ return 1;
+}
+
+/*
+ * Print frag frame.
+ *
+ * Returns FALSE in case of error.
+ */
+static u_int
+ieee802_15_4_frag_frame(netdissect_options *ndo _U_,
+ const u_char *p _U_,
+ u_int caplen _U_,
+ uint16_t fc _U_)
+{
+ /* Not implement yet, might be bit hard to implement, as the
+ * information to set up the fragment is coming in the previous frame
+ * in the Fragment Sequence Context Description IE, thus we need to
+ * store information from there, so we can use it here. */
+ return 0;
+}
+
+/*
+ * Internal call to dissector taking packet + len instead of pcap_pkthdr.
+ *
+ * Returns FALSE in case of error.
+ */
+u_int
+ieee802_15_4_print(netdissect_options *ndo,
+ const u_char *p, u_int caplen)
+{
+ int frame_type;
+ uint16_t fc;
+
+ ndo->ndo_protocol = "802.15.4";
+
+ if (caplen < 2) {
+ nd_print_trunc(ndo);
+ return caplen;
+ }
+
+ fc = GET_LE_U_2(p);
+
+ /* First we need to check the frame type to know how to parse the rest
+ of the FC. Frame type is the first 3 bit of the frame control field.
+ */
+
+ frame_type = FC_FRAME_TYPE(fc);
+ ND_PRINT("IEEE 802.15.4 %s packet ", ftypes[frame_type]);
+
+ switch (frame_type) {
+ case 0x00: /* Beacon */
+ case 0x01: /* Data */
+ case 0x02: /* Acknowledgement */
+ case 0x03: /* MAC Command */
+ return ieee802_15_4_std_frames(ndo, p, caplen, fc);
+ break;
+ case 0x04: /* Reserved */
+ return 0;
+ break;
+ case 0x05: /* Multipurpose */
+ return ieee802_15_4_mp_frame(ndo, p, caplen, fc);
+ break;
+ case 0x06: /* Fragment or Frak */
+ return ieee802_15_4_frag_frame(ndo, p, caplen, fc);
+ break;
+ case 0x07: /* Extended */
+ return 0;
+ break;
+ }
+ return 0;
+}
+
+/*
+ * Main function to print packets.
+ */
+
+void
+ieee802_15_4_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ ndo->ndo_protocol = "802.15.4";
+ ndo->ndo_ll_hdr_len += ieee802_15_4_print(ndo, p, caplen);
+}
+
+/* For DLT_IEEE802_15_4_TAP */
+/* https://github.com/jkcko/ieee802.15.4-tap */
+void
+ieee802_15_4_tap_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ uint8_t version;
+ uint16_t length;
+
+ ndo->ndo_protocol = "802.15.4_tap";
+ if (h->caplen < 4) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += h->caplen;
+ return;
+ }
+
+ version = GET_U_1(p);
+ length = GET_LE_U_2(p + 2);
+ if (version != 0 || length < 4) {
+ nd_print_invalid(ndo);
+ return;
+ }
+
+ if (h->caplen < length) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += h->caplen;
+ return;
+ }
+
+ ndo->ndo_ll_hdr_len += ieee802_15_4_print(ndo, p+length, h->caplen-length) + length;
+}
diff --git a/print-ah.c b/print-ah.c
new file mode 100644
index 0000000..a3d0554
--- /dev/null
+++ b/print-ah.c
@@ -0,0 +1,75 @@
+/* $NetBSD: print-ah.c,v 1.4 1996/05/20 00:41:16 fvdl Exp $ */
+
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IPSEC Authentication Header printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+#include "ah.h"
+
+int
+ah_print(netdissect_options *ndo, const u_char *bp)
+{
+ const struct ah *ah;
+ uint8_t ah_len;
+ u_int ah_hdr_len;
+ uint16_t reserved;
+ const u_char *p;
+
+ ndo->ndo_protocol = "ah";
+ ah = (const struct ah *)bp;
+
+ nd_print_protocol_caps(ndo);
+/*
+ * RFC4302
+ *
+ * 2.2. Payload Length
+ *
+ * This 8-bit field specifies the length of AH in 32-bit words (4-byte
+ * units), minus "2".
+ */
+ ah_len = GET_U_1(ah->ah_len);
+ ah_hdr_len = (ah_len + 2) * 4;
+
+ ND_PRINT("(");
+ if (ndo->ndo_vflag)
+ ND_PRINT("length=%u(%u-bytes),", ah_len, ah_hdr_len);
+ reserved = GET_BE_U_2(ah->ah_reserved);
+ if (reserved)
+ ND_PRINT("reserved=0x%x[MustBeZero],", reserved);
+ ND_PRINT("spi=0x%08x,", GET_BE_U_4(ah->ah_spi));
+ ND_PRINT("seq=0x%x,", GET_BE_U_4(ah->ah_seq));
+ ND_PRINT("icv=0x");
+ for (p = (const u_char *)(ah + 1); p < bp + ah_hdr_len; p++)
+ ND_PRINT("%02x", GET_U_1(p));
+ ND_PRINT("): ");
+
+ return ah_hdr_len;
+}
diff --git a/print-ahcp.c b/print-ahcp.c
new file mode 100644
index 0000000..d57edda
--- /dev/null
+++ b/print-ahcp.c
@@ -0,0 +1,384 @@
+/*
+ * Copyright (c) 2013 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: Ad Hoc Configuration Protocol (AHCP) printer */
+
+/* Based on draft-chroboczek-ahcp-00 and source code of ahcpd-0.53 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+
+#define AHCP_MAGIC_NUMBER 43
+#define AHCP_VERSION_1 1
+#define AHCP1_HEADER_FIX_LEN 24
+#define AHCP1_BODY_MIN_LEN 4
+
+#define AHCP1_MSG_DISCOVER 0
+#define AHCP1_MSG_OFFER 1
+#define AHCP1_MSG_REQUEST 2
+#define AHCP1_MSG_ACK 3
+#define AHCP1_MSG_NACK 4
+#define AHCP1_MSG_RELEASE 5
+
+static const struct tok ahcp1_msg_str[] = {
+ { AHCP1_MSG_DISCOVER, "Discover" },
+ { AHCP1_MSG_OFFER, "Offer" },
+ { AHCP1_MSG_REQUEST, "Request" },
+ { AHCP1_MSG_ACK, "Ack" },
+ { AHCP1_MSG_NACK, "Nack" },
+ { AHCP1_MSG_RELEASE, "Release" },
+ { 0, NULL }
+};
+
+#define AHCP1_OPT_PAD 0
+#define AHCP1_OPT_MANDATORY 1
+#define AHCP1_OPT_ORIGIN_TIME 2
+#define AHCP1_OPT_EXPIRES 3
+#define AHCP1_OPT_MY_IPV6_ADDRESS 4
+#define AHCP1_OPT_MY_IPV4_ADDRESS 5
+#define AHCP1_OPT_IPV6_PREFIX 6
+#define AHCP1_OPT_IPV4_PREFIX 7
+#define AHCP1_OPT_IPV6_ADDRESS 8
+#define AHCP1_OPT_IPV4_ADDRESS 9
+#define AHCP1_OPT_IPV6_PREFIX_DELEGATION 10
+#define AHCP1_OPT_IPV4_PREFIX_DELEGATION 11
+#define AHCP1_OPT_NAME_SERVER 12
+#define AHCP1_OPT_NTP_SERVER 13
+#define AHCP1_OPT_MAX 13
+
+static const struct tok ahcp1_opt_str[] = {
+ { AHCP1_OPT_PAD, "Pad" },
+ { AHCP1_OPT_MANDATORY, "Mandatory" },
+ { AHCP1_OPT_ORIGIN_TIME, "Origin Time" },
+ { AHCP1_OPT_EXPIRES, "Expires" },
+ { AHCP1_OPT_MY_IPV6_ADDRESS, "My-IPv6-Address" },
+ { AHCP1_OPT_MY_IPV4_ADDRESS, "My-IPv4-Address" },
+ { AHCP1_OPT_IPV6_PREFIX, "IPv6 Prefix" },
+ { AHCP1_OPT_IPV4_PREFIX, "IPv4 Prefix" },
+ { AHCP1_OPT_IPV6_ADDRESS, "IPv6 Address" },
+ { AHCP1_OPT_IPV4_ADDRESS, "IPv4 Address" },
+ { AHCP1_OPT_IPV6_PREFIX_DELEGATION, "IPv6 Prefix Delegation" },
+ { AHCP1_OPT_IPV4_PREFIX_DELEGATION, "IPv4 Prefix Delegation" },
+ { AHCP1_OPT_NAME_SERVER, "Name Server" },
+ { AHCP1_OPT_NTP_SERVER, "NTP Server" },
+ { 0, NULL }
+};
+
+static void
+ahcp_time_print(netdissect_options *ndo,
+ const u_char *cp, uint8_t len)
+{
+ time_t t;
+ char buf[sizeof("-yyyyyyyyyy-mm-dd hh:mm:ss UTC")];
+
+ if (len != 4)
+ goto invalid;
+ t = GET_BE_U_4(cp);
+ ND_PRINT(": %s",
+ nd_format_time(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S UTC",
+ gmtime(&t)));
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+ahcp_seconds_print(netdissect_options *ndo,
+ const u_char *cp, uint8_t len)
+{
+ if (len != 4)
+ goto invalid;
+ ND_PRINT(": %us", GET_BE_U_4(cp));
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+ahcp_ipv6_addresses_print(netdissect_options *ndo,
+ const u_char *cp, uint8_t len)
+{
+ const char *sep = ": ";
+
+ while (len) {
+ if (len < 16)
+ goto invalid;
+ ND_PRINT("%s%s", sep, GET_IP6ADDR_STRING(cp));
+ cp += 16;
+ len -= 16;
+ sep = ", ";
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+ahcp_ipv4_addresses_print(netdissect_options *ndo,
+ const u_char *cp, uint8_t len)
+{
+ const char *sep = ": ";
+
+ while (len) {
+ if (len < 4)
+ goto invalid;
+ ND_PRINT("%s%s", sep, GET_IPADDR_STRING(cp));
+ cp += 4;
+ len -= 4;
+ sep = ", ";
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+ahcp_ipv6_prefixes_print(netdissect_options *ndo,
+ const u_char *cp, uint8_t len)
+{
+ const char *sep = ": ";
+
+ while (len) {
+ if (len < 17)
+ goto invalid;
+ ND_PRINT("%s%s/%u", sep, GET_IP6ADDR_STRING(cp), GET_U_1(cp + 16));
+ cp += 17;
+ len -= 17;
+ sep = ", ";
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+ahcp_ipv4_prefixes_print(netdissect_options *ndo,
+ const u_char *cp, uint8_t len)
+{
+ const char *sep = ": ";
+
+ while (len) {
+ if (len < 5)
+ goto invalid;
+ ND_PRINT("%s%s/%u", sep, GET_IPADDR_STRING(cp), GET_U_1(cp + 4));
+ cp += 5;
+ len -= 5;
+ sep = ", ";
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+(* const data_decoders[AHCP1_OPT_MAX + 1])(netdissect_options *, const u_char *, uint8_t) = {
+ /* [AHCP1_OPT_PAD] = */ NULL,
+ /* [AHCP1_OPT_MANDATORY] = */ NULL,
+ /* [AHCP1_OPT_ORIGIN_TIME] = */ ahcp_time_print,
+ /* [AHCP1_OPT_EXPIRES] = */ ahcp_seconds_print,
+ /* [AHCP1_OPT_MY_IPV6_ADDRESS] = */ ahcp_ipv6_addresses_print,
+ /* [AHCP1_OPT_MY_IPV4_ADDRESS] = */ ahcp_ipv4_addresses_print,
+ /* [AHCP1_OPT_IPV6_PREFIX] = */ ahcp_ipv6_prefixes_print,
+ /* [AHCP1_OPT_IPV4_PREFIX] = */ NULL,
+ /* [AHCP1_OPT_IPV6_ADDRESS] = */ ahcp_ipv6_addresses_print,
+ /* [AHCP1_OPT_IPV4_ADDRESS] = */ ahcp_ipv4_addresses_print,
+ /* [AHCP1_OPT_IPV6_PREFIX_DELEGATION] = */ ahcp_ipv6_prefixes_print,
+ /* [AHCP1_OPT_IPV4_PREFIX_DELEGATION] = */ ahcp_ipv4_prefixes_print,
+ /* [AHCP1_OPT_NAME_SERVER] = */ ahcp_ipv6_addresses_print,
+ /* [AHCP1_OPT_NTP_SERVER] = */ ahcp_ipv6_addresses_print,
+};
+
+static void
+ahcp1_options_print(netdissect_options *ndo,
+ const u_char *cp, uint16_t len)
+{
+ while (len) {
+ uint8_t option_no, option_len;
+
+ /* Option no */
+ option_no = GET_U_1(cp);
+ cp += 1;
+ len -= 1;
+ ND_PRINT("\n\t %s", tok2str(ahcp1_opt_str, "Unknown-%u", option_no));
+ if (option_no == AHCP1_OPT_PAD || option_no == AHCP1_OPT_MANDATORY)
+ continue;
+ /* Length */
+ if (!len)
+ goto invalid;
+ option_len = GET_U_1(cp);
+ cp += 1;
+ len -= 1;
+ if (option_len > len)
+ goto invalid;
+ /* Value */
+ if (option_no <= AHCP1_OPT_MAX && data_decoders[option_no] != NULL) {
+ data_decoders[option_no](ndo, cp, option_len);
+ } else {
+ ND_PRINT(" (Length %u)", option_len);
+ ND_TCHECK_LEN(cp, option_len);
+ }
+ cp += option_len;
+ len -= option_len;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+ahcp1_body_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint8_t type, mbz;
+ uint16_t body_len;
+
+ if (len < AHCP1_BODY_MIN_LEN)
+ goto invalid;
+ /* Type */
+ type = GET_U_1(cp);
+ cp += 1;
+ len -= 1;
+ /* MBZ */
+ mbz = GET_U_1(cp);
+ cp += 1;
+ len -= 1;
+ /* Length */
+ body_len = GET_BE_U_2(cp);
+ cp += 2;
+ len -= 2;
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT("\n\t%s", tok2str(ahcp1_msg_str, "Unknown-%u", type));
+ if (mbz != 0)
+ ND_PRINT(", MBZ %u", mbz);
+ ND_PRINT(", Length %u", body_len);
+ }
+ if (body_len > len)
+ goto invalid;
+
+ /* Options */
+ /* Here use "body_len", not "len" (ignore any extra data). */
+ if (ndo->ndo_vflag >= 2)
+ ahcp1_options_print(ndo, cp, body_len);
+ else
+ ND_TCHECK_LEN(cp, body_len);
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+
+}
+
+void
+ahcp_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint8_t version;
+
+ ndo->ndo_protocol = "ahcp";
+ nd_print_protocol_caps(ndo);
+ if (len < 2)
+ goto invalid;
+ /* Magic */
+ if (GET_U_1(cp) != AHCP_MAGIC_NUMBER)
+ goto invalid;
+ cp += 1;
+ len -= 1;
+ /* Version */
+ version = GET_U_1(cp);
+ cp += 1;
+ len -= 1;
+ switch (version) {
+ case AHCP_VERSION_1: {
+ ND_PRINT(" Version 1");
+ if (len < AHCP1_HEADER_FIX_LEN - 2)
+ goto invalid;
+ if (!ndo->ndo_vflag) {
+ ND_TCHECK_LEN(cp, AHCP1_HEADER_FIX_LEN - 2);
+ cp += AHCP1_HEADER_FIX_LEN - 2;
+ len -= AHCP1_HEADER_FIX_LEN - 2;
+ } else {
+ /* Hopcount */
+ ND_PRINT("\n\tHopcount %u", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* Original Hopcount */
+ ND_PRINT(", Original Hopcount %u", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* Nonce */
+ ND_PRINT(", Nonce 0x%08x", GET_BE_U_4(cp));
+ cp += 4;
+ len -= 4;
+ /* Source Id */
+ ND_PRINT(", Source Id %s", GET_LINKADDR_STRING(cp, LINKADDR_OTHER, 8));
+ cp += 8;
+ len -= 8;
+ /* Destination Id */
+ ND_PRINT(", Destination Id %s", GET_LINKADDR_STRING(cp, LINKADDR_OTHER, 8));
+ cp += 8;
+ len -= 8;
+ }
+ /* Body */
+ ahcp1_body_print(ndo, cp, len);
+ break;
+ }
+ default:
+ ND_PRINT(" Version %u (unknown)", version);
+ ND_TCHECK_LEN(cp, len);
+ break;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
diff --git a/print-aodv.c b/print-aodv.c
new file mode 100644
index 0000000..9742143
--- /dev/null
+++ b/print-aodv.c
@@ -0,0 +1,537 @@
+/*
+ * Copyright (c) 2003 Bruce M. Simpson <bms@spc.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Bruce M. Simpson.
+ * 4. Neither the name of Bruce M. Simpson nor the names of co-
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Bruce M. Simpson AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Bruce M. Simpson OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: Ad hoc On-Demand Distance Vector (AODV) Routing printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+/*
+ * RFC 3561
+ */
+struct aodv_rreq {
+ nd_uint8_t rreq_type; /* AODV message type (1) */
+ nd_uint8_t rreq_flags; /* various flags */
+ nd_uint8_t rreq_zero0; /* reserved, set to zero */
+ nd_uint8_t rreq_hops; /* number of hops from originator */
+ nd_uint32_t rreq_id; /* request ID */
+ nd_ipv4 rreq_da; /* destination IPv4 address */
+ nd_uint32_t rreq_ds; /* destination sequence number */
+ nd_ipv4 rreq_oa; /* originator IPv4 address */
+ nd_uint32_t rreq_os; /* originator sequence number */
+};
+struct aodv_rreq6 {
+ nd_uint8_t rreq_type; /* AODV message type (1) */
+ nd_uint8_t rreq_flags; /* various flags */
+ nd_uint8_t rreq_zero0; /* reserved, set to zero */
+ nd_uint8_t rreq_hops; /* number of hops from originator */
+ nd_uint32_t rreq_id; /* request ID */
+ nd_ipv6 rreq_da; /* destination IPv6 address */
+ nd_uint32_t rreq_ds; /* destination sequence number */
+ nd_ipv6 rreq_oa; /* originator IPv6 address */
+ nd_uint32_t rreq_os; /* originator sequence number */
+};
+struct aodv_rreq6_draft_01 {
+ nd_uint8_t rreq_type; /* AODV message type (16) */
+ nd_uint8_t rreq_flags; /* various flags */
+ nd_uint8_t rreq_zero0; /* reserved, set to zero */
+ nd_uint8_t rreq_hops; /* number of hops from originator */
+ nd_uint32_t rreq_id; /* request ID */
+ nd_uint32_t rreq_ds; /* destination sequence number */
+ nd_uint32_t rreq_os; /* originator sequence number */
+ nd_ipv6 rreq_da; /* destination IPv6 address */
+ nd_ipv6 rreq_oa; /* originator IPv6 address */
+};
+
+#define RREQ_JOIN 0x80 /* join (reserved for multicast */
+#define RREQ_REPAIR 0x40 /* repair (reserved for multicast */
+#define RREQ_GRAT 0x20 /* gratuitous RREP */
+#define RREQ_DEST 0x10 /* destination only */
+#define RREQ_UNKNOWN 0x08 /* unknown destination sequence num */
+#define RREQ_FLAGS_MASK 0xF8 /* mask for rreq_flags */
+
+struct aodv_rrep {
+ nd_uint8_t rrep_type; /* AODV message type (2) */
+ nd_uint8_t rrep_flags; /* various flags */
+ nd_uint8_t rrep_ps; /* prefix size */
+ nd_uint8_t rrep_hops; /* number of hops from o to d */
+ nd_ipv4 rrep_da; /* destination IPv4 address */
+ nd_uint32_t rrep_ds; /* destination sequence number */
+ nd_ipv4 rrep_oa; /* originator IPv4 address */
+ nd_uint32_t rrep_life; /* lifetime of this route */
+};
+struct aodv_rrep6 {
+ nd_uint8_t rrep_type; /* AODV message type (2) */
+ nd_uint8_t rrep_flags; /* various flags */
+ nd_uint8_t rrep_ps; /* prefix size */
+ nd_uint8_t rrep_hops; /* number of hops from o to d */
+ nd_ipv6 rrep_da; /* destination IPv6 address */
+ nd_uint32_t rrep_ds; /* destination sequence number */
+ nd_ipv6 rrep_oa; /* originator IPv6 address */
+ nd_uint32_t rrep_life; /* lifetime of this route */
+};
+struct aodv_rrep6_draft_01 {
+ nd_uint8_t rrep_type; /* AODV message type (17) */
+ nd_uint8_t rrep_flags; /* various flags */
+ nd_uint8_t rrep_ps; /* prefix size */
+ nd_uint8_t rrep_hops; /* number of hops from o to d */
+ nd_uint32_t rrep_ds; /* destination sequence number */
+ nd_ipv6 rrep_da; /* destination IPv6 address */
+ nd_ipv6 rrep_oa; /* originator IPv6 address */
+ nd_uint32_t rrep_life; /* lifetime of this route */
+};
+
+#define RREP_REPAIR 0x80 /* repair (reserved for multicast */
+#define RREP_ACK 0x40 /* acknowledgement required */
+#define RREP_FLAGS_MASK 0xC0 /* mask for rrep_flags */
+#define RREP_PREFIX_MASK 0x1F /* mask for prefix size */
+
+struct rerr_unreach {
+ nd_ipv4 u_da; /* IPv4 address */
+ nd_uint32_t u_ds; /* sequence number */
+};
+struct rerr_unreach6 {
+ nd_ipv6 u_da; /* IPv6 address */
+ nd_uint32_t u_ds; /* sequence number */
+};
+struct rerr_unreach6_draft_01 {
+ nd_ipv6 u_da; /* IPv6 address */
+ nd_uint32_t u_ds; /* sequence number */
+};
+
+struct aodv_rerr {
+ nd_uint8_t rerr_type; /* AODV message type (3 or 18) */
+ nd_uint8_t rerr_flags; /* various flags */
+ nd_uint8_t rerr_zero0; /* reserved, set to zero */
+ nd_uint8_t rerr_dc; /* destination count */
+};
+
+#define RERR_NODELETE 0x80 /* don't delete the link */
+#define RERR_FLAGS_MASK 0x80 /* mask for rerr_flags */
+
+struct aodv_rrep_ack {
+ nd_uint8_t ra_type;
+ nd_uint8_t ra_zero0;
+};
+
+#define AODV_RREQ 1 /* route request */
+#define AODV_RREP 2 /* route response */
+#define AODV_RERR 3 /* error report */
+#define AODV_RREP_ACK 4 /* route response acknowledgement */
+
+#define AODV_V6_DRAFT_01_RREQ 16 /* IPv6 route request */
+#define AODV_V6_DRAFT_01_RREP 17 /* IPv6 route response */
+#define AODV_V6_DRAFT_01_RERR 18 /* IPv6 error report */
+#define AODV_V6_DRAFT_01_RREP_ACK 19 /* IPV6 route response acknowledgment */
+
+struct aodv_ext {
+ nd_uint8_t type; /* extension type */
+ nd_uint8_t length; /* extension length */
+};
+
+struct aodv_hello {
+ struct aodv_ext eh; /* extension header */
+ nd_uint32_t interval; /* expect my next hello in
+ * (n) ms
+ * NOTE: this is not aligned */
+};
+
+#define AODV_EXT_HELLO 1
+
+static void
+aodv_extension(netdissect_options *ndo,
+ const struct aodv_ext *ep, u_int length)
+{
+ const struct aodv_hello *ah;
+
+ ND_TCHECK_SIZE(ep);
+ switch (GET_U_1(ep->type)) {
+ case AODV_EXT_HELLO:
+ ah = (const struct aodv_hello *)(const void *)ep;
+ ND_TCHECK_SIZE(ah);
+ if (length < sizeof(struct aodv_hello))
+ goto trunc;
+ if (GET_U_1(ep->length) < 4) {
+ ND_PRINT("\n\text HELLO - bad length %u",
+ GET_U_1(ep->length));
+ break;
+ }
+ ND_PRINT("\n\text HELLO %u ms",
+ GET_BE_U_4(ah->interval));
+ break;
+
+ default:
+ ND_PRINT("\n\text %u %u", GET_U_1(ep->type),
+ GET_U_1(ep->length));
+ break;
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+aodv_rreq(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ u_int i;
+ const struct aodv_rreq *ap = (const struct aodv_rreq *)dat;
+
+ ND_TCHECK_SIZE(ap);
+ if (length < sizeof(*ap))
+ goto trunc;
+ ND_PRINT(" rreq %u %s%s%s%s%shops %u id 0x%08x\n"
+ "\tdst %s seq %u src %s seq %u", length,
+ GET_U_1(ap->rreq_type) & RREQ_JOIN ? "[J]" : "",
+ GET_U_1(ap->rreq_type) & RREQ_REPAIR ? "[R]" : "",
+ GET_U_1(ap->rreq_type) & RREQ_GRAT ? "[G]" : "",
+ GET_U_1(ap->rreq_type) & RREQ_DEST ? "[D]" : "",
+ GET_U_1(ap->rreq_type) & RREQ_UNKNOWN ? "[U] " : " ",
+ GET_U_1(ap->rreq_hops),
+ GET_BE_U_4(ap->rreq_id),
+ GET_IPADDR_STRING(ap->rreq_da),
+ GET_BE_U_4(ap->rreq_ds),
+ GET_IPADDR_STRING(ap->rreq_oa),
+ GET_BE_U_4(ap->rreq_os));
+ i = length - sizeof(*ap);
+ if (i >= sizeof(struct aodv_ext))
+ aodv_extension(ndo, (const struct aodv_ext *)(dat + sizeof(*ap)), i);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+aodv_rrep(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ u_int i;
+ const struct aodv_rrep *ap = (const struct aodv_rrep *)dat;
+
+ ND_TCHECK_SIZE(ap);
+ if (length < sizeof(*ap))
+ goto trunc;
+ ND_PRINT(" rrep %u %s%sprefix %u hops %u\n"
+ "\tdst %s dseq %u src %s %u ms", length,
+ GET_U_1(ap->rrep_type) & RREP_REPAIR ? "[R]" : "",
+ GET_U_1(ap->rrep_type) & RREP_ACK ? "[A] " : " ",
+ GET_U_1(ap->rrep_ps) & RREP_PREFIX_MASK,
+ GET_U_1(ap->rrep_hops),
+ GET_IPADDR_STRING(ap->rrep_da),
+ GET_BE_U_4(ap->rrep_ds),
+ GET_IPADDR_STRING(ap->rrep_oa),
+ GET_BE_U_4(ap->rrep_life));
+ i = length - sizeof(*ap);
+ if (i >= sizeof(struct aodv_ext))
+ aodv_extension(ndo, (const struct aodv_ext *)(dat + sizeof(*ap)), i);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+aodv_rerr(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ u_int i, dc;
+ const struct aodv_rerr *ap = (const struct aodv_rerr *)dat;
+ const struct rerr_unreach *dp;
+
+ ND_TCHECK_SIZE(ap);
+ if (length < sizeof(*ap))
+ goto trunc;
+ ND_PRINT(" rerr %s [items %u] [%u]:",
+ GET_U_1(ap->rerr_flags) & RERR_NODELETE ? "[D]" : "",
+ GET_U_1(ap->rerr_dc), length);
+ dp = (const struct rerr_unreach *)(dat + sizeof(*ap));
+ i = length - sizeof(*ap);
+ for (dc = GET_U_1(ap->rerr_dc); dc != 0; dc--) {
+ ND_TCHECK_SIZE(dp);
+ if (i < sizeof(*dp))
+ goto trunc;
+ ND_PRINT(" {%s}(%u)", GET_IPADDR_STRING(dp->u_da),
+ GET_BE_U_4(dp->u_ds));
+ dp++;
+ i -= sizeof(*dp);
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+aodv_v6_rreq(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ u_int i;
+ const struct aodv_rreq6 *ap = (const struct aodv_rreq6 *)dat;
+
+ ND_TCHECK_SIZE(ap);
+ if (length < sizeof(*ap))
+ goto trunc;
+ ND_PRINT(" v6 rreq %u %s%s%s%s%shops %u id 0x%08x\n"
+ "\tdst %s seq %u src %s seq %u", length,
+ GET_U_1(ap->rreq_type) & RREQ_JOIN ? "[J]" : "",
+ GET_U_1(ap->rreq_type) & RREQ_REPAIR ? "[R]" : "",
+ GET_U_1(ap->rreq_type) & RREQ_GRAT ? "[G]" : "",
+ GET_U_1(ap->rreq_type) & RREQ_DEST ? "[D]" : "",
+ GET_U_1(ap->rreq_type) & RREQ_UNKNOWN ? "[U] " : " ",
+ GET_U_1(ap->rreq_hops),
+ GET_BE_U_4(ap->rreq_id),
+ GET_IP6ADDR_STRING(ap->rreq_da),
+ GET_BE_U_4(ap->rreq_ds),
+ GET_IP6ADDR_STRING(ap->rreq_oa),
+ GET_BE_U_4(ap->rreq_os));
+ i = length - sizeof(*ap);
+ if (i >= sizeof(struct aodv_ext))
+ aodv_extension(ndo, (const struct aodv_ext *)(dat + sizeof(*ap)), i);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+aodv_v6_rrep(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ u_int i;
+ const struct aodv_rrep6 *ap = (const struct aodv_rrep6 *)dat;
+
+ ND_TCHECK_SIZE(ap);
+ if (length < sizeof(*ap))
+ goto trunc;
+ ND_PRINT(" rrep %u %s%sprefix %u hops %u\n"
+ "\tdst %s dseq %u src %s %u ms", length,
+ GET_U_1(ap->rrep_type) & RREP_REPAIR ? "[R]" : "",
+ GET_U_1(ap->rrep_type) & RREP_ACK ? "[A] " : " ",
+ GET_U_1(ap->rrep_ps) & RREP_PREFIX_MASK,
+ GET_U_1(ap->rrep_hops),
+ GET_IP6ADDR_STRING(ap->rrep_da),
+ GET_BE_U_4(ap->rrep_ds),
+ GET_IP6ADDR_STRING(ap->rrep_oa),
+ GET_BE_U_4(ap->rrep_life));
+ i = length - sizeof(*ap);
+ if (i >= sizeof(struct aodv_ext))
+ aodv_extension(ndo, (const struct aodv_ext *)(dat + sizeof(*ap)), i);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+aodv_v6_rerr(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ u_int i, dc;
+ const struct aodv_rerr *ap = (const struct aodv_rerr *)dat;
+ const struct rerr_unreach6 *dp6;
+
+ ND_TCHECK_SIZE(ap);
+ if (length < sizeof(*ap))
+ goto trunc;
+ ND_PRINT(" rerr %s [items %u] [%u]:",
+ GET_U_1(ap->rerr_flags) & RERR_NODELETE ? "[D]" : "",
+ GET_U_1(ap->rerr_dc), length);
+ dp6 = (const struct rerr_unreach6 *)(const void *)(ap + 1);
+ i = length - sizeof(*ap);
+ for (dc = GET_U_1(ap->rerr_dc); dc != 0; dc--) {
+ ND_TCHECK_SIZE(dp6);
+ if (i < sizeof(*dp6))
+ goto trunc;
+ ND_PRINT(" {%s}(%u)", GET_IP6ADDR_STRING(dp6->u_da),
+ GET_BE_U_4(dp6->u_ds));
+ dp6++;
+ i -= sizeof(*dp6);
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+aodv_v6_draft_01_rreq(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ u_int i;
+ const struct aodv_rreq6_draft_01 *ap = (const struct aodv_rreq6_draft_01 *)dat;
+
+ ND_TCHECK_SIZE(ap);
+ if (length < sizeof(*ap))
+ goto trunc;
+ ND_PRINT(" rreq %u %s%s%s%s%shops %u id 0x%08x\n"
+ "\tdst %s seq %u src %s seq %u", length,
+ GET_U_1(ap->rreq_type) & RREQ_JOIN ? "[J]" : "",
+ GET_U_1(ap->rreq_type) & RREQ_REPAIR ? "[R]" : "",
+ GET_U_1(ap->rreq_type) & RREQ_GRAT ? "[G]" : "",
+ GET_U_1(ap->rreq_type) & RREQ_DEST ? "[D]" : "",
+ GET_U_1(ap->rreq_type) & RREQ_UNKNOWN ? "[U] " : " ",
+ GET_U_1(ap->rreq_hops),
+ GET_BE_U_4(ap->rreq_id),
+ GET_IP6ADDR_STRING(ap->rreq_da),
+ GET_BE_U_4(ap->rreq_ds),
+ GET_IP6ADDR_STRING(ap->rreq_oa),
+ GET_BE_U_4(ap->rreq_os));
+ i = length - sizeof(*ap);
+ if (i >= sizeof(struct aodv_ext))
+ aodv_extension(ndo, (const struct aodv_ext *)(dat + sizeof(*ap)), i);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+aodv_v6_draft_01_rrep(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ u_int i;
+ const struct aodv_rrep6_draft_01 *ap = (const struct aodv_rrep6_draft_01 *)dat;
+
+ ND_TCHECK_SIZE(ap);
+ if (length < sizeof(*ap))
+ goto trunc;
+ ND_PRINT(" rrep %u %s%sprefix %u hops %u\n"
+ "\tdst %s dseq %u src %s %u ms", length,
+ GET_U_1(ap->rrep_type) & RREP_REPAIR ? "[R]" : "",
+ GET_U_1(ap->rrep_type) & RREP_ACK ? "[A] " : " ",
+ GET_U_1(ap->rrep_ps) & RREP_PREFIX_MASK,
+ GET_U_1(ap->rrep_hops),
+ GET_IP6ADDR_STRING(ap->rrep_da),
+ GET_BE_U_4(ap->rrep_ds),
+ GET_IP6ADDR_STRING(ap->rrep_oa),
+ GET_BE_U_4(ap->rrep_life));
+ i = length - sizeof(*ap);
+ if (i >= sizeof(struct aodv_ext))
+ aodv_extension(ndo, (const struct aodv_ext *)(dat + sizeof(*ap)), i);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+aodv_v6_draft_01_rerr(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ u_int i, dc;
+ const struct aodv_rerr *ap = (const struct aodv_rerr *)dat;
+ const struct rerr_unreach6_draft_01 *dp6;
+
+ ND_TCHECK_SIZE(ap);
+ if (length < sizeof(*ap))
+ goto trunc;
+ ND_PRINT(" rerr %s [items %u] [%u]:",
+ GET_U_1(ap->rerr_flags) & RERR_NODELETE ? "[D]" : "",
+ GET_U_1(ap->rerr_dc), length);
+ dp6 = (const struct rerr_unreach6_draft_01 *)(const void *)(ap + 1);
+ i = length - sizeof(*ap);
+ for (dc = GET_U_1(ap->rerr_dc); dc != 0; dc--) {
+ ND_TCHECK_SIZE(dp6);
+ if (i < sizeof(*dp6))
+ goto trunc;
+ ND_PRINT(" {%s}(%u)", GET_IP6ADDR_STRING(dp6->u_da),
+ GET_BE_U_4(dp6->u_ds));
+ dp6++;
+ i -= sizeof(*dp6);
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+void
+aodv_print(netdissect_options *ndo,
+ const u_char *dat, u_int length, int is_ip6)
+{
+ uint8_t msg_type;
+
+ ndo->ndo_protocol = "aodv";
+ /*
+ * The message type is the first byte; make sure we have it
+ * and then fetch it.
+ */
+ msg_type = GET_U_1(dat);
+ ND_PRINT(" aodv");
+
+ switch (msg_type) {
+
+ case AODV_RREQ:
+ if (is_ip6)
+ aodv_v6_rreq(ndo, dat, length);
+ else
+ aodv_rreq(ndo, dat, length);
+ break;
+
+ case AODV_RREP:
+ if (is_ip6)
+ aodv_v6_rrep(ndo, dat, length);
+ else
+ aodv_rrep(ndo, dat, length);
+ break;
+
+ case AODV_RERR:
+ if (is_ip6)
+ aodv_v6_rerr(ndo, dat, length);
+ else
+ aodv_rerr(ndo, dat, length);
+ break;
+
+ case AODV_RREP_ACK:
+ ND_PRINT(" rrep-ack %u", length);
+ break;
+
+ case AODV_V6_DRAFT_01_RREQ:
+ aodv_v6_draft_01_rreq(ndo, dat, length);
+ break;
+
+ case AODV_V6_DRAFT_01_RREP:
+ aodv_v6_draft_01_rrep(ndo, dat, length);
+ break;
+
+ case AODV_V6_DRAFT_01_RERR:
+ aodv_v6_draft_01_rerr(ndo, dat, length);
+ break;
+
+ case AODV_V6_DRAFT_01_RREP_ACK:
+ ND_PRINT(" rrep-ack %u", length);
+ break;
+
+ default:
+ ND_PRINT(" type %u %u", msg_type, length);
+ }
+}
diff --git a/print-aoe.c b/print-aoe.c
new file mode 100644
index 0000000..0cd4299
--- /dev/null
+++ b/print-aoe.c
@@ -0,0 +1,413 @@
+/*
+ * Copyright (c) 2014 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: ATA over Ethernet (AoE) protocol printer */
+
+/* specification:
+ * https://web.archive.org/web/20161025044402/http://brantleycoilecompany.com/AoEr11.pdf
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+
+#define AOE_V1 1
+#define ATA_SECTOR_SIZE 512
+
+#define AOEV1_CMD_ISSUE_ATA_COMMAND 0
+#define AOEV1_CMD_QUERY_CONFIG_INFORMATION 1
+#define AOEV1_CMD_MAC_MASK_LIST 2
+#define AOEV1_CMD_RESERVE_RELEASE 3
+
+static const struct tok cmdcode_str[] = {
+ { AOEV1_CMD_ISSUE_ATA_COMMAND, "Issue ATA Command" },
+ { AOEV1_CMD_QUERY_CONFIG_INFORMATION, "Query Config Information" },
+ { AOEV1_CMD_MAC_MASK_LIST, "MAC Mask List" },
+ { AOEV1_CMD_RESERVE_RELEASE, "Reserve/Release" },
+ { 0, NULL }
+};
+
+#define AOEV1_COMMON_HDR_LEN 10U /* up to but w/o Arg */
+#define AOEV1_ISSUE_ARG_LEN 12U /* up to but w/o Data */
+#define AOEV1_QUERY_ARG_LEN 8U /* up to but w/o Config String */
+#define AOEV1_MAC_ARG_LEN 4U /* up to but w/o Directive 0 */
+#define AOEV1_RESERVE_ARG_LEN 2U /* up to but w/o Ethernet address 0 */
+#define AOEV1_MAX_CONFSTR_LEN 1024U
+
+#define AOEV1_FLAG_R 0x08
+#define AOEV1_FLAG_E 0x04
+
+static const struct tok aoev1_flag_str[] = {
+ { AOEV1_FLAG_R, "Response" },
+ { AOEV1_FLAG_E, "Error" },
+ { 0x02, "MBZ-1" },
+ { 0x01, "MBZ-0" },
+ { 0, NULL }
+};
+
+static const struct tok aoev1_errcode_str[] = {
+ { 1, "Unrecognized command code" },
+ { 2, "Bad argument parameter" },
+ { 3, "Device unavailable" },
+ { 4, "Config string present" },
+ { 5, "Unsupported version" },
+ { 6, "Target is reserved" },
+ { 0, NULL }
+};
+
+#define AOEV1_AFLAG_E 0x40
+#define AOEV1_AFLAG_D 0x10
+#define AOEV1_AFLAG_A 0x02
+#define AOEV1_AFLAG_W 0x01
+
+static const struct tok aoev1_aflag_bitmap_str[] = {
+ { 0x80, "MBZ-7" },
+ { AOEV1_AFLAG_E, "Ext48" },
+ { 0x20, "MBZ-5" },
+ { AOEV1_AFLAG_D, "Device" },
+ { 0x08, "MBZ-3" },
+ { 0x04, "MBZ-2" },
+ { AOEV1_AFLAG_A, "Async" },
+ { AOEV1_AFLAG_W, "Write" },
+ { 0, NULL }
+};
+
+static const struct tok aoev1_ccmd_str[] = {
+ { 0, "read config string" },
+ { 1, "test config string" },
+ { 2, "test config string prefix" },
+ { 3, "set config string" },
+ { 4, "force set config string" },
+ { 0, NULL }
+};
+
+static const struct tok aoev1_mcmd_str[] = {
+ { 0, "Read Mac Mask List" },
+ { 1, "Edit Mac Mask List" },
+ { 0, NULL }
+};
+
+static const struct tok aoev1_merror_str[] = {
+ { 1, "Unspecified Error" },
+ { 2, "Bad DCmd directive" },
+ { 3, "Mask list full" },
+ { 0, NULL }
+};
+
+static const struct tok aoev1_dcmd_str[] = {
+ { 0, "No Directive" },
+ { 1, "Add mac address to mask list" },
+ { 2, "Delete mac address from mask list" },
+ { 0, NULL }
+};
+
+static const struct tok aoev1_rcmd_str[] = {
+ { 0, "Read reserve list" },
+ { 1, "Set reserve list" },
+ { 2, "Force set reserve list" },
+ { 0, NULL }
+};
+
+static void
+aoev1_issue_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ if (len < AOEV1_ISSUE_ARG_LEN)
+ goto invalid;
+ /* AFlags */
+ ND_PRINT("\n\tAFlags: [%s]",
+ bittok2str(aoev1_aflag_bitmap_str, "none", GET_U_1(cp)));
+ cp += 1;
+ len -= 1;
+ /* Err/Feature */
+ ND_PRINT(", Err/Feature: %u", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* Sector Count (not correlated with the length) */
+ ND_PRINT(", Sector Count: %u", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* Cmd/Status */
+ ND_PRINT(", Cmd/Status: %u", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* lba0 */
+ ND_PRINT("\n\tlba0: %u", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* lba1 */
+ ND_PRINT(", lba1: %u", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* lba2 */
+ ND_PRINT(", lba2: %u", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* lba3 */
+ ND_PRINT(", lba3: %u", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* lba4 */
+ ND_PRINT(", lba4: %u", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* lba5 */
+ ND_PRINT(", lba5: %u", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* Reserved */
+ ND_TCHECK_2(cp);
+ cp += 2;
+ len -= 2;
+ /* Data */
+ if (len)
+ ND_PRINT("\n\tData: %u bytes", len);
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+aoev1_query_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint16_t cslen;
+
+ if (len < AOEV1_QUERY_ARG_LEN)
+ goto invalid;
+ /* Buffer Count */
+ ND_PRINT("\n\tBuffer Count: %u", GET_BE_U_2(cp));
+ cp += 2;
+ len -= 2;
+ /* Firmware Version */
+ ND_PRINT(", Firmware Version: %u", GET_BE_U_2(cp));
+ cp += 2;
+ len -= 2;
+ /* Sector Count */
+ ND_PRINT(", Sector Count: %u", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* AoE/CCmd */
+ ND_PRINT(", AoE: %u, CCmd: %s", (GET_U_1(cp) & 0xF0) >> 4,
+ tok2str(aoev1_ccmd_str, "Unknown (0x02x)", GET_U_1(cp) & 0x0F));
+ cp += 1;
+ len -= 1;
+ /* Config String Length */
+ cslen = GET_BE_U_2(cp);
+ cp += 2;
+ len -= 2;
+ if (cslen > AOEV1_MAX_CONFSTR_LEN || cslen > len)
+ goto invalid;
+ /* Config String */
+ if (cslen) {
+ ND_PRINT("\n\tConfig String (length %u): ", cslen);
+ (void)nd_printn(ndo, cp, cslen, NULL);
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+aoev1_mac_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint8_t dircount, i;
+
+ if (len < AOEV1_MAC_ARG_LEN)
+ goto invalid;
+ /* Reserved */
+ cp += 1;
+ len -= 1;
+ /* MCmd */
+ ND_PRINT("\n\tMCmd: %s",
+ tok2str(aoev1_mcmd_str, "Unknown (0x%02x)", GET_U_1(cp)));
+ cp += 1;
+ len -= 1;
+ /* MError */
+ ND_PRINT(", MError: %s",
+ tok2str(aoev1_merror_str, "Unknown (0x%02x)", GET_U_1(cp)));
+ cp += 1;
+ len -= 1;
+ /* Dir Count */
+ dircount = GET_U_1(cp);
+ cp += 1;
+ len -= 1;
+ ND_PRINT(", Dir Count: %u", dircount);
+ if (dircount * 8U > len)
+ goto invalid;
+ /* directives */
+ for (i = 0; i < dircount; i++) {
+ /* Reserved */
+ cp += 1;
+ len -= 1;
+ /* DCmd */
+ ND_PRINT("\n\t DCmd: %s",
+ tok2str(aoev1_dcmd_str, "Unknown (0x%02x)", GET_U_1(cp)));
+ cp += 1;
+ len -= 1;
+ /* Ethernet Address */
+ ND_PRINT(", Ethernet Address: %s", GET_ETHERADDR_STRING(cp));
+ cp += MAC_ADDR_LEN;
+ len -= MAC_ADDR_LEN;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+aoev1_reserve_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint8_t nmacs, i;
+
+ if (len < AOEV1_RESERVE_ARG_LEN || (len - AOEV1_RESERVE_ARG_LEN) % MAC_ADDR_LEN)
+ goto invalid;
+ /* RCmd */
+ ND_PRINT("\n\tRCmd: %s",
+ tok2str(aoev1_rcmd_str, "Unknown (0x%02x)", GET_U_1(cp)));
+ cp += 1;
+ len -= 1;
+ /* NMacs (correlated with the length) */
+ nmacs = GET_U_1(cp);
+ cp += 1;
+ len -= 1;
+ ND_PRINT(", NMacs: %u", nmacs);
+ if (nmacs * MAC_ADDR_LEN != len)
+ goto invalid;
+ /* addresses */
+ for (i = 0; i < nmacs; i++) {
+ ND_PRINT("\n\tEthernet Address %u: %s", i, GET_ETHERADDR_STRING(cp));
+ cp += MAC_ADDR_LEN;
+ len -= MAC_ADDR_LEN;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* cp points to the Ver/Flags octet */
+static void
+aoev1_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint8_t flags, command;
+ void (*cmd_decoder)(netdissect_options *, const u_char *, u_int);
+
+ if (len < AOEV1_COMMON_HDR_LEN)
+ goto invalid;
+ /* Flags */
+ flags = GET_U_1(cp) & 0x0F;
+ ND_PRINT(", Flags: [%s]", bittok2str(aoev1_flag_str, "none", flags));
+ cp += 1;
+ len -= 1;
+ if (! ndo->ndo_vflag)
+ return;
+ /* Error */
+ if (flags & AOEV1_FLAG_E)
+ ND_PRINT("\n\tError: %s",
+ tok2str(aoev1_errcode_str, "Invalid (%u)", GET_U_1(cp)));
+ cp += 1;
+ len -= 1;
+ /* Major */
+ ND_PRINT("\n\tMajor: 0x%04x", GET_BE_U_2(cp));
+ cp += 2;
+ len -= 2;
+ /* Minor */
+ ND_PRINT(", Minor: 0x%02x", GET_U_1(cp));
+ cp += 1;
+ len -= 1;
+ /* Command */
+ command = GET_U_1(cp);
+ cp += 1;
+ len -= 1;
+ ND_PRINT(", Command: %s", tok2str(cmdcode_str, "Unknown (0x%02x)", command));
+ /* Tag */
+ ND_PRINT(", Tag: 0x%08x", GET_BE_U_4(cp));
+ cp += 4;
+ len -= 4;
+ /* Arg */
+ cmd_decoder =
+ command == AOEV1_CMD_ISSUE_ATA_COMMAND ? aoev1_issue_print :
+ command == AOEV1_CMD_QUERY_CONFIG_INFORMATION ? aoev1_query_print :
+ command == AOEV1_CMD_MAC_MASK_LIST ? aoev1_mac_print :
+ command == AOEV1_CMD_RESERVE_RELEASE ? aoev1_reserve_print :
+ NULL;
+ if (cmd_decoder != NULL)
+ cmd_decoder(ndo, cp, len);
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+void
+aoe_print(netdissect_options *ndo,
+ const u_char *cp, const u_int len)
+{
+ uint8_t ver;
+
+ ndo->ndo_protocol = "aoe";
+ ND_PRINT("AoE length %u", len);
+
+ if (len < 1)
+ goto invalid;
+ /* Ver/Flags */
+ ver = (GET_U_1(cp) & 0xF0) >> 4;
+ /* Don't advance cp yet: low order 4 bits are version-specific. */
+ ND_PRINT(", Ver %u", ver);
+
+ switch (ver) {
+ case AOE_V1:
+ aoev1_print(ndo, cp, len);
+ break;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
diff --git a/print-ap1394.c b/print-ap1394.c
new file mode 100644
index 0000000..b1988f2
--- /dev/null
+++ b/print-ap1394.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Apple IP-over-IEEE 1394 printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "ethertype.h"
+
+/*
+ * Structure of a header for Apple's IP-over-IEEE 1384 BPF header.
+ */
+#define FIREWIRE_EUI64_LEN 8
+struct firewire_header {
+ nd_byte firewire_dhost[FIREWIRE_EUI64_LEN];
+ nd_byte firewire_shost[FIREWIRE_EUI64_LEN];
+ nd_uint16_t firewire_type;
+};
+
+/*
+ * Length of that header; note that some compilers may pad
+ * "struct firewire_header" to a multiple of 4 bytes, for example, so
+ * "sizeof (struct firewire_header)" may not give the right answer.
+ */
+#define FIREWIRE_HDRLEN 18
+
+static const char *
+fwaddr_string(netdissect_options *ndo, const u_char *addr)
+{
+ return GET_LINKADDR_STRING(addr, LINKADDR_IEEE1394, FIREWIRE_EUI64_LEN);
+}
+
+static void
+ap1394_hdr_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const struct firewire_header *fp;
+ uint16_t firewire_type;
+
+ fp = (const struct firewire_header *)bp;
+
+ ND_PRINT("%s > %s",
+ fwaddr_string(ndo, fp->firewire_shost),
+ fwaddr_string(ndo, fp->firewire_dhost));
+
+ firewire_type = GET_BE_U_2(fp->firewire_type);
+ if (!ndo->ndo_qflag) {
+ ND_PRINT(", ethertype %s (0x%04x)",
+ tok2str(ethertype_values,"Unknown", firewire_type),
+ firewire_type);
+ } else {
+ ND_PRINT(", %s", tok2str(ethertype_values,"Unknown Ethertype (0x%04x)", firewire_type));
+ }
+
+ ND_PRINT(", length %u: ", length);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+ap1394_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int length = h->len;
+ u_int caplen = h->caplen;
+ const struct firewire_header *fp;
+ u_short ether_type;
+ struct lladdr_info src, dst;
+
+ ndo->ndo_protocol = "ap1394";
+ ND_TCHECK_LEN(p, FIREWIRE_HDRLEN);
+ ndo->ndo_ll_hdr_len += FIREWIRE_HDRLEN;
+
+ if (ndo->ndo_eflag)
+ ap1394_hdr_print(ndo, p, length);
+
+ length -= FIREWIRE_HDRLEN;
+ caplen -= FIREWIRE_HDRLEN;
+ fp = (const struct firewire_header *)p;
+ p += FIREWIRE_HDRLEN;
+
+ ether_type = GET_BE_U_2(fp->firewire_type);
+ src.addr = fp->firewire_shost;
+ src.addr_string = fwaddr_string;
+ dst.addr = fp->firewire_dhost;
+ dst.addr_string = fwaddr_string;
+ if (ethertype_print(ndo, ether_type, p, length, caplen, &src, &dst) == 0) {
+ /* ether_type not known, print raw packet */
+ if (!ndo->ndo_eflag)
+ ap1394_hdr_print(ndo, (const u_char *)fp, length + FIREWIRE_HDRLEN);
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ }
+}
diff --git a/print-arcnet.c b/print-arcnet.c
new file mode 100644
index 0000000..5f6aaf9
--- /dev/null
+++ b/print-arcnet.c
@@ -0,0 +1,366 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * From: NetBSD: print-arcnet.c,v 1.2 2000/04/24 13:02:28 itojun Exp
+ */
+
+/* \summary: Attached Resource Computer NETwork (ARCNET) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+/*
+ * from: NetBSD: if_arc.h,v 1.13 1999/11/19 20:41:19 thorpej Exp
+ */
+
+/*
+ * Structure of a 2.5MB/s Arcnet header on the BSDs,
+ * as given to interface code.
+ */
+struct arc_header {
+ nd_uint8_t arc_shost;
+ nd_uint8_t arc_dhost;
+ nd_uint8_t arc_type;
+ /*
+ * only present for newstyle encoding with LL fragmentation.
+ * Don't use sizeof(anything), use ARC_HDR{,NEW}LEN instead.
+ */
+ nd_uint8_t arc_flag;
+ nd_uint16_t arc_seqid;
+
+ /*
+ * only present in exception packets (arc_flag == 0xff)
+ */
+ nd_uint8_t arc_type2; /* same as arc_type */
+ nd_uint8_t arc_flag2; /* real flag value */
+ nd_uint16_t arc_seqid2; /* real seqid value */
+};
+
+#define ARC_HDRLEN 3
+#define ARC_HDRNEWLEN 6
+#define ARC_HDRNEWLEN_EXC 10
+
+/* RFC 1051 */
+#define ARCTYPE_IP_OLD 240 /* IP protocol */
+#define ARCTYPE_ARP_OLD 241 /* address resolution protocol */
+
+/* RFC 1201 */
+#define ARCTYPE_IP 212 /* IP protocol */
+#define ARCTYPE_ARP 213 /* address resolution protocol */
+#define ARCTYPE_REVARP 214 /* reverse addr resolution protocol */
+
+#define ARCTYPE_ATALK 221 /* Appletalk */
+#define ARCTYPE_BANIAN 247 /* Banyan Vines */
+#define ARCTYPE_IPX 250 /* Novell IPX */
+
+#define ARCTYPE_INET6 0xc4 /* IPng */
+#define ARCTYPE_DIAGNOSE 0x80 /* as per ANSI/ATA 878.1 */
+
+/*
+ * Structure of a 2.5MB/s Arcnet header on Linux. Linux has
+ * an extra "offset" field when given to interface code, and
+ * never presents packets that look like exception frames.
+ */
+struct arc_linux_header {
+ nd_uint8_t arc_shost;
+ nd_uint8_t arc_dhost;
+ nd_uint16_t arc_offset;
+ nd_uint8_t arc_type;
+ /*
+ * only present for newstyle encoding with LL fragmentation.
+ * Don't use sizeof(anything), use ARC_LINUX_HDR{,NEW}LEN
+ * instead.
+ */
+ nd_uint8_t arc_flag;
+ nd_uint16_t arc_seqid;
+};
+
+#define ARC_LINUX_HDRLEN 5
+#define ARC_LINUX_HDRNEWLEN 8
+
+static int arcnet_encap_print(netdissect_options *, u_char arctype, const u_char *p,
+ u_int length, u_int caplen);
+
+static const struct tok arctypemap[] = {
+ { ARCTYPE_IP_OLD, "oldip" },
+ { ARCTYPE_ARP_OLD, "oldarp" },
+ { ARCTYPE_IP, "ip" },
+ { ARCTYPE_ARP, "arp" },
+ { ARCTYPE_REVARP, "rarp" },
+ { ARCTYPE_ATALK, "atalk" },
+ { ARCTYPE_BANIAN, "banyan" },
+ { ARCTYPE_IPX, "ipx" },
+ { ARCTYPE_INET6, "ipv6" },
+ { ARCTYPE_DIAGNOSE, "diag" },
+ { 0, NULL }
+};
+
+static void
+arcnet_print(netdissect_options *ndo, const u_char *bp, u_int length, int phds,
+ u_int flag, u_int seqid)
+{
+ const struct arc_header *ap;
+ const char *arctypename;
+
+ ndo->ndo_protocol = "arcnet";
+ ap = (const struct arc_header *)bp;
+
+ if (ndo->ndo_qflag) {
+ ND_PRINT("%02x %02x %u: ",
+ GET_U_1(ap->arc_shost),
+ GET_U_1(ap->arc_dhost),
+ length);
+ return;
+ }
+
+ arctypename = tok2str(arctypemap, "%02x", GET_U_1(ap->arc_type));
+
+ if (!phds) {
+ ND_PRINT("%02x %02x %s %u: ",
+ GET_U_1(ap->arc_shost),
+ GET_U_1(ap->arc_dhost),
+ arctypename,
+ length);
+ return;
+ }
+
+ if (flag == 0) {
+ ND_PRINT("%02x %02x %s seqid %04x %u: ",
+ GET_U_1(ap->arc_shost),
+ GET_U_1(ap->arc_dhost),
+ arctypename, seqid,
+ length);
+ return;
+ }
+
+ if (flag & 1)
+ ND_PRINT("%02x %02x %s seqid %04x "
+ "(first of %u fragments) %u: ",
+ GET_U_1(ap->arc_shost),
+ GET_U_1(ap->arc_dhost),
+ arctypename, seqid,
+ (flag + 3) / 2, length);
+ else
+ ND_PRINT("%02x %02x %s seqid %04x "
+ "(fragment %u) %u: ",
+ GET_U_1(ap->arc_shost),
+ GET_U_1(ap->arc_dhost),
+ arctypename, seqid,
+ flag/2 + 1, length);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ARCNET header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+arcnet_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+ const struct arc_header *ap;
+
+ int phds;
+ u_int flag = 0, archdrlen = 0;
+ u_int seqid = 0;
+ u_char arc_type;
+
+ ndo->ndo_protocol = "arcnet";
+ if (caplen < ARC_HDRLEN) {
+ ndo->ndo_ll_hdr_len += caplen;
+ nd_trunc_longjmp(ndo);
+ }
+
+ ap = (const struct arc_header *)p;
+ arc_type = GET_U_1(ap->arc_type);
+
+ switch (arc_type) {
+ default:
+ phds = 1;
+ break;
+ case ARCTYPE_IP_OLD:
+ case ARCTYPE_ARP_OLD:
+ case ARCTYPE_DIAGNOSE:
+ phds = 0;
+ archdrlen = ARC_HDRLEN;
+ break;
+ }
+
+ if (phds) {
+ if (caplen < ARC_HDRNEWLEN) {
+ arcnet_print(ndo, p, length, 0, 0, 0);
+ ND_PRINT(" phds");
+ ndo->ndo_ll_hdr_len += caplen;
+ nd_trunc_longjmp(ndo);
+ }
+
+ flag = GET_U_1(ap->arc_flag);
+ if (flag == 0xff) {
+ if (caplen < ARC_HDRNEWLEN_EXC) {
+ arcnet_print(ndo, p, length, 0, 0, 0);
+ ND_PRINT(" phds extended");
+ ndo->ndo_ll_hdr_len += caplen;
+ nd_trunc_longjmp(ndo);
+ }
+ flag = GET_U_1(ap->arc_flag2);
+ seqid = GET_BE_U_2(ap->arc_seqid2);
+ archdrlen = ARC_HDRNEWLEN_EXC;
+ } else {
+ seqid = GET_BE_U_2(ap->arc_seqid);
+ archdrlen = ARC_HDRNEWLEN;
+ }
+ }
+
+
+ if (ndo->ndo_eflag)
+ arcnet_print(ndo, p, length, phds, flag, seqid);
+
+ /*
+ * Go past the ARCNET header.
+ */
+ length -= archdrlen;
+ caplen -= archdrlen;
+ p += archdrlen;
+
+ if (phds && flag && (flag & 1) == 0) {
+ /*
+ * This is a middle fragment.
+ */
+ ndo->ndo_ll_hdr_len += archdrlen;
+ return;
+ }
+
+ if (!arcnet_encap_print(ndo, arc_type, p, length, caplen))
+ ND_DEFAULTPRINT(p, caplen);
+
+ ndo->ndo_ll_hdr_len += archdrlen;
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ARCNET header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured. It is quite similar
+ * to the non-Linux style printer except that Linux doesn't ever
+ * supply packets that look like exception frames, it always supplies
+ * reassembled packets rather than raw frames, and headers have an
+ * extra "offset" field between the src/dest and packet type.
+ */
+void
+arcnet_linux_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+ const struct arc_linux_header *ap;
+
+ int archdrlen = 0;
+ u_char arc_type;
+
+ ndo->ndo_protocol = "arcnet_linux";
+ if (caplen < ARC_LINUX_HDRLEN) {
+ ndo->ndo_ll_hdr_len += caplen;
+ nd_trunc_longjmp(ndo);
+ }
+
+ ap = (const struct arc_linux_header *)p;
+ arc_type = GET_U_1(ap->arc_type);
+
+ switch (arc_type) {
+ default:
+ archdrlen = ARC_LINUX_HDRNEWLEN;
+ if (caplen < ARC_LINUX_HDRNEWLEN) {
+ ndo->ndo_ll_hdr_len += caplen;
+ nd_trunc_longjmp(ndo);
+ }
+ break;
+ case ARCTYPE_IP_OLD:
+ case ARCTYPE_ARP_OLD:
+ case ARCTYPE_DIAGNOSE:
+ archdrlen = ARC_LINUX_HDRLEN;
+ break;
+ }
+
+ if (ndo->ndo_eflag)
+ arcnet_print(ndo, p, length, 0, 0, 0);
+
+ /*
+ * Go past the ARCNET header.
+ */
+ length -= archdrlen;
+ caplen -= archdrlen;
+ p += archdrlen;
+
+ if (!arcnet_encap_print(ndo, arc_type, p, length, caplen))
+ ND_DEFAULTPRINT(p, caplen);
+
+ ndo->ndo_ll_hdr_len += archdrlen;
+}
+
+/*
+ * Prints the packet encapsulated in an ARCnet data field,
+ * given the ARCnet system code.
+ *
+ * Returns non-zero if it can do so, zero if the system code is unknown.
+ */
+
+
+static int
+arcnet_encap_print(netdissect_options *ndo, u_char arctype, const u_char *p,
+ u_int length, u_int caplen)
+{
+ switch (arctype) {
+
+ case ARCTYPE_IP_OLD:
+ case ARCTYPE_IP:
+ ip_print(ndo, p, length);
+ return (1);
+
+ case ARCTYPE_INET6:
+ ip6_print(ndo, p, length);
+ return (1);
+
+ case ARCTYPE_ARP_OLD:
+ case ARCTYPE_ARP:
+ case ARCTYPE_REVARP:
+ arp_print(ndo, p, length, caplen);
+ return (1);
+
+ case ARCTYPE_ATALK: /* XXX was this ever used? */
+ if (ndo->ndo_vflag)
+ ND_PRINT("et1 ");
+ atalk_print(ndo, p, length);
+ return (1);
+
+ case ARCTYPE_IPX:
+ ipx_print(ndo, p, length);
+ return (1);
+
+ default:
+ return (0);
+ }
+}
diff --git a/print-arista.c b/print-arista.c
new file mode 100644
index 0000000..079ad68
--- /dev/null
+++ b/print-arista.c
@@ -0,0 +1,165 @@
+// Copyright (c) 2018 Arista Networks, Inc. All rights reserved.
+
+/* \summary: EtherType protocol for Arista Networks printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+/*
+
+From Bill Fenner:
+
+The Arista timestamp header consists of the following fields:
+1. The Arista ethertype (0xd28b)
+2. A 2-byte subtype field; 0x01 indicates the timestamp header
+3. A 2-byte version field, described below.
+4. A 48-bit or 64-bit timestamp field, depending on the contents of the version field
+
+This header is then followed by the original ethertype and the remainder of the original packet.
+
+ 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
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| dst mac |
++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| | |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
+| src mac |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| ethertype 0xd28b | subtype 0x1 |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| version | |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
+| timestamp... |
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+The two-byte version value is split into 3 fields:
+1. The timescale in use. Currently assigned values include:
+ 0 = TAI
+ 1 = UTC
+2. The timestamp format and length. Currently assigned values include:
+ 1 = 64-bit timestamp
+ 2 = 48-bit timestamp
+3. The hardware info
+ 0 = R/R2 series
+ 1 = R3 series
+
+ 0 1
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+| timescale | format|hw info|
++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+
+
+See also: https://www.arista.com/assets/data/pdf/Whitepapers/Overview_Arista_Timestamps.pdf
+
+*/
+
+#define ARISTA_SUBTYPE_TIMESTAMP 0x0001
+static const struct tok subtype_str[] = {
+ { ARISTA_SUBTYPE_TIMESTAMP, "Timestamp" },
+ { 0, NULL }
+};
+
+static const struct tok ts_timescale_str[] = {
+ { 0, "TAI" },
+ { 1, "UTC" },
+ { 0, NULL }
+};
+
+#define FORMAT_64BIT 0x1
+#define FORMAT_48BIT 0x2
+static const struct tok ts_format_str[] = {
+ { FORMAT_64BIT, "64-bit" },
+ { FORMAT_48BIT, "48-bit" },
+ { 0, NULL }
+};
+
+static const struct tok hw_info_str[] = {
+ { 0, "R/R2" },
+ { 1, "R3" },
+ { 0, NULL }
+};
+
+static inline void
+arista_print_date_hms_time(netdissect_options *ndo, uint32_t seconds,
+ uint32_t nanoseconds)
+{
+ time_t ts;
+ char buf[sizeof("-yyyyyyyyyy-mm-dd hh:mm:ss")];
+
+ ts = seconds + (nanoseconds / 1000000000);
+ nanoseconds %= 1000000000;
+ ND_PRINT("%s.%09u",
+ nd_format_time(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S",
+ gmtime(&ts)), nanoseconds);
+}
+
+int
+arista_ethertype_print(netdissect_options *ndo, const u_char *bp, u_int len _U_)
+{
+ uint16_t subTypeId;
+ u_short bytesConsumed = 0;
+
+ ndo->ndo_protocol = "arista";
+
+ subTypeId = GET_BE_U_2(bp);
+ bp += 2;
+ bytesConsumed += 2;
+
+ ND_PRINT("SubType %s (0x%04x), ",
+ tok2str(subtype_str, "Unknown", subTypeId),
+ subTypeId);
+
+ // TapAgg Header Timestamping
+ if (subTypeId == ARISTA_SUBTYPE_TIMESTAMP) {
+ uint64_t seconds;
+ uint32_t nanoseconds;
+ uint8_t ts_timescale = GET_U_1(bp);
+ bp += 1;
+ bytesConsumed += 1;
+ ND_PRINT("Timescale %s (%u), ",
+ tok2str(ts_timescale_str, "Unknown", ts_timescale),
+ ts_timescale);
+
+ uint8_t ts_format = GET_U_1(bp) >> 4;
+ uint8_t hw_info = GET_U_1(bp) & 0x0f;
+ bp += 1;
+ bytesConsumed += 1;
+
+ // Timestamp has 32-bit lsb in nanosec and remaining msb in sec
+ ND_PRINT("Format %s (%u), HwInfo %s (%u), Timestamp ",
+ tok2str(ts_format_str, "Unknown", ts_format),
+ ts_format,
+ tok2str(hw_info_str, "Unknown", hw_info),
+ hw_info);
+ switch (ts_format) {
+ case FORMAT_64BIT:
+ seconds = GET_BE_U_4(bp);
+ nanoseconds = GET_BE_U_4(bp + 4);
+ arista_print_date_hms_time(ndo, seconds, nanoseconds);
+ bytesConsumed += 8;
+ break;
+ case FORMAT_48BIT:
+ seconds = GET_BE_U_2(bp);
+ nanoseconds = GET_BE_U_4(bp + 2);
+ seconds += nanoseconds / 1000000000;
+ nanoseconds %= 1000000000;
+ ND_PRINT("%" PRIu64 ".%09u", seconds, nanoseconds);
+ bytesConsumed += 6;
+ break;
+ default:
+ return -1;
+ }
+ } else {
+ return -1;
+ }
+ ND_PRINT(": ");
+ return bytesConsumed;
+}
diff --git a/print-arp.c b/print-arp.c
new file mode 100644
index 0000000..9c08502
--- /dev/null
+++ b/print-arp.c
@@ -0,0 +1,473 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Address Resolution Protocol (ARP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "ethertype.h"
+#include "extract.h"
+
+
+/*
+ * Address Resolution Protocol.
+ *
+ * See RFC 826 for protocol description. ARP packets are variable
+ * in size; the arphdr structure defines the fixed-length portion.
+ * Protocol type values are the same as those for 10 Mb/s Ethernet.
+ * It is followed by the variable-sized fields ar_sha, arp_spa,
+ * arp_tha and arp_tpa in that order, according to the lengths
+ * specified. Field names used correspond to RFC 826.
+ */
+struct arp_pkthdr {
+ nd_uint16_t ar_hrd; /* format of hardware address */
+#define ARPHRD_ETHER 1 /* ethernet hardware format */
+#define ARPHRD_IEEE802 6 /* token-ring hardware format */
+#define ARPHRD_ARCNET 7 /* arcnet hardware format */
+#define ARPHRD_FRELAY 15 /* frame relay hardware format */
+#define ARPHRD_ATM2225 19 /* ATM (RFC 2225) */
+#define ARPHRD_STRIP 23 /* Ricochet Starmode Radio hardware format */
+#define ARPHRD_IEEE1394 24 /* IEEE 1394 (FireWire) hardware format */
+#define ARPHRD_INFINIBAND 32 /* InfiniBand RFC 4391 */
+ nd_uint16_t ar_pro; /* format of protocol address */
+ nd_uint8_t ar_hln; /* length of hardware address */
+ nd_uint8_t ar_pln; /* length of protocol address */
+ nd_uint16_t ar_op; /* one of: */
+#define ARPOP_REQUEST 1 /* request to resolve address */
+#define ARPOP_REPLY 2 /* response to previous request */
+#define ARPOP_REVREQUEST 3 /* request protocol address given hardware */
+#define ARPOP_REVREPLY 4 /* response giving protocol address */
+#define ARPOP_INVREQUEST 8 /* request to identify peer */
+#define ARPOP_INVREPLY 9 /* response identifying peer */
+#define ARPOP_NAK 10 /* NAK - only valid for ATM ARP */
+
+/*
+ * The remaining fields are variable in size,
+ * according to the sizes above.
+ */
+#ifdef COMMENT_ONLY
+ nd_byte ar_sha[]; /* sender hardware address */
+ nd_byte ar_spa[]; /* sender protocol address */
+ nd_byte ar_tha[]; /* target hardware address */
+ nd_byte ar_tpa[]; /* target protocol address */
+#endif
+#define ar_sha(ap) (((const u_char *)((ap)+1))+ 0)
+#define ar_spa(ap) (((const u_char *)((ap)+1))+ GET_U_1((ap)->ar_hln))
+#define ar_tha(ap) (((const u_char *)((ap)+1))+ GET_U_1((ap)->ar_hln)+GET_U_1((ap)->ar_pln))
+#define ar_tpa(ap) (((const u_char *)((ap)+1))+2*GET_U_1((ap)->ar_hln)+GET_U_1((ap)->ar_pln))
+};
+
+#define ARP_HDRLEN 8
+
+#define HRD(ap) GET_BE_U_2((ap)->ar_hrd)
+#define HRD_LEN(ap) GET_U_1((ap)->ar_hln)
+#define PROTO_LEN(ap) GET_U_1((ap)->ar_pln)
+#define OP(ap) GET_BE_U_2((ap)->ar_op)
+#define PRO(ap) GET_BE_U_2((ap)->ar_pro)
+#define SHA(ap) (ar_sha(ap))
+#define SPA(ap) (ar_spa(ap))
+#define THA(ap) (ar_tha(ap))
+#define TPA(ap) (ar_tpa(ap))
+
+
+static const struct tok arpop_values[] = {
+ { ARPOP_REQUEST, "Request" },
+ { ARPOP_REPLY, "Reply" },
+ { ARPOP_REVREQUEST, "Reverse Request" },
+ { ARPOP_REVREPLY, "Reverse Reply" },
+ { ARPOP_INVREQUEST, "Inverse Request" },
+ { ARPOP_INVREPLY, "Inverse Reply" },
+ { ARPOP_NAK, "NACK Reply" },
+ { 0, NULL }
+};
+
+static const struct tok arphrd_values[] = {
+ { ARPHRD_ETHER, "Ethernet" },
+ { ARPHRD_IEEE802, "TokenRing" },
+ { ARPHRD_ARCNET, "ArcNet" },
+ { ARPHRD_FRELAY, "FrameRelay" },
+ { ARPHRD_STRIP, "Strip" },
+ { ARPHRD_IEEE1394, "IEEE 1394" },
+ { ARPHRD_ATM2225, "ATM" },
+ { ARPHRD_INFINIBAND, "InfiniBand" },
+ { 0, NULL }
+};
+
+/*
+ * ATM Address Resolution Protocol.
+ *
+ * See RFC 2225 for protocol description. ATMARP packets are similar
+ * to ARP packets, except that there are no length fields for the
+ * protocol address - instead, there are type/length fields for
+ * the ATM number and subaddress - and the hardware addresses consist
+ * of an ATM number and an ATM subaddress.
+ */
+struct atmarp_pkthdr {
+ nd_uint16_t aar_hrd; /* format of hardware address */
+ nd_uint16_t aar_pro; /* format of protocol address */
+ nd_uint8_t aar_shtl; /* length of source ATM number */
+ nd_uint8_t aar_sstl; /* length of source ATM subaddress */
+#define ATMARP_IS_E164 0x40 /* bit in type/length for E.164 format */
+#define ATMARP_LEN_MASK 0x3F /* length of {sub}address in type/length */
+ nd_uint16_t aar_op; /* same as regular ARP */
+ nd_uint8_t aar_spln; /* length of source protocol address */
+ nd_uint8_t aar_thtl; /* length of target ATM number */
+ nd_uint8_t aar_tstl; /* length of target ATM subaddress */
+ nd_uint8_t aar_tpln; /* length of target protocol address */
+/*
+ * The remaining fields are variable in size,
+ * according to the sizes above.
+ */
+#ifdef COMMENT_ONLY
+ nd_byte aar_sha[]; /* source ATM number */
+ nd_byte aar_ssa[]; /* source ATM subaddress */
+ nd_byte aar_spa[]; /* sender protocol address */
+ nd_byte aar_tha[]; /* target ATM number */
+ nd_byte aar_tsa[]; /* target ATM subaddress */
+ nd_byte aar_tpa[]; /* target protocol address */
+#endif
+
+#define ATMHRD(ap) GET_BE_U_2((ap)->aar_hrd)
+#define ATMSHRD_LEN(ap) (GET_U_1((ap)->aar_shtl) & ATMARP_LEN_MASK)
+#define ATMSSLN(ap) (GET_U_1((ap)->aar_sstl) & ATMARP_LEN_MASK)
+#define ATMSPROTO_LEN(ap) GET_U_1((ap)->aar_spln)
+#define ATMOP(ap) GET_BE_U_2((ap)->aar_op)
+#define ATMPRO(ap) GET_BE_U_2((ap)->aar_pro)
+#define ATMTHRD_LEN(ap) (GET_U_1((ap)->aar_thtl) & ATMARP_LEN_MASK)
+#define ATMTSLN(ap) (GET_U_1((ap)->aar_tstl) & ATMARP_LEN_MASK)
+#define ATMTPROTO_LEN(ap) GET_U_1((ap)->aar_tpln)
+#define aar_sha(ap) ((const u_char *)((ap)+1))
+#define aar_ssa(ap) (aar_sha(ap) + ATMSHRD_LEN(ap))
+#define aar_spa(ap) (aar_ssa(ap) + ATMSSLN(ap))
+#define aar_tha(ap) (aar_spa(ap) + ATMSPROTO_LEN(ap))
+#define aar_tsa(ap) (aar_tha(ap) + ATMTHRD_LEN(ap))
+#define aar_tpa(ap) (aar_tsa(ap) + ATMTSLN(ap))
+};
+
+#define ATMSHA(ap) (aar_sha(ap))
+#define ATMSSA(ap) (aar_ssa(ap))
+#define ATMSPA(ap) (aar_spa(ap))
+#define ATMTHA(ap) (aar_tha(ap))
+#define ATMTSA(ap) (aar_tsa(ap))
+#define ATMTPA(ap) (aar_tpa(ap))
+
+static int
+isnonzero(netdissect_options *ndo, const u_char *a, size_t len)
+{
+ while (len > 0) {
+ if (GET_U_1(a) != 0)
+ return (1);
+ a++;
+ len--;
+ }
+ return (0);
+}
+
+static void
+tpaddr_print_ip(netdissect_options *ndo,
+ const struct arp_pkthdr *ap, u_short pro)
+{
+ if (pro != ETHERTYPE_IP && pro != ETHERTYPE_TRAIL)
+ ND_PRINT("<wrong proto type>");
+ else if (PROTO_LEN(ap) != 4)
+ ND_PRINT("<wrong len>");
+ else
+ ND_PRINT("%s", GET_IPADDR_STRING(TPA(ap)));
+}
+
+static void
+spaddr_print_ip(netdissect_options *ndo,
+ const struct arp_pkthdr *ap, u_short pro)
+{
+ if (pro != ETHERTYPE_IP && pro != ETHERTYPE_TRAIL)
+ ND_PRINT("<wrong proto type>");
+ else if (PROTO_LEN(ap) != 4)
+ ND_PRINT("<wrong len>");
+ else
+ ND_PRINT("%s", GET_IPADDR_STRING(SPA(ap)));
+}
+
+static void
+atmarp_addr_print(netdissect_options *ndo,
+ const u_char *ha, u_int ha_len, const u_char *srca,
+ u_int srca_len)
+{
+ if (ha_len == 0)
+ ND_PRINT("<No address>");
+ else {
+ ND_PRINT("%s", GET_LINKADDR_STRING(ha, LINKADDR_ATM, ha_len));
+ if (srca_len != 0)
+ ND_PRINT(",%s",
+ GET_LINKADDR_STRING(srca, LINKADDR_ATM, srca_len));
+ }
+}
+
+static void
+atmarp_tpaddr_print(netdissect_options *ndo,
+ const struct atmarp_pkthdr *ap, u_short pro)
+{
+ if (pro != ETHERTYPE_IP && pro != ETHERTYPE_TRAIL)
+ ND_PRINT("<wrong proto type>");
+ else if (ATMTPROTO_LEN(ap) != 4)
+ ND_PRINT("<wrong tplen>");
+ else
+ ND_PRINT("%s", GET_IPADDR_STRING(ATMTPA(ap)));
+}
+
+static void
+atmarp_spaddr_print(netdissect_options *ndo,
+ const struct atmarp_pkthdr *ap, u_short pro)
+{
+ if (pro != ETHERTYPE_IP && pro != ETHERTYPE_TRAIL)
+ ND_PRINT("<wrong proto type>");
+ else if (ATMSPROTO_LEN(ap) != 4)
+ ND_PRINT("<wrong splen>");
+ else
+ ND_PRINT("%s", GET_IPADDR_STRING(ATMSPA(ap)));
+}
+
+static void
+atmarp_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, u_int caplen)
+{
+ const struct atmarp_pkthdr *ap;
+ u_short pro, hrd, op;
+
+ ap = (const struct atmarp_pkthdr *)bp;
+ ND_TCHECK_SIZE(ap);
+
+ hrd = ATMHRD(ap);
+ pro = ATMPRO(ap);
+ op = ATMOP(ap);
+
+ ND_TCHECK_LEN(ATMTPA(ap), ATMTPROTO_LEN(ap));
+
+ if (!ndo->ndo_eflag) {
+ ND_PRINT("ARP, ");
+ }
+
+ if ((pro != ETHERTYPE_IP && pro != ETHERTYPE_TRAIL) ||
+ ATMSPROTO_LEN(ap) != 4 ||
+ ATMTPROTO_LEN(ap) != 4 ||
+ ndo->ndo_vflag) {
+ ND_PRINT("%s, %s (len %u/%u)",
+ tok2str(arphrd_values, "Unknown Hardware (%u)", hrd),
+ tok2str(ethertype_values, "Unknown Protocol (0x%04x)", pro),
+ ATMSPROTO_LEN(ap),
+ ATMTPROTO_LEN(ap));
+
+ /* don't know about the address formats */
+ if (!ndo->ndo_vflag) {
+ goto out;
+ }
+ }
+
+ /* print operation */
+ ND_PRINT("%s%s ",
+ ndo->ndo_vflag ? ", " : "",
+ tok2str(arpop_values, "Unknown (%u)", op));
+
+ switch (op) {
+
+ case ARPOP_REQUEST:
+ ND_PRINT("who-has ");
+ atmarp_tpaddr_print(ndo, ap, pro);
+ if (ATMTHRD_LEN(ap) != 0) {
+ ND_PRINT(" (");
+ atmarp_addr_print(ndo, ATMTHA(ap), ATMTHRD_LEN(ap),
+ ATMTSA(ap), ATMTSLN(ap));
+ ND_PRINT(")");
+ }
+ ND_PRINT(" tell ");
+ atmarp_spaddr_print(ndo, ap, pro);
+ break;
+
+ case ARPOP_REPLY:
+ atmarp_spaddr_print(ndo, ap, pro);
+ ND_PRINT(" is-at ");
+ atmarp_addr_print(ndo, ATMSHA(ap), ATMSHRD_LEN(ap), ATMSSA(ap),
+ ATMSSLN(ap));
+ break;
+
+ case ARPOP_INVREQUEST:
+ ND_PRINT("who-is ");
+ atmarp_addr_print(ndo, ATMTHA(ap), ATMTHRD_LEN(ap), ATMTSA(ap),
+ ATMTSLN(ap));
+ ND_PRINT(" tell ");
+ atmarp_addr_print(ndo, ATMSHA(ap), ATMSHRD_LEN(ap), ATMSSA(ap),
+ ATMSSLN(ap));
+ break;
+
+ case ARPOP_INVREPLY:
+ atmarp_addr_print(ndo, ATMSHA(ap), ATMSHRD_LEN(ap), ATMSSA(ap),
+ ATMSSLN(ap));
+ ND_PRINT("at ");
+ atmarp_spaddr_print(ndo, ap, pro);
+ break;
+
+ case ARPOP_NAK:
+ ND_PRINT("for ");
+ atmarp_spaddr_print(ndo, ap, pro);
+ break;
+
+ default:
+ ND_DEFAULTPRINT((const u_char *)ap, caplen);
+ return;
+ }
+
+ out:
+ ND_PRINT(", length %u", length);
+}
+
+void
+arp_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, u_int caplen)
+{
+ const struct arp_pkthdr *ap;
+ u_short pro, hrd, op, linkaddr;
+
+ ndo->ndo_protocol = "arp";
+ ap = (const struct arp_pkthdr *)bp;
+ ND_TCHECK_SIZE(ap);
+
+ hrd = HRD(ap);
+ pro = PRO(ap);
+ op = OP(ap);
+
+
+ /* if its ATM then call the ATM ARP printer
+ for Frame-relay ARP most of the fields
+ are similar to Ethernet so overload the Ethernet Printer
+ and set the linkaddr type for GET_LINKADDR_STRING() accordingly */
+
+ switch(hrd) {
+ case ARPHRD_ATM2225:
+ atmarp_print(ndo, bp, length, caplen);
+ return;
+ case ARPHRD_FRELAY:
+ linkaddr = LINKADDR_FRELAY;
+ break;
+ default:
+ linkaddr = LINKADDR_ETHER;
+ break;
+ }
+
+ ND_TCHECK_LEN(TPA(ap), PROTO_LEN(ap));
+
+ if (!ndo->ndo_eflag) {
+ ND_PRINT("ARP, ");
+ }
+
+ /* print hardware type/len and proto type/len */
+ if ((pro != ETHERTYPE_IP && pro != ETHERTYPE_TRAIL) ||
+ PROTO_LEN(ap) != 4 ||
+ HRD_LEN(ap) == 0 ||
+ ndo->ndo_vflag) {
+ ND_PRINT("%s (len %u), %s (len %u)",
+ tok2str(arphrd_values, "Unknown Hardware (%u)", hrd),
+ HRD_LEN(ap),
+ tok2str(ethertype_values, "Unknown Protocol (0x%04x)", pro),
+ PROTO_LEN(ap));
+
+ /* don't know about the address formats */
+ if (!ndo->ndo_vflag) {
+ goto out;
+ }
+ }
+
+ /* print operation */
+ ND_PRINT("%s%s ",
+ ndo->ndo_vflag ? ", " : "",
+ tok2str(arpop_values, "Unknown (%u)", op));
+
+ switch (op) {
+
+ case ARPOP_REQUEST:
+ ND_PRINT("who-has ");
+ tpaddr_print_ip(ndo, ap, pro);
+ if (isnonzero(ndo, (const u_char *)THA(ap), HRD_LEN(ap)))
+ ND_PRINT(" (%s)",
+ GET_LINKADDR_STRING(THA(ap), linkaddr, HRD_LEN(ap)));
+ ND_PRINT(" tell ");
+ spaddr_print_ip(ndo, ap, pro);
+ break;
+
+ case ARPOP_REPLY:
+ spaddr_print_ip(ndo, ap, pro);
+ ND_PRINT(" is-at %s",
+ GET_LINKADDR_STRING(SHA(ap), linkaddr, HRD_LEN(ap)));
+ break;
+
+ case ARPOP_REVREQUEST:
+ /*
+ * XXX - GET_LINKADDR_STRING() may return a pointer to
+ * a static buffer, so we only have one call to it per
+ * ND_PRINT() call.
+ *
+ * This should be done in a cleaner fashion.
+ */
+ ND_PRINT("who-is %s",
+ GET_LINKADDR_STRING(THA(ap), linkaddr, HRD_LEN(ap)));
+ ND_PRINT(" tell %s",
+ GET_LINKADDR_STRING(SHA(ap), linkaddr, HRD_LEN(ap)));
+ break;
+
+ case ARPOP_REVREPLY:
+ ND_PRINT("%s at ",
+ GET_LINKADDR_STRING(THA(ap), linkaddr, HRD_LEN(ap)));
+ tpaddr_print_ip(ndo, ap, pro);
+ break;
+
+ case ARPOP_INVREQUEST:
+ /*
+ * XXX - GET_LINKADDR_STRING() may return a pointer to
+ * a static buffer, so we only have one call to it per
+ * ND_PRINT() call.
+ *
+ * This should be done in a cleaner fashion.
+ */
+ ND_PRINT("who-is %s",
+ GET_LINKADDR_STRING(THA(ap), linkaddr, HRD_LEN(ap)));
+ ND_PRINT(" tell %s",
+ GET_LINKADDR_STRING(SHA(ap), linkaddr, HRD_LEN(ap)));
+ break;
+
+ case ARPOP_INVREPLY:
+ ND_PRINT("%s at ",
+ GET_LINKADDR_STRING(SHA(ap), linkaddr, HRD_LEN(ap)));
+ spaddr_print_ip(ndo, ap, pro);
+ break;
+
+ default:
+ ND_DEFAULTPRINT((const u_char *)ap, caplen);
+ return;
+ }
+
+ out:
+ ND_PRINT(", length %u", length);
+}
diff --git a/print-ascii.c b/print-ascii.c
new file mode 100644
index 0000000..a1dc4eb
--- /dev/null
+++ b/print-ascii.c
@@ -0,0 +1,235 @@
+/* $NetBSD: print-ascii.c,v 1.1 1999/09/30 14:49:12 sjg Exp $ */
+
+/*-
+ * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Alan Barrett and Simon J. Gerraty.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: ASCII packet dump printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+
+#include "netdissect-ctype.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+#define ASCII_LINELENGTH 300
+#define HEXDUMP_BYTES_PER_LINE 16
+#define HEXDUMP_SHORTS_PER_LINE (HEXDUMP_BYTES_PER_LINE / 2)
+#define HEXDUMP_HEXSTUFF_PER_SHORT 5 /* 4 hex digits and a space */
+#define HEXDUMP_HEXSTUFF_PER_LINE \
+ (HEXDUMP_HEXSTUFF_PER_SHORT * HEXDUMP_SHORTS_PER_LINE)
+
+void
+ascii_print(netdissect_options *ndo,
+ const u_char *cp, u_int length)
+{
+ u_int caplength;
+ u_char s;
+ int truncated = FALSE;
+
+ ndo->ndo_protocol = "ascii";
+ caplength = (ndo->ndo_snapend > cp) ? ND_BYTES_AVAILABLE_AFTER(cp) : 0;
+ if (length > caplength) {
+ length = caplength;
+ truncated = TRUE;
+ }
+ ND_PRINT("\n");
+ while (length > 0) {
+ s = GET_U_1(cp);
+ cp++;
+ length--;
+ if (s == '\r') {
+ /*
+ * Don't print CRs at the end of the line; they
+ * don't belong at the ends of lines on UN*X,
+ * and the standard I/O library will give us one
+ * on Windows so we don't need to print one
+ * ourselves.
+ *
+ * In the middle of a line, just print a '.'.
+ */
+ if (length > 1 && GET_U_1(cp) != '\n')
+ ND_PRINT(".");
+ } else {
+ if (!ND_ASCII_ISGRAPH(s) &&
+ (s != '\t' && s != ' ' && s != '\n'))
+ ND_PRINT(".");
+ else
+ ND_PRINT("%c", s);
+ }
+ }
+ if (truncated)
+ nd_trunc_longjmp(ndo);
+}
+
+static void
+hex_and_ascii_print_with_offset(netdissect_options *ndo, const char *ident,
+ const u_char *cp, u_int length, u_int oset)
+{
+ u_int caplength;
+ u_int i;
+ u_int s1, s2;
+ u_int nshorts;
+ int truncated = FALSE;
+ char hexstuff[HEXDUMP_SHORTS_PER_LINE*HEXDUMP_HEXSTUFF_PER_SHORT+1], *hsp;
+ char asciistuff[ASCII_LINELENGTH+1], *asp;
+
+ caplength = (ndo->ndo_snapend > cp) ? ND_BYTES_AVAILABLE_AFTER(cp) : 0;
+ if (length > caplength) {
+ length = caplength;
+ truncated = TRUE;
+ }
+ nshorts = length / sizeof(u_short);
+ i = 0;
+ hsp = hexstuff; asp = asciistuff;
+ while (nshorts != 0) {
+ s1 = GET_U_1(cp);
+ cp++;
+ s2 = GET_U_1(cp);
+ cp++;
+ (void)snprintf(hsp, sizeof(hexstuff) - (hsp - hexstuff),
+ " %02x%02x", s1, s2);
+ hsp += HEXDUMP_HEXSTUFF_PER_SHORT;
+ *(asp++) = (char)(ND_ASCII_ISGRAPH(s1) ? s1 : '.');
+ *(asp++) = (char)(ND_ASCII_ISGRAPH(s2) ? s2 : '.');
+ i++;
+ if (i >= HEXDUMP_SHORTS_PER_LINE) {
+ *hsp = *asp = '\0';
+ ND_PRINT("%s0x%04x: %-*s %s",
+ ident, oset, HEXDUMP_HEXSTUFF_PER_LINE,
+ hexstuff, asciistuff);
+ i = 0; hsp = hexstuff; asp = asciistuff;
+ oset += HEXDUMP_BYTES_PER_LINE;
+ }
+ nshorts--;
+ }
+ if (length & 1) {
+ s1 = GET_U_1(cp);
+ cp++;
+ (void)snprintf(hsp, sizeof(hexstuff) - (hsp - hexstuff),
+ " %02x", s1);
+ hsp += 3;
+ *(asp++) = (char)(ND_ASCII_ISGRAPH(s1) ? s1 : '.');
+ ++i;
+ }
+ if (i > 0) {
+ *hsp = *asp = '\0';
+ ND_PRINT("%s0x%04x: %-*s %s",
+ ident, oset, HEXDUMP_HEXSTUFF_PER_LINE,
+ hexstuff, asciistuff);
+ }
+ if (truncated)
+ nd_trunc_longjmp(ndo);
+}
+
+void
+hex_and_ascii_print(netdissect_options *ndo, const char *ident,
+ const u_char *cp, u_int length)
+{
+ hex_and_ascii_print_with_offset(ndo, ident, cp, length, 0);
+}
+
+/*
+ * telnet_print() wants this. It is essentially default_print_unaligned()
+ */
+void
+hex_print_with_offset(netdissect_options *ndo,
+ const char *ident, const u_char *cp, u_int length,
+ u_int oset)
+{
+ u_int caplength;
+ u_int i, s;
+ u_int nshorts;
+ int truncated = FALSE;
+
+ caplength = (ndo->ndo_snapend > cp) ? ND_BYTES_AVAILABLE_AFTER(cp) : 0;
+ if (length > caplength) {
+ length = caplength;
+ truncated = TRUE;
+ }
+ nshorts = length / sizeof(u_short);
+ i = 0;
+ while (nshorts != 0) {
+ if ((i++ % 8) == 0) {
+ ND_PRINT("%s0x%04x: ", ident, oset);
+ oset += HEXDUMP_BYTES_PER_LINE;
+ }
+ s = GET_U_1(cp);
+ cp++;
+ ND_PRINT(" %02x%02x", s, GET_U_1(cp));
+ cp++;
+ nshorts--;
+ }
+ if (length & 1) {
+ if ((i % 8) == 0)
+ ND_PRINT("%s0x%04x: ", ident, oset);
+ ND_PRINT(" %02x", GET_U_1(cp));
+ }
+ if (truncated)
+ nd_trunc_longjmp(ndo);
+}
+
+void
+hex_print(netdissect_options *ndo,
+ const char *ident, const u_char *cp, u_int length)
+{
+ hex_print_with_offset(ndo, ident, cp, length, 0);
+}
+
+#ifdef MAIN
+int
+main(int argc, char *argv[])
+{
+ hex_print("\n\t", "Hello, World!\n", 14);
+ printf("\n");
+ hex_and_ascii_print("\n\t", "Hello, World!\n", 14);
+ printf("\n");
+ ascii_print("Hello, World!\n", 14);
+ printf("\n");
+#define TMSG "Now is the winter of our discontent...\n"
+ hex_print_with_offset("\n\t", TMSG, sizeof(TMSG) - 1, 0x100);
+ printf("\n");
+ hex_and_ascii_print_with_offset("\n\t", TMSG, sizeof(TMSG) - 1, 0x100);
+ printf("\n");
+ exit(0);
+}
+#endif /* MAIN */
diff --git a/print-atalk.c b/print-atalk.c
new file mode 100644
index 0000000..d9f86c7
--- /dev/null
+++ b/print-atalk.c
@@ -0,0 +1,701 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: AppleTalk printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "ethertype.h"
+#include "extract.h"
+#include "appletalk.h"
+
+
+static const struct tok type2str[] = {
+ { ddpRTMP, "rtmp" },
+ { ddpRTMPrequest, "rtmpReq" },
+ { ddpECHO, "echo" },
+ { ddpIP, "IP" },
+ { ddpARP, "ARP" },
+ { ddpKLAP, "KLAP" },
+ { 0, NULL }
+};
+
+struct aarp {
+ nd_uint16_t htype, ptype;
+ nd_uint8_t halen, palen;
+ nd_uint16_t op;
+ nd_mac_addr hsaddr;
+ uint8_t psaddr[4];
+ nd_mac_addr hdaddr;
+ uint8_t pdaddr[4];
+};
+
+static void atp_print(netdissect_options *, const struct atATP *, u_int);
+static void atp_bitmap_print(netdissect_options *, u_char);
+static void nbp_print(netdissect_options *, const struct atNBP *, u_int, u_short, u_char, u_char);
+static const struct atNBPtuple *nbp_tuple_print(netdissect_options *ndo, const struct atNBPtuple *,
+ const u_char *,
+ u_short, u_char, u_char);
+static const struct atNBPtuple *nbp_name_print(netdissect_options *, const struct atNBPtuple *,
+ const u_char *);
+static const char *ataddr_string(netdissect_options *, u_short, u_char);
+static void ddp_print(netdissect_options *, const u_char *, u_int, u_int, u_short, u_char, u_char);
+static const char *ddpskt_string(netdissect_options *, u_int);
+
+/*
+ * Print LLAP packets received on a physical LocalTalk interface.
+ */
+void
+ltalk_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int hdrlen;
+
+ ndo->ndo_protocol = "ltalk";
+ hdrlen = llap_print(ndo, p, h->len);
+ if (hdrlen == 0) {
+ /* Cut short by the snapshot length. */
+ ndo->ndo_ll_hdr_len += h->caplen;
+ return;
+ }
+ ndo->ndo_ll_hdr_len += hdrlen;
+}
+
+/*
+ * Print AppleTalk LLAP packets.
+ */
+u_int
+llap_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ const struct LAP *lp;
+ const struct atDDP *dp;
+ const struct atShortDDP *sdp;
+ u_short snet;
+ u_int hdrlen;
+
+ ndo->ndo_protocol = "llap";
+ if (length < sizeof(*lp)) {
+ ND_PRINT(" [|llap %u]", length);
+ return (length);
+ }
+ if (!ND_TTEST_LEN(bp, sizeof(*lp))) {
+ nd_print_trunc(ndo);
+ return (0); /* cut short by the snapshot length */
+ }
+ lp = (const struct LAP *)bp;
+ bp += sizeof(*lp);
+ length -= sizeof(*lp);
+ hdrlen = sizeof(*lp);
+ switch (GET_U_1(lp->type)) {
+
+ case lapShortDDP:
+ if (length < ddpSSize) {
+ ND_PRINT(" [|sddp %u]", length);
+ return (length);
+ }
+ if (!ND_TTEST_LEN(bp, ddpSSize)) {
+ ND_PRINT(" [|sddp]");
+ return (0); /* cut short by the snapshot length */
+ }
+ sdp = (const struct atShortDDP *)bp;
+ ND_PRINT("%s.%s",
+ ataddr_string(ndo, 0, GET_U_1(lp->src)),
+ ddpskt_string(ndo, GET_U_1(sdp->srcSkt)));
+ ND_PRINT(" > %s.%s:",
+ ataddr_string(ndo, 0, GET_U_1(lp->dst)),
+ ddpskt_string(ndo, GET_U_1(sdp->dstSkt)));
+ bp += ddpSSize;
+ length -= ddpSSize;
+ hdrlen += ddpSSize;
+ ddp_print(ndo, bp, length, GET_U_1(sdp->type), 0,
+ GET_U_1(lp->src), GET_U_1(sdp->srcSkt));
+ break;
+
+ case lapDDP:
+ if (length < ddpSize) {
+ ND_PRINT(" [|ddp %u]", length);
+ return (length);
+ }
+ if (!ND_TTEST_LEN(bp, ddpSize)) {
+ ND_PRINT(" [|ddp]");
+ return (0); /* cut short by the snapshot length */
+ }
+ dp = (const struct atDDP *)bp;
+ snet = GET_BE_U_2(dp->srcNet);
+ ND_PRINT("%s.%s",
+ ataddr_string(ndo, snet, GET_U_1(dp->srcNode)),
+ ddpskt_string(ndo, GET_U_1(dp->srcSkt)));
+ ND_PRINT(" > %s.%s:",
+ ataddr_string(ndo, GET_BE_U_2(dp->dstNet), GET_U_1(dp->dstNode)),
+ ddpskt_string(ndo, GET_U_1(dp->dstSkt)));
+ bp += ddpSize;
+ length -= ddpSize;
+ hdrlen += ddpSize;
+ ddp_print(ndo, bp, length, GET_U_1(dp->type), snet,
+ GET_U_1(dp->srcNode), GET_U_1(dp->srcSkt));
+ break;
+
+#ifdef notdef
+ case lapKLAP:
+ klap_print(bp, length);
+ break;
+#endif
+
+ default:
+ ND_PRINT("%u > %u at-lap#%u %u",
+ GET_U_1(lp->src), GET_U_1(lp->dst), GET_U_1(lp->type),
+ length);
+ break;
+ }
+ return (hdrlen);
+}
+
+/*
+ * Print EtherTalk/TokenTalk packets (or FDDITalk, or whatever it's called
+ * when it runs over FDDI; yes, I've seen FDDI captures with AppleTalk
+ * packets in them).
+ */
+void
+atalk_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ const struct atDDP *dp;
+ u_short snet;
+
+ ndo->ndo_protocol = "atalk";
+ if(!ndo->ndo_eflag)
+ ND_PRINT("AT ");
+
+ if (length < ddpSize) {
+ ND_PRINT(" [|ddp %u]", length);
+ return;
+ }
+ if (!ND_TTEST_LEN(bp, ddpSize)) {
+ ND_PRINT(" [|ddp]");
+ return;
+ }
+ dp = (const struct atDDP *)bp;
+ snet = GET_BE_U_2(dp->srcNet);
+ ND_PRINT("%s.%s", ataddr_string(ndo, snet, GET_U_1(dp->srcNode)),
+ ddpskt_string(ndo, GET_U_1(dp->srcSkt)));
+ ND_PRINT(" > %s.%s: ",
+ ataddr_string(ndo, GET_BE_U_2(dp->dstNet), GET_U_1(dp->dstNode)),
+ ddpskt_string(ndo, GET_U_1(dp->dstSkt)));
+ bp += ddpSize;
+ length -= ddpSize;
+ ddp_print(ndo, bp, length, GET_U_1(dp->type), snet,
+ GET_U_1(dp->srcNode), GET_U_1(dp->srcSkt));
+}
+
+/* XXX should probably pass in the snap header and do checks like arp_print() */
+void
+aarp_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ const struct aarp *ap;
+
+#define AT(member) ataddr_string(ndo, (ap->member[1]<<8)|ap->member[2],ap->member[3])
+
+ ndo->ndo_protocol = "aarp";
+ ND_PRINT("aarp ");
+ ap = (const struct aarp *)bp;
+ if (!ND_TTEST_SIZE(ap)) {
+ /* Just bail if we don't have the whole chunk. */
+ nd_print_trunc(ndo);
+ return;
+ }
+ if (length < sizeof(*ap)) {
+ ND_PRINT(" [|aarp %u]", length);
+ return;
+ }
+ if (GET_BE_U_2(ap->htype) == 1 &&
+ GET_BE_U_2(ap->ptype) == ETHERTYPE_ATALK &&
+ GET_U_1(ap->halen) == MAC_ADDR_LEN && GET_U_1(ap->palen) == 4)
+ switch (GET_BE_U_2(ap->op)) {
+
+ case 1: /* request */
+ ND_PRINT("who-has %s tell %s", AT(pdaddr), AT(psaddr));
+ return;
+
+ case 2: /* response */
+ ND_PRINT("reply %s is-at %s", AT(psaddr), GET_ETHERADDR_STRING(ap->hsaddr));
+ return;
+
+ case 3: /* probe (oy!) */
+ ND_PRINT("probe %s tell %s", AT(pdaddr), AT(psaddr));
+ return;
+ }
+ ND_PRINT("len %u op %u htype %u ptype %#x halen %u palen %u",
+ length, GET_BE_U_2(ap->op), GET_BE_U_2(ap->htype),
+ GET_BE_U_2(ap->ptype), GET_U_1(ap->halen), GET_U_1(ap->palen));
+}
+
+/*
+ * Print AppleTalk Datagram Delivery Protocol packets.
+ */
+static void
+ddp_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, u_int t,
+ u_short snet, u_char snode, u_char skt)
+{
+
+ switch (t) {
+
+ case ddpNBP:
+ nbp_print(ndo, (const struct atNBP *)bp, length, snet, snode, skt);
+ break;
+
+ case ddpATP:
+ atp_print(ndo, (const struct atATP *)bp, length);
+ break;
+
+ case ddpEIGRP:
+ eigrp_print(ndo, bp, length);
+ break;
+
+ default:
+ ND_PRINT(" at-%s %u", tok2str(type2str, NULL, t), length);
+ break;
+ }
+}
+
+static void
+atp_print(netdissect_options *ndo,
+ const struct atATP *ap, u_int length)
+{
+ uint8_t control;
+ uint32_t data;
+
+ if ((const u_char *)(ap + 1) > ndo->ndo_snapend) {
+ /* Just bail if we don't have the whole chunk. */
+ nd_print_trunc(ndo);
+ return;
+ }
+ if (length < sizeof(*ap)) {
+ ND_PRINT(" [|atp %u]", length);
+ return;
+ }
+ length -= sizeof(*ap);
+ control = GET_U_1(ap->control);
+ switch (control & 0xc0) {
+
+ case atpReqCode:
+ ND_PRINT(" atp-req%s %u",
+ control & atpXO? " " : "*",
+ GET_BE_U_2(ap->transID));
+
+ atp_bitmap_print(ndo, GET_U_1(ap->bitmap));
+
+ if (length != 0)
+ ND_PRINT(" [len=%u]", length);
+
+ switch (control & (atpEOM|atpSTS)) {
+ case atpEOM:
+ ND_PRINT(" [EOM]");
+ break;
+ case atpSTS:
+ ND_PRINT(" [STS]");
+ break;
+ case atpEOM|atpSTS:
+ ND_PRINT(" [EOM,STS]");
+ break;
+ }
+ break;
+
+ case atpRspCode:
+ ND_PRINT(" atp-resp%s%u:%u (%u)",
+ control & atpEOM? "*" : " ",
+ GET_BE_U_2(ap->transID), GET_U_1(ap->bitmap),
+ length);
+ switch (control & (atpXO|atpSTS)) {
+ case atpXO:
+ ND_PRINT(" [XO]");
+ break;
+ case atpSTS:
+ ND_PRINT(" [STS]");
+ break;
+ case atpXO|atpSTS:
+ ND_PRINT(" [XO,STS]");
+ break;
+ }
+ break;
+
+ case atpRelCode:
+ ND_PRINT(" atp-rel %u", GET_BE_U_2(ap->transID));
+
+ atp_bitmap_print(ndo, GET_U_1(ap->bitmap));
+
+ /* length should be zero */
+ if (length)
+ ND_PRINT(" [len=%u]", length);
+
+ /* there shouldn't be any control flags */
+ if (control & (atpXO|atpEOM|atpSTS)) {
+ char c = '[';
+ if (control & atpXO) {
+ ND_PRINT("%cXO", c);
+ c = ',';
+ }
+ if (control & atpEOM) {
+ ND_PRINT("%cEOM", c);
+ c = ',';
+ }
+ if (control & atpSTS) {
+ ND_PRINT("%cSTS", c);
+ }
+ ND_PRINT("]");
+ }
+ break;
+
+ default:
+ ND_PRINT(" atp-0x%x %u (%u)", control,
+ GET_BE_U_2(ap->transID), length);
+ break;
+ }
+ data = GET_BE_U_4(ap->userData);
+ if (data != 0)
+ ND_PRINT(" 0x%x", data);
+}
+
+static void
+atp_bitmap_print(netdissect_options *ndo,
+ u_char bm)
+{
+ u_int i;
+
+ /*
+ * The '& 0xff' below is needed for compilers that want to sign
+ * extend a u_char, which is the case with the Ultrix compiler.
+ * (gcc is smart enough to eliminate it, at least on the Sparc).
+ */
+ if ((bm + 1) & (bm & 0xff)) {
+ char c = '<';
+ for (i = 0; bm; ++i) {
+ if (bm & 1) {
+ ND_PRINT("%c%u", c, i);
+ c = ',';
+ }
+ bm >>= 1;
+ }
+ ND_PRINT(">");
+ } else {
+ for (i = 0; bm; ++i)
+ bm >>= 1;
+ if (i > 1)
+ ND_PRINT("<0-%u>", i - 1);
+ else
+ ND_PRINT("<0>");
+ }
+}
+
+static void
+nbp_print(netdissect_options *ndo,
+ const struct atNBP *np, u_int length, u_short snet,
+ u_char snode, u_char skt)
+{
+ const struct atNBPtuple *tp =
+ (const struct atNBPtuple *)((const u_char *)np + nbpHeaderSize);
+ uint8_t control;
+ u_int i;
+ const u_char *ep;
+
+ if (length < nbpHeaderSize) {
+ ND_PRINT(" truncated-nbp %u", length);
+ return;
+ }
+
+ length -= nbpHeaderSize;
+ if (length < 8) {
+ /* must be room for at least one tuple */
+ ND_PRINT(" truncated-nbp %u", length + nbpHeaderSize);
+ return;
+ }
+ /* ep points to end of available data */
+ ep = ndo->ndo_snapend;
+ if ((const u_char *)tp > ep) {
+ nd_print_trunc(ndo);
+ return;
+ }
+ control = GET_U_1(np->control);
+ switch (i = (control & 0xf0)) {
+
+ case nbpBrRq:
+ case nbpLkUp:
+ ND_PRINT(i == nbpLkUp? " nbp-lkup %u:":" nbp-brRq %u:",
+ GET_U_1(np->id));
+ if ((const u_char *)(tp + 1) > ep) {
+ nd_print_trunc(ndo);
+ return;
+ }
+ (void)nbp_name_print(ndo, tp, ep);
+ /*
+ * look for anomalies: the spec says there can only
+ * be one tuple, the address must match the source
+ * address and the enumerator should be zero.
+ */
+ if ((control & 0xf) != 1)
+ ND_PRINT(" [ntup=%u]", control & 0xf);
+ if (GET_U_1(tp->enumerator))
+ ND_PRINT(" [enum=%u]", GET_U_1(tp->enumerator));
+ if (GET_BE_U_2(tp->net) != snet ||
+ GET_U_1(tp->node) != snode ||
+ GET_U_1(tp->skt) != skt)
+ ND_PRINT(" [addr=%s.%u]",
+ ataddr_string(ndo, GET_BE_U_2(tp->net),
+ GET_U_1(tp->node)),
+ GET_U_1(tp->skt));
+ break;
+
+ case nbpLkUpReply:
+ ND_PRINT(" nbp-reply %u:", GET_U_1(np->id));
+
+ /* print each of the tuples in the reply */
+ for (i = control & 0xf; i != 0 && tp; i--)
+ tp = nbp_tuple_print(ndo, tp, ep, snet, snode, skt);
+ break;
+
+ default:
+ ND_PRINT(" nbp-0x%x %u (%u)", control, GET_U_1(np->id),
+ length);
+ break;
+ }
+}
+
+/* print a counted string */
+static const u_char *
+print_cstring(netdissect_options *ndo,
+ const u_char *cp, const u_char *ep)
+{
+ u_int length;
+
+ if (cp >= ep) {
+ nd_print_trunc(ndo);
+ return (0);
+ }
+ length = GET_U_1(cp);
+ cp++;
+
+ /* Spec says string can be at most 32 bytes long */
+ if (length > 32) {
+ ND_PRINT("[len=%u]", length);
+ return (0);
+ }
+ while (length != 0) {
+ if (cp >= ep) {
+ nd_print_trunc(ndo);
+ return (0);
+ }
+ fn_print_char(ndo, GET_U_1(cp));
+ cp++;
+ length--;
+ }
+ return (cp);
+}
+
+static const struct atNBPtuple *
+nbp_tuple_print(netdissect_options *ndo,
+ const struct atNBPtuple *tp, const u_char *ep,
+ u_short snet, u_char snode, u_char skt)
+{
+ const struct atNBPtuple *tpn;
+
+ if ((const u_char *)(tp + 1) > ep) {
+ nd_print_trunc(ndo);
+ return 0;
+ }
+ tpn = nbp_name_print(ndo, tp, ep);
+
+ /* if the enumerator isn't 1, print it */
+ if (GET_U_1(tp->enumerator) != 1)
+ ND_PRINT("(%u)", GET_U_1(tp->enumerator));
+
+ /* if the socket doesn't match the src socket, print it */
+ if (GET_U_1(tp->skt) != skt)
+ ND_PRINT(" %u", GET_U_1(tp->skt));
+
+ /* if the address doesn't match the src address, it's an anomaly */
+ if (GET_BE_U_2(tp->net) != snet ||
+ GET_U_1(tp->node) != snode)
+ ND_PRINT(" [addr=%s]",
+ ataddr_string(ndo, GET_BE_U_2(tp->net), GET_U_1(tp->node)));
+
+ return (tpn);
+}
+
+static const struct atNBPtuple *
+nbp_name_print(netdissect_options *ndo,
+ const struct atNBPtuple *tp, const u_char *ep)
+{
+ const u_char *cp = (const u_char *)tp + nbpTupleSize;
+
+ ND_PRINT(" ");
+
+ /* Object */
+ ND_PRINT("\"");
+ if ((cp = print_cstring(ndo, cp, ep)) != NULL) {
+ /* Type */
+ ND_PRINT(":");
+ if ((cp = print_cstring(ndo, cp, ep)) != NULL) {
+ /* Zone */
+ ND_PRINT("@");
+ if ((cp = print_cstring(ndo, cp, ep)) != NULL)
+ ND_PRINT("\"");
+ }
+ }
+ return ((const struct atNBPtuple *)cp);
+}
+
+
+#define HASHNAMESIZE 4096
+
+struct hnamemem {
+ u_int addr;
+ char *name;
+ struct hnamemem *nxt;
+};
+
+static struct hnamemem hnametable[HASHNAMESIZE];
+
+static const char *
+ataddr_string(netdissect_options *ndo,
+ u_short atnet, u_char athost)
+{
+ struct hnamemem *tp, *tp2;
+ u_int i = (atnet << 8) | athost;
+ char nambuf[256+1];
+ static int first = 1;
+ FILE *fp;
+
+ /*
+ * Are we doing address to name resolution?
+ */
+ if (!ndo->ndo_nflag) {
+ /*
+ * Yes. Have we tried to open and read an AppleTalk
+ * number to name map file?
+ */
+ if (!first) {
+ /*
+ * No; try to do so.
+ */
+ first = 0;
+ fp = fopen("/etc/atalk.names", "r");
+ if (fp != NULL) {
+ char line[256];
+ u_int i1, i2;
+
+ while (fgets(line, sizeof(line), fp)) {
+ if (line[0] == '\n' || line[0] == 0 ||
+ line[0] == '#')
+ continue;
+ if (sscanf(line, "%u.%u %256s", &i1,
+ &i2, nambuf) == 3)
+ /* got a hostname. */
+ i2 |= (i1 << 8);
+ else if (sscanf(line, "%u %256s", &i1,
+ nambuf) == 2)
+ /* got a net name */
+ i2 = (i1 << 8) | 255;
+ else
+ continue;
+
+ for (tp = &hnametable[i2 & (HASHNAMESIZE-1)];
+ tp->nxt; tp = tp->nxt)
+ ;
+ tp->addr = i2;
+ tp->nxt = newhnamemem(ndo);
+ tp->name = strdup(nambuf);
+ if (tp->name == NULL)
+ (*ndo->ndo_error)(ndo,
+ S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(nambuf)", __func__);
+ }
+ fclose(fp);
+ }
+ }
+ }
+
+ /*
+ * Now try to look up the address in the table.
+ */
+ for (tp = &hnametable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt)
+ if (tp->addr == i)
+ return (tp->name);
+
+ /* didn't have the node name -- see if we've got the net name */
+ i |= 255;
+ for (tp2 = &hnametable[i & (HASHNAMESIZE-1)]; tp2->nxt; tp2 = tp2->nxt)
+ if (tp2->addr == i) {
+ tp->addr = (atnet << 8) | athost;
+ tp->nxt = newhnamemem(ndo);
+ (void)snprintf(nambuf, sizeof(nambuf), "%s.%u",
+ tp2->name, athost);
+ tp->name = strdup(nambuf);
+ if (tp->name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(nambuf)", __func__);
+ return (tp->name);
+ }
+
+ tp->addr = (atnet << 8) | athost;
+ tp->nxt = newhnamemem(ndo);
+ if (athost != 255)
+ (void)snprintf(nambuf, sizeof(nambuf), "%u.%u", atnet, athost);
+ else
+ (void)snprintf(nambuf, sizeof(nambuf), "%u", atnet);
+ tp->name = strdup(nambuf);
+ if (tp->name == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: strdup(nambuf)", __func__);
+
+ return (tp->name);
+}
+
+static const struct tok skt2str[] = {
+ { rtmpSkt, "rtmp" }, /* routing table maintenance */
+ { nbpSkt, "nis" }, /* name info socket */
+ { echoSkt, "echo" }, /* AppleTalk echo protocol */
+ { zipSkt, "zip" }, /* zone info protocol */
+ { 0, NULL }
+};
+
+static const char *
+ddpskt_string(netdissect_options *ndo,
+ u_int skt)
+{
+ static char buf[8];
+
+ if (ndo->ndo_nflag) {
+ (void)snprintf(buf, sizeof(buf), "%u", skt);
+ return (buf);
+ }
+ return (tok2str(skt2str, "%u", skt));
+}
diff --git a/print-atm.c b/print-atm.c
new file mode 100644
index 0000000..904fc47
--- /dev/null
+++ b/print-atm.c
@@ -0,0 +1,530 @@
+/*
+ * Copyright (c) 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Asynchronous Transfer Mode (ATM) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "atm.h"
+#include "llc.h"
+
+/* start of the original atmuni31.h */
+
+/*
+ * Copyright (c) 1997 Yen Yen Lim and North Dakota State University
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Yen Yen Lim and
+ North Dakota State University
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Based on UNI3.1 standard by ATM Forum */
+
+/* ATM traffic types based on VPI=0 and (the following VCI */
+#define VCI_PPC 0x05 /* Point-to-point signal msg */
+#define VCI_BCC 0x02 /* Broadcast signal msg */
+#define VCI_OAMF4SC 0x03 /* Segment OAM F4 flow cell */
+#define VCI_OAMF4EC 0x04 /* End-to-end OAM F4 flow cell */
+#define VCI_METAC 0x01 /* Meta signal msg */
+#define VCI_ILMIC 0x10 /* ILMI msg */
+
+/* Q.2931 signalling messages */
+#define CALL_PROCEED 0x02 /* call proceeding */
+#define CONNECT 0x07 /* connect */
+#define CONNECT_ACK 0x0f /* connect_ack */
+#define SETUP 0x05 /* setup */
+#define RELEASE 0x4d /* release */
+#define RELEASE_DONE 0x5a /* release_done */
+#define RESTART 0x46 /* restart */
+#define RESTART_ACK 0x4e /* restart ack */
+#define STATUS 0x7d /* status */
+#define STATUS_ENQ 0x75 /* status ack */
+#define ADD_PARTY 0x80 /* add party */
+#define ADD_PARTY_ACK 0x81 /* add party ack */
+#define ADD_PARTY_REJ 0x82 /* add party rej */
+#define DROP_PARTY 0x83 /* drop party */
+#define DROP_PARTY_ACK 0x84 /* drop party ack */
+
+/* Information Element Parameters in the signalling messages */
+#define CAUSE 0x08 /* cause */
+#define ENDPT_REF 0x54 /* endpoint reference */
+#define AAL_PARA 0x58 /* ATM adaptation layer parameters */
+#define TRAFF_DESCRIP 0x59 /* atm traffic descriptors */
+#define CONNECT_ID 0x5a /* connection identifier */
+#define QOS_PARA 0x5c /* quality of service parameters */
+#define B_HIGHER 0x5d /* broadband higher layer information */
+#define B_BEARER 0x5e /* broadband bearer capability */
+#define B_LOWER 0x5f /* broadband lower information */
+#define CALLING_PARTY 0x6c /* calling party number */
+#define CALLED_PARTY 0x70 /* called party nmber */
+
+#define Q2931 0x09
+
+/* Q.2931 signalling general messages format */
+#define PROTO_POS 0 /* offset of protocol discriminator */
+#define CALL_REF_POS 2 /* offset of call reference value */
+#define MSG_TYPE_POS 5 /* offset of message type */
+#if 0
+#define MSG_LEN_POS 7 /* offset of message length */
+#define IE_BEGIN_POS 9 /* offset of first information element */
+
+/* format of signalling messages */
+#define TYPE_POS 0
+#define LEN_POS 2
+#define FIELD_BEGIN_POS 4
+#endif
+
+/* end of the original atmuni31.h */
+
+
+#define OAM_CRC10_MASK 0x3ff
+#define OAM_PAYLOAD_LEN 48
+#define OAM_FUNCTION_SPECIFIC_LEN 45 /* this excludes crc10 and cell-type/function-type */
+#define OAM_CELLTYPE_FUNCTYPE_LEN 1
+
+static const struct tok oam_f_values[] = {
+ { VCI_OAMF4SC, "OAM F4 (segment)" },
+ { VCI_OAMF4EC, "OAM F4 (end)" },
+ { 0, NULL }
+};
+
+static const struct tok atm_pty_values[] = {
+ { 0x0, "user data, uncongested, SDU 0" },
+ { 0x1, "user data, uncongested, SDU 1" },
+ { 0x2, "user data, congested, SDU 0" },
+ { 0x3, "user data, congested, SDU 1" },
+ { 0x4, "VCC OAM F5 flow segment" },
+ { 0x5, "VCC OAM F5 flow end-to-end" },
+ { 0x6, "Traffic Control and resource Mgmt" },
+ { 0, NULL }
+};
+
+#define OAM_CELLTYPE_FM 0x1
+#define OAM_CELLTYPE_PM 0x2
+#define OAM_CELLTYPE_AD 0x8
+#define OAM_CELLTYPE_SM 0xf
+
+static const struct tok oam_celltype_values[] = {
+ { OAM_CELLTYPE_FM, "Fault Management" },
+ { OAM_CELLTYPE_PM, "Performance Management" },
+ { OAM_CELLTYPE_AD, "activate/deactivate" },
+ { OAM_CELLTYPE_SM, "System Management" },
+ { 0, NULL }
+};
+
+#define OAM_FM_FUNCTYPE_AIS 0x0
+#define OAM_FM_FUNCTYPE_RDI 0x1
+#define OAM_FM_FUNCTYPE_CONTCHECK 0x4
+#define OAM_FM_FUNCTYPE_LOOPBACK 0x8
+
+static const struct tok oam_fm_functype_values[] = {
+ { OAM_FM_FUNCTYPE_AIS, "AIS" },
+ { OAM_FM_FUNCTYPE_RDI, "RDI" },
+ { OAM_FM_FUNCTYPE_CONTCHECK, "Continuity Check" },
+ { OAM_FM_FUNCTYPE_LOOPBACK, "Loopback" },
+ { 0, NULL }
+};
+
+static const struct tok oam_pm_functype_values[] = {
+ { 0x0, "Forward Monitoring" },
+ { 0x1, "Backward Reporting" },
+ { 0x2, "Monitoring and Reporting" },
+ { 0, NULL }
+};
+
+static const struct tok oam_ad_functype_values[] = {
+ { 0x0, "Performance Monitoring" },
+ { 0x1, "Continuity Check" },
+ { 0, NULL }
+};
+
+#define OAM_FM_LOOPBACK_INDICATOR_MASK 0x1
+
+static const struct tok oam_fm_loopback_indicator_values[] = {
+ { 0x0, "Reply" },
+ { 0x1, "Request" },
+ { 0, NULL }
+};
+
+static const struct uint_tokary oam_celltype2tokary[] = {
+ { OAM_CELLTYPE_FM, oam_fm_functype_values },
+ { OAM_CELLTYPE_PM, oam_pm_functype_values },
+ { OAM_CELLTYPE_AD, oam_ad_functype_values },
+ /* uint2tokary() does not use array termination. */
+};
+
+/*
+ * Print an RFC 1483 LLC-encapsulated ATM frame.
+ */
+static u_int
+atm_llc_print(netdissect_options *ndo,
+ const u_char *p, int length, int caplen)
+{
+ int llc_hdrlen;
+
+ llc_hdrlen = llc_print(ndo, p, length, caplen, NULL, NULL);
+ if (llc_hdrlen < 0) {
+ /* packet not known, print raw packet */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ llc_hdrlen = -llc_hdrlen;
+ }
+ return (llc_hdrlen);
+}
+
+/*
+ * Given a SAP value, generate the LLC header value for a UI packet
+ * with that SAP as the source and destination SAP.
+ */
+#define LLC_UI_HDR(sap) ((sap)<<16 | (sap<<8) | 0x03)
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the LLC/SNAP header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+atm_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+ uint32_t llchdr;
+ u_int hdrlen = 0;
+
+ ndo->ndo_protocol = "atm";
+
+ /* Cisco Style NLPID ? */
+ if (GET_U_1(p) == LLC_UI) {
+ if (ndo->ndo_eflag)
+ ND_PRINT("CNLPID ");
+ ndo->ndo_ll_hdr_len += 1;
+ isoclns_print(ndo, p + 1, length - 1);
+ return;
+ }
+
+ /*
+ * Must have at least a DSAP, an SSAP, and the first byte of the
+ * control field.
+ */
+
+ /*
+ * Extract the presumed LLC header into a variable, for quick
+ * testing.
+ * Then check for a header that's neither a header for a SNAP
+ * packet nor an RFC 2684 routed NLPID-formatted PDU nor
+ * an 802.2-but-no-SNAP IP packet.
+ */
+ llchdr = GET_BE_U_3(p);
+ if (llchdr != LLC_UI_HDR(LLCSAP_SNAP) &&
+ llchdr != LLC_UI_HDR(LLCSAP_ISONS) &&
+ llchdr != LLC_UI_HDR(LLCSAP_IP)) {
+ /*
+ * XXX - assume 802.6 MAC header from Fore driver.
+ *
+ * Unfortunately, the above list doesn't check for
+ * all known SAPs, doesn't check for headers where
+ * the source and destination SAP aren't the same,
+ * and doesn't check for non-UI frames. It also
+ * runs the risk of an 802.6 MAC header that happens
+ * to begin with one of those values being
+ * incorrectly treated as an 802.2 header.
+ *
+ * So is that Fore driver still around? And, if so,
+ * is it still putting 802.6 MAC headers on ATM
+ * packets? If so, could it be changed to use a
+ * new DLT_IEEE802_6 value if we added it?
+ */
+ if (ndo->ndo_eflag)
+ ND_PRINT("%08x%08x %08x%08x ",
+ GET_BE_U_4(p),
+ GET_BE_U_4(p + 4),
+ GET_BE_U_4(p + 8),
+ GET_BE_U_4(p + 12));
+ /* Always cover the full header. */
+ ND_TCHECK_LEN(p, 20);
+ p += 20;
+ length -= 20;
+ caplen -= 20;
+ hdrlen += 20;
+ }
+ ndo->ndo_ll_hdr_len += hdrlen;
+ ndo->ndo_ll_hdr_len += atm_llc_print(ndo, p, length, caplen);
+}
+
+/*
+ * ATM signalling.
+ */
+static const struct tok msgtype2str[] = {
+ { CALL_PROCEED, "Call_proceeding" },
+ { CONNECT, "Connect" },
+ { CONNECT_ACK, "Connect_ack" },
+ { SETUP, "Setup" },
+ { RELEASE, "Release" },
+ { RELEASE_DONE, "Release_complete" },
+ { RESTART, "Restart" },
+ { RESTART_ACK, "Restart_ack" },
+ { STATUS, "Status" },
+ { STATUS_ENQ, "Status_enquiry" },
+ { ADD_PARTY, "Add_party" },
+ { ADD_PARTY_ACK, "Add_party_ack" },
+ { ADD_PARTY_REJ, "Add_party_reject" },
+ { DROP_PARTY, "Drop_party" },
+ { DROP_PARTY_ACK, "Drop_party_ack" },
+ { 0, NULL }
+};
+
+static void
+sig_print(netdissect_options *ndo,
+ const u_char *p)
+{
+ uint32_t call_ref;
+
+ if (GET_U_1(p + PROTO_POS) == Q2931) {
+ /*
+ * protocol:Q.2931 for User to Network Interface
+ * (UNI 3.1) signalling
+ */
+ ND_PRINT("Q.2931");
+ ND_PRINT(":%s ",
+ tok2str(msgtype2str, "msgtype#%u", GET_U_1(p + MSG_TYPE_POS)));
+
+ /*
+ * The call reference comes before the message type,
+ * so if we know we have the message type, which we
+ * do from the caplen test above, we also know we have
+ * the call reference.
+ */
+ call_ref = GET_BE_U_3(p + CALL_REF_POS);
+ ND_PRINT("CALL_REF:0x%06x", call_ref);
+ } else {
+ /* SSCOP with some unknown protocol atop it */
+ ND_PRINT("SSCOP, proto %u ", GET_U_1(p + PROTO_POS));
+ }
+}
+
+/*
+ * Print an ATM PDU (such as an AAL5 PDU).
+ */
+void
+atm_print(netdissect_options *ndo,
+ u_int vpi, u_int vci, u_int traftype, const u_char *p, u_int length,
+ u_int caplen)
+{
+ ndo->ndo_protocol = "atm";
+ if (ndo->ndo_eflag)
+ ND_PRINT("VPI:%u VCI:%u ", vpi, vci);
+
+ if (vpi == 0) {
+ switch (vci) {
+
+ case VCI_PPC:
+ sig_print(ndo, p);
+ return;
+
+ case VCI_BCC:
+ ND_PRINT("broadcast sig: ");
+ return;
+
+ case VCI_OAMF4SC: /* fall through */
+ case VCI_OAMF4EC:
+ oam_print(ndo, p, length, ATM_OAM_HEC);
+ return;
+
+ case VCI_METAC:
+ ND_PRINT("meta: ");
+ return;
+
+ case VCI_ILMIC:
+ ND_PRINT("ilmi: ");
+ snmp_print(ndo, p, length);
+ return;
+ }
+ }
+
+ switch (traftype) {
+
+ case ATM_LLC:
+ default:
+ /*
+ * Assumes traffic is LLC if unknown.
+ */
+ atm_llc_print(ndo, p, length, caplen);
+ break;
+
+ case ATM_LANE:
+ lane_print(ndo, p, length, caplen);
+ break;
+ }
+}
+
+struct oam_fm_loopback_t {
+ nd_uint8_t loopback_indicator;
+ nd_uint32_t correlation_tag;
+ nd_byte loopback_id[12];
+ nd_byte source_id[12];
+ nd_byte unused[16];
+};
+
+struct oam_fm_ais_rdi_t {
+ nd_uint8_t failure_type;
+ nd_byte failure_location[16];
+ nd_byte unused[28];
+};
+
+void
+oam_print(netdissect_options *ndo,
+ const u_char *p, u_int length, u_int hec)
+{
+ uint32_t cell_header;
+ uint16_t vpi, vci, cksum, cksum_shouldbe, idx;
+ uint8_t cell_type, func_type, payload, clp;
+ const struct tok *oam_functype_str;
+
+ union {
+ const struct oam_fm_loopback_t *oam_fm_loopback;
+ const struct oam_fm_ais_rdi_t *oam_fm_ais_rdi;
+ } oam_ptr;
+
+ ndo->ndo_protocol = "oam";
+ cell_header = GET_BE_U_4(p + hec);
+ cell_type = (GET_U_1((p + ATM_HDR_LEN_NOHEC + hec)) >> 4) & 0x0f;
+ func_type = GET_U_1((p + ATM_HDR_LEN_NOHEC + hec)) & 0x0f;
+
+ vpi = (cell_header>>20)&0xff;
+ vci = (cell_header>>4)&0xffff;
+ payload = (cell_header>>1)&0x7;
+ clp = cell_header&0x1;
+
+ ND_PRINT("%s, vpi %u, vci %u, payload [ %s ], clp %u, length %u",
+ tok2str(oam_f_values, "OAM F5", vci),
+ vpi, vci,
+ tok2str(atm_pty_values, "Unknown", payload),
+ clp, length);
+
+ if (!ndo->ndo_vflag) {
+ return;
+ }
+
+ ND_PRINT("\n\tcell-type %s (%u)",
+ tok2str(oam_celltype_values, "unknown", cell_type),
+ cell_type);
+
+ oam_functype_str = uint2tokary(oam_celltype2tokary, cell_type);
+ if (oam_functype_str == NULL)
+ ND_PRINT(", func-type unknown (%u)", func_type);
+ else
+ ND_PRINT(", func-type %s (%u)",
+ tok2str(oam_functype_str, "none", func_type),
+ func_type);
+
+ p += ATM_HDR_LEN_NOHEC + hec;
+
+ switch (cell_type << 4 | func_type) {
+ case (OAM_CELLTYPE_FM << 4 | OAM_FM_FUNCTYPE_LOOPBACK):
+ oam_ptr.oam_fm_loopback = (const struct oam_fm_loopback_t *)(p + OAM_CELLTYPE_FUNCTYPE_LEN);
+ ND_TCHECK_SIZE(oam_ptr.oam_fm_loopback);
+ ND_PRINT("\n\tLoopback-Indicator %s, Correlation-Tag 0x%08x",
+ tok2str(oam_fm_loopback_indicator_values,
+ "Unknown",
+ GET_U_1(oam_ptr.oam_fm_loopback->loopback_indicator) & OAM_FM_LOOPBACK_INDICATOR_MASK),
+ GET_BE_U_4(oam_ptr.oam_fm_loopback->correlation_tag));
+ ND_PRINT("\n\tLocation-ID ");
+ for (idx = 0; idx < sizeof(oam_ptr.oam_fm_loopback->loopback_id); idx++) {
+ if (idx % 2) {
+ ND_PRINT("%04x ",
+ GET_BE_U_2(&oam_ptr.oam_fm_loopback->loopback_id[idx]));
+ }
+ }
+ ND_PRINT("\n\tSource-ID ");
+ for (idx = 0; idx < sizeof(oam_ptr.oam_fm_loopback->source_id); idx++) {
+ if (idx % 2) {
+ ND_PRINT("%04x ",
+ GET_BE_U_2(&oam_ptr.oam_fm_loopback->source_id[idx]));
+ }
+ }
+ break;
+
+ case (OAM_CELLTYPE_FM << 4 | OAM_FM_FUNCTYPE_AIS):
+ case (OAM_CELLTYPE_FM << 4 | OAM_FM_FUNCTYPE_RDI):
+ oam_ptr.oam_fm_ais_rdi = (const struct oam_fm_ais_rdi_t *)(p + OAM_CELLTYPE_FUNCTYPE_LEN);
+ ND_TCHECK_SIZE(oam_ptr.oam_fm_ais_rdi);
+ ND_PRINT("\n\tFailure-type 0x%02x",
+ GET_U_1(oam_ptr.oam_fm_ais_rdi->failure_type));
+ ND_PRINT("\n\tLocation-ID ");
+ for (idx = 0; idx < sizeof(oam_ptr.oam_fm_ais_rdi->failure_location); idx++) {
+ if (idx % 2) {
+ ND_PRINT("%04x ",
+ GET_BE_U_2(&oam_ptr.oam_fm_ais_rdi->failure_location[idx]));
+ }
+ }
+ break;
+
+ case (OAM_CELLTYPE_FM << 4 | OAM_FM_FUNCTYPE_CONTCHECK):
+ /* FIXME */
+ break;
+
+ default:
+ break;
+ }
+
+ /* crc10 checksum verification */
+ cksum = GET_BE_U_2(p + OAM_CELLTYPE_FUNCTYPE_LEN + OAM_FUNCTION_SPECIFIC_LEN)
+ & OAM_CRC10_MASK;
+ cksum_shouldbe = verify_crc10_cksum(0, p, OAM_PAYLOAD_LEN);
+
+ ND_PRINT("\n\tcksum 0x%03x (%scorrect)",
+ cksum,
+ cksum_shouldbe == 0 ? "" : "in");
+}
diff --git a/print-babel.c b/print-babel.c
new file mode 100644
index 0000000..d802a72
--- /dev/null
+++ b/print-babel.c
@@ -0,0 +1,863 @@
+/*
+ * Copyright (c) 2007-2011 Grégoire Henry, Juliusz Chroboczek
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* \summary: Babel Routing Protocol printer */
+/* Specifications:
+ *
+ * RFC 6126
+ * RFC 7298
+ * RFC 7557
+ * draft-ietf-babel-rfc6126bis-17
+ * draft-ietf-babel-hmac-10
+ * draft-ietf-babel-source-specific-0
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+static void babel_print_v2(netdissect_options *, const u_char *cp, u_int length);
+
+void
+babel_print(netdissect_options *ndo,
+ const u_char *cp, u_int length)
+{
+ ndo->ndo_protocol = "babel";
+ ND_PRINT("babel");
+
+ ND_TCHECK_4(cp);
+
+ if(GET_U_1(cp) != 42) {
+ ND_PRINT(" invalid header");
+ return;
+ } else {
+ ND_PRINT(" %u", GET_U_1(cp + 1));
+ }
+
+ switch(GET_U_1(cp + 1)) {
+ case 2:
+ babel_print_v2(ndo, cp, length);
+ break;
+ default:
+ ND_PRINT(" unknown version");
+ break;
+ }
+
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+}
+
+/* TLVs */
+#define MESSAGE_PAD1 0
+#define MESSAGE_PADN 1
+#define MESSAGE_ACK_REQ 2
+#define MESSAGE_ACK 3
+#define MESSAGE_HELLO 4
+#define MESSAGE_IHU 5
+#define MESSAGE_ROUTER_ID 6
+#define MESSAGE_NH 7
+#define MESSAGE_UPDATE 8
+#define MESSAGE_ROUTE_REQUEST 9
+#define MESSAGE_SEQNO_REQUEST 10
+#define MESSAGE_TSPC 11
+#define MESSAGE_HMAC 12
+#define MESSAGE_UPDATE_SRC_SPECIFIC 13 /* last appearance in draft-boutier-babel-source-specific-01 */
+#define MESSAGE_REQUEST_SRC_SPECIFIC 14 /* idem */
+#define MESSAGE_MH_REQUEST_SRC_SPECIFIC 15 /* idem */
+#define MESSAGE_MAC 16
+#define MESSAGE_PC 17
+#define MESSAGE_CHALLENGE_REQUEST 18
+#define MESSAGE_CHALLENGE_REPLY 19
+
+/* sub-TLVs */
+#define MESSAGE_SUB_PAD1 0
+#define MESSAGE_SUB_PADN 1
+#define MESSAGE_SUB_DIVERSITY 2
+#define MESSAGE_SUB_TIMESTAMP 3
+
+/* "Mandatory" bit in sub-TLV types */
+#define MANDATORY_MASK 0x80
+
+/* Flags for the Hello TLV */
+#define UNICAST_MASK 0x8000
+
+/* Diversity sub-TLV channel codes */
+static const struct tok diversity_str[] = {
+ { 0, "reserved" },
+ { 255, "all" },
+ { 0, NULL }
+};
+
+static const char *
+format_id(netdissect_options *ndo, const u_char *id)
+{
+ static char buf[25];
+ snprintf(buf, 25, "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
+ GET_U_1(id), GET_U_1(id + 1), GET_U_1(id + 2),
+ GET_U_1(id + 3), GET_U_1(id + 4), GET_U_1(id + 5),
+ GET_U_1(id + 6), GET_U_1(id + 7));
+ buf[24] = '\0';
+ return buf;
+}
+
+static const unsigned char v4prefix[16] =
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0, 0, 0, 0 };
+
+static const char *
+format_prefix(netdissect_options *ndo, const u_char *prefix, unsigned char plen)
+{
+ static char buf[50];
+
+ /*
+ * prefix points to a buffer on the stack into which the prefix has
+ * been placed, so we can't use GET_IPADDR_STRING() or
+ * GET_IP6ADDR_STRING() on it.
+ */
+ if(plen >= 96 && memcmp(prefix, v4prefix, 12) == 0)
+ snprintf(buf, 50, "%s/%u", ipaddr_string(ndo, prefix + 12), plen - 96);
+ else
+ snprintf(buf, 50, "%s/%u", ip6addr_string(ndo, prefix), plen);
+ buf[49] = '\0';
+ return buf;
+}
+
+static const char *
+format_address(netdissect_options *ndo, const u_char *prefix)
+{
+ /*
+ * prefix points to a buffer on the stack into which the prefix has
+ * been placed, so we can't use GET_IPADDR_STRING() or
+ * GET_IP6ADDR_STRING() on it.
+ */
+ if(memcmp(prefix, v4prefix, 12) == 0)
+ return ipaddr_string(ndo, prefix + 12);
+ else
+ return ip6addr_string(ndo, prefix);
+}
+
+static const char *
+format_interval(const uint16_t i)
+{
+ static char buf[sizeof("000.00s")];
+
+ if (i == 0)
+ return "0.0s (bogus)";
+ snprintf(buf, sizeof(buf), "%u.%02us", i / 100, i % 100);
+ return buf;
+}
+
+static const char *
+format_interval_update(const uint16_t i)
+{
+ return i == 0xFFFF ? "infinity" : format_interval(i);
+}
+
+static const char *
+format_timestamp(const uint32_t i)
+{
+ static char buf[sizeof("0000.000000s")];
+ snprintf(buf, sizeof(buf), "%u.%06us", i / 1000000, i % 1000000);
+ return buf;
+}
+
+/* Return number of octets consumed from the input buffer (not the prefix length
+ * in bytes), or -1 for encoding error. */
+static int
+network_prefix(int ae, int plen, unsigned int omitted,
+ const unsigned char *p, const unsigned char *dp,
+ unsigned int len, unsigned char *p_r)
+{
+ unsigned pb;
+ unsigned char prefix[16];
+ int consumed = 0;
+
+ if(plen >= 0)
+ pb = (plen + 7) / 8;
+ else if(ae == 1)
+ pb = 4;
+ else
+ pb = 16;
+
+ if(pb > 16)
+ return -1;
+
+ memset(prefix, 0, 16);
+
+ switch(ae) {
+ case 0: break;
+ case 1:
+ if(omitted > 4 || pb > 4 || (pb > omitted && len < pb - omitted))
+ return -1;
+ memcpy(prefix, v4prefix, 12);
+ if(omitted) {
+ if (dp == NULL) return -1;
+ memcpy(prefix, dp, 12 + omitted);
+ }
+ if(pb > omitted) {
+ memcpy(prefix + 12 + omitted, p, pb - omitted);
+ consumed = pb - omitted;
+ }
+ break;
+ case 2:
+ if(omitted > 16 || (pb > omitted && len < pb - omitted))
+ return -1;
+ if(omitted) {
+ if (dp == NULL) return -1;
+ memcpy(prefix, dp, omitted);
+ }
+ if(pb > omitted) {
+ memcpy(prefix + omitted, p, pb - omitted);
+ consumed = pb - omitted;
+ }
+ break;
+ case 3:
+ if(pb > 8 && len < pb - 8) return -1;
+ prefix[0] = 0xfe;
+ prefix[1] = 0x80;
+ if(pb > 8) {
+ memcpy(prefix + 8, p, pb - 8);
+ consumed = pb - 8;
+ }
+ break;
+ default:
+ return -1;
+ }
+
+ memcpy(p_r, prefix, 16);
+ return consumed;
+}
+
+static int
+network_address(int ae, const unsigned char *a, unsigned int len,
+ unsigned char *a_r)
+{
+ return network_prefix(ae, -1, 0, a, NULL, len, a_r);
+}
+
+/*
+ * Sub-TLVs consume the "extra data" of Babel TLVs (see Section 4.3 of RFC6126),
+ * their encoding is similar to the encoding of TLVs, but the type namespace is
+ * different:
+ *
+ * o Type 0 stands for Pad1 sub-TLV with the same encoding as the Pad1 TLV.
+ * o Type 1 stands for PadN sub-TLV with the same encoding as the PadN TLV.
+ * o Type 2 stands for Diversity sub-TLV, which propagates diversity routing
+ * data. Its body is a variable-length sequence of 8-bit unsigned integers,
+ * each representing per-hop number of interfering radio channel for the
+ * prefix. Channel 0 is invalid and must not be used in the sub-TLV, channel
+ * 255 interferes with any other channel.
+ * o Type 3 stands for Timestamp sub-TLV, used to compute RTT between
+ * neighbours. In the case of a Hello TLV, the body stores a 32-bits
+ * timestamp, while in the case of a IHU TLV, two 32-bits timestamps are
+ * stored.
+ *
+ * Sub-TLV types 0 and 1 are valid for any TLV type, whether sub-TLV type 2 is
+ * only valid for TLV type 8 (Update). Note that within an Update TLV a missing
+ * Diversity sub-TLV is not the same as a Diversity sub-TLV with an empty body.
+ * The former would mean a lack of any claims about the interference, and the
+ * latter would state that interference is definitely absent.
+ * A type 3 sub-TLV is valid both for Hello and IHU TLVs, though the exact
+ * semantic of the sub-TLV is different in each case.
+ */
+static void
+subtlvs_print(netdissect_options *ndo,
+ const u_char *cp, const u_char *ep, const uint8_t tlv_type)
+{
+ uint8_t subtype, sublen;
+ const char *sep;
+ uint32_t t1, t2;
+
+ while (cp < ep) {
+ subtype = GET_U_1(cp);
+ cp++;
+ if(subtype == MESSAGE_SUB_PAD1) {
+ ND_PRINT(" sub-pad1");
+ continue;
+ }
+ if ((MANDATORY_MASK & subtype) != 0)
+ ND_PRINT(" (M)");
+ if(cp == ep)
+ goto invalid;
+ sublen = GET_U_1(cp);
+ cp++;
+ if(cp + sublen > ep)
+ goto invalid;
+
+ switch(subtype) {
+ case MESSAGE_SUB_PADN:
+ ND_PRINT(" sub-padn");
+ cp += sublen;
+ break;
+ case MESSAGE_SUB_DIVERSITY:
+ ND_PRINT(" sub-diversity");
+ if (sublen == 0) {
+ ND_PRINT(" empty");
+ break;
+ }
+ sep = " ";
+ while (sublen) {
+ ND_PRINT("%s%s", sep,
+ tok2str(diversity_str, "%u", GET_U_1(cp)));
+ cp++;
+ sep = "-";
+ sublen--;
+ }
+ if(tlv_type != MESSAGE_UPDATE &&
+ tlv_type != MESSAGE_UPDATE_SRC_SPECIFIC)
+ ND_PRINT(" (bogus)");
+ break;
+ case MESSAGE_SUB_TIMESTAMP:
+ ND_PRINT(" sub-timestamp");
+ if(tlv_type == MESSAGE_HELLO) {
+ if(sublen < 4)
+ goto invalid;
+ t1 = GET_BE_U_4(cp);
+ ND_PRINT(" %s", format_timestamp(t1));
+ } else if(tlv_type == MESSAGE_IHU) {
+ if(sublen < 8)
+ goto invalid;
+ t1 = GET_BE_U_4(cp);
+ ND_PRINT(" %s", format_timestamp(t1));
+ t2 = GET_BE_U_4(cp + 4);
+ ND_PRINT("|%s", format_timestamp(t2));
+ } else
+ ND_PRINT(" (bogus)");
+ cp += sublen;
+ break;
+ default:
+ ND_PRINT(" sub-unknown-0x%02x", subtype);
+ cp += sublen;
+ } /* switch */
+ } /* while */
+ return;
+
+ invalid:
+ nd_print_invalid(ndo);
+}
+
+#define ICHECK(i, l) \
+ if ((i) + (l) > tlvs_length || (i) + (l) > packet_length_remaining) \
+ goto invalid;
+
+static int
+babel_print_v2_tlvs(netdissect_options *ndo,
+ const u_char *cp, u_int tlvs_length,
+ u_int packet_length_remaining)
+{
+ u_int i;
+ u_char v4_prefix[16] =
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0, 0, 0, 0 };
+ u_char v6_prefix[16] = {0};
+
+ i = 0;
+ while(i < tlvs_length) {
+ const u_char *message;
+ uint8_t type;
+ u_int len;
+
+ message = cp + i;
+
+ ICHECK(i, 1);
+ if((type = GET_U_1(message)) == MESSAGE_PAD1) {
+ ND_PRINT(ndo->ndo_vflag ? "\n\tPad 1" : " pad1");
+ i += 1;
+ continue;
+ }
+
+ ICHECK(i, 2);
+ ND_TCHECK_2(message);
+ len = GET_U_1(message + 1);
+
+ ICHECK(i, 2 + len);
+ ND_TCHECK_LEN(message, 2 + len);
+
+ switch(type) {
+ case MESSAGE_PADN: {
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" padN");
+ else
+ ND_PRINT("\n\tPad %u", len + 2);
+ }
+ break;
+
+ case MESSAGE_ACK_REQ: {
+ u_short nonce, interval;
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" ack-req");
+ else {
+ ND_PRINT("\n\tAcknowledgment Request ");
+ if(len < 6) goto invalid;
+ nonce = GET_BE_U_2(message + 4);
+ interval = GET_BE_U_2(message + 6);
+ ND_PRINT("%04x %s", nonce, format_interval(interval));
+ }
+ }
+ break;
+
+ case MESSAGE_ACK: {
+ u_short nonce;
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" ack");
+ else {
+ ND_PRINT("\n\tAcknowledgment ");
+ if(len < 2) goto invalid;
+ nonce = GET_BE_U_2(message + 2);
+ ND_PRINT("%04x", nonce);
+ }
+ }
+ break;
+
+ case MESSAGE_HELLO: {
+ u_short seqno, interval, unicast;
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" hello");
+ else {
+ ND_PRINT("\n\tHello ");
+ if(len < 6) goto invalid;
+ unicast = (GET_BE_U_2(message + 2) & UNICAST_MASK);
+ seqno = GET_BE_U_2(message + 4);
+ interval = GET_BE_U_2(message + 6);
+ if(unicast)
+ ND_PRINT("(Unicast) ");
+ ND_PRINT("seqno %u ", seqno);
+ if(interval!=0)
+ ND_PRINT("interval %s", format_interval(interval));
+ else
+ ND_PRINT("unscheduled");
+ /* Extra data. */
+ if(len > 6)
+ subtlvs_print(ndo, message + 8, message + 2 + len, type);
+ }
+ }
+ break;
+
+ case MESSAGE_IHU: {
+ unsigned short rxcost, interval;
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" ihu");
+ else {
+ u_char address[16];
+ u_char ae;
+ int rc;
+ ND_PRINT("\n\tIHU ");
+ if(len < 6) goto invalid;
+ rxcost = GET_BE_U_2(message + 4);
+ interval = GET_BE_U_2(message + 6);
+ ae = GET_U_1(message + 2);
+ rc = network_address(ae, message + 8,
+ len - 6, address);
+ if(rc < 0) { nd_print_trunc(ndo); break; }
+ ND_PRINT("%s rxcost %u interval %s",
+ ae == 0 ? "any" : format_address(ndo, address),
+ rxcost, format_interval(interval));
+ /* Extra data. */
+ if((u_int)rc < len - 6)
+ subtlvs_print(ndo, message + 8 + rc, message + 2 + len,
+ type);
+ }
+ }
+ break;
+
+ case MESSAGE_ROUTER_ID: {
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" router-id");
+ else {
+ ND_PRINT("\n\tRouter Id");
+ if(len < 10) goto invalid;
+ ND_PRINT(" %s", format_id(ndo, message + 4));
+ }
+ }
+ break;
+
+ case MESSAGE_NH: {
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" nh");
+ else {
+ int rc;
+ u_char ae;
+ u_char nh[16];
+ ND_PRINT("\n\tNext Hop");
+ if(len < 2) goto invalid;
+ ae = GET_U_1(message + 2);
+ rc = network_address(ae, message + 4,
+ len - 2, nh);
+ if(rc < 0) goto invalid;
+ ND_PRINT(" %s", ae == 0 ? "invalid AE 0" : format_address(ndo, nh));
+ }
+ }
+ break;
+
+ case MESSAGE_UPDATE: {
+ if (!ndo->ndo_vflag) {
+ ND_PRINT(" update");
+ if(len < 10)
+ goto invalid;
+ else
+ ND_PRINT("%s%s%s",
+ (GET_U_1(message + 3) & 0x80) ? "/prefix": "",
+ (GET_U_1(message + 3) & 0x40) ? "/id" : "",
+ (GET_U_1(message + 3) & 0x3f) ? "/unknown" : "");
+ } else {
+ u_short interval, seqno, metric;
+ u_char ae, plen;
+ int rc;
+ u_char prefix[16];
+ ND_PRINT("\n\tUpdate");
+ if(len < 10) goto invalid;
+ ae = GET_U_1(message + 2);
+ plen = GET_U_1(message + 4) + (GET_U_1(message + 2) == 1 ? 96 : 0);
+ rc = network_prefix(ae,
+ GET_U_1(message + 4),
+ GET_U_1(message + 5),
+ message + 12,
+ GET_U_1(message + 2) == 1 ? v4_prefix : v6_prefix,
+ len - 10, prefix);
+ if(rc < 0) goto invalid;
+ interval = GET_BE_U_2(message + 6);
+ seqno = GET_BE_U_2(message + 8);
+ metric = GET_BE_U_2(message + 10);
+ ND_PRINT("%s%s%s %s metric %u seqno %u interval %s",
+ (GET_U_1(message + 3) & 0x80) ? "/prefix": "",
+ (GET_U_1(message + 3) & 0x40) ? "/id" : "",
+ (GET_U_1(message + 3) & 0x3f) ? "/unknown" : "",
+ ae == 0 ? "any" : format_prefix(ndo, prefix, plen),
+ metric, seqno, format_interval_update(interval));
+ if(GET_U_1(message + 3) & 0x80) {
+ if(GET_U_1(message + 2) == 1)
+ memcpy(v4_prefix, prefix, 16);
+ else
+ memcpy(v6_prefix, prefix, 16);
+ }
+ /* extra data? */
+ if((u_int)rc < len - 10)
+ subtlvs_print(ndo, message + 12 + rc, message + 2 + len, type);
+ }
+ }
+ break;
+
+ case MESSAGE_ROUTE_REQUEST: {
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" route-request");
+ else {
+ int rc;
+ u_char prefix[16], ae, plen;
+ ND_PRINT("\n\tRoute Request ");
+ if(len < 2) goto invalid;
+ ae = GET_U_1(message + 2);
+ plen = GET_U_1(message + 3) + (GET_U_1(message + 2) == 1 ? 96 : 0);
+ rc = network_prefix(ae,
+ GET_U_1(message + 3), 0,
+ message + 4, NULL, len - 2, prefix);
+ if(rc < 0) goto invalid;
+ ND_PRINT("for %s",
+ ae == 0 ? "any" : format_prefix(ndo, prefix, plen));
+ }
+ }
+ break;
+
+ case MESSAGE_SEQNO_REQUEST : {
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" seqno-request");
+ else {
+ int rc;
+ u_short seqno;
+ u_char prefix[16], ae, plen;
+ ND_PRINT("\n\tSeqno Request ");
+ if(len < 14) goto invalid;
+ ae = GET_U_1(message + 2);
+ seqno = GET_BE_U_2(message + 4);
+ rc = network_prefix(ae,
+ GET_U_1(message + 3), 0,
+ message + 16, NULL, len - 14, prefix);
+ if(rc < 0) goto invalid;
+ plen = GET_U_1(message + 3) + (GET_U_1(message + 2) == 1 ? 96 : 0);
+ ND_PRINT("(%u hops) for %s seqno %u id %s",
+ GET_U_1(message + 6),
+ ae == 0 ? "invalid AE 0" : format_prefix(ndo, prefix, plen),
+ seqno, format_id(ndo, message + 8));
+ }
+ }
+ break;
+ case MESSAGE_TSPC :
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" tspc");
+ else {
+ ND_PRINT("\n\tTS/PC ");
+ if(len < 6) goto invalid;
+ ND_PRINT("timestamp %u packetcounter %u",
+ GET_BE_U_4(message + 4),
+ GET_BE_U_2(message + 2));
+ }
+ break;
+ case MESSAGE_HMAC : {
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" hmac");
+ else {
+ unsigned j;
+ ND_PRINT("\n\tHMAC ");
+ if(len < 18) goto invalid;
+ ND_PRINT("key-id %u digest-%u ", GET_BE_U_2(message + 2),
+ len - 2);
+ for (j = 0; j < len - 2; j++)
+ ND_PRINT("%02X", GET_U_1(message + j + 4));
+ }
+ }
+ break;
+
+ case MESSAGE_UPDATE_SRC_SPECIFIC : {
+ if(!ndo->ndo_vflag) {
+ ND_PRINT(" ss-update");
+ } else {
+ u_char prefix[16], src_prefix[16];
+ u_short interval, seqno, metric;
+ u_char ae, plen, src_plen, omitted;
+ int rc;
+ int parsed_len = 10;
+ ND_PRINT("\n\tSS-Update");
+ if(len < 10) goto invalid;
+ ae = GET_U_1(message + 2);
+ src_plen = GET_U_1(message + 3);
+ plen = GET_U_1(message + 4);
+ omitted = GET_U_1(message + 5);
+ interval = GET_BE_U_2(message + 6);
+ seqno = GET_BE_U_2(message + 8);
+ metric = GET_BE_U_2(message + 10);
+ rc = network_prefix(ae, plen, omitted, message + 2 + parsed_len,
+ ae == 1 ? v4_prefix : v6_prefix,
+ len - parsed_len, prefix);
+ if(rc < 0) goto invalid;
+ if(ae == 1)
+ plen += 96;
+ parsed_len += rc;
+ rc = network_prefix(ae, src_plen, 0, message + 2 + parsed_len,
+ NULL, len - parsed_len, src_prefix);
+ if(rc < 0) goto invalid;
+ if(ae == 1)
+ src_plen += 96;
+ parsed_len += rc;
+
+ ND_PRINT(" %s from", format_prefix(ndo, prefix, plen));
+ ND_PRINT(" %s metric %u seqno %u interval %s",
+ format_prefix(ndo, src_prefix, src_plen),
+ metric, seqno, format_interval_update(interval));
+ /* extra data? */
+ if((u_int)parsed_len < len)
+ subtlvs_print(ndo, message + 2 + parsed_len,
+ message + 2 + len, type);
+ }
+ }
+ break;
+
+ case MESSAGE_REQUEST_SRC_SPECIFIC : {
+ if(!ndo->ndo_vflag)
+ ND_PRINT(" ss-request");
+ else {
+ int rc, parsed_len = 3;
+ u_char ae, plen, src_plen, prefix[16], src_prefix[16];
+ ND_PRINT("\n\tSS-Request ");
+ if(len < 3) goto invalid;
+ ae = GET_U_1(message + 2);
+ plen = GET_U_1(message + 3);
+ src_plen = GET_U_1(message + 4);
+ rc = network_prefix(ae, plen, 0, message + 2 + parsed_len,
+ NULL, len - parsed_len, prefix);
+ if(rc < 0) goto invalid;
+ if(ae == 1)
+ plen += 96;
+ parsed_len += rc;
+ rc = network_prefix(ae, src_plen, 0, message + 2 + parsed_len,
+ NULL, len - parsed_len, src_prefix);
+ if(rc < 0) goto invalid;
+ if(ae == 1)
+ src_plen += 96;
+ parsed_len += rc;
+ if(ae == 0) {
+ ND_PRINT("for any");
+ } else {
+ ND_PRINT("for (%s, ", format_prefix(ndo, prefix, plen));
+ ND_PRINT("%s)", format_prefix(ndo, src_prefix, src_plen));
+ }
+ }
+ }
+ break;
+
+ case MESSAGE_MH_REQUEST_SRC_SPECIFIC : {
+ if(!ndo->ndo_vflag)
+ ND_PRINT(" ss-mh-request");
+ else {
+ int rc, parsed_len = 14;
+ u_short seqno;
+ u_char ae, plen, src_plen, prefix[16], src_prefix[16], hopc;
+ const u_char *router_id = NULL;
+ ND_PRINT("\n\tSS-MH-Request ");
+ if(len < 14) goto invalid;
+ ae = GET_U_1(message + 2);
+ plen = GET_U_1(message + 3);
+ seqno = GET_BE_U_2(message + 4);
+ hopc = GET_U_1(message + 6);
+ src_plen = GET_U_1(message + 7);
+ router_id = message + 8;
+ rc = network_prefix(ae, plen, 0, message + 2 + parsed_len,
+ NULL, len - parsed_len, prefix);
+ if(rc < 0) goto invalid;
+ if(ae == 1)
+ plen += 96;
+ parsed_len += rc;
+ rc = network_prefix(ae, src_plen, 0, message + 2 + parsed_len,
+ NULL, len - parsed_len, src_prefix);
+ if(rc < 0) goto invalid;
+ if(ae == 1)
+ src_plen += 96;
+ ND_PRINT("(%u hops) for (%s, ",
+ hopc, format_prefix(ndo, prefix, plen));
+ ND_PRINT("%s) seqno %u id %s",
+ format_prefix(ndo, src_prefix, src_plen),
+ seqno, format_id(ndo, router_id));
+ }
+ }
+ break;
+
+ case MESSAGE_MAC: {
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" mac");
+ else {
+ ND_PRINT("\n\tMAC ");
+ ND_PRINT("len %u", len);
+ }
+ }
+ break;
+
+ case MESSAGE_PC: {
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" pc");
+ else {
+ ND_PRINT("\n\tPC");
+ if(len < 4) goto invalid;
+ ND_PRINT(" value %u",
+ GET_BE_U_4(message + 2));
+ ND_PRINT(" index len %u", len-4);
+ }
+ }
+ break;
+
+ case MESSAGE_CHALLENGE_REQUEST: {
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" challenge_request");
+ else {
+ ND_PRINT("\n\tChallenge Request");
+ if(len > 192) goto invalid;
+ ND_PRINT(" len %u", len);
+ }
+ }
+ break;
+
+ case MESSAGE_CHALLENGE_REPLY: {
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" challenge_reply");
+ else {
+ ND_PRINT("\n\tChallenge Reply");
+ if (len > 192) goto invalid;
+ ND_PRINT(" len %u", len);
+ }
+ }
+ break;
+
+ default:
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" unknown");
+ else
+ ND_PRINT("\n\tUnknown message type %u", type);
+ }
+ i += len + 2;
+ }
+
+ return 0; /* OK */
+
+trunc:
+ return -1; /* packet truncated by capture process */
+
+invalid:
+ return -2; /* packet is invalid */
+}
+
+static void
+babel_print_v2(netdissect_options *ndo,
+ const u_char *cp, u_int length)
+{
+ u_short bodylen;
+ int ret;
+
+ ND_TCHECK_4(cp);
+ if (length < 4)
+ goto invalid;
+ bodylen = GET_BE_U_2(cp + 2);
+ ND_PRINT(" (%u)", bodylen);
+ length -= 4;
+ cp += 4;
+
+ /* Process the TLVs in the body */
+ if (length < bodylen)
+ goto invalid;
+ ret = babel_print_v2_tlvs(ndo, cp, bodylen, length);
+ if (ret == -1)
+ goto trunc;
+ if (ret == -2)
+ goto invalid;
+ length -= bodylen;
+ cp += bodylen;
+
+ /* If there's a trailer, process the TLVs in the trailer */
+ if (length != 0) {
+ if(ndo->ndo_vflag) ND_PRINT("\n\t----");
+ else ND_PRINT(" |");
+ ret = babel_print_v2_tlvs(ndo, cp, length, length);
+ if (ret == -1)
+ goto trunc;
+ if (ret == -2)
+ goto invalid;
+ }
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+ return;
+
+ invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-bcm-li.c b/print-bcm-li.c
new file mode 100644
index 0000000..12b1ebb
--- /dev/null
+++ b/print-bcm-li.c
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Broadcom LI Printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#define BCM_LI_SHIM_LEN 4
+
+static const struct tok bcm_li_direction_values[] = {
+ { 1, "unused" },
+ { 2, "egress" },
+ { 3, "ingress" },
+ { 0, NULL}
+};
+
+#define BCM_LI_PKT_TYPE_UNDECIDED 4
+#define BCM_LI_PKT_TYPE_IPV4 5
+#define BCM_LI_PKT_TYPE_IPV6 6
+#define BCM_LI_PKT_TYPE_ETHERNET 7
+
+static const struct tok bcm_li_pkt_type_values[] = {
+ { BCM_LI_PKT_TYPE_UNDECIDED, "undecided" },
+ { BCM_LI_PKT_TYPE_IPV4, "ipv4" },
+ { BCM_LI_PKT_TYPE_IPV6, "ipv6" },
+ { BCM_LI_PKT_TYPE_ETHERNET, "ethernet" },
+ { 0, NULL}
+};
+
+static const struct tok bcm_li_pkt_subtype_values[] = {
+ { 1, "single VLAN tag" },
+ { 2, "double VLAN tag" },
+ { 3, "untagged" },
+ { 0, NULL}
+};
+
+void
+bcm_li_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ u_int shim, direction, pkt_type, pkt_subtype, li_id;
+
+ ndo->ndo_protocol = "bcm_li";
+ if (length < BCM_LI_SHIM_LEN) {
+ ND_PRINT(" (length %u < %u)", length, BCM_LI_SHIM_LEN);
+ goto invalid;
+ }
+ shim = GET_BE_U_4(bp);
+
+ direction = (shim >> 29) & 0x7;
+ pkt_type = (shim >> 25) & 0xf;
+ pkt_subtype = (shim >> 22) & 0x7;
+ li_id = shim & 0x3fffff;
+
+ length -= BCM_LI_SHIM_LEN;
+ bp += BCM_LI_SHIM_LEN;
+
+ ND_PRINT("%sBCM-LI-SHIM: direction %s, pkt-type %s, pkt-subtype %s, li-id %u%s",
+ ndo->ndo_vflag ? "\n " : "",
+ tok2str(bcm_li_direction_values, "unknown", direction),
+ tok2str(bcm_li_pkt_type_values, "unknown", pkt_type),
+ tok2str(bcm_li_pkt_subtype_values, "unknown", pkt_subtype),
+ li_id,
+ ndo->ndo_vflag ? "\n ": "");
+
+ if (!ndo->ndo_vflag) {
+ ND_TCHECK_LEN(bp, length);
+ return;
+ }
+
+ switch (pkt_type) {
+ case BCM_LI_PKT_TYPE_ETHERNET:
+ ether_print(ndo, bp, length, ND_BYTES_AVAILABLE_AFTER(bp), NULL, NULL);
+ break;
+ case BCM_LI_PKT_TYPE_IPV4:
+ ip_print(ndo, bp, length);
+ break;
+ case BCM_LI_PKT_TYPE_IPV6:
+ ip6_print(ndo, bp, length);
+ break;
+ case BCM_LI_PKT_TYPE_UNDECIDED:
+
+ /*
+ * Guess IP version from first nibble.
+ */
+ if ((GET_U_1(bp) >> 4) == 4) {
+ ip_print(ndo, bp, length);
+ } else if ((GET_U_1(bp) >> 4) == 6) {
+ ip6_print(ndo, bp, length);
+ } else {
+ ND_PRINT("unknown payload");
+ }
+ break;
+
+ default:
+ goto invalid;
+ }
+
+ return;
+invalid:
+ nd_print_invalid(ndo);
+}
+
diff --git a/print-beep.c b/print-beep.c
new file mode 100644
index 0000000..76017ea
--- /dev/null
+++ b/print-beep.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2000, Richard Sharpe
+ *
+ * This software may be distributed either under the terms of the
+ * BSD-style license that accompanies tcpdump or under the GNU GPL
+ * version 2 or later.
+ *
+ * print-beep.c
+ *
+ */
+
+/* \summary: Blocks Extensible Exchange Protocol (BEEP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect.h"
+
+/* Check for a string but not go beyond length
+ * Return TRUE on match, FALSE otherwise
+ *
+ * Looks at the first few chars up to tl1 ...
+ */
+
+static int
+l_strnstart(netdissect_options *ndo, const char *tstr1, u_int tl1,
+ const char *str2, u_int l2)
+{
+ if (!ND_TTEST_LEN(str2, tl1)) {
+ /*
+ * We don't have tl1 bytes worth of captured data
+ * for the string, so we can't check for this
+ * string.
+ */
+ return 0;
+ }
+ if (tl1 > l2)
+ return 0;
+
+ return (strncmp(tstr1, str2, tl1) == 0 ? 1 : 0);
+}
+
+void
+beep_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+
+ ndo->ndo_protocol = "beep";
+ if (l_strnstart(ndo, "MSG", 4, (const char *)bp, length)) /* A REQuest */
+ ND_PRINT(" BEEP MSG");
+ else if (l_strnstart(ndo, "RPY ", 4, (const char *)bp, length))
+ ND_PRINT(" BEEP RPY");
+ else if (l_strnstart(ndo, "ERR ", 4, (const char *)bp, length))
+ ND_PRINT(" BEEP ERR");
+ else if (l_strnstart(ndo, "ANS ", 4, (const char *)bp, length))
+ ND_PRINT(" BEEP ANS");
+ else if (l_strnstart(ndo, "NUL ", 4, (const char *)bp, length))
+ ND_PRINT(" BEEP NUL");
+ else if (l_strnstart(ndo, "SEQ ", 4, (const char *)bp, length))
+ ND_PRINT(" BEEP SEQ");
+ else if (l_strnstart(ndo, "END", 4, (const char *)bp, length))
+ ND_PRINT(" BEEP END");
+ else
+ ND_PRINT(" BEEP (payload or undecoded)");
+}
diff --git a/print-bfd.c b/print-bfd.c
new file mode 100644
index 0000000..8c04735
--- /dev/null
+++ b/print-bfd.c
@@ -0,0 +1,426 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+/* \summary: Bidirectional Forwarding Detection (BFD) printer */
+
+/*
+ * specification: draft-ietf-bfd-base-01 for version 0,
+ * RFC 5880 for version 1, and RFC 5881
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+#include "udp.h"
+
+/*
+ * Control packet, BFDv0, draft-ietf-bfd-base-01
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Vers | Diag |H|D|P|F|C|A|Rsv| Detect Mult | Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | My Discriminator |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Your Discriminator |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Desired Min TX Interval |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Required Min RX Interval |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Required Min Echo RX Interval |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+/*
+ * Control packet, BFDv1, RFC 5880
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Vers | Diag |Sta|P|F|C|A|D|M| Detect Mult | Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | My Discriminator |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Your Discriminator |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Desired Min TX Interval |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Required Min RX Interval |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Required Min Echo RX Interval |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+struct bfd_header_t {
+ nd_uint8_t version_diag;
+ nd_uint8_t flags;
+ nd_uint8_t detect_time_multiplier;
+ nd_uint8_t length;
+ nd_uint32_t my_discriminator;
+ nd_uint32_t your_discriminator;
+ nd_uint32_t desired_min_tx_interval;
+ nd_uint32_t required_min_rx_interval;
+ nd_uint32_t required_min_echo_interval;
+};
+
+/*
+ * An optional Authentication Header may be present
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Auth Type | Auth Len | Authentication Data... |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+struct bfd_auth_header_t {
+ nd_uint8_t auth_type;
+ nd_uint8_t auth_len;
+ nd_uint8_t auth_data;
+ nd_uint8_t dummy; /* minimum 4 bytes */
+};
+
+enum auth_type {
+ AUTH_PASSWORD = 1,
+ AUTH_MD5 = 2,
+ AUTH_MET_MD5 = 3,
+ AUTH_SHA1 = 4,
+ AUTH_MET_SHA1 = 5
+};
+
+static const struct tok bfd_v1_authentication_values[] = {
+ { AUTH_PASSWORD, "Simple Password" },
+ { AUTH_MD5, "Keyed MD5" },
+ { AUTH_MET_MD5, "Meticulous Keyed MD5" },
+ { AUTH_SHA1, "Keyed SHA1" },
+ { AUTH_MET_SHA1, "Meticulous Keyed SHA1" },
+ { 0, NULL }
+};
+
+enum auth_length {
+ AUTH_PASSWORD_FIELD_MIN_LEN = 4, /* header + password min: 3 + 1 */
+ AUTH_PASSWORD_FIELD_MAX_LEN = 19, /* header + password max: 3 + 16 */
+ AUTH_MD5_FIELD_LEN = 24,
+ AUTH_MD5_HASH_LEN = 16,
+ AUTH_SHA1_FIELD_LEN = 28,
+ AUTH_SHA1_HASH_LEN = 20
+};
+
+#define BFD_EXTRACT_VERSION(x) (((x)&0xe0)>>5)
+#define BFD_EXTRACT_DIAG(x) ((x)&0x1f)
+
+static const struct tok bfd_diag_values[] = {
+ { 0, "No Diagnostic" },
+ { 1, "Control Detection Time Expired" },
+ { 2, "Echo Function Failed" },
+ { 3, "Neighbor Signaled Session Down" },
+ { 4, "Forwarding Plane Reset" },
+ { 5, "Path Down" },
+ { 6, "Concatenated Path Down" },
+ { 7, "Administratively Down" },
+ { 8, "Reverse Concatenated Path Down" },
+ { 0, NULL }
+};
+
+static const struct tok bfd_port_values[] = {
+ { BFD_CONTROL_PORT, "Control" },
+ { BFD_MULTIHOP_PORT, "Multihop" },
+ { BFD_LAG_PORT, "Lag" },
+ { 0, NULL }
+};
+
+#define BFD_FLAG_AUTH 0x04
+
+static const struct tok bfd_v0_flag_values[] = {
+ { 0x80, "I Hear You" },
+ { 0x40, "Demand" },
+ { 0x20, "Poll" },
+ { 0x10, "Final" },
+ { 0x08, "Control Plane Independent" },
+ { BFD_FLAG_AUTH, "Authentication Present" },
+ { 0x02, "Reserved" },
+ { 0x01, "Reserved" },
+ { 0, NULL }
+};
+
+static const struct tok bfd_v1_flag_values[] = {
+ { 0x20, "Poll" },
+ { 0x10, "Final" },
+ { 0x08, "Control Plane Independent" },
+ { BFD_FLAG_AUTH, "Authentication Present" },
+ { 0x02, "Demand" },
+ { 0x01, "Multipoint" },
+ { 0, NULL }
+};
+
+static const struct tok bfd_v1_state_values[] = {
+ { 0, "AdminDown" },
+ { 1, "Down" },
+ { 2, "Init" },
+ { 3, "Up" },
+ { 0, NULL }
+};
+
+static void
+auth_print(netdissect_options *ndo, const u_char *pptr)
+{
+ const struct bfd_auth_header_t *bfd_auth_header;
+ uint8_t auth_type, auth_len;
+ int i;
+
+ pptr += sizeof (struct bfd_header_t);
+ bfd_auth_header = (const struct bfd_auth_header_t *)pptr;
+ ND_TCHECK_SIZE(bfd_auth_header);
+ auth_type = GET_U_1(bfd_auth_header->auth_type);
+ auth_len = GET_U_1(bfd_auth_header->auth_len);
+ ND_PRINT("\n\tAuthentication: %s (%u), length: %u",
+ tok2str(bfd_v1_authentication_values,"Unknown",auth_type),
+ auth_type, auth_len);
+ pptr += 2;
+ ND_PRINT("\n\t Auth Key ID: %u", GET_U_1(pptr));
+
+ switch(auth_type) {
+ case AUTH_PASSWORD:
+/*
+ * Simple Password Authentication Section Format
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Auth Type | Auth Len | Auth Key ID | Password... |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | ... |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+ if (auth_len < AUTH_PASSWORD_FIELD_MIN_LEN ||
+ auth_len > AUTH_PASSWORD_FIELD_MAX_LEN) {
+ ND_PRINT("[invalid length %u]",
+ auth_len);
+ break;
+ }
+ pptr++;
+ ND_PRINT(", Password: ");
+ /* the length is equal to the password length plus three */
+ (void)nd_printn(ndo, pptr, auth_len - 3, NULL);
+ break;
+ case AUTH_MD5:
+ case AUTH_MET_MD5:
+/*
+ * Keyed MD5 and Meticulous Keyed MD5 Authentication Section Format
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Auth Type | Auth Len | Auth Key ID | Reserved |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Sequence Number |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Auth Key/Digest... |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | ... |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+ if (auth_len != AUTH_MD5_FIELD_LEN) {
+ ND_PRINT("[invalid length %u]",
+ auth_len);
+ break;
+ }
+ pptr += 2;
+ ND_PRINT(", Sequence Number: 0x%08x", GET_BE_U_4(pptr));
+ pptr += 4;
+ ND_TCHECK_LEN(pptr, AUTH_MD5_HASH_LEN);
+ ND_PRINT("\n\t Digest: ");
+ for(i = 0; i < AUTH_MD5_HASH_LEN; i++)
+ ND_PRINT("%02x", GET_U_1(pptr + i));
+ break;
+ case AUTH_SHA1:
+ case AUTH_MET_SHA1:
+/*
+ * Keyed SHA1 and Meticulous Keyed SHA1 Authentication Section Format
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Auth Type | Auth Len | Auth Key ID | Reserved |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Sequence Number |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Auth Key/Hash... |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | ... |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+ if (auth_len != AUTH_SHA1_FIELD_LEN) {
+ ND_PRINT("[invalid length %u]",
+ auth_len);
+ break;
+ }
+ pptr += 2;
+ ND_PRINT(", Sequence Number: 0x%08x", GET_BE_U_4(pptr));
+ pptr += 4;
+ ND_TCHECK_LEN(pptr, AUTH_SHA1_HASH_LEN);
+ ND_PRINT("\n\t Hash: ");
+ for(i = 0; i < AUTH_SHA1_HASH_LEN; i++)
+ ND_PRINT("%02x", GET_U_1(pptr + i));
+ break;
+ }
+}
+
+void
+bfd_print(netdissect_options *ndo, const u_char *pptr,
+ u_int len, u_int port)
+{
+ ndo->ndo_protocol = "bfd";
+ if (port == BFD_CONTROL_PORT ||
+ port == BFD_MULTIHOP_PORT ||
+ port == BFD_LAG_PORT) {
+ /*
+ * Control packet.
+ */
+ const struct bfd_header_t *bfd_header;
+ uint8_t version_diag;
+ uint8_t version = 0;
+ uint8_t flags;
+
+ bfd_header = (const struct bfd_header_t *)pptr;
+ ND_TCHECK_SIZE(bfd_header);
+ version_diag = GET_U_1(bfd_header->version_diag);
+ version = BFD_EXTRACT_VERSION(version_diag);
+ flags = GET_U_1(bfd_header->flags);
+
+ switch (version) {
+
+ /* BFDv0 */
+ case 0:
+ if (ndo->ndo_vflag < 1)
+ {
+ ND_PRINT("BFDv0, Control, Flags: [%s], length: %u",
+ bittok2str(bfd_v0_flag_values, "none", flags),
+ len);
+ return;
+ }
+
+ ND_PRINT("BFDv0, length: %u\n\tControl, Flags: [%s], Diagnostic: %s (0x%02x)",
+ len,
+ bittok2str(bfd_v0_flag_values, "none", flags),
+ tok2str(bfd_diag_values,"unknown",BFD_EXTRACT_DIAG(version_diag)),
+ BFD_EXTRACT_DIAG(version_diag));
+
+ ND_PRINT("\n\tDetection Timer Multiplier: %u (%u ms Detection time), BFD Length: %u",
+ GET_U_1(bfd_header->detect_time_multiplier),
+ GET_U_1(bfd_header->detect_time_multiplier) * GET_BE_U_4(bfd_header->desired_min_tx_interval)/1000,
+ GET_U_1(bfd_header->length));
+
+
+ ND_PRINT("\n\tMy Discriminator: 0x%08x",
+ GET_BE_U_4(bfd_header->my_discriminator));
+ ND_PRINT(", Your Discriminator: 0x%08x",
+ GET_BE_U_4(bfd_header->your_discriminator));
+ ND_PRINT("\n\t Desired min Tx Interval: %4u ms",
+ GET_BE_U_4(bfd_header->desired_min_tx_interval)/1000);
+ ND_PRINT("\n\t Required min Rx Interval: %4u ms",
+ GET_BE_U_4(bfd_header->required_min_rx_interval)/1000);
+ ND_PRINT("\n\t Required min Echo Interval: %4u ms",
+ GET_BE_U_4(bfd_header->required_min_echo_interval)/1000);
+
+ if (flags & BFD_FLAG_AUTH) {
+ auth_print(ndo, pptr);
+ }
+ break;
+
+ /* BFDv1 */
+ case 1:
+ if (ndo->ndo_vflag < 1)
+ {
+ ND_PRINT("BFDv1, %s, State %s, Flags: [%s], length: %u",
+ tok2str(bfd_port_values, "unknown (%u)", port),
+ tok2str(bfd_v1_state_values, "unknown (%u)", (flags & 0xc0) >> 6),
+ bittok2str(bfd_v1_flag_values, "none", flags & 0x3f),
+ len);
+ return;
+ }
+
+ ND_PRINT("BFDv1, length: %u\n\t%s, State %s, Flags: [%s], Diagnostic: %s (0x%02x)",
+ len,
+ tok2str(bfd_port_values, "unknown (%u)", port),
+ tok2str(bfd_v1_state_values, "unknown (%u)", (flags & 0xc0) >> 6),
+ bittok2str(bfd_v1_flag_values, "none", flags & 0x3f),
+ tok2str(bfd_diag_values,"unknown",BFD_EXTRACT_DIAG(version_diag)),
+ BFD_EXTRACT_DIAG(version_diag));
+
+ ND_PRINT("\n\tDetection Timer Multiplier: %u (%u ms Detection time), BFD Length: %u",
+ GET_U_1(bfd_header->detect_time_multiplier),
+ GET_U_1(bfd_header->detect_time_multiplier) * GET_BE_U_4(bfd_header->desired_min_tx_interval)/1000,
+ GET_U_1(bfd_header->length));
+
+
+ ND_PRINT("\n\tMy Discriminator: 0x%08x",
+ GET_BE_U_4(bfd_header->my_discriminator));
+ ND_PRINT(", Your Discriminator: 0x%08x",
+ GET_BE_U_4(bfd_header->your_discriminator));
+ ND_PRINT("\n\t Desired min Tx Interval: %4u ms",
+ GET_BE_U_4(bfd_header->desired_min_tx_interval)/1000);
+ ND_PRINT("\n\t Required min Rx Interval: %4u ms",
+ GET_BE_U_4(bfd_header->required_min_rx_interval)/1000);
+ ND_PRINT("\n\t Required min Echo Interval: %4u ms",
+ GET_BE_U_4(bfd_header->required_min_echo_interval)/1000);
+
+ if (flags & BFD_FLAG_AUTH) {
+ auth_print(ndo, pptr);
+ }
+ break;
+
+ default:
+ ND_PRINT("BFDv%u, Control, length: %u",
+ version,
+ len);
+ if (ndo->ndo_vflag >= 1) {
+ if(!print_unknown_data(ndo, pptr,"\n\t",len))
+ return;
+ }
+ break;
+ }
+ } else if (port == BFD_ECHO_PORT) {
+ /*
+ * Echo packet.
+ */
+ ND_PRINT("BFD, Echo, length: %u",
+ len);
+ if (ndo->ndo_vflag >= 1) {
+ if(!print_unknown_data(ndo, pptr,"\n\t",len))
+ return;
+ }
+ } else {
+ /*
+ * Unknown packet type.
+ */
+ ND_PRINT("BFD, unknown (%u), length: %u",
+ port,
+ len);
+ if (ndo->ndo_vflag >= 1) {
+ if(!print_unknown_data(ndo, pptr,"\n\t",len))
+ return;
+ }
+ }
+}
diff --git a/print-bgp.c b/print-bgp.c
new file mode 100644
index 0000000..efeaea4
--- /dev/null
+++ b/print-bgp.c
@@ -0,0 +1,3162 @@
+/*
+ * Copyright (C) 1999 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Extensively modified by Hannes Gredler (hannes@gredler.at) for more
+ * complete BGP support.
+ */
+
+/* \summary: Border Gateway Protocol (BGP) printer */
+
+/* specification: RFC 4271 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+#include "af.h"
+#include "l2vpn.h"
+
+struct bgp {
+ nd_byte bgp_marker[16];
+ nd_uint16_t bgp_len;
+ nd_uint8_t bgp_type;
+};
+#define BGP_SIZE 19 /* unaligned */
+
+#define BGP_OPEN 1
+#define BGP_UPDATE 2
+#define BGP_NOTIFICATION 3
+#define BGP_KEEPALIVE 4
+#define BGP_ROUTE_REFRESH 5
+
+static const struct tok bgp_msg_values[] = {
+ { BGP_OPEN, "Open"},
+ { BGP_UPDATE, "Update"},
+ { BGP_NOTIFICATION, "Notification"},
+ { BGP_KEEPALIVE, "Keepalive"},
+ { BGP_ROUTE_REFRESH, "Route Refresh"},
+ { 0, NULL}
+};
+
+struct bgp_open {
+ nd_byte bgpo_marker[16];
+ nd_uint16_t bgpo_len;
+ nd_uint8_t bgpo_type;
+ nd_uint8_t bgpo_version;
+ nd_uint16_t bgpo_myas;
+ nd_uint16_t bgpo_holdtime;
+ nd_uint32_t bgpo_id;
+ nd_uint8_t bgpo_optlen;
+ /* options should follow */
+};
+#define BGP_OPEN_SIZE 29 /* unaligned */
+
+struct bgp_opt {
+ nd_uint8_t bgpopt_type;
+ nd_uint8_t bgpopt_len;
+ /* variable length */
+};
+#define BGP_OPT_SIZE 2 /* some compilers may pad to 4 bytes */
+#define BGP_CAP_HEADER_SIZE 2 /* some compilers may pad to 4 bytes */
+
+struct bgp_notification {
+ nd_byte bgpn_marker[16];
+ nd_uint16_t bgpn_len;
+ nd_uint8_t bgpn_type;
+ nd_uint8_t bgpn_major;
+ nd_uint8_t bgpn_minor;
+};
+#define BGP_NOTIFICATION_SIZE 21 /* unaligned */
+
+struct bgp_route_refresh {
+ nd_byte bgp_marker[16];
+ nd_uint16_t len;
+ nd_uint8_t type; /* No padding after this; afi is, in fact, not aligned */
+ nd_uint16_t afi;
+ nd_uint8_t res;
+ nd_uint8_t safi;
+};
+#define BGP_ROUTE_REFRESH_SIZE 23
+
+#define bgp_attr_lenlen(flags, p) \
+ (((flags) & 0x10) ? 2U : 1U)
+#define bgp_attr_len(flags, p) \
+ (((flags) & 0x10) ? GET_BE_U_2(p) : GET_U_1(p))
+
+#define BGPTYPE_ORIGIN 1
+#define BGPTYPE_AS_PATH 2
+#define BGPTYPE_NEXT_HOP 3
+#define BGPTYPE_MULTI_EXIT_DISC 4
+#define BGPTYPE_LOCAL_PREF 5
+#define BGPTYPE_ATOMIC_AGGREGATE 6
+#define BGPTYPE_AGGREGATOR 7
+#define BGPTYPE_COMMUNITIES 8 /* RFC1997 */
+#define BGPTYPE_ORIGINATOR_ID 9 /* RFC4456 */
+#define BGPTYPE_CLUSTER_LIST 10 /* RFC4456 */
+#define BGPTYPE_DPA 11 /* deprecated, draft-ietf-idr-bgp-dpa */
+#define BGPTYPE_ADVERTISERS 12 /* deprecated RFC1863 */
+#define BGPTYPE_RCID_PATH 13 /* deprecated RFC1863 */
+#define BGPTYPE_MP_REACH_NLRI 14 /* RFC4760 */
+#define BGPTYPE_MP_UNREACH_NLRI 15 /* RFC4760 */
+#define BGPTYPE_EXTD_COMMUNITIES 16 /* RFC4360 */
+#define BGPTYPE_AS4_PATH 17 /* RFC6793 */
+#define BGPTYPE_AGGREGATOR4 18 /* RFC6793 */
+#define BGPTYPE_PMSI_TUNNEL 22 /* RFC6514 */
+#define BGPTYPE_TUNNEL_ENCAP 23 /* RFC5512 */
+#define BGPTYPE_TRAFFIC_ENG 24 /* RFC5543 */
+#define BGPTYPE_IPV6_EXTD_COMMUNITIES 25 /* RFC5701 */
+#define BGPTYPE_AIGP 26 /* RFC7311 */
+#define BGPTYPE_PE_DISTINGUISHER_LABEL 27 /* RFC6514 */
+#define BGPTYPE_ENTROPY_LABEL 28 /* RFC6790 */
+#define BGPTYPE_LARGE_COMMUNITY 32 /* draft-ietf-idr-large-community-05 */
+#define BGPTYPE_ATTR_SET 128 /* RFC6368 */
+
+#define BGP_MP_NLRI_MINSIZE 3 /* End of RIB Marker detection */
+
+static const struct tok bgp_attr_values[] = {
+ { BGPTYPE_ORIGIN, "Origin"},
+ { BGPTYPE_AS_PATH, "AS Path"},
+ { BGPTYPE_AS4_PATH, "AS4 Path"},
+ { BGPTYPE_NEXT_HOP, "Next Hop"},
+ { BGPTYPE_MULTI_EXIT_DISC, "Multi Exit Discriminator"},
+ { BGPTYPE_LOCAL_PREF, "Local Preference"},
+ { BGPTYPE_ATOMIC_AGGREGATE, "Atomic Aggregate"},
+ { BGPTYPE_AGGREGATOR, "Aggregator"},
+ { BGPTYPE_AGGREGATOR4, "Aggregator4"},
+ { BGPTYPE_COMMUNITIES, "Community"},
+ { BGPTYPE_ORIGINATOR_ID, "Originator ID"},
+ { BGPTYPE_CLUSTER_LIST, "Cluster List"},
+ { BGPTYPE_DPA, "DPA"},
+ { BGPTYPE_ADVERTISERS, "Advertisers"},
+ { BGPTYPE_RCID_PATH, "RCID Path / Cluster ID"},
+ { BGPTYPE_MP_REACH_NLRI, "Multi-Protocol Reach NLRI"},
+ { BGPTYPE_MP_UNREACH_NLRI, "Multi-Protocol Unreach NLRI"},
+ { BGPTYPE_EXTD_COMMUNITIES, "Extended Community"},
+ { BGPTYPE_PMSI_TUNNEL, "PMSI Tunnel"},
+ { BGPTYPE_TUNNEL_ENCAP, "Tunnel Encapsulation"},
+ { BGPTYPE_TRAFFIC_ENG, "Traffic Engineering"},
+ { BGPTYPE_IPV6_EXTD_COMMUNITIES, "IPv6 Extended Community"},
+ { BGPTYPE_AIGP, "Accumulated IGP Metric"},
+ { BGPTYPE_PE_DISTINGUISHER_LABEL, "PE Distinguisher Label"},
+ { BGPTYPE_ENTROPY_LABEL, "Entropy Label"},
+ { BGPTYPE_LARGE_COMMUNITY, "Large Community"},
+ { BGPTYPE_ATTR_SET, "Attribute Set"},
+ { 255, "Reserved for development"},
+ { 0, NULL}
+};
+
+#define BGP_AS_SET 1
+#define BGP_AS_SEQUENCE 2
+#define BGP_CONFED_AS_SEQUENCE 3 /* draft-ietf-idr-rfc3065bis-01 */
+#define BGP_CONFED_AS_SET 4 /* draft-ietf-idr-rfc3065bis-01 */
+
+#define BGP_AS_SEG_TYPE_MIN BGP_AS_SET
+#define BGP_AS_SEG_TYPE_MAX BGP_CONFED_AS_SET
+
+static const struct tok bgp_as_path_segment_open_values[] = {
+ { BGP_AS_SEQUENCE, ""},
+ { BGP_AS_SET, "{ "},
+ { BGP_CONFED_AS_SEQUENCE, "( "},
+ { BGP_CONFED_AS_SET, "({ "},
+ { 0, NULL}
+};
+
+static const struct tok bgp_as_path_segment_close_values[] = {
+ { BGP_AS_SEQUENCE, ""},
+ { BGP_AS_SET, "}"},
+ { BGP_CONFED_AS_SEQUENCE, ")"},
+ { BGP_CONFED_AS_SET, "})"},
+ { 0, NULL}
+};
+
+#define BGP_OPT_AUTH 1
+#define BGP_OPT_CAP 2
+
+static const struct tok bgp_opt_values[] = {
+ { BGP_OPT_AUTH, "Authentication Information"},
+ { BGP_OPT_CAP, "Capabilities Advertisement"},
+ { 0, NULL}
+};
+
+#define BGP_CAPCODE_MP 1 /* RFC2858 */
+#define BGP_CAPCODE_RR 2 /* RFC2918 */
+#define BGP_CAPCODE_ORF 3 /* RFC5291 */
+#define BGP_CAPCODE_MR 4 /* RFC3107 */
+#define BGP_CAPCODE_EXT_NH 5 /* RFC5549 */
+#define BGP_CAPCODE_ML 8 /* RFC8277 */
+#define BGP_CAPCODE_RESTART 64 /* RFC4724 */
+#define BGP_CAPCODE_AS_NEW 65 /* RFC6793 */
+#define BGP_CAPCODE_DYN_CAP 67 /* draft-ietf-idr-dynamic-cap */
+#define BGP_CAPCODE_MULTISESS 68 /* draft-ietf-idr-bgp-multisession */
+#define BGP_CAPCODE_ADD_PATH 69 /* RFC7911 */
+#define BGP_CAPCODE_ENH_RR 70 /* draft-keyur-bgp-enhanced-route-refresh */
+#define BGP_CAPCODE_LLGR 71 /* draft-uttaro-idr-bgp-persistence-05 */
+#define BGP_CAPCODE_RR_CISCO 128
+
+static const struct tok bgp_capcode_values[] = {
+ { BGP_CAPCODE_MP, "Multiprotocol Extensions"},
+ { BGP_CAPCODE_RR, "Route Refresh"},
+ { BGP_CAPCODE_ORF, "Cooperative Route Filtering"},
+ { BGP_CAPCODE_MR, "Multiple Routes to a Destination"},
+ { BGP_CAPCODE_EXT_NH, "Extended Next Hop Encoding"},
+ { BGP_CAPCODE_ML, "Multiple Labels"},
+ { BGP_CAPCODE_RESTART, "Graceful Restart"},
+ { BGP_CAPCODE_AS_NEW, "32-Bit AS Number"},
+ { BGP_CAPCODE_DYN_CAP, "Dynamic Capability"},
+ { BGP_CAPCODE_MULTISESS, "Multisession BGP"},
+ { BGP_CAPCODE_ADD_PATH, "Multiple Paths"},
+ { BGP_CAPCODE_ENH_RR, "Enhanced Route Refresh"},
+ { BGP_CAPCODE_LLGR, "Long-lived Graceful Restart"},
+ { BGP_CAPCODE_RR_CISCO, "Route Refresh (Cisco)"},
+ { 0, NULL}
+};
+
+#define BGP_NOTIFY_MAJOR_MSG 1
+#define BGP_NOTIFY_MAJOR_OPEN 2
+#define BGP_NOTIFY_MAJOR_UPDATE 3
+#define BGP_NOTIFY_MAJOR_HOLDTIME 4
+#define BGP_NOTIFY_MAJOR_FSM 5
+#define BGP_NOTIFY_MAJOR_CEASE 6
+#define BGP_NOTIFY_MAJOR_CAP 7
+
+static const struct tok bgp_notify_major_values[] = {
+ { BGP_NOTIFY_MAJOR_MSG, "Message Header Error"},
+ { BGP_NOTIFY_MAJOR_OPEN, "OPEN Message Error"},
+ { BGP_NOTIFY_MAJOR_UPDATE, "UPDATE Message Error"},
+ { BGP_NOTIFY_MAJOR_HOLDTIME,"Hold Timer Expired"},
+ { BGP_NOTIFY_MAJOR_FSM, "Finite State Machine Error"},
+ { BGP_NOTIFY_MAJOR_CEASE, "Cease"},
+ { BGP_NOTIFY_MAJOR_CAP, "Capability Message Error"},
+ { 0, NULL}
+};
+
+/* RFC 4486 */
+#define BGP_NOTIFY_MINOR_CEASE_MAXPRFX 1
+#define BGP_NOTIFY_MINOR_CEASE_SHUT 2
+#define BGP_NOTIFY_MINOR_CEASE_RESET 4
+static const struct tok bgp_notify_minor_cease_values[] = {
+ { BGP_NOTIFY_MINOR_CEASE_MAXPRFX, "Maximum Number of Prefixes Reached"},
+ { BGP_NOTIFY_MINOR_CEASE_SHUT, "Administrative Shutdown"},
+ { 3, "Peer Unconfigured"},
+ { BGP_NOTIFY_MINOR_CEASE_RESET, "Administrative Reset"},
+ { 5, "Connection Rejected"},
+ { 6, "Other Configuration Change"},
+ { 7, "Connection Collision Resolution"},
+ { 0, NULL}
+};
+
+static const struct tok bgp_notify_minor_msg_values[] = {
+ { 1, "Connection Not Synchronized"},
+ { 2, "Bad Message Length"},
+ { 3, "Bad Message Type"},
+ { 0, NULL}
+};
+
+static const struct tok bgp_notify_minor_open_values[] = {
+ { 1, "Unsupported Version Number"},
+ { 2, "Bad Peer AS"},
+ { 3, "Bad BGP Identifier"},
+ { 4, "Unsupported Optional Parameter"},
+ { 5, "Authentication Failure"},
+ { 6, "Unacceptable Hold Time"},
+ { 7, "Capability Message Error"},
+ { 0, NULL}
+};
+
+static const struct tok bgp_notify_minor_update_values[] = {
+ { 1, "Malformed Attribute List"},
+ { 2, "Unrecognized Well-known Attribute"},
+ { 3, "Missing Well-known Attribute"},
+ { 4, "Attribute Flags Error"},
+ { 5, "Attribute Length Error"},
+ { 6, "Invalid ORIGIN Attribute"},
+ { 7, "AS Routing Loop"},
+ { 8, "Invalid NEXT_HOP Attribute"},
+ { 9, "Optional Attribute Error"},
+ { 10, "Invalid Network Field"},
+ { 11, "Malformed AS_PATH"},
+ { 0, NULL}
+};
+
+static const struct tok bgp_notify_minor_fsm_values[] = {
+ { 0, "Unspecified Error"},
+ { 1, "In OpenSent State"},
+ { 2, "In OpenConfirm State"},
+ { 3, "In Established State"},
+ { 0, NULL }
+};
+
+static const struct tok bgp_notify_minor_cap_values[] = {
+ { 1, "Invalid Action Value" },
+ { 2, "Invalid Capability Length" },
+ { 3, "Malformed Capability Value" },
+ { 4, "Unsupported Capability Code" },
+ { 0, NULL }
+};
+
+static const struct tok bgp_origin_values[] = {
+ { 0, "IGP"},
+ { 1, "EGP"},
+ { 2, "Incomplete"},
+ { 0, NULL}
+};
+
+#define BGP_PMSI_TUNNEL_RSVP_P2MP 1
+#define BGP_PMSI_TUNNEL_LDP_P2MP 2
+#define BGP_PMSI_TUNNEL_PIM_SSM 3
+#define BGP_PMSI_TUNNEL_PIM_SM 4
+#define BGP_PMSI_TUNNEL_PIM_BIDIR 5
+#define BGP_PMSI_TUNNEL_INGRESS 6
+#define BGP_PMSI_TUNNEL_LDP_MP2MP 7
+
+static const struct tok bgp_pmsi_tunnel_values[] = {
+ { BGP_PMSI_TUNNEL_RSVP_P2MP, "RSVP-TE P2MP LSP"},
+ { BGP_PMSI_TUNNEL_LDP_P2MP, "LDP P2MP LSP"},
+ { BGP_PMSI_TUNNEL_PIM_SSM, "PIM-SSM Tree"},
+ { BGP_PMSI_TUNNEL_PIM_SM, "PIM-SM Tree"},
+ { BGP_PMSI_TUNNEL_PIM_BIDIR, "PIM-Bidir Tree"},
+ { BGP_PMSI_TUNNEL_INGRESS, "Ingress Replication"},
+ { BGP_PMSI_TUNNEL_LDP_MP2MP, "LDP MP2MP LSP"},
+ { 0, NULL}
+};
+
+static const struct tok bgp_pmsi_flag_values[] = {
+ { 0x01, "Leaf Information required"},
+ { 0, NULL}
+};
+
+#define BGP_AIGP_TLV 1
+
+static const struct tok bgp_aigp_values[] = {
+ { BGP_AIGP_TLV, "AIGP"},
+ { 0, NULL}
+};
+
+/* Subsequent address family identifier, RFC2283 section 7 */
+#define SAFNUM_RES 0
+#define SAFNUM_UNICAST 1
+#define SAFNUM_MULTICAST 2
+#define SAFNUM_UNIMULTICAST 3 /* deprecated now */
+/* labeled BGP RFC3107 */
+#define SAFNUM_LABUNICAST 4
+/* RFC6514 */
+#define SAFNUM_MULTICAST_VPN 5
+/* draft-nalawade-kapoor-tunnel-safi */
+#define SAFNUM_TUNNEL 64
+/* RFC4761 */
+#define SAFNUM_VPLS 65
+/* RFC6037 */
+#define SAFNUM_MDT 66
+/* RFC7432 */
+#define SAFNUM_EVPN 70
+/* RFC4364 */
+#define SAFNUM_VPNUNICAST 128
+/* RFC6513 */
+#define SAFNUM_VPNMULTICAST 129
+#define SAFNUM_VPNUNIMULTICAST 130 /* deprecated now */
+/* RFC4684 */
+#define SAFNUM_RT_ROUTING_INFO 132
+
+#define BGP_VPN_RD_LEN 8
+
+static const struct tok bgp_safi_values[] = {
+ { SAFNUM_RES, "Reserved"},
+ { SAFNUM_UNICAST, "Unicast"},
+ { SAFNUM_MULTICAST, "Multicast"},
+ { SAFNUM_UNIMULTICAST, "Unicast+Multicast"},
+ { SAFNUM_LABUNICAST, "labeled Unicast"},
+ { SAFNUM_TUNNEL, "Tunnel"},
+ { SAFNUM_VPLS, "VPLS"},
+ { SAFNUM_MDT, "MDT"},
+ { SAFNUM_EVPN, "EVPN"},
+ { SAFNUM_VPNUNICAST, "labeled VPN Unicast"},
+ { SAFNUM_VPNMULTICAST, "labeled VPN Multicast"},
+ { SAFNUM_VPNUNIMULTICAST, "labeled VPN Unicast+Multicast"},
+ { SAFNUM_RT_ROUTING_INFO, "Route Target Routing Information"},
+ { SAFNUM_MULTICAST_VPN, "Multicast VPN"},
+ { 0, NULL }
+};
+
+/* well-known community */
+#define BGP_COMMUNITY_NO_EXPORT 0xffffff01
+#define BGP_COMMUNITY_NO_ADVERT 0xffffff02
+#define BGP_COMMUNITY_NO_EXPORT_SUBCONFED 0xffffff03
+
+/* Extended community type - RFC 4360 */
+#define BGP_EXT_COM_RT_0 0x0002 /* Route Target,Format AS(2bytes):AN(4bytes) */
+#define BGP_EXT_COM_RT_1 0x0102 /* Route Target,Format IP address:AN(2bytes) */
+#define BGP_EXT_COM_RT_2 0x0202 /* Route Target,Format AN(4bytes):local(2bytes) */
+#define BGP_EXT_COM_RO_0 0x0003 /* Route Origin,Format AS(2bytes):AN(4bytes) */
+#define BGP_EXT_COM_RO_1 0x0103 /* Route Origin,Format IP address:AN(2bytes) */
+#define BGP_EXT_COM_RO_2 0x0203 /* Route Origin,Format AN(4bytes):local(2bytes) */
+#define BGP_EXT_COM_LINKBAND 0x4004 /* Link Bandwidth,Format AS(2B):Bandwidth(4B) */
+ /* rfc2547 bgp-mpls-vpns */
+#define BGP_EXT_COM_VPN_ORIGIN 0x0005 /* OSPF Domain ID / VPN of Origin - draft-rosen-vpns-ospf-bgp-mpls */
+#define BGP_EXT_COM_VPN_ORIGIN2 0x0105 /* duplicate - keep for backwards compatibility */
+#define BGP_EXT_COM_VPN_ORIGIN3 0x0205 /* duplicate - keep for backwards compatibility */
+#define BGP_EXT_COM_VPN_ORIGIN4 0x8005 /* duplicate - keep for backwards compatibility */
+
+#define BGP_EXT_COM_OSPF_RTYPE 0x0306 /* OSPF Route Type,Format Area(4B):RouteType(1B):Options(1B) */
+#define BGP_EXT_COM_OSPF_RTYPE2 0x8000 /* duplicate - keep for backwards compatibility */
+#define BGP_EXT_COM_ENCAP 0x030c /* rfc5512 */
+
+#define BGP_EXT_COM_OSPF_RID 0x0107 /* OSPF Router ID,Format RouterID(4B):Unused(2B) */
+#define BGP_EXT_COM_OSPF_RID2 0x8001 /* duplicate - keep for backwards compatibility */
+
+#define BGP_EXT_COM_L2INFO 0x800a /* draft-kompella-ppvpn-l2vpn */
+
+#define BGP_EXT_COM_SOURCE_AS 0x0009 /* RFC-ietf-l3vpn-2547bis-mcast-bgp-08.txt */
+#define BGP_EXT_COM_VRF_RT_IMP 0x010b /* RFC-ietf-l3vpn-2547bis-mcast-bgp-08.txt */
+#define BGP_EXT_COM_L2VPN_RT_0 0x000a /* L2VPN Identifier,Format AS(2bytes):AN(4bytes) */
+#define BGP_EXT_COM_L2VPN_RT_1 0xF10a /* L2VPN Identifier,Format IP address:AN(2bytes) */
+
+/* https://www.cisco.com/en/US/tech/tk436/tk428/technologies_tech_note09186a00801eb09a.shtml */
+#define BGP_EXT_COM_EIGRP_GEN 0x8800
+#define BGP_EXT_COM_EIGRP_METRIC_AS_DELAY 0x8801
+#define BGP_EXT_COM_EIGRP_METRIC_REL_NH_BW 0x8802
+#define BGP_EXT_COM_EIGRP_METRIC_LOAD_MTU 0x8803
+#define BGP_EXT_COM_EIGRP_EXT_REMAS_REMID 0x8804
+#define BGP_EXT_COM_EIGRP_EXT_REMPROTO_REMMETRIC 0x8805
+
+static const struct tok bgp_extd_comm_flag_values[] = {
+ { 0x8000, "vendor-specific"},
+ { 0x4000, "non-transitive"},
+ { 0, NULL},
+};
+
+static const struct tok bgp_extd_comm_subtype_values[] = {
+ { BGP_EXT_COM_RT_0, "target"},
+ { BGP_EXT_COM_RT_1, "target"},
+ { BGP_EXT_COM_RT_2, "target"},
+ { BGP_EXT_COM_RO_0, "origin"},
+ { BGP_EXT_COM_RO_1, "origin"},
+ { BGP_EXT_COM_RO_2, "origin"},
+ { BGP_EXT_COM_LINKBAND, "link-BW"},
+ { BGP_EXT_COM_VPN_ORIGIN, "ospf-domain"},
+ { BGP_EXT_COM_VPN_ORIGIN2, "ospf-domain"},
+ { BGP_EXT_COM_VPN_ORIGIN3, "ospf-domain"},
+ { BGP_EXT_COM_VPN_ORIGIN4, "ospf-domain"},
+ { BGP_EXT_COM_OSPF_RTYPE, "ospf-route-type"},
+ { BGP_EXT_COM_OSPF_RTYPE2, "ospf-route-type"},
+ { BGP_EXT_COM_ENCAP, "encapsulation"},
+ { BGP_EXT_COM_OSPF_RID, "ospf-router-id"},
+ { BGP_EXT_COM_OSPF_RID2, "ospf-router-id"},
+ { BGP_EXT_COM_L2INFO, "layer2-info"},
+ { BGP_EXT_COM_EIGRP_GEN, "eigrp-general-route (flag, tag)" },
+ { BGP_EXT_COM_EIGRP_METRIC_AS_DELAY, "eigrp-route-metric (AS, delay)" },
+ { BGP_EXT_COM_EIGRP_METRIC_REL_NH_BW, "eigrp-route-metric (reliability, nexthop, bandwidth)" },
+ { BGP_EXT_COM_EIGRP_METRIC_LOAD_MTU, "eigrp-route-metric (load, MTU)" },
+ { BGP_EXT_COM_EIGRP_EXT_REMAS_REMID, "eigrp-external-route (remote-AS, remote-ID)" },
+ { BGP_EXT_COM_EIGRP_EXT_REMPROTO_REMMETRIC, "eigrp-external-route (remote-proto, remote-metric)" },
+ { BGP_EXT_COM_SOURCE_AS, "source-AS" },
+ { BGP_EXT_COM_VRF_RT_IMP, "vrf-route-import"},
+ { BGP_EXT_COM_L2VPN_RT_0, "l2vpn-id"},
+ { BGP_EXT_COM_L2VPN_RT_1, "l2vpn-id"},
+ { 0, NULL},
+};
+
+/* RFC RFC5512 BGP Tunnel Encapsulation Attribute Tunnel Types */
+#define BGP_ENCAP_TUNNEL_L2TPV3_IP 1
+#define BGP_ENCAP_TUNNEL_GRE 2
+#define BGP_ENCAP_TUNNEL_TRANSMIT 3
+#define BGP_ENCAP_TUNNEL_IPSEC 4
+#define BGP_ENCAP_TUNNEL_IP_IPSEC 5
+#define BGP_ENCAP_TUNNEL_MPLS_IP 6
+#define BGP_ENCAP_TUNNEL_IP_IP 7
+#define BGP_ENCAP_TUNNEL_VXLAN 8
+#define BGP_ENCAP_TUNNEL_NVGRE 9
+#define BGP_ENCAP_TUNNEL_MPLS 10
+#define BGP_ENCAP_TUNNEL_MPLS_GRE 11
+#define BGP_ENCAP_TUNNEL_VXLAN_GPE 12
+#define BGP_ENCAP_TUNNEL_MPLS_UDP 13
+#define BGP_ENCAP_TUNNEL_IPV6 14
+#define BGP_ENCAP_TUNNEL_SR_TE 15
+#define BGP_ENCAP_TUNNEL_BARE 16
+#define BGP_ENCAP_TUNNEL_SR 17
+
+static const struct tok bgp_extd_comm_encap_tunnel_values[] = {
+ { BGP_ENCAP_TUNNEL_L2TPV3_IP, "L2TPv3 over IP"},
+ { BGP_ENCAP_TUNNEL_GRE, "GRE"},
+ { BGP_ENCAP_TUNNEL_TRANSMIT, "Transmit Tunnel"},
+ { BGP_ENCAP_TUNNEL_IPSEC, "IPsec"},
+ { BGP_ENCAP_TUNNEL_IP_IPSEC, "IP in IP with IPsec"},
+ { BGP_ENCAP_TUNNEL_MPLS_IP, "MPLS in IP with IPsec"},
+ { BGP_ENCAP_TUNNEL_IP_IP, "IP in IP"},
+ { BGP_ENCAP_TUNNEL_VXLAN, "VXLAN"},
+ { BGP_ENCAP_TUNNEL_NVGRE, "NVGRE"},
+ { BGP_ENCAP_TUNNEL_MPLS, "MPLS"},
+ { BGP_ENCAP_TUNNEL_MPLS_GRE, "MPLS in GRE"},
+ { BGP_ENCAP_TUNNEL_VXLAN_GPE, "VXLAN GPE"},
+ { BGP_ENCAP_TUNNEL_MPLS_UDP, "MPLS in UDP"},
+ { BGP_ENCAP_TUNNEL_IPV6, "IPv6"},
+ { BGP_ENCAP_TUNNEL_SR_TE, "SR TE"},
+ { BGP_ENCAP_TUNNEL_BARE, "Bare"},
+ { BGP_ENCAP_TUNNEL_SR, "SR"},
+ { 0, NULL},
+};
+
+/* OSPF codes for BGP_EXT_COM_OSPF_RTYPE draft-rosen-vpns-ospf-bgp-mpls */
+#define BGP_OSPF_RTYPE_RTR 1 /* OSPF Router LSA */
+#define BGP_OSPF_RTYPE_NET 2 /* OSPF Network LSA */
+#define BGP_OSPF_RTYPE_SUM 3 /* OSPF Summary LSA */
+#define BGP_OSPF_RTYPE_EXT 5 /* OSPF External LSA, note that ASBR doesn't apply to MPLS-VPN */
+#define BGP_OSPF_RTYPE_NSSA 7 /* OSPF NSSA External*/
+#define BGP_OSPF_RTYPE_SHAM 129 /* OSPF-MPLS-VPN Sham link */
+#define BGP_OSPF_RTYPE_METRIC_TYPE 0x1 /* LSB of RTYPE Options Field */
+
+static const struct tok bgp_extd_comm_ospf_rtype_values[] = {
+ { BGP_OSPF_RTYPE_RTR, "Router" },
+ { BGP_OSPF_RTYPE_NET, "Network" },
+ { BGP_OSPF_RTYPE_SUM, "Summary" },
+ { BGP_OSPF_RTYPE_EXT, "External" },
+ { BGP_OSPF_RTYPE_NSSA,"NSSA External" },
+ { BGP_OSPF_RTYPE_SHAM,"MPLS-VPN Sham" },
+ { 0, NULL },
+};
+
+/* ADD-PATH Send/Receive field values */
+static const struct tok bgp_add_path_recvsend[] = {
+ { 1, "Receive" },
+ { 2, "Send" },
+ { 3, "Both" },
+ { 0, NULL },
+};
+
+#define AS_STR_SIZE sizeof("xxxxx.xxxxx")
+
+/*
+ * as_printf
+ *
+ * Convert an AS number into a string and return string pointer.
+ *
+ * Depending on bflag is set or not, AS number is converted into ASDOT notation
+ * or plain number notation.
+ *
+ */
+static char *
+as_printf(netdissect_options *ndo,
+ char *str, size_t size, u_int asnum)
+{
+ if (!ndo->ndo_bflag || asnum <= 0xFFFF) {
+ snprintf(str, size, "%u", asnum);
+ } else {
+ snprintf(str, size, "%u.%u", asnum >> 16, asnum & 0xFFFF);
+ }
+ return str;
+}
+
+#define ITEMCHECK(minlen) if (itemlen < minlen) goto badtlv;
+
+int
+decode_prefix4(netdissect_options *ndo,
+ const u_char *pptr, u_int itemlen, char *buf, size_t buflen)
+{
+ nd_ipv4 addr;
+ u_int plen, plenbytes;
+
+ ITEMCHECK(1);
+ plen = GET_U_1(pptr);
+ if (32 < plen)
+ return -1;
+ itemlen -= 1;
+
+ memset(&addr, 0, sizeof(addr));
+ plenbytes = (plen + 7) / 8;
+ ITEMCHECK(plenbytes);
+ GET_CPY_BYTES(&addr, pptr + 1, plenbytes);
+ if (plen % 8) {
+ ((u_char *)&addr)[plenbytes - 1] &= ((0xff00 >> (plen % 8)) & 0xff);
+ }
+ snprintf(buf, buflen, "%s/%u", ipaddr_string(ndo, (const u_char *)&addr), plen);
+ return 1 + plenbytes;
+
+badtlv:
+ return -2;
+}
+
+static int
+decode_labeled_prefix4(netdissect_options *ndo,
+ const u_char *pptr, u_int itemlen, char *buf,
+ size_t buflen)
+{
+ nd_ipv4 addr;
+ u_int plen, plenbytes;
+
+ /* prefix length and label = 4 bytes */
+ ND_TCHECK_4(pptr);
+ ITEMCHECK(4);
+ plen = GET_U_1(pptr); /* get prefix length */
+
+ /* this is one of the weirdnesses of rfc3107
+ the label length (actually the label + COS bits)
+ is added to the prefix length;
+ we also do only read out just one label -
+ there is no real application for advertisement of
+ stacked labels in a single BGP message
+ */
+
+ if (24 > plen)
+ return -1;
+
+ plen-=24; /* adjust prefixlen - labellength */
+
+ if (32 < plen)
+ return -1;
+ itemlen -= 4;
+
+ memset(&addr, 0, sizeof(addr));
+ plenbytes = (plen + 7) / 8;
+ ITEMCHECK(plenbytes);
+ GET_CPY_BYTES(&addr, pptr + 4, plenbytes);
+ if (plen % 8) {
+ ((u_char *)&addr)[plenbytes - 1] &= ((0xff00 >> (plen % 8)) & 0xff);
+ }
+ /* the label may get offsetted by 4 bits so lets shift it right */
+ snprintf(buf, buflen, "%s/%u, label:%u %s",
+ ipaddr_string(ndo, (const u_char *)&addr),
+ plen,
+ GET_BE_U_3(pptr + 1)>>4,
+ ((GET_U_1(pptr + 3) & 1) == 0) ? "(BOGUS: Bottom of Stack NOT set!)" : "(bottom)" );
+
+ return 4 + plenbytes;
+
+trunc:
+ return -2;
+
+badtlv:
+ return -3;
+}
+
+/*
+ * bgp_vpn_ip_print
+ *
+ * print an ipv4 or ipv6 address into a buffer dependent on address length.
+ */
+static char *
+bgp_vpn_ip_print(netdissect_options *ndo,
+ const u_char *pptr, u_int addr_length)
+{
+
+ /* worst case string is s fully formatted v6 address */
+ static char addr[sizeof("1234:5678:89ab:cdef:1234:5678:89ab:cdef")];
+ char *pos = addr;
+
+ switch(addr_length) {
+ case (sizeof(nd_ipv4) << 3): /* 32 */
+ snprintf(pos, sizeof(addr), "%s", GET_IPADDR_STRING(pptr));
+ break;
+ case (sizeof(nd_ipv6) << 3): /* 128 */
+ snprintf(pos, sizeof(addr), "%s", GET_IP6ADDR_STRING(pptr));
+ break;
+ default:
+ snprintf(pos, sizeof(addr), "bogus address length %u", addr_length);
+ break;
+ }
+ pos += strlen(pos);
+
+ *(pos) = '\0';
+ return (addr);
+}
+
+/*
+ * bgp_vpn_sg_print
+ *
+ * print an multicast s,g entry into a buffer.
+ * the s,g entry is encoded like this.
+ *
+ * +-----------------------------------+
+ * | Multicast Source Length (1 octet) |
+ * +-----------------------------------+
+ * | Multicast Source (Variable) |
+ * +-----------------------------------+
+ * | Multicast Group Length (1 octet) |
+ * +-----------------------------------+
+ * | Multicast Group (Variable) |
+ * +-----------------------------------+
+ *
+ * return the number of bytes read from the wire.
+ */
+static u_int
+bgp_vpn_sg_print(netdissect_options *ndo,
+ const u_char *pptr, char *buf, size_t buflen)
+{
+ uint8_t addr_length;
+ u_int total_length, offset;
+
+ total_length = 0;
+
+ /* Source address length, encoded in bits */
+ addr_length = GET_U_1(pptr);
+ pptr++;
+
+ /* Source address */
+ ND_TCHECK_LEN(pptr, (addr_length >> 3));
+ total_length += (addr_length >> 3) + 1;
+ offset = (u_int)strlen(buf);
+ if (addr_length) {
+ snprintf(buf + offset, buflen - offset, ", Source %s",
+ bgp_vpn_ip_print(ndo, pptr, addr_length));
+ pptr += (addr_length >> 3);
+ }
+
+ /* Group address length, encoded in bits */
+ addr_length = GET_U_1(pptr);
+ pptr++;
+
+ /* Group address */
+ ND_TCHECK_LEN(pptr, (addr_length >> 3));
+ total_length += (addr_length >> 3) + 1;
+ offset = (u_int)strlen(buf);
+ if (addr_length) {
+ snprintf(buf + offset, buflen - offset, ", Group %s",
+ bgp_vpn_ip_print(ndo, pptr, addr_length));
+ pptr += (addr_length >> 3);
+ }
+
+trunc:
+ return (total_length);
+}
+
+/* Print an RFC 4364 Route Distinguisher */
+const char *
+bgp_vpn_rd_print(netdissect_options *ndo,
+ const u_char *pptr)
+{
+ /* allocate space for the largest possible string */
+ static char rd[sizeof("xxxxx.xxxxx:xxxxx (xxx.xxx.xxx.xxx:xxxxx)")];
+ char *pos = rd;
+ /* allocate space for the largest possible string */
+ char astostr[AS_STR_SIZE];
+
+ /* ok lets load the RD format */
+ switch (GET_BE_U_2(pptr)) {
+
+ case 0:
+ /* 2-byte-AS:number fmt */
+ snprintf(pos, sizeof(rd) - (pos - rd), "%u:%u (= %u.%u.%u.%u)",
+ GET_BE_U_2(pptr + 2),
+ GET_BE_U_4(pptr + 4),
+ GET_U_1(pptr + 4), GET_U_1(pptr + 5),
+ GET_U_1(pptr + 6), GET_U_1(pptr + 7));
+ break;
+
+ case 1:
+ /* IP-address:AS fmt */
+ snprintf(pos, sizeof(rd) - (pos - rd), "%u.%u.%u.%u:%u",
+ GET_U_1(pptr + 2), GET_U_1(pptr + 3),
+ GET_U_1(pptr + 4), GET_U_1(pptr + 5),
+ GET_BE_U_2(pptr + 6));
+ break;
+
+ case 2:
+ /* 4-byte-AS:number fmt */
+ snprintf(pos, sizeof(rd) - (pos - rd), "%s:%u (%u.%u.%u.%u:%u)",
+ as_printf(ndo, astostr, sizeof(astostr), GET_BE_U_4(pptr + 2)),
+ GET_BE_U_2(pptr + 6), GET_U_1(pptr + 2),
+ GET_U_1(pptr + 3), GET_U_1(pptr + 4),
+ GET_U_1(pptr + 5), GET_BE_U_2(pptr + 6));
+ break;
+ default:
+ snprintf(pos, sizeof(rd) - (pos - rd), "unknown RD format");
+ break;
+ }
+ pos += strlen(pos);
+ *(pos) = '\0';
+ return (rd);
+}
+
+/*
+ * Print an RFC 4360 Extended Community.
+ */
+static void
+bgp_extended_community_print(netdissect_options *ndo,
+ const u_char *pptr)
+{
+ union { /* copy buffer for bandwidth values */
+ float f;
+ uint32_t i;
+ } bw;
+ /* allocate space for the largest possible string */
+ char astostr[AS_STR_SIZE];
+
+ switch (GET_BE_U_2(pptr)) {
+
+ case BGP_EXT_COM_RT_0:
+ case BGP_EXT_COM_RO_0:
+ case BGP_EXT_COM_L2VPN_RT_0:
+ ND_PRINT("%u:%u (= %s)",
+ GET_BE_U_2(pptr + 2),
+ GET_BE_U_4(pptr + 4),
+ GET_IPADDR_STRING(pptr+4));
+ break;
+
+ case BGP_EXT_COM_RT_1:
+ case BGP_EXT_COM_RO_1:
+ case BGP_EXT_COM_L2VPN_RT_1:
+ case BGP_EXT_COM_VRF_RT_IMP:
+ ND_PRINT("%s:%u",
+ GET_IPADDR_STRING(pptr+2),
+ GET_BE_U_2(pptr + 6));
+ break;
+
+ case BGP_EXT_COM_RT_2:
+ case BGP_EXT_COM_RO_2:
+ ND_PRINT("%s:%u",
+ as_printf(ndo, astostr, sizeof(astostr),
+ GET_BE_U_4(pptr + 2)), GET_BE_U_2(pptr + 6));
+ break;
+
+ case BGP_EXT_COM_LINKBAND:
+ bw.i = GET_BE_U_4(pptr + 4);
+ ND_PRINT("bandwidth: %.3f Mbps",
+ bw.f*8/1000000);
+ break;
+
+ case BGP_EXT_COM_VPN_ORIGIN:
+ case BGP_EXT_COM_VPN_ORIGIN2:
+ case BGP_EXT_COM_VPN_ORIGIN3:
+ case BGP_EXT_COM_VPN_ORIGIN4:
+ case BGP_EXT_COM_OSPF_RID:
+ case BGP_EXT_COM_OSPF_RID2:
+ ND_PRINT("%s", GET_IPADDR_STRING(pptr+2));
+ break;
+
+ case BGP_EXT_COM_OSPF_RTYPE:
+ case BGP_EXT_COM_OSPF_RTYPE2:
+ ND_PRINT("area:%s, router-type:%s, metric-type:%s%s",
+ GET_IPADDR_STRING(pptr+2),
+ tok2str(bgp_extd_comm_ospf_rtype_values,
+ "unknown (0x%02x)",
+ GET_U_1((pptr + 6))),
+ (GET_U_1(pptr + 7) & BGP_OSPF_RTYPE_METRIC_TYPE) ? "E2" : "",
+ ((GET_U_1(pptr + 6) == BGP_OSPF_RTYPE_EXT) || (GET_U_1(pptr + 6) == BGP_OSPF_RTYPE_NSSA)) ? "E1" : "");
+ break;
+
+ case BGP_EXT_COM_L2INFO:
+ ND_PRINT("%s Control Flags [0x%02x]:MTU %u",
+ tok2str(l2vpn_encaps_values,
+ "unknown encaps",
+ GET_U_1((pptr + 2))),
+ GET_U_1((pptr + 3)),
+ GET_BE_U_2(pptr + 4));
+ break;
+
+ case BGP_EXT_COM_SOURCE_AS:
+ ND_PRINT("AS %u", GET_BE_U_2(pptr + 2));
+ break;
+
+ case BGP_EXT_COM_ENCAP:
+ ND_PRINT("Tunnel type: %s", tok2str(bgp_extd_comm_encap_tunnel_values,
+ "unknown encaps",
+ GET_BE_U_2(pptr + 6)));
+ break;
+
+ default:
+ ND_PRINT("%02x%02x%02x%02x%02x%02x",
+ GET_U_1(pptr + 2),
+ GET_U_1(pptr + 3),
+ GET_U_1(pptr + 4),
+ GET_U_1(pptr + 5),
+ GET_U_1(pptr + 6),
+ GET_U_1(pptr + 7));
+ break;
+ }
+}
+
+/*
+ * RFC4684 (Section 4)/RFC2858 (Section 4).
+ * RTC membership prefix is structured as follows
+ * [prefix-len] [origin-as] [route-target]
+ * The route-target is encoded as RT ext-comms.
+ * Prefix-len may be 0, 32..96
+ *
+ * Note that pptr is not packet data - it is
+ * a buffer owned by our caller - therefore GET_*
+ * macros can not be used.
+ */
+static char *
+bgp_rt_prefix_print(netdissect_options *ndo,
+ const u_char *pptr,
+ u_int plen)
+{
+ /* allocate space for the largest possible string */
+ char rtc_prefix_in_hex[sizeof("0000 0000 0000 0000")] = "";
+ u_int rtc_prefix_in_hex_len = 0;
+ static char output[61]; /* max response string */
+ /* allocate space for the largest possible string */
+ char astostr[AS_STR_SIZE];
+ uint16_t ec_type = 0;
+ u_int octet_count;
+ u_int i;
+
+ if (plen == 0) {
+ snprintf(output, sizeof(output), "route-target: 0:0/0");
+ return (output);
+ }
+
+ /* hex representation of the prefix */
+ octet_count = (plen+7)/8;
+ for (i=0; i<octet_count; i++) {
+ rtc_prefix_in_hex_len += snprintf(rtc_prefix_in_hex+rtc_prefix_in_hex_len,
+ sizeof(rtc_prefix_in_hex)-rtc_prefix_in_hex_len,
+ "%02x%s", *(pptr+i),
+ ((i%2 == 1) && (i<octet_count-1)) ? " " : "");
+ }
+
+ if (plen < 16) {
+ /*
+ * The prefix is too short to include the full ext-comm type,
+ * so we have no way to parse it further.
+ */
+ snprintf(output, sizeof(output), "route-target: partial-type: (%s/%d)",
+ rtc_prefix_in_hex, plen);
+ return (output);
+ }
+
+ /*
+ * get the ext-comm type
+ * Note: pptr references a static 8 octet buffer with unused bits set to 0,
+ * hence EXTRACT_*() macros are safe.
+ */
+ ec_type = EXTRACT_BE_U_2(pptr);
+ switch (ec_type) {
+ case BGP_EXT_COM_RT_0:
+ /* 2-byte-AS:number fmt */
+ snprintf(output, sizeof(output), "route-target: %u:%u/%d (%s)",
+ EXTRACT_BE_U_2(pptr+2),
+ EXTRACT_BE_U_4(pptr+4),
+ plen, rtc_prefix_in_hex);
+ break;
+
+ case BGP_EXT_COM_RT_1:
+ /* IP-address:AS fmt */
+ snprintf(output, sizeof(output), "route-target: %u.%u.%u.%u:%u/%d (%s)",
+ *(pptr+2), *(pptr+3), *(pptr+4), *(pptr+5),
+ EXTRACT_BE_U_2(pptr+6), plen, rtc_prefix_in_hex);
+ break;
+
+ case BGP_EXT_COM_RT_2:
+ /* 4-byte-AS:number fmt */
+ snprintf(output, sizeof(output), "route-target: %s:%u/%d (%s)",
+ as_printf(ndo, astostr, sizeof(astostr), EXTRACT_BE_U_4(pptr+2)),
+ EXTRACT_BE_U_2(pptr+6), plen, rtc_prefix_in_hex);
+ break;
+
+ default:
+ snprintf(output, sizeof(output), "route target: unknown-type(%04x) (%s/%d)",
+ ec_type,
+ rtc_prefix_in_hex, plen);
+ break;
+ }
+ return (output);
+}
+
+/* RFC 4684 */
+static int
+decode_rt_routing_info(netdissect_options *ndo,
+ const u_char *pptr)
+{
+ uint8_t route_target[8];
+ u_int plen;
+ /* allocate space for the largest possible string */
+ char astostr[AS_STR_SIZE];
+ u_int num_octets;
+
+ /* NLRI "prefix length" from RFC 2858 Section 4. */
+ plen = GET_U_1(pptr); /* get prefix length */
+
+ /* NLRI "prefix" (ibid), valid lengths are { 0, 32, 33, ..., 96 } bits.
+ * RFC 4684 Section 4 defines the layout of "origin AS" and "route
+ * target" fields inside the "prefix" depending on its length.
+ */
+ if (0 == plen) {
+ /* Without "origin AS", without "route target". */
+ ND_PRINT("\n\t default route target");
+ return 1;
+ }
+
+ if (32 > plen) {
+ ND_PRINT("\n\t (illegal prefix length)");
+ return -1;
+ }
+
+ /* With at least "origin AS", possibly with "route target". */
+ as_printf(ndo, astostr, sizeof(astostr), GET_BE_U_4(pptr + 1));
+
+ plen -= 32; /* adjust prefix length */
+
+ if (64 < plen) {
+ ND_PRINT("\n\t (illegal prefix length)");
+ return -1;
+ }
+
+ /* From now on (plen + 7) / 8 evaluates to { 0, 1, 2, ..., 8 }
+ * and gives the number of octets in the variable-length "route
+ * target" field inside this NLRI "prefix". Look for it.
+ */
+ memset(&route_target, 0, sizeof(route_target));
+ num_octets = (plen + 7) / 8;
+ GET_CPY_BYTES(&route_target, pptr + 5, num_octets);
+ /* If mask-len is not on octet boundary, ensure all extra bits are 0 */
+ if (plen % 8) {
+ ((u_char *)&route_target)[num_octets - 1] &=
+ ((0xff00 >> (plen % 8)) & 0xff);
+ }
+ ND_PRINT("\n\t origin AS: %s, %s",
+ astostr,
+ bgp_rt_prefix_print(ndo, (u_char *)&route_target, plen));
+
+ return 5 + num_octets;
+}
+
+static int
+decode_labeled_vpn_prefix4(netdissect_options *ndo,
+ const u_char *pptr, char *buf, size_t buflen)
+{
+ nd_ipv4 addr;
+ u_int plen;
+
+ plen = GET_U_1(pptr); /* get prefix length */
+
+ if ((24+64) > plen)
+ return -1;
+
+ plen -= (24+64); /* adjust prefixlen - labellength - RD len*/
+
+ if (32 < plen)
+ return -1;
+
+ memset(&addr, 0, sizeof(addr));
+ GET_CPY_BYTES(&addr, pptr + 12, (plen + 7) / 8);
+ if (plen % 8) {
+ ((u_char *)&addr)[(plen + 7) / 8 - 1] &=
+ ((0xff00 >> (plen % 8)) & 0xff);
+ }
+ /* the label may get offsetted by 4 bits so lets shift it right */
+ snprintf(buf, buflen, "RD: %s, %s/%u, label:%u %s",
+ bgp_vpn_rd_print(ndo, pptr+4),
+ ipaddr_string(ndo, (const u_char *)&addr),
+ plen,
+ GET_BE_U_3(pptr + 1)>>4,
+ ((GET_U_1(pptr + 3) & 1) == 0) ? "(BOGUS: Bottom of Stack NOT set!)" : "(bottom)" );
+
+ return 12 + (plen + 7) / 8;
+}
+
+/*
+ * +-------------------------------+
+ * | |
+ * | RD:IPv4-address (12 octets) |
+ * | |
+ * +-------------------------------+
+ * | MDT Group-address (4 octets) |
+ * +-------------------------------+
+ */
+
+#define MDT_VPN_NLRI_LEN 16
+
+static int
+decode_mdt_vpn_nlri(netdissect_options *ndo,
+ const u_char *pptr, char *buf, size_t buflen)
+{
+ const u_char *rd;
+ const u_char *vpn_ip;
+
+ /* if the NLRI is not predefined length, quit.*/
+ if (GET_U_1(pptr) != MDT_VPN_NLRI_LEN * 8)
+ return -1;
+ pptr++;
+
+ /* RD */
+ ND_TCHECK_8(pptr);
+ rd = pptr;
+ pptr += 8;
+
+ /* IPv4 address */
+ vpn_ip = pptr;
+ pptr += sizeof(nd_ipv4);
+
+ /* MDT Group Address */
+ snprintf(buf, buflen, "RD: %s, VPN IP Address: %s, MC Group Address: %s",
+ bgp_vpn_rd_print(ndo, rd), GET_IPADDR_STRING(vpn_ip), GET_IPADDR_STRING(pptr));
+
+ return MDT_VPN_NLRI_LEN + 1;
+
+ trunc:
+ return -2;
+}
+
+#define BGP_MULTICAST_VPN_ROUTE_TYPE_INTRA_AS_I_PMSI 1
+#define BGP_MULTICAST_VPN_ROUTE_TYPE_INTER_AS_I_PMSI 2
+#define BGP_MULTICAST_VPN_ROUTE_TYPE_S_PMSI 3
+#define BGP_MULTICAST_VPN_ROUTE_TYPE_INTRA_AS_SEG_LEAF 4
+#define BGP_MULTICAST_VPN_ROUTE_TYPE_SOURCE_ACTIVE 5
+#define BGP_MULTICAST_VPN_ROUTE_TYPE_SHARED_TREE_JOIN 6
+#define BGP_MULTICAST_VPN_ROUTE_TYPE_SOURCE_TREE_JOIN 7
+
+static const struct tok bgp_multicast_vpn_route_type_values[] = {
+ { BGP_MULTICAST_VPN_ROUTE_TYPE_INTRA_AS_I_PMSI, "Intra-AS I-PMSI"},
+ { BGP_MULTICAST_VPN_ROUTE_TYPE_INTER_AS_I_PMSI, "Inter-AS I-PMSI"},
+ { BGP_MULTICAST_VPN_ROUTE_TYPE_S_PMSI, "S-PMSI"},
+ { BGP_MULTICAST_VPN_ROUTE_TYPE_INTRA_AS_SEG_LEAF, "Intra-AS Segment-Leaf"},
+ { BGP_MULTICAST_VPN_ROUTE_TYPE_SOURCE_ACTIVE, "Source-Active"},
+ { BGP_MULTICAST_VPN_ROUTE_TYPE_SHARED_TREE_JOIN, "Shared Tree Join"},
+ { BGP_MULTICAST_VPN_ROUTE_TYPE_SOURCE_TREE_JOIN, "Source Tree Join"},
+ { 0, NULL}
+};
+
+static int
+decode_multicast_vpn(netdissect_options *ndo,
+ const u_char *pptr, char *buf, size_t buflen)
+{
+ /* allocate space for the largest possible string */
+ char astostr[AS_STR_SIZE];
+ uint8_t route_type, route_length;
+ u_int addr_length, sg_length;
+ u_int offset;
+
+ route_type = GET_U_1(pptr);
+ pptr++;
+ route_length = GET_U_1(pptr);
+ pptr++;
+
+ snprintf(buf, buflen, "Route-Type: %s (%u), length: %u",
+ tok2str(bgp_multicast_vpn_route_type_values,
+ "Unknown", route_type),
+ route_type, route_length);
+
+ switch(route_type) {
+ case BGP_MULTICAST_VPN_ROUTE_TYPE_INTRA_AS_I_PMSI:
+ ND_TCHECK_LEN(pptr, BGP_VPN_RD_LEN);
+ offset = (u_int)strlen(buf);
+ snprintf(buf + offset, buflen - offset, ", RD: %s, Originator %s",
+ bgp_vpn_rd_print(ndo, pptr),
+ bgp_vpn_ip_print(ndo, pptr + BGP_VPN_RD_LEN,
+ (route_length - BGP_VPN_RD_LEN) << 3));
+ break;
+ case BGP_MULTICAST_VPN_ROUTE_TYPE_INTER_AS_I_PMSI:
+ ND_TCHECK_LEN(pptr, BGP_VPN_RD_LEN + 4);
+ offset = (u_int)strlen(buf);
+ snprintf(buf + offset, buflen - offset, ", RD: %s, Source-AS %s",
+ bgp_vpn_rd_print(ndo, pptr),
+ as_printf(ndo, astostr, sizeof(astostr),
+ GET_BE_U_4(pptr + BGP_VPN_RD_LEN)));
+ break;
+
+ case BGP_MULTICAST_VPN_ROUTE_TYPE_S_PMSI:
+ ND_TCHECK_LEN(pptr, BGP_VPN_RD_LEN);
+ offset = (u_int)strlen(buf);
+ snprintf(buf + offset, buflen - offset, ", RD: %s",
+ bgp_vpn_rd_print(ndo, pptr));
+ pptr += BGP_VPN_RD_LEN;
+
+ sg_length = bgp_vpn_sg_print(ndo, pptr, buf, buflen);
+ addr_length = route_length - sg_length;
+
+ ND_TCHECK_LEN(pptr, addr_length);
+ offset = (u_int)strlen(buf);
+ snprintf(buf + offset, buflen - offset, ", Originator %s",
+ bgp_vpn_ip_print(ndo, pptr, addr_length << 3));
+ break;
+
+ case BGP_MULTICAST_VPN_ROUTE_TYPE_SOURCE_ACTIVE:
+ ND_TCHECK_LEN(pptr, BGP_VPN_RD_LEN);
+ offset = (u_int)strlen(buf);
+ snprintf(buf + offset, buflen - offset, ", RD: %s",
+ bgp_vpn_rd_print(ndo, pptr));
+ pptr += BGP_VPN_RD_LEN;
+
+ bgp_vpn_sg_print(ndo, pptr, buf, buflen);
+ break;
+
+ case BGP_MULTICAST_VPN_ROUTE_TYPE_SHARED_TREE_JOIN: /* fall through */
+ case BGP_MULTICAST_VPN_ROUTE_TYPE_SOURCE_TREE_JOIN:
+ ND_TCHECK_LEN(pptr, BGP_VPN_RD_LEN + 4);
+ offset = (u_int)strlen(buf);
+ snprintf(buf + offset, buflen - offset, ", RD: %s, Source-AS %s",
+ bgp_vpn_rd_print(ndo, pptr),
+ as_printf(ndo, astostr, sizeof(astostr),
+ GET_BE_U_4(pptr + BGP_VPN_RD_LEN)));
+ pptr += BGP_VPN_RD_LEN + 4;
+
+ bgp_vpn_sg_print(ndo, pptr, buf, buflen);
+ break;
+
+ /*
+ * no per route-type printing yet.
+ */
+ case BGP_MULTICAST_VPN_ROUTE_TYPE_INTRA_AS_SEG_LEAF:
+ default:
+ break;
+ }
+
+ return route_length + 2;
+
+trunc:
+ return -2;
+}
+
+/*
+ * As I remember, some versions of systems have an snprintf() that
+ * returns -1 if the buffer would have overflowed. If the return
+ * value is negative, set buflen to 0, to indicate that we've filled
+ * the buffer up.
+ *
+ * If the return value is greater than buflen, that means that
+ * the buffer would have overflowed; again, set buflen to 0 in
+ * that case.
+ */
+#define UPDATE_BUF_BUFLEN(buf, buflen, stringlen) \
+ if (stringlen<0) \
+ buflen=0; \
+ else if ((u_int)stringlen>buflen) \
+ buflen=0; \
+ else { \
+ buflen-=stringlen; \
+ buf+=stringlen; \
+ }
+
+static int
+decode_labeled_vpn_l2(netdissect_options *ndo,
+ const u_char *pptr, char *buf, size_t buflen)
+{
+ u_int plen, tlen, tlv_type, tlv_len, ttlv_len;
+ int stringlen;
+
+ plen = GET_BE_U_2(pptr);
+ tlen = plen;
+ pptr += 2;
+ /* Old and new L2VPN NLRI share AFI/SAFI
+ * -> Assume a 12 Byte-length NLRI is auto-discovery-only
+ * and > 17 as old format. Complain for the middle case
+ */
+ if (plen == 12) {
+ /* assume AD-only with RD, BGPNH */
+ ND_TCHECK_LEN(pptr, 12);
+ buf[0] = '\0';
+ stringlen = snprintf(buf, buflen, "RD: %s, BGPNH: %s",
+ bgp_vpn_rd_print(ndo, pptr),
+ GET_IPADDR_STRING(pptr+8));
+ UPDATE_BUF_BUFLEN(buf, buflen, stringlen);
+ pptr += 12;
+ tlen -= 12;
+ return plen + 2;
+ } else if (plen > 17) {
+ /* assume old format */
+ /* RD, ID, LBLKOFF, LBLBASE */
+
+ ND_TCHECK_LEN(pptr, 15);
+ buf[0] = '\0';
+ stringlen = snprintf(buf, buflen, "RD: %s, CE-ID: %u, Label-Block Offset: %u, Label Base %u",
+ bgp_vpn_rd_print(ndo, pptr),
+ GET_BE_U_2(pptr + 8),
+ GET_BE_U_2(pptr + 10),
+ GET_BE_U_3(pptr + 12)>>4); /* the label is offsetted by 4 bits so lets shift it right */
+ UPDATE_BUF_BUFLEN(buf, buflen, stringlen);
+ pptr += 15;
+ tlen -= 15;
+
+ /* ok now the variable part - lets read out TLVs*/
+ while (tlen != 0) {
+ if (tlen < 3) {
+ if (buflen != 0) {
+ stringlen=snprintf(buf,buflen, "\n\t\tran past the end");
+ UPDATE_BUF_BUFLEN(buf, buflen, stringlen);
+ }
+ return plen + 2;
+ }
+ tlv_type = GET_U_1(pptr);
+ pptr++;
+ tlv_len = GET_BE_U_2(pptr); /* length, in *bits* */
+ ttlv_len = (tlv_len + 7)/8; /* length, in *bytes* */
+ pptr += 2;
+
+ switch(tlv_type) {
+ case 1:
+ if (buflen != 0) {
+ stringlen=snprintf(buf,buflen, "\n\t\tcircuit status vector (%u) length: %u: 0x",
+ tlv_type,
+ tlv_len);
+ UPDATE_BUF_BUFLEN(buf, buflen, stringlen);
+ }
+ while (ttlv_len != 0) {
+ if (tlen < 1) {
+ if (buflen != 0) {
+ stringlen=snprintf(buf,buflen, " (ran past the end)");
+ UPDATE_BUF_BUFLEN(buf, buflen, stringlen);
+ }
+ return plen + 2;
+ }
+ ND_TCHECK_1(pptr);
+ if (buflen != 0) {
+ stringlen=snprintf(buf,buflen, "%02x",
+ GET_U_1(pptr));
+ pptr++;
+ UPDATE_BUF_BUFLEN(buf, buflen, stringlen);
+ }
+ ttlv_len--;
+ tlen--;
+ }
+ break;
+ default:
+ if (buflen != 0) {
+ stringlen=snprintf(buf,buflen, "\n\t\tunknown TLV #%u, length: %u",
+ tlv_type,
+ tlv_len);
+ UPDATE_BUF_BUFLEN(buf, buflen, stringlen);
+ }
+ if (tlen < ttlv_len) {
+ if (buflen != 0) {
+ stringlen=snprintf(buf,buflen, " (ran past the end)");
+ UPDATE_BUF_BUFLEN(buf, buflen, stringlen);
+ }
+ return plen + 2;
+ }
+ tlen -= ttlv_len;
+ break;
+ }
+ }
+ return plen + 2;
+ } else {
+ /* complain bitterly ? */
+ /* fall through */
+ goto trunc;
+ }
+
+trunc:
+ return -2;
+}
+
+int
+decode_prefix6(netdissect_options *ndo,
+ const u_char *pd, u_int itemlen, char *buf, size_t buflen)
+{
+ nd_ipv6 addr;
+ u_int plen, plenbytes;
+
+ ITEMCHECK(1);
+ plen = GET_U_1(pd);
+ if (128 < plen)
+ return -1;
+ itemlen -= 1;
+
+ memset(&addr, 0, sizeof(addr));
+ plenbytes = (plen + 7) / 8;
+ ITEMCHECK(plenbytes);
+ GET_CPY_BYTES(&addr, pd + 1, plenbytes);
+ if (plen % 8) {
+ addr[plenbytes - 1] &=
+ ((0xff00 >> (plen % 8)) & 0xff);
+ }
+ snprintf(buf, buflen, "%s/%u", ip6addr_string(ndo, (const u_char *)&addr), plen);
+ return 1 + plenbytes;
+
+badtlv:
+ return -2;
+}
+
+static int
+decode_labeled_prefix6(netdissect_options *ndo,
+ const u_char *pptr, u_int itemlen, char *buf, size_t buflen)
+{
+ nd_ipv6 addr;
+ u_int plen, plenbytes;
+
+ /* prefix length and label = 4 bytes */
+ ND_TCHECK_4(pptr);
+ ITEMCHECK(4);
+ plen = GET_U_1(pptr); /* get prefix length */
+
+ if (24 > plen)
+ return -1;
+
+ plen -= 24; /* adjust prefixlen - labellength */
+
+ if (128 < plen)
+ return -1;
+ itemlen -= 4;
+
+ memset(&addr, 0, sizeof(addr));
+ plenbytes = (plen + 7) / 8;
+ GET_CPY_BYTES(&addr, pptr + 4, plenbytes);
+ if (plen % 8) {
+ addr[plenbytes - 1] &=
+ ((0xff00 >> (plen % 8)) & 0xff);
+ }
+ /* the label may get offsetted by 4 bits so lets shift it right */
+ snprintf(buf, buflen, "%s/%u, label:%u %s",
+ ip6addr_string(ndo, (const u_char *)&addr),
+ plen,
+ GET_BE_U_3(pptr + 1)>>4,
+ ((GET_U_1(pptr + 3) & 1) == 0) ? "(BOGUS: Bottom of Stack NOT set!)" : "(bottom)" );
+
+ return 4 + plenbytes;
+
+trunc:
+ return -2;
+
+badtlv:
+ return -3;
+}
+
+static int
+decode_labeled_vpn_prefix6(netdissect_options *ndo,
+ const u_char *pptr, char *buf, size_t buflen)
+{
+ nd_ipv6 addr;
+ u_int plen;
+
+ plen = GET_U_1(pptr); /* get prefix length */
+
+ if ((24+64) > plen)
+ return -1;
+
+ plen -= (24+64); /* adjust prefixlen - labellength - RD len*/
+
+ if (128 < plen)
+ return -1;
+
+ memset(&addr, 0, sizeof(addr));
+ GET_CPY_BYTES(&addr, pptr + 12, (plen + 7) / 8);
+ if (plen % 8) {
+ addr[(plen + 7) / 8 - 1] &=
+ ((0xff00 >> (plen % 8)) & 0xff);
+ }
+ /* the label may get offsetted by 4 bits so lets shift it right */
+ snprintf(buf, buflen, "RD: %s, %s/%u, label:%u %s",
+ bgp_vpn_rd_print(ndo, pptr+4),
+ ip6addr_string(ndo, (const u_char *)&addr),
+ plen,
+ GET_BE_U_3(pptr + 1)>>4,
+ ((GET_U_1(pptr + 3) & 1) == 0) ? "(BOGUS: Bottom of Stack NOT set!)" : "(bottom)" );
+
+ return 12 + (plen + 7) / 8;
+}
+
+static int
+decode_clnp_prefix(netdissect_options *ndo,
+ const u_char *pptr, char *buf, size_t buflen)
+{
+ uint8_t addr[19];
+ u_int plen;
+
+ plen = GET_U_1(pptr); /* get prefix length */
+
+ if (152 < plen)
+ return -1;
+
+ memset(&addr, 0, sizeof(addr));
+ GET_CPY_BYTES(&addr, pptr + 4, (plen + 7) / 8);
+ if (plen % 8) {
+ addr[(plen + 7) / 8 - 1] &=
+ ((0xff00 >> (plen % 8)) & 0xff);
+ }
+ /* Cannot use GET_ISONSAP_STRING (not packet buffer pointer) */
+ snprintf(buf, buflen, "%s/%u",
+ isonsap_string(ndo, addr,(plen + 7) / 8),
+ plen);
+
+ return 1 + (plen + 7) / 8;
+}
+
+static int
+decode_labeled_vpn_clnp_prefix(netdissect_options *ndo,
+ const u_char *pptr, char *buf, size_t buflen)
+{
+ uint8_t addr[19];
+ u_int plen;
+
+ plen = GET_U_1(pptr); /* get prefix length */
+
+ if ((24+64) > plen)
+ return -1;
+
+ plen -= (24+64); /* adjust prefixlen - labellength - RD len*/
+
+ if (152 < plen)
+ return -1;
+
+ memset(&addr, 0, sizeof(addr));
+ GET_CPY_BYTES(&addr, pptr + 12, (plen + 7) / 8);
+ if (plen % 8) {
+ addr[(plen + 7) / 8 - 1] &= ((0xff00 >> (plen % 8)) & 0xff);
+ }
+ /* the label may get offsetted by 4 bits so lets shift it right */
+ /* Cannot use GET_ISONSAP_STRING (not packet buffer pointer) */
+ snprintf(buf, buflen, "RD: %s, %s/%u, label:%u %s",
+ bgp_vpn_rd_print(ndo, pptr+4),
+ isonsap_string(ndo, addr,(plen + 7) / 8),
+ plen,
+ GET_BE_U_3(pptr + 1)>>4,
+ ((GET_U_1(pptr + 3) & 1) == 0) ? "(BOGUS: Bottom of Stack NOT set!)" : "(bottom)" );
+
+ return 12 + (plen + 7) / 8;
+}
+
+/*
+ * bgp_attr_get_as_size
+ *
+ * Try to find the size of the ASs encoded in an as-path. It is not obvious, as
+ * both Old speakers that do not support 4 byte AS, and the new speakers that do
+ * support, exchange AS-Path with the same path-attribute type value 0x02.
+ */
+static u_int
+bgp_attr_get_as_size(netdissect_options *ndo,
+ uint8_t bgpa_type, const u_char *pptr, u_int len)
+{
+ const u_char *tptr = pptr;
+
+ /*
+ * If the path attribute is the optional AS4 path type, then we already
+ * know, that ASs must be encoded in 4 byte format.
+ */
+ if (bgpa_type == BGPTYPE_AS4_PATH) {
+ return 4;
+ }
+
+ /*
+ * Let us assume that ASs are of 2 bytes in size, and check if the AS-Path
+ * TLV is good. If not, ask the caller to try with AS encoded as 4 bytes
+ * each.
+ */
+ while (tptr < pptr + len) {
+ /*
+ * If we do not find a valid segment type, our guess might be wrong.
+ */
+ if (GET_U_1(tptr) < BGP_AS_SEG_TYPE_MIN || GET_U_1(tptr) > BGP_AS_SEG_TYPE_MAX) {
+ goto trunc;
+ }
+ tptr += 2 + GET_U_1(tptr + 1) * 2;
+ }
+
+ /*
+ * If we correctly reached end of the AS path attribute data content,
+ * then most likely ASs were indeed encoded as 2 bytes.
+ */
+ if (tptr == pptr + len) {
+ return 2;
+ }
+
+trunc:
+
+ /*
+ * We can come here, either we did not have enough data, or if we
+ * try to decode 4 byte ASs in 2 byte format. Either way, return 4,
+ * so that calller can try to decode each AS as of 4 bytes. If indeed
+ * there was not enough data, it will crib and end the parse anyways.
+ */
+ return 4;
+}
+
+/*
+ * The only way to know that a BGP UPDATE message is using add path is
+ * by checking if the capability is in the OPEN message which we may have missed.
+ * So this function checks if it is possible that the update could contain add path
+ * and if so it checks that standard BGP doesn't make sense.
+ */
+static int
+check_add_path(netdissect_options *ndo, const u_char *pptr, u_int length,
+ u_int max_prefix_length)
+{
+ u_int offset, prefix_length;
+
+ if (length < 5) {
+ return 0;
+ }
+
+ /*
+ * Scan through the NLRI information under the assumpetion that
+ * it doesn't have path IDs.
+ */
+ for (offset = 0; offset < length;) {
+ offset += 4;
+ if (!ND_TTEST_1(pptr + offset)) {
+ /* We ran out of captured data; quit scanning. */
+ break;
+ }
+ prefix_length = GET_U_1(pptr + offset);
+ /*
+ * Add 4 to cover the path id
+ * and check the prefix length isn't greater than 32/128.
+ */
+ if (prefix_length > max_prefix_length) {
+ return 0;
+ }
+ /* Add 1 for the prefix_length byte and prefix_length to cover the address */
+ offset += 1 + ((prefix_length + 7) / 8);
+ }
+ /* check we haven't gone past the end of the section */
+ if (offset > length) {
+ return 0;
+ }
+
+ /* check it's not standard BGP */
+ for (offset = 0; offset < length; ) {
+ if (!ND_TTEST_1(pptr + offset)) {
+ /* We ran out of captured data; quit scanning. */
+ break;
+ }
+ prefix_length = GET_U_1(pptr + offset);
+ /*
+ * If the prefix_length is zero (0.0.0.0/0)
+ * and since it's not the only address (length >= 5)
+ * then it is add-path
+ */
+ if (prefix_length < 1 || prefix_length > max_prefix_length) {
+ return 1;
+ }
+ offset += 1 + ((prefix_length + 7) / 8);
+ }
+ if (offset > length) {
+ return 1;
+ }
+
+ /* assume not add-path by default */
+ return 0;
+}
+
+static int
+bgp_mp_af_print(netdissect_options *ndo,
+ const u_char *tptr, u_int tlen,
+ uint16_t *afp, uint8_t *safip)
+{
+ uint16_t af;
+ uint8_t safi;
+
+ af = GET_BE_U_2(tptr);
+ *afp = af;
+ safi = GET_U_1(tptr + 2);
+ *safip = safi;
+
+ ND_PRINT("\n\t AFI: %s (%u), %sSAFI: %s (%u)",
+ tok2str(af_values, "Unknown AFI", af),
+ af,
+ (safi>128) ? "vendor specific " : "", /* 128 is meanwhile wellknown */
+ tok2str(bgp_safi_values, "Unknown SAFI", safi),
+ safi);
+
+ switch(af<<8 | safi) {
+ case (AFNUM_INET<<8 | SAFNUM_UNICAST):
+ case (AFNUM_INET<<8 | SAFNUM_MULTICAST):
+ case (AFNUM_INET<<8 | SAFNUM_UNIMULTICAST):
+ case (AFNUM_INET<<8 | SAFNUM_LABUNICAST):
+ case (AFNUM_INET<<8 | SAFNUM_RT_ROUTING_INFO):
+ case (AFNUM_INET<<8 | SAFNUM_VPNUNICAST):
+ case (AFNUM_INET<<8 | SAFNUM_VPNMULTICAST):
+ case (AFNUM_INET<<8 | SAFNUM_VPNUNIMULTICAST):
+ case (AFNUM_INET<<8 | SAFNUM_MULTICAST_VPN):
+ case (AFNUM_INET<<8 | SAFNUM_MDT):
+ case (AFNUM_INET6<<8 | SAFNUM_UNICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_MULTICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_UNIMULTICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_LABUNICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_VPNUNICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_VPNMULTICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_VPNUNIMULTICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_UNICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_MULTICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_UNIMULTICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_VPNUNICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_VPNMULTICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_VPNUNIMULTICAST):
+ case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNICAST):
+ case (AFNUM_L2VPN<<8 | SAFNUM_VPNMULTICAST):
+ case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNIMULTICAST):
+ case (AFNUM_VPLS<<8 | SAFNUM_VPLS):
+ break;
+ default:
+ ND_TCHECK_LEN(tptr, tlen);
+ ND_PRINT("\n\t no AFI %u / SAFI %u decoder", af, safi);
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, tptr, "\n\t ", tlen);
+ return -1;
+ }
+ return 0;
+trunc:
+ return -2;
+}
+
+static int
+bgp_nlri_print(netdissect_options *ndo, uint16_t af, uint8_t safi,
+ const u_char *tptr, u_int len,
+ char *buf, size_t buflen,
+ int add_path4, int add_path6)
+{
+ int advance;
+ u_int path_id = 0;
+
+ switch (af<<8 | safi) {
+ case (AFNUM_INET<<8 | SAFNUM_UNICAST):
+ case (AFNUM_INET<<8 | SAFNUM_MULTICAST):
+ case (AFNUM_INET<<8 | SAFNUM_UNIMULTICAST):
+ if (add_path4) {
+ path_id = GET_BE_U_4(tptr);
+ tptr += 4;
+ }
+ advance = decode_prefix4(ndo, tptr, len, buf, buflen);
+ if (advance == -1)
+ ND_PRINT("\n\t (illegal prefix length)");
+ else if (advance == -2)
+ break; /* bytes left, but not enough */
+ else
+ ND_PRINT("\n\t %s", buf);
+ if (add_path4) {
+ ND_PRINT(" Path Id: %u", path_id);
+ advance += 4;
+ }
+ break;
+ case (AFNUM_INET<<8 | SAFNUM_LABUNICAST):
+ advance = decode_labeled_prefix4(ndo, tptr, len, buf, buflen);
+ if (advance == -1)
+ ND_PRINT("\n\t (illegal prefix length)");
+ else if (advance == -2)
+ goto trunc;
+ else if (advance == -3)
+ break; /* bytes left, but not enough */
+ else
+ ND_PRINT("\n\t %s", buf);
+ break;
+ case (AFNUM_INET<<8 | SAFNUM_VPNUNICAST):
+ case (AFNUM_INET<<8 | SAFNUM_VPNMULTICAST):
+ case (AFNUM_INET<<8 | SAFNUM_VPNUNIMULTICAST):
+ advance = decode_labeled_vpn_prefix4(ndo, tptr, buf, buflen);
+ if (advance == -1)
+ ND_PRINT("\n\t (illegal prefix length)");
+ else
+ ND_PRINT("\n\t %s", buf);
+ break;
+ case (AFNUM_INET<<8 | SAFNUM_RT_ROUTING_INFO):
+ advance = decode_rt_routing_info(ndo, tptr);
+ break;
+ case (AFNUM_INET<<8 | SAFNUM_MULTICAST_VPN): /* fall through */
+ case (AFNUM_INET6<<8 | SAFNUM_MULTICAST_VPN):
+ advance = decode_multicast_vpn(ndo, tptr, buf, buflen);
+ if (advance == -1)
+ ND_PRINT("\n\t (illegal prefix length)");
+ else if (advance == -2)
+ goto trunc;
+ else
+ ND_PRINT("\n\t %s", buf);
+ break;
+
+ case (AFNUM_INET<<8 | SAFNUM_MDT):
+ advance = decode_mdt_vpn_nlri(ndo, tptr, buf, buflen);
+ if (advance == -1)
+ ND_PRINT("\n\t (illegal prefix length)");
+ else if (advance == -2)
+ goto trunc;
+ else
+ ND_PRINT("\n\t %s", buf);
+ break;
+ case (AFNUM_INET6<<8 | SAFNUM_UNICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_MULTICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_UNIMULTICAST):
+ if (add_path6) {
+ path_id = GET_BE_U_4(tptr);
+ tptr += 4;
+ }
+ advance = decode_prefix6(ndo, tptr, len, buf, buflen);
+ if (advance == -1)
+ ND_PRINT("\n\t (illegal prefix length)");
+ else if (advance == -2)
+ break; /* bytes left, but not enough */
+ else
+ ND_PRINT("\n\t %s", buf);
+ if (add_path6) {
+ ND_PRINT(" Path Id: %u", path_id);
+ advance += 4;
+ }
+ break;
+ case (AFNUM_INET6<<8 | SAFNUM_LABUNICAST):
+ advance = decode_labeled_prefix6(ndo, tptr, len, buf, buflen);
+ if (advance == -1)
+ ND_PRINT("\n\t (illegal prefix length)");
+ else if (advance == -2)
+ goto trunc;
+ else if (advance == -3)
+ break; /* bytes left, but not enough */
+ else
+ ND_PRINT("\n\t %s", buf);
+ break;
+ case (AFNUM_INET6<<8 | SAFNUM_VPNUNICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_VPNMULTICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_VPNUNIMULTICAST):
+ advance = decode_labeled_vpn_prefix6(ndo, tptr, buf, buflen);
+ if (advance == -1)
+ ND_PRINT("\n\t (illegal prefix length)");
+ else
+ ND_PRINT("\n\t %s", buf);
+ break;
+ case (AFNUM_VPLS<<8 | SAFNUM_VPLS):
+ case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNICAST):
+ case (AFNUM_L2VPN<<8 | SAFNUM_VPNMULTICAST):
+ case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNIMULTICAST):
+ advance = decode_labeled_vpn_l2(ndo, tptr, buf, buflen);
+ if (advance == -1)
+ ND_PRINT("\n\t (illegal length)");
+ else if (advance == -2)
+ goto trunc;
+ else
+ ND_PRINT("\n\t %s", buf);
+ break;
+ case (AFNUM_NSAP<<8 | SAFNUM_UNICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_MULTICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_UNIMULTICAST):
+ advance = decode_clnp_prefix(ndo, tptr, buf, buflen);
+ if (advance == -1)
+ ND_PRINT("\n\t (illegal prefix length)");
+ else
+ ND_PRINT("\n\t %s", buf);
+ break;
+ case (AFNUM_NSAP<<8 | SAFNUM_VPNUNICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_VPNMULTICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_VPNUNIMULTICAST):
+ advance = decode_labeled_vpn_clnp_prefix(ndo, tptr, buf, buflen);
+ if (advance == -1)
+ ND_PRINT("\n\t (illegal prefix length)");
+ else
+ ND_PRINT("\n\t %s", buf);
+ break;
+ default:
+ /*
+ * This should not happen, we should have been protected
+ * by bgp_mp_af_print()'s return value.
+ */
+ ND_PRINT("\n\t ERROR: no AFI %u / SAFI %u decoder", af, safi);
+ advance = -4;
+ break;
+ }
+ return advance;
+trunc: /* we rely on the caller to recognize -2 return value */
+ return -2;
+}
+
+static int
+bgp_attr_print(netdissect_options *ndo,
+ uint8_t atype, const u_char *pptr, u_int len,
+ const unsigned attr_set_level)
+{
+ /* allocate space for the largest possible string */
+ char astostr[AS_STR_SIZE];
+ u_int i;
+ uint16_t af;
+ uint8_t safi, snpa, nhlen;
+ int advance;
+ u_int tlen;
+ const u_char *tptr;
+ char buf[MAXHOSTNAMELEN + 100];
+ u_int as_size;
+ int add_path4, add_path6;
+ int ret;
+
+ tptr = pptr;
+ tlen = len;
+
+ switch (atype) {
+ case BGPTYPE_ORIGIN:
+ if (len != 1)
+ ND_PRINT("invalid len");
+ else {
+ ND_PRINT("%s", tok2str(bgp_origin_values,
+ "Unknown Origin Typecode",
+ GET_U_1(tptr)));
+ }
+ break;
+
+ /*
+ * Process AS4 byte path and AS2 byte path attributes here.
+ */
+ case BGPTYPE_AS4_PATH:
+ case BGPTYPE_AS_PATH:
+ if (len % 2) {
+ ND_PRINT("invalid len");
+ break;
+ }
+ if (!len) {
+ ND_PRINT("empty");
+ break;
+ }
+
+ /*
+ * BGP updates exchanged between New speakers that support 4
+ * byte AS, ASs are always encoded in 4 bytes. There is no
+ * definitive way to find this, just by the packet's
+ * contents. So, check for packet's TLV's sanity assuming
+ * 2 bytes first, and it does not pass, assume that ASs are
+ * encoded in 4 bytes format and move on.
+ */
+ as_size = bgp_attr_get_as_size(ndo, atype, pptr, len);
+
+ while (tptr < pptr + len) {
+ ND_PRINT("%s", tok2str(bgp_as_path_segment_open_values,
+ "?", GET_U_1(tptr)));
+ for (i = 0; i < GET_U_1(tptr + 1) * as_size; i += as_size) {
+ ND_TCHECK_LEN(tptr + 2 + i, as_size);
+ ND_PRINT("%s ",
+ as_printf(ndo, astostr, sizeof(astostr),
+ as_size == 2 ?
+ GET_BE_U_2(tptr + i + 2) :
+ GET_BE_U_4(tptr + i + 2)));
+ }
+ ND_PRINT("%s", tok2str(bgp_as_path_segment_close_values,
+ "?", GET_U_1(tptr)));
+ tptr += 2 + GET_U_1(tptr + 1) * as_size;
+ }
+ break;
+ case BGPTYPE_NEXT_HOP:
+ if (len != 4)
+ ND_PRINT("invalid len");
+ else {
+ ND_PRINT("%s", GET_IPADDR_STRING(tptr));
+ }
+ break;
+ case BGPTYPE_MULTI_EXIT_DISC:
+ case BGPTYPE_LOCAL_PREF:
+ if (len != 4)
+ ND_PRINT("invalid len");
+ else {
+ ND_PRINT("%u", GET_BE_U_4(tptr));
+ }
+ break;
+ case BGPTYPE_ATOMIC_AGGREGATE:
+ if (len != 0)
+ ND_PRINT("invalid len");
+ break;
+ case BGPTYPE_AGGREGATOR:
+
+ /*
+ * Depending on the AS encoded is of 2 bytes or of 4 bytes,
+ * the length of this PA can be either 6 bytes or 8 bytes.
+ */
+ if (len != 6 && len != 8) {
+ ND_PRINT("invalid len");
+ break;
+ }
+ ND_TCHECK_LEN(tptr, len);
+ if (len == 6) {
+ ND_PRINT(" AS #%s, origin %s",
+ as_printf(ndo, astostr, sizeof(astostr), GET_BE_U_2(tptr)),
+ GET_IPADDR_STRING(tptr + 2));
+ } else {
+ ND_PRINT(" AS #%s, origin %s",
+ as_printf(ndo, astostr, sizeof(astostr),
+ GET_BE_U_4(tptr)), GET_IPADDR_STRING(tptr + 4));
+ }
+ break;
+ case BGPTYPE_AGGREGATOR4:
+ if (len != 8) {
+ ND_PRINT("invalid len");
+ break;
+ }
+ ND_PRINT(" AS #%s, origin %s",
+ as_printf(ndo, astostr, sizeof(astostr), GET_BE_U_4(tptr)),
+ GET_IPADDR_STRING(tptr + 4));
+ break;
+ case BGPTYPE_COMMUNITIES:
+ if (len % 4) {
+ ND_PRINT("invalid len");
+ break;
+ }
+ while (tlen != 0) {
+ uint32_t comm;
+ ND_TCHECK_4(tptr);
+ if (tlen < 4)
+ goto trunc;
+ comm = GET_BE_U_4(tptr);
+ switch (comm) {
+ case BGP_COMMUNITY_NO_EXPORT:
+ ND_PRINT(" NO_EXPORT");
+ break;
+ case BGP_COMMUNITY_NO_ADVERT:
+ ND_PRINT(" NO_ADVERTISE");
+ break;
+ case BGP_COMMUNITY_NO_EXPORT_SUBCONFED:
+ ND_PRINT(" NO_EXPORT_SUBCONFED");
+ break;
+ default:
+ ND_PRINT("%u:%u%s",
+ (comm >> 16) & 0xffff,
+ comm & 0xffff,
+ (tlen>4) ? ", " : "");
+ break;
+ }
+ tlen -=4;
+ tptr +=4;
+ }
+ break;
+ case BGPTYPE_ORIGINATOR_ID:
+ if (len != 4) {
+ ND_PRINT("invalid len");
+ break;
+ }
+ ND_PRINT("%s",GET_IPADDR_STRING(tptr));
+ break;
+ case BGPTYPE_CLUSTER_LIST:
+ if (len % 4) {
+ ND_PRINT("invalid len");
+ break;
+ }
+ while (tlen != 0) {
+ if (tlen < 4)
+ goto trunc;
+ ND_PRINT("%s%s",
+ GET_IPADDR_STRING(tptr),
+ (tlen>4) ? ", " : "");
+ tlen -=4;
+ tptr +=4;
+ }
+ break;
+ case BGPTYPE_MP_REACH_NLRI:
+ ND_TCHECK_3(tptr);
+ if (tlen < 3)
+ goto trunc;
+ ret = bgp_mp_af_print(ndo, tptr, tlen, &af, &safi);
+ if (ret == -2)
+ goto trunc;
+ if (ret < 0)
+ break;
+
+ tptr += 3;
+ tlen -= 3;
+
+ ND_TCHECK_1(tptr);
+ if (tlen < 1)
+ goto trunc;
+ nhlen = GET_U_1(tptr);
+ tptr++;
+ tlen--;
+
+ if (nhlen) {
+ u_int nnh = 0;
+ uint8_t tnhlen = nhlen;
+ if (tlen < tnhlen)
+ goto trunc;
+ ND_PRINT("\n\t nexthop: ");
+ while (tnhlen != 0) {
+ if (nnh++ > 0) {
+ ND_PRINT(", " );
+ }
+ switch(af<<8 | safi) {
+ case (AFNUM_INET<<8 | SAFNUM_UNICAST):
+ case (AFNUM_INET<<8 | SAFNUM_MULTICAST):
+ case (AFNUM_INET<<8 | SAFNUM_UNIMULTICAST):
+ case (AFNUM_INET<<8 | SAFNUM_LABUNICAST):
+ case (AFNUM_INET<<8 | SAFNUM_RT_ROUTING_INFO):
+ case (AFNUM_INET<<8 | SAFNUM_MULTICAST_VPN):
+ case (AFNUM_INET<<8 | SAFNUM_MDT):
+ if (tnhlen < sizeof(nd_ipv4)) {
+ ND_PRINT("invalid len");
+ tptr += tnhlen;
+ tlen -= tnhlen;
+ tnhlen = 0;
+ } else {
+ ND_PRINT("%s",GET_IPADDR_STRING(tptr));
+ tptr += sizeof(nd_ipv4);
+ tnhlen -= sizeof(nd_ipv4);
+ tlen -= sizeof(nd_ipv4);
+ }
+ break;
+ case (AFNUM_INET<<8 | SAFNUM_VPNUNICAST):
+ case (AFNUM_INET<<8 | SAFNUM_VPNMULTICAST):
+ case (AFNUM_INET<<8 | SAFNUM_VPNUNIMULTICAST):
+ if (tnhlen < sizeof(nd_ipv4)+BGP_VPN_RD_LEN) {
+ ND_PRINT("invalid len");
+ tptr += tnhlen;
+ tlen -= tnhlen;
+ tnhlen = 0;
+ } else {
+ ND_PRINT("RD: %s, %s",
+ bgp_vpn_rd_print(ndo, tptr),
+ GET_IPADDR_STRING(tptr+BGP_VPN_RD_LEN));
+ tptr += (sizeof(nd_ipv4)+BGP_VPN_RD_LEN);
+ tlen -= (sizeof(nd_ipv4)+BGP_VPN_RD_LEN);
+ tnhlen -= (sizeof(nd_ipv4)+BGP_VPN_RD_LEN);
+ }
+ break;
+ case (AFNUM_INET6<<8 | SAFNUM_UNICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_MULTICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_UNIMULTICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_LABUNICAST):
+ if (tnhlen < sizeof(nd_ipv6)) {
+ ND_PRINT("invalid len");
+ tptr += tnhlen;
+ tlen -= tnhlen;
+ tnhlen = 0;
+ } else {
+ ND_PRINT("%s", GET_IP6ADDR_STRING(tptr));
+ tptr += sizeof(nd_ipv6);
+ tlen -= sizeof(nd_ipv6);
+ tnhlen -= sizeof(nd_ipv6);
+ }
+ break;
+ case (AFNUM_INET6<<8 | SAFNUM_VPNUNICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_VPNMULTICAST):
+ case (AFNUM_INET6<<8 | SAFNUM_VPNUNIMULTICAST):
+ if (tnhlen < sizeof(nd_ipv6)+BGP_VPN_RD_LEN) {
+ ND_PRINT("invalid len");
+ tptr += tnhlen;
+ tlen -= tnhlen;
+ tnhlen = 0;
+ } else {
+ ND_PRINT("RD: %s, %s",
+ bgp_vpn_rd_print(ndo, tptr),
+ GET_IP6ADDR_STRING(tptr+BGP_VPN_RD_LEN));
+ tptr += (sizeof(nd_ipv6)+BGP_VPN_RD_LEN);
+ tlen -= (sizeof(nd_ipv6)+BGP_VPN_RD_LEN);
+ tnhlen -= (sizeof(nd_ipv6)+BGP_VPN_RD_LEN);
+ }
+ break;
+ case (AFNUM_VPLS<<8 | SAFNUM_VPLS):
+ case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNICAST):
+ case (AFNUM_L2VPN<<8 | SAFNUM_VPNMULTICAST):
+ case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNIMULTICAST):
+ if (tnhlen < sizeof(nd_ipv4)) {
+ ND_PRINT("invalid len");
+ tptr += tnhlen;
+ tlen -= tnhlen;
+ tnhlen = 0;
+ } else {
+ ND_PRINT("%s", GET_IPADDR_STRING(tptr));
+ tptr += (sizeof(nd_ipv4));
+ tlen -= (sizeof(nd_ipv4));
+ tnhlen -= (sizeof(nd_ipv4));
+ }
+ break;
+ case (AFNUM_NSAP<<8 | SAFNUM_UNICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_MULTICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_UNIMULTICAST):
+ ND_PRINT("%s", GET_ISONSAP_STRING(tptr, tnhlen));
+ tptr += tnhlen;
+ tlen -= tnhlen;
+ tnhlen = 0;
+ break;
+
+ case (AFNUM_NSAP<<8 | SAFNUM_VPNUNICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_VPNMULTICAST):
+ case (AFNUM_NSAP<<8 | SAFNUM_VPNUNIMULTICAST):
+ if (tnhlen < BGP_VPN_RD_LEN+1) {
+ ND_PRINT("invalid len");
+ tptr += tnhlen;
+ tlen -= tnhlen;
+ tnhlen = 0;
+ } else {
+ ND_TCHECK_LEN(tptr, tnhlen);
+ ND_PRINT("RD: %s, %s",
+ bgp_vpn_rd_print(ndo, tptr),
+ GET_ISONSAP_STRING(tptr+BGP_VPN_RD_LEN,tnhlen-BGP_VPN_RD_LEN));
+ /* rfc986 mapped IPv4 address ? */
+ if (GET_BE_U_4(tptr + BGP_VPN_RD_LEN) == 0x47000601)
+ ND_PRINT(" = %s", GET_IPADDR_STRING(tptr+BGP_VPN_RD_LEN+4));
+ /* rfc1888 mapped IPv6 address ? */
+ else if (GET_BE_U_3(tptr + BGP_VPN_RD_LEN) == 0x350000)
+ ND_PRINT(" = %s", GET_IP6ADDR_STRING(tptr+BGP_VPN_RD_LEN+3));
+ tptr += tnhlen;
+ tlen -= tnhlen;
+ tnhlen = 0;
+ }
+ break;
+ default:
+ /*
+ * bgp_mp_af_print() should have saved us from
+ * an unsupported AFI/SAFI.
+ */
+ ND_PRINT("ERROR: no AFI %u/SAFI %u nexthop decoder", af, safi);
+ tptr += tnhlen;
+ tlen -= tnhlen;
+ tnhlen = 0;
+ goto done;
+ break;
+ }
+ }
+ }
+ ND_PRINT(", nh-length: %u", nhlen);
+
+ /* As per RFC 2858; this is reserved in RFC 4760 */
+ if (tlen < 1)
+ goto trunc;
+ snpa = GET_U_1(tptr);
+ tptr++;
+ tlen--;
+
+ if (snpa) {
+ ND_PRINT("\n\t %u SNPA", snpa);
+ for (/*nothing*/; snpa != 0; snpa--) {
+ uint8_t snpalen;
+ if (tlen < 1)
+ goto trunc;
+ snpalen = GET_U_1(tptr);
+ ND_PRINT("\n\t %u bytes", snpalen);
+ tptr++;
+ tlen--;
+ if (tlen < snpalen)
+ goto trunc;
+ ND_TCHECK_LEN(tptr, snpalen);
+ tptr += snpalen;
+ tlen -= snpalen;
+ }
+ } else {
+ ND_PRINT(", no SNPA");
+ }
+
+ add_path4 = check_add_path(ndo, tptr, (len-ND_BYTES_BETWEEN(tptr, pptr)), 32);
+ add_path6 = check_add_path(ndo, tptr, (len-ND_BYTES_BETWEEN(tptr, pptr)), 128);
+
+ while (tptr < pptr + len) {
+ advance = bgp_nlri_print(ndo, af, safi, tptr, len, buf, sizeof(buf),
+ add_path4, add_path6);
+ if (advance == -2)
+ goto trunc;
+ if (advance < 0)
+ break;
+ tptr += advance;
+ }
+ break;
+
+ case BGPTYPE_MP_UNREACH_NLRI:
+ ND_TCHECK_LEN(tptr, BGP_MP_NLRI_MINSIZE);
+ ret = bgp_mp_af_print(ndo, tptr, tlen, &af, &safi);
+ if (ret == -2)
+ goto trunc;
+ if (ret < 0)
+ break;
+
+ if (len == BGP_MP_NLRI_MINSIZE)
+ ND_PRINT("\n\t End-of-Rib Marker (empty NLRI)");
+
+ tptr += 3;
+
+ add_path4 = check_add_path(ndo, tptr, (len-ND_BYTES_BETWEEN(tptr, pptr)), 32);
+ add_path6 = check_add_path(ndo, tptr, (len-ND_BYTES_BETWEEN(tptr, pptr)), 128);
+
+ while (tptr < pptr + len) {
+ advance = bgp_nlri_print(ndo, af, safi, tptr, len, buf, sizeof(buf),
+ add_path4, add_path6);
+ if (advance == -2)
+ goto trunc;
+ if (advance < 0)
+ break;
+ tptr += advance;
+ }
+ break;
+ case BGPTYPE_EXTD_COMMUNITIES:
+ if (len % 8) {
+ ND_PRINT("invalid len");
+ break;
+ }
+ while (tlen != 0) {
+ uint16_t extd_comm;
+
+ ND_TCHECK_2(tptr);
+ if (tlen < 2)
+ goto trunc;
+ extd_comm=GET_BE_U_2(tptr);
+
+ ND_PRINT("\n\t %s (0x%04x), Flags [%s]",
+ tok2str(bgp_extd_comm_subtype_values,
+ "unknown extd community typecode",
+ extd_comm),
+ extd_comm,
+ bittok2str(bgp_extd_comm_flag_values, "none", extd_comm));
+
+ ND_TCHECK_8(tptr);
+ if (tlen < 8)
+ goto trunc;
+ ND_PRINT(": ");
+ bgp_extended_community_print(ndo, tptr);
+ tlen -= 8;
+ tptr += 8;
+ }
+ break;
+
+ case BGPTYPE_PMSI_TUNNEL:
+ {
+ uint8_t tunnel_type, flags;
+
+ ND_TCHECK_5(tptr);
+ if (tlen < 5)
+ goto trunc;
+ flags = GET_U_1(tptr);
+ tunnel_type = GET_U_1(tptr + 1);
+
+ ND_PRINT("\n\t Tunnel-type %s (%u), Flags [%s], MPLS Label %u",
+ tok2str(bgp_pmsi_tunnel_values, "Unknown", tunnel_type),
+ tunnel_type,
+ bittok2str(bgp_pmsi_flag_values, "none", flags),
+ GET_BE_U_3(tptr + 2)>>4);
+
+ tptr +=5;
+ tlen -= 5;
+
+ switch (tunnel_type) {
+ case BGP_PMSI_TUNNEL_PIM_SM: /* fall through */
+ case BGP_PMSI_TUNNEL_PIM_BIDIR:
+ ND_PRINT("\n\t Sender %s, P-Group %s",
+ GET_IPADDR_STRING(tptr),
+ GET_IPADDR_STRING(tptr+4));
+ break;
+
+ case BGP_PMSI_TUNNEL_PIM_SSM:
+ ND_PRINT("\n\t Root-Node %s, P-Group %s",
+ GET_IPADDR_STRING(tptr),
+ GET_IPADDR_STRING(tptr+4));
+ break;
+ case BGP_PMSI_TUNNEL_INGRESS:
+ ND_PRINT("\n\t Tunnel-Endpoint %s",
+ GET_IPADDR_STRING(tptr));
+ break;
+ case BGP_PMSI_TUNNEL_LDP_P2MP: /* fall through */
+ case BGP_PMSI_TUNNEL_LDP_MP2MP:
+ ND_PRINT("\n\t Root-Node %s, LSP-ID 0x%08x",
+ GET_IPADDR_STRING(tptr),
+ GET_BE_U_4(tptr + 4));
+ break;
+ case BGP_PMSI_TUNNEL_RSVP_P2MP:
+ ND_PRINT("\n\t Extended-Tunnel-ID %s, P2MP-ID 0x%08x",
+ GET_IPADDR_STRING(tptr),
+ GET_BE_U_4(tptr + 4));
+ break;
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ print_unknown_data(ndo, tptr, "\n\t ", tlen);
+ }
+ }
+ break;
+ }
+ case BGPTYPE_AIGP:
+ {
+ uint8_t type;
+ uint16_t length;
+
+ while (tlen >= 3) {
+ type = GET_U_1(tptr);
+ length = GET_BE_U_2(tptr + 1);
+ tptr += 3;
+ tlen -= 3;
+
+ ND_PRINT("\n\t %s TLV (%u), length %u",
+ tok2str(bgp_aigp_values, "Unknown", type),
+ type, length);
+
+ if (length < 3)
+ goto trunc;
+ length -= 3;
+
+ /*
+ * Check if we can read the TLV data.
+ */
+ if (tlen < length)
+ goto trunc;
+
+ switch (type) {
+
+ case BGP_AIGP_TLV:
+ if (length < 8)
+ goto trunc;
+ ND_PRINT(", metric %" PRIu64,
+ GET_BE_U_8(tptr));
+ break;
+
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ print_unknown_data(ndo, tptr,"\n\t ", length);
+ }
+ }
+
+ tptr += length;
+ tlen -= length;
+ }
+ break;
+ }
+ case BGPTYPE_ATTR_SET:
+ ND_TCHECK_4(tptr);
+ if (len < 4)
+ goto trunc;
+ ND_PRINT("\n\t Origin AS: %s",
+ as_printf(ndo, astostr, sizeof(astostr), GET_BE_U_4(tptr)));
+ tptr += 4;
+ len -= 4;
+
+ while (len) {
+ u_int aflags, alenlen, alen;
+
+ ND_TCHECK_2(tptr);
+ if (len < 2) {
+ ND_PRINT(" [path attr too short]");
+ tptr += len;
+ break;
+ }
+ aflags = GET_U_1(tptr);
+ atype = GET_U_1(tptr + 1);
+ tptr += 2;
+ len -= 2;
+ alenlen = bgp_attr_lenlen(aflags, tptr);
+ ND_TCHECK_LEN(tptr, alenlen);
+ if (len < alenlen) {
+ ND_PRINT(" [path attr too short]");
+ tptr += len;
+ break;
+ }
+ alen = bgp_attr_len(aflags, tptr);
+ tptr += alenlen;
+ len -= alenlen;
+
+ ND_PRINT("\n\t %s (%u), length: %u",
+ tok2str(bgp_attr_values,
+ "Unknown Attribute", atype),
+ atype,
+ alen);
+
+ if (aflags) {
+ ND_PRINT(", Flags [%s%s%s%s",
+ aflags & 0x80 ? "O" : "",
+ aflags & 0x40 ? "T" : "",
+ aflags & 0x20 ? "P" : "",
+ aflags & 0x10 ? "E" : "");
+ if (aflags & 0xf)
+ ND_PRINT("+%x", aflags & 0xf);
+ ND_PRINT("]");
+ }
+ ND_PRINT(": ");
+ if (len < alen) {
+ ND_PRINT(" [path attr too short]");
+ tptr += len;
+ break;
+ }
+ /*
+ * The protocol encoding per se allows ATTR_SET to be nested
+ * as many times as the message can accommodate. This printer
+ * used to be able to recurse into ATTR_SET contents until the
+ * stack exhaustion, but now there is a limit on that (if live
+ * protocol exchange goes that many levels deep, something is
+ * probably wrong anyway). Feel free to refine this value if
+ * you can find the spec with respective normative text.
+ */
+ if (attr_set_level == 10)
+ ND_PRINT("(too many nested levels, not recursing)");
+ else if (!bgp_attr_print(ndo, atype, tptr, alen, attr_set_level + 1))
+ return 0;
+ tptr += alen;
+ len -= alen;
+ }
+ break;
+
+ case BGPTYPE_LARGE_COMMUNITY:
+ if (len == 0 || len % 12) {
+ ND_PRINT("invalid len");
+ break;
+ }
+ ND_PRINT("\n\t ");
+ while (len != 0) {
+ ND_PRINT("%u:%u:%u%s",
+ GET_BE_U_4(tptr),
+ GET_BE_U_4(tptr + 4),
+ GET_BE_U_4(tptr + 8),
+ (len > 12) ? ", " : "");
+ tptr += 12;
+ /*
+ * len will always be a multiple of 12, as per the above,
+ * so this will never underflow.
+ */
+ len -= 12;
+ }
+ break;
+ default:
+ ND_TCHECK_LEN(pptr, len);
+ ND_PRINT("\n\t no Attribute %u decoder", atype); /* we have no decoder for the attribute */
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, pptr, "\n\t ", len);
+ break;
+ }
+done:
+ if (ndo->ndo_vflag > 1 && len) { /* omit zero length attributes*/
+ ND_TCHECK_LEN(pptr, len);
+ print_unknown_data(ndo, pptr, "\n\t ", len);
+ }
+ return 1;
+
+trunc:
+ return 0;
+}
+
+static void
+bgp_capabilities_print(netdissect_options *ndo,
+ const u_char *opt, u_int caps_len)
+{
+ /* allocate space for the largest possible string */
+ char astostr[AS_STR_SIZE];
+ u_int cap_type, cap_len, tcap_len, cap_offset;
+ u_int i = 0;
+
+ while (i < caps_len) {
+ ND_TCHECK_LEN(opt + i, BGP_CAP_HEADER_SIZE);
+ cap_type=GET_U_1(opt + i);
+ cap_len=GET_U_1(opt + i + 1);
+ ND_PRINT("\n\t %s (%u), length: %u",
+ tok2str(bgp_capcode_values, "Unknown", cap_type),
+ cap_type,
+ cap_len);
+ ND_TCHECK_LEN(opt + 2 + i, cap_len);
+ switch (cap_type) {
+ case BGP_CAPCODE_MP:
+ /* AFI (16 bits), Reserved (8 bits), SAFI (8 bits) */
+ if (cap_len < 4) {
+ ND_PRINT(" (too short, < 4)");
+ return;
+ }
+ ND_PRINT("\n\t\tAFI %s (%u), SAFI %s (%u)",
+ tok2str(af_values, "Unknown", GET_BE_U_2(opt + i + 2)),
+ GET_BE_U_2(opt + i + 2),
+ tok2str(bgp_safi_values, "Unknown", GET_U_1(opt + i + 5)),
+ GET_U_1(opt + i + 5));
+ break;
+ case BGP_CAPCODE_ML:
+ cap_offset = 2;
+ tcap_len = cap_len;
+ while (tcap_len >= 4) {
+ ND_PRINT( "\n\t\tAFI %s (%u), SAFI %s (%u), Count: %u",
+ tok2str(af_values, "Unknown",
+ GET_BE_U_2(opt + i + cap_offset)),
+ GET_BE_U_2(opt + i + cap_offset),
+ tok2str(bgp_safi_values, "Unknown",
+ GET_U_1(opt + i + cap_offset + 2)),
+ GET_U_1(opt + i + cap_offset + 2),
+ GET_U_1(opt + i + cap_offset + 3));
+ tcap_len -= 4;
+ cap_offset += 4;
+ }
+ break;
+ case BGP_CAPCODE_RESTART:
+ /* Restart Flags (4 bits), Restart Time in seconds (12 bits) */
+ if (cap_len < 2) {
+ ND_PRINT(" (too short, < 2)");
+ return;
+ }
+ tcap_len=cap_len;
+ ND_PRINT("\n\t\tRestart Flags: [%s], Restart Time %us",
+ ((GET_U_1(opt + i + 2))&0x80) ? "R" : "none",
+ GET_BE_U_2(opt + i + 2)&0xfff);
+ tcap_len-=2;
+ cap_offset=4;
+ while(tcap_len>=4) {
+ ND_PRINT("\n\t\t AFI %s (%u), SAFI %s (%u), Forwarding state preserved: %s",
+ tok2str(af_values,"Unknown",
+ GET_BE_U_2(opt + i + cap_offset)),
+ GET_BE_U_2(opt + i + cap_offset),
+ tok2str(bgp_safi_values,"Unknown",
+ GET_U_1(opt + i + cap_offset + 2)),
+ GET_U_1(opt + (i + cap_offset + 2)),
+ ((GET_U_1(opt + (i + cap_offset + 3)))&0x80) ? "yes" : "no" );
+ tcap_len -= 4;
+ cap_offset += 4;
+ }
+ break;
+ case BGP_CAPCODE_RR:
+ case BGP_CAPCODE_LLGR:
+ case BGP_CAPCODE_RR_CISCO:
+ break;
+ case BGP_CAPCODE_AS_NEW:
+ /*
+ * Extract the 4 byte AS number encoded.
+ */
+ if (cap_len < 4) {
+ ND_PRINT(" (too short, < 4)");
+ return;
+ }
+ ND_PRINT("\n\t\t 4 Byte AS %s",
+ as_printf(ndo, astostr, sizeof(astostr),
+ GET_BE_U_4(opt + i + 2)));
+ break;
+ case BGP_CAPCODE_ADD_PATH:
+ if (cap_len == 0) {
+ ND_PRINT(" (bogus)"); /* length */
+ break;
+ }
+ tcap_len=cap_len;
+ cap_offset=2;
+ while (tcap_len != 0) {
+ if (tcap_len < 4) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ ND_PRINT("\n\t\tAFI %s (%u), SAFI %s (%u), Send/Receive: %s",
+ tok2str(af_values,"Unknown",GET_BE_U_2(opt + i + cap_offset)),
+ GET_BE_U_2(opt + i + cap_offset),
+ tok2str(bgp_safi_values,"Unknown",GET_U_1(opt + i + cap_offset + 2)),
+ GET_U_1(opt + (i + cap_offset + 2)),
+ tok2str(bgp_add_path_recvsend,"Bogus (0x%02x)",GET_U_1(opt + i + cap_offset + 3))
+ );
+ tcap_len -= 4;
+ cap_offset += 4;
+ }
+ break;
+ default:
+ ND_PRINT("\n\t\tno decoder for Capability %u",
+ cap_type);
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, opt + i + 2, "\n\t\t",
+ cap_len);
+ break;
+ }
+ if (ndo->ndo_vflag > 1 && cap_len != 0) {
+ print_unknown_data(ndo, opt + i + 2, "\n\t\t", cap_len);
+ }
+ i += BGP_CAP_HEADER_SIZE + cap_len;
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+bgp_open_print(netdissect_options *ndo,
+ const u_char *dat, u_int length)
+{
+ /* allocate space for the largest possible string */
+ char astostr[AS_STR_SIZE];
+ const struct bgp_open *bgp_open_header;
+ u_int optslen;
+ const struct bgp_opt *bgpopt;
+ const u_char *opt;
+ u_int i;
+
+ ND_TCHECK_LEN(dat, BGP_OPEN_SIZE);
+ if (length < BGP_OPEN_SIZE)
+ goto trunc;
+
+ bgp_open_header = (const struct bgp_open *)dat;
+
+ ND_PRINT("\n\t Version %u, ",
+ GET_U_1(bgp_open_header->bgpo_version));
+ ND_PRINT("my AS %s, ",
+ as_printf(ndo, astostr, sizeof(astostr), GET_BE_U_2(bgp_open_header->bgpo_myas)));
+ ND_PRINT("Holdtime %us, ",
+ GET_BE_U_2(bgp_open_header->bgpo_holdtime));
+ ND_PRINT("ID %s", GET_IPADDR_STRING(bgp_open_header->bgpo_id));
+ optslen = GET_U_1(bgp_open_header->bgpo_optlen);
+ ND_PRINT("\n\t Optional parameters, length: %u", optslen);
+
+ opt = dat + BGP_OPEN_SIZE;
+ length -= BGP_OPEN_SIZE;
+
+ i = 0;
+ while (i < optslen) {
+ uint8_t opt_type, opt_len;
+
+ ND_TCHECK_LEN(opt + i, BGP_OPT_SIZE);
+ if (length < BGP_OPT_SIZE + i)
+ goto trunc;
+ bgpopt = (const struct bgp_opt *)(opt + i);
+ opt_type = GET_U_1(bgpopt->bgpopt_type);
+ opt_len = GET_U_1(bgpopt->bgpopt_len);
+ if (BGP_OPT_SIZE + i + opt_len > optslen) {
+ ND_PRINT("\n\t Option %u, length: %u, goes past the end of the options",
+ opt_type, opt_len);
+ break;
+ }
+
+ ND_PRINT("\n\t Option %s (%u), length: %u",
+ tok2str(bgp_opt_values,"Unknown",opt_type),
+ opt_type,
+ opt_len);
+
+ /* now let's decode the options we know*/
+ switch(opt_type) {
+
+ case BGP_OPT_CAP:
+ bgp_capabilities_print(ndo, opt + BGP_OPT_SIZE + i,
+ opt_len);
+ break;
+
+ case BGP_OPT_AUTH:
+ default:
+ ND_PRINT("\n\t no decoder for option %u",
+ opt_type);
+ break;
+ }
+ i += BGP_OPT_SIZE + opt_len;
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+bgp_update_print(netdissect_options *ndo,
+ const u_char *dat, u_int length)
+{
+ const u_char *p;
+ u_int withdrawn_routes_len;
+ char buf[MAXHOSTNAMELEN + 100];
+ int wpfx;
+ u_int len;
+ int i;
+ int add_path;
+ u_int path_id = 0;
+
+ ND_TCHECK_LEN(dat, BGP_SIZE);
+ if (length < BGP_SIZE)
+ goto trunc;
+ p = dat + BGP_SIZE;
+ length -= BGP_SIZE;
+
+ /* Unfeasible routes */
+ ND_TCHECK_2(p);
+ if (length < 2)
+ goto trunc;
+ withdrawn_routes_len = GET_BE_U_2(p);
+ p += 2;
+ length -= 2;
+ if (withdrawn_routes_len > 1) {
+ /*
+ * Without keeping state from the original NLRI message,
+ * it's not possible to tell if this a v4 or v6 route,
+ * so only try to decode it if we're not v6 enabled.
+ */
+ ND_TCHECK_LEN(p, withdrawn_routes_len);
+ if (length < withdrawn_routes_len)
+ goto trunc;
+ ND_PRINT("\n\t Withdrawn routes:");
+ add_path = check_add_path(ndo, p, withdrawn_routes_len, 32);
+ while (withdrawn_routes_len != 0) {
+ if (add_path) {
+ if (withdrawn_routes_len < 4) {
+ p += withdrawn_routes_len;
+ length -= withdrawn_routes_len;
+ break;
+ }
+ path_id = GET_BE_U_4(p);
+ p += 4;
+ length -= 4;
+ withdrawn_routes_len -= 4;
+ }
+ wpfx = decode_prefix4(ndo, p, withdrawn_routes_len, buf, sizeof(buf));
+ if (wpfx == -1) {
+ ND_PRINT("\n\t (illegal prefix length)");
+ break;
+ } else if (wpfx == -2)
+ goto trunc; /* bytes left, but not enough */
+ else {
+ ND_PRINT("\n\t %s", buf);
+ if (add_path) {
+ ND_PRINT(" Path Id: %u", path_id);
+ }
+ p += wpfx;
+ length -= wpfx;
+ withdrawn_routes_len -= wpfx;
+ }
+ }
+ } else {
+ ND_TCHECK_LEN(p, withdrawn_routes_len);
+ if (length < withdrawn_routes_len)
+ goto trunc;
+ p += withdrawn_routes_len;
+ length -= withdrawn_routes_len;
+ }
+
+ ND_TCHECK_2(p);
+ if (length < 2)
+ goto trunc;
+ len = GET_BE_U_2(p);
+ p += 2;
+ length -= 2;
+
+ if (withdrawn_routes_len == 0 && len == 0 && length == 0) {
+ /* No withdrawn routes, no path attributes, no NLRI */
+ ND_PRINT("\n\t End-of-Rib Marker (empty NLRI)");
+ return;
+ }
+
+ if (len) {
+ /* Make sure the path attributes don't go past the end of the packet */
+ if (length < len)
+ goto trunc;
+ /* do something more useful!*/
+ while (len) {
+ uint8_t aflags, atype, alenlen;
+ uint16_t alen;
+
+ ND_TCHECK_2(p);
+ if (length < 2)
+ goto trunc;
+ if (len < 2) {
+ ND_PRINT("\n\t [path attrs too short]");
+ p += len;
+ length -= len;
+ break;
+ }
+ aflags = GET_U_1(p);
+ atype = GET_U_1(p + 1);
+ p += 2;
+ len -= 2;
+ length -= 2;
+ alenlen = bgp_attr_lenlen(aflags, p);
+ ND_TCHECK_LEN(p, alenlen);
+ if (length < alenlen)
+ goto trunc;
+ if (len < alenlen) {
+ ND_PRINT("\n\t [path attrs too short]");
+ p += len;
+ length -= len;
+ break;
+ }
+ alen = bgp_attr_len(aflags, p);
+ p += alenlen;
+ len -= alenlen;
+ length -= alenlen;
+
+ ND_PRINT("\n\t %s (%u), length: %u",
+ tok2str(bgp_attr_values, "Unknown Attribute", atype),
+ atype,
+ alen);
+
+ if (aflags) {
+ ND_PRINT(", Flags [%s%s%s%s",
+ aflags & 0x80 ? "O" : "",
+ aflags & 0x40 ? "T" : "",
+ aflags & 0x20 ? "P" : "",
+ aflags & 0x10 ? "E" : "");
+ if (aflags & 0xf)
+ ND_PRINT("+%x", aflags & 0xf);
+ ND_PRINT("]: ");
+ }
+ if (len < alen) {
+ ND_PRINT(" [path attrs too short]");
+ p += len;
+ length -= len;
+ break;
+ }
+ if (length < alen)
+ goto trunc;
+ if (!bgp_attr_print(ndo, atype, p, alen, 0))
+ goto trunc;
+ p += alen;
+ len -= alen;
+ length -= alen;
+ }
+ }
+
+ if (length) {
+ add_path = check_add_path(ndo, p, length, 32);
+ ND_PRINT("\n\t Updated routes:");
+ while (length != 0) {
+ if (add_path) {
+ ND_TCHECK_4(p);
+ if (length < 4)
+ goto trunc;
+ path_id = GET_BE_U_4(p);
+ p += 4;
+ length -= 4;
+ }
+ i = decode_prefix4(ndo, p, length, buf, sizeof(buf));
+ if (i == -1) {
+ ND_PRINT("\n\t (illegal prefix length)");
+ break;
+ } else if (i == -2)
+ goto trunc; /* bytes left, but not enough */
+ else {
+ ND_PRINT("\n\t %s", buf);
+ if (add_path) {
+ ND_PRINT(" Path Id: %u", path_id);
+ }
+ p += i;
+ length -= i;
+ }
+ }
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+bgp_notification_print(netdissect_options *ndo,
+ const u_char *dat, u_int length)
+{
+ const struct bgp_notification *bgp_notification_header;
+ const u_char *tptr;
+ uint8_t bgpn_major, bgpn_minor;
+
+ ND_TCHECK_LEN(dat, BGP_NOTIFICATION_SIZE);
+ if (length<BGP_NOTIFICATION_SIZE)
+ return;
+
+ bgp_notification_header = (const struct bgp_notification *)dat;
+ bgpn_major = GET_U_1(bgp_notification_header->bgpn_major);
+ bgpn_minor = GET_U_1(bgp_notification_header->bgpn_minor);
+
+ ND_PRINT(", %s (%u)",
+ tok2str(bgp_notify_major_values, "Unknown Error",
+ bgpn_major),
+ bgpn_major);
+
+ switch (bgpn_major) {
+
+ case BGP_NOTIFY_MAJOR_MSG:
+ ND_PRINT(", subcode %s (%u)",
+ tok2str(bgp_notify_minor_msg_values, "Unknown",
+ bgpn_minor),
+ bgpn_minor);
+ break;
+ case BGP_NOTIFY_MAJOR_OPEN:
+ ND_PRINT(", subcode %s (%u)",
+ tok2str(bgp_notify_minor_open_values, "Unknown",
+ bgpn_minor),
+ bgpn_minor);
+ break;
+ case BGP_NOTIFY_MAJOR_UPDATE:
+ ND_PRINT(", subcode %s (%u)",
+ tok2str(bgp_notify_minor_update_values, "Unknown",
+ bgpn_minor),
+ bgpn_minor);
+ break;
+ case BGP_NOTIFY_MAJOR_FSM:
+ ND_PRINT(" subcode %s (%u)",
+ tok2str(bgp_notify_minor_fsm_values, "Unknown",
+ bgpn_minor),
+ bgpn_minor);
+ break;
+ case BGP_NOTIFY_MAJOR_CAP:
+ ND_PRINT(" subcode %s (%u)",
+ tok2str(bgp_notify_minor_cap_values, "Unknown",
+ bgpn_minor),
+ bgpn_minor);
+ break;
+ case BGP_NOTIFY_MAJOR_CEASE:
+ ND_PRINT(", subcode %s (%u)",
+ tok2str(bgp_notify_minor_cease_values, "Unknown",
+ bgpn_minor),
+ bgpn_minor);
+
+ /* RFC 4486 mentions optionally 7 bytes
+ * for the maxprefix subtype, which may contain AFI, SAFI and MAXPREFIXES
+ */
+ if(bgpn_minor == BGP_NOTIFY_MINOR_CEASE_MAXPRFX && length >= BGP_NOTIFICATION_SIZE + 7) {
+ tptr = dat + BGP_NOTIFICATION_SIZE;
+ ND_PRINT(", AFI %s (%u), SAFI %s (%u), Max Prefixes: %u",
+ tok2str(af_values, "Unknown", GET_BE_U_2(tptr)),
+ GET_BE_U_2(tptr),
+ tok2str(bgp_safi_values, "Unknown", GET_U_1((tptr + 2))),
+ GET_U_1((tptr + 2)),
+ GET_BE_U_4(tptr + 3));
+ }
+ /*
+ * RFC 9003 describes a method to send a communication
+ * intended for human consumption regarding the Administrative Shutdown
+ */
+ if ((bgpn_minor == BGP_NOTIFY_MINOR_CEASE_SHUT ||
+ bgpn_minor == BGP_NOTIFY_MINOR_CEASE_RESET) &&
+ length >= BGP_NOTIFICATION_SIZE + 1) {
+ tptr = dat + BGP_NOTIFICATION_SIZE;
+ uint8_t shutdown_comm_length = GET_U_1(tptr);
+ uint8_t remainder_offset = 0;
+ /* garbage, hexdump it all */
+ if (shutdown_comm_length > length - (BGP_NOTIFICATION_SIZE + 1)) {
+ ND_PRINT(", invalid Shutdown Communication length");
+ }
+ else if (shutdown_comm_length == 0) {
+ ND_PRINT(", empty Shutdown Communication");
+ remainder_offset += 1;
+ }
+ /* a proper shutdown communication */
+ else {
+ ND_PRINT(", Shutdown Communication (length: %u): \"", shutdown_comm_length);
+ (void)nd_printn(ndo, tptr+1, shutdown_comm_length, NULL);
+ ND_PRINT("\"");
+ remainder_offset += shutdown_comm_length + 1;
+ }
+ /* if there is trailing data, hexdump it */
+ if(length - (remainder_offset + BGP_NOTIFICATION_SIZE) > 0) {
+ ND_PRINT(", Data: (length: %u)", length - (remainder_offset + BGP_NOTIFICATION_SIZE));
+ hex_print(ndo, "\n\t\t", tptr + remainder_offset, length - (remainder_offset + BGP_NOTIFICATION_SIZE));
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+bgp_route_refresh_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len)
+{
+ const struct bgp_route_refresh *bgp_route_refresh_header;
+
+ ND_TCHECK_LEN(pptr, BGP_ROUTE_REFRESH_SIZE);
+
+ /* some little sanity checking */
+ if (len<BGP_ROUTE_REFRESH_SIZE)
+ return;
+
+ bgp_route_refresh_header = (const struct bgp_route_refresh *)pptr;
+
+ ND_PRINT("\n\t AFI %s (%u), SAFI %s (%u)",
+ tok2str(af_values,"Unknown",
+ GET_BE_U_2(bgp_route_refresh_header->afi)),
+ GET_BE_U_2(bgp_route_refresh_header->afi),
+ tok2str(bgp_safi_values,"Unknown",
+ GET_U_1(bgp_route_refresh_header->safi)),
+ GET_U_1(bgp_route_refresh_header->safi));
+
+ if (ndo->ndo_vflag > 1) {
+ ND_TCHECK_LEN(pptr, len);
+ print_unknown_data(ndo, pptr, "\n\t ", len);
+ }
+
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static int
+bgp_pdu_print(netdissect_options *ndo,
+ const u_char *dat, u_int length)
+{
+ const struct bgp *bgp_header;
+ uint8_t bgp_type;
+
+ ND_TCHECK_LEN(dat, BGP_SIZE);
+ bgp_header = (const struct bgp *)dat;
+ bgp_type = GET_U_1(bgp_header->bgp_type);
+
+ ND_PRINT("\n\t%s Message (%u), length: %u",
+ tok2str(bgp_msg_values, "Unknown", bgp_type),
+ bgp_type,
+ length);
+
+ switch (bgp_type) {
+ case BGP_OPEN:
+ bgp_open_print(ndo, dat, length);
+ break;
+ case BGP_UPDATE:
+ bgp_update_print(ndo, dat, length);
+ break;
+ case BGP_NOTIFICATION:
+ bgp_notification_print(ndo, dat, length);
+ break;
+ case BGP_KEEPALIVE:
+ break;
+ case BGP_ROUTE_REFRESH:
+ bgp_route_refresh_print(ndo, dat, length);
+ break;
+ default:
+ /* we have no decoder for the BGP message */
+ ND_TCHECK_LEN(dat, length);
+ ND_PRINT("\n\t no Message %u decoder", bgp_type);
+ print_unknown_data(ndo, dat, "\n\t ", length);
+ break;
+ }
+ return 1;
+trunc:
+ nd_print_trunc(ndo);
+ return 0;
+}
+
+void
+bgp_print(netdissect_options *ndo,
+ const u_char *dat, u_int length _U_)
+{
+ const u_char *p;
+ const u_char *ep = ndo->ndo_snapend;
+ const u_char *start;
+ const u_char marker[] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ };
+ const struct bgp *bgp_header;
+ uint16_t hlen;
+
+ ndo->ndo_protocol = "bgp";
+ ND_PRINT(": BGP");
+
+ if (ndo->ndo_vflag < 1) /* lets be less chatty */
+ return;
+
+ p = dat;
+ start = p;
+ while (p < ep) {
+ if (!ND_TTEST_1(p))
+ break;
+ if (GET_U_1(p) != 0xff) {
+ p++;
+ continue;
+ }
+
+ if (!ND_TTEST_LEN(p, sizeof(marker)))
+ break;
+ if (memcmp(p, marker, sizeof(marker)) != 0) {
+ p++;
+ continue;
+ }
+
+ /* found BGP header */
+ ND_TCHECK_LEN(p, BGP_SIZE);
+ bgp_header = (const struct bgp *)p;
+
+ if (start != p)
+ nd_print_trunc(ndo);
+
+ hlen = GET_BE_U_2(bgp_header->bgp_len);
+ if (hlen < BGP_SIZE) {
+ ND_PRINT("\nmessage length %u < %u", hlen, BGP_SIZE);
+ nd_print_invalid(ndo);
+ break;
+ }
+
+ if (ND_TTEST_LEN(p, hlen)) {
+ if (!bgp_pdu_print(ndo, p, hlen))
+ return;
+ p += hlen;
+ start = p;
+ } else {
+ ND_PRINT("\n[|BGP %s]",
+ tok2str(bgp_msg_values,
+ "Unknown Message Type",
+ GET_U_1(bgp_header->bgp_type)));
+ break;
+ }
+ }
+
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-bootp.c b/print-bootp.c
new file mode 100644
index 0000000..d230a24
--- /dev/null
+++ b/print-bootp.c
@@ -0,0 +1,1074 @@
+/*
+ * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: BOOTP and IPv4 DHCP printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+
+/*
+ * Bootstrap Protocol (BOOTP). RFC951 and RFC1048.
+ *
+ * This file specifies the "implementation-independent" BOOTP protocol
+ * information which is common to both client and server.
+ *
+ * Copyright 1988 by Carnegie Mellon.
+ *
+ * Permission to use, copy, modify, and distribute this program for any
+ * purpose and without fee is hereby granted, provided that this copyright
+ * and permission notice appear on all copies and supporting documentation,
+ * the name of Carnegie Mellon not be used in advertising or publicity
+ * pertaining to distribution of the program without specific prior
+ * permission, and notice be given in supporting documentation that copying
+ * and distribution is by permission of Carnegie Mellon and Stanford
+ * University. Carnegie Mellon makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ */
+
+struct bootp {
+ nd_uint8_t bp_op; /* packet opcode type */
+ nd_uint8_t bp_htype; /* hardware addr type */
+ nd_uint8_t bp_hlen; /* hardware addr length */
+ nd_uint8_t bp_hops; /* gateway hops */
+ nd_uint32_t bp_xid; /* transaction ID */
+ nd_uint16_t bp_secs; /* seconds since boot began */
+ nd_uint16_t bp_flags; /* flags - see bootp_flag_values[]
+ in print-bootp.c */
+ nd_ipv4 bp_ciaddr; /* client IP address */
+ nd_ipv4 bp_yiaddr; /* 'your' IP address */
+ nd_ipv4 bp_siaddr; /* server IP address */
+ nd_ipv4 bp_giaddr; /* gateway IP address */
+ nd_byte bp_chaddr[16]; /* client hardware address */
+ nd_byte bp_sname[64]; /* server host name */
+ nd_byte bp_file[128]; /* boot file name */
+ nd_byte bp_vend[64]; /* vendor-specific area */
+};
+
+#define BOOTPREPLY 2
+#define BOOTPREQUEST 1
+
+/*
+ * Vendor magic cookie (v_magic) for CMU
+ */
+#define VM_CMU "CMU"
+
+/*
+ * Vendor magic cookie (v_magic) for RFC1048
+ */
+#define VM_RFC1048 { 99, 130, 83, 99 }
+
+/*
+ * RFC1048 tag values used to specify what information is being supplied in
+ * the vendor field of the packet.
+ */
+
+#define TAG_PAD ((uint8_t) 0)
+#define TAG_SUBNET_MASK ((uint8_t) 1)
+#define TAG_TIME_OFFSET ((uint8_t) 2)
+#define TAG_GATEWAY ((uint8_t) 3)
+#define TAG_TIME_SERVER ((uint8_t) 4)
+#define TAG_NAME_SERVER ((uint8_t) 5)
+#define TAG_DOMAIN_SERVER ((uint8_t) 6)
+#define TAG_LOG_SERVER ((uint8_t) 7)
+#define TAG_COOKIE_SERVER ((uint8_t) 8)
+#define TAG_LPR_SERVER ((uint8_t) 9)
+#define TAG_IMPRESS_SERVER ((uint8_t) 10)
+#define TAG_RLP_SERVER ((uint8_t) 11)
+#define TAG_HOSTNAME ((uint8_t) 12)
+#define TAG_BOOTSIZE ((uint8_t) 13)
+#define TAG_END ((uint8_t) 255)
+/* RFC1497 tags */
+#define TAG_DUMPPATH ((uint8_t) 14)
+#define TAG_DOMAINNAME ((uint8_t) 15)
+#define TAG_SWAP_SERVER ((uint8_t) 16)
+#define TAG_ROOTPATH ((uint8_t) 17)
+#define TAG_EXTPATH ((uint8_t) 18)
+/* RFC2132 */
+#define TAG_IP_FORWARD ((uint8_t) 19)
+#define TAG_NL_SRCRT ((uint8_t) 20)
+#define TAG_PFILTERS ((uint8_t) 21)
+#define TAG_REASS_SIZE ((uint8_t) 22)
+#define TAG_DEF_TTL ((uint8_t) 23)
+#define TAG_MTU_TIMEOUT ((uint8_t) 24)
+#define TAG_MTU_TABLE ((uint8_t) 25)
+#define TAG_INT_MTU ((uint8_t) 26)
+#define TAG_LOCAL_SUBNETS ((uint8_t) 27)
+#define TAG_BROAD_ADDR ((uint8_t) 28)
+#define TAG_DO_MASK_DISC ((uint8_t) 29)
+#define TAG_SUPPLY_MASK ((uint8_t) 30)
+#define TAG_DO_RDISC ((uint8_t) 31)
+#define TAG_RTR_SOL_ADDR ((uint8_t) 32)
+#define TAG_STATIC_ROUTE ((uint8_t) 33)
+#define TAG_USE_TRAILERS ((uint8_t) 34)
+#define TAG_ARP_TIMEOUT ((uint8_t) 35)
+#define TAG_ETH_ENCAP ((uint8_t) 36)
+#define TAG_TCP_TTL ((uint8_t) 37)
+#define TAG_TCP_KEEPALIVE ((uint8_t) 38)
+#define TAG_KEEPALIVE_GO ((uint8_t) 39)
+#define TAG_NIS_DOMAIN ((uint8_t) 40)
+#define TAG_NIS_SERVERS ((uint8_t) 41)
+#define TAG_NTP_SERVERS ((uint8_t) 42)
+#define TAG_VENDOR_OPTS ((uint8_t) 43)
+#define TAG_NETBIOS_NS ((uint8_t) 44)
+#define TAG_NETBIOS_DDS ((uint8_t) 45)
+#define TAG_NETBIOS_NODE ((uint8_t) 46)
+#define TAG_NETBIOS_SCOPE ((uint8_t) 47)
+#define TAG_XWIN_FS ((uint8_t) 48)
+#define TAG_XWIN_DM ((uint8_t) 49)
+#define TAG_NIS_P_DOMAIN ((uint8_t) 64)
+#define TAG_NIS_P_SERVERS ((uint8_t) 65)
+#define TAG_MOBILE_HOME ((uint8_t) 68)
+#define TAG_SMPT_SERVER ((uint8_t) 69)
+#define TAG_POP3_SERVER ((uint8_t) 70)
+#define TAG_NNTP_SERVER ((uint8_t) 71)
+#define TAG_WWW_SERVER ((uint8_t) 72)
+#define TAG_FINGER_SERVER ((uint8_t) 73)
+#define TAG_IRC_SERVER ((uint8_t) 74)
+#define TAG_STREETTALK_SRVR ((uint8_t) 75)
+#define TAG_STREETTALK_STDA ((uint8_t) 76)
+/* DHCP options */
+#define TAG_REQUESTED_IP ((uint8_t) 50)
+#define TAG_IP_LEASE ((uint8_t) 51)
+#define TAG_OPT_OVERLOAD ((uint8_t) 52)
+#define TAG_TFTP_SERVER ((uint8_t) 66)
+#define TAG_BOOTFILENAME ((uint8_t) 67)
+#define TAG_DHCP_MESSAGE ((uint8_t) 53)
+#define TAG_SERVER_ID ((uint8_t) 54)
+#define TAG_PARM_REQUEST ((uint8_t) 55)
+#define TAG_MESSAGE ((uint8_t) 56)
+#define TAG_MAX_MSG_SIZE ((uint8_t) 57)
+#define TAG_RENEWAL_TIME ((uint8_t) 58)
+#define TAG_REBIND_TIME ((uint8_t) 59)
+#define TAG_VENDOR_CLASS ((uint8_t) 60)
+#define TAG_CLIENT_ID ((uint8_t) 61)
+/* RFC 2241 */
+#define TAG_NDS_SERVERS ((uint8_t) 85)
+#define TAG_NDS_TREE_NAME ((uint8_t) 86)
+#define TAG_NDS_CONTEXT ((uint8_t) 87)
+/* RFC 2242 */
+#define TAG_NDS_IPDOMAIN ((uint8_t) 62)
+#define TAG_NDS_IPINFO ((uint8_t) 63)
+/* RFC 2485 */
+#define TAG_OPEN_GROUP_UAP ((uint8_t) 98)
+/* RFC 2563 */
+#define TAG_DISABLE_AUTOCONF ((uint8_t) 116)
+/* RFC 2610 */
+#define TAG_SLP_DA ((uint8_t) 78)
+#define TAG_SLP_SCOPE ((uint8_t) 79)
+/* RFC 2937 */
+#define TAG_NS_SEARCH ((uint8_t) 117)
+/* RFC 3004 - The User Class Option for DHCP */
+#define TAG_USER_CLASS ((uint8_t) 77)
+/* RFC 3011 */
+#define TAG_IP4_SUBNET_SELECT ((uint8_t) 118)
+/* RFC 3442 */
+#define TAG_CLASSLESS_STATIC_RT ((uint8_t) 121)
+#define TAG_CLASSLESS_STA_RT_MS ((uint8_t) 249)
+/* RFC 5859 - TFTP Server Address Option for DHCPv4 */
+#define TAG_TFTP_SERVER_ADDRESS ((uint8_t) 150)
+/* https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml */
+#define TAG_SLP_NAMING_AUTH ((uint8_t) 80)
+#define TAG_CLIENT_FQDN ((uint8_t) 81)
+#define TAG_AGENT_CIRCUIT ((uint8_t) 82)
+#define TAG_AGENT_REMOTE ((uint8_t) 83)
+#define TAG_TZ_STRING ((uint8_t) 88)
+#define TAG_FQDN_OPTION ((uint8_t) 89)
+#define TAG_AUTH ((uint8_t) 90)
+#define TAG_CLIENT_LAST_TRANSACTION_TIME ((uint8_t) 91)
+#define TAG_ASSOCIATED_IP ((uint8_t) 92)
+#define TAG_CLIENT_ARCH ((uint8_t) 93)
+#define TAG_CLIENT_NDI ((uint8_t) 94)
+#define TAG_CLIENT_GUID ((uint8_t) 97)
+#define TAG_LDAP_URL ((uint8_t) 95)
+/* RFC 4833, TZ codes */
+#define TAG_TZ_PCODE ((uint8_t) 100)
+#define TAG_TZ_TCODE ((uint8_t) 101)
+#define TAG_NETINFO_PARENT ((uint8_t) 112)
+#define TAG_NETINFO_PARENT_TAG ((uint8_t) 113)
+#define TAG_URL ((uint8_t) 114)
+#define TAG_MUDURL ((uint8_t) 161)
+
+/* DHCP Message types (values for TAG_DHCP_MESSAGE option) */
+#define DHCPDISCOVER 1
+#define DHCPOFFER 2
+#define DHCPREQUEST 3
+#define DHCPDECLINE 4
+#define DHCPACK 5
+#define DHCPNAK 6
+#define DHCPRELEASE 7
+#define DHCPINFORM 8
+/* Defined in RFC4388 */
+#define DHCPLEASEQUERY 10
+#define DHCPLEASEUNASSIGNED 11
+#define DHCPLEASEUNKNOWN 12
+#define DHCPLEASEACTIVE 13
+
+
+/*
+ * "vendor" data permitted for CMU bootp clients.
+ */
+
+struct cmu_vend {
+ nd_byte v_magic[4]; /* magic number */
+ nd_uint32_t v_flags; /* flags/opcodes, etc. */
+ nd_ipv4 v_smask; /* Subnet mask */
+ nd_ipv4 v_dgate; /* Default gateway */
+ nd_ipv4 v_dns1, v_dns2; /* Domain name servers */
+ nd_ipv4 v_ins1, v_ins2; /* IEN-116 name servers */
+ nd_ipv4 v_ts1, v_ts2; /* Time servers */
+ nd_byte v_unused[24]; /* currently unused */
+};
+
+
+/* v_flags values */
+#define VF_SMASK 1 /* Subnet mask field contains valid data */
+
+/* RFC 4702 DHCP Client FQDN Option */
+
+#define CLIENT_FQDN_FLAGS_S 0x01
+#define CLIENT_FQDN_FLAGS_O 0x02
+#define CLIENT_FQDN_FLAGS_E 0x04
+#define CLIENT_FQDN_FLAGS_N 0x08
+/* end of original bootp.h */
+
+static void rfc1048_print(netdissect_options *, const u_char *);
+static void cmu_print(netdissect_options *, const u_char *);
+static char *client_fqdn_flags(u_int flags);
+
+static const struct tok bootp_flag_values[] = {
+ { 0x8000, "Broadcast" },
+ { 0, NULL}
+};
+
+static const struct tok bootp_op_values[] = {
+ { BOOTPREQUEST, "Request" },
+ { BOOTPREPLY, "Reply" },
+ { 0, NULL}
+};
+
+/*
+ * Print bootp requests
+ */
+void
+bootp_print(netdissect_options *ndo,
+ const u_char *cp, u_int length)
+{
+ const struct bootp *bp;
+ static const u_char vm_cmu[4] = VM_CMU;
+ static const u_char vm_rfc1048[4] = VM_RFC1048;
+ uint8_t bp_op, bp_htype, bp_hlen;
+
+ ndo->ndo_protocol = "bootp";
+ bp = (const struct bootp *)cp;
+ bp_op = GET_U_1(bp->bp_op);
+ ND_PRINT("BOOTP/DHCP, %s",
+ tok2str(bootp_op_values, "unknown (0x%02x)", bp_op));
+
+ bp_htype = GET_U_1(bp->bp_htype);
+ bp_hlen = GET_U_1(bp->bp_hlen);
+ if (bp_htype == 1 && bp_hlen == MAC_ADDR_LEN && bp_op == BOOTPREQUEST) {
+ ND_PRINT(" from %s", GET_ETHERADDR_STRING(bp->bp_chaddr));
+ }
+
+ ND_PRINT(", length %u", length);
+
+ if (!ndo->ndo_vflag)
+ return;
+
+ ND_TCHECK_2(bp->bp_secs);
+
+ /* The usual hardware address type is 1 (10Mb Ethernet) */
+ if (bp_htype != 1)
+ ND_PRINT(", htype %u", bp_htype);
+
+ /* The usual length for 10Mb Ethernet address is 6 bytes */
+ if (bp_htype != 1 || bp_hlen != MAC_ADDR_LEN)
+ ND_PRINT(", hlen %u", bp_hlen);
+
+ /* Only print interesting fields */
+ if (GET_U_1(bp->bp_hops))
+ ND_PRINT(", hops %u", GET_U_1(bp->bp_hops));
+ if (GET_BE_U_4(bp->bp_xid))
+ ND_PRINT(", xid 0x%x", GET_BE_U_4(bp->bp_xid));
+ if (GET_BE_U_2(bp->bp_secs))
+ ND_PRINT(", secs %u", GET_BE_U_2(bp->bp_secs));
+
+ ND_PRINT(", Flags [%s]",
+ bittok2str(bootp_flag_values, "none", GET_BE_U_2(bp->bp_flags)));
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT(" (0x%04x)", GET_BE_U_2(bp->bp_flags));
+
+ /* Client's ip address */
+ if (GET_IPV4_TO_NETWORK_ORDER(bp->bp_ciaddr))
+ ND_PRINT("\n\t Client-IP %s", GET_IPADDR_STRING(bp->bp_ciaddr));
+
+ /* 'your' ip address (bootp client) */
+ if (GET_IPV4_TO_NETWORK_ORDER(bp->bp_yiaddr))
+ ND_PRINT("\n\t Your-IP %s", GET_IPADDR_STRING(bp->bp_yiaddr));
+
+ /* Server's ip address */
+ if (GET_IPV4_TO_NETWORK_ORDER(bp->bp_siaddr))
+ ND_PRINT("\n\t Server-IP %s", GET_IPADDR_STRING(bp->bp_siaddr));
+
+ /* Gateway's ip address */
+ if (GET_IPV4_TO_NETWORK_ORDER(bp->bp_giaddr))
+ ND_PRINT("\n\t Gateway-IP %s", GET_IPADDR_STRING(bp->bp_giaddr));
+
+ /* Client's Ethernet address */
+ if (bp_htype == 1 && bp_hlen == MAC_ADDR_LEN) {
+ ND_PRINT("\n\t Client-Ethernet-Address %s", GET_ETHERADDR_STRING(bp->bp_chaddr));
+ }
+
+ if (GET_U_1(bp->bp_sname)) { /* get first char only */
+ ND_PRINT("\n\t sname \"");
+ if (nd_printztn(ndo, bp->bp_sname, (u_int)sizeof(bp->bp_sname),
+ ndo->ndo_snapend) == 0) {
+ ND_PRINT("\"");
+ nd_print_trunc(ndo);
+ return;
+ }
+ ND_PRINT("\"");
+ }
+ if (GET_U_1(bp->bp_file)) { /* get first char only */
+ ND_PRINT("\n\t file \"");
+ if (nd_printztn(ndo, bp->bp_file, (u_int)sizeof(bp->bp_file),
+ ndo->ndo_snapend) == 0) {
+ ND_PRINT("\"");
+ nd_print_trunc(ndo);
+ return;
+ }
+ ND_PRINT("\"");
+ }
+
+ /* Decode the vendor buffer */
+ ND_TCHECK_4(bp->bp_vend);
+ if (memcmp((const char *)bp->bp_vend, vm_rfc1048,
+ sizeof(uint32_t)) == 0)
+ rfc1048_print(ndo, bp->bp_vend);
+ else if (memcmp((const char *)bp->bp_vend, vm_cmu,
+ sizeof(uint32_t)) == 0)
+ cmu_print(ndo, bp->bp_vend);
+ else {
+ uint32_t ul;
+
+ ul = GET_BE_U_4(bp->bp_vend);
+ if (ul != 0)
+ ND_PRINT("\n\t Vendor-#0x%x", ul);
+ }
+
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+/*
+ * The first character specifies the format to print:
+ * i - ip address (32 bits)
+ * p - ip address pairs (32 bits + 32 bits)
+ * l - long (32 bits)
+ * L - unsigned long (32 bits)
+ * s - short (16 bits)
+ * b - period-separated decimal bytes (variable length)
+ * x - colon-separated hex bytes (variable length)
+ * a - ASCII string (variable length)
+ * B - on/off (8 bits)
+ * $ - special (explicit code to handle)
+ */
+static const struct tok tag2str[] = {
+/* RFC1048 tags */
+ { TAG_PAD, " PAD" },
+ { TAG_SUBNET_MASK, "iSubnet-Mask" }, /* subnet mask (RFC950) */
+ { TAG_TIME_OFFSET, "LTime-Zone" }, /* seconds from UTC */
+ { TAG_GATEWAY, "iDefault-Gateway" }, /* default gateway */
+ { TAG_TIME_SERVER, "iTime-Server" }, /* time servers (RFC868) */
+ { TAG_NAME_SERVER, "iIEN-Name-Server" }, /* IEN name servers (IEN116) */
+ { TAG_DOMAIN_SERVER, "iDomain-Name-Server" }, /* domain name (RFC1035) */
+ { TAG_LOG_SERVER, "iLOG" }, /* MIT log servers */
+ { TAG_COOKIE_SERVER, "iCS" }, /* cookie servers (RFC865) */
+ { TAG_LPR_SERVER, "iLPR-Server" }, /* lpr server (RFC1179) */
+ { TAG_IMPRESS_SERVER, "iIM" }, /* impress servers (Imagen) */
+ { TAG_RLP_SERVER, "iRL" }, /* resource location (RFC887) */
+ { TAG_HOSTNAME, "aHostname" }, /* ASCII hostname */
+ { TAG_BOOTSIZE, "sBS" }, /* 512 byte blocks */
+ { TAG_END, " END" },
+/* RFC1497 tags */
+ { TAG_DUMPPATH, "aDP" },
+ { TAG_DOMAINNAME, "aDomain-Name" },
+ { TAG_SWAP_SERVER, "iSS" },
+ { TAG_ROOTPATH, "aRP" },
+ { TAG_EXTPATH, "aEP" },
+/* RFC2132 tags */
+ { TAG_IP_FORWARD, "BIPF" },
+ { TAG_NL_SRCRT, "BSRT" },
+ { TAG_PFILTERS, "pPF" },
+ { TAG_REASS_SIZE, "sRSZ" },
+ { TAG_DEF_TTL, "bTTL" },
+ { TAG_MTU_TIMEOUT, "lMTU-Timeout" },
+ { TAG_MTU_TABLE, "sMTU-Table" },
+ { TAG_INT_MTU, "sMTU" },
+ { TAG_LOCAL_SUBNETS, "BLSN" },
+ { TAG_BROAD_ADDR, "iBR" },
+ { TAG_DO_MASK_DISC, "BMD" },
+ { TAG_SUPPLY_MASK, "BMS" },
+ { TAG_DO_RDISC, "BRouter-Discovery" },
+ { TAG_RTR_SOL_ADDR, "iRSA" },
+ { TAG_STATIC_ROUTE, "pStatic-Route" },
+ { TAG_USE_TRAILERS, "BUT" },
+ { TAG_ARP_TIMEOUT, "lAT" },
+ { TAG_ETH_ENCAP, "BIE" },
+ { TAG_TCP_TTL, "bTT" },
+ { TAG_TCP_KEEPALIVE, "lKI" },
+ { TAG_KEEPALIVE_GO, "BKG" },
+ { TAG_NIS_DOMAIN, "aYD" },
+ { TAG_NIS_SERVERS, "iYS" },
+ { TAG_NTP_SERVERS, "iNTP" },
+ { TAG_VENDOR_OPTS, "bVendor-Option" },
+ { TAG_NETBIOS_NS, "iNetbios-Name-Server" },
+ { TAG_NETBIOS_DDS, "iWDD" },
+ { TAG_NETBIOS_NODE, "$Netbios-Node" },
+ { TAG_NETBIOS_SCOPE, "aNetbios-Scope" },
+ { TAG_XWIN_FS, "iXFS" },
+ { TAG_XWIN_DM, "iXDM" },
+ { TAG_NIS_P_DOMAIN, "sN+D" },
+ { TAG_NIS_P_SERVERS, "iN+S" },
+ { TAG_MOBILE_HOME, "iMH" },
+ { TAG_SMPT_SERVER, "iSMTP" },
+ { TAG_POP3_SERVER, "iPOP3" },
+ { TAG_NNTP_SERVER, "iNNTP" },
+ { TAG_WWW_SERVER, "iWWW" },
+ { TAG_FINGER_SERVER, "iFG" },
+ { TAG_IRC_SERVER, "iIRC" },
+ { TAG_STREETTALK_SRVR, "iSTS" },
+ { TAG_STREETTALK_STDA, "iSTDA" },
+ { TAG_REQUESTED_IP, "iRequested-IP" },
+ { TAG_IP_LEASE, "lLease-Time" },
+ { TAG_OPT_OVERLOAD, "$OO" },
+ { TAG_TFTP_SERVER, "aTFTP" },
+ { TAG_BOOTFILENAME, "aBF" },
+ { TAG_DHCP_MESSAGE, " DHCP-Message" },
+ { TAG_SERVER_ID, "iServer-ID" },
+ { TAG_PARM_REQUEST, "bParameter-Request" },
+ { TAG_MESSAGE, "aMSG" },
+ { TAG_MAX_MSG_SIZE, "sMSZ" },
+ { TAG_RENEWAL_TIME, "lRN" },
+ { TAG_REBIND_TIME, "lRB" },
+ { TAG_VENDOR_CLASS, "aVendor-Class" },
+ { TAG_CLIENT_ID, "$Client-ID" },
+/* RFC 2485 */
+ { TAG_OPEN_GROUP_UAP, "aUAP" },
+/* RFC 2563 */
+ { TAG_DISABLE_AUTOCONF, "BNOAUTO" },
+/* RFC 2610 */
+ { TAG_SLP_DA, "bSLP-DA" }, /*"b" is a little wrong */
+ { TAG_SLP_SCOPE, "bSLP-SCOPE" }, /*"b" is a little wrong */
+/* RFC 2937 */
+ { TAG_NS_SEARCH, "sNSSEARCH" }, /* XXX 's' */
+/* RFC 3004 - The User Class Option for DHCP */
+ { TAG_USER_CLASS, "$User-Class" },
+/* RFC 3011 */
+ { TAG_IP4_SUBNET_SELECT, "iSUBNET" },
+/* RFC 3442 */
+ { TAG_CLASSLESS_STATIC_RT, "$Classless-Static-Route" },
+ { TAG_CLASSLESS_STA_RT_MS, "$Classless-Static-Route-Microsoft" },
+/* RFC 5859 - TFTP Server Address Option for DHCPv4 */
+ { TAG_TFTP_SERVER_ADDRESS, "iTFTP-Server-Address" },
+/* https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml#options */
+ { TAG_SLP_NAMING_AUTH, "aSLP-NA" },
+ { TAG_CLIENT_FQDN, "$FQDN" },
+ { TAG_AGENT_CIRCUIT, "$Agent-Information" },
+ { TAG_AGENT_REMOTE, "bARMT" },
+ { TAG_TZ_STRING, "aTZSTR" },
+ { TAG_FQDN_OPTION, "bFQDNS" }, /* XXX 'b' */
+ { TAG_AUTH, "bAUTH" }, /* XXX 'b' */
+ { TAG_CLIENT_LAST_TRANSACTION_TIME, "LLast-Transaction-Time" },
+ { TAG_ASSOCIATED_IP, "iAssociated-IP" },
+ { TAG_CLIENT_ARCH, "sARCH" },
+ { TAG_CLIENT_NDI, "bNDI" }, /* XXX 'b' */
+ { TAG_CLIENT_GUID, "bGUID" }, /* XXX 'b' */
+ { TAG_LDAP_URL, "aLDAP" },
+ { TAG_TZ_PCODE, "aPOSIX-TZ" },
+ { TAG_TZ_TCODE, "aTZ-Name" },
+ { TAG_NETINFO_PARENT, "iNI" },
+ { TAG_NETINFO_PARENT_TAG, "aNITAG" },
+ { TAG_URL, "aURL" },
+ { TAG_MUDURL, "aMUD-URL" },
+ { 0, NULL }
+};
+
+/* DHCP "options overload" types */
+static const struct tok oo2str[] = {
+ { 1, "file" },
+ { 2, "sname" },
+ { 3, "file+sname" },
+ { 0, NULL }
+};
+
+/* NETBIOS over TCP/IP node type options */
+static const struct tok nbo2str[] = {
+ { 0x1, "b-node" },
+ { 0x2, "p-node" },
+ { 0x4, "m-node" },
+ { 0x8, "h-node" },
+ { 0, NULL }
+};
+
+/* ARP Hardware types, for Client-ID option */
+static const struct tok arp2str[] = {
+ { 0x1, "ether" },
+ { 0x6, "ieee802" },
+ { 0x7, "arcnet" },
+ { 0xf, "frelay" },
+ { 0x17, "strip" },
+ { 0x18, "ieee1394" },
+ { 0, NULL }
+};
+
+static const struct tok dhcp_msg_values[] = {
+ { DHCPDISCOVER, "Discover" },
+ { DHCPOFFER, "Offer" },
+ { DHCPREQUEST, "Request" },
+ { DHCPDECLINE, "Decline" },
+ { DHCPACK, "ACK" },
+ { DHCPNAK, "NACK" },
+ { DHCPRELEASE, "Release" },
+ { DHCPINFORM, "Inform" },
+ { DHCPLEASEQUERY, "LeaseQuery" },
+ { DHCPLEASEUNASSIGNED, "LeaseUnassigned" },
+ { DHCPLEASEUNKNOWN, "LeaseUnknown" },
+ { DHCPLEASEACTIVE, "LeaseActive" },
+ { 0, NULL }
+};
+
+#define AGENT_SUBOPTION_CIRCUIT_ID 1 /* RFC 3046 */
+#define AGENT_SUBOPTION_REMOTE_ID 2 /* RFC 3046 */
+#define AGENT_SUBOPTION_SUBSCRIBER_ID 6 /* RFC 3993 */
+static const struct tok agent_suboption_values[] = {
+ { AGENT_SUBOPTION_CIRCUIT_ID, "Circuit-ID" },
+ { AGENT_SUBOPTION_REMOTE_ID, "Remote-ID" },
+ { AGENT_SUBOPTION_SUBSCRIBER_ID, "Subscriber-ID" },
+ { 0, NULL }
+};
+
+
+static void
+rfc1048_print(netdissect_options *ndo,
+ const u_char *bp)
+{
+ uint16_t tag;
+ u_int len;
+ const char *cp;
+ char c;
+ int first, idx;
+ uint8_t subopt, suboptlen;
+
+ ND_PRINT("\n\t Vendor-rfc1048 Extensions");
+
+ /* Step over magic cookie */
+ ND_PRINT("\n\t Magic Cookie 0x%08x", GET_BE_U_4(bp));
+ bp += sizeof(int32_t);
+
+ /* Loop while we there is a tag left in the buffer */
+ while (ND_TTEST_1(bp)) {
+ tag = GET_U_1(bp);
+ bp++;
+ if (tag == TAG_PAD && ndo->ndo_vflag < 3)
+ continue;
+ if (tag == TAG_END && ndo->ndo_vflag < 3)
+ return;
+ cp = tok2str(tag2str, "?Unknown", tag);
+ c = *cp++;
+
+ if (tag == TAG_PAD || tag == TAG_END)
+ len = 0;
+ else {
+ /* Get the length; check for truncation */
+ len = GET_U_1(bp);
+ bp++;
+ }
+
+ ND_PRINT("\n\t %s (%u), length %u%s", cp, tag, len,
+ len > 0 ? ": " : "");
+
+ if (tag == TAG_PAD && ndo->ndo_vflag > 2) {
+ u_int ntag = 1;
+ while (ND_TTEST_1(bp) &&
+ GET_U_1(bp) == TAG_PAD) {
+ bp++;
+ ntag++;
+ }
+ if (ntag > 1)
+ ND_PRINT(", occurs %u", ntag);
+ }
+
+ ND_TCHECK_LEN(bp, len);
+
+ if (tag == TAG_DHCP_MESSAGE && len == 1) {
+ ND_PRINT("%s",
+ tok2str(dhcp_msg_values, "Unknown (%u)", GET_U_1(bp)));
+ bp++;
+ continue;
+ }
+
+ if (tag == TAG_PARM_REQUEST) {
+ idx = 0;
+ while (len > 0) {
+ uint8_t innertag = GET_U_1(bp);
+ bp++;
+ len--;
+ cp = tok2str(tag2str, "?Unknown", innertag);
+ if (idx % 4 == 0)
+ ND_PRINT("\n\t ");
+ else
+ ND_PRINT(", ");
+ ND_PRINT("%s (%u)", cp + 1, innertag);
+ idx++;
+ }
+ continue;
+ }
+
+ /* Print data */
+ if (c == '?') {
+ /* Base default formats for unknown tags on data size */
+ if (len & 1)
+ c = 'b';
+ else if (len & 2)
+ c = 's';
+ else
+ c = 'l';
+ }
+ first = 1;
+ switch (c) {
+
+ case 'a':
+ /* ASCII strings */
+ ND_PRINT("\"");
+ if (nd_printn(ndo, bp, len, ndo->ndo_snapend)) {
+ ND_PRINT("\"");
+ goto trunc;
+ }
+ ND_PRINT("\"");
+ bp += len;
+ len = 0;
+ break;
+
+ case 'i':
+ case 'l':
+ case 'L':
+ /* ip addresses/32-bit words */
+ while (len >= 4) {
+ if (!first)
+ ND_PRINT(",");
+ if (c == 'i')
+ ND_PRINT("%s", GET_IPADDR_STRING(bp));
+ else if (c == 'L')
+ ND_PRINT("%d", GET_BE_S_4(bp));
+ else
+ ND_PRINT("%u", GET_BE_U_4(bp));
+ bp += 4;
+ len -= 4;
+ first = 0;
+ }
+ break;
+
+ case 'p':
+ /* IP address pairs */
+ while (len >= 2*4) {
+ if (!first)
+ ND_PRINT(",");
+ ND_PRINT("(%s:", GET_IPADDR_STRING(bp));
+ bp += 4;
+ len -= 4;
+ ND_PRINT("%s)", GET_IPADDR_STRING(bp));
+ bp += 4;
+ len -= 4;
+ first = 0;
+ }
+ break;
+
+ case 's':
+ /* shorts */
+ while (len >= 2) {
+ if (!first)
+ ND_PRINT(",");
+ ND_PRINT("%u", GET_BE_U_2(bp));
+ bp += 2;
+ len -= 2;
+ first = 0;
+ }
+ break;
+
+ case 'B':
+ /* boolean */
+ while (len > 0) {
+ uint8_t bool_value;
+ if (!first)
+ ND_PRINT(",");
+ bool_value = GET_U_1(bp);
+ switch (bool_value) {
+ case 0:
+ ND_PRINT("N");
+ break;
+ case 1:
+ ND_PRINT("Y");
+ break;
+ default:
+ ND_PRINT("%u?", bool_value);
+ break;
+ }
+ ++bp;
+ --len;
+ first = 0;
+ }
+ break;
+
+ case 'b':
+ case 'x':
+ default:
+ /* Bytes */
+ while (len > 0) {
+ uint8_t byte_value;
+ if (!first)
+ ND_PRINT(c == 'x' ? ":" : ".");
+ byte_value = GET_U_1(bp);
+ if (c == 'x')
+ ND_PRINT("%02x", byte_value);
+ else
+ ND_PRINT("%u", byte_value);
+ ++bp;
+ --len;
+ first = 0;
+ }
+ break;
+
+ case '$':
+ /* Guys we can't handle with one of the usual cases */
+ switch (tag) {
+
+ case TAG_NETBIOS_NODE:
+ /* this option should be at least 1 byte long */
+ if (len < 1) {
+ ND_PRINT("[ERROR: length < 1 bytes]");
+ break;
+ }
+ tag = GET_U_1(bp);
+ ++bp;
+ --len;
+ ND_PRINT("%s", tok2str(nbo2str, NULL, tag));
+ break;
+
+ case TAG_OPT_OVERLOAD:
+ /* this option should be at least 1 byte long */
+ if (len < 1) {
+ ND_PRINT("[ERROR: length < 1 bytes]");
+ break;
+ }
+ tag = GET_U_1(bp);
+ ++bp;
+ --len;
+ ND_PRINT("%s", tok2str(oo2str, NULL, tag));
+ break;
+
+ case TAG_CLIENT_FQDN:
+ /* this option should be at least 3 bytes long */
+ if (len < 3) {
+ ND_PRINT("[ERROR: length < 3 bytes]");
+ bp += len;
+ len = 0;
+ break;
+ }
+ if (GET_U_1(bp) & 0xf0) {
+ ND_PRINT("[ERROR: MBZ nibble 0x%x != 0] ",
+ (GET_U_1(bp) & 0xf0) >> 4);
+ }
+ if (GET_U_1(bp) & 0x0f)
+ ND_PRINT("[%s] ",
+ client_fqdn_flags(GET_U_1(bp)));
+ bp++;
+ if (GET_U_1(bp) || GET_U_1(bp + 1))
+ ND_PRINT("%u/%u ", GET_U_1(bp),
+ GET_U_1(bp + 1));
+ bp += 2;
+ ND_PRINT("\"");
+ if (nd_printn(ndo, bp, len - 3, ndo->ndo_snapend)) {
+ ND_PRINT("\"");
+ goto trunc;
+ }
+ ND_PRINT("\"");
+ bp += len - 3;
+ len = 0;
+ break;
+
+ case TAG_CLIENT_ID:
+ {
+ int type;
+
+ /* this option should be at least 1 byte long */
+ if (len < 1) {
+ ND_PRINT("[ERROR: length < 1 bytes]");
+ break;
+ }
+ type = GET_U_1(bp);
+ bp++;
+ len--;
+ if (type == 0) {
+ ND_PRINT("\"");
+ if (nd_printn(ndo, bp, len, ndo->ndo_snapend)) {
+ ND_PRINT("\"");
+ goto trunc;
+ }
+ ND_PRINT("\"");
+ bp += len;
+ len = 0;
+ break;
+ } else {
+ ND_PRINT("%s ", tok2str(arp2str, "hardware-type %u,", type));
+ while (len > 0) {
+ if (!first)
+ ND_PRINT(":");
+ ND_PRINT("%02x", GET_U_1(bp));
+ ++bp;
+ --len;
+ first = 0;
+ }
+ }
+ break;
+ }
+
+ case TAG_AGENT_CIRCUIT:
+ while (len >= 2) {
+ subopt = GET_U_1(bp);
+ suboptlen = GET_U_1(bp + 1);
+ bp += 2;
+ len -= 2;
+ if (suboptlen > len) {
+ ND_PRINT("\n\t %s SubOption %u, length %u: length goes past end of option",
+ tok2str(agent_suboption_values, "Unknown", subopt),
+ subopt,
+ suboptlen);
+ bp += len;
+ len = 0;
+ break;
+ }
+ ND_PRINT("\n\t %s SubOption %u, length %u: ",
+ tok2str(agent_suboption_values, "Unknown", subopt),
+ subopt,
+ suboptlen);
+ switch (subopt) {
+
+ case AGENT_SUBOPTION_CIRCUIT_ID: /* fall through */
+ case AGENT_SUBOPTION_REMOTE_ID:
+ case AGENT_SUBOPTION_SUBSCRIBER_ID:
+ if (nd_printn(ndo, bp, suboptlen, ndo->ndo_snapend))
+ goto trunc;
+ break;
+
+ default:
+ print_unknown_data(ndo, bp, "\n\t\t", suboptlen);
+ }
+
+ len -= suboptlen;
+ bp += suboptlen;
+ }
+ break;
+
+ case TAG_CLASSLESS_STATIC_RT:
+ case TAG_CLASSLESS_STA_RT_MS:
+ {
+ u_int mask_width, significant_octets, i;
+
+ /* this option should be at least 5 bytes long */
+ if (len < 5) {
+ ND_PRINT("[ERROR: length < 5 bytes]");
+ bp += len;
+ len = 0;
+ break;
+ }
+ while (len > 0) {
+ if (!first)
+ ND_PRINT(",");
+ mask_width = GET_U_1(bp);
+ bp++;
+ len--;
+ /* mask_width <= 32 */
+ if (mask_width > 32) {
+ ND_PRINT("[ERROR: Mask width (%u) > 32]", mask_width);
+ bp += len;
+ len = 0;
+ break;
+ }
+ significant_octets = (mask_width + 7) / 8;
+ /* significant octets + router(4) */
+ if (len < significant_octets + 4) {
+ ND_PRINT("[ERROR: Remaining length (%u) < %u bytes]", len, significant_octets + 4);
+ bp += len;
+ len = 0;
+ break;
+ }
+ ND_PRINT("(");
+ if (mask_width == 0)
+ ND_PRINT("default");
+ else {
+ for (i = 0; i < significant_octets ; i++) {
+ if (i > 0)
+ ND_PRINT(".");
+ ND_PRINT("%u",
+ GET_U_1(bp));
+ bp++;
+ }
+ for (i = significant_octets ; i < 4 ; i++)
+ ND_PRINT(".0");
+ ND_PRINT("/%u", mask_width);
+ }
+ ND_PRINT(":%s)", GET_IPADDR_STRING(bp));
+ bp += 4;
+ len -= (significant_octets + 4);
+ first = 0;
+ }
+ break;
+ }
+
+ case TAG_USER_CLASS:
+ {
+ u_int suboptnumber = 1;
+
+ first = 1;
+ if (len < 2) {
+ ND_PRINT("[ERROR: length < 2 bytes]");
+ bp += len;
+ len = 0;
+ break;
+ }
+ while (len > 0) {
+ suboptlen = GET_U_1(bp);
+ bp++;
+ len--;
+ ND_PRINT("\n\t ");
+ ND_PRINT("instance#%u: ", suboptnumber);
+ if (suboptlen == 0) {
+ ND_PRINT("[ERROR: suboption length must be non-zero]");
+ bp += len;
+ len = 0;
+ break;
+ }
+ if (len < suboptlen) {
+ ND_PRINT("[ERROR: invalid option]");
+ bp += len;
+ len = 0;
+ break;
+ }
+ ND_PRINT("\"");
+ if (nd_printn(ndo, bp, suboptlen, ndo->ndo_snapend)) {
+ ND_PRINT("\"");
+ goto trunc;
+ }
+ ND_PRINT("\"");
+ ND_PRINT(", length %u", suboptlen);
+ suboptnumber++;
+ len -= suboptlen;
+ bp += suboptlen;
+ }
+ break;
+ }
+
+ default:
+ ND_PRINT("[unknown special tag %u, size %u]",
+ tag, len);
+ bp += len;
+ len = 0;
+ break;
+ }
+ break;
+ }
+ /* Data left over? */
+ if (len) {
+ ND_PRINT("\n\t trailing data length %u", len);
+ bp += len;
+ }
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+#define PRINTCMUADDR(m, s) { ND_TCHECK_4(cmu->m); \
+ if (GET_IPV4_TO_NETWORK_ORDER(cmu->m) != 0) \
+ ND_PRINT(" %s:%s", s, GET_IPADDR_STRING(cmu->m)); }
+
+static void
+cmu_print(netdissect_options *ndo,
+ const u_char *bp)
+{
+ const struct cmu_vend *cmu;
+ uint8_t v_flags;
+
+ ND_PRINT(" vend-cmu");
+ cmu = (const struct cmu_vend *)bp;
+
+ /* Only print if there are unknown bits */
+ ND_TCHECK_4(cmu->v_flags);
+ v_flags = GET_U_1(cmu->v_flags);
+ if ((v_flags & ~(VF_SMASK)) != 0)
+ ND_PRINT(" F:0x%x", v_flags);
+ PRINTCMUADDR(v_dgate, "DG");
+ PRINTCMUADDR(v_smask, v_flags & VF_SMASK ? "SM" : "SM*");
+ PRINTCMUADDR(v_dns1, "NS1");
+ PRINTCMUADDR(v_dns2, "NS2");
+ PRINTCMUADDR(v_ins1, "IEN1");
+ PRINTCMUADDR(v_ins2, "IEN2");
+ PRINTCMUADDR(v_ts1, "TS1");
+ PRINTCMUADDR(v_ts2, "TS2");
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+#undef PRINTCMUADDR
+
+static char *
+client_fqdn_flags(u_int flags)
+{
+ static char buf[8+1];
+ int i = 0;
+
+ if (flags & CLIENT_FQDN_FLAGS_S)
+ buf[i++] = 'S';
+ if (flags & CLIENT_FQDN_FLAGS_O)
+ buf[i++] = 'O';
+ if (flags & CLIENT_FQDN_FLAGS_E)
+ buf[i++] = 'E';
+ if (flags & CLIENT_FQDN_FLAGS_N)
+ buf[i++] = 'N';
+ buf[i] = '\0';
+
+ return buf;
+}
diff --git a/print-brcmtag.c b/print-brcmtag.c
new file mode 100644
index 0000000..efc6a1e
--- /dev/null
+++ b/print-brcmtag.c
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Broadcom Ethernet switches tag (4 bytes) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "ethertype.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#define ETHER_TYPE_LEN 2
+
+#define BRCM_TAG_LEN 4
+#define BRCM_OPCODE_SHIFT 5
+#define BRCM_OPCODE_MASK 0x7
+
+/* Ingress fields */
+#define BRCM_IG_TC_SHIFT 2
+#define BRCM_IG_TC_MASK 0x7
+#define BRCM_IG_TE_MASK 0x3
+#define BRCM_IG_TS_SHIFT 7
+#define BRCM_IG_DSTMAP_MASK 0x1ff
+
+/* Egress fields */
+#define BRCM_EG_CID_MASK 0xff
+#define BRCM_EG_RC_MASK 0xff
+#define BRCM_EG_RC_RSVD (3 << 6)
+#define BRCM_EG_RC_EXCEPTION (1 << 5)
+#define BRCM_EG_RC_PROT_SNOOP (1 << 4)
+#define BRCM_EG_RC_PROT_TERM (1 << 3)
+#define BRCM_EG_RC_SWITCH (1 << 2)
+#define BRCM_EG_RC_MAC_LEARN (1 << 1)
+#define BRCM_EG_RC_MIRROR (1 << 0)
+#define BRCM_EG_TC_SHIFT 5
+#define BRCM_EG_TC_MASK 0x7
+#define BRCM_EG_PID_MASK 0x1f
+
+static const struct tok brcm_tag_te_values[] = {
+ { 0, "None" },
+ { 1, "Untag" },
+ { 2, "Header"},
+ { 3, "Reserved" },
+ { 0, NULL }
+};
+
+static const struct tok brcm_tag_rc_values[] = {
+ { 1, "mirror" },
+ { 2, "MAC learning" },
+ { 4, "switching" },
+ { 8, "prot term" },
+ { 16, "prot snoop" },
+ { 32, "exception" },
+ { 0, NULL }
+};
+
+static void
+brcm_tag_print(netdissect_options *ndo, const u_char *bp)
+{
+ uint8_t tag[BRCM_TAG_LEN];
+ uint16_t dst_map;
+ unsigned int i;
+
+ for (i = 0; i < BRCM_TAG_LEN; i++)
+ tag[i] = GET_U_1(bp + i);
+
+ ND_PRINT("BRCM tag OP: %s", tag[0] ? "IG" : "EG");
+ if (tag[0] & (1 << BRCM_OPCODE_SHIFT)) {
+ /* Ingress Broadcom tag */
+ ND_PRINT(", TC: %d", (tag[1] >> BRCM_IG_TC_SHIFT) &
+ BRCM_IG_TC_MASK);
+ ND_PRINT(", TE: %s",
+ tok2str(brcm_tag_te_values, "unknown",
+ (tag[1] & BRCM_IG_TE_MASK)));
+ ND_PRINT(", TS: %d", tag[1] >> BRCM_IG_TS_SHIFT);
+ dst_map = (uint16_t)tag[2] << 8 | tag[3];
+ ND_PRINT(", DST map: 0x%04x", dst_map & BRCM_IG_DSTMAP_MASK);
+ } else {
+ /* Egress Broadcom tag */
+ ND_PRINT(", CID: %d", tag[1]);
+ ND_PRINT(", RC: %s", tok2str(brcm_tag_rc_values,
+ "reserved", tag[2]));
+ ND_PRINT(", TC: %d", (tag[3] >> BRCM_EG_TC_SHIFT) &
+ BRCM_EG_TC_MASK);
+ ND_PRINT(", port: %d", tag[3] & BRCM_EG_PID_MASK);
+ }
+ ND_PRINT(", ");
+}
+
+void
+brcm_tag_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
+ const u_char *p)
+{
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+
+ ndo->ndo_protocol = "brcm-tag";
+ ndo->ndo_ll_hdr_len +=
+ ether_switch_tag_print(ndo, p, length, caplen,
+ brcm_tag_print, BRCM_TAG_LEN);
+}
+
+void
+brcm_tag_prepend_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
+ const u_char *p)
+{
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+
+ ndo->ndo_protocol = "brcm-tag-prepend";
+ ND_TCHECK_LEN(p, BRCM_TAG_LEN);
+ ndo->ndo_ll_hdr_len += BRCM_TAG_LEN;
+
+ if (ndo->ndo_eflag) {
+ /* Print the prepended Broadcom tag. */
+ brcm_tag_print(ndo, p);
+ }
+ p += BRCM_TAG_LEN;
+ length -= BRCM_TAG_LEN;
+ caplen -= BRCM_TAG_LEN;
+
+ /*
+ * Now print the Ethernet frame following it.
+ */
+ ndo->ndo_ll_hdr_len +=
+ ether_print(ndo, p, length, caplen, NULL, NULL);
+}
diff --git a/print-bt.c b/print-bt.c
new file mode 100644
index 0000000..46aa278
--- /dev/null
+++ b/print-bt.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2007
+ * paolo.abeni@email.it All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by Paolo Abeni.''
+ * The name of author may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Bluetooth printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+#ifdef DLT_BLUETOOTH_HCI_H4_WITH_PHDR
+
+/*
+ * Header prepended by libpcap to each bluetooth h4 frame;
+ * the direction field is in network byte order.
+ */
+typedef struct _bluetooth_h4_header {
+ nd_uint32_t direction; /* if first bit is set direction is incoming */
+} bluetooth_h4_header;
+
+#define BT_HDRLEN sizeof(bluetooth_h4_header)
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the bluetooth header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+bt_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int length = h->len;
+ u_int caplen = h->caplen;
+ const bluetooth_h4_header *hdr = (const bluetooth_h4_header *)p;
+
+ ndo->ndo_protocol = "bluetooth";
+ nd_print_protocol(ndo);
+ ND_TCHECK_LEN(p, BT_HDRLEN);
+ ndo->ndo_ll_hdr_len += BT_HDRLEN;
+ caplen -= BT_HDRLEN;
+ length -= BT_HDRLEN;
+ p += BT_HDRLEN;
+ if (ndo->ndo_eflag)
+ ND_PRINT(", hci length %u, direction %s", length,
+ (GET_BE_U_4(hdr->direction)&0x1) ? "in" : "out");
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+}
+#endif
diff --git a/print-calm-fast.c b/print-calm-fast.c
new file mode 100644
index 0000000..1220d86
--- /dev/null
+++ b/print-calm-fast.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2013 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Ola Martin Lykkja (ola.lykkja@q-free.com)
+ */
+
+/* \summary: Communication access for land mobiles (CALM) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+/*
+ ISO 29281:2009
+ Intelligent Transport Systems . Communications access for land mobiles (CALM)
+ CALM non-IP networking
+*/
+
+/*
+ * This is the top level routine of the printer. 'bp' points
+ * to the calm header of the packet.
+ */
+void
+calm_fast_print(netdissect_options *ndo, const u_char *bp, u_int length, const struct lladdr_info *src)
+{
+ ndo->ndo_protocol = "calm_fast";
+
+ ND_PRINT("CALM FAST");
+ if (src != NULL)
+ ND_PRINT(" src:%s", (src->addr_string)(ndo, src->addr));
+ ND_PRINT("; ");
+
+ if (length < 2) {
+ ND_PRINT(" (length %u < 2)", length);
+ goto invalid;
+ }
+
+ ND_PRINT("SrcNwref:%u; ", GET_U_1(bp));
+ length -= 1;
+ bp += 1;
+
+ ND_PRINT("DstNwref:%u; ", GET_U_1(bp));
+ length -= 1;
+ bp += 1;
+
+ if (ndo->ndo_vflag)
+ ND_DEFAULTPRINT(bp, length);
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(bp, length);
+}
diff --git a/print-carp.c b/print-carp.c
new file mode 100644
index 0000000..75f5066
--- /dev/null
+++ b/print-carp.c
@@ -0,0 +1,78 @@
+/* $OpenBSD: print-carp.c,v 1.6 2009/10/27 23:59:55 deraadt Exp $ */
+
+/*
+ * Copyright (c) 2000 William C. Fenner.
+ * All rights reserved.
+ *
+ * Kevin Steves <ks@hp.se> July 2000
+ * Modified to:
+ * - print version, type string and packet length
+ * - print IP address count if > 1 (-v)
+ * - verify checksum (-v)
+ * - print authentication string (-v)
+ *
+ * Copyright (c) 2011 Advanced Computing Technologies
+ * George V. Neille-Neil
+ *
+ * Modified to:
+ * - work correctly with CARP
+ * - compile into the latest tcpdump
+ * - print out the counter
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * The name of William C. Fenner may not be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+/* \summary: Common Address Redundancy Protocol (CARP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h" /* for checksum structure and functions */
+#include "extract.h"
+
+void
+carp_print(netdissect_options *ndo, const u_char *bp, u_int len, u_int ttl)
+{
+ u_int version, type;
+ const char *type_s;
+
+ ndo->ndo_protocol = "carp";
+ version = (GET_U_1(bp) & 0xf0) >> 4;
+ type = GET_U_1(bp) & 0x0f;
+ if (type == 1)
+ type_s = "advertise";
+ else
+ type_s = "unknown";
+ ND_PRINT("CARPv%u-%s %u: ", version, type_s, len);
+ if (ttl != 255)
+ ND_PRINT("[ttl=%u!] ", ttl);
+ if (version != 2 || type != 1)
+ return;
+ ND_PRINT("vhid=%u advbase=%u advskew=%u authlen=%u ",
+ GET_U_1(bp + 1), GET_U_1(bp + 5), GET_U_1(bp + 2),
+ GET_U_1(bp + 3));
+ if (ndo->ndo_vflag) {
+ struct cksum_vec vec[1];
+ vec[0].ptr = (const uint8_t *)bp;
+ vec[0].len = len;
+ if (ND_TTEST_LEN(bp, len) && in_cksum(vec, 1))
+ ND_PRINT(" (bad carp cksum %x!)",
+ GET_BE_U_2(bp + 6));
+ }
+ ND_PRINT("counter=%" PRIu64, GET_BE_U_8(bp + 8));
+}
diff --git a/print-cdp.c b/print-cdp.c
new file mode 100644
index 0000000..9f5c24b
--- /dev/null
+++ b/print-cdp.c
@@ -0,0 +1,472 @@
+/*
+ * Copyright (c) 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Code by Gert Doering, SpaceNet GmbH, gert@space.net
+ *
+ * Reference documentation:
+ * https://web.archive.org/web/20000914194913/http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.pdf
+ */
+
+/* \summary: Cisco Discovery Protocol (CDP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+#include "nlpid.h"
+
+
+#define CDP_HEADER_LEN 4
+#define CDP_HEADER_VERSION_OFFSET 0
+#define CDP_HEADER_TTL_OFFSET 1
+#define CDP_HEADER_CHECKSUM_OFFSET 2
+
+#define CDP_TLV_HEADER_LEN 4
+#define CDP_TLV_TYPE_OFFSET 0
+#define CDP_TLV_LEN_OFFSET 2
+
+static const struct tok cdp_capability_values[] = {
+ { 0x01, "Router" },
+ { 0x02, "Transparent Bridge" },
+ { 0x04, "Source Route Bridge" },
+ { 0x08, "L2 Switch" },
+ { 0x10, "L3 capable" },
+ { 0x20, "IGMP snooping" },
+ { 0x40, "L1 capable" },
+ { 0, NULL }
+};
+
+static void cdp_print_addr(netdissect_options *, const u_char *, u_int);
+static void cdp_print_prefixes(netdissect_options *, const u_char *, u_int);
+
+static void
+cdp_print_string(netdissect_options *ndo,
+ const u_char *cp, const u_int len)
+{
+ ND_PRINT("'");
+ (void)nd_printn(ndo, cp, len, NULL);
+ ND_PRINT("'");
+}
+
+static void
+cdp_print_power(netdissect_options *ndo,
+ const u_char *cp, const u_int len)
+{
+ u_int val = 0;
+
+ switch (len) {
+ case 1:
+ val = GET_U_1(cp);
+ break;
+ case 2:
+ val = GET_BE_U_2(cp);
+ break;
+ case 3:
+ val = GET_BE_U_3(cp);
+ break;
+ }
+ ND_PRINT("%1.2fW", val / 1000.0);
+}
+
+static void
+cdp_print_capability(netdissect_options *ndo,
+ const u_char *cp, const u_int len _U_)
+{
+ uint32_t val = GET_BE_U_4(cp);
+
+ ND_PRINT("(0x%08x): %s", val,
+ bittok2str(cdp_capability_values, "none", val));
+}
+
+/* Rework the version string to get a nice indentation. */
+static void
+cdp_print_version(netdissect_options *ndo,
+ const u_char *cp, const u_int len)
+{
+ unsigned i;
+
+ ND_PRINT("\n\t ");
+ for (i = 0; i < len; i++) {
+ u_char c = GET_U_1(cp + i);
+
+ if (c == '\n')
+ ND_PRINT("\n\t ");
+ else
+ fn_print_char(ndo, c);
+ }
+}
+
+static void
+cdp_print_uint16(netdissect_options *ndo,
+ const u_char *cp, const u_int len _U_)
+{
+ ND_PRINT("%u", GET_BE_U_2(cp));
+}
+
+static void
+cdp_print_duplex(netdissect_options *ndo,
+ const u_char *cp, const u_int len _U_)
+{
+ ND_PRINT("%s", GET_U_1(cp) ? "full": "half");
+}
+
+/* https://www.cisco.com/c/en/us/td/docs/voice_ip_comm/cata/186/2_12_m/english/release/notes/186rn21m.html
+* plus more details from other sources
+*
+* There are apparently versions of the request with both
+* 2 bytes and 3 bytes of value. The 3 bytes of value
+* appear to be a 1-byte application type followed by a
+* 2-byte VLAN ID; the 2 bytes of value are unknown
+* (they're 0x20 0x00 in some captures I've seen; that
+* is not a valid VLAN ID, as VLAN IDs are 12 bits).
+*
+* The replies all appear to be 3 bytes long.
+*/
+static void
+cdp_print_ata186(netdissect_options *ndo,
+ const u_char *cp, const u_int len)
+{
+ if (len == 2)
+ ND_PRINT("unknown 0x%04x", GET_BE_U_2(cp));
+ else
+ ND_PRINT("app %u, vlan %u", GET_U_1(cp), GET_BE_U_2(cp + 1));
+}
+
+static void
+cdp_print_mtu(netdissect_options *ndo,
+ const u_char *cp, const u_int len _U_)
+{
+ ND_PRINT("%u bytes", GET_BE_U_4(cp));
+}
+
+static void
+cdp_print_uint8x(netdissect_options *ndo,
+ const u_char *cp, const u_int len _U_)
+{
+ ND_PRINT("0x%02x", GET_U_1(cp));
+}
+
+static void
+cdp_print_phys_loc(netdissect_options *ndo,
+ const u_char *cp, const u_int len)
+{
+ ND_PRINT("0x%02x", GET_U_1(cp));
+ if (len > 1) {
+ ND_PRINT("/");
+ (void)nd_printn(ndo, cp + 1, len - 1, NULL);
+ }
+}
+
+struct cdp_tlvinfo {
+ const char *name;
+ void (*printer)(netdissect_options *ndo, const u_char *, u_int);
+ int min_len, max_len;
+};
+
+#define T_DEV_ID 0x01
+#define T_MAX 0x17
+static const struct cdp_tlvinfo cdptlvs[T_MAX + 1] = {
+ /* 0x00 */
+ [ T_DEV_ID ] = { "Device-ID", cdp_print_string, -1, -1 },
+ [ 0x02 ] = { "Address", cdp_print_addr, -1, -1 },
+ [ 0x03 ] = { "Port-ID", cdp_print_string, -1, -1 },
+ [ 0x04 ] = { "Capability", cdp_print_capability, 4, 4 },
+ [ 0x05 ] = { "Version String", cdp_print_version, -1, -1 },
+ [ 0x06 ] = { "Platform", cdp_print_string, -1, -1 },
+ [ 0x07 ] = { "Prefixes", cdp_print_prefixes, -1, -1 },
+ /* not documented */
+ [ 0x08 ] = { "Protocol-Hello option", NULL, -1, -1 },
+ /* CDPv2 */
+ [ 0x09 ] = { "VTP Management Domain", cdp_print_string, -1, -1 },
+ /* CDPv2 */
+ [ 0x0a ] = { "Native VLAN ID", cdp_print_uint16, 2, 2 },
+ /* CDPv2 */
+ [ 0x0b ] = { "Duplex", cdp_print_duplex, 1, 1 },
+ /* 0x0c */
+ /* 0x0d */
+ /* incomplete doc. */
+ [ 0x0e ] = { "ATA-186 VoIP VLAN assignment", cdp_print_ata186, 3, 3 },
+ /* incomplete doc. */
+ [ 0x0f ] = { "ATA-186 VoIP VLAN request", cdp_print_ata186, 2, 3 },
+ /* not documented */
+ [ 0x10 ] = { "power consumption", cdp_print_power, 1, 3 },
+ /* not documented */
+ [ 0x11 ] = { "MTU", cdp_print_mtu, 4, 4 },
+ /* not documented */
+ [ 0x12 ] = { "AVVID trust bitmap", cdp_print_uint8x, 1, 1 },
+ /* not documented */
+ [ 0x13 ] = { "AVVID untrusted ports CoS", cdp_print_uint8x, 1, 1 },
+ /* not documented */
+ [ 0x14 ] = { "System Name", cdp_print_string, -1, -1 },
+ /* not documented */
+ [ 0x15 ] = { "System Object ID (not decoded)", NULL, -1, -1 },
+ [ 0x16 ] = { "Management Addresses", cdp_print_addr, 4, -1 },
+ /* not documented */
+ [ 0x17 ] = { "Physical Location", cdp_print_phys_loc, 1, -1 },
+};
+
+void
+cdp_print(netdissect_options *ndo,
+ const u_char *tptr, u_int length)
+{
+ u_int orig_length = length;
+ uint16_t checksum;
+
+ ndo->ndo_protocol = "cdp";
+
+ if (length < CDP_HEADER_LEN) {
+ ND_PRINT(" (packet length %u < %u)", length, CDP_HEADER_LEN);
+ goto invalid;
+ }
+ ND_PRINT("CDPv%u, ttl: %us",
+ GET_U_1(tptr + CDP_HEADER_VERSION_OFFSET),
+ GET_U_1(tptr + CDP_HEADER_TTL_OFFSET));
+ checksum = GET_BE_U_2(tptr + CDP_HEADER_CHECKSUM_OFFSET);
+ if (ndo->ndo_vflag)
+ ND_PRINT(", checksum: 0x%04x (unverified), length %u",
+ checksum, orig_length);
+ tptr += CDP_HEADER_LEN;
+ length -= CDP_HEADER_LEN;
+
+ while (length) {
+ u_int type, len;
+ const struct cdp_tlvinfo *info;
+ const char *name;
+ u_char covered = 0;
+
+ if (length < CDP_TLV_HEADER_LEN) {
+ ND_PRINT(" (remaining packet length %u < %u)",
+ length, CDP_TLV_HEADER_LEN);
+ goto invalid;
+ }
+ type = GET_BE_U_2(tptr + CDP_TLV_TYPE_OFFSET);
+ len = GET_BE_U_2(tptr + CDP_TLV_LEN_OFFSET); /* object length includes the 4 bytes header length */
+ info = type <= T_MAX ? &cdptlvs[type] : NULL;
+ name = (info && info->name) ? info->name : "unknown field type";
+ if (len < CDP_TLV_HEADER_LEN) {
+ if (ndo->ndo_vflag)
+ ND_PRINT("\n\t%s (0x%02x), TLV length: %u byte%s (too short)",
+ name, type, len, PLURAL_SUFFIX(len));
+ else
+ ND_PRINT(", %s TLV length %u too short",
+ name, len);
+ goto invalid;
+ }
+ if (len > length) {
+ ND_PRINT(" (TLV length %u > %u)", len, length);
+ goto invalid;
+ }
+ tptr += CDP_TLV_HEADER_LEN;
+ length -= CDP_TLV_HEADER_LEN;
+ len -= CDP_TLV_HEADER_LEN;
+
+ /* In non-verbose mode just print Device-ID. */
+ if (!ndo->ndo_vflag && type == T_DEV_ID)
+ ND_PRINT(", Device-ID ");
+ else if (ndo->ndo_vflag)
+ ND_PRINT("\n\t%s (0x%02x), value length: %u byte%s: ",
+ name, type, len, PLURAL_SUFFIX(len));
+
+ if (info) {
+ if ((info->min_len > 0 && len < (unsigned)info->min_len) ||
+ (info->max_len > 0 && len > (unsigned)info->max_len))
+ ND_PRINT(" (malformed TLV)");
+ else if (ndo->ndo_vflag || type == T_DEV_ID) {
+ if (info->printer)
+ info->printer(ndo, tptr, len);
+ else
+ ND_TCHECK_LEN(tptr, len);
+ /*
+ * When the type is defined without a printer,
+ * do not print the hex dump.
+ */
+ covered = 1;
+ }
+ }
+
+ if (!covered) {
+ ND_TCHECK_LEN(tptr, len);
+ print_unknown_data(ndo, tptr, "\n\t ", len);
+ }
+ tptr += len;
+ length -= len;
+ }
+ if (ndo->ndo_vflag < 1)
+ ND_PRINT(", length %u", orig_length);
+
+ return;
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(tptr, length);
+}
+
+/*
+ * Protocol type values.
+ *
+ * PT_NLPID means that the protocol type field contains an OSI NLPID.
+ *
+ * PT_IEEE_802_2 means that the protocol type field contains an IEEE 802.2
+ * LLC header that specifies that the payload is for that protocol.
+ */
+#define PT_NLPID 1 /* OSI NLPID */
+#define PT_IEEE_802_2 2 /* IEEE 802.2 LLC header */
+
+static void
+cdp_print_addr(netdissect_options *ndo,
+ const u_char * p, u_int l)
+{
+ u_int num;
+ static const u_char prot_ipv6[] = {
+ 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x86, 0xdd
+ };
+
+ if (l < 4) {
+ ND_PRINT(" (not enough space for num)");
+ goto invalid;
+ }
+ num = GET_BE_U_4(p);
+ p += 4;
+ l -= 4;
+
+ while (num) {
+ u_int pt, pl, al;
+
+ if (l < 2) {
+ ND_PRINT(" (not enough space for PT+PL)");
+ goto invalid;
+ }
+ pt = GET_U_1(p); /* type of "protocol" field */
+ pl = GET_U_1(p + 1); /* length of "protocol" field */
+ p += 2;
+ l -= 2;
+
+ if (l < pl + 2) {
+ ND_PRINT(" (not enough space for P+AL)");
+ goto invalid;
+ }
+ /* Skip the protocol for now. */
+ al = GET_BE_U_2(p + pl); /* address length */
+
+ if (pt == PT_NLPID && pl == 1 && GET_U_1(p) == NLPID_IP &&
+ al == 4) {
+ /*
+ * IPv4: protocol type = NLPID, protocol length = 1
+ * (1-byte NLPID), protocol = 0xcc (NLPID for IPv4),
+ * address length = 4
+ */
+ p += pl + 2;
+ l -= pl + 2;
+ /* p is just beyond al now. */
+ if (l < al) {
+ ND_PRINT(" (not enough space for A)");
+ goto invalid;
+ }
+ ND_PRINT("IPv4 (%u) %s", num, GET_IPADDR_STRING(p));
+ p += al;
+ l -= al;
+ }
+ else if (pt == PT_IEEE_802_2 && pl == 8 &&
+ memcmp(p, prot_ipv6, 8) == 0 && al == 16) {
+ /*
+ * IPv6: protocol type = IEEE 802.2 header,
+ * protocol length = 8 (size of LLC+SNAP header),
+ * protocol = LLC+SNAP header with the IPv6
+ * Ethertype, address length = 16
+ */
+ p += pl + 2;
+ l -= pl + 2;
+ /* p is just beyond al now. */
+ if (l < al) {
+ ND_PRINT(" (not enough space for A)");
+ goto invalid;
+ }
+ ND_PRINT("IPv6 (%u) %s", num, GET_IP6ADDR_STRING(p));
+ p += al;
+ l -= al;
+ }
+ else {
+ /*
+ * Generic case: just print raw data
+ */
+ ND_PRINT("pt=0x%02x, pl=%u, pb=", pt, pl);
+ while (pl != 0) {
+ ND_PRINT(" %02x", GET_U_1(p));
+ p++;
+ l--;
+ pl--;
+ }
+ ND_PRINT(", al=%u, a=", al);
+ p += 2;
+ l -= 2;
+ /* p is just beyond al now. */
+ if (l < al) {
+ ND_PRINT(" (not enough space for A)");
+ goto invalid;
+ }
+ while (al != 0) {
+ ND_PRINT(" %02x", GET_U_1(p));
+ p++;
+ l--;
+ al--;
+ }
+ }
+ num--;
+ if (num)
+ ND_PRINT(" ");
+ }
+ if (l)
+ ND_PRINT(" (%u bytes of stray data)", l);
+ return;
+
+invalid:
+ ND_TCHECK_LEN(p, l);
+}
+
+static void
+cdp_print_prefixes(netdissect_options *ndo,
+ const u_char * p, u_int l)
+{
+ if (l % 5) {
+ ND_PRINT(" [length %u is not a multiple of 5]", l);
+ goto invalid;
+ }
+
+ ND_PRINT(" IPv4 Prefixes (%u):", l / 5);
+
+ while (l > 0) {
+ ND_PRINT(" %u.%u.%u.%u/%u",
+ GET_U_1(p), GET_U_1(p + 1), GET_U_1(p + 2),
+ GET_U_1(p + 3), GET_U_1(p + 4));
+ l -= 5;
+ p += 5;
+ }
+ return;
+
+invalid:
+ ND_TCHECK_LEN(p, l);
+}
diff --git a/print-cfm.c b/print-cfm.c
new file mode 100644
index 0000000..e950719
--- /dev/null
+++ b/print-cfm.c
@@ -0,0 +1,766 @@
+/*
+ * Copyright (c) 1998-2006 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+/* \summary: IEEE 802.1ag Connectivity Fault Management (CFM) protocols printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "oui.h"
+#include "af.h"
+
+
+struct cfm_common_header_t {
+ nd_uint8_t mdlevel_version;
+ nd_uint8_t opcode;
+ nd_uint8_t flags;
+ nd_uint8_t first_tlv_offset;
+};
+
+#define CFM_VERSION 0
+#define CFM_EXTRACT_VERSION(x) ((x)&0x1f)
+#define CFM_EXTRACT_MD_LEVEL(x) (((x)&0xe0)>>5)
+
+#define CFM_OPCODE_CCM 1
+#define CFM_OPCODE_LBR 2
+#define CFM_OPCODE_LBM 3
+#define CFM_OPCODE_LTR 4
+#define CFM_OPCODE_LTM 5
+
+static const struct tok cfm_opcode_values[] = {
+ { CFM_OPCODE_CCM, "Continuity Check Message"},
+ { CFM_OPCODE_LBR, "Loopback Reply"},
+ { CFM_OPCODE_LBM, "Loopback Message"},
+ { CFM_OPCODE_LTR, "Linktrace Reply"},
+ { CFM_OPCODE_LTM, "Linktrace Message"},
+ { 0, NULL}
+};
+
+/*
+ * Message Formats.
+ */
+struct cfm_ccm_t {
+ nd_uint32_t sequence;
+ nd_uint16_t ma_epi;
+ nd_byte names[48];
+ nd_byte itu_t_y_1731[16];
+};
+
+/*
+ * Timer Bases for the CCM Interval field.
+ * Expressed in units of seconds.
+ */
+static const float ccm_interval_base[8] = {0.0f, 0.003333f, 0.01f, 0.1f, 1.0f, 10.0f, 60.0f, 600.0f};
+#define CCM_INTERVAL_MIN_MULTIPLIER 3.25
+#define CCM_INTERVAL_MAX_MULTIPLIER 3.5
+
+#define CFM_CCM_RDI_FLAG 0x80
+#define CFM_EXTRACT_CCM_INTERVAL(x) ((x)&0x07)
+
+#define CFM_CCM_MD_FORMAT_8021 0
+#define CFM_CCM_MD_FORMAT_NONE 1
+#define CFM_CCM_MD_FORMAT_DNS 2
+#define CFM_CCM_MD_FORMAT_MAC 3
+#define CFM_CCM_MD_FORMAT_CHAR 4
+
+static const struct tok cfm_md_nameformat_values[] = {
+ { CFM_CCM_MD_FORMAT_8021, "IEEE 802.1"},
+ { CFM_CCM_MD_FORMAT_NONE, "No MD Name present"},
+ { CFM_CCM_MD_FORMAT_DNS, "DNS string"},
+ { CFM_CCM_MD_FORMAT_MAC, "MAC + 16Bit Integer"},
+ { CFM_CCM_MD_FORMAT_CHAR, "Character string"},
+ { 0, NULL}
+};
+
+#define CFM_CCM_MA_FORMAT_8021 0
+#define CFM_CCM_MA_FORMAT_VID 1
+#define CFM_CCM_MA_FORMAT_CHAR 2
+#define CFM_CCM_MA_FORMAT_INT 3
+#define CFM_CCM_MA_FORMAT_VPN 4
+
+static const struct tok cfm_ma_nameformat_values[] = {
+ { CFM_CCM_MA_FORMAT_8021, "IEEE 802.1"},
+ { CFM_CCM_MA_FORMAT_VID, "Primary VID"},
+ { CFM_CCM_MA_FORMAT_CHAR, "Character string"},
+ { CFM_CCM_MA_FORMAT_INT, "16Bit Integer"},
+ { CFM_CCM_MA_FORMAT_VPN, "RFC2685 VPN-ID"},
+ { 0, NULL}
+};
+
+struct cfm_lbm_t {
+ nd_uint32_t transaction_id;
+};
+
+struct cfm_ltm_t {
+ nd_uint32_t transaction_id;
+ nd_uint8_t ttl;
+ nd_mac_addr original_mac;
+ nd_mac_addr target_mac;
+};
+
+static const struct tok cfm_ltm_flag_values[] = {
+ { 0x80, "Use Forwarding-DB only"},
+ { 0, NULL}
+};
+
+struct cfm_ltr_t {
+ nd_uint32_t transaction_id;
+ nd_uint8_t ttl;
+ nd_uint8_t replay_action;
+};
+
+static const struct tok cfm_ltr_flag_values[] = {
+ { 0x80, "UseFDB Only"},
+ { 0x40, "FwdYes"},
+ { 0x20, "Terminal MEP"},
+ { 0, NULL}
+};
+
+static const struct tok cfm_ltr_replay_action_values[] = {
+ { 1, "Exact Match"},
+ { 2, "Filtering DB"},
+ { 3, "MIP CCM DB"},
+ { 0, NULL}
+};
+
+
+#define CFM_TLV_END 0
+#define CFM_TLV_SENDER_ID 1
+#define CFM_TLV_PORT_STATUS 2
+#define CFM_TLV_INTERFACE_STATUS 3
+#define CFM_TLV_DATA 4
+#define CFM_TLV_REPLY_INGRESS 5
+#define CFM_TLV_REPLY_EGRESS 6
+#define CFM_TLV_PRIVATE 31
+
+static const struct tok cfm_tlv_values[] = {
+ { CFM_TLV_END, "End"},
+ { CFM_TLV_SENDER_ID, "Sender ID"},
+ { CFM_TLV_PORT_STATUS, "Port status"},
+ { CFM_TLV_INTERFACE_STATUS, "Interface status"},
+ { CFM_TLV_DATA, "Data"},
+ { CFM_TLV_REPLY_INGRESS, "Reply Ingress"},
+ { CFM_TLV_REPLY_EGRESS, "Reply Egress"},
+ { CFM_TLV_PRIVATE, "Organization Specific"},
+ { 0, NULL}
+};
+
+/*
+ * TLVs
+ */
+
+struct cfm_tlv_header_t {
+ nd_uint8_t type;
+ nd_uint16_t length;
+};
+
+/* FIXME define TLV formats */
+
+static const struct tok cfm_tlv_port_status_values[] = {
+ { 1, "Blocked"},
+ { 2, "Up"},
+ { 0, NULL}
+};
+
+static const struct tok cfm_tlv_interface_status_values[] = {
+ { 1, "Up"},
+ { 2, "Down"},
+ { 3, "Testing"},
+ { 5, "Dormant"},
+ { 6, "not present"},
+ { 7, "lower Layer down"},
+ { 0, NULL}
+};
+
+#define CFM_CHASSIS_ID_CHASSIS_COMPONENT 1
+#define CFM_CHASSIS_ID_INTERFACE_ALIAS 2
+#define CFM_CHASSIS_ID_PORT_COMPONENT 3
+#define CFM_CHASSIS_ID_MAC_ADDRESS 4
+#define CFM_CHASSIS_ID_NETWORK_ADDRESS 5
+#define CFM_CHASSIS_ID_INTERFACE_NAME 6
+#define CFM_CHASSIS_ID_LOCAL 7
+
+static const struct tok cfm_tlv_senderid_chassisid_values[] = {
+ { 0, "Reserved"},
+ { CFM_CHASSIS_ID_CHASSIS_COMPONENT, "Chassis component"},
+ { CFM_CHASSIS_ID_INTERFACE_ALIAS, "Interface alias"},
+ { CFM_CHASSIS_ID_PORT_COMPONENT, "Port component"},
+ { CFM_CHASSIS_ID_MAC_ADDRESS, "MAC address"},
+ { CFM_CHASSIS_ID_NETWORK_ADDRESS, "Network address"},
+ { CFM_CHASSIS_ID_INTERFACE_NAME, "Interface name"},
+ { CFM_CHASSIS_ID_LOCAL, "Locally assigned"},
+ { 0, NULL}
+};
+
+
+static int
+cfm_network_addr_print(netdissect_options *ndo,
+ const u_char *tptr, const u_int length)
+{
+ u_int network_addr_type;
+ u_int hexdump = FALSE;
+
+ /*
+ * Although AFIs are typically 2 octets wide,
+ * 802.1ab specifies that this field width
+ * is only one octet.
+ */
+ if (length < 1) {
+ ND_PRINT("\n\t Network Address Type (invalid, no data");
+ return hexdump;
+ }
+ /* The calling function must make any due ND_TCHECK calls. */
+ network_addr_type = GET_U_1(tptr);
+ ND_PRINT("\n\t Network Address Type %s (%u)",
+ tok2str(af_values, "Unknown", network_addr_type),
+ network_addr_type);
+
+ /*
+ * Resolve the passed in Address.
+ */
+ switch(network_addr_type) {
+ case AFNUM_INET:
+ if (length != 1 + 4) {
+ ND_PRINT("(invalid IPv4 address length %u)", length - 1);
+ hexdump = TRUE;
+ break;
+ }
+ ND_PRINT(", %s", GET_IPADDR_STRING(tptr + 1));
+ break;
+
+ case AFNUM_INET6:
+ if (length != 1 + 16) {
+ ND_PRINT("(invalid IPv6 address length %u)", length - 1);
+ hexdump = TRUE;
+ break;
+ }
+ ND_PRINT(", %s", GET_IP6ADDR_STRING(tptr + 1));
+ break;
+
+ default:
+ hexdump = TRUE;
+ break;
+ }
+
+ return hexdump;
+}
+
+void
+cfm_print(netdissect_options *ndo,
+ const u_char *pptr, u_int length)
+{
+ const struct cfm_common_header_t *cfm_common_header;
+ uint8_t mdlevel_version, opcode, flags, first_tlv_offset;
+ const struct cfm_tlv_header_t *cfm_tlv_header;
+ const uint8_t *tptr, *tlv_ptr;
+ const uint8_t *namesp;
+ u_int names_data_remaining;
+ uint8_t md_nameformat, md_namelength;
+ const uint8_t *md_name;
+ uint8_t ma_nameformat, ma_namelength;
+ const uint8_t *ma_name;
+ u_int hexdump, tlen, cfm_tlv_len, cfm_tlv_type, ccm_interval;
+
+
+ union {
+ const struct cfm_ccm_t *cfm_ccm;
+ const struct cfm_lbm_t *cfm_lbm;
+ const struct cfm_ltm_t *cfm_ltm;
+ const struct cfm_ltr_t *cfm_ltr;
+ } msg_ptr;
+
+ ndo->ndo_protocol = "cfm";
+ tptr=pptr;
+ cfm_common_header = (const struct cfm_common_header_t *)pptr;
+ if (length < sizeof(*cfm_common_header))
+ goto tooshort;
+ ND_TCHECK_SIZE(cfm_common_header);
+
+ /*
+ * Sanity checking of the header.
+ */
+ mdlevel_version = GET_U_1(cfm_common_header->mdlevel_version);
+ if (CFM_EXTRACT_VERSION(mdlevel_version) != CFM_VERSION) {
+ ND_PRINT("CFMv%u not supported, length %u",
+ CFM_EXTRACT_VERSION(mdlevel_version), length);
+ return;
+ }
+
+ opcode = GET_U_1(cfm_common_header->opcode);
+ ND_PRINT("CFMv%u %s, MD Level %u, length %u",
+ CFM_EXTRACT_VERSION(mdlevel_version),
+ tok2str(cfm_opcode_values, "unknown (%u)", opcode),
+ CFM_EXTRACT_MD_LEVEL(mdlevel_version),
+ length);
+
+ /*
+ * In non-verbose mode just print the opcode and md-level.
+ */
+ if (ndo->ndo_vflag < 1) {
+ return;
+ }
+
+ flags = GET_U_1(cfm_common_header->flags);
+ first_tlv_offset = GET_U_1(cfm_common_header->first_tlv_offset);
+ ND_PRINT("\n\tFirst TLV offset %u", first_tlv_offset);
+
+ tptr += sizeof(struct cfm_common_header_t);
+ tlen = length - sizeof(struct cfm_common_header_t);
+
+ /*
+ * Sanity check the first TLV offset.
+ */
+ if (first_tlv_offset > tlen) {
+ ND_PRINT(" (too large, must be <= %u)", tlen);
+ return;
+ }
+
+ switch (opcode) {
+ case CFM_OPCODE_CCM:
+ msg_ptr.cfm_ccm = (const struct cfm_ccm_t *)tptr;
+ if (first_tlv_offset < sizeof(*msg_ptr.cfm_ccm)) {
+ ND_PRINT(" (too small 1, must be >= %zu)",
+ sizeof(*msg_ptr.cfm_ccm));
+ return;
+ }
+ if (tlen < sizeof(*msg_ptr.cfm_ccm))
+ goto tooshort;
+ ND_TCHECK_SIZE(msg_ptr.cfm_ccm);
+
+ ccm_interval = CFM_EXTRACT_CCM_INTERVAL(flags);
+ ND_PRINT(", Flags [CCM Interval %u%s]",
+ ccm_interval,
+ flags & CFM_CCM_RDI_FLAG ?
+ ", RDI" : "");
+
+ /*
+ * Resolve the CCM interval field.
+ */
+ if (ccm_interval) {
+ ND_PRINT("\n\t CCM Interval %.3fs"
+ ", min CCM Lifetime %.3fs, max CCM Lifetime %.3fs",
+ ccm_interval_base[ccm_interval],
+ ccm_interval_base[ccm_interval] * CCM_INTERVAL_MIN_MULTIPLIER,
+ ccm_interval_base[ccm_interval] * CCM_INTERVAL_MAX_MULTIPLIER);
+ }
+
+ ND_PRINT("\n\t Sequence Number 0x%08x, MA-End-Point-ID 0x%04x",
+ GET_BE_U_4(msg_ptr.cfm_ccm->sequence),
+ GET_BE_U_2(msg_ptr.cfm_ccm->ma_epi));
+
+ namesp = msg_ptr.cfm_ccm->names;
+ names_data_remaining = sizeof(msg_ptr.cfm_ccm->names);
+
+ /*
+ * Resolve the MD fields.
+ */
+ md_nameformat = GET_U_1(namesp);
+ namesp++;
+ names_data_remaining--; /* We know this is != 0 */
+ if (md_nameformat != CFM_CCM_MD_FORMAT_NONE) {
+ md_namelength = GET_U_1(namesp);
+ namesp++;
+ names_data_remaining--; /* We know this is !=0 */
+ ND_PRINT("\n\t MD Name Format %s (%u), MD Name length %u",
+ tok2str(cfm_md_nameformat_values, "Unknown",
+ md_nameformat),
+ md_nameformat,
+ md_namelength);
+
+ /*
+ * -3 for the MA short name format and length and one byte
+ * of MA short name.
+ */
+ if (md_namelength > names_data_remaining - 3) {
+ ND_PRINT(" (too large, must be <= %u)", names_data_remaining - 2);
+ return;
+ }
+
+ md_name = namesp;
+ ND_PRINT("\n\t MD Name: ");
+ switch (md_nameformat) {
+ case CFM_CCM_MD_FORMAT_DNS:
+ case CFM_CCM_MD_FORMAT_CHAR:
+ nd_printjnp(ndo, md_name, md_namelength);
+ break;
+
+ case CFM_CCM_MD_FORMAT_MAC:
+ if (md_namelength == MAC_ADDR_LEN) {
+ ND_PRINT("\n\t MAC %s", GET_ETHERADDR_STRING(md_name));
+ } else {
+ ND_PRINT("\n\t MAC (length invalid)");
+ }
+ break;
+
+ /* FIXME add printers for those MD formats - hexdump for now */
+ case CFM_CCM_MA_FORMAT_8021:
+ default:
+ print_unknown_data(ndo, md_name, "\n\t ",
+ md_namelength);
+ }
+ namesp += md_namelength;
+ names_data_remaining -= md_namelength;
+ } else {
+ ND_PRINT("\n\t MD Name Format %s (%u)",
+ tok2str(cfm_md_nameformat_values, "Unknown",
+ md_nameformat),
+ md_nameformat);
+ }
+
+
+ /*
+ * Resolve the MA fields.
+ */
+ ma_nameformat = GET_U_1(namesp);
+ namesp++;
+ names_data_remaining--; /* We know this is != 0 */
+ ma_namelength = GET_U_1(namesp);
+ namesp++;
+ names_data_remaining--; /* We know this is != 0 */
+ ND_PRINT("\n\t MA Name-Format %s (%u), MA name length %u",
+ tok2str(cfm_ma_nameformat_values, "Unknown",
+ ma_nameformat),
+ ma_nameformat,
+ ma_namelength);
+
+ if (ma_namelength > names_data_remaining) {
+ ND_PRINT(" (too large, must be <= %u)", names_data_remaining);
+ return;
+ }
+
+ ma_name = namesp;
+ ND_PRINT("\n\t MA Name: ");
+ switch (ma_nameformat) {
+ case CFM_CCM_MA_FORMAT_CHAR:
+ nd_printjnp(ndo, ma_name, ma_namelength);
+ break;
+
+ /* FIXME add printers for those MA formats - hexdump for now */
+ case CFM_CCM_MA_FORMAT_8021:
+ case CFM_CCM_MA_FORMAT_VID:
+ case CFM_CCM_MA_FORMAT_INT:
+ case CFM_CCM_MA_FORMAT_VPN:
+ default:
+ print_unknown_data(ndo, ma_name, "\n\t ", ma_namelength);
+ }
+ break;
+
+ case CFM_OPCODE_LTM:
+ msg_ptr.cfm_ltm = (const struct cfm_ltm_t *)tptr;
+ if (first_tlv_offset < sizeof(*msg_ptr.cfm_ltm)) {
+ ND_PRINT(" (too small 4, must be >= %zu)",
+ sizeof(*msg_ptr.cfm_ltm));
+ return;
+ }
+ if (tlen < sizeof(*msg_ptr.cfm_ltm))
+ goto tooshort;
+ ND_TCHECK_SIZE(msg_ptr.cfm_ltm);
+
+ ND_PRINT(", Flags [%s]",
+ bittok2str(cfm_ltm_flag_values, "none", flags));
+
+ ND_PRINT("\n\t Transaction-ID 0x%08x, ttl %u",
+ GET_BE_U_4(msg_ptr.cfm_ltm->transaction_id),
+ GET_U_1(msg_ptr.cfm_ltm->ttl));
+
+ ND_PRINT("\n\t Original-MAC %s, Target-MAC %s",
+ GET_ETHERADDR_STRING(msg_ptr.cfm_ltm->original_mac),
+ GET_ETHERADDR_STRING(msg_ptr.cfm_ltm->target_mac));
+ break;
+
+ case CFM_OPCODE_LTR:
+ msg_ptr.cfm_ltr = (const struct cfm_ltr_t *)tptr;
+ if (first_tlv_offset < sizeof(*msg_ptr.cfm_ltr)) {
+ ND_PRINT(" (too small 5, must be >= %zu)",
+ sizeof(*msg_ptr.cfm_ltr));
+ return;
+ }
+ if (tlen < sizeof(*msg_ptr.cfm_ltr))
+ goto tooshort;
+ ND_TCHECK_SIZE(msg_ptr.cfm_ltr);
+
+ ND_PRINT(", Flags [%s]",
+ bittok2str(cfm_ltr_flag_values, "none", flags));
+
+ ND_PRINT("\n\t Transaction-ID 0x%08x, ttl %u",
+ GET_BE_U_4(msg_ptr.cfm_ltr->transaction_id),
+ GET_U_1(msg_ptr.cfm_ltr->ttl));
+
+ ND_PRINT("\n\t Replay-Action %s (%u)",
+ tok2str(cfm_ltr_replay_action_values,
+ "Unknown",
+ GET_U_1(msg_ptr.cfm_ltr->replay_action)),
+ GET_U_1(msg_ptr.cfm_ltr->replay_action));
+ break;
+
+ /*
+ * No message decoder yet.
+ * Hexdump everything up until the start of the TLVs
+ */
+ case CFM_OPCODE_LBR:
+ case CFM_OPCODE_LBM:
+ default:
+ print_unknown_data(ndo, tptr, "\n\t ",
+ tlen - first_tlv_offset);
+ break;
+ }
+
+ tptr += first_tlv_offset;
+ tlen -= first_tlv_offset;
+
+ while (tlen > 0) {
+ cfm_tlv_header = (const struct cfm_tlv_header_t *)tptr;
+
+ /* Enough to read the tlv type ? */
+ cfm_tlv_type = GET_U_1(cfm_tlv_header->type);
+
+ ND_PRINT("\n\t%s TLV (0x%02x)",
+ tok2str(cfm_tlv_values, "Unknown", cfm_tlv_type),
+ cfm_tlv_type);
+
+ if (cfm_tlv_type == CFM_TLV_END) {
+ /* Length is "Not present if the Type field is 0." */
+ return;
+ }
+
+ /* do we have the full tlv header ? */
+ if (tlen < sizeof(struct cfm_tlv_header_t))
+ goto tooshort;
+ ND_TCHECK_LEN(tptr, sizeof(struct cfm_tlv_header_t));
+ cfm_tlv_len=GET_BE_U_2(cfm_tlv_header->length);
+
+ ND_PRINT(", length %u", cfm_tlv_len);
+
+ tptr += sizeof(struct cfm_tlv_header_t);
+ tlen -= sizeof(struct cfm_tlv_header_t);
+ tlv_ptr = tptr;
+
+ /* do we have the full tlv ? */
+ if (tlen < cfm_tlv_len)
+ goto tooshort;
+ ND_TCHECK_LEN(tptr, cfm_tlv_len);
+ hexdump = FALSE;
+
+ switch(cfm_tlv_type) {
+ case CFM_TLV_PORT_STATUS:
+ if (cfm_tlv_len < 1) {
+ ND_PRINT(" (too short, must be >= 1)");
+ return;
+ }
+ ND_PRINT(", Status: %s (%u)",
+ tok2str(cfm_tlv_port_status_values, "Unknown", GET_U_1(tptr)),
+ GET_U_1(tptr));
+ break;
+
+ case CFM_TLV_INTERFACE_STATUS:
+ if (cfm_tlv_len < 1) {
+ ND_PRINT(" (too short, must be >= 1)");
+ return;
+ }
+ ND_PRINT(", Status: %s (%u)",
+ tok2str(cfm_tlv_interface_status_values, "Unknown", GET_U_1(tptr)),
+ GET_U_1(tptr));
+ break;
+
+ case CFM_TLV_PRIVATE:
+ if (cfm_tlv_len < 4) {
+ ND_PRINT(" (too short, must be >= 4)");
+ return;
+ }
+ ND_PRINT(", Vendor: %s (%u), Sub-Type %u",
+ tok2str(oui_values,"Unknown", GET_BE_U_3(tptr)),
+ GET_BE_U_3(tptr),
+ GET_U_1(tptr + 3));
+ hexdump = TRUE;
+ break;
+
+ case CFM_TLV_SENDER_ID:
+ {
+ u_int chassis_id_type, chassis_id_length;
+ u_int mgmt_addr_length;
+
+ if (cfm_tlv_len < 1) {
+ ND_PRINT(" (too short, must be >= 1)");
+ goto next_tlv;
+ }
+
+ /*
+ * Get the Chassis ID length and check it.
+ * IEEE 802.1Q-2014 Section 21.5.3.1
+ */
+ chassis_id_length = GET_U_1(tptr);
+ tptr++;
+ tlen--;
+ cfm_tlv_len--;
+
+ if (chassis_id_length) {
+ /*
+ * IEEE 802.1Q-2014 Section 21.5.3.2: Chassis ID Subtype, references
+ * IEEE 802.1AB-2005 Section 9.5.2.2, subsequently
+ * IEEE 802.1AB-2016 Section 8.5.2.2: chassis ID subtype
+ */
+ if (cfm_tlv_len < 1) {
+ ND_PRINT("\n\t (TLV too short)");
+ goto next_tlv;
+ }
+ chassis_id_type = GET_U_1(tptr);
+ cfm_tlv_len--;
+ ND_PRINT("\n\t Chassis-ID Type %s (%u), Chassis-ID length %u",
+ tok2str(cfm_tlv_senderid_chassisid_values,
+ "Unknown",
+ chassis_id_type),
+ chassis_id_type,
+ chassis_id_length);
+
+ if (cfm_tlv_len < chassis_id_length) {
+ ND_PRINT("\n\t (TLV too short)");
+ goto next_tlv;
+ }
+
+ /* IEEE 802.1Q-2014 Section 21.5.3.3: Chassis ID */
+ switch (chassis_id_type) {
+ case CFM_CHASSIS_ID_MAC_ADDRESS:
+ if (chassis_id_length != MAC_ADDR_LEN) {
+ ND_PRINT(" (invalid MAC address length)");
+ hexdump = TRUE;
+ break;
+ }
+ ND_PRINT("\n\t MAC %s", GET_ETHERADDR_STRING(tptr + 1));
+ break;
+
+ case CFM_CHASSIS_ID_NETWORK_ADDRESS:
+ hexdump |= cfm_network_addr_print(ndo, tptr + 1, chassis_id_length);
+ break;
+
+ case CFM_CHASSIS_ID_INTERFACE_NAME: /* fall through */
+ case CFM_CHASSIS_ID_INTERFACE_ALIAS:
+ case CFM_CHASSIS_ID_LOCAL:
+ case CFM_CHASSIS_ID_CHASSIS_COMPONENT:
+ case CFM_CHASSIS_ID_PORT_COMPONENT:
+ nd_printjnp(ndo, tptr + 1, chassis_id_length);
+ break;
+
+ default:
+ hexdump = TRUE;
+ break;
+ }
+ cfm_tlv_len -= chassis_id_length;
+
+ tptr += 1 + chassis_id_length;
+ tlen -= 1 + chassis_id_length;
+ }
+
+ /*
+ * Check if there is a Management Address.
+ * IEEE 802.1Q-2014 Section 21.5.3.4: Management Address Domain Length
+ * This and all subsequent fields are not present if the TLV length
+ * allows only the above fields.
+ */
+ if (cfm_tlv_len == 0) {
+ /* No, there isn't; we're done. */
+ break;
+ }
+
+ /* Here mgmt_addr_length stands for the management domain length. */
+ mgmt_addr_length = GET_U_1(tptr);
+ tptr++;
+ tlen--;
+ cfm_tlv_len--;
+ ND_PRINT("\n\t Management Address Domain Length %u", mgmt_addr_length);
+ if (mgmt_addr_length) {
+ /* IEEE 802.1Q-2014 Section 21.5.3.5: Management Address Domain */
+ if (cfm_tlv_len < mgmt_addr_length) {
+ ND_PRINT("\n\t (TLV too short)");
+ goto next_tlv;
+ }
+ cfm_tlv_len -= mgmt_addr_length;
+ /*
+ * XXX - this is an OID; print it as such.
+ */
+ hex_print(ndo, "\n\t Management Address Domain: ", tptr, mgmt_addr_length);
+ tptr += mgmt_addr_length;
+ tlen -= mgmt_addr_length;
+
+ /*
+ * IEEE 802.1Q-2014 Section 21.5.3.6: Management Address Length
+ * This field is present if Management Address Domain Length is not 0.
+ */
+ if (cfm_tlv_len < 1) {
+ ND_PRINT(" (Management Address Length is missing)");
+ hexdump = TRUE;
+ break;
+ }
+
+ /* Here mgmt_addr_length stands for the management address length. */
+ mgmt_addr_length = GET_U_1(tptr);
+ tptr++;
+ tlen--;
+ cfm_tlv_len--;
+ ND_PRINT("\n\t Management Address Length %u", mgmt_addr_length);
+ if (mgmt_addr_length) {
+ /* IEEE 802.1Q-2014 Section 21.5.3.7: Management Address */
+ if (cfm_tlv_len < mgmt_addr_length) {
+ ND_PRINT("\n\t (TLV too short)");
+ return;
+ }
+ cfm_tlv_len -= mgmt_addr_length;
+ /*
+ * XXX - this is a TransportDomain; print it as such.
+ */
+ hex_print(ndo, "\n\t Management Address: ", tptr, mgmt_addr_length);
+ tptr += mgmt_addr_length;
+ tlen -= mgmt_addr_length;
+ }
+ }
+ break;
+ }
+
+ /*
+ * FIXME those are the defined TLVs that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+
+ case CFM_TLV_DATA:
+ case CFM_TLV_REPLY_INGRESS:
+ case CFM_TLV_REPLY_EGRESS:
+ default:
+ hexdump = TRUE;
+ break;
+ }
+ /* do we want to see an additional hexdump ? */
+ if (hexdump || ndo->ndo_vflag > 1)
+ print_unknown_data(ndo, tlv_ptr, "\n\t ", cfm_tlv_len);
+
+next_tlv:
+ tptr+=cfm_tlv_len;
+ tlen-=cfm_tlv_len;
+ }
+ return;
+
+tooshort:
+ ND_PRINT("\n\t\t packet is too short");
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-chdlc.c b/print-chdlc.c
new file mode 100644
index 0000000..235675d
--- /dev/null
+++ b/print-chdlc.c
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Cisco HDLC printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "ethertype.h"
+#include "extract.h"
+#include "chdlc.h"
+#include "nlpid.h"
+
+static void chdlc_slarp_print(netdissect_options *, const u_char *, u_int);
+
+static const struct tok chdlc_cast_values[] = {
+ { CHDLC_UNICAST, "unicast" },
+ { CHDLC_BCAST, "bcast" },
+ { 0, NULL}
+};
+
+
+/* Standard CHDLC printer */
+void
+chdlc_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ ndo->ndo_protocol = "chdlc";
+ ndo->ndo_ll_hdr_len += chdlc_print(ndo, p, h->len);
+}
+
+u_int
+chdlc_print(netdissect_options *ndo, const u_char *p, u_int length)
+{
+ u_int proto;
+ const u_char *bp = p;
+
+ ndo->ndo_protocol = "chdlc";
+ if (length < CHDLC_HDRLEN)
+ goto trunc;
+ proto = GET_BE_U_2(p + 2);
+ if (ndo->ndo_eflag) {
+ ND_PRINT("%s, ethertype %s (0x%04x), length %u: ",
+ tok2str(chdlc_cast_values, "0x%02x", GET_U_1(p)),
+ tok2str(ethertype_values, "Unknown", proto),
+ proto,
+ length);
+ }
+
+ length -= CHDLC_HDRLEN;
+ p += CHDLC_HDRLEN;
+
+ switch (proto) {
+ case ETHERTYPE_IP:
+ ip_print(ndo, p, length);
+ break;
+ case ETHERTYPE_IPV6:
+ ip6_print(ndo, p, length);
+ break;
+ case CHDLC_TYPE_SLARP:
+ chdlc_slarp_print(ndo, p, length);
+ break;
+ case ETHERTYPE_MPLS:
+ case ETHERTYPE_MPLS_MULTI:
+ mpls_print(ndo, p, length);
+ break;
+ case ETHERTYPE_ISO:
+ /* is the fudge byte set ? lets verify by spotting ISO headers */
+ if (length < 2)
+ goto trunc;
+ if (GET_U_1(p + 1) == NLPID_CLNP ||
+ GET_U_1(p + 1) == NLPID_ESIS ||
+ GET_U_1(p + 1) == NLPID_ISIS)
+ isoclns_print(ndo, p + 1, length - 1);
+ else
+ isoclns_print(ndo, p, length);
+ break;
+ default:
+ if (!ndo->ndo_eflag)
+ ND_PRINT("unknown CHDLC protocol (0x%04x)", proto);
+ break;
+ }
+
+ return (CHDLC_HDRLEN);
+
+trunc:
+ nd_print_trunc(ndo);
+ return (ND_BYTES_AVAILABLE_AFTER(bp));
+}
+
+/*
+ * The fixed-length portion of a SLARP packet.
+ */
+struct cisco_slarp {
+ nd_uint32_t code;
+#define SLARP_REQUEST 0
+#define SLARP_REPLY 1
+#define SLARP_KEEPALIVE 2
+ union {
+ struct {
+ uint8_t addr[4];
+ uint8_t mask[4];
+ } addr;
+ struct {
+ nd_uint32_t myseq;
+ nd_uint32_t yourseq;
+ nd_uint16_t rel;
+ } keep;
+ } un;
+};
+
+#define SLARP_MIN_LEN 14
+#define SLARP_MAX_LEN 18
+
+static void
+chdlc_slarp_print(netdissect_options *ndo, const u_char *cp, u_int length)
+{
+ const struct cisco_slarp *slarp;
+ u_int sec,min,hrs,days;
+
+ ndo->ndo_protocol = "chdlc_slarp";
+ ND_PRINT("SLARP (length: %u), ",length);
+ if (length < SLARP_MIN_LEN)
+ goto trunc;
+
+ slarp = (const struct cisco_slarp *)cp;
+ ND_TCHECK_LEN(slarp, SLARP_MIN_LEN);
+ switch (GET_BE_U_4(slarp->code)) {
+ case SLARP_REQUEST:
+ ND_PRINT("request");
+ /*
+ * At least according to William "Chops" Westfield's
+ * message in
+ *
+ * https://web.archive.org/web/20190725151313/www.nethelp.no/net/cisco-hdlc.txt
+ *
+ * the address and mask aren't used in requests -
+ * they're just zero.
+ */
+ break;
+ case SLARP_REPLY:
+ ND_PRINT("reply %s/%s",
+ GET_IPADDR_STRING(slarp->un.addr.addr),
+ GET_IPADDR_STRING(slarp->un.addr.mask));
+ break;
+ case SLARP_KEEPALIVE:
+ ND_PRINT("keepalive: mineseen=0x%08x, yourseen=0x%08x, reliability=0x%04x",
+ GET_BE_U_4(slarp->un.keep.myseq),
+ GET_BE_U_4(slarp->un.keep.yourseq),
+ GET_BE_U_2(slarp->un.keep.rel));
+
+ if (length >= SLARP_MAX_LEN) { /* uptime-stamp is optional */
+ cp += SLARP_MIN_LEN;
+ sec = GET_BE_U_4(cp) / 1000;
+ min = sec / 60; sec -= min * 60;
+ hrs = min / 60; min -= hrs * 60;
+ days = hrs / 24; hrs -= days * 24;
+ ND_PRINT(", link uptime=%ud%uh%um%us",days,hrs,min,sec);
+ }
+ break;
+ default:
+ ND_PRINT("0x%02x unknown", GET_BE_U_4(slarp->code));
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo,cp+4,"\n\t",length-4);
+ break;
+ }
+
+ if (SLARP_MAX_LEN < length && ndo->ndo_vflag)
+ ND_PRINT(", (trailing junk: %u bytes)", length - SLARP_MAX_LEN);
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo,cp+4,"\n\t",length-4);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-cip.c b/print-cip.c
new file mode 100644
index 0000000..b8ef77f
--- /dev/null
+++ b/print-cip.c
@@ -0,0 +1,87 @@
+/*
+ * Marko Kiiskila carnil@cs.tut.fi
+ *
+ * Tampere University of Technology - Telecommunications Laboratory
+ *
+ * Permission to use, copy, modify and distribute this
+ * software and its documentation is hereby granted,
+ * provided that both the copyright notice and this
+ * permission notice appear in all copies of the software,
+ * derivative works or modified versions, and any portions
+ * thereof, that both notices appear in supporting
+ * documentation, and that the use of this software is
+ * acknowledged in any publications resulting from using
+ * the software.
+ *
+ * TUT ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION AND DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS
+ * SOFTWARE.
+ *
+ */
+
+/* \summary: Linux Classical IP over ATM printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+
+static const unsigned char rfcllc[] = {
+ 0xaa, /* DSAP: non-ISO */
+ 0xaa, /* SSAP: non-ISO */
+ 0x03, /* Ctrl: Unnumbered Information Command PDU */
+ 0x00, /* OUI: EtherType */
+ 0x00,
+ 0x00 };
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the LLC/SNAP or raw header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+cip_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+ int llc_hdrlen;
+
+ ndo->ndo_protocol = "cip";
+
+ if (ndo->ndo_eflag)
+ /*
+ * There is no MAC-layer header, so just print the length.
+ */
+ ND_PRINT("%u: ", length);
+
+ ND_TCHECK_LEN(p, sizeof(rfcllc));
+ if (memcmp(rfcllc, p, sizeof(rfcllc)) == 0) {
+ /*
+ * LLC header is present. Try to print it & higher layers.
+ */
+ llc_hdrlen = llc_print(ndo, p, length, caplen, NULL, NULL);
+ if (llc_hdrlen < 0) {
+ /* packet type not known, print raw packet */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ llc_hdrlen = -llc_hdrlen;
+ }
+ } else {
+ /*
+ * LLC header is absent; treat it as just IP.
+ */
+ llc_hdrlen = 0;
+ ip_print(ndo, p, length);
+ }
+
+ ndo->ndo_ll_hdr_len += llc_hdrlen;
+}
diff --git a/print-cnfp.c b/print-cnfp.c
new file mode 100644
index 0000000..101148f
--- /dev/null
+++ b/print-cnfp.c
@@ -0,0 +1,486 @@
+/* $OpenBSD: print-cnfp.c,v 1.2 1998/06/25 20:26:59 mickey Exp $ */
+
+/*
+ * Copyright (c) 1998 Michael Shalayeff
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Michael Shalayeff.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: Cisco NetFlow protocol printer */
+
+/*
+ * Cisco NetFlow protocol
+ *
+ * See
+ *
+ * https://www.cisco.com/c/en/us/td/docs/net_mgmt/netflow_collection_engine/3-6/user/guide/format.html#wp1005892
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "tcp.h"
+#include "ipproto.h"
+
+struct nfhdr_v1 {
+ nd_uint16_t version; /* version number */
+ nd_uint16_t count; /* # of records */
+ nd_uint32_t msys_uptime;
+ nd_uint32_t utc_sec;
+ nd_uint32_t utc_nsec;
+};
+
+struct nfrec_v1 {
+ nd_ipv4 src_ina;
+ nd_ipv4 dst_ina;
+ nd_ipv4 nhop_ina;
+ nd_uint16_t input; /* SNMP index of input interface */
+ nd_uint16_t output; /* SNMP index of output interface */
+ nd_uint32_t packets; /* packets in the flow */
+ nd_uint32_t octets; /* layer 3 octets in the packets of the flow */
+ nd_uint32_t start_time; /* sys_uptime value at start of flow */
+ nd_uint32_t last_time; /* sys_uptime value when last packet of flow was received */
+ nd_uint16_t srcport; /* TCP/UDP source port or equivalent */
+ nd_uint16_t dstport; /* TCP/UDP source port or equivalent */
+ nd_byte pad1[2]; /* pad */
+ nd_uint8_t proto; /* IP protocol type */
+ nd_uint8_t tos; /* IP type of service */
+ nd_uint8_t tcp_flags; /* cumulative OR of TCP flags */
+ nd_byte pad[3]; /* padding */
+ nd_uint32_t reserved; /* unused */
+};
+
+struct nfhdr_v5 {
+ nd_uint16_t version; /* version number */
+ nd_uint16_t count; /* # of records */
+ nd_uint32_t msys_uptime;
+ nd_uint32_t utc_sec;
+ nd_uint32_t utc_nsec;
+ nd_uint32_t sequence; /* flow sequence number */
+ nd_uint8_t engine_type; /* type of flow-switching engine */
+ nd_uint8_t engine_id; /* slot number of the flow-switching engine */
+ nd_uint16_t sampling_interval; /* sampling mode and interval */
+};
+
+struct nfrec_v5 {
+ nd_ipv4 src_ina;
+ nd_ipv4 dst_ina;
+ nd_ipv4 nhop_ina;
+ nd_uint16_t input; /* SNMP index of input interface */
+ nd_uint16_t output; /* SNMP index of output interface */
+ nd_uint32_t packets; /* packets in the flow */
+ nd_uint32_t octets; /* layer 3 octets in the packets of the flow */
+ nd_uint32_t start_time; /* sys_uptime value at start of flow */
+ nd_uint32_t last_time; /* sys_uptime value when last packet of flow was received */
+ nd_uint16_t srcport; /* TCP/UDP source port or equivalent */
+ nd_uint16_t dstport; /* TCP/UDP source port or equivalent */
+ nd_byte pad1; /* pad */
+ nd_uint8_t tcp_flags; /* cumulative OR of TCP flags */
+ nd_uint8_t proto; /* IP protocol type */
+ nd_uint8_t tos; /* IP type of service */
+ nd_uint16_t src_as; /* AS number of the source */
+ nd_uint16_t dst_as; /* AS number of the destination */
+ nd_uint8_t src_mask; /* source address mask bits */
+ nd_uint8_t dst_mask; /* destination address prefix mask bits */
+ nd_byte pad2[2];
+ nd_ipv4 peer_nexthop; /* v6: IP address of the nexthop within the peer (FIB)*/
+};
+
+struct nfhdr_v6 {
+ nd_uint16_t version; /* version number */
+ nd_uint16_t count; /* # of records */
+ nd_uint32_t msys_uptime;
+ nd_uint32_t utc_sec;
+ nd_uint32_t utc_nsec;
+ nd_uint32_t sequence; /* v5 flow sequence number */
+ nd_uint32_t reserved; /* v5 only */
+};
+
+struct nfrec_v6 {
+ nd_ipv4 src_ina;
+ nd_ipv4 dst_ina;
+ nd_ipv4 nhop_ina;
+ nd_uint16_t input; /* SNMP index of input interface */
+ nd_uint16_t output; /* SNMP index of output interface */
+ nd_uint32_t packets; /* packets in the flow */
+ nd_uint32_t octets; /* layer 3 octets in the packets of the flow */
+ nd_uint32_t start_time; /* sys_uptime value at start of flow */
+ nd_uint32_t last_time; /* sys_uptime value when last packet of flow was received */
+ nd_uint16_t srcport; /* TCP/UDP source port or equivalent */
+ nd_uint16_t dstport; /* TCP/UDP source port or equivalent */
+ nd_byte pad1; /* pad */
+ nd_uint8_t tcp_flags; /* cumulative OR of TCP flags */
+ nd_uint8_t proto; /* IP protocol type */
+ nd_uint8_t tos; /* IP type of service */
+ nd_uint16_t src_as; /* AS number of the source */
+ nd_uint16_t dst_as; /* AS number of the destination */
+ nd_uint8_t src_mask; /* source address mask bits */
+ nd_uint8_t dst_mask; /* destination address prefix mask bits */
+ nd_uint16_t flags;
+ nd_ipv4 peer_nexthop; /* v6: IP address of the nexthop within the peer (FIB)*/
+};
+
+static void
+cnfp_v1_print(netdissect_options *ndo, const u_char *cp)
+{
+ const struct nfhdr_v1 *nh;
+ const struct nfrec_v1 *nr;
+ const char *p_name;
+ uint8_t proto;
+ u_int nrecs, ver;
+#if 0
+ time_t t;
+#endif
+
+ nh = (const struct nfhdr_v1 *)cp;
+ ND_TCHECK_SIZE(nh);
+
+ ver = GET_BE_U_2(nh->version);
+ nrecs = GET_BE_U_4(nh->count);
+#if 0
+ /*
+ * This is seconds since the UN*X epoch, and is followed by
+ * nanoseconds. XXX - format it, rather than just dumping the
+ * raw seconds-since-the-Epoch.
+ */
+ t = GET_BE_U_4(nh->utc_sec);
+#endif
+
+ ND_PRINT("NetFlow v%x, %u.%03u uptime, %u.%09u, ", ver,
+ GET_BE_U_4(nh->msys_uptime)/1000,
+ GET_BE_U_4(nh->msys_uptime)%1000,
+ GET_BE_U_4(nh->utc_sec), GET_BE_U_4(nh->utc_nsec));
+
+ nr = (const struct nfrec_v1 *)&nh[1];
+
+ ND_PRINT("%2u recs", nrecs);
+
+ for (; nrecs != 0; nr++, nrecs--) {
+ char buf[20];
+ char asbuf[20];
+
+ /*
+ * Make sure we have the entire record.
+ */
+ ND_TCHECK_SIZE(nr);
+ ND_PRINT("\n started %u.%03u, last %u.%03u",
+ GET_BE_U_4(nr->start_time)/1000,
+ GET_BE_U_4(nr->start_time)%1000,
+ GET_BE_U_4(nr->last_time)/1000,
+ GET_BE_U_4(nr->last_time)%1000);
+
+ asbuf[0] = buf[0] = '\0';
+ ND_PRINT("\n %s%s%s:%u ",
+ intoa(GET_IPV4_TO_NETWORK_ORDER(nr->src_ina)),
+ buf, asbuf,
+ GET_BE_U_2(nr->srcport));
+
+ ND_PRINT("> %s%s%s:%u ",
+ intoa(GET_IPV4_TO_NETWORK_ORDER(nr->dst_ina)),
+ buf, asbuf,
+ GET_BE_U_2(nr->dstport));
+
+ ND_PRINT(">> %s\n ",
+ intoa(GET_IPV4_TO_NETWORK_ORDER(nr->nhop_ina)));
+
+ proto = GET_U_1(nr->proto);
+ if (!ndo->ndo_nflag && (p_name = netdb_protoname(proto)) != NULL)
+ ND_PRINT("%s ", p_name);
+ else
+ ND_PRINT("%u ", proto);
+
+ /* tcp flags for tcp only */
+ if (proto == IPPROTO_TCP) {
+ u_int flags;
+ flags = GET_U_1(nr->tcp_flags);
+ ND_PRINT("%s%s%s%s%s%s%s",
+ flags & TH_FIN ? "F" : "",
+ flags & TH_SYN ? "S" : "",
+ flags & TH_RST ? "R" : "",
+ flags & TH_PUSH ? "P" : "",
+ flags & TH_ACK ? "A" : "",
+ flags & TH_URG ? "U" : "",
+ flags ? " " : "");
+ }
+
+ buf[0]='\0';
+ ND_PRINT("tos %u, %u (%u octets) %s",
+ GET_U_1(nr->tos),
+ GET_BE_U_4(nr->packets),
+ GET_BE_U_4(nr->octets), buf);
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+cnfp_v5_print(netdissect_options *ndo, const u_char *cp)
+{
+ const struct nfhdr_v5 *nh;
+ const struct nfrec_v5 *nr;
+ const char *p_name;
+ uint8_t proto;
+ u_int nrecs, ver;
+#if 0
+ time_t t;
+#endif
+
+ nh = (const struct nfhdr_v5 *)cp;
+ ND_TCHECK_SIZE(nh);
+
+ ver = GET_BE_U_2(nh->version);
+ nrecs = GET_BE_U_4(nh->count);
+#if 0
+ /*
+ * This is seconds since the UN*X epoch, and is followed by
+ * nanoseconds. XXX - format it, rather than just dumping the
+ * raw seconds-since-the-Epoch.
+ */
+ t = GET_BE_U_4(nh->utc_sec);
+#endif
+
+ ND_PRINT("NetFlow v%x, %u.%03u uptime, %u.%09u, ", ver,
+ GET_BE_U_4(nh->msys_uptime)/1000,
+ GET_BE_U_4(nh->msys_uptime)%1000,
+ GET_BE_U_4(nh->utc_sec), GET_BE_U_4(nh->utc_nsec));
+
+ ND_PRINT("#%u, ", GET_BE_U_4(nh->sequence));
+ nr = (const struct nfrec_v5 *)&nh[1];
+
+ ND_PRINT("%2u recs", nrecs);
+
+ for (; nrecs != 0; nr++, nrecs--) {
+ char buf[20];
+ char asbuf[20];
+
+ /*
+ * Make sure we have the entire record.
+ */
+ ND_TCHECK_SIZE(nr);
+ ND_PRINT("\n started %u.%03u, last %u.%03u",
+ GET_BE_U_4(nr->start_time)/1000,
+ GET_BE_U_4(nr->start_time)%1000,
+ GET_BE_U_4(nr->last_time)/1000,
+ GET_BE_U_4(nr->last_time)%1000);
+
+ asbuf[0] = buf[0] = '\0';
+ snprintf(buf, sizeof(buf), "/%u", GET_U_1(nr->src_mask));
+ snprintf(asbuf, sizeof(asbuf), ":%u",
+ GET_BE_U_2(nr->src_as));
+ ND_PRINT("\n %s%s%s:%u ",
+ intoa(GET_IPV4_TO_NETWORK_ORDER(nr->src_ina)),
+ buf, asbuf,
+ GET_BE_U_2(nr->srcport));
+
+ snprintf(buf, sizeof(buf), "/%u", GET_U_1(nr->dst_mask));
+ snprintf(asbuf, sizeof(asbuf), ":%u",
+ GET_BE_U_2(nr->dst_as));
+ ND_PRINT("> %s%s%s:%u ",
+ intoa(GET_IPV4_TO_NETWORK_ORDER(nr->dst_ina)),
+ buf, asbuf,
+ GET_BE_U_2(nr->dstport));
+
+ ND_PRINT(">> %s\n ",
+ intoa(GET_IPV4_TO_NETWORK_ORDER(nr->nhop_ina)));
+
+ proto = GET_U_1(nr->proto);
+ if (!ndo->ndo_nflag && (p_name = netdb_protoname(proto)) != NULL)
+ ND_PRINT("%s ", p_name);
+ else
+ ND_PRINT("%u ", proto);
+
+ /* tcp flags for tcp only */
+ if (proto == IPPROTO_TCP) {
+ u_int flags;
+ flags = GET_U_1(nr->tcp_flags);
+ ND_PRINT("%s%s%s%s%s%s%s",
+ flags & TH_FIN ? "F" : "",
+ flags & TH_SYN ? "S" : "",
+ flags & TH_RST ? "R" : "",
+ flags & TH_PUSH ? "P" : "",
+ flags & TH_ACK ? "A" : "",
+ flags & TH_URG ? "U" : "",
+ flags ? " " : "");
+ }
+
+ buf[0]='\0';
+ ND_PRINT("tos %u, %u (%u octets) %s",
+ GET_U_1(nr->tos),
+ GET_BE_U_4(nr->packets),
+ GET_BE_U_4(nr->octets), buf);
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+cnfp_v6_print(netdissect_options *ndo, const u_char *cp)
+{
+ const struct nfhdr_v6 *nh;
+ const struct nfrec_v6 *nr;
+ const char *p_name;
+ uint8_t proto;
+ u_int nrecs, ver;
+#if 0
+ time_t t;
+#endif
+
+ nh = (const struct nfhdr_v6 *)cp;
+ ND_TCHECK_SIZE(nh);
+
+ ver = GET_BE_U_2(nh->version);
+ nrecs = GET_BE_U_4(nh->count);
+#if 0
+ /*
+ * This is seconds since the UN*X epoch, and is followed by
+ * nanoseconds. XXX - format it, rather than just dumping the
+ * raw seconds-since-the-Epoch.
+ */
+ t = GET_BE_U_4(nh->utc_sec);
+#endif
+
+ ND_PRINT("NetFlow v%x, %u.%03u uptime, %u.%09u, ", ver,
+ GET_BE_U_4(nh->msys_uptime)/1000,
+ GET_BE_U_4(nh->msys_uptime)%1000,
+ GET_BE_U_4(nh->utc_sec), GET_BE_U_4(nh->utc_nsec));
+
+ ND_PRINT("#%u, ", GET_BE_U_4(nh->sequence));
+ nr = (const struct nfrec_v6 *)&nh[1];
+
+ ND_PRINT("%2u recs", nrecs);
+
+ for (; nrecs != 0; nr++, nrecs--) {
+ char buf[20];
+ char asbuf[20];
+
+ /*
+ * Make sure we have the entire record.
+ */
+ ND_TCHECK_SIZE(nr);
+ ND_PRINT("\n started %u.%03u, last %u.%03u",
+ GET_BE_U_4(nr->start_time)/1000,
+ GET_BE_U_4(nr->start_time)%1000,
+ GET_BE_U_4(nr->last_time)/1000,
+ GET_BE_U_4(nr->last_time)%1000);
+
+ asbuf[0] = buf[0] = '\0';
+ snprintf(buf, sizeof(buf), "/%u", GET_U_1(nr->src_mask));
+ snprintf(asbuf, sizeof(asbuf), ":%u",
+ GET_BE_U_2(nr->src_as));
+ ND_PRINT("\n %s%s%s:%u ",
+ intoa(GET_IPV4_TO_NETWORK_ORDER(nr->src_ina)),
+ buf, asbuf,
+ GET_BE_U_2(nr->srcport));
+
+ snprintf(buf, sizeof(buf), "/%u", GET_U_1(nr->dst_mask));
+ snprintf(asbuf, sizeof(asbuf), ":%u",
+ GET_BE_U_2(nr->dst_as));
+ ND_PRINT("> %s%s%s:%u ",
+ intoa(GET_IPV4_TO_NETWORK_ORDER(nr->dst_ina)),
+ buf, asbuf,
+ GET_BE_U_2(nr->dstport));
+
+ ND_PRINT(">> %s\n ",
+ intoa(GET_IPV4_TO_NETWORK_ORDER(nr->nhop_ina)));
+
+ proto = GET_U_1(nr->proto);
+ if (!ndo->ndo_nflag && (p_name = netdb_protoname(proto)) != NULL)
+ ND_PRINT("%s ", p_name);
+ else
+ ND_PRINT("%u ", proto);
+
+ /* tcp flags for tcp only */
+ if (proto == IPPROTO_TCP) {
+ u_int flags;
+ flags = GET_U_1(nr->tcp_flags);
+ ND_PRINT("%s%s%s%s%s%s%s",
+ flags & TH_FIN ? "F" : "",
+ flags & TH_SYN ? "S" : "",
+ flags & TH_RST ? "R" : "",
+ flags & TH_PUSH ? "P" : "",
+ flags & TH_ACK ? "A" : "",
+ flags & TH_URG ? "U" : "",
+ flags ? " " : "");
+ }
+
+ buf[0]='\0';
+ snprintf(buf, sizeof(buf), "(%u<>%u encaps)",
+ (GET_BE_U_2(nr->flags) >> 8) & 0xff,
+ (GET_BE_U_2(nr->flags)) & 0xff);
+ ND_PRINT("tos %u, %u (%u octets) %s",
+ GET_U_1(nr->tos),
+ GET_BE_U_4(nr->packets),
+ GET_BE_U_4(nr->octets), buf);
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+void
+cnfp_print(netdissect_options *ndo, const u_char *cp)
+{
+ int ver;
+
+ /*
+ * First 2 bytes are the version number.
+ */
+ ndo->ndo_protocol = "cnfp";
+ ver = GET_BE_U_2(cp);
+ switch (ver) {
+
+ case 1:
+ cnfp_v1_print(ndo, cp);
+ break;
+
+ case 5:
+ cnfp_v5_print(ndo, cp);
+ break;
+
+ case 6:
+ cnfp_v6_print(ndo, cp);
+ break;
+
+ default:
+ ND_PRINT("NetFlow v%x", ver);
+ break;
+ }
+}
diff --git a/print-dccp.c b/print-dccp.c
new file mode 100644
index 0000000..3923457
--- /dev/null
+++ b/print-dccp.c
@@ -0,0 +1,705 @@
+/*
+ * Copyright (C) Arnaldo Carvalho de Melo 2004
+ * Copyright (C) Ian McDonald 2005
+ * Copyright (C) Yoshifumi Nishida 2005
+ *
+ * This software may be distributed either under the terms of the
+ * BSD-style license that accompanies tcpdump or the GNU GPL version 2
+ */
+
+/* \summary: Datagram Congestion Control Protocol (DCCP) printer */
+
+/* specification: RFC 4340 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+#include "ip.h"
+#include "ip6.h"
+#include "ipproto.h"
+
+/* RFC4340: Datagram Congestion Control Protocol (DCCP) */
+
+/**
+ * struct dccp_hdr - generic part of DCCP packet header, with a 24-bit
+ * sequence number
+ *
+ * @dccph_sport - Relevant port on the endpoint that sent this packet
+ * @dccph_dport - Relevant port on the other endpoint
+ * @dccph_doff - Data Offset from the start of the DCCP header, in 32-bit words
+ * @dccph_ccval - Used by the HC-Sender CCID
+ * @dccph_cscov - Parts of the packet that are covered by the Checksum field
+ * @dccph_checksum - Internet checksum, depends on dccph_cscov
+ * @dccph_x - 0 = 24 bit sequence number, 1 = 48
+ * @dccph_type - packet type, see DCCP_PKT_ prefixed macros
+ * @dccph_seq - 24-bit sequence number
+ */
+struct dccp_hdr {
+ nd_uint16_t dccph_sport,
+ dccph_dport;
+ nd_uint8_t dccph_doff;
+ nd_uint8_t dccph_ccval_cscov;
+ nd_uint16_t dccph_checksum;
+ nd_uint8_t dccph_xtr;
+ nd_uint24_t dccph_seq;
+};
+
+/**
+ * struct dccp_hdr_ext - generic part of DCCP packet header, with a 48-bit
+ * sequence number
+ *
+ * @dccph_sport - Relevant port on the endpoint that sent this packet
+ * @dccph_dport - Relevant port on the other endpoint
+ * @dccph_doff - Data Offset from the start of the DCCP header, in 32-bit words
+ * @dccph_ccval - Used by the HC-Sender CCID
+ * @dccph_cscov - Parts of the packet that are covered by the Checksum field
+ * @dccph_checksum - Internet checksum, depends on dccph_cscov
+ * @dccph_x - 0 = 24 bit sequence number, 1 = 48
+ * @dccph_type - packet type, see DCCP_PKT_ prefixed macros
+ * @dccph_seq - 48-bit sequence number
+ */
+struct dccp_hdr_ext {
+ nd_uint16_t dccph_sport,
+ dccph_dport;
+ nd_uint8_t dccph_doff;
+ nd_uint8_t dccph_ccval_cscov;
+ nd_uint16_t dccph_checksum;
+ nd_uint8_t dccph_xtr;
+ nd_uint8_t reserved;
+ nd_uint48_t dccph_seq;
+};
+
+#define DCCPH_CCVAL(dh) ((GET_U_1((dh)->dccph_ccval_cscov) >> 4) & 0xF)
+#define DCCPH_CSCOV(dh) (GET_U_1((dh)->dccph_ccval_cscov) & 0xF)
+
+#define DCCPH_X(dh) (GET_U_1((dh)->dccph_xtr) & 1)
+#define DCCPH_TYPE(dh) ((GET_U_1((dh)->dccph_xtr) >> 1) & 0xF)
+
+/**
+ * struct dccp_hdr_request - Connection initiation request header
+ *
+ * @dccph_req_service - Service to which the client app wants to connect
+ */
+struct dccp_hdr_request {
+ nd_uint32_t dccph_req_service;
+};
+
+/**
+ * struct dccp_hdr_response - Connection initiation response header
+ *
+ * @dccph_resp_ack - 48 bit ack number, contains GSR
+ * @dccph_resp_service - Echoes the Service Code on a received DCCP-Request
+ */
+struct dccp_hdr_response {
+ nd_uint64_t dccph_resp_ack; /* always 8 bytes, first 2 reserved */
+ nd_uint32_t dccph_resp_service;
+};
+
+/**
+ * struct dccp_hdr_reset - Unconditionally shut down a connection
+ *
+ * @dccph_resp_ack - 48 bit ack number
+ * @dccph_reset_service - Echoes the Service Code on a received DCCP-Request
+ */
+struct dccp_hdr_reset {
+ nd_uint64_t dccph_reset_ack; /* always 8 bytes, first 2 reserved */
+ nd_uint8_t dccph_reset_code;
+ nd_uint8_t dccph_reset_data1;
+ nd_uint8_t dccph_reset_data2;
+ nd_uint8_t dccph_reset_data3;
+};
+
+enum dccp_pkt_type {
+ DCCP_PKT_REQUEST = 0,
+ DCCP_PKT_RESPONSE,
+ DCCP_PKT_DATA,
+ DCCP_PKT_ACK,
+ DCCP_PKT_DATAACK,
+ DCCP_PKT_CLOSEREQ,
+ DCCP_PKT_CLOSE,
+ DCCP_PKT_RESET,
+ DCCP_PKT_SYNC,
+ DCCP_PKT_SYNCACK
+};
+
+static const struct tok dccp_pkt_type_str[] = {
+ { DCCP_PKT_REQUEST, "DCCP-Request" },
+ { DCCP_PKT_RESPONSE, "DCCP-Response" },
+ { DCCP_PKT_DATA, "DCCP-Data" },
+ { DCCP_PKT_ACK, "DCCP-Ack" },
+ { DCCP_PKT_DATAACK, "DCCP-DataAck" },
+ { DCCP_PKT_CLOSEREQ, "DCCP-CloseReq" },
+ { DCCP_PKT_CLOSE, "DCCP-Close" },
+ { DCCP_PKT_RESET, "DCCP-Reset" },
+ { DCCP_PKT_SYNC, "DCCP-Sync" },
+ { DCCP_PKT_SYNCACK, "DCCP-SyncAck" },
+ { 0, NULL}
+};
+
+enum dccp_reset_codes {
+ DCCP_RESET_CODE_UNSPECIFIED = 0,
+ DCCP_RESET_CODE_CLOSED,
+ DCCP_RESET_CODE_ABORTED,
+ DCCP_RESET_CODE_NO_CONNECTION,
+ DCCP_RESET_CODE_PACKET_ERROR,
+ DCCP_RESET_CODE_OPTION_ERROR,
+ DCCP_RESET_CODE_MANDATORY_ERROR,
+ DCCP_RESET_CODE_CONNECTION_REFUSED,
+ DCCP_RESET_CODE_BAD_SERVICE_CODE,
+ DCCP_RESET_CODE_TOO_BUSY,
+ DCCP_RESET_CODE_BAD_INIT_COOKIE,
+ DCCP_RESET_CODE_AGGRESSION_PENALTY,
+ __DCCP_RESET_CODE_LAST
+};
+
+
+static const char *dccp_reset_codes[] = {
+ "unspecified",
+ "closed",
+ "aborted",
+ "no_connection",
+ "packet_error",
+ "option_error",
+ "mandatory_error",
+ "connection_refused",
+ "bad_service_code",
+ "too_busy",
+ "bad_init_cookie",
+ "aggression_penalty",
+};
+
+static const char *dccp_feature_nums[] = {
+ "reserved",
+ "ccid",
+ "allow_short_seqno",
+ "sequence_window",
+ "ecn_incapable",
+ "ack_ratio",
+ "send_ack_vector",
+ "send_ndp_count",
+ "minimum checksum coverage",
+ "check data checksum",
+};
+
+static u_int
+dccp_csum_coverage(netdissect_options *ndo,
+ const struct dccp_hdr *dh, u_int len)
+{
+ u_int cov;
+
+ if (DCCPH_CSCOV(dh) == 0)
+ return len;
+ cov = (GET_U_1(dh->dccph_doff) + DCCPH_CSCOV(dh) - 1) * sizeof(uint32_t);
+ return (cov > len)? len : cov;
+}
+
+static uint16_t dccp_cksum(netdissect_options *ndo, const struct ip *ip,
+ const struct dccp_hdr *dh, u_int len)
+{
+ return nextproto4_cksum(ndo, ip, (const uint8_t *)(const void *)dh, len,
+ dccp_csum_coverage(ndo, dh, len), IPPROTO_DCCP);
+}
+
+static uint16_t dccp6_cksum(netdissect_options *ndo, const struct ip6_hdr *ip6,
+ const struct dccp_hdr *dh, u_int len)
+{
+ return nextproto6_cksum(ndo, ip6, (const uint8_t *)(const void *)dh, len,
+ dccp_csum_coverage(ndo, dh, len), IPPROTO_DCCP);
+}
+
+static const char *dccp_reset_code(uint8_t code)
+{
+ if (code >= __DCCP_RESET_CODE_LAST)
+ return "invalid";
+ return dccp_reset_codes[code];
+}
+
+static uint64_t
+dccp_seqno(netdissect_options *ndo, const u_char *bp)
+{
+ const struct dccp_hdr *dh = (const struct dccp_hdr *)bp;
+ uint64_t seqno;
+
+ if (DCCPH_X(dh) != 0) {
+ const struct dccp_hdr_ext *dhx = (const struct dccp_hdr_ext *)bp;
+ seqno = GET_BE_U_6(dhx->dccph_seq);
+ } else {
+ seqno = GET_BE_U_3(dh->dccph_seq);
+ }
+
+ return seqno;
+}
+
+static unsigned int
+dccp_basic_hdr_len(netdissect_options *ndo, const struct dccp_hdr *dh)
+{
+ return DCCPH_X(dh) ? sizeof(struct dccp_hdr_ext) : sizeof(struct dccp_hdr);
+}
+
+static void dccp_print_ack_no(netdissect_options *ndo, const u_char *bp)
+{
+ const struct dccp_hdr *dh = (const struct dccp_hdr *)bp;
+ const u_char *ackp = bp + dccp_basic_hdr_len(ndo, dh);
+ uint64_t ackno;
+
+ if (DCCPH_X(dh) != 0) {
+ ackno = GET_BE_U_6(ackp + 2);
+ } else {
+ ackno = GET_BE_U_3(ackp + 1);
+ }
+
+ ND_PRINT("(ack=%" PRIu64 ") ", ackno);
+}
+
+static u_int dccp_print_option(netdissect_options *, const u_char *, u_int);
+
+/**
+ * dccp_print - show dccp packet
+ * @bp - beginning of dccp packet
+ * @data2 - beginning of enclosing
+ * @len - length of ip packet
+ */
+void
+dccp_print(netdissect_options *ndo, const u_char *bp, const u_char *data2,
+ u_int len)
+{
+ const struct dccp_hdr *dh;
+ const struct ip *ip;
+ const struct ip6_hdr *ip6;
+ const u_char *cp;
+ u_short sport, dport;
+ u_int hlen;
+ u_int fixed_hdrlen;
+ uint8_t dccph_type;
+
+ ndo->ndo_protocol = "dccp";
+ dh = (const struct dccp_hdr *)bp;
+
+ ip = (const struct ip *)data2;
+ if (IP_V(ip) == 6)
+ ip6 = (const struct ip6_hdr *)data2;
+ else
+ ip6 = NULL;
+
+ /* make sure we have enough data to look at the X bit */
+ cp = (const u_char *)(dh + 1);
+ if (cp > ndo->ndo_snapend)
+ goto trunc;
+ if (len < sizeof(struct dccp_hdr)) {
+ ND_PRINT("truncated-dccp - %zu bytes missing!",
+ sizeof(struct dccp_hdr) - len);
+ return;
+ }
+
+ /* get the length of the generic header */
+ fixed_hdrlen = dccp_basic_hdr_len(ndo, dh);
+ if (len < fixed_hdrlen) {
+ ND_PRINT("truncated-dccp - %u bytes missing!",
+ fixed_hdrlen - len);
+ return;
+ }
+ ND_TCHECK_LEN(dh, fixed_hdrlen);
+
+ sport = GET_BE_U_2(dh->dccph_sport);
+ dport = GET_BE_U_2(dh->dccph_dport);
+ hlen = GET_U_1(dh->dccph_doff) * 4;
+
+ if (ip6) {
+ ND_PRINT("%s.%u > %s.%u: ",
+ GET_IP6ADDR_STRING(ip6->ip6_src), sport,
+ GET_IP6ADDR_STRING(ip6->ip6_dst), dport);
+ } else {
+ ND_PRINT("%s.%u > %s.%u: ",
+ GET_IPADDR_STRING(ip->ip_src), sport,
+ GET_IPADDR_STRING(ip->ip_dst), dport);
+ }
+
+ nd_print_protocol_caps(ndo);
+
+ if (ndo->ndo_qflag) {
+ ND_PRINT(" %u", len - hlen);
+ if (hlen > len) {
+ ND_PRINT(" [bad hdr length %u - too long, > %u]",
+ hlen, len);
+ }
+ return;
+ }
+
+ /* other variables in generic header */
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" (CCVal %u, CsCov %u", DCCPH_CCVAL(dh), DCCPH_CSCOV(dh));
+ }
+
+ /* checksum calculation */
+ if (ndo->ndo_vflag && ND_TTEST_LEN(bp, len)) {
+ uint16_t sum = 0, dccp_sum;
+
+ dccp_sum = GET_BE_U_2(dh->dccph_checksum);
+ ND_PRINT(", cksum 0x%04x ", dccp_sum);
+ if (IP_V(ip) == 4)
+ sum = dccp_cksum(ndo, ip, dh, len);
+ else if (IP_V(ip) == 6)
+ sum = dccp6_cksum(ndo, ip6, dh, len);
+ if (sum != 0)
+ ND_PRINT("(incorrect -> 0x%04x)",in_cksum_shouldbe(dccp_sum, sum));
+ else
+ ND_PRINT("(correct)");
+ }
+
+ if (ndo->ndo_vflag)
+ ND_PRINT(")");
+ ND_PRINT(" ");
+
+ dccph_type = DCCPH_TYPE(dh);
+ switch (dccph_type) {
+ case DCCP_PKT_REQUEST: {
+ const struct dccp_hdr_request *dhr =
+ (const struct dccp_hdr_request *)(bp + fixed_hdrlen);
+ fixed_hdrlen += 4;
+ if (len < fixed_hdrlen) {
+ ND_PRINT("truncated-%s - %u bytes missing!",
+ tok2str(dccp_pkt_type_str, "", dccph_type),
+ fixed_hdrlen - len);
+ return;
+ }
+ ND_TCHECK_SIZE(dhr);
+ ND_PRINT("%s (service=%u) ",
+ tok2str(dccp_pkt_type_str, "", dccph_type),
+ GET_BE_U_4(dhr->dccph_req_service));
+ break;
+ }
+ case DCCP_PKT_RESPONSE: {
+ const struct dccp_hdr_response *dhr =
+ (const struct dccp_hdr_response *)(bp + fixed_hdrlen);
+ fixed_hdrlen += 12;
+ if (len < fixed_hdrlen) {
+ ND_PRINT("truncated-%s - %u bytes missing!",
+ tok2str(dccp_pkt_type_str, "", dccph_type),
+ fixed_hdrlen - len);
+ return;
+ }
+ ND_TCHECK_SIZE(dhr);
+ ND_PRINT("%s (service=%u) ",
+ tok2str(dccp_pkt_type_str, "", dccph_type),
+ GET_BE_U_4(dhr->dccph_resp_service));
+ break;
+ }
+ case DCCP_PKT_DATA:
+ ND_PRINT("%s ", tok2str(dccp_pkt_type_str, "", dccph_type));
+ break;
+ case DCCP_PKT_ACK: {
+ fixed_hdrlen += 8;
+ if (len < fixed_hdrlen) {
+ ND_PRINT("truncated-%s - %u bytes missing!",
+ tok2str(dccp_pkt_type_str, "", dccph_type),
+ fixed_hdrlen - len);
+ return;
+ }
+ ND_PRINT("%s ", tok2str(dccp_pkt_type_str, "", dccph_type));
+ break;
+ }
+ case DCCP_PKT_DATAACK: {
+ fixed_hdrlen += 8;
+ if (len < fixed_hdrlen) {
+ ND_PRINT("truncated-%s - %u bytes missing!",
+ tok2str(dccp_pkt_type_str, "", dccph_type),
+ fixed_hdrlen - len);
+ return;
+ }
+ ND_PRINT("%s ", tok2str(dccp_pkt_type_str, "", dccph_type));
+ break;
+ }
+ case DCCP_PKT_CLOSEREQ:
+ fixed_hdrlen += 8;
+ if (len < fixed_hdrlen) {
+ ND_PRINT("truncated-%s - %u bytes missing!",
+ tok2str(dccp_pkt_type_str, "", dccph_type),
+ fixed_hdrlen - len);
+ return;
+ }
+ ND_PRINT("%s ", tok2str(dccp_pkt_type_str, "", dccph_type));
+ break;
+ case DCCP_PKT_CLOSE:
+ fixed_hdrlen += 8;
+ if (len < fixed_hdrlen) {
+ ND_PRINT("truncated-%s - %u bytes missing!",
+ tok2str(dccp_pkt_type_str, "", dccph_type),
+ fixed_hdrlen - len);
+ return;
+ }
+ ND_PRINT("%s ", tok2str(dccp_pkt_type_str, "", dccph_type));
+ break;
+ case DCCP_PKT_RESET: {
+ const struct dccp_hdr_reset *dhr =
+ (const struct dccp_hdr_reset *)(bp + fixed_hdrlen);
+ fixed_hdrlen += 12;
+ if (len < fixed_hdrlen) {
+ ND_PRINT("truncated-%s - %u bytes missing!",
+ tok2str(dccp_pkt_type_str, "", dccph_type),
+ fixed_hdrlen - len);
+ return;
+ }
+ ND_TCHECK_SIZE(dhr);
+ ND_PRINT("%s (code=%s) ",
+ tok2str(dccp_pkt_type_str, "", dccph_type),
+ dccp_reset_code(GET_U_1(dhr->dccph_reset_code)));
+ break;
+ }
+ case DCCP_PKT_SYNC:
+ fixed_hdrlen += 8;
+ if (len < fixed_hdrlen) {
+ ND_PRINT("truncated-%s - %u bytes missing!",
+ tok2str(dccp_pkt_type_str, "", dccph_type),
+ fixed_hdrlen - len);
+ return;
+ }
+ ND_PRINT("%s ", tok2str(dccp_pkt_type_str, "", dccph_type));
+ break;
+ case DCCP_PKT_SYNCACK:
+ fixed_hdrlen += 8;
+ if (len < fixed_hdrlen) {
+ ND_PRINT("truncated-%s - %u bytes missing!",
+ tok2str(dccp_pkt_type_str, "", dccph_type),
+ fixed_hdrlen - len);
+ return;
+ }
+ ND_PRINT("%s ", tok2str(dccp_pkt_type_str, "", dccph_type));
+ break;
+ default:
+ ND_PRINT("%s ", tok2str(dccp_pkt_type_str, "unknown-type-%u", dccph_type));
+ break;
+ }
+
+ if ((DCCPH_TYPE(dh) != DCCP_PKT_DATA) &&
+ (DCCPH_TYPE(dh) != DCCP_PKT_REQUEST))
+ dccp_print_ack_no(ndo, bp);
+
+ if (ndo->ndo_vflag < 2)
+ return;
+
+ ND_PRINT("seq %" PRIu64, dccp_seqno(ndo, bp));
+
+ /* process options */
+ if (hlen > fixed_hdrlen){
+ u_int optlen;
+ cp = bp + fixed_hdrlen;
+ ND_PRINT(" <");
+
+ hlen -= fixed_hdrlen;
+ while(1){
+ optlen = dccp_print_option(ndo, cp, hlen);
+ if (!optlen)
+ break;
+ if (hlen <= optlen)
+ break;
+ hlen -= optlen;
+ cp += optlen;
+ ND_PRINT(", ");
+ }
+ ND_PRINT(">");
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static const struct tok dccp_option_values[] = {
+ { 0, "nop" },
+ { 1, "mandatory" },
+ { 2, "slowreceiver" },
+ { 32, "change_l" },
+ { 33, "confirm_l" },
+ { 34, "change_r" },
+ { 35, "confirm_r" },
+ { 36, "initcookie" },
+ { 37, "ndp_count" },
+ { 38, "ack_vector0" },
+ { 39, "ack_vector1" },
+ { 40, "data_dropped" },
+ { 41, "timestamp" },
+ { 42, "timestamp_echo" },
+ { 43, "elapsed_time" },
+ { 44, "data_checksum" },
+ { 0, NULL }
+};
+
+static u_int
+dccp_print_option(netdissect_options *ndo, const u_char *option, u_int hlen)
+{
+ uint8_t optlen, i;
+
+ if (GET_U_1(option) >= 32) {
+ optlen = GET_U_1(option + 1);
+ if (optlen < 2) {
+ if (GET_U_1(option) >= 128)
+ ND_PRINT("CCID option %u optlen too short",
+ GET_U_1(option));
+ else
+ ND_PRINT("%s optlen too short",
+ tok2str(dccp_option_values, "Option %u", GET_U_1(option)));
+ return 0;
+ }
+ } else
+ optlen = 1;
+
+ if (hlen < optlen) {
+ if (GET_U_1(option) >= 128)
+ ND_PRINT("CCID option %u optlen goes past header length",
+ GET_U_1(option));
+ else
+ ND_PRINT("%s optlen goes past header length",
+ tok2str(dccp_option_values, "Option %u", GET_U_1(option)));
+ return 0;
+ }
+ ND_TCHECK_LEN(option, optlen);
+
+ if (GET_U_1(option) >= 128) {
+ ND_PRINT("CCID option %u", GET_U_1(option));
+ switch (optlen) {
+ case 4:
+ ND_PRINT(" %u", GET_BE_U_2(option + 2));
+ break;
+ case 6:
+ ND_PRINT(" %u", GET_BE_U_4(option + 2));
+ break;
+ default:
+ break;
+ }
+ } else {
+ ND_PRINT("%s",
+ tok2str(dccp_option_values, "Option %u", GET_U_1(option)));
+ switch (GET_U_1(option)) {
+ case 32:
+ case 33:
+ case 34:
+ case 35:
+ if (optlen < 3) {
+ ND_PRINT(" optlen too short");
+ return optlen;
+ }
+ if (GET_U_1(option + 2) < 10){
+ ND_PRINT(" %s",
+ dccp_feature_nums[GET_U_1(option + 2)]);
+ for (i = 0; i < optlen - 3; i++)
+ ND_PRINT(" %u",
+ GET_U_1(option + 3 + i));
+ }
+ break;
+ case 36:
+ if (optlen > 2) {
+ ND_PRINT(" 0x");
+ for (i = 0; i < optlen - 2; i++)
+ ND_PRINT("%02x",
+ GET_U_1(option + 2 + i));
+ }
+ break;
+ case 37:
+ for (i = 0; i < optlen - 2; i++)
+ ND_PRINT(" %u", GET_U_1(option + 2 + i));
+ break;
+ case 38:
+ if (optlen > 2) {
+ ND_PRINT(" 0x");
+ for (i = 0; i < optlen - 2; i++)
+ ND_PRINT("%02x",
+ GET_U_1(option + 2 + i));
+ }
+ break;
+ case 39:
+ if (optlen > 2) {
+ ND_PRINT(" 0x");
+ for (i = 0; i < optlen - 2; i++)
+ ND_PRINT("%02x",
+ GET_U_1(option + 2 + i));
+ }
+ break;
+ case 40:
+ if (optlen > 2) {
+ ND_PRINT(" 0x");
+ for (i = 0; i < optlen - 2; i++)
+ ND_PRINT("%02x",
+ GET_U_1(option + 2 + i));
+ }
+ break;
+ case 41:
+ /*
+ * 13.1. Timestamp Option
+ *
+ * +--------+--------+--------+--------+--------+--------+
+ * |00101001|00000110| Timestamp Value |
+ * +--------+--------+--------+--------+--------+--------+
+ * Type=41 Length=6
+ */
+ if (optlen == 6)
+ ND_PRINT(" %u", GET_BE_U_4(option + 2));
+ else
+ ND_PRINT(" [optlen != 6]");
+ break;
+ case 42:
+ /*
+ * 13.3. Timestamp Echo Option
+ *
+ * +--------+--------+--------+--------+--------+--------+
+ * |00101010|00000110| Timestamp Echo |
+ * +--------+--------+--------+--------+--------+--------+
+ * Type=42 Len=6
+ *
+ * +--------+--------+------- ... -------+--------+--------+
+ * |00101010|00001000| Timestamp Echo | Elapsed Time |
+ * +--------+--------+------- ... -------+--------+--------+
+ * Type=42 Len=8 (4 bytes)
+ *
+ * +--------+--------+------- ... -------+------- ... -------+
+ * |00101010|00001010| Timestamp Echo | Elapsed Time |
+ * +--------+--------+------- ... -------+------- ... -------+
+ * Type=42 Len=10 (4 bytes) (4 bytes)
+ */
+ switch (optlen) {
+ case 6:
+ ND_PRINT(" %u", GET_BE_U_4(option + 2));
+ break;
+ case 8:
+ ND_PRINT(" %u", GET_BE_U_4(option + 2));
+ ND_PRINT(" (elapsed time %u)",
+ GET_BE_U_2(option + 6));
+ break;
+ case 10:
+ ND_PRINT(" %u", GET_BE_U_4(option + 2));
+ ND_PRINT(" (elapsed time %u)",
+ GET_BE_U_4(option + 6));
+ break;
+ default:
+ ND_PRINT(" [optlen != 6 or 8 or 10]");
+ break;
+ }
+ break;
+ case 43:
+ if (optlen == 6)
+ ND_PRINT(" %u", GET_BE_U_4(option + 2));
+ else if (optlen == 4)
+ ND_PRINT(" %u", GET_BE_U_2(option + 2));
+ else
+ ND_PRINT(" [optlen != 4 or 6]");
+ break;
+ case 44:
+ if (optlen > 2) {
+ ND_PRINT(" ");
+ for (i = 0; i < optlen - 2; i++)
+ ND_PRINT("%02x",
+ GET_U_1(option + 2 + i));
+ }
+ break;
+ }
+ }
+
+ return optlen;
+trunc:
+ nd_print_trunc(ndo);
+ return 0;
+}
diff --git a/print-decnet.c b/print-decnet.c
new file mode 100644
index 0000000..6a6dd25
--- /dev/null
+++ b/print-decnet.c
@@ -0,0 +1,1182 @@
+/*
+ * Copyright (c) 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: DECnet printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+
+#ifndef _WIN32
+typedef nd_uint8_t byte; /* single byte field */
+#else
+/*
+ * the keyword 'byte' generates conflicts in Windows
+ */
+typedef nd_uint8_t Byte; /* single byte field */
+#define byte Byte
+#endif /* _WIN32 */
+typedef nd_uint16_t word; /* 2 byte field */
+typedef nd_uint32_t longword; /* 4 bytes field */
+
+/*
+ * Definitions for DECNET Phase IV protocol headers
+ */
+typedef union {
+ nd_mac_addr dne_addr; /* full Ethernet address */
+ struct {
+ nd_byte dne_hiord[4]; /* DECnet HIORD prefix */
+ nd_byte dne_nodeaddr[2]; /* DECnet node address */
+ } dne_remote;
+} etheraddr; /* Ethernet address */
+
+#define HIORD 0x000400aa /* high 32-bits of address (swapped) */
+
+#define AREAMASK 0176000 /* mask for area field */
+#define AREASHIFT 10 /* bit-offset for area field */
+#define NODEMASK 01777 /* mask for node address field */
+
+/*
+ * Define long and short header formats.
+ */
+struct shorthdr
+ {
+ byte sh_flags; /* route flags */
+ word sh_dst; /* destination node address */
+ word sh_src; /* source node address */
+ byte sh_visits; /* visit count */
+ };
+
+struct longhdr
+ {
+ byte lg_flags; /* route flags */
+ byte lg_darea; /* destination area (reserved) */
+ byte lg_dsarea; /* destination subarea (reserved) */
+ etheraddr lg_dst; /* destination id */
+ byte lg_sarea; /* source area (reserved) */
+ byte lg_ssarea; /* source subarea (reserved) */
+ etheraddr lg_src; /* source id */
+ byte lg_nextl2; /* next level 2 router (reserved) */
+ byte lg_visits; /* visit count */
+ byte lg_service; /* service class (reserved) */
+ byte lg_pt; /* protocol type (reserved) */
+ };
+
+union routehdr
+ {
+ struct shorthdr rh_short; /* short route header */
+ struct longhdr rh_long; /* long route header */
+ };
+
+/*
+ * Define the values of various fields in the protocol messages.
+ *
+ * 1. Data packet formats.
+ */
+#define RMF_MASK 7 /* mask for message type */
+#define RMF_SHORT 2 /* short message format */
+#define RMF_LONG 6 /* long message format */
+#ifndef RMF_RQR
+#define RMF_RQR 010 /* request return to sender */
+#define RMF_RTS 020 /* returning to sender */
+#define RMF_IE 040 /* intra-ethernet packet */
+#endif /* RMR_RQR */
+#define RMF_FVER 0100 /* future version flag */
+#define RMF_PAD 0200 /* pad field */
+#define RMF_PADMASK 0177 /* pad field mask */
+
+#define VIS_MASK 077 /* visit field mask */
+
+/*
+ * 2. Control packet formats.
+ */
+#define RMF_CTLMASK 017 /* mask for message type */
+#define RMF_CTLMSG 01 /* control message indicator */
+#define RMF_INIT 01 /* initialization message */
+#define RMF_VER 03 /* verification message */
+#define RMF_TEST 05 /* hello and test message */
+#define RMF_L1ROUT 07 /* level 1 routing message */
+#define RMF_L2ROUT 011 /* level 2 routing message */
+#define RMF_RHELLO 013 /* router hello message */
+#define RMF_EHELLO 015 /* endnode hello message */
+
+#define TI_L2ROUT 01 /* level 2 router */
+#define TI_L1ROUT 02 /* level 1 router */
+#define TI_ENDNODE 03 /* endnode */
+#define TI_VERIF 04 /* verification required */
+#define TI_BLOCK 010 /* blocking requested */
+
+#define VE_VERS 2 /* version number (2) */
+#define VE_ECO 0 /* ECO number */
+#define VE_UECO 0 /* user ECO number (0) */
+
+#define P3_VERS 1 /* phase III version number (1) */
+#define P3_ECO 3 /* ECO number (3) */
+#define P3_UECO 0 /* user ECO number (0) */
+
+#define II_L2ROUT 01 /* level 2 router */
+#define II_L1ROUT 02 /* level 1 router */
+#define II_ENDNODE 03 /* endnode */
+#define II_VERIF 04 /* verification required */
+#define II_NOMCAST 040 /* no multicast traffic accepted */
+#define II_BLOCK 0100 /* blocking requested */
+#define II_TYPEMASK 03 /* mask for node type */
+
+#define TESTDATA 0252 /* test data bytes */
+#define TESTLEN 1 /* length of transmitted test data */
+
+/*
+ * Define control message formats.
+ */
+struct initmsg /* initialization message */
+ {
+ byte in_flags; /* route flags */
+ word in_src; /* source node address */
+ byte in_info; /* routing layer information */
+ word in_blksize; /* maximum data link block size */
+ byte in_vers; /* version number */
+ byte in_eco; /* ECO number */
+ byte in_ueco; /* user ECO number */
+ word in_hello; /* hello timer */
+ byte in_rsvd; /* reserved image field */
+ };
+
+struct verifmsg /* verification message */
+ {
+ byte ve_flags; /* route flags */
+ word ve_src; /* source node address */
+ byte ve_fcnval; /* function value image field */
+ };
+
+struct testmsg /* hello and test message */
+ {
+ byte te_flags; /* route flags */
+ word te_src; /* source node address */
+ byte te_data; /* test data image field */
+ };
+
+struct l1rout /* level 1 routing message */
+ {
+ byte r1_flags; /* route flags */
+ word r1_src; /* source node address */
+ byte r1_rsvd; /* reserved field */
+ };
+
+struct l2rout /* level 2 routing message */
+ {
+ byte r2_flags; /* route flags */
+ word r2_src; /* source node address */
+ byte r2_rsvd; /* reserved field */
+ };
+
+struct rhellomsg /* router hello message */
+ {
+ byte rh_flags; /* route flags */
+ byte rh_vers; /* version number */
+ byte rh_eco; /* ECO number */
+ byte rh_ueco; /* user ECO number */
+ etheraddr rh_src; /* source id */
+ byte rh_info; /* routing layer information */
+ word rh_blksize; /* maximum data link block size */
+ byte rh_priority; /* router's priority */
+ byte rh_area; /* reserved */
+ word rh_hello; /* hello timer */
+ byte rh_mpd; /* reserved */
+ };
+
+struct ehellomsg /* endnode hello message */
+ {
+ byte eh_flags; /* route flags */
+ byte eh_vers; /* version number */
+ byte eh_eco; /* ECO number */
+ byte eh_ueco; /* user ECO number */
+ etheraddr eh_src; /* source id */
+ byte eh_info; /* routing layer information */
+ word eh_blksize; /* maximum data link block size */
+ byte eh_area; /* area (reserved) */
+ byte eh_seed[8]; /* verification seed */
+ etheraddr eh_router; /* designated router */
+ word eh_hello; /* hello timer */
+ byte eh_mpd; /* (reserved) */
+ byte eh_data; /* test data image field */
+ };
+
+union controlmsg
+ {
+ struct initmsg cm_init; /* initialization message */
+ struct verifmsg cm_ver; /* verification message */
+ struct testmsg cm_test; /* hello and test message */
+ struct l1rout cm_l1rou; /* level 1 routing message */
+ struct l2rout cm_l2rout; /* level 2 routing message */
+ struct rhellomsg cm_rhello; /* router hello message */
+ struct ehellomsg cm_ehello; /* endnode hello message */
+ };
+
+/* Macros for decoding routing-info fields */
+#define RI_COST(x) ((x)&0777)
+#define RI_HOPS(x) (((x)>>10)&037)
+
+/*
+ * NSP protocol fields and values.
+ */
+
+#define NSP_TYPEMASK 014 /* mask to isolate type code */
+#define NSP_SUBMASK 0160 /* mask to isolate subtype code */
+#define NSP_SUBSHFT 4 /* shift to move subtype code */
+
+#define MFT_DATA 0 /* data message */
+#define MFT_ACK 04 /* acknowledgement message */
+#define MFT_CTL 010 /* control message */
+
+#define MFS_ILS 020 /* data or I/LS indicator */
+#define MFS_BOM 040 /* beginning of message (data) */
+#define MFS_MOM 0 /* middle of message (data) */
+#define MFS_EOM 0100 /* end of message (data) */
+#define MFS_INT 040 /* interrupt message */
+
+#define MFS_DACK 0 /* data acknowledgement */
+#define MFS_IACK 020 /* I/LS acknowledgement */
+#define MFS_CACK 040 /* connect acknowledgement */
+
+#define MFS_NOP 0 /* no operation */
+#define MFS_CI 020 /* connect initiate */
+#define MFS_CC 040 /* connect confirm */
+#define MFS_DI 060 /* disconnect initiate */
+#define MFS_DC 0100 /* disconnect confirm */
+#define MFS_RCI 0140 /* retransmitted connect initiate */
+
+#define SGQ_ACK 0100000 /* ack */
+#define SGQ_NAK 0110000 /* negative ack */
+#define SGQ_OACK 0120000 /* other channel ack */
+#define SGQ_ONAK 0130000 /* other channel negative ack */
+#define SGQ_MASK 07777 /* mask to isolate seq # */
+#define SGQ_OTHER 020000 /* other channel qualifier */
+#define SGQ_DELAY 010000 /* ack delay flag */
+
+#define SGQ_EOM 0100000 /* pseudo flag for end-of-message */
+
+#define LSM_MASK 03 /* mask for modifier field */
+#define LSM_NOCHANGE 0 /* no change */
+#define LSM_DONOTSEND 1 /* do not send data */
+#define LSM_SEND 2 /* send data */
+
+#define LSI_MASK 014 /* mask for interpretation field */
+#define LSI_DATA 0 /* data segment or message count */
+#define LSI_INTR 4 /* interrupt request count */
+#define LSI_INTM 0377 /* funny marker for int. message */
+
+#define COS_MASK 014 /* mask for flow control field */
+#define COS_NONE 0 /* no flow control */
+#define COS_SEGMENT 04 /* segment flow control */
+#define COS_MESSAGE 010 /* message flow control */
+#define COS_DEFAULT 1 /* default value for field */
+
+#define COI_MASK 3 /* mask for version field */
+#define COI_32 0 /* version 3.2 */
+#define COI_31 1 /* version 3.1 */
+#define COI_40 2 /* version 4.0 */
+#define COI_41 3 /* version 4.1 */
+
+#define MNU_MASK 140 /* mask for session control version */
+#define MNU_10 000 /* session V1.0 */
+#define MNU_20 040 /* session V2.0 */
+#define MNU_ACCESS 1 /* access control present */
+#define MNU_USRDATA 2 /* user data field present */
+#define MNU_INVKPROXY 4 /* invoke proxy field present */
+#define MNU_UICPROXY 8 /* use uic-based proxy */
+
+#define DC_NORESOURCES 1 /* no resource reason code */
+#define DC_NOLINK 41 /* no link terminate reason code */
+#define DC_COMPLETE 42 /* disconnect complete reason code */
+
+#define DI_NOERROR 0 /* user disconnect */
+#define DI_SHUT 3 /* node is shutting down */
+#define DI_NOUSER 4 /* destination end user does not exist */
+#define DI_INVDEST 5 /* invalid end user destination */
+#define DI_REMRESRC 6 /* insufficient remote resources */
+#define DI_TPA 8 /* third party abort */
+#define DI_PROTOCOL 7 /* protocol error discovered */
+#define DI_ABORT 9 /* user abort */
+#define DI_LOCALRESRC 32 /* insufficient local resources */
+#define DI_REMUSERRESRC 33 /* insufficient remote user resources */
+#define DI_BADACCESS 34 /* bad access control information */
+#define DI_BADACCNT 36 /* bad ACCOUNT information */
+#define DI_CONNECTABORT 38 /* connect request cancelled */
+#define DI_TIMEDOUT 38 /* remote node or user crashed */
+#define DI_UNREACHABLE 39 /* local timers expired due to ... */
+#define DI_BADIMAGE 43 /* bad image data in connect */
+#define DI_SERVMISMATCH 54 /* cryptographic service mismatch */
+
+#define UC_OBJREJECT 0 /* object rejected connect */
+#define UC_USERDISCONNECT 0 /* user disconnect */
+#define UC_RESOURCES 1 /* insufficient resources (local or remote) */
+#define UC_NOSUCHNODE 2 /* unrecognized node name */
+#define UC_REMOTESHUT 3 /* remote node shutting down */
+#define UC_NOSUCHOBJ 4 /* unrecognized object */
+#define UC_INVOBJFORMAT 5 /* invalid object name format */
+#define UC_OBJTOOBUSY 6 /* object too busy */
+#define UC_NETWORKABORT 8 /* network abort */
+#define UC_USERABORT 9 /* user abort */
+#define UC_INVNODEFORMAT 10 /* invalid node name format */
+#define UC_LOCALSHUT 11 /* local node shutting down */
+#define UC_ACCESSREJECT 34 /* invalid access control information */
+#define UC_NORESPONSE 38 /* no response from object */
+#define UC_UNREACHABLE 39 /* node unreachable */
+
+/*
+ * NSP message formats.
+ */
+struct nsphdr /* general nsp header */
+ {
+ byte nh_flags; /* message flags */
+ word nh_dst; /* destination link address */
+ word nh_src; /* source link address */
+ };
+
+struct seghdr /* data segment header */
+ {
+ byte sh_flags; /* message flags */
+ word sh_dst; /* destination link address */
+ word sh_src; /* source link address */
+ word sh_seq[3]; /* sequence numbers */
+ };
+
+struct minseghdr /* minimum data segment header */
+ {
+ byte ms_flags; /* message flags */
+ word ms_dst; /* destination link address */
+ word ms_src; /* source link address */
+ word ms_seq; /* sequence number */
+ };
+
+struct lsmsg /* link service message (after hdr) */
+ {
+ byte ls_lsflags; /* link service flags */
+ byte ls_fcval; /* flow control value */
+ };
+
+struct ackmsg /* acknowledgement message */
+ {
+ byte ak_flags; /* message flags */
+ word ak_dst; /* destination link address */
+ word ak_src; /* source link address */
+ word ak_acknum[2]; /* acknowledgement numbers */
+ };
+
+struct minackmsg /* minimum acknowledgement message */
+ {
+ byte mk_flags; /* message flags */
+ word mk_dst; /* destination link address */
+ word mk_src; /* source link address */
+ word mk_acknum; /* acknowledgement number */
+ };
+
+struct ciackmsg /* connect acknowledgement message */
+ {
+ byte ck_flags; /* message flags */
+ word ck_dst; /* destination link address */
+ };
+
+struct cimsg /* connect initiate message */
+ {
+ byte ci_flags; /* message flags */
+ word ci_dst; /* destination link address (0) */
+ word ci_src; /* source link address */
+ byte ci_services; /* requested services */
+ byte ci_info; /* information */
+ word ci_segsize; /* maximum segment size */
+ };
+
+struct ccmsg /* connect confirm message */
+ {
+ byte cc_flags; /* message flags */
+ word cc_dst; /* destination link address */
+ word cc_src; /* source link address */
+ byte cc_services; /* requested services */
+ byte cc_info; /* information */
+ word cc_segsize; /* maximum segment size */
+ byte cc_optlen; /* optional data length */
+ };
+
+struct cnmsg /* generic connect message */
+ {
+ byte cn_flags; /* message flags */
+ word cn_dst; /* destination link address */
+ word cn_src; /* source link address */
+ byte cn_services; /* requested services */
+ byte cn_info; /* information */
+ word cn_segsize; /* maximum segment size */
+ };
+
+struct dimsg /* disconnect initiate message */
+ {
+ byte di_flags; /* message flags */
+ word di_dst; /* destination link address */
+ word di_src; /* source link address */
+ word di_reason; /* reason code */
+ byte di_optlen; /* optional data length */
+ };
+
+struct dcmsg /* disconnect confirm message */
+ {
+ byte dc_flags; /* message flags */
+ word dc_dst; /* destination link address */
+ word dc_src; /* source link address */
+ word dc_reason; /* reason code */
+ };
+
+/* Forwards */
+static int print_decnet_ctlmsg(netdissect_options *, const union routehdr *, u_int, u_int);
+static void print_t_info(netdissect_options *, u_int);
+static void print_l1_routes(netdissect_options *, const u_char *, u_int);
+static void print_l2_routes(netdissect_options *, const u_char *, u_int);
+static void print_i_info(netdissect_options *, u_int);
+static void print_elist(const u_char *, u_int);
+static int print_nsp(netdissect_options *, const u_char *, u_int);
+static void print_reason(netdissect_options *, u_int);
+
+void
+decnet_print(netdissect_options *ndo,
+ const u_char *ap, u_int length,
+ u_int caplen)
+{
+ const union routehdr *rhp;
+ u_int mflags;
+ uint16_t dst, src;
+ u_int hops;
+ u_int nsplen, pktlen;
+ const u_char *nspp;
+
+ ndo->ndo_protocol = "decnet";
+ if (length < sizeof(struct shorthdr)) {
+ ND_PRINT(" (length %u < %zu)", length, sizeof(struct shorthdr));
+ goto invalid;
+ }
+
+ pktlen = GET_LE_U_2(ap);
+ if (pktlen < sizeof(struct shorthdr)) {
+ ND_PRINT(" (pktlen %u < %zu)", pktlen, sizeof(struct shorthdr));
+ goto invalid;
+ }
+ if (pktlen > length) {
+ ND_PRINT(" (pktlen %u > %u)", pktlen, length);
+ goto invalid;
+ }
+ length = pktlen;
+
+ rhp = (const union routehdr *)(ap + sizeof(short));
+ mflags = GET_U_1(rhp->rh_short.sh_flags);
+
+ if (mflags & RMF_PAD) {
+ /* pad bytes of some sort in front of message */
+ u_int padlen = mflags & RMF_PADMASK;
+ if (ndo->ndo_vflag)
+ ND_PRINT("[pad:%u] ", padlen);
+ if (length < padlen + 2) {
+ ND_PRINT(" (length %u < %u)", length, padlen + 2);
+ goto invalid;
+ }
+ ND_TCHECK_LEN(ap + sizeof(short), padlen);
+ ap += padlen;
+ length -= padlen;
+ caplen -= padlen;
+ rhp = (const union routehdr *)(ap + sizeof(short));
+ mflags = GET_U_1(rhp->rh_short.sh_flags);
+ }
+
+ if (mflags & RMF_FVER) {
+ ND_PRINT("future-version-decnet");
+ ND_DEFAULTPRINT(ap, ND_MIN(length, caplen));
+ return;
+ }
+
+ /* is it a control message? */
+ if (mflags & RMF_CTLMSG) {
+ if (!print_decnet_ctlmsg(ndo, rhp, length, caplen))
+ goto invalid;
+ return;
+ }
+
+ switch (mflags & RMF_MASK) {
+ case RMF_LONG:
+ if (length < sizeof(struct longhdr)) {
+ ND_PRINT(" (length %u < %zu)", length, sizeof(struct longhdr));
+ goto invalid;
+ }
+ ND_TCHECK_SIZE(&rhp->rh_long);
+ dst =
+ GET_LE_U_2(rhp->rh_long.lg_dst.dne_remote.dne_nodeaddr);
+ src =
+ GET_LE_U_2(rhp->rh_long.lg_src.dne_remote.dne_nodeaddr);
+ hops = GET_U_1(rhp->rh_long.lg_visits);
+ nspp = ap + sizeof(short) + sizeof(struct longhdr);
+ nsplen = length - sizeof(struct longhdr);
+ break;
+ case RMF_SHORT:
+ dst = GET_LE_U_2(rhp->rh_short.sh_dst);
+ src = GET_LE_U_2(rhp->rh_short.sh_src);
+ hops = (GET_U_1(rhp->rh_short.sh_visits) & VIS_MASK)+1;
+ nspp = ap + sizeof(short) + sizeof(struct shorthdr);
+ nsplen = length - sizeof(struct shorthdr);
+ break;
+ default:
+ ND_PRINT("unknown message flags under mask");
+ ND_DEFAULTPRINT((const u_char *)ap, ND_MIN(length, caplen));
+ return;
+ }
+
+ ND_PRINT("%s > %s %u ",
+ dnaddr_string(ndo, src), dnaddr_string(ndo, dst), pktlen);
+ if (ndo->ndo_vflag) {
+ if (mflags & RMF_RQR)
+ ND_PRINT("RQR ");
+ if (mflags & RMF_RTS)
+ ND_PRINT("RTS ");
+ if (mflags & RMF_IE)
+ ND_PRINT("IE ");
+ ND_PRINT("%u hops ", hops);
+ }
+
+ if (!print_nsp(ndo, nspp, nsplen))
+ goto invalid;
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
+
+static int
+print_decnet_ctlmsg(netdissect_options *ndo,
+ const union routehdr *rhp, u_int length,
+ u_int caplen)
+{
+ /* Our caller has already checked for mflags */
+ u_int mflags = GET_U_1(rhp->rh_short.sh_flags);
+ const union controlmsg *cmp = (const union controlmsg *)rhp;
+ uint16_t src, dst;
+ u_int info, blksize, eco, ueco, hello, other, vers;
+ u_int priority;
+ const u_char *rhpx = (const u_char *)rhp;
+
+ switch (mflags & RMF_CTLMASK) {
+ case RMF_INIT:
+ ND_PRINT("init ");
+ if (length < sizeof(struct initmsg))
+ goto invalid;
+ ND_TCHECK_SIZE(&cmp->cm_init);
+ src = GET_LE_U_2(cmp->cm_init.in_src);
+ info = GET_U_1(cmp->cm_init.in_info);
+ blksize = GET_LE_U_2(cmp->cm_init.in_blksize);
+ vers = GET_U_1(cmp->cm_init.in_vers);
+ eco = GET_U_1(cmp->cm_init.in_eco);
+ ueco = GET_U_1(cmp->cm_init.in_ueco);
+ hello = GET_LE_U_2(cmp->cm_init.in_hello);
+ print_t_info(ndo, info);
+ ND_PRINT("src %sblksize %u vers %u eco %u ueco %u hello %u",
+ dnaddr_string(ndo, src), blksize, vers, eco, ueco,
+ hello);
+ break;
+ case RMF_VER:
+ ND_PRINT("verification ");
+ if (length < sizeof(struct verifmsg))
+ goto invalid;
+ src = GET_LE_U_2(cmp->cm_ver.ve_src);
+ other = GET_U_1(cmp->cm_ver.ve_fcnval);
+ ND_PRINT("src %s fcnval %o", dnaddr_string(ndo, src), other);
+ break;
+ case RMF_TEST:
+ ND_PRINT("test ");
+ if (length < sizeof(struct testmsg))
+ goto invalid;
+ src = GET_LE_U_2(cmp->cm_test.te_src);
+ other = GET_U_1(cmp->cm_test.te_data);
+ ND_PRINT("src %s data %o", dnaddr_string(ndo, src), other);
+ break;
+ case RMF_L1ROUT:
+ ND_PRINT("lev-1-routing ");
+ if (length < sizeof(struct l1rout))
+ goto invalid;
+ ND_TCHECK_SIZE(&cmp->cm_l1rou);
+ src = GET_LE_U_2(cmp->cm_l1rou.r1_src);
+ ND_PRINT("src %s ", dnaddr_string(ndo, src));
+ print_l1_routes(ndo, &(rhpx[sizeof(struct l1rout)]),
+ length - sizeof(struct l1rout));
+ break;
+ case RMF_L2ROUT:
+ ND_PRINT("lev-2-routing ");
+ if (length < sizeof(struct l2rout))
+ goto invalid;
+ ND_TCHECK_SIZE(&cmp->cm_l2rout);
+ src = GET_LE_U_2(cmp->cm_l2rout.r2_src);
+ ND_PRINT("src %s ", dnaddr_string(ndo, src));
+ print_l2_routes(ndo, &(rhpx[sizeof(struct l2rout)]),
+ length - sizeof(struct l2rout));
+ break;
+ case RMF_RHELLO:
+ ND_PRINT("router-hello ");
+ if (length < sizeof(struct rhellomsg))
+ goto invalid;
+ ND_TCHECK_SIZE(&cmp->cm_rhello);
+ vers = GET_U_1(cmp->cm_rhello.rh_vers);
+ eco = GET_U_1(cmp->cm_rhello.rh_eco);
+ ueco = GET_U_1(cmp->cm_rhello.rh_ueco);
+ src =
+ GET_LE_U_2(cmp->cm_rhello.rh_src.dne_remote.dne_nodeaddr);
+ info = GET_U_1(cmp->cm_rhello.rh_info);
+ blksize = GET_LE_U_2(cmp->cm_rhello.rh_blksize);
+ priority = GET_U_1(cmp->cm_rhello.rh_priority);
+ hello = GET_LE_U_2(cmp->cm_rhello.rh_hello);
+ print_i_info(ndo, info);
+ ND_PRINT("vers %u eco %u ueco %u src %s blksize %u pri %u hello %u",
+ vers, eco, ueco, dnaddr_string(ndo, src),
+ blksize, priority, hello);
+ print_elist(&(rhpx[sizeof(struct rhellomsg)]),
+ length - sizeof(struct rhellomsg));
+ break;
+ case RMF_EHELLO:
+ ND_PRINT("endnode-hello ");
+ if (length < sizeof(struct ehellomsg))
+ goto invalid;
+ vers = GET_U_1(cmp->cm_ehello.eh_vers);
+ eco = GET_U_1(cmp->cm_ehello.eh_eco);
+ ueco = GET_U_1(cmp->cm_ehello.eh_ueco);
+ src =
+ GET_LE_U_2(cmp->cm_ehello.eh_src.dne_remote.dne_nodeaddr);
+ info = GET_U_1(cmp->cm_ehello.eh_info);
+ blksize = GET_LE_U_2(cmp->cm_ehello.eh_blksize);
+ /*seed*/
+ dst =
+ GET_LE_U_2(cmp->cm_ehello.eh_router.dne_remote.dne_nodeaddr);
+ hello = GET_LE_U_2(cmp->cm_ehello.eh_hello);
+ other = GET_U_1(cmp->cm_ehello.eh_data);
+ print_i_info(ndo, info);
+ ND_PRINT("vers %u eco %u ueco %u src %s blksize %u rtr %s hello %u data %o",
+ vers, eco, ueco, dnaddr_string(ndo, src),
+ blksize, dnaddr_string(ndo, dst), hello, other);
+ break;
+
+ default:
+ ND_PRINT("unknown control message");
+ ND_DEFAULTPRINT((const u_char *)rhp, ND_MIN(length, caplen));
+ break;
+ }
+ return (1);
+
+invalid:
+ return (0);
+}
+
+static void
+print_t_info(netdissect_options *ndo,
+ u_int info)
+{
+ u_int ntype = info & 3;
+ switch (ntype) {
+ case 0: ND_PRINT("reserved-ntype? "); break;
+ case TI_L2ROUT: ND_PRINT("l2rout "); break;
+ case TI_L1ROUT: ND_PRINT("l1rout "); break;
+ case TI_ENDNODE: ND_PRINT("endnode "); break;
+ }
+ if (info & TI_VERIF)
+ ND_PRINT("verif ");
+ if (info & TI_BLOCK)
+ ND_PRINT("blo ");
+}
+
+static void
+print_l1_routes(netdissect_options *ndo,
+ const u_char *rp, u_int len)
+{
+ u_int count;
+ u_int id;
+ u_int info;
+
+ /* The last short is a checksum */
+ while (len > (3 * sizeof(short))) {
+ ND_TCHECK_LEN(rp, 3 * sizeof(short));
+ count = GET_LE_U_2(rp);
+ if (count > 1024)
+ return; /* seems to be bogus from here on */
+ rp += sizeof(short);
+ len -= sizeof(short);
+ id = GET_LE_U_2(rp);
+ rp += sizeof(short);
+ len -= sizeof(short);
+ info = GET_LE_U_2(rp);
+ rp += sizeof(short);
+ len -= sizeof(short);
+ ND_PRINT("{ids %u-%u cost %u hops %u} ", id, id + count,
+ RI_COST(info), RI_HOPS(info));
+ }
+}
+
+static void
+print_l2_routes(netdissect_options *ndo,
+ const u_char *rp, u_int len)
+{
+ u_int count;
+ u_int area;
+ u_int info;
+
+ /* The last short is a checksum */
+ while (len > (3 * sizeof(short))) {
+ ND_TCHECK_LEN(rp, 3 * sizeof(short));
+ count = GET_LE_U_2(rp);
+ if (count > 1024)
+ return; /* seems to be bogus from here on */
+ rp += sizeof(short);
+ len -= sizeof(short);
+ area = GET_LE_U_2(rp);
+ rp += sizeof(short);
+ len -= sizeof(short);
+ info = GET_LE_U_2(rp);
+ rp += sizeof(short);
+ len -= sizeof(short);
+ ND_PRINT("{areas %u-%u cost %u hops %u} ", area, area + count,
+ RI_COST(info), RI_HOPS(info));
+ }
+}
+
+static void
+print_i_info(netdissect_options *ndo,
+ u_int info)
+{
+ u_int ntype = info & II_TYPEMASK;
+ switch (ntype) {
+ case 0: ND_PRINT("reserved-ntype? "); break;
+ case II_L2ROUT: ND_PRINT("l2rout "); break;
+ case II_L1ROUT: ND_PRINT("l1rout "); break;
+ case II_ENDNODE: ND_PRINT("endnode "); break;
+ }
+ if (info & II_VERIF)
+ ND_PRINT("verif ");
+ if (info & II_NOMCAST)
+ ND_PRINT("nomcast ");
+ if (info & II_BLOCK)
+ ND_PRINT("blo ");
+}
+
+static void
+print_elist(const u_char *elp _U_, u_int len _U_)
+{
+ /* Not enough examples available for me to debug this */
+}
+
+static int
+print_nsp(netdissect_options *ndo,
+ const u_char *nspp, u_int nsplen)
+{
+ const struct nsphdr *nsphp = (const struct nsphdr *)nspp;
+ u_int dst, src, flags;
+
+ if (nsplen < sizeof(struct nsphdr)) {
+ ND_PRINT(" (nsplen %u < %zu)", nsplen, sizeof(struct nsphdr));
+ goto invalid;
+ }
+ flags = GET_U_1(nsphp->nh_flags);
+ dst = GET_LE_U_2(nsphp->nh_dst);
+ src = GET_LE_U_2(nsphp->nh_src);
+
+ switch (flags & NSP_TYPEMASK) {
+ case MFT_DATA:
+ switch (flags & NSP_SUBMASK) {
+ case MFS_BOM:
+ case MFS_MOM:
+ case MFS_EOM:
+ case MFS_BOM+MFS_EOM:
+ ND_PRINT("data %u>%u ", src, dst);
+ {
+ const struct seghdr *shp = (const struct seghdr *)nspp;
+ u_int ack;
+ u_int data_off = sizeof(struct minseghdr);
+
+ if (nsplen < data_off)
+ goto invalid;
+ ack = GET_LE_U_2(shp->sh_seq[0]);
+ if (ack & SGQ_ACK) { /* acknum field */
+ if ((ack & SGQ_NAK) == SGQ_NAK)
+ ND_PRINT("nak %u ", ack & SGQ_MASK);
+ else
+ ND_PRINT("ack %u ", ack & SGQ_MASK);
+ data_off += sizeof(short);
+ if (nsplen < data_off)
+ goto invalid;
+ ack = GET_LE_U_2(shp->sh_seq[1]);
+ if (ack & SGQ_OACK) { /* ackoth field */
+ if ((ack & SGQ_ONAK) == SGQ_ONAK)
+ ND_PRINT("onak %u ", ack & SGQ_MASK);
+ else
+ ND_PRINT("oack %u ", ack & SGQ_MASK);
+ data_off += sizeof(short);
+ if (nsplen < data_off)
+ goto invalid;
+ ack = GET_LE_U_2(shp->sh_seq[2]);
+ }
+ }
+ ND_PRINT("seg %u ", ack & SGQ_MASK);
+ }
+ break;
+ case MFS_ILS+MFS_INT:
+ ND_PRINT("intr ");
+ {
+ const struct seghdr *shp = (const struct seghdr *)nspp;
+ u_int ack;
+ u_int data_off = sizeof(struct minseghdr);
+
+ if (nsplen < data_off)
+ goto invalid;
+ ack = GET_LE_U_2(shp->sh_seq[0]);
+ if (ack & SGQ_ACK) { /* acknum field */
+ if ((ack & SGQ_NAK) == SGQ_NAK)
+ ND_PRINT("nak %u ", ack & SGQ_MASK);
+ else
+ ND_PRINT("ack %u ", ack & SGQ_MASK);
+ data_off += sizeof(short);
+ if (nsplen < data_off)
+ goto invalid;
+ ack = GET_LE_U_2(shp->sh_seq[1]);
+ if (ack & SGQ_OACK) { /* ackdat field */
+ if ((ack & SGQ_ONAK) == SGQ_ONAK)
+ ND_PRINT("nakdat %u ", ack & SGQ_MASK);
+ else
+ ND_PRINT("ackdat %u ", ack & SGQ_MASK);
+ data_off += sizeof(short);
+ if (nsplen < data_off)
+ goto invalid;
+ ack = GET_LE_U_2(shp->sh_seq[2]);
+ }
+ }
+ ND_PRINT("seg %u ", ack & SGQ_MASK);
+ }
+ break;
+ case MFS_ILS:
+ ND_PRINT("link-service %u>%u ", src, dst);
+ {
+ const struct seghdr *shp = (const struct seghdr *)nspp;
+ const struct lsmsg *lsmp =
+ (const struct lsmsg *)(nspp + sizeof(struct seghdr));
+ u_int ack;
+ u_int lsflags, fcval;
+
+ if (nsplen < sizeof(struct seghdr) + sizeof(struct lsmsg))
+ goto invalid;
+ ack = GET_LE_U_2(shp->sh_seq[0]);
+ if (ack & SGQ_ACK) { /* acknum field */
+ if ((ack & SGQ_NAK) == SGQ_NAK)
+ ND_PRINT("nak %u ", ack & SGQ_MASK);
+ else
+ ND_PRINT("ack %u ", ack & SGQ_MASK);
+ ack = GET_LE_U_2(shp->sh_seq[1]);
+ if (ack & SGQ_OACK) { /* ackdat field */
+ if ((ack & SGQ_ONAK) == SGQ_ONAK)
+ ND_PRINT("nakdat %u ", ack & SGQ_MASK);
+ else
+ ND_PRINT("ackdat %u ", ack & SGQ_MASK);
+ ack = GET_LE_U_2(shp->sh_seq[2]);
+ }
+ }
+ ND_PRINT("seg %u ", ack & SGQ_MASK);
+ lsflags = GET_U_1(lsmp->ls_lsflags);
+ fcval = GET_U_1(lsmp->ls_fcval);
+ switch (lsflags & LSI_MASK) {
+ case LSI_DATA:
+ ND_PRINT("dat seg count %u ", fcval);
+ switch (lsflags & LSM_MASK) {
+ case LSM_NOCHANGE:
+ break;
+ case LSM_DONOTSEND:
+ ND_PRINT("donotsend-data ");
+ break;
+ case LSM_SEND:
+ ND_PRINT("send-data ");
+ break;
+ default:
+ ND_PRINT("reserved-fcmod? %x", lsflags);
+ break;
+ }
+ break;
+ case LSI_INTR:
+ ND_PRINT("intr req count %u ", fcval);
+ break;
+ default:
+ ND_PRINT("reserved-fcval-int? %x", lsflags);
+ break;
+ }
+ }
+ break;
+ default:
+ ND_PRINT("reserved-subtype? %x %u > %u", flags, src, dst);
+ break;
+ }
+ break;
+ case MFT_ACK:
+ switch (flags & NSP_SUBMASK) {
+ case MFS_DACK:
+ ND_PRINT("data-ack %u>%u ", src, dst);
+ {
+ const struct ackmsg *amp = (const struct ackmsg *)nspp;
+ u_int ack;
+
+ if (nsplen < sizeof(struct ackmsg))
+ goto invalid;
+ ND_TCHECK_SIZE(amp);
+ ack = GET_LE_U_2(amp->ak_acknum[0]);
+ if (ack & SGQ_ACK) { /* acknum field */
+ if ((ack & SGQ_NAK) == SGQ_NAK)
+ ND_PRINT("nak %u ", ack & SGQ_MASK);
+ else
+ ND_PRINT("ack %u ", ack & SGQ_MASK);
+ ack = GET_LE_U_2(amp->ak_acknum[1]);
+ if (ack & SGQ_OACK) { /* ackoth field */
+ if ((ack & SGQ_ONAK) == SGQ_ONAK)
+ ND_PRINT("onak %u ", ack & SGQ_MASK);
+ else
+ ND_PRINT("oack %u ", ack & SGQ_MASK);
+ }
+ }
+ }
+ break;
+ case MFS_IACK:
+ ND_PRINT("ils-ack %u>%u ", src, dst);
+ {
+ const struct ackmsg *amp = (const struct ackmsg *)nspp;
+ u_int ack;
+
+ if (nsplen < sizeof(struct ackmsg))
+ goto invalid;
+ ND_TCHECK_SIZE(amp);
+ ack = GET_LE_U_2(amp->ak_acknum[0]);
+ if (ack & SGQ_ACK) { /* acknum field */
+ if ((ack & SGQ_NAK) == SGQ_NAK)
+ ND_PRINT("nak %u ", ack & SGQ_MASK);
+ else
+ ND_PRINT("ack %u ", ack & SGQ_MASK);
+ ack = GET_LE_U_2(amp->ak_acknum[1]);
+ if (ack & SGQ_OACK) { /* ackdat field */
+ if ((ack & SGQ_ONAK) == SGQ_ONAK)
+ ND_PRINT("nakdat %u ", ack & SGQ_MASK);
+ else
+ ND_PRINT("ackdat %u ", ack & SGQ_MASK);
+ }
+ }
+ }
+ break;
+ case MFS_CACK:
+ ND_PRINT("conn-ack %u", dst);
+ break;
+ default:
+ ND_PRINT("reserved-acktype? %x %u > %u", flags, src, dst);
+ break;
+ }
+ break;
+ case MFT_CTL:
+ switch (flags & NSP_SUBMASK) {
+ case MFS_CI:
+ case MFS_RCI:
+ if ((flags & NSP_SUBMASK) == MFS_CI)
+ ND_PRINT("conn-initiate ");
+ else
+ ND_PRINT("retrans-conn-initiate ");
+ ND_PRINT("%u>%u ", src, dst);
+ {
+ const struct cimsg *cimp = (const struct cimsg *)nspp;
+ u_int services, info, segsize;
+
+ if (nsplen < sizeof(struct cimsg))
+ goto invalid;
+ services = GET_U_1(cimp->ci_services);
+ info = GET_U_1(cimp->ci_info);
+ segsize = GET_LE_U_2(cimp->ci_segsize);
+
+ switch (services & COS_MASK) {
+ case COS_NONE:
+ break;
+ case COS_SEGMENT:
+ ND_PRINT("seg ");
+ break;
+ case COS_MESSAGE:
+ ND_PRINT("msg ");
+ break;
+ }
+ switch (info & COI_MASK) {
+ case COI_32:
+ ND_PRINT("ver 3.2 ");
+ break;
+ case COI_31:
+ ND_PRINT("ver 3.1 ");
+ break;
+ case COI_40:
+ ND_PRINT("ver 4.0 ");
+ break;
+ case COI_41:
+ ND_PRINT("ver 4.1 ");
+ break;
+ }
+ ND_PRINT("segsize %u ", segsize);
+ }
+ break;
+ case MFS_CC:
+ ND_PRINT("conn-confirm %u>%u ", src, dst);
+ {
+ const struct ccmsg *ccmp = (const struct ccmsg *)nspp;
+ u_int services, info;
+ u_int segsize, optlen;
+
+ if (nsplen < sizeof(struct ccmsg))
+ goto invalid;
+ services = GET_U_1(ccmp->cc_services);
+ info = GET_U_1(ccmp->cc_info);
+ segsize = GET_LE_U_2(ccmp->cc_segsize);
+ optlen = GET_U_1(ccmp->cc_optlen);
+
+ switch (services & COS_MASK) {
+ case COS_NONE:
+ break;
+ case COS_SEGMENT:
+ ND_PRINT("seg ");
+ break;
+ case COS_MESSAGE:
+ ND_PRINT("msg ");
+ break;
+ }
+ switch (info & COI_MASK) {
+ case COI_32:
+ ND_PRINT("ver 3.2 ");
+ break;
+ case COI_31:
+ ND_PRINT("ver 3.1 ");
+ break;
+ case COI_40:
+ ND_PRINT("ver 4.0 ");
+ break;
+ case COI_41:
+ ND_PRINT("ver 4.1 ");
+ break;
+ }
+ ND_PRINT("segsize %u ", segsize);
+ if (optlen) {
+ ND_PRINT("optlen %u ", optlen);
+ }
+ }
+ break;
+ case MFS_DI:
+ ND_PRINT("disconn-initiate %u>%u ", src, dst);
+ {
+ const struct dimsg *dimp = (const struct dimsg *)nspp;
+ u_int reason;
+ u_int optlen;
+
+ if (nsplen < sizeof(struct dimsg))
+ goto invalid;
+ reason = GET_LE_U_2(dimp->di_reason);
+ optlen = GET_U_1(dimp->di_optlen);
+
+ print_reason(ndo, reason);
+ if (optlen) {
+ ND_PRINT("optlen %u ", optlen);
+ }
+ }
+ break;
+ case MFS_DC:
+ ND_PRINT("disconn-confirm %u>%u ", src, dst);
+ {
+ const struct dcmsg *dcmp = (const struct dcmsg *)nspp;
+ u_int reason;
+
+ reason = GET_LE_U_2(dcmp->dc_reason);
+
+ print_reason(ndo, reason);
+ }
+ break;
+ default:
+ ND_PRINT("reserved-ctltype? %x %u > %u", flags, src, dst);
+ break;
+ }
+ break;
+ default:
+ ND_PRINT("reserved-type? %x %u > %u", flags, src, dst);
+ break;
+ }
+ return (1);
+
+invalid:
+ return (0);
+}
+
+static const struct tok reason2str[] = {
+ { UC_OBJREJECT, "object rejected connect" },
+ { UC_RESOURCES, "insufficient resources" },
+ { UC_NOSUCHNODE, "unrecognized node name" },
+ { DI_SHUT, "node is shutting down" },
+ { UC_NOSUCHOBJ, "unrecognized object" },
+ { UC_INVOBJFORMAT, "invalid object name format" },
+ { UC_OBJTOOBUSY, "object too busy" },
+ { DI_PROTOCOL, "protocol error discovered" },
+ { DI_TPA, "third party abort" },
+ { UC_USERABORT, "user abort" },
+ { UC_INVNODEFORMAT, "invalid node name format" },
+ { UC_LOCALSHUT, "local node shutting down" },
+ { DI_LOCALRESRC, "insufficient local resources" },
+ { DI_REMUSERRESRC, "insufficient remote user resources" },
+ { UC_ACCESSREJECT, "invalid access control information" },
+ { DI_BADACCNT, "bad ACCOUNT information" },
+ { UC_NORESPONSE, "no response from object" },
+ { UC_UNREACHABLE, "node unreachable" },
+ { DC_NOLINK, "no link terminate" },
+ { DC_COMPLETE, "disconnect complete" },
+ { DI_BADIMAGE, "bad image data in connect" },
+ { DI_SERVMISMATCH, "cryptographic service mismatch" },
+ { 0, NULL }
+};
+
+static void
+print_reason(netdissect_options *ndo,
+ u_int reason)
+{
+ ND_PRINT("%s ", tok2str(reason2str, "reason-%u", reason));
+}
+
+const char *
+dnnum_string(netdissect_options *ndo, u_short dnaddr)
+{
+ char *str;
+ size_t siz;
+ u_int area = (u_short)(dnaddr & AREAMASK) >> AREASHIFT;
+ u_int node = dnaddr & NODEMASK;
+
+ /* malloc() return used by the 'dnaddrtable' hash table: do not free() */
+ str = (char *)malloc(siz = sizeof("00.0000"));
+ if (str == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC, "%s: malloc", __func__);
+ snprintf(str, siz, "%u.%u", area, node);
+ return(str);
+}
diff --git a/print-dhcp6.c b/print-dhcp6.c
new file mode 100644
index 0000000..6b0dc21
--- /dev/null
+++ b/print-dhcp6.c
@@ -0,0 +1,853 @@
+/*
+ * Copyright (C) 1998 and 1999 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* \summary: IPv6 DHCP printer */
+
+/*
+ * RFC3315: DHCPv6
+ * supported DHCPv6 options:
+ * RFC3319: Session Initiation Protocol (SIP) Servers options,
+ * RFC3633: IPv6 Prefix options,
+ * RFC3646: DNS Configuration options,
+ * RFC3898: Network Information Service (NIS) Configuration options,
+ * RFC4075: Simple Network Time Protocol (SNTP) Configuration option,
+ * RFC4242: Information Refresh Time option,
+ * RFC4280: Broadcast and Multicast Control Servers options,
+ * RFC5908: Network Time Protocol (NTP) Server Option for DHCPv6
+ * RFC6334: Dual-Stack Lite option,
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+/* lease duration */
+#define DHCP6_DURATION_INFINITE 0xffffffff
+
+/* Error Values */
+#define DH6ERR_FAILURE 16
+#define DH6ERR_AUTHFAIL 17
+#define DH6ERR_POORLYFORMED 18
+#define DH6ERR_UNAVAIL 19
+#define DH6ERR_OPTUNAVAIL 20
+
+/* Message type */
+#define DH6_SOLICIT 1
+#define DH6_ADVERTISE 2
+#define DH6_REQUEST 3
+#define DH6_CONFIRM 4
+#define DH6_RENEW 5
+#define DH6_REBIND 6
+#define DH6_REPLY 7
+#define DH6_RELEASE 8
+#define DH6_DECLINE 9
+#define DH6_RECONFIGURE 10
+#define DH6_INFORM_REQ 11
+#define DH6_RELAY_FORW 12
+#define DH6_RELAY_REPLY 13
+#define DH6_LEASEQUERY 14
+#define DH6_LQ_REPLY 15
+
+static const struct tok dh6_msgtype_str[] = {
+ { DH6_SOLICIT, "solicit" },
+ { DH6_ADVERTISE, "advertise" },
+ { DH6_REQUEST, "request" },
+ { DH6_CONFIRM, "confirm" },
+ { DH6_RENEW, "renew" },
+ { DH6_REBIND, "rebind" },
+ { DH6_REPLY, "reply" },
+ { DH6_RELEASE, "release" },
+ { DH6_DECLINE, "decline" },
+ { DH6_RECONFIGURE, "reconfigure" },
+ { DH6_INFORM_REQ, "inf-req" },
+ { DH6_RELAY_FORW, "relay-fwd" },
+ { DH6_RELAY_REPLY, "relay-reply" },
+ { DH6_LEASEQUERY, "leasequery" },
+ { DH6_LQ_REPLY, "leasequery-reply" },
+ { 0, NULL }
+};
+
+/* DHCP6 base packet format */
+struct dhcp6 {
+ union {
+ nd_uint8_t msgtype;
+ nd_uint32_t xid;
+ } dh6_msgtypexid;
+ /* options follow */
+};
+#define DH6_XIDMASK 0x00ffffff
+
+/* DHCPv6 relay messages */
+struct dhcp6_relay {
+ nd_uint8_t dh6relay_msgtype;
+ nd_uint8_t dh6relay_hcnt;
+ nd_ipv6 dh6relay_linkaddr; /* XXX: badly aligned */
+ nd_ipv6 dh6relay_peeraddr;
+ /* options follow */
+};
+
+/* options */
+#define DH6OPT_CLIENTID 1
+#define DH6OPT_SERVERID 2
+#define DH6OPT_IA_NA 3
+#define DH6OPT_IA_TA 4
+#define DH6OPT_IA_ADDR 5
+#define DH6OPT_ORO 6
+#define DH6OPT_PREFERENCE 7
+# define DH6OPT_PREF_MAX 255
+#define DH6OPT_ELAPSED_TIME 8
+#define DH6OPT_RELAY_MSG 9
+/*#define DH6OPT_SERVER_MSG 10 deprecated */
+#define DH6OPT_AUTH 11
+# define DH6OPT_AUTHPROTO_DELAYED 2
+# define DH6OPT_AUTHPROTO_RECONFIG 3
+# define DH6OPT_AUTHALG_HMACMD5 1
+# define DH6OPT_AUTHRDM_MONOCOUNTER 0
+# define DH6OPT_AUTHRECONFIG_KEY 1
+# define DH6OPT_AUTHRECONFIG_HMACMD5 2
+#define DH6OPT_UNICAST 12
+#define DH6OPT_STATUS_CODE 13
+# define DH6OPT_STCODE_SUCCESS 0
+# define DH6OPT_STCODE_UNSPECFAIL 1
+# define DH6OPT_STCODE_NOADDRAVAIL 2
+# define DH6OPT_STCODE_NOBINDING 3
+# define DH6OPT_STCODE_NOTONLINK 4
+# define DH6OPT_STCODE_USEMULTICAST 5
+# define DH6OPT_STCODE_NOPREFIXAVAIL 6
+# define DH6OPT_STCODE_UNKNOWNQUERYTYPE 7
+# define DH6OPT_STCODE_MALFORMEDQUERY 8
+# define DH6OPT_STCODE_NOTCONFIGURED 9
+# define DH6OPT_STCODE_NOTALLOWED 10
+#define DH6OPT_RAPID_COMMIT 14
+#define DH6OPT_USER_CLASS 15
+#define DH6OPT_VENDOR_CLASS 16
+#define DH6OPT_VENDOR_OPTS 17
+#define DH6OPT_INTERFACE_ID 18
+#define DH6OPT_RECONF_MSG 19
+#define DH6OPT_RECONF_ACCEPT 20
+#define DH6OPT_SIP_SERVER_D 21
+#define DH6OPT_SIP_SERVER_A 22
+#define DH6OPT_DNS_SERVERS 23
+#define DH6OPT_DOMAIN_LIST 24
+#define DH6OPT_IA_PD 25
+#define DH6OPT_IA_PD_PREFIX 26
+#define DH6OPT_NIS_SERVERS 27
+#define DH6OPT_NISP_SERVERS 28
+#define DH6OPT_NIS_NAME 29
+#define DH6OPT_NISP_NAME 30
+#define DH6OPT_SNTP_SERVERS 31
+#define DH6OPT_LIFETIME 32
+#define DH6OPT_BCMCS_SERVER_D 33
+#define DH6OPT_BCMCS_SERVER_A 34
+#define DH6OPT_GEOCONF_CIVIC 36
+#define DH6OPT_REMOTE_ID 37
+#define DH6OPT_SUBSCRIBER_ID 38
+#define DH6OPT_CLIENT_FQDN 39
+#define DH6OPT_PANA_AGENT 40
+#define DH6OPT_NEW_POSIX_TIMEZONE 41
+#define DH6OPT_NEW_TZDB_TIMEZONE 42
+#define DH6OPT_ERO 43
+#define DH6OPT_LQ_QUERY 44
+#define DH6OPT_CLIENT_DATA 45
+#define DH6OPT_CLT_TIME 46
+#define DH6OPT_LQ_RELAY_DATA 47
+#define DH6OPT_LQ_CLIENT_LINK 48
+#define DH6OPT_NTP_SERVER 56
+# define DH6OPT_NTP_SUBOPTION_SRV_ADDR 1
+# define DH6OPT_NTP_SUBOPTION_MC_ADDR 2
+# define DH6OPT_NTP_SUBOPTION_SRV_FQDN 3
+#define DH6OPT_AFTR_NAME 64
+#define DH6OPT_MUDURL 112
+
+static const struct tok dh6opt_str[] = {
+ { DH6OPT_CLIENTID, "client-ID" },
+ { DH6OPT_SERVERID, "server-ID" },
+ { DH6OPT_IA_NA, "IA_NA" },
+ { DH6OPT_IA_TA, "IA_TA" },
+ { DH6OPT_IA_ADDR, "IA_ADDR" },
+ { DH6OPT_ORO, "option-request" },
+ { DH6OPT_PREFERENCE, "preference" },
+ { DH6OPT_ELAPSED_TIME, "elapsed-time" },
+ { DH6OPT_RELAY_MSG, "relay-message" },
+ { DH6OPT_AUTH, "authentication" },
+ { DH6OPT_UNICAST, "server-unicast" },
+ { DH6OPT_STATUS_CODE, "status-code" },
+ { DH6OPT_RAPID_COMMIT, "rapid-commit" },
+ { DH6OPT_USER_CLASS, "user-class" },
+ { DH6OPT_VENDOR_CLASS, "vendor-class" },
+ { DH6OPT_VENDOR_OPTS, "vendor-specific-info" },
+ { DH6OPT_INTERFACE_ID, "interface-ID" },
+ { DH6OPT_RECONF_MSG, "reconfigure-message" },
+ { DH6OPT_RECONF_ACCEPT, "reconfigure-accept" },
+ { DH6OPT_SIP_SERVER_D, "SIP-servers-domain" },
+ { DH6OPT_SIP_SERVER_A, "SIP-servers-address" },
+ { DH6OPT_DNS_SERVERS, "DNS-server" },
+ { DH6OPT_DOMAIN_LIST, "DNS-search-list" },
+ { DH6OPT_IA_PD, "IA_PD" },
+ { DH6OPT_IA_PD_PREFIX, "IA_PD-prefix" },
+ { DH6OPT_SNTP_SERVERS, "SNTP-servers" },
+ { DH6OPT_LIFETIME, "lifetime" },
+ { DH6OPT_NIS_SERVERS, "NIS-server" },
+ { DH6OPT_NISP_SERVERS, "NIS+-server" },
+ { DH6OPT_NIS_NAME, "NIS-domain-name" },
+ { DH6OPT_NISP_NAME, "NIS+-domain-name" },
+ { DH6OPT_BCMCS_SERVER_D, "BCMCS-domain-name" },
+ { DH6OPT_BCMCS_SERVER_A, "BCMCS-server" },
+ { DH6OPT_GEOCONF_CIVIC, "Geoconf-Civic" },
+ { DH6OPT_REMOTE_ID, "Remote-ID" },
+ { DH6OPT_SUBSCRIBER_ID, "Subscriber-ID" },
+ { DH6OPT_CLIENT_FQDN, "Client-FQDN" },
+ { DH6OPT_PANA_AGENT, "PANA-agent" },
+ { DH6OPT_NEW_POSIX_TIMEZONE, "POSIX-timezone" },
+ { DH6OPT_NEW_TZDB_TIMEZONE, "POSIX-tz-database" },
+ { DH6OPT_ERO, "Echo-request-option" },
+ { DH6OPT_LQ_QUERY, "Lease-query" },
+ { DH6OPT_CLIENT_DATA, "LQ-client-data" },
+ { DH6OPT_CLT_TIME, "Clt-time" },
+ { DH6OPT_LQ_RELAY_DATA, "LQ-relay-data" },
+ { DH6OPT_LQ_CLIENT_LINK, "LQ-client-link" },
+ { DH6OPT_NTP_SERVER, "NTP-server" },
+ { DH6OPT_AFTR_NAME, "AFTR-Name" },
+ { DH6OPT_MUDURL, "MUD-URL" },
+ { 0, NULL }
+};
+
+static const struct tok dh6opt_stcode_str[] = {
+ { DH6OPT_STCODE_SUCCESS, "Success" }, /* RFC3315 */
+ { DH6OPT_STCODE_UNSPECFAIL, "UnspecFail" }, /* RFC3315 */
+ { DH6OPT_STCODE_NOADDRAVAIL, "NoAddrsAvail" }, /* RFC3315 */
+ { DH6OPT_STCODE_NOBINDING, "NoBinding" }, /* RFC3315 */
+ { DH6OPT_STCODE_NOTONLINK, "NotOnLink" }, /* RFC3315 */
+ { DH6OPT_STCODE_USEMULTICAST, "UseMulticast" }, /* RFC3315 */
+ { DH6OPT_STCODE_NOPREFIXAVAIL, "NoPrefixAvail" }, /* RFC3633 */
+ { DH6OPT_STCODE_UNKNOWNQUERYTYPE, "UnknownQueryType" }, /* RFC5007 */
+ { DH6OPT_STCODE_MALFORMEDQUERY, "MalformedQuery" }, /* RFC5007 */
+ { DH6OPT_STCODE_NOTCONFIGURED, "NotConfigured" }, /* RFC5007 */
+ { DH6OPT_STCODE_NOTALLOWED, "NotAllowed" }, /* RFC5007 */
+ { 0, NULL }
+};
+
+struct dhcp6opt {
+ nd_uint16_t dh6opt_type;
+ nd_uint16_t dh6opt_len;
+ /* type-dependent data follows */
+};
+
+static const char *
+dhcp6stcode(const uint16_t code)
+{
+ return code > 255 ? "INVALID code" : tok2str(dh6opt_stcode_str, "code%u", code);
+}
+
+static void
+dhcp6opt_print(netdissect_options *ndo,
+ const u_char *cp, const u_char *ep)
+{
+ const struct dhcp6opt *dh6o;
+ const u_char *tp;
+ u_int i;
+ uint16_t opttype;
+ uint16_t optlen;
+ uint8_t auth_proto;
+ uint8_t auth_alg;
+ uint8_t auth_rdm;
+ u_int authinfolen, authrealmlen;
+ u_int remain_len; /* Length of remaining options */
+ u_int label_len; /* Label length */
+ uint16_t subopt_code;
+ uint16_t subopt_len;
+ uint8_t dh6_reconf_type;
+ uint8_t dh6_lq_query_type;
+
+ if (cp == ep)
+ return;
+ while (cp < ep) {
+ if (ep < cp + sizeof(*dh6o))
+ goto trunc;
+ dh6o = (const struct dhcp6opt *)cp;
+ ND_TCHECK_SIZE(dh6o);
+ optlen = GET_BE_U_2(dh6o->dh6opt_len);
+ if (ep < cp + sizeof(*dh6o) + optlen)
+ goto trunc;
+ opttype = GET_BE_U_2(dh6o->dh6opt_type);
+ ND_PRINT(" (%s", tok2str(dh6opt_str, "opt_%u", opttype));
+ ND_TCHECK_LEN(cp + sizeof(*dh6o), optlen);
+ switch (opttype) {
+ case DH6OPT_CLIENTID:
+ case DH6OPT_SERVERID:
+ if (optlen < 2) {
+ /*(*/
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ switch (GET_BE_U_2(tp)) {
+ case 1:
+ if (optlen >= 2 + 6) {
+ ND_PRINT(" hwaddr/time type %u time %u ",
+ GET_BE_U_2(tp + 2),
+ GET_BE_U_4(tp + 4));
+ for (i = 8; i < optlen; i++)
+ ND_PRINT("%02x",
+ GET_U_1(tp + i));
+ /*(*/
+ ND_PRINT(")");
+ } else {
+ /*(*/
+ ND_PRINT(" ?)");
+ }
+ break;
+ case 2:
+ if (optlen >= 2 + 8) {
+ ND_PRINT(" vid ");
+ for (i = 2; i < 2 + 8; i++)
+ ND_PRINT("%02x",
+ GET_U_1(tp + i));
+ /*(*/
+ ND_PRINT(")");
+ } else {
+ /*(*/
+ ND_PRINT(" ?)");
+ }
+ break;
+ case 3:
+ if (optlen >= 2 + 2) {
+ ND_PRINT(" hwaddr type %u ",
+ GET_BE_U_2(tp + 2));
+ for (i = 4; i < optlen; i++)
+ ND_PRINT("%02x",
+ GET_U_1(tp + i));
+ /*(*/
+ ND_PRINT(")");
+ } else {
+ /*(*/
+ ND_PRINT(" ?)");
+ }
+ break;
+ default:
+ ND_PRINT(" type %u)", GET_BE_U_2(tp));
+ break;
+ }
+ break;
+ case DH6OPT_IA_ADDR:
+ if (optlen < 24) {
+ /*(*/
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ ND_PRINT(" %s", GET_IP6ADDR_STRING(tp));
+ ND_PRINT(" pltime:%u vltime:%u",
+ GET_BE_U_4(tp + 16),
+ GET_BE_U_4(tp + 20));
+ if (optlen > 24) {
+ /* there are sub-options */
+ dhcp6opt_print(ndo, tp + 24, tp + optlen);
+ }
+ ND_PRINT(")");
+ break;
+ case DH6OPT_ORO:
+ case DH6OPT_ERO:
+ if (optlen % 2) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ for (i = 0; i < optlen; i += 2) {
+ ND_PRINT(" %s",
+ tok2str(dh6opt_str, "opt_%u", GET_BE_U_2(tp + i)));
+ }
+ ND_PRINT(")");
+ break;
+ case DH6OPT_PREFERENCE:
+ if (optlen != 1) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ ND_PRINT(" %u)", GET_U_1(tp));
+ break;
+ case DH6OPT_ELAPSED_TIME:
+ if (optlen != 2) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ ND_PRINT(" %u)", GET_BE_U_2(tp));
+ break;
+ case DH6OPT_RELAY_MSG:
+ {
+ const u_char *snapend_save;
+
+ ND_PRINT(" (");
+ tp = (const u_char *)(dh6o + 1);
+ /*
+ * Update the snapend to the end of the option before
+ * calling recursively dhcp6_print() for the nested
+ * packet. Other options may be present after the
+ * nested DHCPv6 packet. This prevents that, in
+ * dhcp6_print(), for the nested DHCPv6 packet, the
+ * remaining length < remaining caplen.
+ */
+ snapend_save = ndo->ndo_snapend;
+ ndo->ndo_snapend = ND_MIN(tp + optlen, ndo->ndo_snapend);
+ dhcp6_print(ndo, tp, optlen);
+ ndo->ndo_snapend = snapend_save;
+ ND_PRINT(")");
+ break;
+ }
+ case DH6OPT_AUTH:
+ if (optlen < 11) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ auth_proto = GET_U_1(tp);
+ switch (auth_proto) {
+ case DH6OPT_AUTHPROTO_DELAYED:
+ ND_PRINT(" proto: delayed");
+ break;
+ case DH6OPT_AUTHPROTO_RECONFIG:
+ ND_PRINT(" proto: reconfigure");
+ break;
+ default:
+ ND_PRINT(" proto: %u", auth_proto);
+ break;
+ }
+ tp++;
+ auth_alg = GET_U_1(tp);
+ switch (auth_alg) {
+ case DH6OPT_AUTHALG_HMACMD5:
+ /* XXX: may depend on the protocol */
+ ND_PRINT(", alg: HMAC-MD5");
+ break;
+ default:
+ ND_PRINT(", alg: %u", auth_alg);
+ break;
+ }
+ tp++;
+ auth_rdm = GET_U_1(tp);
+ switch (auth_rdm) {
+ case DH6OPT_AUTHRDM_MONOCOUNTER:
+ ND_PRINT(", RDM: mono");
+ break;
+ default:
+ ND_PRINT(", RDM: %u", auth_rdm);
+ break;
+ }
+ tp++;
+ ND_PRINT(", RD:");
+ for (i = 0; i < 4; i++, tp += 2)
+ ND_PRINT(" %04x", GET_BE_U_2(tp));
+
+ /* protocol dependent part */
+ authinfolen = optlen - 11;
+ switch (auth_proto) {
+ case DH6OPT_AUTHPROTO_DELAYED:
+ if (authinfolen == 0)
+ break;
+ if (authinfolen < 20) {
+ ND_PRINT(" ??");
+ break;
+ }
+ authrealmlen = authinfolen - 20;
+ if (authrealmlen > 0) {
+ ND_PRINT(", realm: ");
+ }
+ for (i = 0; i < authrealmlen; i++, tp++)
+ ND_PRINT("%02x", GET_U_1(tp));
+ ND_PRINT(", key ID: %08x", GET_BE_U_4(tp));
+ tp += 4;
+ ND_PRINT(", HMAC-MD5:");
+ for (i = 0; i < 4; i++, tp+= 4)
+ ND_PRINT(" %08x", GET_BE_U_4(tp));
+ break;
+ case DH6OPT_AUTHPROTO_RECONFIG:
+ if (authinfolen != 17) {
+ ND_PRINT(" ??");
+ break;
+ }
+ switch (GET_U_1(tp)) {
+ case DH6OPT_AUTHRECONFIG_KEY:
+ ND_PRINT(" reconfig-key");
+ break;
+ case DH6OPT_AUTHRECONFIG_HMACMD5:
+ ND_PRINT(" type: HMAC-MD5");
+ break;
+ default:
+ ND_PRINT(" type: ??");
+ break;
+ }
+ tp++;
+ ND_PRINT(" value:");
+ for (i = 0; i < 4; i++, tp+= 4)
+ ND_PRINT(" %08x", GET_BE_U_4(tp));
+ break;
+ default:
+ ND_PRINT(" ??");
+ break;
+ }
+
+ ND_PRINT(")");
+ break;
+ case DH6OPT_RAPID_COMMIT: /* nothing todo */
+ ND_PRINT(")");
+ break;
+ case DH6OPT_INTERFACE_ID:
+ case DH6OPT_SUBSCRIBER_ID:
+ /*
+ * Since we cannot predict the encoding, print hex dump
+ * at most 10 characters.
+ */
+ tp = (const u_char *)(dh6o + 1);
+ ND_PRINT(" ");
+ for (i = 0; i < optlen && i < 10; i++)
+ ND_PRINT("%02x", GET_U_1(tp + i));
+ ND_PRINT("...)");
+ break;
+ case DH6OPT_RECONF_MSG:
+ if (optlen != 1) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ dh6_reconf_type = GET_U_1(tp);
+ switch (dh6_reconf_type) {
+ case DH6_RENEW:
+ ND_PRINT(" for renew)");
+ break;
+ case DH6_INFORM_REQ:
+ ND_PRINT(" for inf-req)");
+ break;
+ default:
+ ND_PRINT(" for ?\?\?(%02x))", dh6_reconf_type);
+ break;
+ }
+ break;
+ case DH6OPT_RECONF_ACCEPT: /* nothing todo */
+ ND_PRINT(")");
+ break;
+ case DH6OPT_SIP_SERVER_A:
+ case DH6OPT_DNS_SERVERS:
+ case DH6OPT_SNTP_SERVERS:
+ case DH6OPT_NIS_SERVERS:
+ case DH6OPT_NISP_SERVERS:
+ case DH6OPT_BCMCS_SERVER_A:
+ case DH6OPT_PANA_AGENT:
+ case DH6OPT_LQ_CLIENT_LINK:
+ if (optlen % 16) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ for (i = 0; i < optlen; i += 16)
+ ND_PRINT(" %s", GET_IP6ADDR_STRING(tp + i));
+ ND_PRINT(")");
+ break;
+ case DH6OPT_SIP_SERVER_D:
+ case DH6OPT_DOMAIN_LIST:
+ tp = (const u_char *)(dh6o + 1);
+ while (tp < cp + sizeof(*dh6o) + optlen) {
+ ND_PRINT(" ");
+ if ((tp = fqdn_print(ndo, tp, cp + sizeof(*dh6o) + optlen)) == NULL)
+ goto trunc;
+ }
+ ND_PRINT(")");
+ break;
+ case DH6OPT_STATUS_CODE:
+ if (optlen < 2) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ ND_PRINT(" %s)", dhcp6stcode(GET_BE_U_2(tp)));
+ break;
+ case DH6OPT_IA_NA:
+ case DH6OPT_IA_PD:
+ if (optlen < 12) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ ND_PRINT(" IAID:%u T1:%u T2:%u",
+ GET_BE_U_4(tp),
+ GET_BE_U_4(tp + 4),
+ GET_BE_U_4(tp + 8));
+ if (optlen > 12) {
+ /* there are sub-options */
+ dhcp6opt_print(ndo, tp + 12, tp + optlen);
+ }
+ ND_PRINT(")");
+ break;
+ case DH6OPT_IA_TA:
+ if (optlen < 4) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ ND_PRINT(" IAID:%u", GET_BE_U_4(tp));
+ if (optlen > 4) {
+ /* there are sub-options */
+ dhcp6opt_print(ndo, tp + 4, tp + optlen);
+ }
+ ND_PRINT(")");
+ break;
+ case DH6OPT_IA_PD_PREFIX:
+ if (optlen < 25) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ ND_PRINT(" %s/%u", GET_IP6ADDR_STRING(tp + 9),
+ GET_U_1(tp + 8));
+ ND_PRINT(" pltime:%u vltime:%u",
+ GET_BE_U_4(tp),
+ GET_BE_U_4(tp + 4));
+ if (optlen > 25) {
+ /* there are sub-options */
+ dhcp6opt_print(ndo, tp + 25, tp + optlen);
+ }
+ ND_PRINT(")");
+ break;
+ case DH6OPT_LIFETIME:
+ case DH6OPT_CLT_TIME:
+ if (optlen != 4) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ ND_PRINT(" %u)", GET_BE_U_4(tp));
+ break;
+ case DH6OPT_REMOTE_ID:
+ if (optlen < 4) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ ND_PRINT(" %u ", GET_BE_U_4(tp));
+ /*
+ * Print hex dump first 10 characters.
+ */
+ for (i = 4; i < optlen && i < 14; i++)
+ ND_PRINT("%02x", GET_U_1(tp + i));
+ ND_PRINT("...)");
+ break;
+ case DH6OPT_LQ_QUERY:
+ if (optlen < 17) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ dh6_lq_query_type = GET_U_1(tp);
+ switch (dh6_lq_query_type) {
+ case 1:
+ ND_PRINT(" by-address");
+ break;
+ case 2:
+ ND_PRINT(" by-clientID");
+ break;
+ default:
+ ND_PRINT(" type_%u", dh6_lq_query_type);
+ break;
+ }
+ ND_PRINT(" %s", GET_IP6ADDR_STRING(tp + 1));
+ if (optlen > 17) {
+ /* there are query-options */
+ dhcp6opt_print(ndo, tp + 17, tp + optlen);
+ }
+ ND_PRINT(")");
+ break;
+ case DH6OPT_CLIENT_DATA:
+ tp = (const u_char *)(dh6o + 1);
+ if (optlen > 0) {
+ /* there are encapsulated options */
+ dhcp6opt_print(ndo, tp, tp + optlen);
+ }
+ ND_PRINT(")");
+ break;
+ case DH6OPT_LQ_RELAY_DATA:
+ if (optlen < 16) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ ND_PRINT(" %s ", GET_IP6ADDR_STRING(tp));
+ /*
+ * Print hex dump first 10 characters.
+ */
+ for (i = 16; i < optlen && i < 26; i++)
+ ND_PRINT("%02x", GET_U_1(tp + i));
+ ND_PRINT("...)");
+ break;
+ case DH6OPT_NTP_SERVER:
+ if (optlen < 4) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ while (tp < cp + sizeof(*dh6o) + optlen - 4) {
+ subopt_code = GET_BE_U_2(tp);
+ tp += 2;
+ subopt_len = GET_BE_U_2(tp);
+ tp += 2;
+ if (tp + subopt_len > cp + sizeof(*dh6o) + optlen)
+ goto trunc;
+ ND_PRINT(" subopt:%u", subopt_code);
+ switch (subopt_code) {
+ case DH6OPT_NTP_SUBOPTION_SRV_ADDR:
+ case DH6OPT_NTP_SUBOPTION_MC_ADDR:
+ if (subopt_len != 16) {
+ ND_PRINT(" ?");
+ break;
+ }
+ ND_PRINT(" %s", GET_IP6ADDR_STRING(tp));
+ break;
+ case DH6OPT_NTP_SUBOPTION_SRV_FQDN:
+ ND_PRINT(" ");
+ if (fqdn_print(ndo, tp, tp + subopt_len) == NULL)
+ goto trunc;
+ break;
+ default:
+ ND_PRINT(" ?");
+ break;
+ }
+ tp += subopt_len;
+ }
+ ND_PRINT(")");
+ break;
+ case DH6OPT_AFTR_NAME:
+ if (optlen < 3) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ remain_len = optlen;
+ ND_PRINT(" ");
+ /* Encoding is described in section 3.1 of RFC 1035 */
+ while (remain_len && GET_U_1(tp)) {
+ label_len = GET_U_1(tp);
+ tp++;
+ if (label_len < remain_len - 1) {
+ nd_printjnp(ndo, tp, label_len);
+ tp += label_len;
+ remain_len -= (label_len + 1);
+ if(GET_U_1(tp)) ND_PRINT(".");
+ } else {
+ ND_PRINT(" ?");
+ break;
+ }
+ }
+ ND_PRINT(")");
+ break;
+ case DH6OPT_NEW_POSIX_TIMEZONE: /* all three of these options */
+ case DH6OPT_NEW_TZDB_TIMEZONE: /* are encoded similarly */
+ case DH6OPT_MUDURL: /* although GMT might not work */
+ if (optlen < 5) {
+ ND_PRINT(" ?)");
+ break;
+ }
+ tp = (const u_char *)(dh6o + 1);
+ ND_PRINT(" ");
+ nd_printjnp(ndo, tp, optlen);
+ ND_PRINT(")");
+ break;
+
+ default:
+ ND_PRINT(")");
+ break;
+ }
+
+ cp += sizeof(*dh6o) + optlen;
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+/*
+ * Print dhcp6 packets
+ */
+void
+dhcp6_print(netdissect_options *ndo,
+ const u_char *cp, u_int length)
+{
+ const struct dhcp6 *dh6;
+ const struct dhcp6_relay *dh6relay;
+ uint8_t msgtype;
+ const u_char *ep;
+ const u_char *extp;
+ const char *name;
+
+ ndo->ndo_protocol = "dhcp6";
+ ND_PRINT("dhcp6");
+
+ ep = ndo->ndo_snapend;
+ if (cp + length < ep)
+ ep = cp + length;
+
+ dh6 = (const struct dhcp6 *)cp;
+ dh6relay = (const struct dhcp6_relay *)cp;
+ ND_TCHECK_4(dh6->dh6_msgtypexid.xid);
+ msgtype = GET_U_1(dh6->dh6_msgtypexid.msgtype);
+ name = tok2str(dh6_msgtype_str, "msgtype-%u", msgtype);
+
+ if (!ndo->ndo_vflag) {
+ ND_PRINT(" %s", name);
+ return;
+ }
+
+ /* XXX relay agent messages have to be handled differently */
+
+ ND_PRINT(" %s (", name); /*)*/
+ if (msgtype != DH6_RELAY_FORW && msgtype != DH6_RELAY_REPLY) {
+ ND_PRINT("xid=%x",
+ GET_BE_U_4(dh6->dh6_msgtypexid.xid) & DH6_XIDMASK);
+ extp = (const u_char *)(dh6 + 1);
+ dhcp6opt_print(ndo, extp, ep);
+ } else { /* relay messages */
+ ND_PRINT("linkaddr=%s", GET_IP6ADDR_STRING(dh6relay->dh6relay_linkaddr));
+
+ ND_PRINT(" peeraddr=%s", GET_IP6ADDR_STRING(dh6relay->dh6relay_peeraddr));
+
+ dhcp6opt_print(ndo, (const u_char *)(dh6relay + 1), ep);
+ }
+ /*(*/
+ ND_PRINT(")");
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-domain.c b/print-domain.c
new file mode 100644
index 0000000..d2275a5
--- /dev/null
+++ b/print-domain.c
@@ -0,0 +1,1171 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Domain Name System (DNS) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "addrtostr.h"
+#include "extract.h"
+
+#include "nameser.h"
+
+static const char *ns_ops[] = {
+ "", " inv_q", " stat", " op3", " notify", " update", " op6", " op7",
+ " op8", " updateA", " updateD", " updateDA",
+ " updateM", " updateMA", " zoneInit", " zoneRef",
+};
+
+static const char *ns_resp[] = {
+ "", " FormErr", " ServFail", " NXDomain",
+ " NotImp", " Refused", " YXDomain", " YXRRSet",
+ " NXRRSet", " NotAuth", " NotZone", " Resp11",
+ " Resp12", " Resp13", " Resp14", " NoChange",
+ " BadVers", "Resp17", " Resp18", " Resp19",
+ " Resp20", "Resp21", " Resp22", " BadCookie",
+};
+
+static const char *
+ns_rcode(u_int rcode) {
+ static char buf[sizeof(" Resp4095")];
+
+ if (rcode < sizeof(ns_resp)/sizeof(ns_resp[0])) {
+ return (ns_resp[rcode]);
+ }
+ snprintf(buf, sizeof(buf), " Resp%u", rcode & 0xfff);
+ return (buf);
+}
+
+/* skip over a domain name */
+static const u_char *
+ns_nskip(netdissect_options *ndo,
+ const u_char *cp)
+{
+ u_char i;
+
+ if (!ND_TTEST_1(cp))
+ return (NULL);
+ i = GET_U_1(cp);
+ cp++;
+ while (i) {
+ switch (i & TYPE_MASK) {
+
+ case TYPE_INDIR:
+ return (cp + 1);
+
+ case TYPE_EDNS0: {
+ int bitlen, bytelen;
+
+ if ((i & ~TYPE_MASK) != EDNS0_ELT_BITLABEL)
+ return(NULL); /* unknown ELT */
+ if (!ND_TTEST_1(cp))
+ return (NULL);
+ if ((bitlen = GET_U_1(cp)) == 0)
+ bitlen = 256;
+ cp++;
+ bytelen = (bitlen + 7) / 8;
+ cp += bytelen;
+ }
+ break;
+
+ case TYPE_RESERVED:
+ return (NULL);
+
+ case TYPE_LABEL:
+ cp += i;
+ break;
+ }
+ if (!ND_TTEST_1(cp))
+ return (NULL);
+ i = GET_U_1(cp);
+ cp++;
+ }
+ return (cp);
+}
+
+static const u_char *
+blabel_print(netdissect_options *ndo,
+ const u_char *cp)
+{
+ u_int bitlen, slen, b;
+ const u_char *bitp, *lim;
+ uint8_t tc;
+
+ if (!ND_TTEST_1(cp))
+ return(NULL);
+ if ((bitlen = GET_U_1(cp)) == 0)
+ bitlen = 256;
+ slen = (bitlen + 3) / 4;
+ lim = cp + 1 + slen;
+
+ /* print the bit string as a hex string */
+ ND_PRINT("\\[x");
+ for (bitp = cp + 1, b = bitlen; bitp < lim && b > 7; b -= 8, bitp++) {
+ ND_PRINT("%02x", GET_U_1(bitp));
+ }
+ if (b > 4) {
+ tc = GET_U_1(bitp);
+ bitp++;
+ ND_PRINT("%02x", tc & (0xff << (8 - b)));
+ } else if (b > 0) {
+ tc = GET_U_1(bitp);
+ bitp++;
+ ND_PRINT("%1x", ((tc >> 4) & 0x0f) & (0x0f << (4 - b)));
+ }
+ ND_PRINT("/%u]", bitlen);
+ return lim;
+}
+
+static int
+labellen(netdissect_options *ndo,
+ const u_char *cp)
+{
+ u_int i;
+
+ if (!ND_TTEST_1(cp))
+ return(-1);
+ i = GET_U_1(cp);
+ switch (i & TYPE_MASK) {
+
+ case TYPE_EDNS0: {
+ u_int bitlen, elt;
+ if ((elt = (i & ~TYPE_MASK)) != EDNS0_ELT_BITLABEL) {
+ ND_PRINT("<ELT %d>", elt);
+ return(-1);
+ }
+ if (!ND_TTEST_1(cp + 1))
+ return(-1);
+ if ((bitlen = GET_U_1(cp + 1)) == 0)
+ bitlen = 256;
+ return(((bitlen + 7) / 8) + 1);
+ }
+
+ case TYPE_INDIR:
+ case TYPE_LABEL:
+ return(i);
+
+ default:
+ /*
+ * TYPE_RESERVED, but we use default to suppress compiler
+ * warnings about falling out of the switch statement.
+ */
+ ND_PRINT("<BAD LABEL TYPE>");
+ return(-1);
+ }
+}
+
+/* print a <domain-name> */
+const u_char *
+fqdn_print(netdissect_options *ndo,
+ const u_char *cp, const u_char *bp)
+{
+ u_int i, l;
+ const u_char *rp = NULL;
+ int compress = 0;
+ u_int elt;
+ u_int offset, max_offset;
+ u_int name_chars = 0;
+
+ if ((l = labellen(ndo, cp)) == (u_int)-1)
+ return(NULL);
+ if (!ND_TTEST_1(cp))
+ return(NULL);
+ max_offset = (u_int)(cp - bp);
+ i = GET_U_1(cp);
+ cp++;
+ if ((i & TYPE_MASK) != TYPE_INDIR) {
+ compress = 0;
+ rp = cp + l;
+ }
+
+ if (i != 0) {
+ while (i && cp < ndo->ndo_snapend) {
+ switch (i & TYPE_MASK) {
+
+ case TYPE_INDIR:
+ if (!compress) {
+ rp = cp + 1;
+ compress = 1;
+ }
+ if (!ND_TTEST_1(cp))
+ return(NULL);
+ offset = (((i << 8) | GET_U_1(cp)) & 0x3fff);
+ /*
+ * This must move backwards in the packet.
+ * No RFC explicitly says that, but BIND's
+ * name decompression code requires it,
+ * as a way of preventing infinite loops
+ * and other bad behavior, and it's probably
+ * what was intended (compress by pointing
+ * to domain name suffixes already seen in
+ * the packet).
+ */
+ if (offset >= max_offset) {
+ ND_PRINT("<BAD PTR>");
+ return(NULL);
+ }
+ max_offset = offset;
+ cp = bp + offset;
+ if (!ND_TTEST_1(cp))
+ return(NULL);
+ i = GET_U_1(cp);
+ if ((l = labellen(ndo, cp)) == (u_int)-1)
+ return(NULL);
+ cp++;
+ continue;
+
+ case TYPE_EDNS0:
+ elt = (i & ~TYPE_MASK);
+ switch(elt) {
+ case EDNS0_ELT_BITLABEL:
+ if (blabel_print(ndo, cp) == NULL)
+ return (NULL);
+ break;
+ default:
+ /* unknown ELT */
+ ND_PRINT("<ELT %u>", elt);
+ return(NULL);
+ }
+ break;
+
+ case TYPE_RESERVED:
+ ND_PRINT("<BAD LABEL TYPE>");
+ return(NULL);
+
+ case TYPE_LABEL:
+ if (name_chars + l <= MAXCDNAME) {
+ if (nd_printn(ndo, cp, l, ndo->ndo_snapend))
+ return(NULL);
+ } else if (name_chars < MAXCDNAME) {
+ if (nd_printn(ndo, cp,
+ MAXCDNAME - name_chars, ndo->ndo_snapend))
+ return(NULL);
+ }
+ name_chars += l;
+ break;
+ }
+
+ cp += l;
+ if (name_chars <= MAXCDNAME)
+ ND_PRINT(".");
+ name_chars++;
+ if (!ND_TTEST_1(cp))
+ return(NULL);
+ i = GET_U_1(cp);
+ if ((l = labellen(ndo, cp)) == (u_int)-1)
+ return(NULL);
+ cp++;
+ if (!compress)
+ rp += l + 1;
+ }
+ if (name_chars > MAXCDNAME)
+ ND_PRINT("<DOMAIN NAME TOO LONG>");
+ } else
+ ND_PRINT(".");
+ return (rp);
+}
+
+/* print a <character-string> */
+static const u_char *
+ns_cprint(netdissect_options *ndo,
+ const u_char *cp)
+{
+ u_int i;
+
+ if (!ND_TTEST_1(cp))
+ return (NULL);
+ i = GET_U_1(cp);
+ cp++;
+ if (nd_printn(ndo, cp, i, ndo->ndo_snapend))
+ return (NULL);
+ return (cp + i);
+}
+
+static void
+print_eopt_ecs(netdissect_options *ndo, const u_char *cp,
+ u_int data_len)
+{
+ u_int family, addr_bits, src_len, scope_len;
+
+ u_char padded[32];
+ char addr[INET6_ADDRSTRLEN];
+
+ /* ecs option must at least contain family, src len, and scope len */
+ if (data_len < 4) {
+ nd_print_invalid(ndo);
+ return;
+ }
+
+ family = GET_BE_U_2(cp);
+ cp += 2;
+ src_len = GET_U_1(cp);
+ cp += 1;
+ scope_len = GET_U_1(cp);
+ cp += 1;
+
+ if (family == 1)
+ addr_bits = 32;
+ else if (family == 2)
+ addr_bits = 128;
+ else {
+ nd_print_invalid(ndo);
+ return;
+ }
+
+ if (data_len - 4 > (addr_bits / 8)) {
+ nd_print_invalid(ndo);
+ return;
+ }
+ /* checks for invalid ecs scope or source length */
+ if (src_len > addr_bits || scope_len > addr_bits || ((src_len + 7) / 8) != (data_len - 4)) {
+ nd_print_invalid(ndo);
+ return;
+ }
+
+ /* pad the truncated address from ecs with zeros */
+ memset(padded, 0, sizeof(padded));
+ memcpy(padded, cp, data_len - 4);
+
+
+ if (family == 1)
+ ND_PRINT("%s/%d/%d", addrtostr(padded, addr, INET_ADDRSTRLEN),
+ src_len, scope_len);
+ else
+ ND_PRINT("%s/%d/%d", addrtostr6(padded, addr, INET6_ADDRSTRLEN),
+ src_len, scope_len);
+
+}
+
+extern const struct tok edns_opt2str[];
+extern const struct tok dau_alg2str[];
+extern const struct tok dhu_alg2str[];
+extern const struct tok n3u_alg2str[];
+
+
+/* print an <EDNS-option> */
+static const u_char *
+eopt_print(netdissect_options *ndo,
+ const u_char *cp)
+{
+ u_int opt, data_len, i;
+
+ if (!ND_TTEST_2(cp))
+ return (NULL);
+ opt = GET_BE_U_2(cp);
+ cp += 2;
+ ND_PRINT("%s", tok2str(edns_opt2str, "Opt%u", opt));
+ if (!ND_TTEST_2(cp))
+ return (NULL);
+ data_len = GET_BE_U_2(cp);
+ cp += 2;
+
+ ND_TCHECK_LEN(cp, data_len);
+
+ if (data_len > 0) {
+ ND_PRINT(" ");
+ switch (opt) {
+
+ case E_ECS:
+ print_eopt_ecs(ndo, cp, data_len);
+ break;
+ case E_COOKIE:
+ if (data_len < 8 || (data_len > 8 && data_len < 16) || data_len > 40)
+ nd_print_invalid(ndo);
+ else {
+ for (i = 0; i < data_len; ++i) {
+ /* split client and server cookie */
+ if (i == 8)
+ ND_PRINT(" ");
+ ND_PRINT("%02x", GET_U_1(cp + i));
+ }
+ }
+ break;
+ case E_KEEPALIVE:
+ if (data_len != 2)
+ nd_print_invalid(ndo);
+ else
+ /* keepalive is in increments of 100ms. Convert to seconds */
+ ND_PRINT("%0.1f sec", (GET_BE_U_2(cp) / 10.0));
+ break;
+ case E_EXPIRE:
+ if (data_len != 4)
+ nd_print_invalid(ndo);
+ else
+ ND_PRINT("%u sec", GET_BE_U_4(cp));
+ break;
+ case E_PADDING:
+ /* ignore contents and just print length */
+ ND_PRINT("(%u)", data_len);
+ break;
+ case E_KEYTAG:
+ if (data_len % 2 != 0)
+ nd_print_invalid(ndo);
+ else
+ for (i = 0; i < data_len; i += 2) {
+ if (i > 0)
+ ND_PRINT(" ");
+ ND_PRINT("%u", GET_BE_U_2(cp + i));
+ }
+ break;
+ case E_DAU:
+ for (i = 0; i < data_len; ++i) {
+ if (i > 0)
+ ND_PRINT(" ");
+ ND_PRINT("%s", tok2str(dau_alg2str, "Alg_%u", GET_U_1(cp + i)));
+ }
+ break;
+ case E_DHU:
+ for (i = 0; i < data_len; ++i) {
+ if (i > 0)
+ ND_PRINT(" ");
+ ND_PRINT("%s", tok2str(dhu_alg2str, "Alg_%u", GET_U_1(cp + i)));
+ }
+ break;
+ case E_N3U:
+ for (i = 0; i < data_len; ++i) {
+ if (i > 0)
+ ND_PRINT(" ");
+ ND_PRINT("%s", tok2str(n3u_alg2str, "Alg_%u", GET_U_1(cp + i)));
+ }
+ break;
+ case E_CHAIN:
+ fqdn_print(ndo, cp, cp + data_len);
+ break;
+ case E_NSID:
+ /* intentional fall-through. NSID is an undefined byte string */
+ default:
+ for (i = 0; i < data_len; ++i)
+ ND_PRINT("%02x", GET_U_1(cp + i));
+ break;
+ }
+ }
+ return (cp + data_len);
+
+ trunc:
+ return (NULL);
+
+}
+
+
+
+extern const struct tok ns_type2str[];
+
+/* https://www.iana.org/assignments/dns-parameters */
+const struct tok ns_type2str[] = {
+ { T_A, "A" }, /* RFC 1035 */
+ { T_NS, "NS" }, /* RFC 1035 */
+ { T_MD, "MD" }, /* RFC 1035 */
+ { T_MF, "MF" }, /* RFC 1035 */
+ { T_CNAME, "CNAME" }, /* RFC 1035 */
+ { T_SOA, "SOA" }, /* RFC 1035 */
+ { T_MB, "MB" }, /* RFC 1035 */
+ { T_MG, "MG" }, /* RFC 1035 */
+ { T_MR, "MR" }, /* RFC 1035 */
+ { T_NULL, "NULL" }, /* RFC 1035 */
+ { T_WKS, "WKS" }, /* RFC 1035 */
+ { T_PTR, "PTR" }, /* RFC 1035 */
+ { T_HINFO, "HINFO" }, /* RFC 1035 */
+ { T_MINFO, "MINFO" }, /* RFC 1035 */
+ { T_MX, "MX" }, /* RFC 1035 */
+ { T_TXT, "TXT" }, /* RFC 1035 */
+ { T_RP, "RP" }, /* RFC 1183 */
+ { T_AFSDB, "AFSDB" }, /* RFC 5864 */
+ { T_X25, "X25" }, /* RFC 1183 */
+ { T_ISDN, "ISDN" }, /* RFC 1183 */
+ { T_RT, "RT" }, /* RFC 1183 */
+ { T_NSAP, "NSAP" }, /* RFC 1706 */
+ { T_NSAP_PTR, "NSAP_PTR" }, /* RFC 1706 */
+ { T_SIG, "SIG" }, /* RFC 3008 */
+ { T_KEY, "KEY" }, /* RFC 3110 */
+ { T_PX, "PX" }, /* RFC 2163 */
+ { T_GPOS, "GPOS" }, /* RFC 1712 */
+ { T_AAAA, "AAAA" }, /* RFC 3596 */
+ { T_LOC, "LOC" }, /* RFC 1876 */
+ { T_NXT, "NXT" }, /* RFC 3755 */
+ { T_EID, "EID" }, /* Nimrod */
+ { T_NIMLOC, "NIMLOC" }, /* Nimrod */
+ { T_SRV, "SRV" }, /* RFC 2782 */
+ { T_ATMA, "ATMA" }, /* ATM Forum */
+ { T_NAPTR, "NAPTR" }, /* RFC 3403 */
+ { T_KX, "KX" }, /* RFC 2230 */
+ { T_CERT, "CERT" }, /* RFC 4398 */
+ { T_A6, "A6" }, /* RFC 6563 */
+ { T_DNAME, "DNAME" }, /* RFC 6672 */
+ { T_SINK, "SINK" },
+ { T_OPT, "OPT" }, /* RFC 6891 */
+ { T_APL, "APL" }, /* RFC 3123 */
+ { T_DS, "DS" }, /* RFC 4034 */
+ { T_SSHFP, "SSHFP" }, /* RFC 4255 */
+ { T_IPSECKEY, "IPSECKEY" }, /* RFC 4025 */
+ { T_RRSIG, "RRSIG" }, /* RFC 4034 */
+ { T_NSEC, "NSEC" }, /* RFC 4034 */
+ { T_DNSKEY, "DNSKEY" }, /* RFC 4034 */
+ { T_DHCID, "DHCID" }, /* RFC 4071 */
+ { T_NSEC3, "NSEC3" }, /* RFC 5155 */
+ { T_NSEC3PARAM, "NSEC3PARAM" }, /* RFC 5155 */
+ { T_TLSA, "TLSA" }, /* RFC 6698 */
+ { T_SMIMEA, "SMIMEA" }, /* RFC 8162 */
+ { T_HIP, "HIP" }, /* RFC 8005 */
+ { T_NINFO, "NINFO" },
+ { T_RKEY, "RKEY" },
+ { T_TALINK, "TALINK" },
+ { T_CDS, "CDS" }, /* RFC 7344 */
+ { T_CDNSKEY, "CDNSKEY" }, /* RFC 7344 */
+ { T_OPENPGPKEY, "OPENPGPKEY" }, /* RFC 7929 */
+ { T_CSYNC, "CSYNC" }, /* RFC 7477 */
+ { T_ZONEMD, "ZONEMD" }, /* RFC 8976 */
+ { T_SVCB, "SVCB" },
+ { T_HTTPS, "HTTPS" },
+ { T_SPF, "SPF" }, /* RFC 7208 */
+ { T_UINFO, "UINFO" },
+ { T_UID, "UID" },
+ { T_GID, "GID" },
+ { T_UNSPEC, "UNSPEC" },
+ { T_NID, "NID" }, /* RFC 6742 */
+ { T_L32, "L32" }, /* RFC 6742 */
+ { T_L64, "L64" }, /* RFC 6742 */
+ { T_LP, "LP" }, /* RFC 6742 */
+ { T_EUI48, "EUI48" }, /* RFC 7043 */
+ { T_EUI64, "EUI64" }, /* RFC 7043 */
+ { T_TKEY, "TKEY" }, /* RFC 2930 */
+ { T_TSIG, "TSIG" }, /* RFC 8945 */
+ { T_IXFR, "IXFR" }, /* RFC 1995 */
+ { T_AXFR, "AXFR" }, /* RFC 5936 */
+ { T_MAILB, "MAILB" }, /* RFC 1035 */
+ { T_MAILA, "MAILA" }, /* RFC 1035 */
+ { T_ANY, "ANY" }, /* RFC 8482 */
+ { T_URI, "URI" }, /* RFC 7553 */
+ { T_CAA, "CAA" }, /* RFC 8659 */
+ { T_AVC, "AVC" },
+ { T_DOA, "DOA" },
+ { T_AMTRELAY, "AMTRELAY" }, /* RFC 8777 */
+ { T_TA, "TA" },
+ { T_DLV, "DLV" }, /* RFC 8749 */
+ { 0, NULL }
+};
+
+extern const struct tok ns_class2str[];
+
+const struct tok ns_class2str[] = {
+ { C_IN, "IN" }, /* Not used */
+ { C_CHAOS, "CHAOS" },
+ { C_HS, "HS" },
+ { C_ANY, "ANY" },
+ { 0, NULL }
+};
+
+const struct tok edns_opt2str[] = {
+ { E_LLQ, "LLQ" },
+ { E_UL, "UL" },
+ { E_NSID, "NSID" },
+ { E_DAU, "DAU" },
+ { E_DHU, "DHU" },
+ { E_N3U, "N3U" },
+ { E_ECS, "ECS" },
+ { E_EXPIRE, "EXPIRE" },
+ { E_COOKIE, "COOKIE" },
+ { E_KEEPALIVE, "KEEPALIVE" },
+ { E_PADDING, "PADDING" },
+ { E_CHAIN, "CHAIN" },
+ { E_KEYTAG, "KEY-TAG" },
+ { E_CLIENTTAG, "CLIENT-TAG" },
+ { E_SERVERTAG, "SERVER-TAG" },
+ { 0, NULL }
+};
+
+const struct tok dau_alg2str[] = {
+ { A_DELETE, "DELETE" },
+ { A_RSAMD5, "RSAMD5" },
+ { A_DH, "DH" },
+ { A_DSA, "DS" },
+ { A_RSASHA1, "RSASHA1" },
+ { A_DSA_NSEC3_SHA1, "DSA-NSEC3-SHA1" },
+ { A_RSASHA1_NSEC3_SHA1, "RSASHA1-NSEC3-SHA1" },
+ { A_RSASHA256, "RSASHA256" },
+ { A_RSASHA512, "RSASHA512" },
+ { A_ECC_GOST, "ECC-GOST" },
+ { A_ECDSAP256SHA256, "ECDSAP256SHA256" },
+ { A_ECDSAP384SHA384, "ECDSAP384SHA384" },
+ { A_ED25519, "ED25519" },
+ { A_ED448, "ED448" },
+ { A_INDIRECT, "INDIRECT" },
+ { A_PRIVATEDNS, "PRIVATEDNS" },
+ { A_PRIVATEOID, "PRIVATEOID" },
+ { 0, NULL }
+};
+
+const struct tok dhu_alg2str[] = {
+ { DS_SHA1, "SHA-1" },
+ { DS_SHA256,"SHA-256" },
+ { DS_GOST, "GOST_R_34.11-94" },
+ { DS_SHA384,"SHA-384" },
+ { 0, NULL }
+};
+
+const struct tok n3u_alg2str[] = {
+ { NSEC_SHA1,"SHA-1" },
+ { 0, NULL }
+};
+
+/* print a query */
+static const u_char *
+ns_qprint(netdissect_options *ndo,
+ const u_char *cp, const u_char *bp, int is_mdns)
+{
+ const u_char *np = cp;
+ u_int i, class;
+
+ cp = ns_nskip(ndo, cp);
+
+ if (cp == NULL || !ND_TTEST_4(cp))
+ return(NULL);
+
+ /* print the qtype */
+ i = GET_BE_U_2(cp);
+ cp += 2;
+ ND_PRINT(" %s", tok2str(ns_type2str, "Type%u", i));
+ /* print the qclass (if it's not IN) */
+ i = GET_BE_U_2(cp);
+ cp += 2;
+ if (is_mdns)
+ class = (i & ~C_QU);
+ else
+ class = i;
+ if (class != C_IN)
+ ND_PRINT(" %s", tok2str(ns_class2str, "(Class %u)", class));
+ if (is_mdns) {
+ ND_PRINT(i & C_QU ? " (QU)" : " (QM)");
+ }
+
+ ND_PRINT("? ");
+ cp = fqdn_print(ndo, np, bp);
+ return(cp ? cp + 4 : NULL);
+}
+
+/* print a reply */
+static const u_char *
+ns_rprint(netdissect_options *ndo,
+ const u_char *cp, const u_char *bp, int is_mdns)
+{
+ u_int i, class, opt_flags = 0;
+ u_short typ, len;
+ const u_char *rp;
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" ");
+ if ((cp = fqdn_print(ndo, cp, bp)) == NULL)
+ return NULL;
+ } else
+ cp = ns_nskip(ndo, cp);
+
+ if (cp == NULL || !ND_TTEST_LEN(cp, 10))
+ return (ndo->ndo_snapend);
+
+ /* print the type/qtype */
+ typ = GET_BE_U_2(cp);
+ cp += 2;
+ /* print the class (if it's not IN and the type isn't OPT) */
+ i = GET_BE_U_2(cp);
+ cp += 2;
+ if (is_mdns)
+ class = (i & ~C_CACHE_FLUSH);
+ else
+ class = i;
+ if (class != C_IN && typ != T_OPT)
+ ND_PRINT(" %s", tok2str(ns_class2str, "(Class %u)", class));
+ if (is_mdns) {
+ if (i & C_CACHE_FLUSH)
+ ND_PRINT(" (Cache flush)");
+ }
+
+ if (typ == T_OPT) {
+ /* get opt flags */
+ cp += 2;
+ opt_flags = GET_BE_U_2(cp);
+ /* ignore rest of ttl field */
+ cp += 2;
+ } else if (ndo->ndo_vflag > 2) {
+ /* print ttl */
+ ND_PRINT(" [");
+ unsigned_relts_print(ndo, GET_BE_U_4(cp));
+ ND_PRINT("]");
+ cp += 4;
+ } else {
+ /* ignore ttl */
+ cp += 4;
+ }
+
+ len = GET_BE_U_2(cp);
+ cp += 2;
+
+ rp = cp + len;
+
+ ND_PRINT(" %s", tok2str(ns_type2str, "Type%u", typ));
+ if (rp > ndo->ndo_snapend)
+ return(NULL);
+
+ switch (typ) {
+ case T_A:
+ if (!ND_TTEST_LEN(cp, sizeof(nd_ipv4)))
+ return(NULL);
+ ND_PRINT(" %s", intoa(GET_IPV4_TO_NETWORK_ORDER(cp)));
+ break;
+
+ case T_NS:
+ case T_CNAME:
+ case T_PTR:
+ case T_DNAME:
+ ND_PRINT(" ");
+ if (fqdn_print(ndo, cp, bp) == NULL)
+ return(NULL);
+ break;
+
+ case T_SOA:
+ if (!ndo->ndo_vflag)
+ break;
+ ND_PRINT(" ");
+ if ((cp = fqdn_print(ndo, cp, bp)) == NULL)
+ return(NULL);
+ ND_PRINT(" ");
+ if ((cp = fqdn_print(ndo, cp, bp)) == NULL)
+ return(NULL);
+ if (!ND_TTEST_LEN(cp, 5 * 4))
+ return(NULL);
+ ND_PRINT(" %u", GET_BE_U_4(cp));
+ cp += 4;
+ ND_PRINT(" %u", GET_BE_U_4(cp));
+ cp += 4;
+ ND_PRINT(" %u", GET_BE_U_4(cp));
+ cp += 4;
+ ND_PRINT(" %u", GET_BE_U_4(cp));
+ cp += 4;
+ ND_PRINT(" %u", GET_BE_U_4(cp));
+ cp += 4;
+ break;
+ case T_MX:
+ ND_PRINT(" ");
+ if (!ND_TTEST_2(cp))
+ return(NULL);
+ if (fqdn_print(ndo, cp + 2, bp) == NULL)
+ return(NULL);
+ ND_PRINT(" %u", GET_BE_U_2(cp));
+ break;
+
+ case T_TXT:
+ while (cp < rp) {
+ ND_PRINT(" \"");
+ cp = ns_cprint(ndo, cp);
+ if (cp == NULL)
+ return(NULL);
+ ND_PRINT("\"");
+ }
+ break;
+
+ case T_SRV:
+ ND_PRINT(" ");
+ if (!ND_TTEST_6(cp))
+ return(NULL);
+ if (fqdn_print(ndo, cp + 6, bp) == NULL)
+ return(NULL);
+ ND_PRINT(":%u %u %u", GET_BE_U_2(cp + 4),
+ GET_BE_U_2(cp), GET_BE_U_2(cp + 2));
+ break;
+
+ case T_AAAA:
+ {
+ char ntop_buf[INET6_ADDRSTRLEN];
+
+ if (!ND_TTEST_LEN(cp, sizeof(nd_ipv6)))
+ return(NULL);
+ ND_PRINT(" %s",
+ addrtostr6(cp, ntop_buf, sizeof(ntop_buf)));
+
+ break;
+ }
+
+ case T_A6:
+ {
+ nd_ipv6 a;
+ int pbit, pbyte;
+ char ntop_buf[INET6_ADDRSTRLEN];
+
+ if (!ND_TTEST_1(cp))
+ return(NULL);
+ pbit = GET_U_1(cp);
+ pbyte = (pbit & ~7) / 8;
+ if (pbit > 128) {
+ ND_PRINT(" %u(bad plen)", pbit);
+ break;
+ } else if (pbit < 128) {
+ memset(a, 0, sizeof(a));
+ GET_CPY_BYTES(a + pbyte, cp + 1, sizeof(a) - pbyte);
+ ND_PRINT(" %u %s", pbit,
+ addrtostr6(&a, ntop_buf, sizeof(ntop_buf)));
+ }
+ if (pbit > 0) {
+ ND_PRINT(" ");
+ if (fqdn_print(ndo, cp + 1 + sizeof(a) - pbyte, bp) == NULL)
+ return(NULL);
+ }
+ break;
+ }
+
+ case T_URI:
+ if (!ND_TTEST_LEN(cp, len))
+ return(NULL);
+ ND_PRINT(" %u %u ", GET_BE_U_2(cp), GET_BE_U_2(cp + 2));
+ if (nd_printn(ndo, cp + 4, len - 4, ndo->ndo_snapend))
+ return(NULL);
+ break;
+
+ case T_OPT:
+ ND_PRINT(" UDPsize=%u", class);
+ if (opt_flags & 0x8000)
+ ND_PRINT(" DO");
+ if (cp < rp) {
+ ND_PRINT(" [");
+ while (cp < rp) {
+ cp = eopt_print(ndo, cp);
+ if (cp == NULL)
+ return(NULL);
+ if (cp < rp)
+ ND_PRINT(",");
+ }
+ ND_PRINT("]");
+ }
+ break;
+
+ case T_TSIG:
+ {
+ if (cp + len > ndo->ndo_snapend)
+ return(NULL);
+ if (!ndo->ndo_vflag)
+ break;
+ ND_PRINT(" ");
+ if ((cp = fqdn_print(ndo, cp, bp)) == NULL)
+ return(NULL);
+ cp += 6;
+ if (!ND_TTEST_2(cp))
+ return(NULL);
+ ND_PRINT(" fudge=%u", GET_BE_U_2(cp));
+ cp += 2;
+ if (!ND_TTEST_2(cp))
+ return(NULL);
+ ND_PRINT(" maclen=%u", GET_BE_U_2(cp));
+ cp += 2 + GET_BE_U_2(cp);
+ if (!ND_TTEST_2(cp))
+ return(NULL);
+ ND_PRINT(" origid=%u", GET_BE_U_2(cp));
+ cp += 2;
+ if (!ND_TTEST_2(cp))
+ return(NULL);
+ ND_PRINT(" error=%u", GET_BE_U_2(cp));
+ cp += 2;
+ if (!ND_TTEST_2(cp))
+ return(NULL);
+ ND_PRINT(" otherlen=%u", GET_BE_U_2(cp));
+ cp += 2;
+ }
+ }
+ return (rp); /* XXX This isn't always right */
+}
+
+void
+domain_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, int over_tcp, int is_mdns)
+{
+ const dns_header_t *np;
+ uint16_t flags, rcode, rdlen, type;
+ u_int qdcount, ancount, nscount, arcount;
+ u_int i;
+ const u_char *cp;
+ uint16_t b2;
+
+ ndo->ndo_protocol = "domain";
+
+ if (over_tcp) {
+ /*
+ * The message is prefixed with a two byte length field
+ * which gives the message length, excluding the two byte
+ * length field. (RFC 1035 - 4.2.2. TCP usage)
+ */
+ if (length < 2) {
+ ND_PRINT(" [DNS over TCP: length %u < 2]", length);
+ nd_print_invalid(ndo);
+ return;
+ } else {
+ length -= 2; /* excluding the two byte length field */
+ if (GET_BE_U_2(bp) != length) {
+ ND_PRINT(" [prefix length(%u) != length(%u)]",
+ GET_BE_U_2(bp), length);
+ nd_print_invalid(ndo);
+ return;
+ } else {
+ bp += 2;
+ /* in over TCP case, we need to prepend a space
+ * (not needed in over UDP case)
+ */
+ ND_PRINT(" ");
+ }
+ }
+ }
+
+ np = (const dns_header_t *)bp;
+
+ if(length < sizeof(*np)) {
+ nd_print_protocol(ndo);
+ ND_PRINT(" [length %u < %zu]", length, sizeof(*np));
+ nd_print_invalid(ndo);
+ return;
+ }
+
+ ND_TCHECK_SIZE(np);
+ flags = GET_BE_U_2(np->flags);
+ /* get the byte-order right */
+ qdcount = GET_BE_U_2(np->qdcount);
+ ancount = GET_BE_U_2(np->ancount);
+ nscount = GET_BE_U_2(np->nscount);
+ arcount = GET_BE_U_2(np->arcount);
+
+ /* find the opt record to extract extended rcode */
+ cp = (const u_char *)(np + 1);
+ rcode = DNS_RCODE(flags);
+ for (i = 0; i < qdcount; i++) {
+ if ((cp = ns_nskip(ndo, cp)) == NULL)
+ goto print;
+ cp += 4; /* skip QTYPE and QCLASS */
+ if (cp >= ndo->ndo_snapend)
+ goto print;
+ }
+ for (i = 0; i < ancount + nscount; i++) {
+ if ((cp = ns_nskip(ndo, cp)) == NULL)
+ goto print;
+ cp += 8; /* skip TYPE, CLASS and TTL */
+ if (cp + 2 > ndo->ndo_snapend)
+ goto print;
+ rdlen = GET_BE_U_2(cp);
+ cp += 2 + rdlen;
+ if (cp >= ndo->ndo_snapend)
+ goto print;
+ }
+ for (i = 0; i < arcount; i++) {
+ if ((cp = ns_nskip(ndo, cp)) == NULL)
+ goto print;
+ if (cp + 2 > ndo->ndo_snapend)
+ goto print;
+ type = GET_BE_U_2(cp);
+ cp += 4; /* skip TYPE and CLASS */
+ if (cp + 1 > ndo->ndo_snapend)
+ goto print;
+ if (type == T_OPT) {
+ rcode |= (GET_U_1(cp) << 4);
+ goto print;
+ }
+ cp += 4;
+ if (cp + 2 > ndo->ndo_snapend)
+ goto print;
+ rdlen = GET_BE_U_2(cp);
+ cp += 2 + rdlen;
+ if (cp >= ndo->ndo_snapend)
+ goto print;
+ }
+
+ print:
+ if (DNS_QR(flags)) {
+ /* this is a response */
+ ND_PRINT("%u%s%s%s%s%s%s",
+ GET_BE_U_2(np->id),
+ ns_ops[DNS_OPCODE(flags)],
+ ns_rcode(rcode),
+ DNS_AA(flags)? "*" : "",
+ DNS_RA(flags)? "" : "-",
+ DNS_TC(flags)? "|" : "",
+ DNS_AD(flags)? "$" : "");
+
+ if (qdcount != 1)
+ ND_PRINT(" [%uq]", qdcount);
+ /* Print QUESTION section on -vv */
+ cp = (const u_char *)(np + 1);
+ for (i = 0; i < qdcount; i++) {
+ if (i != 0)
+ ND_PRINT(",");
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT(" q:");
+ if ((cp = ns_qprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ } else {
+ if ((cp = ns_nskip(ndo, cp)) == NULL)
+ goto trunc;
+ cp += 4; /* skip QTYPE and QCLASS */
+ }
+ }
+ ND_PRINT(" %u/%u/%u", ancount, nscount, arcount);
+ if (ancount) {
+ if ((cp = ns_rprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ ancount--;
+ while (cp < ndo->ndo_snapend && ancount) {
+ ND_PRINT(",");
+ if ((cp = ns_rprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ ancount--;
+ }
+ }
+ if (ancount)
+ goto trunc;
+ /* Print NS and AR sections on -vv */
+ if (ndo->ndo_vflag > 1) {
+ if (cp < ndo->ndo_snapend && nscount) {
+ ND_PRINT(" ns:");
+ if ((cp = ns_rprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ nscount--;
+ while (cp < ndo->ndo_snapend && nscount) {
+ ND_PRINT(",");
+ if ((cp = ns_rprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ nscount--;
+ }
+ }
+ if (nscount)
+ goto trunc;
+ if (cp < ndo->ndo_snapend && arcount) {
+ ND_PRINT(" ar:");
+ if ((cp = ns_rprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ arcount--;
+ while (cp < ndo->ndo_snapend && arcount) {
+ ND_PRINT(",");
+ if ((cp = ns_rprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ arcount--;
+ }
+ }
+ if (arcount)
+ goto trunc;
+ }
+ }
+ else {
+ /* this is a request */
+ ND_PRINT("%u%s%s%s", GET_BE_U_2(np->id),
+ ns_ops[DNS_OPCODE(flags)],
+ DNS_RD(flags) ? "+" : "",
+ DNS_CD(flags) ? "%" : "");
+
+ /* any weirdness? */
+ b2 = GET_BE_U_2(((const u_short *)np) + 1);
+ if (b2 & 0x6cf)
+ ND_PRINT(" [b2&3=0x%x]", b2);
+
+ if (DNS_OPCODE(flags) == IQUERY) {
+ if (qdcount)
+ ND_PRINT(" [%uq]", qdcount);
+ if (ancount != 1)
+ ND_PRINT(" [%ua]", ancount);
+ }
+ else {
+ if (ancount)
+ ND_PRINT(" [%ua]", ancount);
+ if (qdcount != 1)
+ ND_PRINT(" [%uq]", qdcount);
+ }
+ if (nscount)
+ ND_PRINT(" [%un]", nscount);
+ if (arcount)
+ ND_PRINT(" [%uau]", arcount);
+
+ cp = (const u_char *)(np + 1);
+ if (qdcount) {
+ cp = ns_qprint(ndo, cp, (const u_char *)np, is_mdns);
+ if (!cp)
+ goto trunc;
+ qdcount--;
+ while (cp < ndo->ndo_snapend && qdcount) {
+ cp = ns_qprint(ndo, (const u_char *)cp,
+ (const u_char *)np,
+ is_mdns);
+ if (!cp)
+ goto trunc;
+ qdcount--;
+ }
+ }
+ if (qdcount)
+ goto trunc;
+
+ /* Print remaining sections on -vv */
+ if (ndo->ndo_vflag > 1) {
+ if (ancount) {
+ if ((cp = ns_rprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ ancount--;
+ while (cp < ndo->ndo_snapend && ancount) {
+ ND_PRINT(",");
+ if ((cp = ns_rprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ ancount--;
+ }
+ }
+ if (ancount)
+ goto trunc;
+ if (cp < ndo->ndo_snapend && nscount) {
+ ND_PRINT(" ns:");
+ if ((cp = ns_rprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ nscount--;
+ while (cp < ndo->ndo_snapend && nscount) {
+ ND_PRINT(",");
+ if ((cp = ns_rprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ nscount--;
+ }
+ }
+ if (nscount > 0)
+ goto trunc;
+ if (cp < ndo->ndo_snapend && arcount) {
+ ND_PRINT(" ar:");
+ if ((cp = ns_rprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ arcount--;
+ while (cp < ndo->ndo_snapend && arcount) {
+ ND_PRINT(",");
+ if ((cp = ns_rprint(ndo, cp, bp, is_mdns)) == NULL)
+ goto trunc;
+ arcount--;
+ }
+ }
+ if (arcount)
+ goto trunc;
+ }
+ }
+ ND_PRINT(" (%u)", length);
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-dsa.c b/print-dsa.c
new file mode 100644
index 0000000..1ed9acf
--- /dev/null
+++ b/print-dsa.c
@@ -0,0 +1,219 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Marvell (Ethertype) Distributed Switch Architecture printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "ethertype.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+/*
+ * Format of (Ethertyped or not) DSA tagged frames:
+ *
+ * 7 6 5 4 3 2 1 0
+ * . . . . . . . . .
+ * 0 +---+---+---+---+---+---+---+---+
+ * | Ether Destination Address |
+ * +6 +---+---+---+---+---+---+---+---+
+ * | Ether Source Address |
+ * +6 +---+---+---+---+---+---+---+---+ +-
+ * | Prog. DSA Ether Type [15:8] | | (8-byte) EDSA Tag
+ * +1 +---+---+---+---+---+---+---+---+ | Contains a programmable Ether type,
+ * | Prog. DSA Ether Type [7:0] | | two reserved bytes (always 0),
+ * +1 +---+---+---+---+---+---+---+---+ | and a standard DSA tag.
+ * | Reserved (0x00 0x00) | |
+ * +2 +---+---+---+---+---+---+---+---+ | +-
+ * | Mode |b29| Src/Trg Dev | | | (4-byte) DSA Tag
+ * +1 +---+---+---+---+---+---+---+---+ | | Contains a DSA tag mode,
+ * |Src/Trg Port/Trunk |b18|b17|b16| | | source or target switch device,
+ * +1 +---+---+---+---+---+---+---+---+ | | source or target port or trunk,
+ * | PRI [2:0] |b12| VID [11:8] | | | and misc (IEEE and FPri) bits.
+ * +1 +---+---+---+---+---+---+---+---+ | |
+ * | VID [7:0] | | |
+ * +1 +---+---+---+---+---+---+---+---+ +- +-
+ * | Ether Length/Type |
+ * +2 +---+---+---+---+---+---+---+---+
+ * . . . . . . . . .
+ *
+ * Mode: Forward, To_CPU, From_CPU, To_Sniffer
+ * b29: (Source or Target) IEEE Tag Mode
+ * b18: Forward's Src_Is_Trunk, To_CPU's Code[2], To_Sniffer's Rx_Sniff
+ * b17: To_CPU's Code[1]
+ * b16: Original frame's CFI
+ * b12: To_CPU's Code[0]
+ */
+
+#define TOK(tag, byte, mask, shift) ((GET_U_1(&(((const u_char *) tag)[byte])) & (mask)) >> (shift))
+
+#define DSA_LEN 4
+#define DSA_MODE(tag) TOK(tag, 0, 0xc0, 6)
+#define DSA_MODE_TO_CPU 0x0
+#define DSA_MODE_FROM_CPU 0x1
+#define DSA_MODE_TO_SNIFFER 0x2
+#define DSA_MODE_FORWARD 0x3
+#define DSA_TAGGED(tag) TOK(tag, 0, 0x20, 5)
+#define DSA_DEV(tag) TOK(tag, 0, 0x1f, 0)
+#define DSA_PORT(tag) TOK(tag, 1, 0xf8, 3)
+#define DSA_TRUNK(tag) TOK(tag, 1, 0x04, 2)
+#define DSA_RX_SNIFF(tag) TOK(tag, 1, 0x04, 2)
+#define DSA_CFI(tag) TOK(tag, 1, 0x01, 0)
+#define DSA_PRI(tag) TOK(tag, 2, 0xe0, 5)
+#define DSA_VID(tag) ((u_short)((TOK(tag, 2, 0x0f, 0) << 8) | (TOK(tag, 3, 0xff, 0))))
+#define DSA_CODE(tag) ((TOK(tag, 1, 0x06, 1) << 1) | TOK(tag, 2, 0x10, 4))
+
+#define EDSA_LEN 8
+
+static const struct tok dsa_mode_values[] = {
+ { DSA_MODE_TO_CPU, "To CPU" },
+ { DSA_MODE_FROM_CPU, "From CPU" },
+ { DSA_MODE_TO_SNIFFER, "To Sniffer"},
+ { DSA_MODE_FORWARD, "Forward" },
+ { 0, NULL }
+};
+
+static const struct tok dsa_code_values[] = {
+ { 0x0, "BPDU (MGMT) Trap" },
+ { 0x1, "Frame2Reg" },
+ { 0x2, "IGMP/MLD Trap" },
+ { 0x3, "Policy Trap" },
+ { 0x4, "ARP Mirror" },
+ { 0x5, "Policy Mirror" },
+ { 0, NULL }
+};
+
+static void
+tag_common_print(netdissect_options *ndo, const u_char *p)
+{
+ if (ndo->ndo_eflag) {
+ ND_PRINT("mode %s, ", tok2str(dsa_mode_values, "unknown", DSA_MODE(p)));
+
+ switch (DSA_MODE(p)) {
+ case DSA_MODE_FORWARD:
+ ND_PRINT("dev %u, %s %u, ", DSA_DEV(p),
+ DSA_TRUNK(p) ? "trunk" : "port", DSA_PORT(p));
+ break;
+ case DSA_MODE_FROM_CPU:
+ ND_PRINT("target dev %u, port %u, ",
+ DSA_DEV(p), DSA_PORT(p));
+ break;
+ case DSA_MODE_TO_CPU:
+ ND_PRINT("source dev %u, port %u, ",
+ DSA_DEV(p), DSA_PORT(p));
+ ND_PRINT("code %s, ",
+ tok2str(dsa_code_values, "reserved", DSA_CODE(p)));
+ break;
+ case DSA_MODE_TO_SNIFFER:
+ ND_PRINT("source dev %u, port %u, ",
+ DSA_DEV(p), DSA_PORT(p));
+ ND_PRINT("%s sniff, ",
+ DSA_RX_SNIFF(p) ? "ingress" : "egress");
+ break;
+ default:
+ break;
+ }
+
+ ND_PRINT("%s, ", DSA_TAGGED(p) ? "tagged" : "untagged");
+ ND_PRINT("%s", DSA_CFI(p) ? "CFI, " : "");
+ ND_PRINT("VID %u, ", DSA_VID(p));
+ ND_PRINT("FPri %u, ", DSA_PRI(p));
+ } else {
+ switch (DSA_MODE(p)) {
+ case DSA_MODE_FORWARD:
+ ND_PRINT("Forward %s %u.%u, ",
+ DSA_TRUNK(p) ? "trunk" : "port",
+ DSA_DEV(p), DSA_PORT(p));
+ break;
+ case DSA_MODE_FROM_CPU:
+ ND_PRINT("CPU > port %u.%u, ",
+ DSA_DEV(p), DSA_PORT(p));
+ break;
+ case DSA_MODE_TO_CPU:
+ ND_PRINT("port %u.%u > CPU, ",
+ DSA_DEV(p), DSA_PORT(p));
+ break;
+ case DSA_MODE_TO_SNIFFER:
+ ND_PRINT("port %u.%u > %s Sniffer, ",
+ DSA_DEV(p), DSA_PORT(p),
+ DSA_RX_SNIFF(p) ? "Rx" : "Tx");
+ break;
+ default:
+ break;
+ }
+
+ ND_PRINT("VLAN %u%c, ", DSA_VID(p), DSA_TAGGED(p) ? 't' : 'u');
+ }
+}
+
+static void
+dsa_tag_print(netdissect_options *ndo, const u_char *bp)
+{
+ if (ndo->ndo_eflag)
+ ND_PRINT("Marvell DSA ");
+ else
+ ND_PRINT("DSA ");
+ tag_common_print(ndo, bp);
+}
+
+static void
+edsa_tag_print(netdissect_options *ndo, const u_char *bp)
+{
+ const u_char *p = bp;
+ uint16_t edsa_etype;
+
+ edsa_etype = GET_BE_U_2(p);
+ if (ndo->ndo_eflag) {
+ ND_PRINT("Marvell EDSA ethertype 0x%04x (%s), ", edsa_etype,
+ tok2str(ethertype_values, "Unknown", edsa_etype));
+ ND_PRINT("rsvd %u %u, ", GET_U_1(p + 2), GET_U_1(p + 3));
+ } else
+ ND_PRINT("EDSA 0x%04x, ", edsa_etype);
+ p += 4;
+ tag_common_print(ndo, p);
+}
+
+void
+dsa_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+
+ ndo->ndo_protocol = "dsa";
+ ndo->ndo_ll_hdr_len +=
+ ether_switch_tag_print(ndo, p, length, caplen, dsa_tag_print, DSA_LEN);
+}
+
+void
+edsa_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+
+ ndo->ndo_protocol = "edsa";
+ ndo->ndo_ll_hdr_len +=
+ ether_switch_tag_print(ndo, p, length, caplen, edsa_tag_print, EDSA_LEN);
+}
diff --git a/print-dtp.c b/print-dtp.c
new file mode 100644
index 0000000..a1ae4ba
--- /dev/null
+++ b/print-dtp.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 1998-2007 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Carles Kishimoto <carles.kishimoto@gmail.com>
+ */
+
+/* \summary: Dynamic Trunking Protocol (DTP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+
+#define DTP_HEADER_LEN 1
+#define DTP_DOMAIN_TLV 0x0001
+#define DTP_STATUS_TLV 0x0002
+#define DTP_DTP_TYPE_TLV 0x0003
+#define DTP_NEIGHBOR_TLV 0x0004
+
+static const struct tok dtp_tlv_values[] = {
+ { DTP_DOMAIN_TLV, "Domain" },
+ { DTP_STATUS_TLV, "Status" },
+ { DTP_DTP_TYPE_TLV, "DTP type" },
+ { DTP_NEIGHBOR_TLV, "Neighbor" },
+ { 0, NULL}
+};
+
+void
+dtp_print(netdissect_options *ndo, const u_char *tptr, u_int length)
+{
+ ndo->ndo_protocol = "dtp";
+ if (length < DTP_HEADER_LEN) {
+ ND_PRINT("[zero packet length]");
+ goto invalid;
+ }
+
+ ND_PRINT("DTPv%u, length %u",
+ GET_U_1(tptr),
+ length);
+
+ /*
+ * In non-verbose mode, just print version.
+ */
+ if (ndo->ndo_vflag < 1) {
+ return;
+ }
+
+ tptr += DTP_HEADER_LEN;
+ length -= DTP_HEADER_LEN;
+
+ while (length) {
+ uint16_t type, len;
+
+ if (length < 4) {
+ ND_PRINT("[%u bytes remaining]", length);
+ goto invalid;
+ }
+ type = GET_BE_U_2(tptr);
+ len = GET_BE_U_2(tptr + 2);
+ /* XXX: should not be but sometimes it is, see the test captures */
+ if (type == 0)
+ return;
+ ND_PRINT("\n\t%s (0x%04x) TLV, length %u",
+ tok2str(dtp_tlv_values, "Unknown", type),
+ type, len);
+
+ /* infinite loop check */
+ if (len < 4 || len > length) {
+ ND_PRINT("[invalid TLV length %u]", len);
+ goto invalid;
+ }
+
+ switch (type) {
+ case DTP_DOMAIN_TLV:
+ ND_PRINT(", ");
+ nd_printjnp(ndo, tptr+4, len-4);
+ break;
+
+ case DTP_STATUS_TLV:
+ case DTP_DTP_TYPE_TLV:
+ if (len != 5)
+ goto invalid;
+ ND_PRINT(", 0x%x", GET_U_1(tptr + 4));
+ break;
+
+ case DTP_NEIGHBOR_TLV:
+ if (len != 10)
+ goto invalid;
+ ND_PRINT(", %s", GET_ETHERADDR_STRING(tptr+4));
+ break;
+
+ default:
+ ND_TCHECK_LEN(tptr, len);
+ break;
+ }
+ tptr += len;
+ length -= len;
+ }
+ return;
+
+ invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(tptr, length);
+}
diff --git a/print-dvmrp.c b/print-dvmrp.c
new file mode 100644
index 0000000..7d7ca07
--- /dev/null
+++ b/print-dvmrp.c
@@ -0,0 +1,332 @@
+/*
+ * Copyright (c) 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Distance Vector Multicast Routing Protocol printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+/*
+ * See: RFC 1075 and draft-ietf-idmr-dvmrp-v3
+ *
+ * DVMRP message types and flag values shamelessly stolen from
+ * mrouted/dvmrp.h.
+ */
+#define DVMRP_PROBE 1 /* for finding neighbors */
+#define DVMRP_REPORT 2 /* for reporting some or all routes */
+#define DVMRP_ASK_NEIGHBORS 3 /* sent by mapper, asking for a list */
+ /* of this router's neighbors */
+#define DVMRP_NEIGHBORS 4 /* response to such a request */
+#define DVMRP_ASK_NEIGHBORS2 5 /* as above, want new format reply */
+#define DVMRP_NEIGHBORS2 6
+#define DVMRP_PRUNE 7 /* prune message */
+#define DVMRP_GRAFT 8 /* graft message */
+#define DVMRP_GRAFT_ACK 9 /* graft acknowledgement */
+static const struct tok dvmrp_msgtype_str[] = {
+ { DVMRP_PROBE, "Probe" },
+ { DVMRP_REPORT, "Report" },
+ { DVMRP_ASK_NEIGHBORS, "Ask-neighbors(old)" },
+ { DVMRP_NEIGHBORS, "Neighbors(old)" },
+ { DVMRP_ASK_NEIGHBORS2, "Ask-neighbors2" },
+ { DVMRP_NEIGHBORS2, "Neighbors2" },
+ { DVMRP_PRUNE, "Prune" },
+ { DVMRP_GRAFT, "Graft" },
+ { DVMRP_GRAFT_ACK, "Graft-ACK" },
+ { 0, NULL }
+};
+
+/*
+ * 'flags' byte values in DVMRP_NEIGHBORS2 reply.
+ */
+#define DVMRP_NF_TUNNEL 0x01 /* neighbors reached via tunnel */
+#define DVMRP_NF_SRCRT 0x02 /* tunnel uses IP source routing */
+#define DVMRP_NF_DOWN 0x10 /* kernel state of interface */
+#define DVMRP_NF_DISABLED 0x20 /* administratively disabled */
+#define DVMRP_NF_QUERIER 0x40 /* I am the subnet's querier */
+
+static void print_probe(netdissect_options *, const u_char *, u_int);
+static void print_report(netdissect_options *, const u_char *, u_int);
+static void print_neighbors(netdissect_options *, const u_char *, u_int);
+static void print_neighbors2(netdissect_options *, const u_char *, u_int, uint8_t, uint8_t);
+
+void
+dvmrp_print(netdissect_options *ndo,
+ const u_char *bp, u_int len)
+{
+ u_char type;
+ uint8_t major_version, minor_version;
+
+ ndo->ndo_protocol = "dvmrp";
+ if (len < 8) {
+ ND_PRINT(" [length %u < 8]", len);
+ goto invalid;
+ }
+
+ type = GET_U_1(bp + 1);
+
+ /* Skip IGMP header */
+ bp += 8;
+ len -= 8;
+
+ ND_PRINT(" %s", tok2str(dvmrp_msgtype_str, "[type %u]", type));
+ switch (type) {
+
+ case DVMRP_PROBE:
+ if (ndo->ndo_vflag) {
+ print_probe(ndo, bp, len);
+ }
+ break;
+
+ case DVMRP_REPORT:
+ if (ndo->ndo_vflag > 1) {
+ print_report(ndo, bp, len);
+ }
+ break;
+
+ case DVMRP_NEIGHBORS:
+ print_neighbors(ndo, bp, len);
+ break;
+
+ case DVMRP_NEIGHBORS2:
+ /*
+ * extract version from IGMP group address field
+ */
+ bp -= 4;
+ major_version = GET_U_1(bp + 3);
+ minor_version = GET_U_1(bp + 2);
+ bp += 4;
+ print_neighbors2(ndo, bp, len, major_version, minor_version);
+ break;
+
+ case DVMRP_PRUNE:
+ ND_PRINT(" src %s grp %s", GET_IPADDR_STRING(bp), GET_IPADDR_STRING(bp + 4));
+ ND_PRINT(" timer ");
+ unsigned_relts_print(ndo, GET_BE_U_4(bp + 8));
+ break;
+
+ case DVMRP_GRAFT:
+ ND_PRINT(" src %s grp %s", GET_IPADDR_STRING(bp), GET_IPADDR_STRING(bp + 4));
+ break;
+
+ case DVMRP_GRAFT_ACK:
+ ND_PRINT(" src %s grp %s", GET_IPADDR_STRING(bp), GET_IPADDR_STRING(bp + 4));
+ break;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
+
+static void
+print_report(netdissect_options *ndo,
+ const u_char *bp,
+ u_int len)
+{
+ uint32_t mask, origin;
+ u_int metric, done;
+ u_int i, width;
+
+ while (len > 0) {
+ if (len < 3) {
+ ND_PRINT(" [length %u < 3]", len);
+ goto invalid;
+ }
+ mask = (uint32_t)0xff << 24 | GET_U_1(bp) << 16 |
+ GET_U_1(bp + 1) << 8 | GET_U_1(bp + 2);
+ width = 1;
+ if (GET_U_1(bp))
+ width = 2;
+ if (GET_U_1(bp + 1))
+ width = 3;
+ if (GET_U_1(bp + 2))
+ width = 4;
+
+ ND_PRINT("\n\tMask %s", intoa(htonl(mask)));
+ bp += 3;
+ len -= 3;
+ do {
+ if (len < width + 1) {
+ ND_PRINT("\n\t [Truncated Report]");
+ goto invalid;
+ }
+ origin = 0;
+ for (i = 0; i < width; ++i) {
+ origin = origin << 8 | GET_U_1(bp);
+ bp++;
+ }
+ for ( ; i < 4; ++i)
+ origin <<= 8;
+
+ metric = GET_U_1(bp);
+ bp++;
+ done = metric & 0x80;
+ metric &= 0x7f;
+ ND_PRINT("\n\t %s metric %u", intoa(htonl(origin)),
+ metric);
+ len -= width + 1;
+ } while (!done);
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
+
+static void
+print_probe(netdissect_options *ndo,
+ const u_char *bp,
+ u_int len)
+{
+ if (len < 4) {
+ ND_PRINT(" [full length %u < 4]", len);
+ goto invalid;
+ }
+ ND_PRINT(ndo->ndo_vflag > 1 ? "\n\t" : " ");
+ ND_PRINT("genid %u", GET_BE_U_4(bp));
+ if (ndo->ndo_vflag < 2)
+ return;
+
+ bp += 4;
+ len -= 4;
+ while (len > 0) {
+ if (len < 4) {
+ ND_PRINT("[remaining length %u < 4]", len);
+ goto invalid;
+ }
+ ND_PRINT("\n\tneighbor %s", GET_IPADDR_STRING(bp));
+ bp += 4; len -= 4;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
+
+static void
+print_neighbors(netdissect_options *ndo,
+ const u_char *bp,
+ u_int len)
+{
+ const u_char *laddr;
+ u_char metric;
+ u_char thresh;
+ int ncount;
+
+ while (len > 0) {
+ if (len < 7) {
+ ND_PRINT(" [length %u < 7]", len);
+ goto invalid;
+ }
+ laddr = bp;
+ bp += 4;
+ metric = GET_U_1(bp);
+ bp++;
+ thresh = GET_U_1(bp);
+ bp++;
+ ncount = GET_U_1(bp);
+ bp++;
+ len -= 7;
+ while (--ncount >= 0) {
+ if (len < 4) {
+ ND_PRINT(" [length %u < 4]", len);
+ goto invalid;
+ }
+ ND_PRINT(" [%s ->", GET_IPADDR_STRING(laddr));
+ ND_PRINT(" %s, (%u/%u)]",
+ GET_IPADDR_STRING(bp), metric, thresh);
+ bp += 4;
+ len -= 4;
+ }
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
+
+static void
+print_neighbors2(netdissect_options *ndo,
+ const u_char *bp,
+ u_int len, uint8_t major_version,
+ uint8_t minor_version)
+{
+ const u_char *laddr;
+ u_char metric, thresh, flags;
+ int ncount;
+
+ ND_PRINT(" (v %u.%u):", major_version, minor_version);
+
+ while (len > 0) {
+ if (len < 8) {
+ ND_PRINT(" [length %u < 8]", len);
+ goto invalid;
+ }
+ laddr = bp;
+ bp += 4;
+ metric = GET_U_1(bp);
+ bp++;
+ thresh = GET_U_1(bp);
+ bp++;
+ flags = GET_U_1(bp);
+ bp++;
+ ncount = GET_U_1(bp);
+ bp++;
+ len -= 8;
+ while (--ncount >= 0 && len > 0) {
+ if (len < 4) {
+ ND_PRINT(" [length %u < 4]", len);
+ goto invalid;
+ }
+ ND_PRINT(" [%s -> ", GET_IPADDR_STRING(laddr));
+ ND_PRINT("%s (%u/%u", GET_IPADDR_STRING(bp),
+ metric, thresh);
+ if (flags & DVMRP_NF_TUNNEL)
+ ND_PRINT("/tunnel");
+ if (flags & DVMRP_NF_SRCRT)
+ ND_PRINT("/srcrt");
+ if (flags & DVMRP_NF_QUERIER)
+ ND_PRINT("/querier");
+ if (flags & DVMRP_NF_DISABLED)
+ ND_PRINT("/disabled");
+ if (flags & DVMRP_NF_DOWN)
+ ND_PRINT("/down");
+ ND_PRINT(")]");
+ bp += 4;
+ len -= 4;
+ }
+ if (ncount != -1) {
+ ND_PRINT(" [invalid ncount]");
+ goto invalid;
+ }
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-eap.c b/print-eap.c
new file mode 100644
index 0000000..78439b7
--- /dev/null
+++ b/print-eap.c
@@ -0,0 +1,341 @@
+/*
+ * Copyright (c) 2004 - Michael Richardson <mcr@xelerance.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Extensible Authentication Protocol (EAP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+#define EAP_FRAME_TYPE_PACKET 0
+#define EAP_FRAME_TYPE_START 1
+#define EAP_FRAME_TYPE_LOGOFF 2
+#define EAP_FRAME_TYPE_KEY 3
+#define EAP_FRAME_TYPE_ENCAP_ASF_ALERT 4
+
+struct eap_frame_t {
+ nd_uint8_t version;
+ nd_uint8_t type;
+ nd_uint16_t length;
+};
+
+static const struct tok eap_frame_type_values[] = {
+ { EAP_FRAME_TYPE_PACKET, "EAP packet" },
+ { EAP_FRAME_TYPE_START, "EAPOL start" },
+ { EAP_FRAME_TYPE_LOGOFF, "EAPOL logoff" },
+ { EAP_FRAME_TYPE_KEY, "EAPOL key" },
+ { EAP_FRAME_TYPE_ENCAP_ASF_ALERT, "Encapsulated ASF alert" },
+ { 0, NULL}
+};
+
+/* RFC 3748 */
+struct eap_packet_t {
+ nd_uint8_t code;
+ nd_uint8_t id;
+ nd_uint16_t length;
+};
+
+#define EAP_REQUEST 1
+#define EAP_RESPONSE 2
+#define EAP_SUCCESS 3
+#define EAP_FAILURE 4
+
+static const struct tok eap_code_values[] = {
+ { EAP_REQUEST, "Request" },
+ { EAP_RESPONSE, "Response" },
+ { EAP_SUCCESS, "Success" },
+ { EAP_FAILURE, "Failure" },
+ { 0, NULL}
+};
+
+#define EAP_TYPE_NO_PROPOSED 0
+#define EAP_TYPE_IDENTITY 1
+#define EAP_TYPE_NOTIFICATION 2
+#define EAP_TYPE_NAK 3
+#define EAP_TYPE_MD5_CHALLENGE 4
+#define EAP_TYPE_OTP 5
+#define EAP_TYPE_GTC 6
+#define EAP_TYPE_TLS 13 /* RFC 5216 */
+#define EAP_TYPE_SIM 18 /* RFC 4186 */
+#define EAP_TYPE_TTLS 21 /* RFC 5281, draft-funk-eap-ttls-v0-01.txt */
+#define EAP_TYPE_AKA 23 /* RFC 4187 */
+#define EAP_TYPE_FAST 43 /* RFC 4851 */
+#define EAP_TYPE_EXPANDED_TYPES 254
+#define EAP_TYPE_EXPERIMENTAL 255
+
+static const struct tok eap_type_values[] = {
+ { EAP_TYPE_NO_PROPOSED, "No proposed" },
+ { EAP_TYPE_IDENTITY, "Identity" },
+ { EAP_TYPE_NOTIFICATION, "Notification" },
+ { EAP_TYPE_NAK, "Nak" },
+ { EAP_TYPE_MD5_CHALLENGE, "MD5-challenge" },
+ { EAP_TYPE_OTP, "OTP" },
+ { EAP_TYPE_GTC, "GTC" },
+ { EAP_TYPE_TLS, "TLS" },
+ { EAP_TYPE_SIM, "SIM" },
+ { EAP_TYPE_TTLS, "TTLS" },
+ { EAP_TYPE_AKA, "AKA" },
+ { EAP_TYPE_FAST, "FAST" },
+ { EAP_TYPE_EXPANDED_TYPES, "Expanded types" },
+ { EAP_TYPE_EXPERIMENTAL, "Experimental" },
+ { 0, NULL}
+};
+
+#define EAP_TLS_EXTRACT_BIT_L(x) (((x)&0x80)>>7)
+
+/* RFC 5216 - EAP TLS bits */
+#define EAP_TLS_FLAGS_LEN_INCLUDED (1 << 7)
+#define EAP_TLS_FLAGS_MORE_FRAGMENTS (1 << 6)
+#define EAP_TLS_FLAGS_START (1 << 5)
+
+static const struct tok eap_tls_flags_values[] = {
+ { EAP_TLS_FLAGS_LEN_INCLUDED, "L bit" },
+ { EAP_TLS_FLAGS_MORE_FRAGMENTS, "More fragments bit"},
+ { EAP_TLS_FLAGS_START, "Start bit"},
+ { 0, NULL}
+};
+
+#define EAP_TTLS_VERSION(x) ((x)&0x07)
+
+/* EAP-AKA and EAP-SIM - RFC 4187 */
+#define EAP_AKA_CHALLENGE 1
+#define EAP_AKA_AUTH_REJECT 2
+#define EAP_AKA_SYNC_FAILURE 4
+#define EAP_AKA_IDENTITY 5
+#define EAP_SIM_START 10
+#define EAP_SIM_CHALLENGE 11
+#define EAP_AKA_NOTIFICATION 12
+#define EAP_AKA_REAUTH 13
+#define EAP_AKA_CLIENT_ERROR 14
+
+static const struct tok eap_aka_subtype_values[] = {
+ { EAP_AKA_CHALLENGE, "Challenge" },
+ { EAP_AKA_AUTH_REJECT, "Auth reject" },
+ { EAP_AKA_SYNC_FAILURE, "Sync failure" },
+ { EAP_AKA_IDENTITY, "Identity" },
+ { EAP_SIM_START, "Start" },
+ { EAP_SIM_CHALLENGE, "Challenge" },
+ { EAP_AKA_NOTIFICATION, "Notification" },
+ { EAP_AKA_REAUTH, "Reauth" },
+ { EAP_AKA_CLIENT_ERROR, "Client error" },
+ { 0, NULL}
+};
+
+/*
+ * Print EAP requests / responses
+ */
+void
+eap_print(netdissect_options *ndo,
+ const u_char *cp,
+ u_int length)
+{
+ u_int type, subtype, len;
+ u_int count;
+ const char *sep;
+
+ type = GET_U_1(cp);
+ len = GET_BE_U_2(cp + 2);
+ if (len != length) {
+ /*
+ * Probably a fragment; in some cases the fragmentation might
+ * not put an EAP header on every packet, if reassembly can
+ * be done without that (e.g., fragmentation to make a message
+ * fit in multiple TLVs in a RADIUS packet).
+ */
+ ND_PRINT("EAP fragment?");
+ return;
+ }
+ ND_PRINT("%s (%u), id %u, len %u",
+ tok2str(eap_code_values, "unknown", type),
+ type,
+ GET_U_1((cp + 1)),
+ len);
+ if (len < 4) {
+ ND_PRINT(" (too short for EAP header)");
+ return;
+ }
+
+ ND_TCHECK_LEN(cp, len);
+
+ if (type == EAP_REQUEST || type == EAP_RESPONSE) {
+ /* RFC 3748 Section 4.1 */
+ if (len < 5) {
+ ND_PRINT(" (too short for EAP request/response)");
+ return;
+ }
+ subtype = GET_U_1(cp + 4);
+ ND_PRINT("\n\t\t Type %s (%u)",
+ tok2str(eap_type_values, "unknown", subtype),
+ subtype);
+
+ switch (subtype) {
+ case EAP_TYPE_IDENTITY:
+ /* According to RFC 3748, the message is optional */
+ if (len > 5) {
+ ND_PRINT(", Identity: ");
+ nd_printjnp(ndo, cp + 5, len - 5);
+ }
+ break;
+
+ case EAP_TYPE_NOTIFICATION:
+ /* According to RFC 3748, there must be at least one octet of message */
+ if (len < 6) {
+ ND_PRINT(" (too short for EAP Notification request/response)");
+ return;
+ }
+ ND_PRINT(", Notification: ");
+ nd_printjnp(ndo, cp + 5, len - 5);
+ break;
+
+ case EAP_TYPE_NAK:
+ /*
+ * one or more octets indicating
+ * the desired authentication
+ * type one octet per type
+ */
+ if (len < 6) {
+ ND_PRINT(" (too short for EAP Legacy NAK request/response)");
+ return;
+ }
+ sep = "";
+ for (count = 5; count < len; count++) {
+ ND_PRINT("%s %s (%u)", sep,
+ tok2str(eap_type_values, "unknown", GET_U_1((cp + count))),
+ GET_U_1(cp + count));
+ sep = ",";
+ }
+ break;
+
+ case EAP_TYPE_TTLS:
+ case EAP_TYPE_TLS:
+ if (len < 6) {
+ ND_PRINT(" (too short for EAP TLS/TTLS request/response)");
+ return;
+ }
+ if (subtype == EAP_TYPE_TTLS)
+ ND_PRINT(" TTLSv%u",
+ EAP_TTLS_VERSION(GET_U_1((cp + 5))));
+ ND_PRINT(" flags [%s] 0x%02x",
+ bittok2str(eap_tls_flags_values, "none", GET_U_1((cp + 5))),
+ GET_U_1(cp + 5));
+
+ if (EAP_TLS_EXTRACT_BIT_L(GET_U_1(cp + 5))) {
+ if (len < 10) {
+ ND_PRINT(" (too short for EAP TLS/TTLS request/response with length)");
+ return;
+ }
+ ND_PRINT(", len %u", GET_BE_U_4(cp + 6));
+ }
+ break;
+
+ case EAP_TYPE_FAST:
+ if (len < 6) {
+ ND_PRINT(" (too short for EAP FAST request/response)");
+ return;
+ }
+ ND_PRINT(" FASTv%u",
+ EAP_TTLS_VERSION(GET_U_1((cp + 5))));
+ ND_PRINT(" flags [%s] 0x%02x",
+ bittok2str(eap_tls_flags_values, "none", GET_U_1((cp + 5))),
+ GET_U_1(cp + 5));
+
+ if (EAP_TLS_EXTRACT_BIT_L(GET_U_1(cp + 5))) {
+ if (len < 10) {
+ ND_PRINT(" (too short for EAP FAST request/response with length)");
+ return;
+ }
+ ND_PRINT(", len %u", GET_BE_U_4(cp + 6));
+ }
+
+ /* FIXME - TLV attributes follow */
+ break;
+
+ case EAP_TYPE_AKA:
+ case EAP_TYPE_SIM:
+ if (len < 6) {
+ ND_PRINT(" (too short for EAP SIM/AKA request/response)");
+ return;
+ }
+ ND_PRINT(" subtype [%s] 0x%02x",
+ tok2str(eap_aka_subtype_values, "unknown", GET_U_1((cp + 5))),
+ GET_U_1(cp + 5));
+
+ /* FIXME - TLV attributes follow */
+ break;
+
+ case EAP_TYPE_MD5_CHALLENGE:
+ case EAP_TYPE_OTP:
+ case EAP_TYPE_GTC:
+ case EAP_TYPE_EXPANDED_TYPES:
+ case EAP_TYPE_EXPERIMENTAL:
+ default:
+ break;
+ }
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+void
+eapol_print(netdissect_options *ndo,
+ const u_char *cp)
+{
+ const struct eap_frame_t *eap;
+ u_int eap_type, eap_len;
+
+ ndo->ndo_protocol = "eap";
+ eap = (const struct eap_frame_t *)cp;
+ ND_TCHECK_SIZE(eap);
+ eap_type = GET_U_1(eap->type);
+
+ ND_PRINT("%s (%u) v%u, len %u",
+ tok2str(eap_frame_type_values, "unknown", eap_type),
+ eap_type,
+ GET_U_1(eap->version),
+ GET_BE_U_2(eap->length));
+ if (ndo->ndo_vflag < 1)
+ return;
+
+ cp += sizeof(struct eap_frame_t);
+ eap_len = GET_BE_U_2(eap->length);
+
+ switch (eap_type) {
+ case EAP_FRAME_TYPE_PACKET:
+ if (eap_len == 0)
+ goto trunc;
+ ND_PRINT(", ");
+ eap_print(ndo, cp, eap_len);
+ return;
+ case EAP_FRAME_TYPE_LOGOFF:
+ case EAP_FRAME_TYPE_ENCAP_ASF_ALERT:
+ default:
+ break;
+ }
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-egp.c b/print-egp.c
new file mode 100644
index 0000000..cc9f44e
--- /dev/null
+++ b/print-egp.c
@@ -0,0 +1,392 @@
+/*
+ * Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Lawrence Berkeley Laboratory,
+ * Berkeley, CA. The name of the University may not be used to
+ * endorse or promote products derived from this software without
+ * specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Initial contribution from Jeff Honig (jch@MITCHELL.CIT.CORNELL.EDU).
+ */
+
+/* \summary: Exterior Gateway Protocol (EGP) printer */
+
+/* specification: RFC 827 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+struct egp_packet {
+ nd_uint8_t egp_version;
+#define EGP_VERSION 2
+ nd_uint8_t egp_type;
+#define EGPT_ACQUIRE 3
+#define EGPT_REACH 5
+#define EGPT_POLL 2
+#define EGPT_UPDATE 1
+#define EGPT_ERROR 8
+ nd_uint8_t egp_code;
+#define EGPC_REQUEST 0
+#define EGPC_CONFIRM 1
+#define EGPC_REFUSE 2
+#define EGPC_CEASE 3
+#define EGPC_CEASEACK 4
+#define EGPC_HELLO 0
+#define EGPC_HEARDU 1
+ nd_uint8_t egp_status;
+#define EGPS_UNSPEC 0
+#define EGPS_ACTIVE 1
+#define EGPS_PASSIVE 2
+#define EGPS_NORES 3
+#define EGPS_ADMIN 4
+#define EGPS_GODOWN 5
+#define EGPS_PARAM 6
+#define EGPS_PROTO 7
+#define EGPS_INDET 0
+#define EGPS_UP 1
+#define EGPS_DOWN 2
+#define EGPS_UNSOL 0x80
+ nd_uint16_t egp_checksum;
+ nd_uint16_t egp_as;
+ nd_uint16_t egp_sequence;
+ union {
+ nd_uint16_t egpu_hello;
+ nd_uint8_t egpu_gws[2];
+ nd_uint16_t egpu_reason;
+#define EGPR_UNSPEC 0
+#define EGPR_BADHEAD 1
+#define EGPR_BADDATA 2
+#define EGPR_NOREACH 3
+#define EGPR_XSPOLL 4
+#define EGPR_NORESP 5
+#define EGPR_UVERSION 6
+ } egp_handg;
+#define egp_hello egp_handg.egpu_hello
+#define egp_intgw egp_handg.egpu_gws[0]
+#define egp_extgw egp_handg.egpu_gws[1]
+#define egp_reason egp_handg.egpu_reason
+ union {
+ nd_uint16_t egpu_poll;
+ nd_ipv4 egpu_sourcenet;
+ } egp_pands;
+#define egp_poll egp_pands.egpu_poll
+#define egp_sourcenet egp_pands.egpu_sourcenet
+};
+
+static const char *egp_acquire_codes[] = {
+ "request",
+ "confirm",
+ "refuse",
+ "cease",
+ "cease_ack"
+};
+
+static const char *egp_acquire_status[] = {
+ "unspecified",
+ "active_mode",
+ "passive_mode",
+ "insufficient_resources",
+ "administratively_prohibited",
+ "going_down",
+ "parameter_violation",
+ "protocol_violation"
+};
+
+static const char *egp_reach_codes[] = {
+ "hello",
+ "i-h-u"
+};
+
+static const char *egp_status_updown[] = {
+ "indeterminate",
+ "up",
+ "down"
+};
+
+static const char *egp_reasons[] = {
+ "unspecified",
+ "bad_EGP_header_format",
+ "bad_EGP_data_field_format",
+ "reachability_info_unavailable",
+ "excessive_polling_rate",
+ "no_response",
+ "unsupported_version"
+};
+
+static void
+egpnr_print(netdissect_options *ndo,
+ const struct egp_packet *egp, u_int length)
+{
+ const uint8_t *cp;
+ uint32_t addr;
+ uint32_t net;
+ u_int netlen;
+ u_int gateways, distances, networks;
+ u_int intgw, extgw, t_gateways;
+ const char *comma;
+
+ addr = GET_IPV4_TO_NETWORK_ORDER(egp->egp_sourcenet);
+ if (IN_CLASSA(addr)) {
+ net = addr & IN_CLASSA_NET;
+ netlen = 1;
+ } else if (IN_CLASSB(addr)) {
+ net = addr & IN_CLASSB_NET;
+ netlen = 2;
+ } else if (IN_CLASSC(addr)) {
+ net = addr & IN_CLASSC_NET;
+ netlen = 3;
+ } else {
+ net = 0;
+ netlen = 0;
+ }
+ cp = (const uint8_t *)(egp + 1);
+ length -= sizeof(*egp);
+
+ intgw = GET_U_1(egp->egp_intgw);
+ extgw = GET_U_1(egp->egp_extgw);
+ t_gateways = intgw + extgw;
+ for (gateways = 0; gateways < t_gateways; ++gateways) {
+ /* Pickup host part of gateway address */
+ addr = 0;
+ if (length < 4 - netlen)
+ goto trunc;
+ ND_TCHECK_LEN(cp, 4 - netlen);
+ switch (netlen) {
+
+ case 1:
+ addr = GET_U_1(cp);
+ cp++;
+ /* fall through */
+ case 2:
+ addr = (addr << 8) | GET_U_1(cp);
+ cp++;
+ /* fall through */
+ case 3:
+ addr = (addr << 8) | GET_U_1(cp);
+ cp++;
+ break;
+ }
+ addr |= net;
+ length -= 4 - netlen;
+ if (length < 1)
+ goto trunc;
+ distances = GET_U_1(cp);
+ cp++;
+ length--;
+ ND_PRINT(" %s %s ",
+ gateways < intgw ? "int" : "ext",
+ ipaddr_string(ndo, (const u_char *)&addr)); /* local buffer, not packet data; don't use GET_IPADDR_STRING() */
+
+ comma = "";
+ ND_PRINT("(");
+ while (distances != 0) {
+ if (length < 2)
+ goto trunc;
+ ND_PRINT("%sd%u:", comma, GET_U_1(cp));
+ cp++;
+ comma = ", ";
+ networks = GET_U_1(cp);
+ cp++;
+ length -= 2;
+ while (networks != 0) {
+ /* Pickup network number */
+ if (length < 1)
+ goto trunc;
+ addr = ((uint32_t) GET_U_1(cp)) << 24;
+ cp++;
+ length--;
+ if (IN_CLASSB(addr)) {
+ if (length < 1)
+ goto trunc;
+ addr |= ((uint32_t) GET_U_1(cp)) << 16;
+ cp++;
+ length--;
+ } else if (!IN_CLASSA(addr)) {
+ if (length < 2)
+ goto trunc;
+ addr |= ((uint32_t) GET_U_1(cp)) << 16;
+ cp++;
+ addr |= ((uint32_t) GET_U_1(cp)) << 8;
+ cp++;
+ length -= 2;
+ }
+ ND_PRINT(" %s", ipaddr_string(ndo, (const u_char *)&addr)); /* local buffer, not packet data; don't use GET_IPADDR_STRING() */
+ networks--;
+ }
+ distances--;
+ }
+ ND_PRINT(")");
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+void
+egp_print(netdissect_options *ndo,
+ const uint8_t *bp, u_int length)
+{
+ const struct egp_packet *egp;
+ u_int version;
+ u_int type;
+ u_int code;
+ u_int status;
+
+ ndo->ndo_protocol = "egp";
+ egp = (const struct egp_packet *)bp;
+ if (length < sizeof(*egp) || !ND_TTEST_SIZE(egp)) {
+ nd_print_trunc(ndo);
+ return;
+ }
+
+ version = GET_U_1(egp->egp_version);
+ if (!ndo->ndo_vflag) {
+ ND_PRINT("EGPv%u, AS %u, seq %u, length %u",
+ version,
+ GET_BE_U_2(egp->egp_as),
+ GET_BE_U_2(egp->egp_sequence),
+ length);
+ return;
+ } else
+ ND_PRINT("EGPv%u, length %u",
+ version,
+ length);
+
+ if (version != EGP_VERSION) {
+ ND_PRINT("[version %u]", version);
+ return;
+ }
+
+ type = GET_U_1(egp->egp_type);
+ code = GET_U_1(egp->egp_code);
+ status = GET_U_1(egp->egp_status);
+
+ switch (type) {
+ case EGPT_ACQUIRE:
+ ND_PRINT(" acquire");
+ switch (code) {
+ case EGPC_REQUEST:
+ case EGPC_CONFIRM:
+ ND_PRINT(" %s", egp_acquire_codes[code]);
+ switch (status) {
+ case EGPS_UNSPEC:
+ case EGPS_ACTIVE:
+ case EGPS_PASSIVE:
+ ND_PRINT(" %s", egp_acquire_status[status]);
+ break;
+
+ default:
+ ND_PRINT(" [status %u]", status);
+ break;
+ }
+ ND_PRINT(" hello:%u poll:%u",
+ GET_BE_U_2(egp->egp_hello),
+ GET_BE_U_2(egp->egp_poll));
+ break;
+
+ case EGPC_REFUSE:
+ case EGPC_CEASE:
+ case EGPC_CEASEACK:
+ ND_PRINT(" %s", egp_acquire_codes[code]);
+ switch (status ) {
+ case EGPS_UNSPEC:
+ case EGPS_NORES:
+ case EGPS_ADMIN:
+ case EGPS_GODOWN:
+ case EGPS_PARAM:
+ case EGPS_PROTO:
+ ND_PRINT(" %s", egp_acquire_status[status]);
+ break;
+
+ default:
+ ND_PRINT("[status %u]", status);
+ break;
+ }
+ break;
+
+ default:
+ ND_PRINT("[code %u]", code);
+ break;
+ }
+ break;
+
+ case EGPT_REACH:
+ switch (code) {
+
+ case EGPC_HELLO:
+ case EGPC_HEARDU:
+ ND_PRINT(" %s", egp_reach_codes[code]);
+ if (status <= EGPS_DOWN)
+ ND_PRINT(" state:%s", egp_status_updown[status]);
+ else
+ ND_PRINT(" [status %u]", status);
+ break;
+
+ default:
+ ND_PRINT("[reach code %u]", code);
+ break;
+ }
+ break;
+
+ case EGPT_POLL:
+ ND_PRINT(" poll");
+ if (status <= EGPS_DOWN)
+ ND_PRINT(" state:%s", egp_status_updown[status]);
+ else
+ ND_PRINT(" [status %u]", status);
+ ND_PRINT(" net:%s", GET_IPADDR_STRING(egp->egp_sourcenet));
+ break;
+
+ case EGPT_UPDATE:
+ ND_PRINT(" update");
+ if (status & EGPS_UNSOL) {
+ status &= ~EGPS_UNSOL;
+ ND_PRINT(" unsolicited");
+ }
+ if (status <= EGPS_DOWN)
+ ND_PRINT(" state:%s", egp_status_updown[status]);
+ else
+ ND_PRINT(" [status %u]", status);
+ ND_PRINT(" %s int %u ext %u",
+ GET_IPADDR_STRING(egp->egp_sourcenet),
+ GET_U_1(egp->egp_intgw),
+ GET_U_1(egp->egp_extgw));
+ if (ndo->ndo_vflag)
+ egpnr_print(ndo, egp, length);
+ break;
+
+ case EGPT_ERROR:
+ ND_PRINT(" error");
+ if (status <= EGPS_DOWN)
+ ND_PRINT(" state:%s", egp_status_updown[status]);
+ else
+ ND_PRINT(" [status %u]", status);
+
+ if (GET_BE_U_2(egp->egp_reason) <= EGPR_UVERSION)
+ ND_PRINT(" %s",
+ egp_reasons[GET_BE_U_2(egp->egp_reason)]);
+ else
+ ND_PRINT(" [reason %u]", GET_BE_U_2(egp->egp_reason));
+ break;
+
+ default:
+ ND_PRINT("[type %u]", type);
+ break;
+ }
+}
diff --git a/print-eigrp.c b/print-eigrp.c
new file mode 100644
index 0000000..2702beb
--- /dev/null
+++ b/print-eigrp.c
@@ -0,0 +1,532 @@
+/*
+ * Copyright (c) 1998-2004 Hannes Gredler <hannes@gredler.at>
+ * The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Enhanced Interior Gateway Routing Protocol (EIGRP) printer */
+
+/*
+ * specification:
+ *
+ * https://web.archive.org/web/20190722221712/https://www.rhyshaden.com/eigrp.htm
+ * RFC 7868
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+
+struct eigrp_common_header {
+ nd_uint8_t version;
+ nd_uint8_t opcode;
+ nd_uint16_t checksum;
+ nd_uint32_t flags;
+ nd_uint32_t seq;
+ nd_uint32_t ack;
+ nd_uint16_t vrid;
+ nd_uint16_t asn;
+};
+
+#define EIGRP_VERSION 2
+
+#define EIGRP_OPCODE_UPDATE 1
+#define EIGRP_OPCODE_QUERY 3
+#define EIGRP_OPCODE_REPLY 4
+#define EIGRP_OPCODE_HELLO 5
+#define EIGRP_OPCODE_IPXSAP 6
+#define EIGRP_OPCODE_PROBE 7
+
+static const struct tok eigrp_opcode_values[] = {
+ { EIGRP_OPCODE_UPDATE, "Update" },
+ { EIGRP_OPCODE_QUERY, "Query" },
+ { EIGRP_OPCODE_REPLY, "Reply" },
+ { EIGRP_OPCODE_HELLO, "Hello" },
+ { EIGRP_OPCODE_IPXSAP, "IPX SAP" },
+ { EIGRP_OPCODE_PROBE, "Probe" },
+ { 0, NULL}
+};
+
+static const struct tok eigrp_common_header_flag_values[] = {
+ { 0x01, "Init" },
+ { 0x02, "Conditionally Received" },
+ { 0x04, "Restart" },
+ { 0x08, "End-of-Table" },
+ { 0, NULL}
+};
+
+struct eigrp_tlv_header {
+ nd_uint16_t type;
+ nd_uint16_t length;
+};
+
+#define EIGRP_TLV_GENERAL_PARM 0x0001
+#define EIGRP_TLV_AUTH 0x0002
+#define EIGRP_TLV_SEQ 0x0003
+#define EIGRP_TLV_SW_VERSION 0x0004
+#define EIGRP_TLV_MCAST_SEQ 0x0005
+#define EIGRP_TLV_IP_INT 0x0102
+#define EIGRP_TLV_IP_EXT 0x0103
+#define EIGRP_TLV_AT_INT 0x0202
+#define EIGRP_TLV_AT_EXT 0x0203
+#define EIGRP_TLV_AT_CABLE_SETUP 0x0204
+#define EIGRP_TLV_IPX_INT 0x0302
+#define EIGRP_TLV_IPX_EXT 0x0303
+
+static const struct tok eigrp_tlv_values[] = {
+ { EIGRP_TLV_GENERAL_PARM, "General Parameters"},
+ { EIGRP_TLV_AUTH, "Authentication"},
+ { EIGRP_TLV_SEQ, "Sequence"},
+ { EIGRP_TLV_SW_VERSION, "Software Version"},
+ { EIGRP_TLV_MCAST_SEQ, "Next Multicast Sequence"},
+ { EIGRP_TLV_IP_INT, "IP Internal routes"},
+ { EIGRP_TLV_IP_EXT, "IP External routes"},
+ { EIGRP_TLV_AT_INT, "AppleTalk Internal routes"},
+ { EIGRP_TLV_AT_EXT, "AppleTalk External routes"},
+ { EIGRP_TLV_AT_CABLE_SETUP, "AppleTalk Cable setup"},
+ { EIGRP_TLV_IPX_INT, "IPX Internal routes"},
+ { EIGRP_TLV_IPX_EXT, "IPX External routes"},
+ { 0, NULL}
+};
+
+struct eigrp_tlv_general_parm_t {
+ nd_uint8_t k1;
+ nd_uint8_t k2;
+ nd_uint8_t k3;
+ nd_uint8_t k4;
+ nd_uint8_t k5;
+ nd_uint8_t res;
+ nd_uint16_t holdtime;
+};
+
+struct eigrp_tlv_sw_version_t {
+ nd_uint8_t ios_major;
+ nd_uint8_t ios_minor;
+ nd_uint8_t eigrp_major;
+ nd_uint8_t eigrp_minor;
+};
+
+struct eigrp_tlv_ip_int_t {
+ nd_ipv4 nexthop;
+ nd_uint32_t delay;
+ nd_uint32_t bandwidth;
+ nd_uint24_t mtu;
+ nd_uint8_t hopcount;
+ nd_uint8_t reliability;
+ nd_uint8_t load;
+ nd_byte reserved[2];
+ nd_uint8_t plen;
+ nd_uint8_t destination; /* variable length [1-4] bytes encoding */
+};
+
+struct eigrp_tlv_ip_ext_t {
+ nd_ipv4 nexthop;
+ nd_ipv4 origin_router;
+ nd_uint32_t origin_as;
+ nd_uint32_t tag;
+ nd_uint32_t metric;
+ nd_byte reserved[2];
+ nd_uint8_t proto_id;
+ nd_uint8_t flags;
+ nd_uint32_t delay;
+ nd_uint32_t bandwidth;
+ nd_uint24_t mtu;
+ nd_uint8_t hopcount;
+ nd_uint8_t reliability;
+ nd_uint8_t load;
+ nd_byte reserved2[2];
+ nd_uint8_t plen;
+ nd_uint8_t destination; /* variable length [1-4] bytes encoding */
+};
+
+struct eigrp_tlv_at_cable_setup_t {
+ nd_uint16_t cable_start;
+ nd_uint16_t cable_end;
+ nd_uint32_t router_id;
+};
+
+struct eigrp_tlv_at_int_t {
+ nd_byte nexthop[4];
+ nd_uint32_t delay;
+ nd_uint32_t bandwidth;
+ nd_uint24_t mtu;
+ nd_uint8_t hopcount;
+ nd_uint8_t reliability;
+ nd_uint8_t load;
+ nd_byte reserved[2];
+ nd_uint16_t cable_start;
+ nd_uint16_t cable_end;
+};
+
+struct eigrp_tlv_at_ext_t {
+ nd_byte nexthop[4];
+ nd_uint32_t origin_router;
+ nd_uint32_t origin_as;
+ nd_uint32_t tag;
+ nd_uint8_t proto_id;
+ nd_uint8_t flags;
+ nd_uint16_t metric;
+ nd_uint32_t delay;
+ nd_uint32_t bandwidth;
+ nd_uint24_t mtu;
+ nd_uint8_t hopcount;
+ nd_uint8_t reliability;
+ nd_uint8_t load;
+ nd_byte reserved2[2];
+ nd_uint16_t cable_start;
+ nd_uint16_t cable_end;
+};
+
+static const struct tok eigrp_ext_proto_id_values[] = {
+ { 0x01, "IGRP" },
+ { 0x02, "EIGRP" },
+ { 0x03, "Static" },
+ { 0x04, "RIP" },
+ { 0x05, "Hello" },
+ { 0x06, "OSPF" },
+ { 0x07, "IS-IS" },
+ { 0x08, "EGP" },
+ { 0x09, "BGP" },
+ { 0x0a, "IDRP" },
+ { 0x0b, "Connected" },
+ { 0, NULL}
+};
+
+void
+eigrp_print(netdissect_options *ndo, const u_char *pptr, u_int len)
+{
+ const struct eigrp_common_header *eigrp_com_header;
+ const struct eigrp_tlv_header *eigrp_tlv_header;
+ const u_char *tptr,*tlv_tptr;
+ u_int tlen,eigrp_tlv_len,eigrp_tlv_type,tlv_tlen, byte_length, bit_length;
+ uint8_t prefix[4];
+
+ union {
+ const struct eigrp_tlv_general_parm_t *eigrp_tlv_general_parm;
+ const struct eigrp_tlv_sw_version_t *eigrp_tlv_sw_version;
+ const struct eigrp_tlv_ip_int_t *eigrp_tlv_ip_int;
+ const struct eigrp_tlv_ip_ext_t *eigrp_tlv_ip_ext;
+ const struct eigrp_tlv_at_cable_setup_t *eigrp_tlv_at_cable_setup;
+ const struct eigrp_tlv_at_int_t *eigrp_tlv_at_int;
+ const struct eigrp_tlv_at_ext_t *eigrp_tlv_at_ext;
+ } tlv_ptr;
+
+ ndo->ndo_protocol = "eigrp";
+ tptr=pptr;
+ eigrp_com_header = (const struct eigrp_common_header *)pptr;
+ ND_TCHECK_SIZE(eigrp_com_header);
+
+ /*
+ * Sanity checking of the header.
+ */
+ if (GET_U_1(eigrp_com_header->version) != EIGRP_VERSION) {
+ ND_PRINT("EIGRP version %u packet not supported",
+ GET_U_1(eigrp_com_header->version));
+ return;
+ }
+
+ /* in non-verbose mode just lets print the basic Message Type*/
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT("EIGRP %s, length: %u",
+ tok2str(eigrp_opcode_values, "unknown (%u)",GET_U_1(eigrp_com_header->opcode)),
+ len);
+ return;
+ }
+
+ /* ok they seem to want to know everything - lets fully decode it */
+
+ if (len < sizeof(struct eigrp_common_header)) {
+ ND_PRINT("EIGRP %s, length: %u (too short, < %zu)",
+ tok2str(eigrp_opcode_values, "unknown (%u)",GET_U_1(eigrp_com_header->opcode)),
+ len, sizeof(struct eigrp_common_header));
+ return;
+ }
+ tlen=len-sizeof(struct eigrp_common_header);
+
+ ND_PRINT("\n\tEIGRP v%u, opcode: %s (%u), chksum: 0x%04x, Flags: [%s]"
+ "\n\tseq: 0x%08x, ack: 0x%08x, VRID: %u, AS: %u, length: %u",
+ GET_U_1(eigrp_com_header->version),
+ tok2str(eigrp_opcode_values, "unknown, type: %u",GET_U_1(eigrp_com_header->opcode)),
+ GET_U_1(eigrp_com_header->opcode),
+ GET_BE_U_2(eigrp_com_header->checksum),
+ bittok2str(eigrp_common_header_flag_values,
+ "none",
+ GET_BE_U_4(eigrp_com_header->flags)),
+ GET_BE_U_4(eigrp_com_header->seq),
+ GET_BE_U_4(eigrp_com_header->ack),
+ GET_BE_U_2(eigrp_com_header->vrid),
+ GET_BE_U_2(eigrp_com_header->asn),
+ tlen);
+
+ tptr+=sizeof(struct eigrp_common_header);
+
+ while(tlen>0) {
+ /* did we capture enough for fully decoding the object header ? */
+ ND_TCHECK_LEN(tptr, sizeof(struct eigrp_tlv_header));
+
+ eigrp_tlv_header = (const struct eigrp_tlv_header *)tptr;
+ eigrp_tlv_len=GET_BE_U_2(eigrp_tlv_header->length);
+ eigrp_tlv_type=GET_BE_U_2(eigrp_tlv_header->type);
+
+
+ if (eigrp_tlv_len < sizeof(struct eigrp_tlv_header) ||
+ eigrp_tlv_len > tlen) {
+ print_unknown_data(ndo,tptr+sizeof(struct eigrp_tlv_header),"\n\t ",tlen);
+ return;
+ }
+
+ ND_PRINT("\n\t %s TLV (0x%04x), length: %u",
+ tok2str(eigrp_tlv_values,
+ "Unknown",
+ eigrp_tlv_type),
+ eigrp_tlv_type,
+ eigrp_tlv_len);
+
+ if (eigrp_tlv_len < sizeof(struct eigrp_tlv_header)) {
+ ND_PRINT(" (too short, < %zu)",
+ sizeof(struct eigrp_tlv_header));
+ break;
+ }
+ tlv_tptr=tptr+sizeof(struct eigrp_tlv_header);
+ tlv_tlen=eigrp_tlv_len-sizeof(struct eigrp_tlv_header);
+
+ /* did we capture enough for fully decoding the object ? */
+ ND_TCHECK_LEN(tptr, eigrp_tlv_len);
+
+ switch(eigrp_tlv_type) {
+
+ case EIGRP_TLV_GENERAL_PARM:
+ tlv_ptr.eigrp_tlv_general_parm = (const struct eigrp_tlv_general_parm_t *)tlv_tptr;
+ if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_general_parm)) {
+ ND_PRINT(" (too short, < %zu)",
+ sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_general_parm));
+ break;
+ }
+
+ ND_PRINT("\n\t holdtime: %us, k1 %u, k2 %u, k3 %u, k4 %u, k5 %u",
+ GET_BE_U_2(tlv_ptr.eigrp_tlv_general_parm->holdtime),
+ GET_U_1(tlv_ptr.eigrp_tlv_general_parm->k1),
+ GET_U_1(tlv_ptr.eigrp_tlv_general_parm->k2),
+ GET_U_1(tlv_ptr.eigrp_tlv_general_parm->k3),
+ GET_U_1(tlv_ptr.eigrp_tlv_general_parm->k4),
+ GET_U_1(tlv_ptr.eigrp_tlv_general_parm->k5));
+ break;
+
+ case EIGRP_TLV_SW_VERSION:
+ tlv_ptr.eigrp_tlv_sw_version = (const struct eigrp_tlv_sw_version_t *)tlv_tptr;
+ if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_sw_version)) {
+ ND_PRINT(" (too short, < %zu)",
+ sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_sw_version));
+ break;
+ }
+
+ ND_PRINT("\n\t IOS version: %u.%u, EIGRP version %u.%u",
+ GET_U_1(tlv_ptr.eigrp_tlv_sw_version->ios_major),
+ GET_U_1(tlv_ptr.eigrp_tlv_sw_version->ios_minor),
+ GET_U_1(tlv_ptr.eigrp_tlv_sw_version->eigrp_major),
+ GET_U_1(tlv_ptr.eigrp_tlv_sw_version->eigrp_minor));
+ break;
+
+ case EIGRP_TLV_IP_INT:
+ tlv_ptr.eigrp_tlv_ip_int = (const struct eigrp_tlv_ip_int_t *)tlv_tptr;
+ if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_ip_int)) {
+ ND_PRINT(" (too short, < %zu)",
+ sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_ip_int));
+ break;
+ }
+
+ bit_length = GET_U_1(tlv_ptr.eigrp_tlv_ip_int->plen);
+ if (bit_length > 32) {
+ ND_PRINT("\n\t illegal prefix length %u",bit_length);
+ break;
+ }
+ byte_length = (bit_length + 7) / 8; /* variable length encoding */
+ memset(prefix, 0, 4);
+ GET_CPY_BYTES(prefix, tlv_ptr.eigrp_tlv_ip_int->destination, byte_length);
+
+ ND_PRINT("\n\t IPv4 prefix: %15s/%u, nexthop: ",
+ ipaddr_string(ndo, prefix), /* local buffer, not packet data; don't use GET_IPADDR_STRING() */
+ bit_length);
+ if (GET_BE_U_4(tlv_ptr.eigrp_tlv_ip_int->nexthop) == 0)
+ ND_PRINT("self");
+ else
+ ND_PRINT("%s",
+ GET_IPADDR_STRING(tlv_ptr.eigrp_tlv_ip_int->nexthop));
+
+ ND_PRINT("\n\t delay %u ms, bandwidth %u Kbps, mtu %u, hop %u, reliability %u, load %u",
+ (GET_BE_U_4(tlv_ptr.eigrp_tlv_ip_int->delay)/100),
+ GET_BE_U_4(tlv_ptr.eigrp_tlv_ip_int->bandwidth),
+ GET_BE_U_3(tlv_ptr.eigrp_tlv_ip_int->mtu),
+ GET_U_1(tlv_ptr.eigrp_tlv_ip_int->hopcount),
+ GET_U_1(tlv_ptr.eigrp_tlv_ip_int->reliability),
+ GET_U_1(tlv_ptr.eigrp_tlv_ip_int->load));
+ break;
+
+ case EIGRP_TLV_IP_EXT:
+ tlv_ptr.eigrp_tlv_ip_ext = (const struct eigrp_tlv_ip_ext_t *)tlv_tptr;
+ if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_ip_ext)) {
+ ND_PRINT(" (too short, < %zu)",
+ sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_ip_ext));
+ break;
+ }
+
+ bit_length = GET_U_1(tlv_ptr.eigrp_tlv_ip_ext->plen);
+ if (bit_length > 32) {
+ ND_PRINT("\n\t illegal prefix length %u",bit_length);
+ break;
+ }
+ byte_length = (bit_length + 7) / 8; /* variable length encoding */
+ memset(prefix, 0, 4);
+ GET_CPY_BYTES(prefix, tlv_ptr.eigrp_tlv_ip_ext->destination, byte_length);
+
+ ND_PRINT("\n\t IPv4 prefix: %15s/%u, nexthop: ",
+ ipaddr_string(ndo, prefix), /* local buffer, not packet data; don't use GET_IPADDR_STRING() */
+ bit_length);
+ if (GET_BE_U_4(tlv_ptr.eigrp_tlv_ip_ext->nexthop) == 0)
+ ND_PRINT("self");
+ else
+ ND_PRINT("%s",
+ GET_IPADDR_STRING(tlv_ptr.eigrp_tlv_ip_ext->nexthop));
+
+ ND_PRINT("\n\t origin-router %s, origin-as %u, origin-proto %s, flags [0x%02x], tag 0x%08x, metric %u",
+ GET_IPADDR_STRING(tlv_ptr.eigrp_tlv_ip_ext->origin_router),
+ GET_BE_U_4(tlv_ptr.eigrp_tlv_ip_ext->origin_as),
+ tok2str(eigrp_ext_proto_id_values,"unknown",GET_U_1(tlv_ptr.eigrp_tlv_ip_ext->proto_id)),
+ GET_U_1(tlv_ptr.eigrp_tlv_ip_ext->flags),
+ GET_BE_U_4(tlv_ptr.eigrp_tlv_ip_ext->tag),
+ GET_BE_U_4(tlv_ptr.eigrp_tlv_ip_ext->metric));
+
+ ND_PRINT("\n\t delay %u ms, bandwidth %u Kbps, mtu %u, hop %u, reliability %u, load %u",
+ (GET_BE_U_4(tlv_ptr.eigrp_tlv_ip_ext->delay)/100),
+ GET_BE_U_4(tlv_ptr.eigrp_tlv_ip_ext->bandwidth),
+ GET_BE_U_3(tlv_ptr.eigrp_tlv_ip_ext->mtu),
+ GET_U_1(tlv_ptr.eigrp_tlv_ip_ext->hopcount),
+ GET_U_1(tlv_ptr.eigrp_tlv_ip_ext->reliability),
+ GET_U_1(tlv_ptr.eigrp_tlv_ip_ext->load));
+ break;
+
+ case EIGRP_TLV_AT_CABLE_SETUP:
+ tlv_ptr.eigrp_tlv_at_cable_setup = (const struct eigrp_tlv_at_cable_setup_t *)tlv_tptr;
+ if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_at_cable_setup)) {
+ ND_PRINT(" (too short, < %zu)",
+ sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_at_cable_setup));
+ break;
+ }
+
+ ND_PRINT("\n\t Cable-range: %u-%u, Router-ID %u",
+ GET_BE_U_2(tlv_ptr.eigrp_tlv_at_cable_setup->cable_start),
+ GET_BE_U_2(tlv_ptr.eigrp_tlv_at_cable_setup->cable_end),
+ GET_BE_U_4(tlv_ptr.eigrp_tlv_at_cable_setup->router_id));
+ break;
+
+ case EIGRP_TLV_AT_INT:
+ tlv_ptr.eigrp_tlv_at_int = (const struct eigrp_tlv_at_int_t *)tlv_tptr;
+ if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_at_int)) {
+ ND_PRINT(" (too short, < %zu)",
+ sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_at_int));
+ break;
+ }
+
+ ND_PRINT("\n\t Cable-Range: %u-%u, nexthop: ",
+ GET_BE_U_2(tlv_ptr.eigrp_tlv_at_int->cable_start),
+ GET_BE_U_2(tlv_ptr.eigrp_tlv_at_int->cable_end));
+
+ if (GET_BE_U_4(tlv_ptr.eigrp_tlv_at_int->nexthop) == 0)
+ ND_PRINT("self");
+ else
+ ND_PRINT("%u.%u",
+ GET_BE_U_2(&tlv_ptr.eigrp_tlv_at_int->nexthop[0]),
+ GET_BE_U_2(&tlv_ptr.eigrp_tlv_at_int->nexthop[2]));
+
+ ND_PRINT("\n\t delay %u ms, bandwidth %u Kbps, mtu %u, hop %u, reliability %u, load %u",
+ (GET_BE_U_4(tlv_ptr.eigrp_tlv_at_int->delay)/100),
+ GET_BE_U_4(tlv_ptr.eigrp_tlv_at_int->bandwidth),
+ GET_BE_U_3(tlv_ptr.eigrp_tlv_at_int->mtu),
+ GET_U_1(tlv_ptr.eigrp_tlv_at_int->hopcount),
+ GET_U_1(tlv_ptr.eigrp_tlv_at_int->reliability),
+ GET_U_1(tlv_ptr.eigrp_tlv_at_int->load));
+ break;
+
+ case EIGRP_TLV_AT_EXT:
+ tlv_ptr.eigrp_tlv_at_ext = (const struct eigrp_tlv_at_ext_t *)tlv_tptr;
+ if (tlv_tlen < sizeof(*tlv_ptr.eigrp_tlv_at_ext)) {
+ ND_PRINT(" (too short, < %zu)",
+ sizeof(struct eigrp_tlv_header) + sizeof(*tlv_ptr.eigrp_tlv_at_ext));
+ break;
+ }
+
+ ND_PRINT("\n\t Cable-Range: %u-%u, nexthop: ",
+ GET_BE_U_2(tlv_ptr.eigrp_tlv_at_ext->cable_start),
+ GET_BE_U_2(tlv_ptr.eigrp_tlv_at_ext->cable_end));
+
+ if (GET_BE_U_4(tlv_ptr.eigrp_tlv_at_ext->nexthop) == 0)
+ ND_PRINT("self");
+ else
+ ND_PRINT("%u.%u",
+ GET_BE_U_2(&tlv_ptr.eigrp_tlv_at_ext->nexthop[0]),
+ GET_BE_U_2(&tlv_ptr.eigrp_tlv_at_ext->nexthop[2]));
+
+ ND_PRINT("\n\t origin-router %u, origin-as %u, origin-proto %s, flags [0x%02x], tag 0x%08x, metric %u",
+ GET_BE_U_4(tlv_ptr.eigrp_tlv_at_ext->origin_router),
+ GET_BE_U_4(tlv_ptr.eigrp_tlv_at_ext->origin_as),
+ tok2str(eigrp_ext_proto_id_values,"unknown",GET_U_1(tlv_ptr.eigrp_tlv_at_ext->proto_id)),
+ GET_U_1(tlv_ptr.eigrp_tlv_at_ext->flags),
+ GET_BE_U_4(tlv_ptr.eigrp_tlv_at_ext->tag),
+ GET_BE_U_2(tlv_ptr.eigrp_tlv_at_ext->metric));
+
+ ND_PRINT("\n\t delay %u ms, bandwidth %u Kbps, mtu %u, hop %u, reliability %u, load %u",
+ (GET_BE_U_4(tlv_ptr.eigrp_tlv_at_ext->delay)/100),
+ GET_BE_U_4(tlv_ptr.eigrp_tlv_at_ext->bandwidth),
+ GET_BE_U_3(tlv_ptr.eigrp_tlv_at_ext->mtu),
+ GET_U_1(tlv_ptr.eigrp_tlv_at_ext->hopcount),
+ GET_U_1(tlv_ptr.eigrp_tlv_at_ext->reliability),
+ GET_U_1(tlv_ptr.eigrp_tlv_at_ext->load));
+ break;
+
+ /*
+ * FIXME those are the defined TLVs that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+
+ case EIGRP_TLV_AUTH:
+ case EIGRP_TLV_SEQ:
+ case EIGRP_TLV_MCAST_SEQ:
+ case EIGRP_TLV_IPX_INT:
+ case EIGRP_TLV_IPX_EXT:
+
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo,tlv_tptr,"\n\t ",tlv_tlen);
+ break;
+ }
+ /* do we want to see an additionally hexdump ? */
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo,tptr+sizeof(struct eigrp_tlv_header),"\n\t ",
+ eigrp_tlv_len-sizeof(struct eigrp_tlv_header));
+
+ tptr+=eigrp_tlv_len;
+ tlen-=eigrp_tlv_len;
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-enc.c b/print-enc.c
new file mode 100644
index 0000000..928b02c
--- /dev/null
+++ b/print-enc.c
@@ -0,0 +1,158 @@
+/* $OpenBSD: print-enc.c,v 1.7 2002/02/19 19:39:40 millert Exp $ */
+
+/*
+ * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: OpenBSD IPsec encapsulation BPF layer printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "af.h"
+
+/* From $OpenBSD: if_enc.h,v 1.8 2001/06/25 05:14:00 angelos Exp $ */
+/*
+ * The authors of this code are John Ioannidis (ji@tla.org),
+ * Angelos D. Keromytis (kermit@csd.uch.gr) and
+ * Niels Provos (provos@physnet.uni-hamburg.de).
+ *
+ * This code was written by John Ioannidis for BSD/OS in Athens, Greece,
+ * in November 1995.
+ *
+ * Ported to OpenBSD and NetBSD, with additional transforms, in December 1996,
+ * by Angelos D. Keromytis.
+ *
+ * Additional transforms and features in 1997 and 1998 by Angelos D. Keromytis
+ * and Niels Provos.
+ *
+ * Copyright (C) 1995, 1996, 1997, 1998 by John Ioannidis, Angelos D. Keromytis
+ * and Niels Provos.
+ * Copyright (c) 2001, Angelos D. Keromytis.
+ *
+ * Permission to use, copy, and modify this software with or without fee
+ * is hereby granted, provided that this entire notice is included in
+ * all copies of any software which is or includes a copy or
+ * modification of this software.
+ * You may use this code under the GNU public license if you so wish. Please
+ * contribute changes back to the authors under this freer than GPL license
+ * so that we may further the use of strong encryption without limitations to
+ * all.
+ *
+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
+ * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
+ * PURPOSE.
+ */
+
+#define ENC_HDRLEN 12
+
+/* From $OpenBSD: mbuf.h,v 1.56 2002/01/25 15:50:23 art Exp $ */
+#define M_CONF 0x0400 /* packet was encrypted (ESP-transport) */
+#define M_AUTH 0x0800 /* packet was authenticated (AH) */
+
+struct enchdr {
+ nd_uint32_t af;
+ nd_uint32_t spi;
+ nd_uint32_t flags;
+};
+
+#define ENC_PRINT_TYPE(wh, xf, name) \
+ if ((wh) & (xf)) { \
+ ND_PRINT("%s%s", name, (wh) == (xf) ? "): " : ","); \
+ (wh) &= ~(xf); \
+ }
+
+/*
+ * Byte-swap a 32-bit number.
+ * ("htonl()" or "ntohl()" won't work - we want to byte-swap even on
+ * big-endian platforms.)
+ */
+#define SWAPLONG(y) \
+((((y)&0xff)<<24) | (((y)&0xff00)<<8) | (((y)&0xff0000)>>8) | (((y)>>24)&0xff))
+
+void
+enc_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int length = h->len;
+ u_int af, flags;
+ const struct enchdr *hdr;
+
+ ndo->ndo_protocol = "enc";
+ ND_TCHECK_LEN(p, ENC_HDRLEN);
+ ndo->ndo_ll_hdr_len += ENC_HDRLEN;
+
+ hdr = (const struct enchdr *)p;
+ /*
+ * The address family and flags fields are in the byte order
+ * of the host that originally captured the traffic.
+ *
+ * To determine that, look at the address family. It's 32-bit,
+ * it is not likely ever to be > 65535 (I doubt there will
+ * ever be > 65535 address families and, so far, AF_ values have
+ * not been allocated very sparsely) so it should not have the
+ * upper 16 bits set, and it is not likely ever to be AF_UNSPEC,
+ * i.e. it's not likely ever to be 0, so if it's byte-swapped,
+ * it should have at least one of the upper 16 bits set.
+ *
+ * So if any of the upper 16 bits are set, we assume it, and
+ * the flags field, are byte-swapped.
+ *
+ * The SPI field is always in network byte order, i.e. big-
+ * endian.
+ */
+ UNALIGNED_MEMCPY(&af, &hdr->af, sizeof (af));
+ UNALIGNED_MEMCPY(&flags, &hdr->flags, sizeof (flags));
+ if ((af & 0xFFFF0000) != 0) {
+ af = SWAPLONG(af);
+ flags = SWAPLONG(flags);
+ }
+
+ if (flags == 0)
+ ND_PRINT("(unprotected): ");
+ else
+ ND_PRINT("(");
+ ENC_PRINT_TYPE(flags, M_AUTH, "authentic");
+ ENC_PRINT_TYPE(flags, M_CONF, "confidential");
+ /* ENC_PRINT_TYPE(flags, M_TUNNEL, "tunnel"); */
+ ND_PRINT("SPI 0x%08x: ", GET_BE_U_4(hdr->spi));
+
+ length -= ENC_HDRLEN;
+ p += ENC_HDRLEN;
+
+ switch (af) {
+ case BSD_AFNUM_INET:
+ ip_print(ndo, p, length);
+ break;
+ case BSD_AFNUM_INET6_BSD:
+ case BSD_AFNUM_INET6_FREEBSD:
+ case BSD_AFNUM_INET6_DARWIN:
+ ip6_print(ndo, p, length);
+ break;
+ }
+}
diff --git a/print-esp.c b/print-esp.c
new file mode 100644
index 0000000..2cee088
--- /dev/null
+++ b/print-esp.c
@@ -0,0 +1,928 @@
+/* $NetBSD: print-ah.c,v 1.4 1996/05/20 00:41:16 fvdl Exp $ */
+
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IPSEC Encapsulating Security Payload (ESP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+/* Any code in this file that depends on HAVE_LIBCRYPTO depends on
+ * HAVE_OPENSSL_EVP_H too. Undefining the former when the latter isn't defined
+ * is the simplest way of handling the dependency.
+ */
+#ifdef HAVE_LIBCRYPTO
+#ifdef HAVE_OPENSSL_EVP_H
+#include <openssl/evp.h>
+#else
+#undef HAVE_LIBCRYPTO
+#endif
+#endif
+
+#include "netdissect.h"
+#include "extract.h"
+
+#include "diag-control.h"
+
+#ifdef HAVE_LIBCRYPTO
+#include "strtoaddr.h"
+#include "ascii_strcasecmp.h"
+#endif
+
+#include "ip.h"
+#include "ip6.h"
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * RFC1827/2406 Encapsulated Security Payload.
+ */
+
+struct newesp {
+ nd_uint32_t esp_spi; /* ESP */
+ nd_uint32_t esp_seq; /* Sequence number */
+ /*variable size*/ /* (IV and) Payload data */
+ /*variable size*/ /* padding */
+ /*8bit*/ /* pad size */
+ /*8bit*/ /* next header */
+ /*8bit*/ /* next header */
+ /*variable size, 32bit bound*/ /* Authentication data */
+};
+
+#ifdef HAVE_LIBCRYPTO
+union inaddr_u {
+ nd_ipv4 in4;
+ nd_ipv6 in6;
+};
+struct sa_list {
+ struct sa_list *next;
+ u_int daddr_version;
+ union inaddr_u daddr;
+ uint32_t spi; /* if == 0, then IKEv2 */
+ int initiator;
+ u_char spii[8]; /* for IKEv2 */
+ u_char spir[8];
+ const EVP_CIPHER *evp;
+ u_int ivlen;
+ int authlen;
+ u_char authsecret[256];
+ int authsecret_len;
+ u_char secret[256]; /* is that big enough for all secrets? */
+ int secretlen;
+};
+
+#ifndef HAVE_EVP_CIPHER_CTX_NEW
+/*
+ * Allocate an EVP_CIPHER_CTX.
+ * Used if we have an older version of OpenSSL that doesn't provide
+ * routines to allocate and free them.
+ */
+static EVP_CIPHER_CTX *
+EVP_CIPHER_CTX_new(void)
+{
+ EVP_CIPHER_CTX *ctx;
+
+ ctx = malloc(sizeof(*ctx));
+ if (ctx == NULL)
+ return (NULL);
+ memset(ctx, 0, sizeof(*ctx));
+ return (ctx);
+}
+
+static void
+EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx)
+{
+ EVP_CIPHER_CTX_cleanup(ctx);
+ free(ctx);
+}
+#endif
+
+#ifdef HAVE_EVP_DECRYPTINIT_EX
+/*
+ * Initialize the cipher by calling EVP_DecryptInit_ex(), because
+ * calling EVP_DecryptInit() will reset the cipher context, clearing
+ * the cipher, so calling it twice, with the second call having a
+ * null cipher, will clear the already-set cipher. EVP_DecryptInit_ex(),
+ * however, won't reset the cipher context, so you can use it to specify
+ * the IV in a second call after a first call to EVP_DecryptInit_ex()
+ * to set the cipher and the key.
+ *
+ * XXX - is there some reason why we need to make two calls?
+ */
+static int
+set_cipher_parameters(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
+ const unsigned char *key,
+ const unsigned char *iv)
+{
+ return EVP_DecryptInit_ex(ctx, cipher, NULL, key, iv);
+}
+#else
+/*
+ * Initialize the cipher by calling EVP_DecryptInit(), because we don't
+ * have EVP_DecryptInit_ex(); we rely on it not trashing the context.
+ */
+static int
+set_cipher_parameters(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
+ const unsigned char *key,
+ const unsigned char *iv)
+{
+ return EVP_DecryptInit(ctx, cipher, key, iv);
+}
+#endif
+
+static u_char *
+do_decrypt(netdissect_options *ndo, const char *caller, struct sa_list *sa,
+ const u_char *iv, const u_char *ct, unsigned int ctlen)
+{
+ EVP_CIPHER_CTX *ctx;
+ unsigned int block_size;
+ unsigned int ptlen;
+ u_char *pt;
+ int len;
+
+ ctx = EVP_CIPHER_CTX_new();
+ if (ctx == NULL) {
+ /*
+ * Failed to initialize the cipher context.
+ * From a look at the OpenSSL code, this appears to
+ * mean "couldn't allocate memory for the cipher context";
+ * note that we're not passing any parameters, so there's
+ * not much else it can mean.
+ */
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: can't allocate memory for cipher context", caller);
+ return NULL;
+ }
+
+ if (set_cipher_parameters(ctx, sa->evp, sa->secret, NULL) < 0) {
+ EVP_CIPHER_CTX_free(ctx);
+ (*ndo->ndo_warning)(ndo, "%s: espkey init failed", caller);
+ return NULL;
+ }
+ if (set_cipher_parameters(ctx, NULL, NULL, iv) < 0) {
+ EVP_CIPHER_CTX_free(ctx);
+ (*ndo->ndo_warning)(ndo, "%s: IV init failed", caller);
+ return NULL;
+ }
+
+ /*
+ * At least as I read RFC 5996 section 3.14 and RFC 4303 section 2.4,
+ * if the cipher has a block size of which the ciphertext's size must
+ * be a multiple, the payload must be padded to make that happen, so
+ * the ciphertext length must be a multiple of the block size. Fail
+ * if that's not the case.
+ */
+ block_size = (unsigned int)EVP_CIPHER_CTX_block_size(ctx);
+ if ((ctlen % block_size) != 0) {
+ EVP_CIPHER_CTX_free(ctx);
+ (*ndo->ndo_warning)(ndo,
+ "%s: ciphertext size %u is not a multiple of the cipher block size %u",
+ caller, ctlen, block_size);
+ return NULL;
+ }
+
+ /*
+ * Attempt to allocate a buffer for the decrypted data, because
+ * we can't decrypt on top of the input buffer.
+ */
+ ptlen = ctlen;
+ pt = (u_char *)calloc(1, ptlen);
+ if (pt == NULL) {
+ EVP_CIPHER_CTX_free(ctx);
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: can't allocate memory for decryption buffer", caller);
+ return NULL;
+ }
+
+ /*
+ * The size of the ciphertext handed to us is a multiple of the
+ * cipher block size, so we don't need to worry about padding.
+ */
+ if (!EVP_CIPHER_CTX_set_padding(ctx, 0)) {
+ free(pt);
+ EVP_CIPHER_CTX_free(ctx);
+ (*ndo->ndo_warning)(ndo,
+ "%s: EVP_CIPHER_CTX_set_padding failed", caller);
+ return NULL;
+ }
+ if (!EVP_DecryptUpdate(ctx, pt, &len, ct, ctlen)) {
+ free(pt);
+ EVP_CIPHER_CTX_free(ctx);
+ (*ndo->ndo_warning)(ndo, "%s: EVP_DecryptUpdate failed",
+ caller);
+ return NULL;
+ }
+ EVP_CIPHER_CTX_free(ctx);
+ return pt;
+}
+
+/*
+ * This will allocate a new buffer containing the decrypted data.
+ * It returns 1 on success and 0 on failure.
+ *
+ * It will push the new buffer and the values of ndo->ndo_packetp and
+ * ndo->ndo_snapend onto the buffer stack, and change ndo->ndo_packetp
+ * and ndo->ndo_snapend to refer to the new buffer.
+ *
+ * Our caller must pop the buffer off the stack when it's finished
+ * dissecting anything in it and before it does any dissection of
+ * anything in the old buffer. That will free the new buffer.
+ */
+DIAG_OFF_DEPRECATION
+int esp_decrypt_buffer_by_ikev2_print(netdissect_options *ndo,
+ int initiator,
+ const u_char spii[8],
+ const u_char spir[8],
+ const u_char *buf, const u_char *end)
+{
+ struct sa_list *sa;
+ const u_char *iv;
+ const u_char *ct;
+ unsigned int ctlen;
+ u_char *pt;
+
+ /* initiator arg is any non-zero value */
+ if(initiator) initiator=1;
+
+ /* see if we can find the SA, and if so, decode it */
+ for (sa = ndo->ndo_sa_list_head; sa != NULL; sa = sa->next) {
+ if (sa->spi == 0
+ && initiator == sa->initiator
+ && memcmp(spii, sa->spii, 8) == 0
+ && memcmp(spir, sa->spir, 8) == 0)
+ break;
+ }
+
+ if(sa == NULL) return 0;
+ if(sa->evp == NULL) return 0;
+
+ /*
+ * remove authenticator, and see if we still have something to
+ * work with
+ */
+ end = end - sa->authlen;
+ iv = buf;
+ ct = iv + sa->ivlen;
+ ctlen = end-ct;
+
+ if(end <= ct) return 0;
+
+ pt = do_decrypt(ndo, __func__, sa, iv,
+ ct, ctlen);
+ if (pt == NULL)
+ return 0;
+
+ /*
+ * Switch to the output buffer for dissection, and save it
+ * on the buffer stack so it can be freed; our caller must
+ * pop it when done.
+ */
+ if (!nd_push_buffer(ndo, pt, pt, ctlen)) {
+ free(pt);
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: can't push buffer on buffer stack", __func__);
+ }
+
+ return 1;
+}
+DIAG_ON_DEPRECATION
+
+static void esp_print_addsa(netdissect_options *ndo,
+ const struct sa_list *sa, int sa_def)
+{
+ /* copy the "sa" */
+
+ struct sa_list *nsa;
+
+ /* malloc() return used in a 'struct sa_list': do not free() */
+ nsa = (struct sa_list *)malloc(sizeof(struct sa_list));
+ if (nsa == NULL)
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: malloc", __func__);
+
+ *nsa = *sa;
+
+ if (sa_def)
+ ndo->ndo_sa_default = nsa;
+
+ nsa->next = ndo->ndo_sa_list_head;
+ ndo->ndo_sa_list_head = nsa;
+}
+
+
+static u_int hexdigit(netdissect_options *ndo, char hex)
+{
+ if (hex >= '0' && hex <= '9')
+ return (hex - '0');
+ else if (hex >= 'A' && hex <= 'F')
+ return (hex - 'A' + 10);
+ else if (hex >= 'a' && hex <= 'f')
+ return (hex - 'a' + 10);
+ else {
+ (*ndo->ndo_error)(ndo, S_ERR_ND_ESP_SECRET,
+ "invalid hex digit %c in espsecret\n", hex);
+ }
+}
+
+static u_int hex2byte(netdissect_options *ndo, char *hexstring)
+{
+ u_int byte;
+
+ byte = (hexdigit(ndo, hexstring[0]) << 4) + hexdigit(ndo, hexstring[1]);
+ return byte;
+}
+
+/*
+ * returns size of binary, 0 on failure.
+ */
+static int
+espprint_decode_hex(netdissect_options *ndo,
+ u_char *binbuf, unsigned int binbuf_len, char *hex)
+{
+ unsigned int len;
+ int i;
+
+ len = strlen(hex) / 2;
+
+ if (len > binbuf_len) {
+ (*ndo->ndo_warning)(ndo, "secret is too big: %u\n", len);
+ return 0;
+ }
+
+ i = 0;
+ while (hex[0] != '\0' && hex[1]!='\0') {
+ binbuf[i] = hex2byte(ndo, hex);
+ hex += 2;
+ i++;
+ }
+
+ return i;
+}
+
+/*
+ * decode the form: SPINUM@IP <tab> ALGONAME:0xsecret
+ */
+
+DIAG_OFF_DEPRECATION
+static int
+espprint_decode_encalgo(netdissect_options *ndo,
+ char *decode, struct sa_list *sa)
+{
+ size_t i;
+ const EVP_CIPHER *evp;
+ int authlen = 0;
+ char *colon, *p;
+
+ colon = strchr(decode, ':');
+ if (colon == NULL) {
+ (*ndo->ndo_warning)(ndo, "failed to decode espsecret: %s\n", decode);
+ return 0;
+ }
+ *colon = '\0';
+
+ if (strlen(decode) > strlen("-hmac96") &&
+ !strcmp(decode + strlen(decode) - strlen("-hmac96"),
+ "-hmac96")) {
+ p = strstr(decode, "-hmac96");
+ *p = '\0';
+ authlen = 12;
+ }
+ if (strlen(decode) > strlen("-cbc") &&
+ !strcmp(decode + strlen(decode) - strlen("-cbc"), "-cbc")) {
+ p = strstr(decode, "-cbc");
+ *p = '\0';
+ }
+ evp = EVP_get_cipherbyname(decode);
+
+ if (!evp) {
+ (*ndo->ndo_warning)(ndo, "failed to find cipher algo %s\n", decode);
+ sa->evp = NULL;
+ sa->authlen = 0;
+ sa->ivlen = 0;
+ return 0;
+ }
+
+ sa->evp = evp;
+ sa->authlen = authlen;
+ /* This returns an int, but it should never be negative */
+ sa->ivlen = EVP_CIPHER_iv_length(evp);
+
+ colon++;
+ if (colon[0] == '0' && colon[1] == 'x') {
+ /* decode some hex! */
+
+ colon += 2;
+ sa->secretlen = espprint_decode_hex(ndo, sa->secret, sizeof(sa->secret), colon);
+ if(sa->secretlen == 0) return 0;
+ } else {
+ i = strlen(colon);
+
+ if (i < sizeof(sa->secret)) {
+ memcpy(sa->secret, colon, i);
+ sa->secretlen = i;
+ } else {
+ memcpy(sa->secret, colon, sizeof(sa->secret));
+ sa->secretlen = sizeof(sa->secret);
+ }
+ }
+
+ return 1;
+}
+DIAG_ON_DEPRECATION
+
+/*
+ * for the moment, ignore the auth algorithm, just hard code the authenticator
+ * length. Need to research how openssl looks up HMAC stuff.
+ */
+static int
+espprint_decode_authalgo(netdissect_options *ndo,
+ char *decode, struct sa_list *sa)
+{
+ char *colon;
+
+ colon = strchr(decode, ':');
+ if (colon == NULL) {
+ (*ndo->ndo_warning)(ndo, "failed to decode espsecret: %s\n", decode);
+ return 0;
+ }
+ *colon = '\0';
+
+ if(ascii_strcasecmp(decode,"sha1") == 0 ||
+ ascii_strcasecmp(decode,"md5") == 0) {
+ sa->authlen = 12;
+ }
+ return 1;
+}
+
+static void esp_print_decode_ikeline(netdissect_options *ndo, char *line,
+ const char *file, int lineno)
+{
+ /* it's an IKEv2 secret, store it instead */
+ struct sa_list sa1;
+
+ char *init;
+ char *icookie, *rcookie;
+ int ilen, rlen;
+ char *authkey;
+ char *enckey;
+
+ init = strsep(&line, " \t");
+ icookie = strsep(&line, " \t");
+ rcookie = strsep(&line, " \t");
+ authkey = strsep(&line, " \t");
+ enckey = strsep(&line, " \t");
+
+ /* if any fields are missing */
+ if(!init || !icookie || !rcookie || !authkey || !enckey) {
+ (*ndo->ndo_warning)(ndo, "print_esp: failed to find all fields for ikev2 at %s:%u",
+ file, lineno);
+
+ return;
+ }
+
+ ilen = strlen(icookie);
+ rlen = strlen(rcookie);
+
+ if((init[0]!='I' && init[0]!='R')
+ || icookie[0]!='0' || icookie[1]!='x'
+ || rcookie[0]!='0' || rcookie[1]!='x'
+ || ilen!=18
+ || rlen!=18) {
+ (*ndo->ndo_warning)(ndo, "print_esp: line %s:%u improperly formatted.",
+ file, lineno);
+
+ (*ndo->ndo_warning)(ndo, "init=%s icookie=%s(%u) rcookie=%s(%u)",
+ init, icookie, ilen, rcookie, rlen);
+
+ return;
+ }
+
+ sa1.spi = 0;
+ sa1.initiator = (init[0] == 'I');
+ if(espprint_decode_hex(ndo, sa1.spii, sizeof(sa1.spii), icookie+2)!=8)
+ return;
+
+ if(espprint_decode_hex(ndo, sa1.spir, sizeof(sa1.spir), rcookie+2)!=8)
+ return;
+
+ if(!espprint_decode_encalgo(ndo, enckey, &sa1)) return;
+
+ if(!espprint_decode_authalgo(ndo, authkey, &sa1)) return;
+
+ esp_print_addsa(ndo, &sa1, FALSE);
+}
+
+/*
+ *
+ * special form: file /name
+ * causes us to go read from this file instead.
+ *
+ */
+static void esp_print_decode_onesecret(netdissect_options *ndo, char *line,
+ const char *file, int lineno)
+{
+ struct sa_list sa1;
+ int sa_def;
+
+ char *spikey;
+ char *decode;
+
+ spikey = strsep(&line, " \t");
+ sa_def = 0;
+ memset(&sa1, 0, sizeof(struct sa_list));
+
+ /* if there is only one token, then it is an algo:key token */
+ if (line == NULL) {
+ decode = spikey;
+ spikey = NULL;
+ /* sa1.daddr.version = 0; */
+ /* memset(&sa1.daddr, 0, sizeof(sa1.daddr)); */
+ /* sa1.spi = 0; */
+ sa_def = 1;
+ } else
+ decode = line;
+
+ if (spikey && ascii_strcasecmp(spikey, "file") == 0) {
+ /* open file and read it */
+ FILE *secretfile;
+ char fileline[1024];
+ int subfile_lineno=0;
+ char *nl;
+ char *filename = line;
+
+ secretfile = fopen(filename, FOPEN_READ_TXT);
+ if (secretfile == NULL) {
+ (*ndo->ndo_error)(ndo, S_ERR_ND_OPEN_FILE,
+ "%s: can't open %s: %s\n",
+ __func__, filename, strerror(errno));
+ }
+
+ while (fgets(fileline, sizeof(fileline)-1, secretfile) != NULL) {
+ subfile_lineno++;
+ /* remove newline from the line */
+ nl = strchr(fileline, '\n');
+ if (nl)
+ *nl = '\0';
+ if (fileline[0] == '#') continue;
+ if (fileline[0] == '\0') continue;
+
+ esp_print_decode_onesecret(ndo, fileline, filename, subfile_lineno);
+ }
+ fclose(secretfile);
+
+ return;
+ }
+
+ if (spikey && ascii_strcasecmp(spikey, "ikev2") == 0) {
+ esp_print_decode_ikeline(ndo, line, file, lineno);
+ return;
+ }
+
+ if (spikey) {
+
+ char *spistr, *foo;
+ uint32_t spino;
+
+ spistr = strsep(&spikey, "@");
+ if (spistr == NULL) {
+ (*ndo->ndo_warning)(ndo, "print_esp: failed to find the @ token");
+ return;
+ }
+
+ spino = strtoul(spistr, &foo, 0);
+ if (spistr == foo || !spikey) {
+ (*ndo->ndo_warning)(ndo, "print_esp: failed to decode spi# %s\n", foo);
+ return;
+ }
+
+ sa1.spi = spino;
+
+ if (strtoaddr6(spikey, &sa1.daddr.in6) == 1) {
+ sa1.daddr_version = 6;
+ } else if (strtoaddr(spikey, &sa1.daddr.in4) == 1) {
+ sa1.daddr_version = 4;
+ } else {
+ (*ndo->ndo_warning)(ndo, "print_esp: can not decode IP# %s\n", spikey);
+ return;
+ }
+ }
+
+ if (decode) {
+ /* skip any blank spaces */
+ while (*decode == ' ' || *decode == '\t' || *decode == '\r' || *decode == '\n')
+ decode++;
+
+ if(!espprint_decode_encalgo(ndo, decode, &sa1)) {
+ return;
+ }
+ }
+
+ esp_print_addsa(ndo, &sa1, sa_def);
+}
+
+DIAG_OFF_DEPRECATION
+static void esp_init(netdissect_options *ndo _U_)
+{
+ /*
+ * 0.9.6 doesn't appear to define OPENSSL_API_COMPAT, so
+ * we check whether it's undefined or it's less than the
+ * value for 1.1.0.
+ */
+#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < 0x10100000L
+ OpenSSL_add_all_algorithms();
+#endif
+ EVP_add_cipher_alias(SN_des_ede3_cbc, "3des");
+}
+DIAG_ON_DEPRECATION
+
+void esp_decodesecret_print(netdissect_options *ndo)
+{
+ char *line;
+ char *p;
+ static int initialized = 0;
+
+ if (!initialized) {
+ esp_init(ndo);
+ initialized = 1;
+ }
+
+ p = ndo->ndo_espsecret;
+
+ while (p && p[0] != '\0') {
+ /* pick out the first line or first thing until a comma */
+ if ((line = strsep(&p, "\n,")) == NULL) {
+ line = p;
+ p = NULL;
+ }
+
+ esp_print_decode_onesecret(ndo, line, "cmdline", 0);
+ }
+
+ ndo->ndo_espsecret = NULL;
+}
+
+#endif
+
+#ifdef HAVE_LIBCRYPTO
+#define USED_IF_LIBCRYPTO
+#else
+#define USED_IF_LIBCRYPTO _U_
+#endif
+
+#ifdef HAVE_LIBCRYPTO
+DIAG_OFF_DEPRECATION
+#endif
+void
+esp_print(netdissect_options *ndo,
+ const u_char *bp, u_int length,
+ const u_char *bp2 USED_IF_LIBCRYPTO,
+ u_int ver USED_IF_LIBCRYPTO,
+ int fragmented USED_IF_LIBCRYPTO,
+ u_int ttl_hl USED_IF_LIBCRYPTO)
+{
+ const struct newesp *esp;
+ const u_char *ep;
+#ifdef HAVE_LIBCRYPTO
+ const struct ip *ip;
+ struct sa_list *sa = NULL;
+ const struct ip6_hdr *ip6 = NULL;
+ const u_char *iv;
+ u_int ivlen;
+ u_int payloadlen;
+ const u_char *ct;
+ u_char *pt;
+ u_int padlen;
+ u_int nh;
+#endif
+
+ ndo->ndo_protocol = "esp";
+ esp = (const struct newesp *)bp;
+
+ /* 'ep' points to the end of available data. */
+ ep = ndo->ndo_snapend;
+
+ if ((const u_char *)(esp + 1) >= ep) {
+ nd_print_trunc(ndo);
+ return;
+ }
+ ND_PRINT("ESP(spi=0x%08x", GET_BE_U_4(esp->esp_spi));
+ ND_PRINT(",seq=0x%x)", GET_BE_U_4(esp->esp_seq));
+ ND_PRINT(", length %u", length);
+
+#ifdef HAVE_LIBCRYPTO
+ /* initialize SAs */
+ if (ndo->ndo_sa_list_head == NULL) {
+ if (!ndo->ndo_espsecret)
+ return;
+
+ esp_decodesecret_print(ndo);
+ }
+
+ if (ndo->ndo_sa_list_head == NULL)
+ return;
+
+ ip = (const struct ip *)bp2;
+ switch (ver) {
+ case 6:
+ ip6 = (const struct ip6_hdr *)bp2;
+ /* we do not attempt to decrypt jumbograms */
+ if (!GET_BE_U_2(ip6->ip6_plen))
+ return;
+ /* XXX - check whether it's fragmented? */
+ /* if we can't get nexthdr, we do not need to decrypt it */
+
+ /* see if we can find the SA, and if so, decode it */
+ for (sa = ndo->ndo_sa_list_head; sa != NULL; sa = sa->next) {
+ if (sa->spi == GET_BE_U_4(esp->esp_spi) &&
+ sa->daddr_version == 6 &&
+ UNALIGNED_MEMCMP(&sa->daddr.in6, &ip6->ip6_dst,
+ sizeof(nd_ipv6)) == 0) {
+ break;
+ }
+ }
+ break;
+ case 4:
+ /* nexthdr & padding are in the last fragment */
+ if (fragmented)
+ return;
+
+ /* see if we can find the SA, and if so, decode it */
+ for (sa = ndo->ndo_sa_list_head; sa != NULL; sa = sa->next) {
+ if (sa->spi == GET_BE_U_4(esp->esp_spi) &&
+ sa->daddr_version == 4 &&
+ UNALIGNED_MEMCMP(&sa->daddr.in4, &ip->ip_dst,
+ sizeof(nd_ipv4)) == 0) {
+ break;
+ }
+ }
+ break;
+ default:
+ return;
+ }
+
+ /* if we didn't find the specific one, then look for
+ * an unspecified one.
+ */
+ if (sa == NULL)
+ sa = ndo->ndo_sa_default;
+
+ /* if not found fail */
+ if (sa == NULL)
+ return;
+
+ /* pointer to the IV, if there is one */
+ iv = (const u_char *)(esp + 1) + 0;
+ /* length of the IV, if there is one; 0, if there isn't */
+ ivlen = sa->ivlen;
+
+ /*
+ * Get a pointer to the ciphertext.
+ *
+ * p points to the beginning of the payload, i.e. to the
+ * initialization vector, so if we skip past the initialization
+ * vector, it points to the beginning of the ciphertext.
+ */
+ ct = iv + ivlen;
+
+ /*
+ * Make sure the authentication data/integrity check value length
+ * isn't bigger than the total amount of data available after
+ * the ESP header and initialization vector is removed and,
+ * if not, slice the authentication data/ICV off.
+ */
+ if (ep - ct < sa->authlen) {
+ nd_print_trunc(ndo);
+ return;
+ }
+ ep = ep - sa->authlen;
+
+ /*
+ * Calculate the length of the ciphertext. ep points to
+ * the beginning of the authentication data/integrity check
+ * value, i.e. right past the end of the ciphertext;
+ */
+ payloadlen = ep - ct;
+
+ if (sa->evp == NULL)
+ return;
+
+ /*
+ * If the next header value is past the end of the available
+ * data, we won't be able to fetch it once we've decrypted
+ * the ciphertext, so there's no point in decrypting the data.
+ *
+ * Report it as truncation.
+ */
+ if (!ND_TTEST_1(ep - 1)) {
+ nd_print_trunc(ndo);
+ return;
+ }
+
+ pt = do_decrypt(ndo, __func__, sa, iv, ct, payloadlen);
+ if (pt == NULL)
+ return;
+
+ /*
+ * Switch to the output buffer for dissection, and
+ * save it on the buffer stack so it can be freed.
+ */
+ if (!nd_push_buffer(ndo, pt, pt, payloadlen)) {
+ free(pt);
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: can't push buffer on buffer stack", __func__);
+ }
+
+ /*
+ * Sanity check for pad length; if it, plus 2 for the pad
+ * length and next header fields, is bigger than the ciphertext
+ * length (which is also the plaintext length), it's too big.
+ *
+ * XXX - the check can fail if the packet is corrupt *or* if
+ * it was not decrypted with the correct key, so that the
+ * "plaintext" is not what was being sent.
+ */
+ padlen = GET_U_1(pt + payloadlen - 2);
+ if (padlen + 2 > payloadlen) {
+ nd_print_trunc(ndo);
+ return;
+ }
+
+ /* Get the next header */
+ nh = GET_U_1(pt + payloadlen - 1);
+
+ ND_PRINT(": ");
+
+ /*
+ * Don't put padding + padding length(1 byte) + next header(1 byte)
+ * in the buffer because they are not part of the plaintext to decode.
+ */
+ if (!nd_push_snaplen(ndo, pt, payloadlen - (padlen + 2))) {
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: can't push snaplen on buffer stack", __func__);
+ }
+
+ /* Now dissect the plaintext. */
+ ip_demux_print(ndo, pt, payloadlen - (padlen + 2), ver, fragmented,
+ ttl_hl, nh, bp2);
+
+ /* Pop the buffer, freeing it. */
+ nd_pop_packet_info(ndo);
+ /* Pop the nd_push_snaplen */
+ nd_pop_packet_info(ndo);
+#endif
+}
+#ifdef HAVE_LIBCRYPTO
+DIAG_ON_DEPRECATION
+#endif
diff --git a/print-ether.c b/print-ether.c
new file mode 100644
index 0000000..cd623f9
--- /dev/null
+++ b/print-ether.c
@@ -0,0 +1,665 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Ethernet printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "ethertype.h"
+
+/*
+ * Structure of an Ethernet header.
+ */
+struct ether_header {
+ nd_mac_addr ether_dhost;
+ nd_mac_addr ether_shost;
+ nd_uint16_t ether_length_type;
+};
+
+/*
+ * Length of an Ethernet header; note that some compilers may pad
+ * "struct ether_header" to a multiple of 4 bytes, for example, so
+ * "sizeof (struct ether_header)" may not give the right answer.
+ */
+#define ETHER_HDRLEN 14
+
+const struct tok ethertype_values[] = {
+ { ETHERTYPE_IP, "IPv4" },
+ { ETHERTYPE_MPLS, "MPLS unicast" },
+ { ETHERTYPE_MPLS_MULTI, "MPLS multicast" },
+ { ETHERTYPE_IPV6, "IPv6" },
+ { ETHERTYPE_8021Q, "802.1Q" },
+ { ETHERTYPE_8021Q9100, "802.1Q-9100" },
+ { ETHERTYPE_8021QinQ, "802.1Q-QinQ" },
+ { ETHERTYPE_8021Q9200, "802.1Q-9200" },
+ { ETHERTYPE_MACSEC, "802.1AE MACsec" },
+ { ETHERTYPE_VMAN, "VMAN" },
+ { ETHERTYPE_PUP, "PUP" },
+ { ETHERTYPE_ARP, "ARP"},
+ { ETHERTYPE_REVARP, "Reverse ARP"},
+ { ETHERTYPE_NS, "NS" },
+ { ETHERTYPE_SPRITE, "Sprite" },
+ { ETHERTYPE_TRAIL, "Trail" },
+ { ETHERTYPE_MOPDL, "MOP DL" },
+ { ETHERTYPE_MOPRC, "MOP RC" },
+ { ETHERTYPE_DN, "DN" },
+ { ETHERTYPE_LAT, "LAT" },
+ { ETHERTYPE_SCA, "SCA" },
+ { ETHERTYPE_TEB, "TEB" },
+ { ETHERTYPE_LANBRIDGE, "Lanbridge" },
+ { ETHERTYPE_DECDNS, "DEC DNS" },
+ { ETHERTYPE_DECDTS, "DEC DTS" },
+ { ETHERTYPE_VEXP, "VEXP" },
+ { ETHERTYPE_VPROD, "VPROD" },
+ { ETHERTYPE_ATALK, "Appletalk" },
+ { ETHERTYPE_AARP, "Appletalk ARP" },
+ { ETHERTYPE_IPX, "IPX" },
+ { ETHERTYPE_PPP, "PPP" },
+ { ETHERTYPE_MPCP, "MPCP" },
+ { ETHERTYPE_SLOW, "Slow Protocols" },
+ { ETHERTYPE_PPPOED, "PPPoE D" },
+ { ETHERTYPE_PPPOES, "PPPoE S" },
+ { ETHERTYPE_EAPOL, "EAPOL" },
+ { ETHERTYPE_REALTEK, "Realtek protocols" },
+ { ETHERTYPE_MS_NLB_HB, "MS NLB heartbeat" },
+ { ETHERTYPE_JUMBO, "Jumbo" },
+ { ETHERTYPE_NSH, "NSH" },
+ { ETHERTYPE_LOOPBACK, "Loopback" },
+ { ETHERTYPE_ISO, "OSI" },
+ { ETHERTYPE_GRE_ISO, "GRE-OSI" },
+ { ETHERTYPE_CFM_OLD, "CFM (old)" },
+ { ETHERTYPE_CFM, "CFM" },
+ { ETHERTYPE_IEEE1905_1, "IEEE1905.1" },
+ { ETHERTYPE_LLDP, "LLDP" },
+ { ETHERTYPE_TIPC, "TIPC"},
+ { ETHERTYPE_GEONET_OLD, "GeoNet (old)"},
+ { ETHERTYPE_GEONET, "GeoNet"},
+ { ETHERTYPE_CALM_FAST, "CALM FAST"},
+ { ETHERTYPE_AOE, "AoE" },
+ { ETHERTYPE_PTP, "PTP" },
+ { ETHERTYPE_ARISTA, "Arista Vendor Specific Protocol" },
+ { 0, NULL}
+};
+
+static void
+ether_addresses_print(netdissect_options *ndo, const u_char *src,
+ const u_char *dst)
+{
+ ND_PRINT("%s > %s, ",
+ GET_ETHERADDR_STRING(src), GET_ETHERADDR_STRING(dst));
+}
+
+static void
+ether_type_print(netdissect_options *ndo, uint16_t type)
+{
+ if (!ndo->ndo_qflag)
+ ND_PRINT("ethertype %s (0x%04x)",
+ tok2str(ethertype_values, "Unknown", type), type);
+ else
+ ND_PRINT("%s",
+ tok2str(ethertype_values, "Unknown Ethertype (0x%04x)", type));
+}
+
+/*
+ * Common code for printing Ethernet frames.
+ *
+ * It can handle Ethernet headers with extra tag information inserted
+ * after the destination and source addresses, as is inserted by some
+ * switch chips, and extra encapsulation header information before
+ * printing Ethernet header information (such as a LANE ID for ATM LANE).
+ */
+static u_int
+ether_common_print(netdissect_options *ndo, const u_char *p, u_int length,
+ u_int caplen,
+ void (*print_switch_tag)(netdissect_options *ndo, const u_char *),
+ u_int switch_tag_len,
+ void (*print_encap_header)(netdissect_options *ndo, const u_char *),
+ const u_char *encap_header_arg)
+{
+ const struct ether_header *ehp;
+ u_int orig_length;
+ u_int hdrlen;
+ u_short length_type;
+ int printed_length;
+ int llc_hdrlen;
+ struct lladdr_info src, dst;
+
+ if (length < caplen) {
+ ND_PRINT("[length %u < caplen %u]", length, caplen);
+ nd_print_invalid(ndo);
+ return length;
+ }
+ if (caplen < ETHER_HDRLEN + switch_tag_len) {
+ nd_print_trunc(ndo);
+ return caplen;
+ }
+
+ if (print_encap_header != NULL)
+ (*print_encap_header)(ndo, encap_header_arg);
+
+ orig_length = length;
+
+ /*
+ * Get the source and destination addresses, skip past them,
+ * and print them if we're printing the link-layer header.
+ */
+ ehp = (const struct ether_header *)p;
+ src.addr = ehp->ether_shost;
+ src.addr_string = etheraddr_string;
+ dst.addr = ehp->ether_dhost;
+ dst.addr_string = etheraddr_string;
+
+ length -= 2*MAC_ADDR_LEN;
+ caplen -= 2*MAC_ADDR_LEN;
+ p += 2*MAC_ADDR_LEN;
+ hdrlen = 2*MAC_ADDR_LEN;
+
+ if (ndo->ndo_eflag)
+ ether_addresses_print(ndo, src.addr, dst.addr);
+
+ /*
+ * Print the switch tag, if we have one, and skip past it.
+ */
+ if (print_switch_tag != NULL)
+ (*print_switch_tag)(ndo, p);
+
+ length -= switch_tag_len;
+ caplen -= switch_tag_len;
+ p += switch_tag_len;
+ hdrlen += switch_tag_len;
+
+ /*
+ * Get the length/type field, skip past it, and print it
+ * if we're printing the link-layer header.
+ */
+recurse:
+ length_type = GET_BE_U_2(p);
+
+ length -= 2;
+ caplen -= 2;
+ p += 2;
+ hdrlen += 2;
+
+ /*
+ * Process 802.1AE MACsec headers.
+ */
+ printed_length = 0;
+ if (length_type == ETHERTYPE_MACSEC) {
+ /*
+ * MACsec, aka IEEE 802.1AE-2006
+ * Print the header, and try to print the payload if it's not encrypted
+ */
+ if (ndo->ndo_eflag) {
+ ether_type_print(ndo, length_type);
+ ND_PRINT(", length %u: ", orig_length);
+ printed_length = 1;
+ }
+
+ int ret = macsec_print(ndo, &p, &length, &caplen, &hdrlen,
+ &src, &dst);
+
+ if (ret == 0) {
+ /* Payload is encrypted; print it as raw data. */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ return hdrlen;
+ } else if (ret > 0) {
+ /* Problem printing the header; just quit. */
+ return ret;
+ } else {
+ /*
+ * Keep processing type/length fields.
+ */
+ length_type = GET_BE_U_2(p);
+
+ ND_LCHECK_U(caplen, 2);
+ length -= 2;
+ caplen -= 2;
+ p += 2;
+ hdrlen += 2;
+ }
+ }
+
+ /*
+ * Process VLAN tag types.
+ */
+ while (length_type == ETHERTYPE_8021Q ||
+ length_type == ETHERTYPE_8021Q9100 ||
+ length_type == ETHERTYPE_8021Q9200 ||
+ length_type == ETHERTYPE_8021QinQ) {
+ /*
+ * It has a VLAN tag.
+ * Print VLAN information, and then go back and process
+ * the enclosed type field.
+ */
+ if (caplen < 4) {
+ ndo->ndo_protocol = "vlan";
+ nd_print_trunc(ndo);
+ return hdrlen + caplen;
+ }
+ if (length < 4) {
+ ndo->ndo_protocol = "vlan";
+ nd_print_trunc(ndo);
+ return hdrlen + length;
+ }
+ if (ndo->ndo_eflag) {
+ uint16_t tag = GET_BE_U_2(p);
+
+ ether_type_print(ndo, length_type);
+ if (!printed_length) {
+ ND_PRINT(", length %u: ", orig_length);
+ printed_length = 1;
+ } else
+ ND_PRINT(", ");
+ ND_PRINT("%s, ", ieee8021q_tci_string(tag));
+ }
+
+ length_type = GET_BE_U_2(p + 2);
+ p += 4;
+ length -= 4;
+ caplen -= 4;
+ hdrlen += 4;
+ }
+
+ /*
+ * We now have the final length/type field.
+ */
+ if (length_type <= MAX_ETHERNET_LENGTH_VAL) {
+ /*
+ * It's a length field, containing the length of the
+ * remaining payload; use it as such, as long as
+ * it's not too large (bigger than the actual payload).
+ */
+ if (length_type < length) {
+ length = length_type;
+ if (caplen > length)
+ caplen = length;
+ }
+
+ /*
+ * Cut off the snapshot length to the end of the
+ * payload.
+ */
+ if (!nd_push_snaplen(ndo, p, length)) {
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: can't push snaplen on buffer stack", __func__);
+ }
+
+ if (ndo->ndo_eflag) {
+ ND_PRINT("802.3");
+ if (!printed_length)
+ ND_PRINT(", length %u: ", length);
+ }
+
+ /*
+ * An LLC header follows the length. Print that and
+ * higher layers.
+ */
+ llc_hdrlen = llc_print(ndo, p, length, caplen, &src, &dst);
+ if (llc_hdrlen < 0) {
+ /* packet type not known, print raw packet */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ llc_hdrlen = -llc_hdrlen;
+ }
+ hdrlen += llc_hdrlen;
+ nd_pop_packet_info(ndo);
+ } else if (length_type == ETHERTYPE_JUMBO) {
+ /*
+ * It's a type field, with the type for Alteon jumbo frames.
+ * See
+ *
+ * https://tools.ietf.org/html/draft-ietf-isis-ext-eth-01
+ *
+ * which indicates that, following the type field,
+ * there's an LLC header and payload.
+ */
+ /* Try to print the LLC-layer header & higher layers */
+ llc_hdrlen = llc_print(ndo, p, length, caplen, &src, &dst);
+ if (llc_hdrlen < 0) {
+ /* packet type not known, print raw packet */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ llc_hdrlen = -llc_hdrlen;
+ }
+ hdrlen += llc_hdrlen;
+ } else if (length_type == ETHERTYPE_ARISTA) {
+ if (caplen < 2) {
+ ND_PRINT("[|arista]");
+ return hdrlen + caplen;
+ }
+ if (length < 2) {
+ ND_PRINT("[|arista]");
+ return hdrlen + length;
+ }
+ ether_type_print(ndo, length_type);
+ ND_PRINT(", length %u: ", orig_length);
+ int bytesConsumed = arista_ethertype_print(ndo, p, length);
+ if (bytesConsumed > 0) {
+ p += bytesConsumed;
+ length -= bytesConsumed;
+ caplen -= bytesConsumed;
+ hdrlen += bytesConsumed;
+ goto recurse;
+ } else {
+ /* subtype/version not known, print raw packet */
+ if (!ndo->ndo_eflag && length_type > MAX_ETHERNET_LENGTH_VAL) {
+ ether_addresses_print(ndo, src.addr, dst.addr);
+ ether_type_print(ndo, length_type);
+ ND_PRINT(", length %u: ", orig_length);
+ }
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ }
+ } else {
+ /*
+ * It's a type field with some other value.
+ */
+ if (ndo->ndo_eflag) {
+ ether_type_print(ndo, length_type);
+ if (!printed_length)
+ ND_PRINT(", length %u: ", orig_length);
+ else
+ ND_PRINT(", ");
+ }
+ if (ethertype_print(ndo, length_type, p, length, caplen, &src, &dst) == 0) {
+ /* type not known, print raw packet */
+ if (!ndo->ndo_eflag) {
+ /*
+ * We didn't print the full link-layer
+ * header, as -e wasn't specified, so
+ * print only the source and destination
+ * MAC addresses and the final Ethernet
+ * type.
+ */
+ ether_addresses_print(ndo, src.addr, dst.addr);
+ ether_type_print(ndo, length_type);
+ ND_PRINT(", length %u: ", orig_length);
+ }
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ }
+ }
+invalid:
+ return hdrlen;
+}
+
+/*
+ * Print an Ethernet frame while specyfing a non-standard Ethernet header
+ * length.
+ * This might be encapsulated within another frame; we might be passed
+ * a pointer to a function that can print header information for that
+ * frame's protocol, and an argument to pass to that function.
+ *
+ * FIXME: caplen can and should be derived from ndo->ndo_snapend and p.
+ */
+u_int
+ether_switch_tag_print(netdissect_options *ndo, const u_char *p, u_int length,
+ u_int caplen,
+ void (*print_switch_tag)(netdissect_options *, const u_char *),
+ u_int switch_tag_len)
+{
+ return ether_common_print(ndo, p, length, caplen, print_switch_tag,
+ switch_tag_len, NULL, NULL);
+}
+
+/*
+ * Print an Ethernet frame.
+ * This might be encapsulated within another frame; we might be passed
+ * a pointer to a function that can print header information for that
+ * frame's protocol, and an argument to pass to that function.
+ *
+ * FIXME: caplen can and should be derived from ndo->ndo_snapend and p.
+ */
+u_int
+ether_print(netdissect_options *ndo,
+ const u_char *p, u_int length, u_int caplen,
+ void (*print_encap_header)(netdissect_options *ndo, const u_char *),
+ const u_char *encap_header_arg)
+{
+ ndo->ndo_protocol = "ether";
+ return ether_common_print(ndo, p, length, caplen, NULL, 0,
+ print_encap_header, encap_header_arg);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->len' is the length
+ * of the packet off the wire, and 'h->caplen' is the number
+ * of bytes actually captured.
+ */
+void
+ether_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
+ const u_char *p)
+{
+ ndo->ndo_protocol = "ether";
+ ndo->ndo_ll_hdr_len +=
+ ether_print(ndo, p, h->len, h->caplen, NULL, NULL);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->len' is the length
+ * of the packet off the wire, and 'h->caplen' is the number
+ * of bytes actually captured.
+ *
+ * This is for DLT_NETANALYZER, which has a 4-byte pseudo-header
+ * before the Ethernet header.
+ */
+void
+netanalyzer_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
+ const u_char *p)
+{
+ /*
+ * Fail if we don't have enough data for the Hilscher pseudo-header.
+ */
+ ndo->ndo_protocol = "netanalyzer";
+ ND_TCHECK_LEN(p, 4);
+
+ /* Skip the pseudo-header. */
+ ndo->ndo_ll_hdr_len += 4;
+ ndo->ndo_ll_hdr_len +=
+ ether_print(ndo, p + 4, h->len - 4, h->caplen - 4, NULL, NULL);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->len' is the length
+ * of the packet off the wire, and 'h->caplen' is the number
+ * of bytes actually captured.
+ *
+ * This is for DLT_NETANALYZER_TRANSPARENT, which has a 4-byte
+ * pseudo-header, a 7-byte Ethernet preamble, and a 1-byte Ethernet SOF
+ * before the Ethernet header.
+ */
+void
+netanalyzer_transparent_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h,
+ const u_char *p)
+{
+ /*
+ * Fail if we don't have enough data for the Hilscher pseudo-header,
+ * preamble, and SOF.
+ */
+ ndo->ndo_protocol = "netanalyzer_transparent";
+ ND_TCHECK_LEN(p, 12);
+
+ /* Skip the pseudo-header, preamble, and SOF. */
+ ndo->ndo_ll_hdr_len += 12;
+ ndo->ndo_ll_hdr_len +=
+ ether_print(ndo, p + 12, h->len - 12, h->caplen - 12, NULL, NULL);
+}
+
+/*
+ * Prints the packet payload, given an Ethernet type code for the payload's
+ * protocol.
+ *
+ * Returns non-zero if it can do so, zero if the ethertype is unknown.
+ */
+
+int
+ethertype_print(netdissect_options *ndo,
+ u_short ether_type, const u_char *p,
+ u_int length, u_int caplen,
+ const struct lladdr_info *src, const struct lladdr_info *dst)
+{
+ switch (ether_type) {
+
+ case ETHERTYPE_IP:
+ ip_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_IPV6:
+ ip6_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_ARP:
+ case ETHERTYPE_REVARP:
+ arp_print(ndo, p, length, caplen);
+ return (1);
+
+ case ETHERTYPE_DN:
+ decnet_print(ndo, p, length, caplen);
+ return (1);
+
+ case ETHERTYPE_ATALK:
+ if (ndo->ndo_vflag)
+ ND_PRINT("et1 ");
+ atalk_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_AARP:
+ aarp_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_IPX:
+ ND_PRINT("(NOV-ETHII) ");
+ ipx_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_ISO:
+ if (length == 0 || caplen == 0) {
+ ndo->ndo_protocol = "isoclns";
+ nd_print_trunc(ndo);
+ return (1);
+ }
+ /* At least one byte is required */
+ /* FIXME: Reference for this byte? */
+ ND_TCHECK_LEN(p, 1);
+ isoclns_print(ndo, p + 1, length - 1);
+ return(1);
+
+ case ETHERTYPE_PPPOED:
+ case ETHERTYPE_PPPOES:
+ case ETHERTYPE_PPPOED2:
+ case ETHERTYPE_PPPOES2:
+ pppoe_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_EAPOL:
+ eapol_print(ndo, p);
+ return (1);
+
+ case ETHERTYPE_REALTEK:
+ rtl_print(ndo, p, length, src, dst);
+ return (1);
+
+ case ETHERTYPE_PPP:
+ if (length) {
+ ND_PRINT(": ");
+ ppp_print(ndo, p, length);
+ }
+ return (1);
+
+ case ETHERTYPE_MPCP:
+ mpcp_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_SLOW:
+ slow_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_CFM:
+ case ETHERTYPE_CFM_OLD:
+ cfm_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_LLDP:
+ lldp_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_NSH:
+ nsh_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_LOOPBACK:
+ loopback_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_MPLS:
+ case ETHERTYPE_MPLS_MULTI:
+ mpls_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_TIPC:
+ tipc_print(ndo, p, length, caplen);
+ return (1);
+
+ case ETHERTYPE_MS_NLB_HB:
+ msnlb_print(ndo, p);
+ return (1);
+
+ case ETHERTYPE_GEONET_OLD:
+ case ETHERTYPE_GEONET:
+ geonet_print(ndo, p, length, src);
+ return (1);
+
+ case ETHERTYPE_CALM_FAST:
+ calm_fast_print(ndo, p, length, src);
+ return (1);
+
+ case ETHERTYPE_AOE:
+ aoe_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_PTP:
+ ptp_print(ndo, p, length);
+ return (1);
+
+ case ETHERTYPE_LAT:
+ case ETHERTYPE_SCA:
+ case ETHERTYPE_MOPRC:
+ case ETHERTYPE_MOPDL:
+ case ETHERTYPE_IEEE1905_1:
+ /* default_print for now */
+ default:
+ return (0);
+ }
+}
diff --git a/print-fddi.c b/print-fddi.c
new file mode 100644
index 0000000..fb8d3ed
--- /dev/null
+++ b/print-fddi.c
@@ -0,0 +1,350 @@
+/*
+ * Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Fiber Distributed Data Interface (FDDI) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+/*
+ * Based on Ultrix if_fddi.h
+ */
+
+struct fddi_header {
+ nd_uint8_t fddi_fc; /* frame control */
+ nd_mac_addr fddi_dhost;
+ nd_mac_addr fddi_shost;
+};
+
+/*
+ * Length of an FDDI header; note that some compilers may pad
+ * "struct fddi_header" to a multiple of 4 bytes, for example, so
+ * "sizeof (struct fddi_header)" may not give the right
+ * answer.
+ */
+#define FDDI_HDRLEN 13
+
+/* Useful values for fddi_fc (frame control) field */
+
+/*
+ * FDDI Frame Control bits
+ */
+#define FDDIFC_C 0x80 /* Class bit */
+#define FDDIFC_L 0x40 /* Address length bit */
+#define FDDIFC_F 0x30 /* Frame format bits */
+#define FDDIFC_Z 0x0f /* Control bits */
+
+/*
+ * FDDI Frame Control values. (48-bit addressing only).
+ */
+#define FDDIFC_VOID 0x40 /* Void frame */
+#define FDDIFC_NRT 0x80 /* Nonrestricted token */
+#define FDDIFC_RT 0xc0 /* Restricted token */
+#define FDDIFC_SMT_INFO 0x41 /* SMT Info */
+#define FDDIFC_SMT_NSA 0x4F /* SMT Next station adrs */
+#define FDDIFC_MAC_BEACON 0xc2 /* MAC Beacon frame */
+#define FDDIFC_MAC_CLAIM 0xc3 /* MAC Claim frame */
+#define FDDIFC_LLC_ASYNC 0x50 /* Async. LLC frame */
+#define FDDIFC_LLC_SYNC 0xd0 /* Sync. LLC frame */
+#define FDDIFC_IMP_ASYNC 0x60 /* Implementor Async. */
+#define FDDIFC_IMP_SYNC 0xe0 /* Implementor Synch. */
+#define FDDIFC_SMT 0x40 /* SMT frame */
+#define FDDIFC_MAC 0xc0 /* MAC frame */
+
+#define FDDIFC_CLFF 0xF0 /* Class/Length/Format bits */
+#define FDDIFC_ZZZZ 0x0F /* Control bits */
+
+/*
+ * Some FDDI interfaces use bit-swapped addresses.
+ */
+#if defined(ultrix) || defined(__alpha) || defined(__bsdi) || defined(__NetBSD__) || defined(__linux__)
+static int fddi_bitswap = 0;
+#else
+static int fddi_bitswap = 1;
+#endif
+
+/*
+ * FDDI support for tcpdump, by Jeffrey Mogul [DECWRL], June 1992
+ *
+ * Based in part on code by Van Jacobson, which bears this note:
+ *
+ * NOTE: This is a very preliminary hack for FDDI support.
+ * There are all sorts of wired in constants & nothing (yet)
+ * to print SMT packets as anything other than hex dumps.
+ * Most of the necessary changes are waiting on my redoing
+ * the "header" that a kernel fddi driver supplies to bpf: I
+ * want it to look like one byte of 'direction' (0 or 1
+ * depending on whether the packet was inbound or outbound),
+ * two bytes of system/driver dependent data (anything an
+ * implementor thinks would be useful to filter on and/or
+ * save per-packet, then the real 21-byte FDDI header.
+ * Steve McCanne & I have also talked about adding the
+ * 'direction' byte to all bpf headers (e.g., in the two
+ * bytes of padding on an ethernet header). It's not clear
+ * we could do this in a backwards compatible way & we hate
+ * the idea of an incompatible bpf change. Discussions are
+ * proceeding.
+ *
+ * Also, to really support FDDI (and better support 802.2
+ * over ethernet) we really need to re-think the rather simple
+ * minded assumptions about fixed length & fixed format link
+ * level headers made in gencode.c. One day...
+ *
+ * - vj
+ */
+
+static const u_char fddi_bit_swap[] = {
+ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
+ 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
+ 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
+ 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
+ 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
+ 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
+ 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
+ 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
+ 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
+ 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
+ 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
+ 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
+ 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
+ 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
+ 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
+ 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
+ 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
+ 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
+ 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
+ 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
+ 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
+ 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
+ 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
+ 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
+ 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
+ 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
+ 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
+ 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
+ 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
+ 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
+ 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
+ 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
+};
+
+/*
+ * Print FDDI frame-control bits
+ */
+static void
+print_fddi_fc(netdissect_options *ndo, u_char fc)
+{
+ switch (fc) {
+
+ case FDDIFC_VOID: /* Void frame */
+ ND_PRINT("void ");
+ break;
+
+ case FDDIFC_NRT: /* Nonrestricted token */
+ ND_PRINT("nrt ");
+ break;
+
+ case FDDIFC_RT: /* Restricted token */
+ ND_PRINT("rt ");
+ break;
+
+ case FDDIFC_SMT_INFO: /* SMT Info */
+ ND_PRINT("info ");
+ break;
+
+ case FDDIFC_SMT_NSA: /* SMT Next station adrs */
+ ND_PRINT("nsa ");
+ break;
+
+ case FDDIFC_MAC_BEACON: /* MAC Beacon frame */
+ ND_PRINT("beacon ");
+ break;
+
+ case FDDIFC_MAC_CLAIM: /* MAC Claim frame */
+ ND_PRINT("claim ");
+ break;
+
+ default:
+ switch (fc & FDDIFC_CLFF) {
+
+ case FDDIFC_MAC:
+ ND_PRINT("mac%1x ", fc & FDDIFC_ZZZZ);
+ break;
+
+ case FDDIFC_SMT:
+ ND_PRINT("smt%1x ", fc & FDDIFC_ZZZZ);
+ break;
+
+ case FDDIFC_LLC_ASYNC:
+ ND_PRINT("async%1x ", fc & FDDIFC_ZZZZ);
+ break;
+
+ case FDDIFC_LLC_SYNC:
+ ND_PRINT("sync%1x ", fc & FDDIFC_ZZZZ);
+ break;
+
+ case FDDIFC_IMP_ASYNC:
+ ND_PRINT("imp_async%1x ", fc & FDDIFC_ZZZZ);
+ break;
+
+ case FDDIFC_IMP_SYNC:
+ ND_PRINT("imp_sync%1x ", fc & FDDIFC_ZZZZ);
+ break;
+
+ default:
+ ND_PRINT("%02x ", fc);
+ break;
+ }
+ }
+}
+
+/* Extract src, dst addresses */
+static void
+extract_fddi_addrs(const struct fddi_header *fddip, char *fsrc, char *fdst)
+{
+ int i;
+
+ if (fddi_bitswap) {
+ /*
+ * bit-swap the fddi addresses (isn't the IEEE standards
+ * process wonderful!) then convert them to names.
+ */
+ for (i = 0; i < 6; ++i)
+ fdst[i] = fddi_bit_swap[fddip->fddi_dhost[i]];
+ for (i = 0; i < 6; ++i)
+ fsrc[i] = fddi_bit_swap[fddip->fddi_shost[i]];
+ }
+ else {
+ memcpy(fdst, (const char *)fddip->fddi_dhost, 6);
+ memcpy(fsrc, (const char *)fddip->fddi_shost, 6);
+ }
+}
+
+/*
+ * Print the FDDI MAC header
+ */
+static void
+fddi_hdr_print(netdissect_options *ndo,
+ const struct fddi_header *fddip, u_int length,
+ const u_char *fsrc, const u_char *fdst)
+{
+ const char *srcname, *dstname;
+
+ srcname = etheraddr_string(ndo, fsrc);
+ dstname = etheraddr_string(ndo, fdst);
+
+ if (!ndo->ndo_qflag)
+ print_fddi_fc(ndo, GET_U_1(fddip->fddi_fc));
+ ND_PRINT("%s > %s, length %u: ",
+ srcname, dstname,
+ length);
+}
+
+static void
+fddi_smt_print(netdissect_options *ndo, const u_char *p _U_, u_int length _U_)
+{
+ ND_PRINT("<SMT printer not yet implemented>");
+}
+
+u_int
+fddi_print(netdissect_options *ndo, const u_char *p, u_int length, u_int caplen)
+{
+ const struct fddi_header *fddip = (const struct fddi_header *)p;
+ uint8_t fc;
+ nd_mac_addr srcmac, dstmac;
+ struct lladdr_info src, dst;
+ int llc_hdrlen;
+
+ ndo->ndo_protocol = "fddi";
+ if (caplen < FDDI_HDRLEN) {
+ nd_print_trunc(ndo);
+ return (caplen);
+ }
+
+ fc = GET_U_1(fddip->fddi_fc);
+
+ /*
+ * Get the FDDI addresses into a canonical form
+ */
+ extract_fddi_addrs(fddip, (char *)srcmac, (char *)dstmac);
+
+ if (ndo->ndo_eflag)
+ fddi_hdr_print(ndo, fddip, length, srcmac, dstmac);
+
+ src.addr = srcmac;
+ src.addr_string = etheraddr_string;
+ dst.addr = dstmac;
+ dst.addr_string = etheraddr_string;
+
+ /* Skip over FDDI MAC header */
+ length -= FDDI_HDRLEN;
+ p += FDDI_HDRLEN;
+ caplen -= FDDI_HDRLEN;
+
+ /* Frame Control field determines interpretation of packet */
+ if ((fc & FDDIFC_CLFF) == FDDIFC_LLC_ASYNC) {
+ /* Try to print the LLC-layer header & higher layers */
+ llc_hdrlen = llc_print(ndo, p, length, caplen, &src, &dst);
+ if (llc_hdrlen < 0) {
+ /*
+ * Some kinds of LLC packet we cannot
+ * handle intelligently
+ */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ llc_hdrlen = -llc_hdrlen;
+ }
+ } else if ((fc & FDDIFC_CLFF) == FDDIFC_SMT) {
+ fddi_smt_print(ndo, p, caplen);
+ llc_hdrlen = 0;
+ } else {
+ /* Some kinds of FDDI packet we cannot handle intelligently */
+ if (!ndo->ndo_eflag)
+ fddi_hdr_print(ndo, fddip, length + FDDI_HDRLEN, srcmac,
+ dstmac);
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ llc_hdrlen = 0;
+ }
+ return (FDDI_HDRLEN + llc_hdrlen);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the FDDI header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+fddi_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ ndo->ndo_protocol = "fddi";
+ ndo->ndo_ll_hdr_len += fddi_print(ndo, p, h->len, h->caplen);
+}
diff --git a/print-forces.c b/print-forces.c
new file mode 100644
index 0000000..1c7beb6
--- /dev/null
+++ b/print-forces.c
@@ -0,0 +1,1715 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Copyright (c) 2009 Mojatatu Networks, Inc
+ *
+ */
+
+/* \summary: Forwarding and Control Element Separation (ForCES) Protocol printer */
+
+/* specification: RFC 5810 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+
+#define ForCES_VERS 1
+#define ForCES_HDRL 24
+#define ForCES_ALNL 4U
+#define TLV_HDRL 4
+#define ILV_HDRL 8
+
+#define TOM_RSVD 0x0
+#define TOM_ASSNSETUP 0x1
+#define TOM_ASSNTEARD 0x2
+#define TOM_CONFIG 0x3
+#define TOM_QUERY 0x4
+#define TOM_EVENTNOT 0x5
+#define TOM_PKTREDIR 0x6
+#define TOM_HEARTBT 0x0F
+#define TOM_ASSNSETREP 0x11
+#define TOM_CONFIGREP 0x13
+#define TOM_QUERYREP 0x14
+
+/*
+ * tom_h Flags: resv1(8b):maxtlvs(4b):resv2(2b):mintlv(2b)
+*/
+#define ZERO_TTLV 0x01
+#define ZERO_MORE_TTLV 0x02
+#define ONE_MORE_TTLV 0x04
+#define ZERO_TLV 0x00
+#define ONE_TLV 0x10
+#define TWO_TLV 0x20
+#define MAX_TLV 0xF0
+
+#define TTLV_T1 (ONE_MORE_TTLV|ONE_TLV)
+#define TTLV_T2 (ONE_MORE_TTLV|MAX_TLV)
+
+struct tom_h {
+ uint32_t v;
+ uint16_t flags;
+ uint16_t op_msk;
+ const char *s;
+ int (*print) (netdissect_options *ndo, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+};
+
+enum {
+ TOM_RSV_I,
+ TOM_ASS_I,
+ TOM_AST_I,
+ TOM_CFG_I,
+ TOM_QRY_I,
+ TOM_EVN_I,
+ TOM_RED_I,
+ TOM_HBT_I,
+ TOM_ASR_I,
+ TOM_CNR_I,
+ TOM_QRR_I,
+ _TOM_RSV_MAX
+};
+#define TOM_MAX_IND (_TOM_RSV_MAX - 1)
+
+static int
+tom_valid(uint8_t tom)
+{
+ if (tom > 0) {
+ if (tom >= 0x7 && tom <= 0xe)
+ return 0;
+ if (tom == 0x10)
+ return 0;
+ if (tom > 0x14)
+ return 0;
+ return 1;
+ } else
+ return 0;
+}
+
+static const char *
+ForCES_node(uint32_t node)
+{
+ if (node <= 0x3FFFFFFF)
+ return "FE";
+ if (node >= 0x40000000 && node <= 0x7FFFFFFF)
+ return "CE";
+ if (node >= 0xC0000000 && node <= 0xFFFFFFEF)
+ return "AllMulticast";
+ if (node == 0xFFFFFFFD)
+ return "AllCEsBroadcast";
+ if (node == 0xFFFFFFFE)
+ return "AllFEsBroadcast";
+ if (node == 0xFFFFFFFF)
+ return "AllBroadcast";
+
+ return "ForCESreserved";
+
+}
+
+static const struct tok ForCES_ACKs[] = {
+ {0x0, "NoACK"},
+ {0x1, "SuccessACK"},
+ {0x2, "FailureACK"},
+ {0x3, "AlwaysACK"},
+ {0, NULL}
+};
+
+static const struct tok ForCES_EMs[] = {
+ {0x0, "EMReserved"},
+ {0x1, "execute-all-or-none"},
+ {0x2, "execute-until-failure"},
+ {0x3, "continue-execute-on-failure"},
+ {0, NULL}
+};
+
+static const struct tok ForCES_ATs[] = {
+ {0x0, "Standalone"},
+ {0x1, "2PCtransaction"},
+ {0, NULL}
+};
+
+static const struct tok ForCES_TPs[] = {
+ {0x0, "StartofTransaction"},
+ {0x1, "MiddleofTransaction"},
+ {0x2, "EndofTransaction"},
+ {0x3, "abort"},
+ {0, NULL}
+};
+
+/*
+ * Structure of forces header, naked of TLVs.
+ */
+struct forcesh {
+ nd_uint8_t fm_vrsvd; /* version and reserved */
+#define ForCES_V(forcesh) (GET_U_1((forcesh)->fm_vrsvd) >> 4)
+ nd_uint8_t fm_tom; /* type of message */
+ nd_uint16_t fm_len; /* total length * 4 bytes */
+#define ForCES_BLN(forcesh) ((uint32_t)(GET_BE_U_2((forcesh)->fm_len) << 2))
+ nd_uint32_t fm_sid; /* Source ID */
+#define ForCES_SID(forcesh) GET_BE_U_4((forcesh)->fm_sid)
+ nd_uint32_t fm_did; /* Destination ID */
+#define ForCES_DID(forcesh) GET_BE_U_4((forcesh)->fm_did)
+ nd_uint8_t fm_cor[8]; /* correlator */
+ nd_uint32_t fm_flags; /* flags */
+#define ForCES_ACK(forcesh) ((GET_BE_U_4((forcesh)->fm_flags)&0xC0000000) >> 30)
+#define ForCES_PRI(forcesh) ((GET_BE_U_4((forcesh)->fm_flags)&0x38000000) >> 27)
+#define ForCES_RS1(forcesh) ((GET_BE_U_4((forcesh)->fm_flags)&0x07000000) >> 24)
+#define ForCES_EM(forcesh) ((GET_BE_U_4((forcesh)->fm_flags)&0x00C00000) >> 22)
+#define ForCES_AT(forcesh) ((GET_BE_U_4((forcesh)->fm_flags)&0x00200000) >> 21)
+#define ForCES_TP(forcesh) ((GET_BE_U_4((forcesh)->fm_flags)&0x00180000) >> 19)
+#define ForCES_RS2(forcesh) ((GET_BE_U_4((forcesh)->fm_flags)&0x0007FFFF) >> 0)
+};
+
+#define ForCES_HLN_VALID(fhl,tlen) ((tlen) >= ForCES_HDRL && \
+ (fhl) >= ForCES_HDRL && \
+ (fhl) == (tlen))
+
+#define F_LFB_RSVD 0x0
+#define F_LFB_FEO 0x1
+#define F_LFB_FEPO 0x2
+static const struct tok ForCES_LFBs[] = {
+ {F_LFB_RSVD, "Invalid TLV"},
+ {F_LFB_FEO, "FEObj LFB"},
+ {F_LFB_FEPO, "FEProtoObj LFB"},
+ {0, NULL}
+};
+
+/* this is defined in RFC5810 section A.2 */
+/* https://www.iana.org/assignments/forces/forces.xhtml#oper-tlv-types */
+enum {
+ F_OP_RSV = 0,
+ F_OP_SET = 1,
+ F_OP_SETPROP = 2,
+ F_OP_SETRESP = 3,
+ F_OP_SETPRESP = 4,
+ F_OP_DEL = 5,
+ F_OP_DELRESP = 6,
+ F_OP_GET = 7,
+ F_OP_GETPROP = 8,
+ F_OP_GETRESP = 9,
+ F_OP_GETPRESP = 10,
+ F_OP_REPORT = 11,
+ F_OP_COMMIT = 12,
+ F_OP_RCOMMIT = 13,
+ F_OP_RTRCOMP = 14,
+ _F_OP_MAX
+};
+#define F_OP_MAX (_F_OP_MAX - 1)
+
+enum {
+ B_OP_SET = 1 << (F_OP_SET - 1),
+ B_OP_SETPROP = 1 << (F_OP_SETPROP - 1),
+ B_OP_SETRESP = 1 << (F_OP_SETRESP - 1),
+ B_OP_SETPRESP = 1 << (F_OP_SETPRESP - 1),
+ B_OP_DEL = 1 << (F_OP_DEL - 1),
+ B_OP_DELRESP = 1 << (F_OP_DELRESP - 1),
+ B_OP_GET = 1 << (F_OP_GET - 1),
+ B_OP_GETPROP = 1 << (F_OP_GETPROP - 1),
+ B_OP_GETRESP = 1 << (F_OP_GETRESP - 1),
+ B_OP_GETPRESP = 1 << (F_OP_GETPRESP - 1),
+ B_OP_REPORT = 1 << (F_OP_REPORT - 1),
+ B_OP_COMMIT = 1 << (F_OP_COMMIT - 1),
+ B_OP_RCOMMIT = 1 << (F_OP_RCOMMIT - 1),
+ B_OP_RTRCOMP = 1 << (F_OP_RTRCOMP - 1)
+};
+
+struct optlv_h {
+ uint16_t flags;
+ uint16_t op_msk;
+ const char *s;
+ int (*print) (netdissect_options *ndo, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+};
+
+static int genoptlv_print(netdissect_options *, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+static int recpdoptlv_print(netdissect_options *, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+static int invoptlv_print(netdissect_options *, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+
+#define OP_MIN_SIZ 8
+struct pathdata_h {
+ nd_uint16_t pflags;
+ nd_uint16_t pIDcnt;
+};
+
+#define B_FULLD 0x1
+#define B_SPARD 0x2
+#define B_RESTV 0x4
+#define B_KEYIN 0x8
+#define B_APPND 0x10
+#define B_TRNG 0x20
+
+static const struct optlv_h OPTLV_msg[F_OP_MAX + 1] = {
+ /* F_OP_RSV */ {ZERO_TTLV, 0, "Invalid OPTLV", invoptlv_print},
+ /* F_OP_SET */ {TTLV_T2, B_FULLD | B_SPARD, " Set", recpdoptlv_print},
+ /* F_OP_SETPROP */
+ {TTLV_T2, B_FULLD | B_SPARD, " SetProp", recpdoptlv_print},
+ /* F_OP_SETRESP */ {TTLV_T2, B_RESTV, " SetResp", recpdoptlv_print},
+ /* F_OP_SETPRESP */ {TTLV_T2, B_RESTV, " SetPropResp", recpdoptlv_print},
+ /* F_OP_DEL */ {ZERO_TTLV, 0, " Del", recpdoptlv_print},
+ /* F_OP_DELRESP */ {TTLV_T2, B_RESTV, " DelResp", recpdoptlv_print},
+ /* F_OP_GET */ {ZERO_TTLV, 0, " Get", recpdoptlv_print},
+ /* F_OP_GETPROP */ {ZERO_TTLV, 0, " GetProp", recpdoptlv_print},
+ /* F_OP_GETRESP */
+ {TTLV_T2, B_FULLD | B_SPARD | B_RESTV, " GetResp", recpdoptlv_print},
+ /* F_OP_GETPRESP */
+ {TTLV_T2, B_FULLD | B_RESTV, " GetPropResp", recpdoptlv_print},
+ /* F_OP_REPORT */
+ {TTLV_T2, B_FULLD | B_SPARD, " Report", recpdoptlv_print},
+ /* F_OP_COMMIT */ {ZERO_TTLV, 0, " Commit", NULL},
+ /* F_OP_RCOMMIT */ {TTLV_T1, B_RESTV, " RCommit", genoptlv_print},
+ /* F_OP_RTRCOMP */ {ZERO_TTLV, 0, " RTRCOMP", NULL},
+};
+
+static const struct optlv_h *
+get_forces_optlv_h(uint16_t opt)
+{
+ if (opt > F_OP_MAX || opt == F_OP_RSV)
+ return &OPTLV_msg[F_OP_RSV];
+
+ return &OPTLV_msg[opt];
+}
+
+#define IND_SIZE 256
+#define IND_CHR ' '
+#define IND_PREF '\n'
+#define IND_SUF 0x0
+static char ind_buf[IND_SIZE];
+
+static char *
+indent_pr(int indent, int nlpref)
+{
+ int i = 0;
+ char *r = ind_buf;
+
+ if (indent > (IND_SIZE - 1))
+ indent = IND_SIZE - 1;
+
+ if (nlpref) {
+ r[i] = IND_PREF;
+ i++;
+ indent--;
+ }
+
+ while (--indent >= 0)
+ r[i++] = IND_CHR;
+
+ r[i] = IND_SUF;
+ return r;
+}
+
+static int
+op_valid(uint16_t op, uint16_t mask)
+{
+ if (op == 0)
+ return 0;
+ if (op <= F_OP_MAX)
+ return (1 << (op - 1)) & mask; /* works only for 0x0001 through 0x0010 */
+ /* I guess we should allow vendor operations? */
+ if (op >= 0x8000)
+ return 1;
+ return 0;
+}
+
+#define F_TLV_RSVD 0x0000
+#define F_TLV_REDR 0x0001
+#define F_TLV_ASRS 0x0010
+#define F_TLV_ASRT 0x0011
+#define F_TLV_LFBS 0x1000
+#define F_TLV_PDAT 0x0110
+#define F_TLV_KEYI 0x0111
+#define F_TLV_FULD 0x0112
+#define F_TLV_SPAD 0x0113
+#define F_TLV_REST 0x0114
+#define F_TLV_METD 0x0115
+#define F_TLV_REDD 0x0116
+#define F_TLV_TRNG 0x0117
+
+
+#define F_TLV_VNST 0x8000
+
+static const struct tok ForCES_TLV[] = {
+ {F_TLV_RSVD, "Invalid TLV"},
+ {F_TLV_REDR, "REDIRECT TLV"},
+ {F_TLV_ASRS, "ASResult TLV"},
+ {F_TLV_ASRT, "ASTreason TLV"},
+ {F_TLV_LFBS, "LFBselect TLV"},
+ {F_TLV_PDAT, "PATH-DATA TLV"},
+ {F_TLV_KEYI, "KEYINFO TLV"},
+ {F_TLV_FULD, "FULLDATA TLV"},
+ {F_TLV_SPAD, "SPARSEDATA TLV"},
+ {F_TLV_REST, "RESULT TLV"},
+ {F_TLV_METD, "METADATA TLV"},
+ {F_TLV_REDD, "REDIRECTDATA TLV"},
+ {0, NULL}
+};
+
+#define TLV_HLN 4
+static int
+ttlv_valid(uint16_t ttlv)
+{
+ if (ttlv > 0) {
+ if (ttlv == 1 || ttlv == 0x1000)
+ return 1;
+ if (ttlv >= 0x10 && ttlv <= 0x11)
+ return 1;
+ if (ttlv >= 0x110 && ttlv <= 0x116)
+ return 1;
+ if (ttlv >= 0x8000)
+ return 0; /* XXX: */
+ }
+
+ return 0;
+}
+
+struct forces_ilv {
+ nd_uint32_t type;
+ nd_uint32_t length;
+};
+
+struct forces_tlv {
+ nd_uint16_t type;
+ nd_uint16_t length;
+};
+
+#define F_ALN_LEN(len) roundup2(len, ForCES_ALNL)
+#define GET_TOP_TLV(fhdr) ((const struct forces_tlv *)((fhdr) + sizeof (struct forcesh)))
+#define TLV_SET_LEN(len) (F_ALN_LEN(TLV_HDRL) + (len))
+#define TLV_DATA(tlvp) ((const void*)(((const char*)(tlvp)) + TLV_SET_LEN(0)))
+#define GO_NXT_TLV(tlv,rlen) ((rlen) -= F_ALN_LEN(GET_BE_U_2((tlv)->length)), \
+ (const struct forces_tlv*)(((const char*)(tlv)) \
+ + F_ALN_LEN(GET_BE_U_2((tlv)->length))))
+#define ILV_SET_LEN(len) (F_ALN_LEN(ILV_HDRL) + (len))
+#define ILV_DATA(ilvp) ((const void*)(((const char*)(ilvp)) + ILV_SET_LEN(0)))
+#define GO_NXT_ILV(ilv,rlen) ((rlen) -= F_ALN_LEN(GET_BE_U_4((ilv)->length)), \
+ (const struct forces_ilv *)(((const char*)(ilv)) \
+ + F_ALN_LEN(GET_BE_U_4((ilv)->length))))
+#define INVALID_RLEN 1
+#define INVALID_STLN 2
+#define INVALID_LTLN 3
+#define INVALID_ALEN 4
+
+static const struct tok ForCES_TLV_err[] = {
+ {INVALID_RLEN, "Invalid total length"},
+ {INVALID_STLN, "xLV too short"},
+ {INVALID_LTLN, "xLV too long"},
+ {INVALID_ALEN, "data padding missing"},
+ {0, NULL}
+};
+
+static u_int
+tlv_valid(u_int tlvl, u_int rlen)
+{
+ if (rlen < TLV_HDRL)
+ return INVALID_RLEN;
+ if (tlvl < TLV_HDRL)
+ return INVALID_STLN;
+ if (tlvl > rlen)
+ return INVALID_LTLN;
+ if (rlen < F_ALN_LEN(tlvl))
+ return INVALID_ALEN;
+
+ return 0;
+}
+
+static int
+ilv_valid(netdissect_options *ndo, const struct forces_ilv *ilv, u_int rlen)
+{
+ if (rlen < ILV_HDRL)
+ return INVALID_RLEN;
+ if (GET_BE_U_4(ilv->length) < ILV_HDRL)
+ return INVALID_STLN;
+ if (GET_BE_U_4(ilv->length) > rlen)
+ return INVALID_LTLN;
+ if (rlen < F_ALN_LEN(GET_BE_U_4(ilv->length)))
+ return INVALID_ALEN;
+
+ return 0;
+}
+
+static int lfbselect_print(netdissect_options *, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+static int redirect_print(netdissect_options *, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+static int asrtlv_print(netdissect_options *, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+static int asttlv_print(netdissect_options *, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+
+struct forces_lfbsh {
+ nd_uint32_t class;
+ nd_uint32_t instance;
+};
+
+#define ASSNS_OPS (B_OP_REPORT)
+#define CFG_OPS (B_OP_SET|B_OP_SETPROP|B_OP_DEL|B_OP_COMMIT|B_OP_RTRCOMP)
+#define CFG_ROPS (B_OP_SETRESP|B_OP_SETPRESP|B_OP_DELRESP|B_OP_RCOMMIT)
+#define CFG_QY (B_OP_GET|B_OP_GETPROP)
+#define CFG_QYR (B_OP_GETRESP|B_OP_GETPRESP)
+#define CFG_EVN (B_OP_REPORT)
+
+static const struct tom_h ForCES_msg[TOM_MAX_IND + 1] = {
+ /* TOM_RSV_I */ {TOM_RSVD, ZERO_TTLV, 0, "Invalid message", NULL},
+ /* TOM_ASS_I */ {TOM_ASSNSETUP, ZERO_MORE_TTLV | TWO_TLV, ASSNS_OPS,
+ "Association Setup", lfbselect_print},
+ /* TOM_AST_I */
+ {TOM_ASSNTEARD, TTLV_T1, 0, "Association TearDown", asttlv_print},
+ /* TOM_CFG_I */ {TOM_CONFIG, TTLV_T2, CFG_OPS, "Config", lfbselect_print},
+ /* TOM_QRY_I */ {TOM_QUERY, TTLV_T2, CFG_QY, "Query", lfbselect_print},
+ /* TOM_EVN_I */ {TOM_EVENTNOT, TTLV_T1, CFG_EVN, "Event Notification",
+ lfbselect_print},
+ /* TOM_RED_I */
+ {TOM_PKTREDIR, TTLV_T2, 0, "Packet Redirect", redirect_print},
+ /* TOM_HBT_I */ {TOM_HEARTBT, ZERO_TTLV, 0, "HeartBeat", NULL},
+ /* TOM_ASR_I */
+ {TOM_ASSNSETREP, TTLV_T1, 0, "Association Response", asrtlv_print},
+ /* TOM_CNR_I */ {TOM_CONFIGREP, TTLV_T2, CFG_ROPS, "Config Response",
+ lfbselect_print},
+ /* TOM_QRR_I */
+ {TOM_QUERYREP, TTLV_T2, CFG_QYR, "Query Response", lfbselect_print},
+};
+
+static const struct tom_h *
+get_forces_tom(uint8_t tom)
+{
+ int i;
+ for (i = TOM_RSV_I; i <= TOM_MAX_IND; i++) {
+ const struct tom_h *th = &ForCES_msg[i];
+ if (th->v == tom)
+ return th;
+ }
+ return &ForCES_msg[TOM_RSV_I];
+}
+
+struct pdata_ops {
+ uint32_t v;
+ uint16_t flags;
+ uint16_t op_msk;
+ const char *s;
+ int (*print) (netdissect_options *, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+};
+
+enum {
+ PD_RSV_I,
+ PD_SEL_I,
+ PD_FDT_I,
+ PD_SDT_I,
+ PD_RES_I,
+ PD_PDT_I,
+ _PD_RSV_MAX
+};
+#define PD_MAX_IND (_TOM_RSV_MAX - 1)
+
+static int
+pd_valid(uint16_t pd)
+{
+ if (pd >= F_TLV_PDAT && pd <= F_TLV_REST)
+ return 1;
+ return 0;
+}
+
+static void
+chk_op_type(netdissect_options *ndo,
+ uint16_t type, uint16_t msk, uint16_t omsk)
+{
+ if (type != F_TLV_PDAT) {
+ if (msk & B_KEYIN) {
+ if (type != F_TLV_KEYI) {
+ ND_PRINT("Based on flags expected KEYINFO TLV!\n");
+ }
+ } else {
+ if (!(msk & omsk)) {
+ ND_PRINT("Illegal DATA encoding for type 0x%x programmed %x got %x\n",
+ type, omsk, msk);
+ }
+ }
+ }
+
+}
+
+#define F_SELKEY 1
+#define F_SELTABRANGE 2
+#define F_TABAPPEND 4
+
+struct res_val {
+ nd_uint8_t result;
+ nd_uint8_t resv1;
+ nd_uint16_t resv2;
+};
+
+static int prestlv_print(netdissect_options *, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+static int pkeyitlv_print(netdissect_options *, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+static int fdatatlv_print(netdissect_options *, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+static int sdatatlv_print(netdissect_options *, const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent);
+
+static const struct pdata_ops ForCES_pdata[PD_MAX_IND + 1] = {
+ /* PD_RSV_I */ {0, 0, 0, "Invalid message", NULL},
+ /* PD_SEL_I */ {F_TLV_KEYI, 0, 0, "KEYINFO TLV", pkeyitlv_print},
+ /* PD_FDT_I */ {F_TLV_FULD, 0, B_FULLD, "FULLDATA TLV", fdatatlv_print},
+ /* PD_SDT_I */ {F_TLV_SPAD, 0, B_SPARD, "SPARSEDATA TLV", sdatatlv_print},
+ /* PD_RES_I */ {F_TLV_REST, 0, B_RESTV, "RESULT TLV", prestlv_print},
+ /* PD_PDT_I */
+ {F_TLV_PDAT, 0, 0, "Inner PATH-DATA TLV", recpdoptlv_print},
+};
+
+static const struct pdata_ops *
+get_forces_pd(uint16_t pd)
+{
+ int i;
+ for (i = PD_RSV_I + 1; i <= PD_MAX_IND; i++) {
+ const struct pdata_ops *pdo = &ForCES_pdata[i];
+ if (pdo->v == pd)
+ return pdo;
+ }
+ return &ForCES_pdata[TOM_RSV_I];
+}
+
+enum {
+ E_SUCCESS,
+ E_INVALID_HEADER,
+ E_LENGTH_MISMATCH,
+ E_VERSION_MISMATCH,
+ E_INVALID_DESTINATION_PID,
+ E_LFB_UNKNOWN,
+ E_LFB_NOT_FOUND,
+ E_LFB_INSTANCE_ID_NOT_FOUND,
+ E_INVALID_PATH,
+ E_COMPONENT_DOES_NOT_EXIST,
+ E_EXISTS,
+ E_NOT_FOUND,
+ E_READ_ONLY,
+ E_INVALID_ARRAY_CREATION,
+ E_VALUE_OUT_OF_RANGE,
+ E_CONTENTS_TOO_LONG,
+ E_INVALID_PARAMETERS,
+ E_INVALID_MESSAGE_TYPE,
+ E_INVALID_FLAGS,
+ E_INVALID_TLV,
+ E_EVENT_ERROR,
+ E_NOT_SUPPORTED,
+ E_MEMORY_ERROR,
+ E_INTERNAL_ERROR,
+ /* 0x18-0xFE are reserved .. */
+ E_UNSPECIFIED_ERROR = 0XFF
+};
+
+static const struct tok ForCES_errs[] = {
+ {E_SUCCESS, "SUCCESS"},
+ {E_INVALID_HEADER, "INVALID HEADER"},
+ {E_LENGTH_MISMATCH, "LENGTH MISMATCH"},
+ {E_VERSION_MISMATCH, "VERSION MISMATCH"},
+ {E_INVALID_DESTINATION_PID, "INVALID DESTINATION PID"},
+ {E_LFB_UNKNOWN, "LFB UNKNOWN"},
+ {E_LFB_NOT_FOUND, "LFB NOT FOUND"},
+ {E_LFB_INSTANCE_ID_NOT_FOUND, "LFB INSTANCE ID NOT FOUND"},
+ {E_INVALID_PATH, "INVALID PATH"},
+ {E_COMPONENT_DOES_NOT_EXIST, "COMPONENT DOES NOT EXIST"},
+ {E_EXISTS, "EXISTS ALREADY"},
+ {E_NOT_FOUND, "NOT FOUND"},
+ {E_READ_ONLY, "READ ONLY"},
+ {E_INVALID_ARRAY_CREATION, "INVALID ARRAY CREATION"},
+ {E_VALUE_OUT_OF_RANGE, "VALUE OUT OF RANGE"},
+ {E_CONTENTS_TOO_LONG, "CONTENTS TOO LONG"},
+ {E_INVALID_PARAMETERS, "INVALID PARAMETERS"},
+ {E_INVALID_MESSAGE_TYPE, "INVALID MESSAGE TYPE"},
+ {E_INVALID_FLAGS, "INVALID FLAGS"},
+ {E_INVALID_TLV, "INVALID TLV"},
+ {E_EVENT_ERROR, "EVENT ERROR"},
+ {E_NOT_SUPPORTED, "NOT SUPPORTED"},
+ {E_MEMORY_ERROR, "MEMORY ERROR"},
+ {E_INTERNAL_ERROR, "INTERNAL ERROR"},
+ {E_UNSPECIFIED_ERROR, "UNSPECIFIED ERROR"},
+ {0, NULL}
+};
+
+#define RESLEN 4
+
+static int
+prestlv_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk _U_, int indent)
+{
+ const struct forces_tlv *tlv = (const struct forces_tlv *)pptr;
+ const u_char *tdp = (const u_char *) TLV_DATA(tlv);
+ const struct res_val *r = (const struct res_val *)tdp;
+ u_int dlen;
+ uint8_t result;
+
+ /*
+ * pdatacnt_print() has ensured that len (the TLV length)
+ * >= TLV_HDRL.
+ */
+ dlen = len - TLV_HDRL;
+ if (dlen != RESLEN) {
+ ND_PRINT("illegal RESULT-TLV: %u bytes!\n", dlen);
+ return -1;
+ }
+
+ ND_TCHECK_SIZE(r);
+ result = GET_U_1(r->result);
+ if (result >= 0x18 && result <= 0xFE) {
+ ND_PRINT("illegal reserved result code: 0x%x!\n", result);
+ return -1;
+ }
+
+ if (ndo->ndo_vflag >= 3) {
+ char *ib = indent_pr(indent, 0);
+ ND_PRINT("%s Result: %s (code 0x%x)\n", ib,
+ tok2str(ForCES_errs, NULL, result), result);
+ }
+ return 0;
+
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
+
+static int
+fdatatlv_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk _U_, int indent)
+{
+ const struct forces_tlv *tlv = (const struct forces_tlv *)pptr;
+ u_int rlen;
+ const u_char *tdp = (const u_char *) TLV_DATA(tlv);
+ uint16_t type;
+
+ /*
+ * pdatacnt_print() or pkeyitlv_print() has ensured that len
+ * (the TLV length) >= TLV_HDRL.
+ */
+ rlen = len - TLV_HDRL;
+ ND_TCHECK_SIZE(tlv);
+ type = GET_BE_U_2(tlv->type);
+ if (type != F_TLV_FULD) {
+ ND_PRINT("Error: expecting FULLDATA!\n");
+ return -1;
+ }
+
+ if (ndo->ndo_vflag >= 3) {
+ char *ib = indent_pr(indent + 2, 1);
+ ND_PRINT("%s[", ib + 1);
+ hex_print(ndo, ib, tdp, rlen);
+ ND_PRINT("\n%s]", ib + 1);
+ }
+ return 0;
+
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
+
+static int
+sdatailv_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk _U_, int indent)
+{
+ u_int rlen;
+ const struct forces_ilv *ilv = (const struct forces_ilv *)pptr;
+ int invilv;
+
+ if (len < ILV_HDRL) {
+ ND_PRINT("Error: BAD SPARSEDATA-TLV!\n");
+ return -1;
+ }
+ rlen = len;
+ indent += 1;
+ while (rlen != 0) {
+#if 0
+ ND_PRINT("Jamal - outstanding length <%u>\n", rlen);
+#endif
+ char *ib = indent_pr(indent, 1);
+ const u_char *tdp = (const u_char *) ILV_DATA(ilv);
+ invilv = ilv_valid(ndo, ilv, rlen);
+ if (invilv) {
+ ND_PRINT("Error: %s, rlen %u\n",
+ tok2str(ForCES_TLV_err, NULL, invilv), rlen);
+ return -1;
+ }
+ if (ndo->ndo_vflag >= 3) {
+ u_int ilvl = GET_BE_U_4(ilv->length);
+ ND_PRINT("\n%s ILV: type %x length %u\n", ib + 1,
+ GET_BE_U_4(ilv->type), ilvl);
+ hex_print(ndo, "\t\t[", tdp, ilvl-ILV_HDRL);
+ }
+
+ ilv = GO_NXT_ILV(ilv, rlen);
+ }
+
+ return 0;
+}
+
+static int
+sdatatlv_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent)
+{
+ const struct forces_tlv *tlv = (const struct forces_tlv *)pptr;
+ u_int rlen;
+ const u_char *tdp = (const u_char *) TLV_DATA(tlv);
+ uint16_t type;
+
+ /*
+ * pdatacnt_print() has ensured that len (the TLV length)
+ * >= TLV_HDRL.
+ */
+ rlen = len - TLV_HDRL;
+ ND_TCHECK_SIZE(tlv);
+ type = GET_BE_U_2(tlv->type);
+ if (type != F_TLV_SPAD) {
+ ND_PRINT("Error: expecting SPARSEDATA!\n");
+ return -1;
+ }
+
+ return sdatailv_print(ndo, tdp, rlen, op_msk, indent);
+
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
+
+static int
+pkeyitlv_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent)
+{
+ const struct forces_tlv *tlv = (const struct forces_tlv *)pptr;
+ const u_char *tdp = (const u_char *) TLV_DATA(tlv);
+ const u_char *dp = tdp + 4;
+ const struct forces_tlv *kdtlv = (const struct forces_tlv *)dp;
+ uint32_t id;
+ char *ib = indent_pr(indent, 0);
+ uint16_t type, tll;
+ u_int invtlv;
+
+ id = GET_BE_U_4(tdp);
+ ND_PRINT("%sKeyinfo: Key 0x%x\n", ib, id);
+ type = GET_BE_U_2(kdtlv->type);
+ tll = GET_BE_U_2(kdtlv->length);
+ invtlv = tlv_valid(tll, len);
+
+ if (invtlv) {
+ ND_PRINT("%s TLV type 0x%x len %u\n",
+ tok2str(ForCES_TLV_err, NULL, invtlv), type,
+ tll);
+ return -1;
+ }
+ /*
+ * At this point, tlv_valid() has ensured that the TLV
+ * length is large enough but not too large (it doesn't
+ * go past the end of the containing TLV).
+ */
+ tll = GET_BE_U_2(kdtlv->length);
+ dp = (const u_char *) TLV_DATA(kdtlv);
+ return fdatatlv_print(ndo, dp, tll, op_msk, indent);
+}
+
+#define PTH_DESC_SIZE 12
+
+static int
+pdatacnt_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t IDcnt, uint16_t op_msk, int indent)
+{
+ u_int i;
+ uint32_t id;
+ char *ib = indent_pr(indent, 0);
+
+ if ((op_msk & B_APPND) && ndo->ndo_vflag >= 3) {
+ ND_PRINT("%sTABLE APPEND\n", ib);
+ }
+ for (i = 0; i < IDcnt; i++) {
+ ND_TCHECK_4(pptr);
+ if (len < 4)
+ goto trunc;
+ id = GET_BE_U_4(pptr);
+ if (ndo->ndo_vflag >= 3)
+ ND_PRINT("%sID#%02u: %u\n", ib, i + 1, id);
+ len -= 4;
+ pptr += 4;
+ }
+
+ if ((op_msk & B_TRNG) || (op_msk & B_KEYIN)) {
+ if (op_msk & B_TRNG) {
+ uint32_t starti, endi;
+
+ if (len < PTH_DESC_SIZE) {
+ ND_PRINT("pathlength %u with key/range too short %u\n",
+ len, PTH_DESC_SIZE);
+ return -1;
+ }
+
+ pptr += sizeof(struct forces_tlv);
+ len -= sizeof(struct forces_tlv);
+
+ starti = GET_BE_U_4(pptr);
+ pptr += 4;
+ len -= 4;
+
+ endi = GET_BE_U_4(pptr);
+ pptr += 4;
+ len -= 4;
+
+ if (ndo->ndo_vflag >= 3)
+ ND_PRINT("%sTable range: [%u,%u]\n", ib, starti, endi);
+ }
+
+ if (op_msk & B_KEYIN) {
+ const struct forces_tlv *keytlv;
+ uint16_t tll;
+
+ if (len < PTH_DESC_SIZE) {
+ ND_PRINT("pathlength %u with key/range too short %u\n",
+ len, PTH_DESC_SIZE);
+ return -1;
+ }
+
+ /* skip keyid */
+ pptr += 4;
+ len -= 4;
+ keytlv = (const struct forces_tlv *)pptr;
+ /* skip header */
+ pptr += sizeof(struct forces_tlv);
+ len -= sizeof(struct forces_tlv);
+ /* skip key content */
+ tll = GET_BE_U_2(keytlv->length);
+ if (tll < TLV_HDRL) {
+ ND_PRINT("key content length %u < %u\n",
+ tll, TLV_HDRL);
+ return -1;
+ }
+ tll -= TLV_HDRL;
+ if (len < tll) {
+ ND_PRINT("key content too short\n");
+ return -1;
+ }
+ pptr += tll;
+ len -= tll;
+ }
+
+ }
+
+ if (len) {
+ const struct forces_tlv *pdtlv = (const struct forces_tlv *)pptr;
+ uint16_t type;
+ uint16_t tlvl, tll;
+ u_int pad = 0;
+ u_int aln;
+ u_int invtlv;
+
+ type = GET_BE_U_2(pdtlv->type);
+ tlvl = GET_BE_U_2(pdtlv->length);
+ invtlv = tlv_valid(tlvl, len);
+ if (invtlv) {
+ ND_PRINT("%s Outstanding bytes %u for TLV type 0x%x TLV len %u\n",
+ tok2str(ForCES_TLV_err, NULL, invtlv), len, type,
+ tlvl);
+ goto pd_err;
+ }
+ /*
+ * At this point, tlv_valid() has ensured that the TLV
+ * length is large enough but not too large (it doesn't
+ * go past the end of the containing TLV).
+ */
+ tll = tlvl - TLV_HDRL;
+ aln = F_ALN_LEN(tlvl);
+ if (aln > tlvl) {
+ if (aln > len) {
+ ND_PRINT("Invalid padded pathdata TLV type 0x%x len %u missing %u pad bytes\n",
+ type, tlvl, aln - len);
+ } else {
+ pad = aln - tlvl;
+ }
+ }
+ if (pd_valid(type)) {
+ const struct pdata_ops *ops = get_forces_pd(type);
+
+ if (ndo->ndo_vflag >= 3 && ops->v != F_TLV_PDAT) {
+ if (pad)
+ ND_PRINT("%s %s (Length %u DataLen %u pad %u Bytes)\n",
+ ib, ops->s, tlvl, tll, pad);
+ else
+ ND_PRINT("%s %s (Length %u DataLen %u Bytes)\n",
+ ib, ops->s, tlvl, tll);
+ }
+
+ chk_op_type(ndo, type, op_msk, ops->op_msk);
+
+ if (ops->print(ndo, (const u_char *)pdtlv,
+ tll + pad + TLV_HDRL, op_msk,
+ indent + 2) == -1)
+ return -1;
+ len -= (TLV_HDRL + pad + tll);
+ } else {
+ ND_PRINT("Invalid path data content type 0x%x len %u\n",
+ type, tlvl);
+pd_err:
+ if (tlvl) {
+ hex_print(ndo, "Bad Data val\n\t [",
+ pptr, len);
+ ND_PRINT("]\n");
+
+ return -1;
+ }
+ }
+ }
+ return len;
+
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
+
+static int
+pdata_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent)
+{
+ const struct pathdata_h *pdh = (const struct pathdata_h *)pptr;
+ char *ib = indent_pr(indent, 0);
+ u_int minsize = 0;
+ int more_pd = 0;
+ uint16_t idcnt = 0;
+
+ ND_TCHECK_SIZE(pdh);
+ if (len < sizeof(struct pathdata_h))
+ goto trunc;
+ if (ndo->ndo_vflag >= 3) {
+ ND_PRINT("\n%sPathdata: Flags 0x%x ID count %u\n",
+ ib, GET_BE_U_2(pdh->pflags),
+ GET_BE_U_2(pdh->pIDcnt));
+ }
+
+ if (GET_BE_U_2(pdh->pflags) & F_SELKEY) {
+ op_msk |= B_KEYIN;
+ }
+
+ /* Table GET Range operation */
+ if (GET_BE_U_2(pdh->pflags) & F_SELTABRANGE) {
+ op_msk |= B_TRNG;
+ }
+ /* Table SET append operation */
+ if (GET_BE_U_2(pdh->pflags) & F_TABAPPEND) {
+ op_msk |= B_APPND;
+ }
+
+ pptr += sizeof(struct pathdata_h);
+ len -= sizeof(struct pathdata_h);
+ idcnt = GET_BE_U_2(pdh->pIDcnt);
+ minsize = idcnt * 4;
+ if (len < minsize) {
+ ND_PRINT("\t\t\ttruncated IDs expected %uB got %uB\n", minsize,
+ len);
+ hex_print(ndo, "\t\t\tID Data[", pptr, len);
+ ND_PRINT("]\n");
+ return -1;
+ }
+
+ if ((op_msk & B_TRNG) && (op_msk & B_KEYIN)) {
+ ND_PRINT("\t\t\tIllegal to have both Table ranges and keys\n");
+ return -1;
+ }
+
+ more_pd = pdatacnt_print(ndo, pptr, len, idcnt, op_msk, indent);
+ if (more_pd > 0) {
+ int consumed = len - more_pd;
+ pptr += consumed;
+ len = more_pd;
+ /* XXX: Argh, recurse some more */
+ return recpdoptlv_print(ndo, pptr, len, op_msk, indent+1);
+ } else
+ return 0;
+
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
+
+static int
+genoptlv_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent)
+{
+ const struct forces_tlv *pdtlv = (const struct forces_tlv *)pptr;
+ uint16_t type;
+ u_int tlvl;
+ u_int invtlv;
+ char *ib = indent_pr(indent, 0);
+
+ type = GET_BE_U_2(pdtlv->type);
+ tlvl = GET_BE_U_2(pdtlv->length);
+ invtlv = tlv_valid(tlvl, len);
+ ND_PRINT("genoptlvprint - %s TLV type 0x%x len %u\n",
+ tok2str(ForCES_TLV, NULL, type), type, tlvl);
+ if (!invtlv) {
+ /*
+ * At this point, tlv_valid() has ensured that the TLV
+ * length is large enough but not too large (it doesn't
+ * go past the end of the containing TLV).
+ */
+ const u_char *dp = (const u_char *) TLV_DATA(pdtlv);
+
+ if (!ttlv_valid(type)) {
+ ND_PRINT("%s TLV type 0x%x len %u\n",
+ tok2str(ForCES_TLV_err, NULL, invtlv), type,
+ tlvl);
+ return -1;
+ }
+ if (ndo->ndo_vflag >= 3)
+ ND_PRINT("%s%s, length %u (data length %u Bytes)",
+ ib, tok2str(ForCES_TLV, NULL, type),
+ tlvl, tlvl - TLV_HDRL);
+
+ return pdata_print(ndo, dp, tlvl - TLV_HDRL, op_msk, indent + 1);
+ } else {
+ ND_PRINT("\t\t\tInvalid ForCES TLV type=%x", type);
+ return -1;
+ }
+}
+
+static int
+recpdoptlv_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent)
+{
+ const struct forces_tlv *pdtlv = (const struct forces_tlv *)pptr;
+
+ while (len != 0) {
+ uint16_t type, tlvl;
+ u_int invtlv;
+ char *ib;
+ const u_char *dp;
+
+ tlvl = GET_BE_U_2(pdtlv->length);
+ invtlv = tlv_valid(tlvl, len);
+ if (invtlv) {
+ break;
+ }
+
+ /*
+ * At this point, tlv_valid() has ensured that the TLV
+ * length is large enough but not too large (it doesn't
+ * go past the end of the containing TLV).
+ */
+ ib = indent_pr(indent, 0);
+ type = GET_BE_U_2(pdtlv->type);
+ dp = (const u_char *) TLV_DATA(pdtlv);
+
+ if (ndo->ndo_vflag >= 3)
+ ND_PRINT("%s%s, length %u (data encapsulated %u Bytes)",
+ ib, tok2str(ForCES_TLV, NULL, type),
+ tlvl,
+ tlvl - TLV_HDRL);
+
+ if (pdata_print(ndo, dp, tlvl - TLV_HDRL, op_msk, indent + 1) == -1)
+ return -1;
+ pdtlv = GO_NXT_TLV(pdtlv, len);
+ }
+
+ if (len) {
+ ND_PRINT("\n\t\tMessy PATHDATA TLV header, type (0x%x)\n\t\texcess of %u Bytes ",
+ GET_BE_U_2(pdtlv->type),
+ len - GET_BE_U_2(pdtlv->length));
+ return -1;
+ }
+
+ return 0;
+}
+
+static int
+invoptlv_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk _U_, int indent)
+{
+ char *ib = indent_pr(indent, 1);
+
+ if (ndo->ndo_vflag >= 3) {
+ ND_PRINT("%sData[", ib + 1);
+ hex_print(ndo, ib, pptr, len);
+ ND_PRINT("%s]\n", ib);
+ }
+ return -1;
+}
+
+static int
+otlv_print(netdissect_options *ndo,
+ const struct forces_tlv *otlv, uint16_t op_msk _U_, int indent)
+{
+ int rc = 0;
+ const u_char *dp = (const u_char *) TLV_DATA(otlv);
+ uint16_t type;
+ u_int tll;
+ char *ib = indent_pr(indent, 0);
+ const struct optlv_h *ops;
+
+ /*
+ * lfbselect_print() has ensured that GET_BE_U_2(otlv->length)
+ * >= TLV_HDRL.
+ */
+ type = GET_BE_U_2(otlv->type);
+ tll = GET_BE_U_2(otlv->length) - TLV_HDRL;
+ ops = get_forces_optlv_h(type);
+ if (ndo->ndo_vflag >= 3) {
+ ND_PRINT("%sOper TLV %s(0x%x) length %u\n", ib, ops->s, type,
+ GET_BE_U_2(otlv->length));
+ }
+ /* rest of ops must at least have 12B {pathinfo} */
+ if (tll < OP_MIN_SIZ) {
+ ND_PRINT("\t\tOper TLV %s(0x%x) length %u\n", ops->s, type,
+ GET_BE_U_2(otlv->length));
+ ND_PRINT("\t\tTruncated data size %u minimum required %u\n", tll,
+ OP_MIN_SIZ);
+ return invoptlv_print(ndo, dp, tll, ops->op_msk, indent);
+
+ }
+
+ /* XXX - do anything with ops->flags? */
+ if(ops->print) {
+ rc = ops->print(ndo, dp, tll, ops->op_msk, indent + 1);
+ }
+ return rc;
+}
+
+#define ASTDLN 4
+#define ASTMCD 255
+static int
+asttlv_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk _U_, int indent)
+{
+ uint32_t rescode;
+ u_int dlen;
+ char *ib = indent_pr(indent, 0);
+
+ /*
+ * forces_type_print() has ensured that len (the TLV length)
+ * >= TLV_HDRL.
+ */
+ dlen = len - TLV_HDRL;
+ if (dlen != ASTDLN) {
+ ND_PRINT("illegal ASTresult-TLV: %u bytes!\n", dlen);
+ return -1;
+ }
+ rescode = GET_BE_U_4(pptr);
+ if (rescode > ASTMCD) {
+ ND_PRINT("illegal ASTresult result code: %u!\n", rescode);
+ return -1;
+ }
+
+ if (ndo->ndo_vflag >= 3) {
+ ND_PRINT("Teardown reason:\n%s", ib);
+ switch (rescode) {
+ case 0:
+ ND_PRINT("Normal Teardown");
+ break;
+ case 1:
+ ND_PRINT("Loss of Heartbeats");
+ break;
+ case 2:
+ ND_PRINT("Out of bandwidth");
+ break;
+ case 3:
+ ND_PRINT("Out of Memory");
+ break;
+ case 4:
+ ND_PRINT("Application Crash");
+ break;
+ default:
+ ND_PRINT("Unknown Teardown reason");
+ break;
+ }
+ ND_PRINT("(%x)\n%s", rescode, ib);
+ }
+ return 0;
+}
+
+#define ASRDLN 4
+#define ASRMCD 3
+static int
+asrtlv_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk _U_, int indent)
+{
+ uint32_t rescode;
+ u_int dlen;
+ char *ib = indent_pr(indent, 0);
+
+ /*
+ * forces_type_print() has ensured that len (the TLV length)
+ * >= TLV_HDRL.
+ */
+ dlen = len - TLV_HDRL;
+ if (dlen != ASRDLN) { /* id, instance, oper tlv */
+ ND_PRINT("illegal ASRresult-TLV: %u bytes!\n", dlen);
+ return -1;
+ }
+ rescode = GET_BE_U_4(pptr);
+
+ if (rescode > ASRMCD) {
+ ND_PRINT("illegal ASRresult result code: %u!\n", rescode);
+ return -1;
+ }
+
+ if (ndo->ndo_vflag >= 3) {
+ ND_PRINT("\n%s", ib);
+ switch (rescode) {
+ case 0:
+ ND_PRINT("Success ");
+ break;
+ case 1:
+ ND_PRINT("FE ID invalid ");
+ break;
+ case 2:
+ ND_PRINT("permission denied ");
+ break;
+ default:
+ ND_PRINT("Unknown ");
+ break;
+ }
+ ND_PRINT("(%x)\n%s", rescode, ib);
+ }
+ return 0;
+}
+
+#if 0
+/*
+ * XXX - not used.
+ */
+static int
+gentltlv_print(netdissect_options *ndo,
+ const u_char * pptr _U_, u_int len,
+ uint16_t op_msk _U_, int indent _U_)
+{
+ u_int dlen = len - TLV_HDRL;
+
+ if (dlen < 4) { /* at least 32 bits must exist */
+ ND_PRINT("truncated TLV: %u bytes missing! ", 4 - dlen);
+ return -1;
+ }
+ return 0;
+}
+#endif
+
+#define RD_MIN 8
+
+static int
+print_metailv(netdissect_options *ndo,
+ const u_char * pptr, uint16_t op_msk _U_, int indent)
+{
+ u_int rlen;
+ char *ib = indent_pr(indent, 0);
+ /* XXX: check header length */
+ const struct forces_ilv *ilv = (const struct forces_ilv *)pptr;
+
+ /*
+ * print_metatlv() has ensured that len (what remains in the
+ * ILV) >= ILV_HDRL.
+ */
+ rlen = GET_BE_U_4(ilv->length) - ILV_HDRL;
+ ND_PRINT("%sMetaID 0x%x length %u\n", ib, GET_BE_U_4(ilv->type),
+ GET_BE_U_4(ilv->length));
+ if (ndo->ndo_vflag >= 3) {
+ hex_print(ndo, "\t\t[", ILV_DATA(ilv), rlen);
+ ND_PRINT(" ]\n");
+ }
+ return 0;
+}
+
+static int
+print_metatlv(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk _U_, int indent)
+{
+ u_int dlen;
+ char *ib = indent_pr(indent, 0);
+ u_int rlen;
+ const struct forces_ilv *ilv = (const struct forces_ilv *)pptr;
+ int invilv;
+
+ /*
+ * redirect_print() has ensured that len (what remains in the
+ * TLV) >= TLV_HDRL.
+ */
+ dlen = len - TLV_HDRL;
+ rlen = dlen;
+ ND_PRINT("\n%s METADATA length %u\n", ib, rlen);
+ while (rlen != 0) {
+ invilv = ilv_valid(ndo, ilv, rlen);
+ if (invilv) {
+ break;
+ }
+
+ /*
+ * At this point, ilv_valid() has ensured that the ILV
+ * length is large enough but not too large (it doesn't
+ * go past the end of the containing TLV).
+ */
+ print_metailv(ndo, (const u_char *) ilv, 0, indent + 1);
+ ilv = GO_NXT_ILV(ilv, rlen);
+ }
+
+ return 0;
+}
+
+
+static int
+print_reddata(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk _U_, int indent)
+{
+ u_int dlen;
+ char *ib = indent_pr(indent, 0);
+ u_int rlen;
+
+ dlen = len - TLV_HDRL;
+ rlen = dlen;
+ ND_PRINT("\n%s Redirect Data length %u\n", ib, rlen);
+
+ if (ndo->ndo_vflag >= 3) {
+ ND_PRINT("\t\t[");
+ hex_print(ndo, "\n\t\t", pptr, rlen);
+ ND_PRINT("\n\t\t]");
+ }
+
+ return 0;
+}
+
+static int
+redirect_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk _U_, int indent)
+{
+ const struct forces_tlv *tlv = (const struct forces_tlv *)pptr;
+ u_int dlen;
+ u_int rlen;
+ u_int invtlv;
+
+ /*
+ * forces_type_print() has ensured that len (the TLV length)
+ * >= TLV_HDRL.
+ */
+ dlen = len - TLV_HDRL;
+ if (dlen <= RD_MIN) {
+ ND_PRINT("\n\t\ttruncated Redirect TLV: %u bytes missing! ",
+ RD_MIN - dlen);
+ return -1;
+ }
+
+ rlen = dlen;
+ indent += 1;
+ while (rlen != 0) {
+ uint16_t type, tlvl;
+
+ type = GET_BE_U_2(tlv->type);
+ tlvl = GET_BE_U_2(tlv->length);
+ invtlv = tlv_valid(tlvl, rlen);
+ if (invtlv) {
+ ND_PRINT("Bad Redirect data\n");
+ break;
+ }
+
+ /*
+ * At this point, tlv_valid() has ensured that the TLV
+ * length is large enough but not too large (it doesn't
+ * go past the end of the containing TLV).
+ */
+ if (type == F_TLV_METD) {
+ print_metatlv(ndo, (const u_char *) TLV_DATA(tlv),
+ tlvl, 0,
+ indent);
+ } else if (type == F_TLV_REDD) {
+ print_reddata(ndo, (const u_char *) TLV_DATA(tlv),
+ tlvl, 0,
+ indent);
+ } else {
+ ND_PRINT("Unknown REDIRECT TLV 0x%x len %u\n",
+ type,
+ tlvl);
+ }
+
+ tlv = GO_NXT_TLV(tlv, rlen);
+ }
+
+ if (rlen) {
+ ND_PRINT("\n\t\tMessy Redirect TLV header, type (0x%x)\n\t\texcess of %u Bytes ",
+ GET_BE_U_2(tlv->type),
+ rlen - GET_BE_U_2(tlv->length));
+ return -1;
+ }
+
+ return 0;
+}
+
+#define OP_OFF 8
+#define OP_MIN 12
+
+static int
+lfbselect_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len,
+ uint16_t op_msk, int indent)
+{
+ const struct forces_lfbsh *lfbs;
+ const struct forces_tlv *otlv;
+ char *ib = indent_pr(indent, 0);
+ u_int dlen;
+ u_int rlen;
+ u_int invtlv;
+
+ /*
+ * forces_type_print() has ensured that len (the TLV length)
+ * >= TLV_HDRL.
+ */
+ dlen = len - TLV_HDRL;
+ if (dlen <= OP_MIN) { /* id, instance, oper tlv header .. */
+ ND_PRINT("\n\t\ttruncated lfb selector: %u bytes missing! ",
+ OP_MIN - dlen);
+ return -1;
+ }
+
+ /*
+ * At this point, we know that dlen > OP_MIN; OP_OFF < OP_MIN, so
+ * we also know that it's > OP_OFF.
+ */
+ rlen = dlen - OP_OFF;
+
+ lfbs = (const struct forces_lfbsh *)pptr;
+ ND_TCHECK_SIZE(lfbs);
+ if (ndo->ndo_vflag >= 3) {
+ ND_PRINT("\n%s%s(Classid %x) instance %x\n",
+ ib,
+ tok2str(ForCES_LFBs, NULL, GET_BE_U_4(lfbs->class)),
+ GET_BE_U_4(lfbs->class),
+ GET_BE_U_4(lfbs->instance));
+ }
+
+ otlv = (const struct forces_tlv *)(lfbs + 1);
+
+ indent += 1;
+ while (rlen != 0) {
+ uint16_t type, tlvl;
+
+ type = GET_BE_U_2(otlv->type);
+ tlvl = GET_BE_U_2(otlv->length);
+ invtlv = tlv_valid(tlvl, rlen);
+ if (invtlv)
+ break;
+
+ /*
+ * At this point, tlv_valid() has ensured that the TLV
+ * length is large enough but not too large (it doesn't
+ * go past the end of the containing TLV).
+ */
+ if (op_valid(type, op_msk)) {
+ otlv_print(ndo, otlv, 0, indent);
+ } else {
+ if (ndo->ndo_vflag < 3)
+ ND_PRINT("\n");
+ ND_PRINT("\t\tINValid oper-TLV type 0x%x length %u for this ForCES message\n",
+ type, tlvl);
+ invoptlv_print(ndo, (const u_char *)otlv, rlen, 0, indent);
+ }
+ otlv = GO_NXT_TLV(otlv, rlen);
+ }
+
+ if (rlen) {
+ ND_PRINT("\n\t\tMessy oper TLV header, type (0x%x)\n\t\texcess of %u Bytes ",
+ GET_BE_U_2(otlv->type),
+ rlen - GET_BE_U_2(otlv->length));
+ return -1;
+ }
+
+ return 0;
+
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
+
+static int
+forces_type_print(netdissect_options *ndo,
+ const u_char * pptr, const struct forcesh *fhdr _U_,
+ u_int mlen, const struct tom_h *tops)
+{
+ const struct forces_tlv *tltlv;
+ u_int rlen;
+ u_int invtlv;
+ int rc = 0;
+ u_int ttlv = 0;
+
+ /*
+ * forces_print() has already checked that mlen >= ForCES_HDRL
+ * by calling ForCES_HLN_VALID().
+ */
+ rlen = mlen - ForCES_HDRL;
+
+ if (rlen > TLV_HLN) {
+ if (tops->flags & ZERO_TTLV) {
+ ND_PRINT("<0x%x>Illegal Top level TLV!\n", tops->flags);
+ return -1;
+ }
+ } else {
+ if (tops->flags & ZERO_MORE_TTLV)
+ return 0;
+ if (tops->flags & ONE_MORE_TTLV) {
+ ND_PRINT("\tTop level TLV Data missing!\n");
+ return -1;
+ }
+ }
+
+ if (tops->flags & ZERO_TTLV) {
+ return 0;
+ }
+
+ ttlv = tops->flags >> 4;
+ tltlv = GET_TOP_TLV(pptr);
+
+ /*XXX: 15 top level tlvs will probably be fine
+ You are nuts if you send more ;-> */
+ while (rlen != 0) {
+ uint16_t type, tlvl;
+
+ type = GET_BE_U_2(tltlv->type);
+ tlvl = GET_BE_U_2(tltlv->length);
+ invtlv = tlv_valid(tlvl, rlen);
+ if (invtlv)
+ break;
+
+ /*
+ * At this point, tlv_valid() has ensured that the TLV
+ * length is large enough but not too large (it doesn't
+ * go past the end of the packet).
+ */
+ if (!ttlv_valid(type)) {
+ ND_PRINT("\n\tInvalid ForCES Top TLV type=0x%x",
+ type);
+ return -1;
+ }
+
+ if (ndo->ndo_vflag >= 3)
+ ND_PRINT("\t%s, length %u (data length %u Bytes)",
+ tok2str(ForCES_TLV, NULL, type),
+ tlvl,
+ tlvl - TLV_HDRL);
+
+ rc = tops->print(ndo, (const u_char *) TLV_DATA(tltlv),
+ tlvl,
+ tops->op_msk, 9);
+ if (rc < 0) {
+ return -1;
+ }
+ tltlv = GO_NXT_TLV(tltlv, rlen);
+ ttlv--;
+ if (ttlv <= 0)
+ break;
+ }
+ /*
+ * XXX - if ttlv != 0, does that mean that the packet was too
+ * short, and didn't have *enough* TLVs in it?
+ */
+ if (rlen) {
+ ND_PRINT("\tMess TopTLV header: min %u, total %u advertised %u ",
+ TLV_HDRL, rlen, GET_BE_U_2(tltlv->length));
+ return -1;
+ }
+
+ return 0;
+}
+
+void
+forces_print(netdissect_options *ndo,
+ const u_char * pptr, u_int len)
+{
+ const struct forcesh *fhdr;
+ u_int mlen;
+ uint32_t flg_raw;
+ uint8_t tom;
+ const struct tom_h *tops;
+ int rc = 0;
+
+ ndo->ndo_protocol = "forces";
+ fhdr = (const struct forcesh *)pptr;
+ ND_TCHECK_SIZE(fhdr);
+ tom = GET_U_1(fhdr->fm_tom);
+ if (!tom_valid(tom)) {
+ ND_PRINT("Invalid ForCES message type %u\n", tom);
+ goto error;
+ }
+
+ mlen = ForCES_BLN(fhdr);
+
+ tops = get_forces_tom(tom);
+ if (tops->v == TOM_RSVD) {
+ ND_PRINT("\n\tUnknown ForCES message type=0x%x", tom);
+ goto error;
+ }
+
+ ND_PRINT("\n\tForCES %s ", tops->s);
+ if (!ForCES_HLN_VALID(mlen, len)) {
+ ND_PRINT("Illegal ForCES pkt len - min %u, total recvd %u, advertised %u ",
+ ForCES_HDRL, len, ForCES_BLN(fhdr));
+ goto error;
+ }
+
+ flg_raw = GET_BE_U_4(pptr + 20);
+ if (ndo->ndo_vflag >= 1) {
+ ND_PRINT("\n\tForCES Version %u len %uB flags 0x%08x ",
+ ForCES_V(fhdr), mlen, flg_raw);
+ ND_PRINT("\n\tSrcID 0x%x(%s) DstID 0x%x(%s) Correlator 0x%" PRIx64,
+ ForCES_SID(fhdr), ForCES_node(ForCES_SID(fhdr)),
+ ForCES_DID(fhdr), ForCES_node(ForCES_DID(fhdr)),
+ GET_BE_U_8(fhdr->fm_cor));
+
+ }
+ if (ndo->ndo_vflag >= 2) {
+ ND_PRINT("\n\tForCES flags:\n\t %s(0x%x), prio=%u, %s(0x%x),\n\t %s(0x%x), %s(0x%x)\n",
+ tok2str(ForCES_ACKs, "ACKUnknown", ForCES_ACK(fhdr)),
+ ForCES_ACK(fhdr),
+ ForCES_PRI(fhdr),
+ tok2str(ForCES_EMs, "EMUnknown", ForCES_EM(fhdr)),
+ ForCES_EM(fhdr),
+ tok2str(ForCES_ATs, "ATUnknown", ForCES_AT(fhdr)),
+ ForCES_AT(fhdr),
+ tok2str(ForCES_TPs, "TPUnknown", ForCES_TP(fhdr)),
+ ForCES_TP(fhdr));
+ ND_PRINT("\t Extra flags: rsv(b5-7) 0x%x rsv(b13-31) 0x%x\n",
+ ForCES_RS1(fhdr), ForCES_RS2(fhdr));
+ }
+ rc = forces_type_print(ndo, pptr, fhdr, mlen, tops);
+ if (rc < 0) {
+error:
+ hex_print(ndo, "\n\t[", pptr, len);
+ ND_PRINT("\n\t]");
+ return;
+ }
+
+ if (ndo->ndo_vflag >= 4) {
+ ND_PRINT("\n\t Raw ForCES message\n\t [");
+ hex_print(ndo, "\n\t ", pptr, len);
+ ND_PRINT("\n\t ]");
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-fr.c b/print-fr.c
new file mode 100644
index 0000000..f0d7fbe
--- /dev/null
+++ b/print-fr.c
@@ -0,0 +1,1157 @@
+/*
+ * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Frame Relay printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "ethertype.h"
+#include "llc.h"
+#include "nlpid.h"
+#include "extract.h"
+
+static void frf15_print(netdissect_options *ndo, const u_char *, u_int);
+
+/*
+ * the frame relay header has a variable length
+ *
+ * the EA bit determines if there is another byte
+ * in the header
+ *
+ * minimum header length is 2 bytes
+ * maximum header length is 4 bytes
+ *
+ * 7 6 5 4 3 2 1 0
+ * +----+----+----+----+----+----+----+----+
+ * | DLCI (6 bits) | CR | EA |
+ * +----+----+----+----+----+----+----+----+
+ * | DLCI (4 bits) |FECN|BECN| DE | EA |
+ * +----+----+----+----+----+----+----+----+
+ * | DLCI (7 bits) | EA |
+ * +----+----+----+----+----+----+----+----+
+ * | DLCI (6 bits) |SDLC| EA |
+ * +----+----+----+----+----+----+----+----+
+ */
+
+#define FR_EA_BIT 0x01
+
+#define FR_CR_BIT 0x02000000
+#define FR_DE_BIT 0x00020000
+#define FR_BECN_BIT 0x00040000
+#define FR_FECN_BIT 0x00080000
+#define FR_SDLC_BIT 0x00000002
+
+
+static const struct tok fr_header_flag_values[] = {
+ { FR_CR_BIT, "C!" },
+ { FR_DE_BIT, "DE" },
+ { FR_BECN_BIT, "BECN" },
+ { FR_FECN_BIT, "FECN" },
+ { FR_SDLC_BIT, "sdlcore" },
+ { 0, NULL }
+};
+
+/* FRF.15 / FRF.16 */
+#define MFR_B_BIT 0x80
+#define MFR_E_BIT 0x40
+#define MFR_C_BIT 0x20
+#define MFR_BEC_MASK (MFR_B_BIT | MFR_E_BIT | MFR_C_BIT)
+#define MFR_CTRL_FRAME (MFR_B_BIT | MFR_E_BIT | MFR_C_BIT)
+#define MFR_FRAG_FRAME (MFR_B_BIT | MFR_E_BIT )
+
+static const struct tok frf_flag_values[] = {
+ { MFR_B_BIT, "Begin" },
+ { MFR_E_BIT, "End" },
+ { MFR_C_BIT, "Control" },
+ { 0, NULL }
+};
+
+/* Finds out Q.922 address length, DLCI and flags. Returns 1 on success,
+ * 0 on invalid address, -1 on truncated packet
+ * save the flags dep. on address length
+ */
+static int parse_q922_header(netdissect_options *ndo,
+ const u_char *p, u_int *dlci,
+ u_int *addr_len, uint32_t *flags, u_int length)
+{
+ if (!ND_TTEST_1(p) || length < 1)
+ return -1;
+ if ((GET_U_1(p) & FR_EA_BIT))
+ return 0;
+
+ if (!ND_TTEST_1(p + 1) || length < 2)
+ return -1;
+ *addr_len = 2;
+ *dlci = ((GET_U_1(p) & 0xFC) << 2) | ((GET_U_1(p + 1) & 0xF0) >> 4);
+
+ *flags = ((GET_U_1(p) & 0x02) << 24) | /* CR flag */
+ ((GET_U_1(p + 1) & 0x0e) << 16); /* FECN,BECN,DE flags */
+
+ if (GET_U_1(p + 1) & FR_EA_BIT)
+ return 1; /* 2-byte Q.922 address */
+
+ p += 2;
+ length -= 2;
+ if (!ND_TTEST_1(p) || length < 1)
+ return -1;
+ (*addr_len)++; /* 3- or 4-byte Q.922 address */
+ if ((GET_U_1(p) & FR_EA_BIT) == 0) {
+ *dlci = (*dlci << 7) | (GET_U_1(p) >> 1);
+ (*addr_len)++; /* 4-byte Q.922 address */
+ p++;
+ length--;
+ }
+
+ if (!ND_TTEST_1(p) || length < 1)
+ return -1;
+ if ((GET_U_1(p) & FR_EA_BIT) == 0)
+ return 0; /* more than 4 bytes of Q.922 address? */
+
+ *flags = *flags | (GET_U_1(p) & 0x02); /* SDLC flag */
+
+ *dlci = (*dlci << 6) | (GET_U_1(p) >> 2);
+
+ return 1;
+}
+
+const char *
+q922_string(netdissect_options *ndo, const u_char *p, u_int length)
+{
+
+ static u_int dlci, addr_len;
+ static uint32_t flags;
+ static char buffer[sizeof("parse_q922_header() returned XXXXXXXXXXX")];
+ int ret;
+ memset(buffer, 0, sizeof(buffer));
+
+ ret = parse_q922_header(ndo, p, &dlci, &addr_len, &flags, length);
+ if (ret == 1) {
+ snprintf(buffer, sizeof(buffer), "DLCI %u", dlci);
+ return buffer;
+ } else if (ret == 0) {
+ return "<Invalid DLCI>";
+ } else if (ret == -1) {
+ return "<Truncated>";
+ } else {
+ snprintf(buffer, sizeof(buffer), "parse_q922_header() returned %d", ret);
+ return buffer;
+ }
+}
+
+
+/* Frame Relay packet structure, with flags and CRC removed
+
+ +---------------------------+
+ | Q.922 Address* |
+ +-- --+
+ | |
+ +---------------------------+
+ | Control (UI = 0x03) |
+ +---------------------------+
+ | Optional Pad (0x00) |
+ +---------------------------+
+ | NLPID |
+ +---------------------------+
+ | . |
+ | . |
+ | . |
+ | Data |
+ | . |
+ | . |
+ +---------------------------+
+
+ * Q.922 addresses, as presently defined, are two octets and
+ contain a 10-bit DLCI. In some networks Q.922 addresses
+ may optionally be increased to three or four octets.
+*/
+
+static void
+fr_hdr_print(netdissect_options *ndo, int length, u_int addr_len,
+ u_int dlci, uint32_t flags, uint16_t nlpid)
+{
+ if (ndo->ndo_qflag) {
+ ND_PRINT("Q.922, DLCI %u, length %u: ",
+ dlci,
+ length);
+ } else {
+ if (nlpid <= 0xff) /* if its smaller than 256 then its a NLPID */
+ ND_PRINT("Q.922, hdr-len %u, DLCI %u, Flags [%s], NLPID %s (0x%02x), length %u: ",
+ addr_len,
+ dlci,
+ bittok2str(fr_header_flag_values, "none", flags),
+ tok2str(nlpid_values,"unknown", nlpid),
+ nlpid,
+ length);
+ else /* must be an ethertype */
+ ND_PRINT("Q.922, hdr-len %u, DLCI %u, Flags [%s], cisco-ethertype %s (0x%04x), length %u: ",
+ addr_len,
+ dlci,
+ bittok2str(fr_header_flag_values, "none", flags),
+ tok2str(ethertype_values, "unknown", nlpid),
+ nlpid,
+ length);
+ }
+}
+
+/* Frame Relay */
+void
+fr_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int length = h->len;
+ u_int caplen = h->caplen;
+
+ ndo->ndo_protocol = "fr";
+ if (caplen < 4) { /* minimum frame header length */
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+
+ ndo->ndo_ll_hdr_len += fr_print(ndo, p, length);
+}
+
+u_int
+fr_print(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ int ret;
+ uint16_t extracted_ethertype;
+ u_int dlci;
+ u_int addr_len;
+ uint16_t nlpid;
+ u_int hdr_len;
+ uint32_t flags;
+
+ ndo->ndo_protocol = "fr";
+ ret = parse_q922_header(ndo, p, &dlci, &addr_len, &flags, length);
+ if (ret == -1)
+ goto trunc;
+ if (ret == 0) {
+ ND_PRINT("Q.922, invalid address");
+ return 0;
+ }
+
+ ND_TCHECK_1(p + addr_len);
+ if (length < addr_len + 1)
+ goto trunc;
+
+ if (GET_U_1(p + addr_len) != LLC_UI && dlci != 0) {
+ /*
+ * Let's figure out if we have Cisco-style encapsulation,
+ * with an Ethernet type (Cisco HDLC type?) following the
+ * address.
+ */
+ if (!ND_TTEST_2(p + addr_len) || length < addr_len + 2) {
+ /* no Ethertype */
+ ND_PRINT("UI %02x! ", GET_U_1(p + addr_len));
+ } else {
+ extracted_ethertype = GET_BE_U_2(p + addr_len);
+
+ if (ndo->ndo_eflag)
+ fr_hdr_print(ndo, length, addr_len, dlci,
+ flags, extracted_ethertype);
+
+ if (ethertype_print(ndo, extracted_ethertype,
+ p+addr_len+ETHERTYPE_LEN,
+ length-addr_len-ETHERTYPE_LEN,
+ ND_BYTES_AVAILABLE_AFTER(p)-addr_len-ETHERTYPE_LEN,
+ NULL, NULL) == 0)
+ /* ether_type not known, probably it wasn't one */
+ ND_PRINT("UI %02x! ", GET_U_1(p + addr_len));
+ else
+ return addr_len + 2;
+ }
+ }
+
+ ND_TCHECK_1(p + addr_len + 1);
+ if (length < addr_len + 2)
+ goto trunc;
+
+ if (GET_U_1(p + addr_len + 1) == 0) {
+ /*
+ * Assume a pad byte after the control (UI) byte.
+ * A pad byte should only be used with 3-byte Q.922.
+ */
+ if (addr_len != 3)
+ ND_PRINT("Pad! ");
+ hdr_len = addr_len + 1 /* UI */ + 1 /* pad */ + 1 /* NLPID */;
+ } else {
+ /*
+ * Not a pad byte.
+ * A pad byte should be used with 3-byte Q.922.
+ */
+ if (addr_len == 3)
+ ND_PRINT("No pad! ");
+ hdr_len = addr_len + 1 /* UI */ + 1 /* NLPID */;
+ }
+
+ ND_TCHECK_1(p + hdr_len - 1);
+ if (length < hdr_len)
+ goto trunc;
+ nlpid = GET_U_1(p + hdr_len - 1);
+
+ if (ndo->ndo_eflag)
+ fr_hdr_print(ndo, length, addr_len, dlci, flags, nlpid);
+ p += hdr_len;
+ length -= hdr_len;
+
+ switch (nlpid) {
+ case NLPID_IP:
+ ip_print(ndo, p, length);
+ break;
+
+ case NLPID_IP6:
+ ip6_print(ndo, p, length);
+ break;
+
+ case NLPID_CLNP:
+ case NLPID_ESIS:
+ case NLPID_ISIS:
+ isoclns_print(ndo, p - 1, length + 1); /* OSI printers need the NLPID field */
+ break;
+
+ case NLPID_SNAP:
+ if (snap_print(ndo, p, length, ND_BYTES_AVAILABLE_AFTER(p), NULL, NULL, 0) == 0) {
+ /* ether_type not known, print raw packet */
+ if (!ndo->ndo_eflag)
+ fr_hdr_print(ndo, length + hdr_len, hdr_len,
+ dlci, flags, nlpid);
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p - hdr_len, length + hdr_len);
+ }
+ break;
+
+ case NLPID_Q933:
+ q933_print(ndo, p, length);
+ break;
+
+ case NLPID_MFR:
+ frf15_print(ndo, p, length);
+ break;
+
+ case NLPID_PPP:
+ ppp_print(ndo, p, length);
+ break;
+
+ default:
+ if (!ndo->ndo_eflag)
+ fr_hdr_print(ndo, length + hdr_len, addr_len,
+ dlci, flags, nlpid);
+ if (!ndo->ndo_xflag)
+ ND_DEFAULTPRINT(p, length);
+ }
+
+ return hdr_len;
+
+trunc:
+ nd_print_trunc(ndo);
+ return 0;
+
+}
+
+/* Multi Link Frame Relay (FRF.16) */
+void
+mfr_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int length = h->len;
+ u_int caplen = h->caplen;
+
+ ndo->ndo_protocol = "mfr";
+ if (caplen < 2) { /* minimum frame header length */
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+
+ ndo->ndo_ll_hdr_len += mfr_print(ndo, p, length);
+}
+
+
+#define MFR_CTRL_MSG_ADD_LINK 1
+#define MFR_CTRL_MSG_ADD_LINK_ACK 2
+#define MFR_CTRL_MSG_ADD_LINK_REJ 3
+#define MFR_CTRL_MSG_HELLO 4
+#define MFR_CTRL_MSG_HELLO_ACK 5
+#define MFR_CTRL_MSG_REMOVE_LINK 6
+#define MFR_CTRL_MSG_REMOVE_LINK_ACK 7
+
+static const struct tok mfr_ctrl_msg_values[] = {
+ { MFR_CTRL_MSG_ADD_LINK, "Add Link" },
+ { MFR_CTRL_MSG_ADD_LINK_ACK, "Add Link ACK" },
+ { MFR_CTRL_MSG_ADD_LINK_REJ, "Add Link Reject" },
+ { MFR_CTRL_MSG_HELLO, "Hello" },
+ { MFR_CTRL_MSG_HELLO_ACK, "Hello ACK" },
+ { MFR_CTRL_MSG_REMOVE_LINK, "Remove Link" },
+ { MFR_CTRL_MSG_REMOVE_LINK_ACK, "Remove Link ACK" },
+ { 0, NULL }
+};
+
+#define MFR_CTRL_IE_BUNDLE_ID 1
+#define MFR_CTRL_IE_LINK_ID 2
+#define MFR_CTRL_IE_MAGIC_NUM 3
+#define MFR_CTRL_IE_TIMESTAMP 5
+#define MFR_CTRL_IE_VENDOR_EXT 6
+#define MFR_CTRL_IE_CAUSE 7
+
+static const struct tok mfr_ctrl_ie_values[] = {
+ { MFR_CTRL_IE_BUNDLE_ID, "Bundle ID"},
+ { MFR_CTRL_IE_LINK_ID, "Link ID"},
+ { MFR_CTRL_IE_MAGIC_NUM, "Magic Number"},
+ { MFR_CTRL_IE_TIMESTAMP, "Timestamp"},
+ { MFR_CTRL_IE_VENDOR_EXT, "Vendor Extension"},
+ { MFR_CTRL_IE_CAUSE, "Cause"},
+ { 0, NULL }
+};
+
+#define MFR_ID_STRING_MAXLEN 50
+
+struct ie_tlv_header_t {
+ uint8_t ie_type;
+ uint8_t ie_len;
+};
+
+u_int
+mfr_print(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ u_int tlen,idx,hdr_len = 0;
+ uint16_t sequence_num;
+ uint8_t ie_type,ie_len;
+ const uint8_t *tptr;
+
+
+/*
+ * FRF.16 Link Integrity Control Frame
+ *
+ * 7 6 5 4 3 2 1 0
+ * +----+----+----+----+----+----+----+----+
+ * | B | E | C=1| 0 0 0 0 | EA |
+ * +----+----+----+----+----+----+----+----+
+ * | 0 0 0 0 0 0 0 0 |
+ * +----+----+----+----+----+----+----+----+
+ * | message type |
+ * +----+----+----+----+----+----+----+----+
+ */
+
+ ndo->ndo_protocol = "mfr";
+
+ if (length < 4) { /* minimum frame header length */
+ ND_PRINT("[length %u < 4]", length);
+ nd_print_invalid(ndo);
+ return length;
+ }
+ ND_TCHECK_4(p);
+
+ if ((GET_U_1(p) & MFR_BEC_MASK) == MFR_CTRL_FRAME && GET_U_1(p + 1) == 0) {
+ ND_PRINT("FRF.16 Control, Flags [%s], %s, length %u",
+ bittok2str(frf_flag_values,"none",(GET_U_1(p) & MFR_BEC_MASK)),
+ tok2str(mfr_ctrl_msg_values,"Unknown Message (0x%02x)",GET_U_1(p + 2)),
+ length);
+ tptr = p + 3;
+ tlen = length -3;
+ hdr_len = 3;
+
+ if (!ndo->ndo_vflag)
+ return hdr_len;
+
+ while (tlen>sizeof(struct ie_tlv_header_t)) {
+ ND_TCHECK_LEN(tptr, sizeof(struct ie_tlv_header_t));
+ ie_type=GET_U_1(tptr);
+ ie_len=GET_U_1(tptr + 1);
+
+ ND_PRINT("\n\tIE %s (%u), length %u: ",
+ tok2str(mfr_ctrl_ie_values,"Unknown",ie_type),
+ ie_type,
+ ie_len);
+
+ /* infinite loop check */
+ if (ie_type == 0 || ie_len <= sizeof(struct ie_tlv_header_t))
+ return hdr_len;
+
+ ND_TCHECK_LEN(tptr, ie_len);
+ tptr+=sizeof(struct ie_tlv_header_t);
+ /* tlv len includes header */
+ ie_len-=sizeof(struct ie_tlv_header_t);
+ tlen-=sizeof(struct ie_tlv_header_t);
+
+ switch (ie_type) {
+
+ case MFR_CTRL_IE_MAGIC_NUM:
+ /* FRF.16.1 Section 3.4.3 Magic Number Information Element */
+ if (ie_len != 4) {
+ ND_PRINT("[IE data length %d != 4]", ie_len);
+ nd_print_invalid(ndo);
+ break;
+ }
+ ND_PRINT("0x%08x", GET_BE_U_4(tptr));
+ break;
+
+ case MFR_CTRL_IE_BUNDLE_ID: /* same message format */
+ case MFR_CTRL_IE_LINK_ID:
+ for (idx = 0; idx < ie_len && idx < MFR_ID_STRING_MAXLEN; idx++) {
+ if (GET_U_1(tptr + idx) != 0) /* don't print null termination */
+ fn_print_char(ndo, GET_U_1(tptr + idx));
+ else
+ break;
+ }
+ break;
+
+ case MFR_CTRL_IE_TIMESTAMP:
+ if (ie_len == sizeof(struct timeval)) {
+ ts_print(ndo, (const struct timeval *)tptr);
+ break;
+ }
+ /* fall through and hexdump if no unix timestamp */
+ ND_FALL_THROUGH;
+
+ /*
+ * FIXME those are the defined IEs that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+
+ case MFR_CTRL_IE_VENDOR_EXT:
+ case MFR_CTRL_IE_CAUSE:
+
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, tptr, "\n\t ", ie_len);
+ break;
+ }
+
+ /* do we want to see a hexdump of the IE ? */
+ if (ndo->ndo_vflag > 1 )
+ print_unknown_data(ndo, tptr, "\n\t ", ie_len);
+
+ tlen-=ie_len;
+ tptr+=ie_len;
+ }
+ return hdr_len;
+ }
+/*
+ * FRF.16 Fragmentation Frame
+ *
+ * 7 6 5 4 3 2 1 0
+ * +----+----+----+----+----+----+----+----+
+ * | B | E | C=0|seq. (high 4 bits) | EA |
+ * +----+----+----+----+----+----+----+----+
+ * | sequence (low 8 bits) |
+ * +----+----+----+----+----+----+----+----+
+ * | DLCI (6 bits) | CR | EA |
+ * +----+----+----+----+----+----+----+----+
+ * | DLCI (4 bits) |FECN|BECN| DE | EA |
+ * +----+----+----+----+----+----+----+----+
+ */
+
+ sequence_num = (GET_U_1(p)&0x1e)<<7 | GET_U_1(p + 1);
+ /* whole packet or first fragment ? */
+ if ((GET_U_1(p) & MFR_BEC_MASK) == MFR_FRAG_FRAME ||
+ (GET_U_1(p) & MFR_BEC_MASK) == MFR_B_BIT) {
+ ND_PRINT("FRF.16 Frag, seq %u, Flags [%s], ",
+ sequence_num,
+ bittok2str(frf_flag_values,"none",(GET_U_1(p) & MFR_BEC_MASK)));
+ hdr_len = 2;
+ fr_print(ndo, p+hdr_len,length-hdr_len);
+ return hdr_len;
+ }
+
+ /* must be a middle or the last fragment */
+ ND_PRINT("FRF.16 Frag, seq %u, Flags [%s]",
+ sequence_num,
+ bittok2str(frf_flag_values,"none",(GET_U_1(p) & MFR_BEC_MASK)));
+ print_unknown_data(ndo, p, "\n\t", length);
+
+ return hdr_len;
+
+trunc:
+ nd_print_trunc(ndo);
+ return length;
+}
+
+/* an NLPID of 0xb1 indicates a 2-byte
+ * FRF.15 header
+ *
+ * 7 6 5 4 3 2 1 0
+ * +----+----+----+----+----+----+----+----+
+ * ~ Q.922 header ~
+ * +----+----+----+----+----+----+----+----+
+ * | NLPID (8 bits) | NLPID=0xb1
+ * +----+----+----+----+----+----+----+----+
+ * | B | E | C |seq. (high 4 bits) | R |
+ * +----+----+----+----+----+----+----+----+
+ * | sequence (low 8 bits) |
+ * +----+----+----+----+----+----+----+----+
+ */
+
+#define FR_FRF15_FRAGTYPE 0x01
+
+static void
+frf15_print(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ uint16_t sequence_num, flags;
+
+ if (length < 2)
+ goto trunc;
+
+ flags = GET_U_1(p)&MFR_BEC_MASK;
+ sequence_num = (GET_U_1(p)&0x1e)<<7 | GET_U_1(p + 1);
+
+ ND_PRINT("FRF.15, seq 0x%03x, Flags [%s],%s Fragmentation, length %u",
+ sequence_num,
+ bittok2str(frf_flag_values,"none",flags),
+ GET_U_1(p)&FR_FRF15_FRAGTYPE ? "Interface" : "End-to-End",
+ length);
+
+/* TODO:
+ * depending on all permutations of the B, E and C bit
+ * dig as deep as we can - e.g. on the first (B) fragment
+ * there is enough payload to print the IP header
+ * on non (B) fragments it depends if the fragmentation
+ * model is end-to-end or interface based whether we want to print
+ * another Q.922 header
+ */
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+/*
+ * Q.933 decoding portion for framerelay specific.
+ */
+
+/* Q.933 packet format
+ Format of Other Protocols
+ using Q.933 NLPID
+ +-------------------------------+
+ | Q.922 Address |
+ +---------------+---------------+
+ |Control 0x03 | NLPID 0x08 |
+ +---------------+---------------+
+ | L2 Protocol ID |
+ | octet 1 | octet 2 |
+ +-------------------------------+
+ | L3 Protocol ID |
+ | octet 2 | octet 2 |
+ +-------------------------------+
+ | Protocol Data |
+ +-------------------------------+
+ | FCS |
+ +-------------------------------+
+ */
+
+/* L2 (Octet 1)- Call Reference Usually is 0x0 */
+
+/*
+ * L2 (Octet 2)- Message Types definition 1 byte long.
+ */
+/* Call Establish */
+#define MSG_TYPE_ESC_TO_NATIONAL 0x00
+#define MSG_TYPE_ALERT 0x01
+#define MSG_TYPE_CALL_PROCEEDING 0x02
+#define MSG_TYPE_CONNECT 0x07
+#define MSG_TYPE_CONNECT_ACK 0x0F
+#define MSG_TYPE_PROGRESS 0x03
+#define MSG_TYPE_SETUP 0x05
+/* Call Clear */
+#define MSG_TYPE_DISCONNECT 0x45
+#define MSG_TYPE_RELEASE 0x4D
+#define MSG_TYPE_RELEASE_COMPLETE 0x5A
+#define MSG_TYPE_RESTART 0x46
+#define MSG_TYPE_RESTART_ACK 0x4E
+/* Status */
+#define MSG_TYPE_STATUS 0x7D
+#define MSG_TYPE_STATUS_ENQ 0x75
+
+static const struct tok fr_q933_msg_values[] = {
+ { MSG_TYPE_ESC_TO_NATIONAL, "ESC to National" },
+ { MSG_TYPE_ALERT, "Alert" },
+ { MSG_TYPE_CALL_PROCEEDING, "Call proceeding" },
+ { MSG_TYPE_CONNECT, "Connect" },
+ { MSG_TYPE_CONNECT_ACK, "Connect ACK" },
+ { MSG_TYPE_PROGRESS, "Progress" },
+ { MSG_TYPE_SETUP, "Setup" },
+ { MSG_TYPE_DISCONNECT, "Disconnect" },
+ { MSG_TYPE_RELEASE, "Release" },
+ { MSG_TYPE_RELEASE_COMPLETE, "Release Complete" },
+ { MSG_TYPE_RESTART, "Restart" },
+ { MSG_TYPE_RESTART_ACK, "Restart ACK" },
+ { MSG_TYPE_STATUS, "Status Reply" },
+ { MSG_TYPE_STATUS_ENQ, "Status Enquiry" },
+ { 0, NULL }
+};
+
+#define IE_IS_SINGLE_OCTET(iecode) ((iecode) & 0x80)
+#define IE_IS_SHIFT(iecode) (((iecode) & 0xF0) == 0x90)
+#define IE_SHIFT_IS_NON_LOCKING(iecode) ((iecode) & 0x08)
+#define IE_SHIFT_IS_LOCKING(iecode) (!(IE_SHIFT_IS_NON_LOCKING(iecode)))
+#define IE_SHIFT_CODESET(iecode) ((iecode) & 0x07)
+
+#define FR_LMI_ANSI_REPORT_TYPE_IE 0x01
+#define FR_LMI_ANSI_LINK_VERIFY_IE_91 0x19 /* details? */
+#define FR_LMI_ANSI_LINK_VERIFY_IE 0x03
+#define FR_LMI_ANSI_PVC_STATUS_IE 0x07
+
+#define FR_LMI_CCITT_REPORT_TYPE_IE 0x51
+#define FR_LMI_CCITT_LINK_VERIFY_IE 0x53
+#define FR_LMI_CCITT_PVC_STATUS_IE 0x57
+
+static const struct tok fr_q933_ie_values_codeset_0_5[] = {
+ { FR_LMI_ANSI_REPORT_TYPE_IE, "ANSI Report Type" },
+ { FR_LMI_ANSI_LINK_VERIFY_IE_91, "ANSI Link Verify" },
+ { FR_LMI_ANSI_LINK_VERIFY_IE, "ANSI Link Verify" },
+ { FR_LMI_ANSI_PVC_STATUS_IE, "ANSI PVC Status" },
+ { FR_LMI_CCITT_REPORT_TYPE_IE, "CCITT Report Type" },
+ { FR_LMI_CCITT_LINK_VERIFY_IE, "CCITT Link Verify" },
+ { FR_LMI_CCITT_PVC_STATUS_IE, "CCITT PVC Status" },
+ { 0, NULL }
+};
+
+#define FR_LMI_REPORT_TYPE_IE_FULL_STATUS 0
+#define FR_LMI_REPORT_TYPE_IE_LINK_VERIFY 1
+#define FR_LMI_REPORT_TYPE_IE_ASYNC_PVC 2
+
+static const struct tok fr_lmi_report_type_ie_values[] = {
+ { FR_LMI_REPORT_TYPE_IE_FULL_STATUS, "Full Status" },
+ { FR_LMI_REPORT_TYPE_IE_LINK_VERIFY, "Link verify" },
+ { FR_LMI_REPORT_TYPE_IE_ASYNC_PVC, "Async PVC Status" },
+ { 0, NULL }
+};
+
+/* array of 16 codesets - currently we only support codepage 0 and 5 */
+static const struct tok *fr_q933_ie_codesets[] = {
+ fr_q933_ie_values_codeset_0_5,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ fr_q933_ie_values_codeset_0_5,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static int fr_q933_print_ie_codeset_0_5(netdissect_options *ndo, u_int iecode,
+ u_int ielength, const u_char *p);
+
+typedef int (*codeset_pr_func_t)(netdissect_options *, u_int iecode,
+ u_int ielength, const u_char *p);
+
+/* array of 16 codesets - currently we only support codepage 0 and 5 */
+static const codeset_pr_func_t fr_q933_print_ie_codeset[] = {
+ fr_q933_print_ie_codeset_0_5,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ fr_q933_print_ie_codeset_0_5,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+/*
+ * ITU-T Q.933.
+ *
+ * p points to octet 2, the octet containing the length of the
+ * call reference value, so p[n] is octet n+2 ("octet X" is as
+ * used in Q.931/Q.933).
+ *
+ * XXX - actually used both for Q.931 and Q.933.
+ */
+void
+q933_print(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ u_int olen;
+ u_int call_ref_length, i;
+ uint8_t call_ref[15]; /* maximum length - length field is 4 bits */
+ u_int msgtype;
+ u_int iecode;
+ u_int ielength;
+ u_int codeset = 0;
+ u_int is_ansi = 0;
+ u_int ie_is_known;
+ u_int non_locking_shift;
+ u_int unshift_codeset;
+
+ ndo->ndo_protocol = "q.933";
+ ND_PRINT("%s", ndo->ndo_eflag ? "" : "Q.933");
+
+ if (length == 0 || !ND_TTEST_1(p)) {
+ if (!ndo->ndo_eflag)
+ ND_PRINT(", ");
+ ND_PRINT("length %u", length);
+ goto trunc;
+ }
+
+ /*
+ * Get the length of the call reference value.
+ */
+ olen = length; /* preserve the original length for display */
+ call_ref_length = GET_U_1(p) & 0x0f;
+ p++;
+ length--;
+
+ /*
+ * Get the call reference value.
+ */
+ for (i = 0; i < call_ref_length; i++) {
+ if (length == 0 || !ND_TTEST_1(p)) {
+ if (!ndo->ndo_eflag)
+ ND_PRINT(", ");
+ ND_PRINT("length %u", olen);
+ goto trunc;
+ }
+ call_ref[i] = GET_U_1(p);
+ p++;
+ length--;
+ }
+
+ /*
+ * Get the message type.
+ */
+ if (length == 0 || !ND_TTEST_1(p)) {
+ if (!ndo->ndo_eflag)
+ ND_PRINT(", ");
+ ND_PRINT("length %u", olen);
+ goto trunc;
+ }
+ msgtype = GET_U_1(p);
+ p++;
+ length--;
+
+ /*
+ * Peek ahead to see if we start with a shift.
+ */
+ non_locking_shift = 0;
+ unshift_codeset = codeset;
+ if (length != 0) {
+ if (!ND_TTEST_1(p)) {
+ if (!ndo->ndo_eflag)
+ ND_PRINT(", ");
+ ND_PRINT("length %u", olen);
+ goto trunc;
+ }
+ iecode = GET_U_1(p);
+ if (IE_IS_SHIFT(iecode)) {
+ /*
+ * It's a shift. Skip over it.
+ */
+ p++;
+ length--;
+
+ /*
+ * Get the codeset.
+ */
+ codeset = IE_SHIFT_CODESET(iecode);
+
+ /*
+ * If it's a locking shift to codeset 5,
+ * mark this as ANSI. (XXX - 5 is actually
+ * for national variants in general, not
+ * the US variant in particular, but maybe
+ * this is more American exceptionalism. :-))
+ */
+ if (IE_SHIFT_IS_LOCKING(iecode)) {
+ /*
+ * It's a locking shift.
+ */
+ if (codeset == 5) {
+ /*
+ * It's a locking shift to
+ * codeset 5, so this is
+ * T1.617 Annex D.
+ */
+ is_ansi = 1;
+ }
+ } else {
+ /*
+ * It's a non-locking shift.
+ * Remember the current codeset, so we
+ * can revert to it after the next IE.
+ */
+ non_locking_shift = 1;
+ unshift_codeset = 0;
+ }
+ }
+ }
+
+ /* printing out header part */
+ if (!ndo->ndo_eflag)
+ ND_PRINT(", ");
+ ND_PRINT("%s, codeset %u", is_ansi ? "ANSI" : "CCITT", codeset);
+
+ if (call_ref_length != 0) {
+ if (call_ref_length > 1 || GET_U_1(p) != 0) {
+ /*
+ * Not a dummy call reference.
+ */
+ ND_PRINT(", Call Ref: 0x");
+ for (i = 0; i < call_ref_length; i++)
+ ND_PRINT("%02x", call_ref[i]);
+ }
+ }
+ if (ndo->ndo_vflag) {
+ ND_PRINT(", %s (0x%02x), length %u",
+ tok2str(fr_q933_msg_values,
+ "unknown message", msgtype),
+ msgtype,
+ olen);
+ } else {
+ ND_PRINT(", %s",
+ tok2str(fr_q933_msg_values,
+ "unknown message 0x%02x", msgtype));
+ }
+
+ /* Loop through the rest of the IEs */
+ while (length != 0) {
+ /*
+ * What's the state of any non-locking shifts?
+ */
+ if (non_locking_shift == 1) {
+ /*
+ * There's a non-locking shift in effect for
+ * this IE. Count it, so we reset the codeset
+ * before the next IE.
+ */
+ non_locking_shift = 2;
+ } else if (non_locking_shift == 2) {
+ /*
+ * Unshift.
+ */
+ codeset = unshift_codeset;
+ non_locking_shift = 0;
+ }
+
+ /*
+ * Get the first octet of the IE.
+ */
+ if (!ND_TTEST_1(p)) {
+ if (!ndo->ndo_vflag) {
+ ND_PRINT(", length %u", olen);
+ }
+ goto trunc;
+ }
+ iecode = GET_U_1(p);
+ p++;
+ length--;
+
+ /* Single-octet IE? */
+ if (IE_IS_SINGLE_OCTET(iecode)) {
+ /*
+ * Yes. Is it a shift?
+ */
+ if (IE_IS_SHIFT(iecode)) {
+ /*
+ * Yes. Is it locking?
+ */
+ if (IE_SHIFT_IS_LOCKING(iecode)) {
+ /*
+ * Yes.
+ */
+ non_locking_shift = 0;
+ } else {
+ /*
+ * No. Remember the current
+ * codeset, so we can revert
+ * to it after the next IE.
+ */
+ non_locking_shift = 1;
+ unshift_codeset = codeset;
+ }
+
+ /*
+ * Get the codeset.
+ */
+ codeset = IE_SHIFT_CODESET(iecode);
+ }
+ } else {
+ /*
+ * No. Get the IE length.
+ */
+ if (length == 0 || !ND_TTEST_1(p)) {
+ if (!ndo->ndo_vflag) {
+ ND_PRINT(", length %u", olen);
+ }
+ goto trunc;
+ }
+ ielength = GET_U_1(p);
+ p++;
+ length--;
+
+ /* lets do the full IE parsing only in verbose mode
+ * however some IEs (DLCI Status, Link Verify)
+ * are also interesting in non-verbose mode */
+ if (ndo->ndo_vflag) {
+ ND_PRINT("\n\t%s IE (0x%02x), length %u: ",
+ tok2str(fr_q933_ie_codesets[codeset],
+ "unknown", iecode),
+ iecode,
+ ielength);
+ }
+
+ /* sanity checks */
+ if (iecode == 0 || ielength == 0) {
+ return;
+ }
+ if (length < ielength || !ND_TTEST_LEN(p, ielength)) {
+ if (!ndo->ndo_vflag) {
+ ND_PRINT(", length %u", olen);
+ }
+ goto trunc;
+ }
+
+ ie_is_known = 0;
+ if (fr_q933_print_ie_codeset[codeset] != NULL) {
+ ie_is_known = fr_q933_print_ie_codeset[codeset](ndo, iecode, ielength, p);
+ }
+
+ if (ie_is_known) {
+ /*
+ * Known IE; do we want to see a hexdump
+ * of it?
+ */
+ if (ndo->ndo_vflag > 1) {
+ /* Yes. */
+ print_unknown_data(ndo, p, "\n\t ", ielength);
+ }
+ } else {
+ /*
+ * Unknown IE; if we're printing verbosely,
+ * print its content in hex.
+ */
+ if (ndo->ndo_vflag >= 1) {
+ print_unknown_data(ndo, p, "\n\t", ielength);
+ }
+ }
+
+ length -= ielength;
+ p += ielength;
+ }
+ }
+ if (!ndo->ndo_vflag) {
+ ND_PRINT(", length %u", olen);
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static int
+fr_q933_print_ie_codeset_0_5(netdissect_options *ndo, u_int iecode,
+ u_int ielength, const u_char *p)
+{
+ u_int dlci;
+
+ switch (iecode) {
+
+ case FR_LMI_ANSI_REPORT_TYPE_IE: /* fall through */
+ case FR_LMI_CCITT_REPORT_TYPE_IE:
+ if (ielength < 1) {
+ if (!ndo->ndo_vflag) {
+ ND_PRINT(", ");
+ }
+ ND_PRINT("Invalid REPORT TYPE IE");
+ return 1;
+ }
+ if (ndo->ndo_vflag) {
+ ND_PRINT("%s (%u)",
+ tok2str(fr_lmi_report_type_ie_values,"unknown",GET_U_1(p)),
+ GET_U_1(p));
+ }
+ return 1;
+
+ case FR_LMI_ANSI_LINK_VERIFY_IE: /* fall through */
+ case FR_LMI_CCITT_LINK_VERIFY_IE:
+ case FR_LMI_ANSI_LINK_VERIFY_IE_91:
+ if (!ndo->ndo_vflag) {
+ ND_PRINT(", ");
+ }
+ if (ielength < 2) {
+ ND_PRINT("Invalid LINK VERIFY IE");
+ return 1;
+ }
+ ND_PRINT("TX Seq: %3d, RX Seq: %3d", GET_U_1(p), GET_U_1(p + 1));
+ return 1;
+
+ case FR_LMI_ANSI_PVC_STATUS_IE: /* fall through */
+ case FR_LMI_CCITT_PVC_STATUS_IE:
+ if (!ndo->ndo_vflag) {
+ ND_PRINT(", ");
+ }
+ /* now parse the DLCI information element. */
+ if ((ielength < 3) ||
+ (GET_U_1(p) & 0x80) ||
+ ((ielength == 3) && !(GET_U_1(p + 1) & 0x80)) ||
+ ((ielength == 4) &&
+ ((GET_U_1(p + 1) & 0x80) || !(GET_U_1(p + 2) & 0x80))) ||
+ ((ielength == 5) &&
+ ((GET_U_1(p + 1) & 0x80) || (GET_U_1(p + 2) & 0x80) ||
+ !(GET_U_1(p + 3) & 0x80))) ||
+ (ielength > 5) ||
+ !(GET_U_1(p + ielength - 1) & 0x80)) {
+ ND_PRINT("Invalid DLCI in PVC STATUS IE");
+ return 1;
+ }
+
+ dlci = ((GET_U_1(p) & 0x3F) << 4) | ((GET_U_1(p + 1) & 0x78) >> 3);
+ if (ielength == 4) {
+ dlci = (dlci << 6) | ((GET_U_1(p + 2) & 0x7E) >> 1);
+ }
+ else if (ielength == 5) {
+ dlci = (dlci << 13) | (GET_U_1(p + 2) & 0x7F) | ((GET_U_1(p + 3) & 0x7E) >> 1);
+ }
+
+ ND_PRINT("DLCI %u: status %s%s", dlci,
+ GET_U_1(p + ielength - 1) & 0x8 ? "New, " : "",
+ GET_U_1(p + ielength - 1) & 0x2 ? "Active" : "Inactive");
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/print-frag6.c b/print-frag6.c
new file mode 100644
index 0000000..16e8a4b
--- /dev/null
+++ b/print-frag6.c
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IPv6 fragmentation header printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+#include "ip6.h"
+
+int
+frag6_print(netdissect_options *ndo, const u_char *bp, const u_char *bp2)
+{
+ const struct ip6_frag *dp;
+ const struct ip6_hdr *ip6;
+
+ ndo->ndo_protocol = "frag6";
+ dp = (const struct ip6_frag *)bp;
+ ip6 = (const struct ip6_hdr *)bp2;
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT("frag (0x%08x:%u|%zu)",
+ GET_BE_U_4(dp->ip6f_ident),
+ GET_BE_U_2(dp->ip6f_offlg) & IP6F_OFF_MASK,
+ sizeof(struct ip6_hdr) + GET_BE_U_2(ip6->ip6_plen) -
+ (bp - bp2) - sizeof(struct ip6_frag));
+ } else {
+ ND_PRINT("frag (%u|%zu)",
+ GET_BE_U_2(dp->ip6f_offlg) & IP6F_OFF_MASK,
+ sizeof(struct ip6_hdr) + GET_BE_U_2(ip6->ip6_plen) -
+ (bp - bp2) - sizeof(struct ip6_frag));
+ }
+
+ /* it is meaningless to decode non-first fragment */
+ if ((GET_BE_U_2(dp->ip6f_offlg) & IP6F_OFF_MASK) != 0)
+ return -1;
+ else
+ {
+ ND_PRINT(" ");
+ return sizeof(struct ip6_frag);
+ }
+}
diff --git a/print-ftp.c b/print-ftp.c
new file mode 100644
index 0000000..b55937b
--- /dev/null
+++ b/print-ftp.c
@@ -0,0 +1,29 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: File Transfer Protocol (FTP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+
+void
+ftp_print(netdissect_options *ndo, const u_char *pptr, u_int len)
+{
+ ndo->ndo_protocol = "ftp";
+ txtproto_print(ndo, pptr, len, NULL, 0);
+}
diff --git a/print-geneve.c b/print-geneve.c
new file mode 100644
index 0000000..0b7ff6e
--- /dev/null
+++ b/print-geneve.c
@@ -0,0 +1,244 @@
+/*
+ * Copyright (c) 2014 VMware, Inc. All Rights Reserved.
+ *
+ * Jesse Gross <jesse@nicira.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Generic Network Virtualization Encapsulation (Geneve) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "ethertype.h"
+
+/*
+ * Geneve header, draft-ietf-nvo3-geneve
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Ver| Opt Len |O|C| Rsvd. | Protocol Type |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Virtual Network Identifier (VNI) | Reserved |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Variable Length Options |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * Options:
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Option Class | Type |R|R|R| Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Variable Option Data |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+#define VER_SHIFT 6
+#define HDR_OPTS_LEN_MASK 0x3F
+
+#define FLAG_OAM (1 << 7)
+#define FLAG_CRITICAL (1 << 6)
+#define FLAG_R1 (1 << 5)
+#define FLAG_R2 (1 << 4)
+#define FLAG_R3 (1 << 3)
+#define FLAG_R4 (1 << 2)
+#define FLAG_R5 (1 << 1)
+#define FLAG_R6 (1 << 0)
+
+#define OPT_TYPE_CRITICAL (1 << 7)
+#define OPT_LEN_MASK 0x1F
+
+static const struct tok geneve_flag_values[] = {
+ { FLAG_OAM, "O" },
+ { FLAG_CRITICAL, "C" },
+ { FLAG_R1, "R1" },
+ { FLAG_R2, "R2" },
+ { FLAG_R3, "R3" },
+ { FLAG_R4, "R4" },
+ { FLAG_R5, "R5" },
+ { FLAG_R6, "R6" },
+ { 0, NULL }
+};
+
+static const char *
+format_opt_class(uint16_t opt_class)
+{
+ switch (opt_class) {
+ case 0x0100:
+ return "Linux";
+ case 0x0101:
+ return "Open vSwitch";
+ case 0x0102:
+ return "Open Virtual Networking (OVN)";
+ case 0x0103:
+ return "In-band Network Telemetry (INT)";
+ case 0x0104:
+ return "VMware";
+ default:
+ if (opt_class <= 0x00ff)
+ return "Standard";
+ else if (opt_class >= 0xfff0)
+ return "Experimental";
+ }
+
+ return "Unknown";
+}
+
+static void
+geneve_opts_print(netdissect_options *ndo, const u_char *bp, u_int len)
+{
+ const char *sep = "";
+
+ while (len > 0) {
+ uint16_t opt_class;
+ uint8_t opt_type;
+ uint8_t opt_len;
+
+ ND_PRINT("%s", sep);
+ sep = ", ";
+
+ opt_class = GET_BE_U_2(bp);
+ opt_type = GET_U_1(bp + 2);
+ opt_len = 4 + ((GET_U_1(bp + 3) & OPT_LEN_MASK) * 4);
+
+ ND_PRINT("class %s (0x%x) type 0x%x%s len %u",
+ format_opt_class(opt_class), opt_class, opt_type,
+ opt_type & OPT_TYPE_CRITICAL ? "(C)" : "", opt_len);
+
+ if (opt_len > len) {
+ ND_PRINT(" [bad length]");
+ return;
+ }
+
+ if (ndo->ndo_vflag > 1 && opt_len > 4) {
+ const uint32_t *data = (const uint32_t *)(bp + 4);
+ int i;
+
+ ND_PRINT(" data");
+
+ for (i = 4; i < opt_len; i += 4) {
+ ND_PRINT(" %08x", GET_BE_U_4(data));
+ data++;
+ }
+ }
+
+ bp += opt_len;
+ len -= opt_len;
+ }
+}
+
+void
+geneve_print(netdissect_options *ndo, const u_char *bp, u_int len)
+{
+ uint8_t ver_opt;
+ u_int version;
+ uint8_t flags;
+ uint16_t prot;
+ uint32_t vni;
+ uint8_t reserved;
+ u_int opts_len;
+
+ ndo->ndo_protocol = "geneve";
+ ND_PRINT("Geneve");
+
+ if (len < 8) {
+ ND_PRINT(" [length %u < 8]", len);
+ nd_print_invalid(ndo);
+ return;
+ }
+
+ ND_TCHECK_8(bp);
+
+ ver_opt = GET_U_1(bp);
+ bp += 1;
+ len -= 1;
+
+ version = ver_opt >> VER_SHIFT;
+ if (version != 0) {
+ ND_PRINT(" ERROR: unknown-version %u", version);
+ return;
+ }
+
+ flags = GET_U_1(bp);
+ bp += 1;
+ len -= 1;
+
+ prot = GET_BE_U_2(bp);
+ bp += 2;
+ len -= 2;
+
+ vni = GET_BE_U_3(bp);
+ bp += 3;
+ len -= 3;
+
+ reserved = GET_U_1(bp);
+ bp += 1;
+ len -= 1;
+
+ ND_PRINT(", Flags [%s]",
+ bittok2str_nosep(geneve_flag_values, "none", flags));
+ ND_PRINT(", vni 0x%x", vni);
+
+ if (reserved)
+ ND_PRINT(", rsvd 0x%x", reserved);
+
+ if (ndo->ndo_eflag)
+ ND_PRINT(", proto %s (0x%04x)",
+ tok2str(ethertype_values, "unknown", prot), prot);
+
+ opts_len = (ver_opt & HDR_OPTS_LEN_MASK) * 4;
+
+ if (len < opts_len) {
+ ND_PRINT(" truncated-geneve - %u bytes missing",
+ opts_len - len);
+ return;
+ }
+
+ ND_TCHECK_LEN(bp, opts_len);
+
+ if (opts_len > 0) {
+ ND_PRINT(", options [");
+
+ if (ndo->ndo_vflag)
+ geneve_opts_print(ndo, bp, opts_len);
+ else
+ ND_PRINT("%u bytes", opts_len);
+
+ ND_PRINT("]");
+ }
+
+ bp += opts_len;
+ len -= opts_len;
+
+ if (ndo->ndo_vflag < 1)
+ ND_PRINT(": ");
+ else
+ ND_PRINT("\n\t");
+
+ if (ethertype_print(ndo, prot, bp, len, ND_BYTES_AVAILABLE_AFTER(bp), NULL, NULL) == 0) {
+ if (prot == ETHERTYPE_TEB)
+ ether_print(ndo, bp, len, ND_BYTES_AVAILABLE_AFTER(bp), NULL, NULL);
+ else
+ ND_PRINT("geneve-proto-0x%x", prot);
+ }
+
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-geonet.c b/print-geonet.c
new file mode 100644
index 0000000..2f8046e
--- /dev/null
+++ b/print-geonet.c
@@ -0,0 +1,267 @@
+/*
+ * Copyright (c) 2013 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Ola Martin Lykkja (ola.lykkja@q-free.com)
+ */
+
+/* \summary: ISO CALM FAST and ETSI GeoNetworking printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+
+/*
+ ETSI TS 102 636-5-1 V1.1.1 (2011-02)
+ Intelligent Transport Systems (ITS); Vehicular Communications; GeoNetworking;
+ Part 5: Transport Protocols; Sub-part 1: Basic Transport Protocol
+
+ ETSI TS 102 636-4-1 V1.1.1 (2011-06)
+ Intelligent Transport Systems (ITS); Vehicular communications; GeoNetworking;
+ Part 4: Geographical addressing and forwarding for point-to-point and point-to-multipoint communications;
+ Sub-part 1: Media-Independent Functionality
+*/
+
+#define GEONET_ADDR_LEN 8
+
+static const struct tok msg_type_values[] = {
+ { 0, "CAM" },
+ { 1, "DENM" },
+ { 101, "TPEGM" },
+ { 102, "TSPDM" },
+ { 103, "VPM" },
+ { 104, "SRM" },
+ { 105, "SLAM" },
+ { 106, "ecoCAM" },
+ { 107, "ITM" },
+ { 150, "SA" },
+ { 0, NULL }
+};
+
+static void
+print_btp_body(netdissect_options *ndo,
+ const u_char *bp)
+{
+ u_int msg_type;
+
+ /* Assuming ItsPduHeader */
+ ND_PRINT("; ItsPduHeader v:%u", GET_U_1(bp));
+
+ msg_type = GET_U_1(bp + 1);
+ ND_PRINT(" t:%u-%s", msg_type,
+ tok2str(msg_type_values, "unknown (%u)", msg_type));
+}
+
+/* EN 302 636-5-1 V2.2.1 Section 7.2: BTP-A header */
+static void
+print_btp(netdissect_options *ndo,
+ const u_char *bp)
+{
+ ND_PRINT("; BTP Dst:%u", GET_BE_U_2(bp + 0));
+ ND_PRINT(" Src:%u", GET_BE_U_2(bp + 2));
+}
+
+static void
+print_long_pos_vector(netdissect_options *ndo,
+ const u_char *bp)
+{
+ ND_PRINT("GN_ADDR:%s ", GET_LINKADDR_STRING(bp, LINKADDR_OTHER, GEONET_ADDR_LEN));
+ ND_PRINT("lat:%u ", GET_BE_U_4(bp + 12));
+ ND_PRINT("lon:%u", GET_BE_U_4(bp + 16));
+}
+
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the geonet header of the packet.
+ */
+void
+geonet_print(netdissect_options *ndo, const u_char *bp, u_int length,
+ const struct lladdr_info *src)
+{
+ u_int version;
+ u_int next_hdr;
+ u_int hdr_type;
+ u_int hdr_subtype;
+ uint16_t payload_length;
+ u_int hop_limit;
+ const char *next_hdr_txt = "Unknown";
+ const char *hdr_type_txt = "Unknown";
+ int hdr_size = -1;
+
+ ndo->ndo_protocol = "geonet";
+ ND_PRINT("GeoNet ");
+ if (src != NULL)
+ ND_PRINT("src:%s", (src->addr_string)(ndo, src->addr));
+ ND_PRINT("; ");
+
+ /* Process Common Header */
+ if (length < 36) {
+ ND_PRINT(" (common header length %u < 36)", length);
+ goto invalid;
+ }
+
+ version = GET_U_1(bp) >> 4;
+ next_hdr = GET_U_1(bp) & 0x0f;
+ hdr_type = GET_U_1(bp + 1) >> 4;
+ hdr_subtype = GET_U_1(bp + 1) & 0x0f;
+ payload_length = GET_BE_U_2(bp + 4);
+ hop_limit = GET_U_1(bp + 7);
+
+ switch (next_hdr) {
+ case 0: next_hdr_txt = "Any"; break;
+ case 1: next_hdr_txt = "BTP-A"; break;
+ case 2: next_hdr_txt = "BTP-B"; break;
+ case 3: next_hdr_txt = "IPv6"; break;
+ }
+
+ switch (hdr_type) {
+ case 0: hdr_type_txt = "Any"; break;
+ case 1: hdr_type_txt = "Beacon"; break;
+ case 2: hdr_type_txt = "GeoUnicast"; break;
+ case 3: switch (hdr_subtype) {
+ case 0: hdr_type_txt = "GeoAnycastCircle"; break;
+ case 1: hdr_type_txt = "GeoAnycastRect"; break;
+ case 2: hdr_type_txt = "GeoAnycastElipse"; break;
+ }
+ break;
+ case 4: switch (hdr_subtype) {
+ case 0: hdr_type_txt = "GeoBroadcastCircle"; break;
+ case 1: hdr_type_txt = "GeoBroadcastRect"; break;
+ case 2: hdr_type_txt = "GeoBroadcastElipse"; break;
+ }
+ break;
+ case 5: switch (hdr_subtype) {
+ case 0: hdr_type_txt = "TopoScopeBcast-SH"; break;
+ case 1: hdr_type_txt = "TopoScopeBcast-MH"; break;
+ }
+ break;
+ case 6: switch (hdr_subtype) {
+ case 0: hdr_type_txt = "LocService-Request"; break;
+ case 1: hdr_type_txt = "LocService-Reply"; break;
+ }
+ break;
+ }
+
+ ND_PRINT("v:%u ", version);
+ ND_PRINT("NH:%u-%s ", next_hdr, next_hdr_txt);
+ ND_PRINT("HT:%u-%u-%s ", hdr_type, hdr_subtype, hdr_type_txt);
+ ND_PRINT("HopLim:%u ", hop_limit);
+ ND_PRINT("Payload:%u ", payload_length);
+ print_long_pos_vector(ndo, bp + 8);
+
+ /* Skip Common Header */
+ ND_TCHECK_LEN(bp, 36);
+ length -= 36;
+ bp += 36;
+
+ /* Process Extended Headers */
+ switch (hdr_type) {
+ case 0: /* Any */
+ hdr_size = 0;
+ break;
+ case 1: /* Beacon */
+ hdr_size = 0;
+ break;
+ case 2: /* GeoUnicast */
+ break;
+ case 3: switch (hdr_subtype) {
+ case 0: /* GeoAnycastCircle */
+ break;
+ case 1: /* GeoAnycastRect */
+ break;
+ case 2: /* GeoAnycastElipse */
+ break;
+ }
+ break;
+ case 4: switch (hdr_subtype) {
+ case 0: /* GeoBroadcastCircle */
+ break;
+ case 1: /* GeoBroadcastRect */
+ break;
+ case 2: /* GeoBroadcastElipse */
+ break;
+ }
+ break;
+ case 5: switch (hdr_subtype) {
+ case 0: /* TopoScopeBcast-SH */
+ hdr_size = 0;
+ break;
+ case 1: /* TopoScopeBcast-MH */
+ hdr_size = 68 - 36;
+ break;
+ }
+ break;
+ case 6: switch (hdr_subtype) {
+ case 0: /* LocService-Request */
+ break;
+ case 1: /* LocService-Reply */
+ break;
+ }
+ break;
+ }
+
+ /* Skip Extended headers */
+ if (hdr_size >= 0) {
+ if (length < (u_int)hdr_size) {
+ ND_PRINT(" (header size %d > %u)", hdr_size, length);
+ goto invalid;
+ }
+ ND_TCHECK_LEN(bp, hdr_size);
+ length -= hdr_size;
+ bp += hdr_size;
+ switch (next_hdr) {
+ case 0: /* Any */
+ break;
+ case 1:
+ case 2: /* BTP A/B */
+ if (length < 4) {
+ ND_PRINT(" (BTP length %u < 4)", length);
+ goto invalid;
+ }
+ print_btp(ndo, bp);
+ length -= 4;
+ bp += 4;
+ if (length >= 2) {
+ /*
+ * XXX - did print_btp_body()
+ * return if length < 2
+ * because this is optional,
+ * or was that just not
+ * reporting genuine errors?
+ */
+ print_btp_body(ndo, bp);
+ }
+ break;
+ case 3: /* IPv6 */
+ break;
+ }
+ }
+
+ /* Print user data part */
+ if (ndo->ndo_vflag)
+ ND_DEFAULTPRINT(bp, length);
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ /* XXX - print the remaining data as hex? */
+}
diff --git a/print-gre.c b/print-gre.c
new file mode 100644
index 0000000..b1a8142
--- /dev/null
+++ b/print-gre.c
@@ -0,0 +1,414 @@
+/* $OpenBSD: print-gre.c,v 1.6 2002/10/30 03:04:04 fgsch Exp $ */
+
+/*
+ * Copyright (c) 2002 Jason L. Wright (jason@thought.net)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: Generic Routing Encapsulation (GRE) printer */
+
+/*
+ * netdissect printer for GRE - Generic Routing Encapsulation
+ * RFC1701 (GRE), RFC1702 (GRE IPv4), and RFC2637 (Enhanced GRE)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtostr.h"
+#include "extract.h"
+#include "ethertype.h"
+
+
+#define GRE_CP 0x8000 /* checksum present */
+#define GRE_RP 0x4000 /* routing present */
+#define GRE_KP 0x2000 /* key present */
+#define GRE_SP 0x1000 /* sequence# present */
+#define GRE_sP 0x0800 /* source routing */
+#define GRE_AP 0x0080 /* acknowledgment# present */
+
+static const struct tok gre_flag_values[] = {
+ { GRE_CP, "checksum present"},
+ { GRE_RP, "routing present"},
+ { GRE_KP, "key present"},
+ { GRE_SP, "sequence# present"},
+ { GRE_sP, "source routing present"},
+ { GRE_AP, "ack present"},
+ { 0, NULL }
+};
+
+#define GRE_RECRS_MASK 0x0700 /* recursion count */
+#define GRE_VERS_MASK 0x0007 /* protocol version */
+
+/* source route entry types */
+#define GRESRE_IP 0x0800 /* IP */
+#define GRESRE_ASN 0xfffe /* ASN */
+
+static void gre_print_0(netdissect_options *, const u_char *, u_int);
+static void gre_print_1(netdissect_options *, const u_char *, u_int);
+static int gre_sre_print(netdissect_options *, uint16_t, uint8_t, uint8_t, const u_char *, u_int);
+static int gre_sre_ip_print(netdissect_options *, uint8_t, uint8_t, const u_char *, u_int);
+static int gre_sre_asn_print(netdissect_options *, uint8_t, uint8_t, const u_char *, u_int);
+
+void
+gre_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ u_int len = length, vers;
+
+ ndo->ndo_protocol = "gre";
+ ND_TCHECK_2(bp);
+ if (len < 2)
+ goto trunc;
+ vers = GET_BE_U_2(bp) & GRE_VERS_MASK;
+ ND_PRINT("GREv%u",vers);
+
+ switch(vers) {
+ case 0:
+ gre_print_0(ndo, bp, len);
+ break;
+ case 1:
+ gre_print_1(ndo, bp, len);
+ break;
+ default:
+ ND_PRINT(" ERROR: unknown-version");
+ break;
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+gre_print_0(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ u_int len = length;
+ uint16_t flags, prot;
+
+ /* 16 bits ND_TCHECKed in gre_print() */
+ flags = GET_BE_U_2(bp);
+ if (ndo->ndo_vflag)
+ ND_PRINT(", Flags [%s]",
+ bittok2str(gre_flag_values,"none",flags));
+
+ len -= 2;
+ bp += 2;
+
+ ND_TCHECK_2(bp);
+ if (len < 2)
+ goto trunc;
+ prot = GET_BE_U_2(bp);
+ len -= 2;
+ bp += 2;
+
+ if ((flags & GRE_CP) | (flags & GRE_RP)) {
+ ND_TCHECK_2(bp);
+ if (len < 2)
+ goto trunc;
+ if (ndo->ndo_vflag)
+ ND_PRINT(", sum 0x%x", GET_BE_U_2(bp));
+ bp += 2;
+ len -= 2;
+
+ ND_TCHECK_2(bp);
+ if (len < 2)
+ goto trunc;
+ ND_PRINT(", off 0x%x", GET_BE_U_2(bp));
+ bp += 2;
+ len -= 2;
+ }
+
+ if (flags & GRE_KP) {
+ ND_TCHECK_4(bp);
+ if (len < 4)
+ goto trunc;
+ ND_PRINT(", key=0x%x", GET_BE_U_4(bp));
+ bp += 4;
+ len -= 4;
+ }
+
+ if (flags & GRE_SP) {
+ ND_TCHECK_4(bp);
+ if (len < 4)
+ goto trunc;
+ ND_PRINT(", seq %u", GET_BE_U_4(bp));
+ bp += 4;
+ len -= 4;
+ }
+
+ if (flags & GRE_RP) {
+ for (;;) {
+ uint16_t af;
+ uint8_t sreoff;
+ uint8_t srelen;
+
+ ND_TCHECK_4(bp);
+ if (len < 4)
+ goto trunc;
+ af = GET_BE_U_2(bp);
+ sreoff = GET_U_1(bp + 2);
+ srelen = GET_U_1(bp + 3);
+ bp += 4;
+ len -= 4;
+
+ if (af == 0 && srelen == 0)
+ break;
+
+ if (!gre_sre_print(ndo, af, sreoff, srelen, bp, len))
+ goto trunc;
+
+ if (len < srelen)
+ goto trunc;
+ bp += srelen;
+ len -= srelen;
+ }
+ }
+
+ if (ndo->ndo_eflag)
+ ND_PRINT(", proto %s (0x%04x)",
+ tok2str(ethertype_values,"unknown",prot), prot);
+
+ ND_PRINT(", length %u",length);
+
+ if (ndo->ndo_vflag < 1)
+ ND_PRINT(": "); /* put in a colon as protocol demarc */
+ else
+ ND_PRINT("\n\t"); /* if verbose go multiline */
+
+ switch (prot) {
+ case ETHERTYPE_IP:
+ ip_print(ndo, bp, len);
+ break;
+ case ETHERTYPE_IPV6:
+ ip6_print(ndo, bp, len);
+ break;
+ case ETHERTYPE_MPLS:
+ mpls_print(ndo, bp, len);
+ break;
+ case ETHERTYPE_IPX:
+ ipx_print(ndo, bp, len);
+ break;
+ case ETHERTYPE_ATALK:
+ atalk_print(ndo, bp, len);
+ break;
+ case ETHERTYPE_GRE_ISO:
+ isoclns_print(ndo, bp, len);
+ break;
+ case ETHERTYPE_TEB:
+ ether_print(ndo, bp, len, ND_BYTES_AVAILABLE_AFTER(bp), NULL, NULL);
+ break;
+ default:
+ ND_PRINT("gre-proto-0x%x", prot);
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+gre_print_1(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ u_int len = length;
+ uint16_t flags, prot;
+
+ /* 16 bits ND_TCHECKed in gre_print() */
+ flags = GET_BE_U_2(bp);
+ len -= 2;
+ bp += 2;
+
+ if (ndo->ndo_vflag)
+ ND_PRINT(", Flags [%s]",
+ bittok2str(gre_flag_values,"none",flags));
+
+ ND_TCHECK_2(bp);
+ if (len < 2)
+ goto trunc;
+ prot = GET_BE_U_2(bp);
+ len -= 2;
+ bp += 2;
+
+
+ if (flags & GRE_KP) {
+ uint32_t k;
+
+ ND_TCHECK_4(bp);
+ if (len < 4)
+ goto trunc;
+ k = GET_BE_U_4(bp);
+ ND_PRINT(", call %u", k & 0xffff);
+ len -= 4;
+ bp += 4;
+ }
+
+ if (flags & GRE_SP) {
+ ND_TCHECK_4(bp);
+ if (len < 4)
+ goto trunc;
+ ND_PRINT(", seq %u", GET_BE_U_4(bp));
+ bp += 4;
+ len -= 4;
+ }
+
+ if (flags & GRE_AP) {
+ ND_TCHECK_4(bp);
+ if (len < 4)
+ goto trunc;
+ ND_PRINT(", ack %u", GET_BE_U_4(bp));
+ bp += 4;
+ len -= 4;
+ }
+
+ if ((flags & GRE_SP) == 0)
+ ND_PRINT(", no-payload");
+
+ if (ndo->ndo_eflag)
+ ND_PRINT(", proto %s (0x%04x)",
+ tok2str(ethertype_values,"unknown",prot), prot);
+
+ ND_PRINT(", length %u",length);
+
+ if ((flags & GRE_SP) == 0)
+ return;
+
+ if (ndo->ndo_vflag < 1)
+ ND_PRINT(": "); /* put in a colon as protocol demarc */
+ else
+ ND_PRINT("\n\t"); /* if verbose go multiline */
+
+ switch (prot) {
+ case ETHERTYPE_PPP:
+ ppp_print(ndo, bp, len);
+ break;
+ default:
+ ND_PRINT("gre-proto-0x%x", prot);
+ break;
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static int
+gre_sre_print(netdissect_options *ndo, uint16_t af, uint8_t sreoff,
+ uint8_t srelen, const u_char *bp, u_int len)
+{
+ int ret;
+
+ switch (af) {
+ case GRESRE_IP:
+ ND_PRINT(", (rtaf=ip");
+ ret = gre_sre_ip_print(ndo, sreoff, srelen, bp, len);
+ ND_PRINT(")");
+ break;
+ case GRESRE_ASN:
+ ND_PRINT(", (rtaf=asn");
+ ret = gre_sre_asn_print(ndo, sreoff, srelen, bp, len);
+ ND_PRINT(")");
+ break;
+ default:
+ ND_PRINT(", (rtaf=0x%x)", af);
+ ret = 1;
+ }
+ return (ret);
+}
+
+static int
+gre_sre_ip_print(netdissect_options *ndo, uint8_t sreoff, uint8_t srelen,
+ const u_char *bp, u_int len)
+{
+ const u_char *up = bp;
+ char buf[INET_ADDRSTRLEN];
+
+ if (sreoff & 3) {
+ ND_PRINT(", badoffset=%u", sreoff);
+ return (1);
+ }
+ if (srelen & 3) {
+ ND_PRINT(", badlength=%u", srelen);
+ return (1);
+ }
+ if (sreoff >= srelen) {
+ ND_PRINT(", badoff/len=%u/%u", sreoff, srelen);
+ return (1);
+ }
+
+ while (srelen != 0) {
+ ND_TCHECK_4(bp);
+ if (len < 4)
+ return (0);
+
+ addrtostr(bp, buf, sizeof(buf));
+ ND_PRINT(" %s%s",
+ ((bp - up) == sreoff) ? "*" : "", buf);
+
+ bp += 4;
+ len -= 4;
+ srelen -= 4;
+ }
+ return (1);
+trunc:
+ return 0;
+}
+
+static int
+gre_sre_asn_print(netdissect_options *ndo, uint8_t sreoff, uint8_t srelen,
+ const u_char *bp, u_int len)
+{
+ const u_char *up = bp;
+
+ if (sreoff & 1) {
+ ND_PRINT(", badoffset=%u", sreoff);
+ return (1);
+ }
+ if (srelen & 1) {
+ ND_PRINT(", badlength=%u", srelen);
+ return (1);
+ }
+ if (sreoff >= srelen) {
+ ND_PRINT(", badoff/len=%u/%u", sreoff, srelen);
+ return (1);
+ }
+
+ while (srelen != 0) {
+ ND_TCHECK_2(bp);
+ if (len < 2)
+ return (0);
+
+ ND_PRINT(" %s%x",
+ ((bp - up) == sreoff) ? "*" : "", GET_BE_U_2(bp));
+
+ bp += 2;
+ len -= 2;
+ srelen -= 2;
+ }
+ return (1);
+trunc:
+ return 0;
+}
diff --git a/print-hncp.c b/print-hncp.c
new file mode 100644
index 0000000..37c13ec
--- /dev/null
+++ b/print-hncp.c
@@ -0,0 +1,866 @@
+/*
+ * Copyright (c) 2016 Antonin Décimo, Jean-Raphaël Gaglione
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* \summary: Home Networking Control Protocol (HNCP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+static void
+hncp_print_rec(netdissect_options *ndo,
+ const u_char *cp, u_int length, int indent);
+
+void
+hncp_print(netdissect_options *ndo,
+ const u_char *cp, u_int length)
+{
+ ndo->ndo_protocol = "hncp";
+ ND_PRINT("hncp (%u)", length);
+ hncp_print_rec(ndo, cp, length, 1);
+}
+
+/* RFC7787 */
+#define DNCP_REQUEST_NETWORK_STATE 1
+#define DNCP_REQUEST_NODE_STATE 2
+#define DNCP_NODE_ENDPOINT 3
+#define DNCP_NETWORK_STATE 4
+#define DNCP_NODE_STATE 5
+#define DNCP_PEER 8
+#define DNCP_KEEP_ALIVE_INTERVAL 9
+#define DNCP_TRUST_VERDICT 10
+
+/* RFC7788 */
+#define HNCP_HNCP_VERSION 32
+#define HNCP_EXTERNAL_CONNECTION 33
+#define HNCP_DELEGATED_PREFIX 34
+#define HNCP_PREFIX_POLICY 43
+#define HNCP_DHCPV4_DATA 37 /* This is correct, see RFC 7788 Errata ID 5113. */
+#define HNCP_DHCPV6_DATA 38 /* idem */
+#define HNCP_ASSIGNED_PREFIX 35
+#define HNCP_NODE_ADDRESS 36
+#define HNCP_DNS_DELEGATED_ZONE 39
+#define HNCP_DOMAIN_NAME 40
+#define HNCP_NODE_NAME 41
+#define HNCP_MANAGED_PSK 42
+
+/* See type_mask in hncp_print_rec below */
+#define RANGE_DNCP_RESERVED 0x10000
+#define RANGE_HNCP_UNASSIGNED 0x10001
+#define RANGE_DNCP_PRIVATE_USE 0x10002
+#define RANGE_DNCP_FUTURE_USE 0x10003
+
+static const struct tok type_values[] = {
+ { DNCP_REQUEST_NETWORK_STATE, "Request network state" },
+ { DNCP_REQUEST_NODE_STATE, "Request node state" },
+ { DNCP_NODE_ENDPOINT, "Node endpoint" },
+ { DNCP_NETWORK_STATE, "Network state" },
+ { DNCP_NODE_STATE, "Node state" },
+ { DNCP_PEER, "Peer" },
+ { DNCP_KEEP_ALIVE_INTERVAL, "Keep-alive interval" },
+ { DNCP_TRUST_VERDICT, "Trust-Verdict" },
+
+ { HNCP_HNCP_VERSION, "HNCP-Version" },
+ { HNCP_EXTERNAL_CONNECTION, "External-Connection" },
+ { HNCP_DELEGATED_PREFIX, "Delegated-Prefix" },
+ { HNCP_PREFIX_POLICY, "Prefix-Policy" },
+ { HNCP_DHCPV4_DATA, "DHCPv4-Data" },
+ { HNCP_DHCPV6_DATA, "DHCPv6-Data" },
+ { HNCP_ASSIGNED_PREFIX, "Assigned-Prefix" },
+ { HNCP_NODE_ADDRESS, "Node-Address" },
+ { HNCP_DNS_DELEGATED_ZONE, "DNS-Delegated-Zone" },
+ { HNCP_DOMAIN_NAME, "Domain-Name" },
+ { HNCP_NODE_NAME, "Node-Name" },
+ { HNCP_MANAGED_PSK, "Managed-PSK" },
+
+ { RANGE_DNCP_RESERVED, "Reserved" },
+ { RANGE_HNCP_UNASSIGNED, "Unassigned" },
+ { RANGE_DNCP_PRIVATE_USE, "Private use" },
+ { RANGE_DNCP_FUTURE_USE, "Future use" },
+
+ { 0, NULL}
+};
+
+#define DH4OPT_DNS_SERVERS 6 /* RFC2132 */
+#define DH4OPT_NTP_SERVERS 42 /* RFC2132 */
+#define DH4OPT_DOMAIN_SEARCH 119 /* RFC3397 */
+
+static const struct tok dh4opt_str[] = {
+ { DH4OPT_DNS_SERVERS, "DNS-server" },
+ { DH4OPT_NTP_SERVERS, "NTP-server"},
+ { DH4OPT_DOMAIN_SEARCH, "DNS-search" },
+ { 0, NULL }
+};
+
+#define DH6OPT_DNS_SERVERS 23 /* RFC3646 */
+#define DH6OPT_DOMAIN_LIST 24 /* RFC3646 */
+#define DH6OPT_SNTP_SERVERS 31 /* RFC4075 */
+
+static const struct tok dh6opt_str[] = {
+ { DH6OPT_DNS_SERVERS, "DNS-server" },
+ { DH6OPT_DOMAIN_LIST, "DNS-search-list" },
+ { DH6OPT_SNTP_SERVERS, "SNTP-servers" },
+ { 0, NULL }
+};
+
+/*
+ * For IPv4-mapped IPv6 addresses, length of the prefix that precedes
+ * the 4 bytes of IPv4 address at the end of the IPv6 address.
+ */
+#define IPV4_MAPPED_HEADING_LEN 12
+
+/*
+ * Is an IPv6 address an IPv4-mapped address?
+ */
+static int
+is_ipv4_mapped_address(const u_char *addr)
+{
+ /* The value of the prefix */
+ static const u_char ipv4_mapped_heading[IPV4_MAPPED_HEADING_LEN] =
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF };
+
+ return memcmp(addr, ipv4_mapped_heading, IPV4_MAPPED_HEADING_LEN) == 0;
+}
+
+static const char *
+format_nid(netdissect_options *ndo, const u_char *data)
+{
+ static char buf[4][sizeof("01:01:01:01")];
+ static int i = 0;
+ i = (i + 1) % 4;
+ snprintf(buf[i], sizeof(buf[i]), "%02x:%02x:%02x:%02x",
+ GET_U_1(data), GET_U_1(data + 1), GET_U_1(data + 2),
+ GET_U_1(data + 3));
+ return buf[i];
+}
+
+static const char *
+format_256(netdissect_options *ndo, const u_char *data)
+{
+ static char buf[4][sizeof("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")];
+ static int i = 0;
+ i = (i + 1) % 4;
+ snprintf(buf[i], sizeof(buf[i]), "%016" PRIx64 "%016" PRIx64 "%016" PRIx64 "%016" PRIx64,
+ GET_BE_U_8(data),
+ GET_BE_U_8(data + 8),
+ GET_BE_U_8(data + 16),
+ GET_BE_U_8(data + 24)
+ );
+ return buf[i];
+}
+
+static const char *
+format_interval(const uint32_t n)
+{
+ static char buf[4][sizeof("0000000.000s")];
+ static int i = 0;
+ i = (i + 1) % 4;
+ snprintf(buf[i], sizeof(buf[i]), "%u.%03us", n / 1000, n % 1000);
+ return buf[i];
+}
+
+static const char *
+format_ip6addr(netdissect_options *ndo, const u_char *cp)
+{
+ if (is_ipv4_mapped_address(cp))
+ return GET_IPADDR_STRING(cp + IPV4_MAPPED_HEADING_LEN);
+ else
+ return GET_IP6ADDR_STRING(cp);
+}
+
+static int
+print_prefix(netdissect_options *ndo, const u_char *prefix, u_int max_length)
+{
+ int plenbytes;
+ char buf[sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx::/128")];
+
+ if (GET_U_1(prefix) >= 96 && max_length >= IPV4_MAPPED_HEADING_LEN + 1 &&
+ is_ipv4_mapped_address(prefix + 1)) {
+ nd_ipv4 addr;
+ u_int plen;
+
+ plen = GET_U_1(prefix) - 96;
+ if (32 < plen)
+ return -1;
+ max_length -= 1;
+
+ memset(&addr, 0, sizeof(addr));
+ plenbytes = (plen + 7) / 8;
+ if (max_length < (u_int)plenbytes + IPV4_MAPPED_HEADING_LEN)
+ return -3;
+ memcpy(&addr, prefix + IPV4_MAPPED_HEADING_LEN + 1, plenbytes);
+ if (plen % 8) {
+ ((u_char *)&addr)[plenbytes - 1] &=
+ ((0xff00 >> (plen % 8)) & 0xff);
+ }
+ snprintf(buf, sizeof(buf), "%s/%u", ipaddr_string(ndo, (const u_char *)&addr), plen); /* local buffer, not packet data; don't use GET_IPADDR_STRING() */
+ plenbytes += 1 + IPV4_MAPPED_HEADING_LEN;
+ } else {
+ plenbytes = decode_prefix6(ndo, prefix, max_length, buf, sizeof(buf));
+ if (plenbytes < 0)
+ return plenbytes;
+ }
+
+ ND_PRINT("%s", buf);
+ return plenbytes;
+}
+
+static int
+print_dns_label(netdissect_options *ndo,
+ const u_char *cp, u_int max_length, int print)
+{
+ u_int length = 0;
+ while (length < max_length) {
+ u_int lab_length = GET_U_1(cp + length);
+ length++;
+ if (lab_length == 0)
+ return (int)length;
+ if (length > 1 && print)
+ ND_PRINT(".");
+ if (length+lab_length > max_length) {
+ if (print)
+ nd_printjnp(ndo, cp+length, max_length-length);
+ break;
+ }
+ if (print)
+ nd_printjnp(ndo, cp+length, lab_length);
+ length += lab_length;
+ }
+ if (print)
+ ND_PRINT("[|DNS]");
+ return -1;
+}
+
+static int
+dhcpv4_print(netdissect_options *ndo,
+ const u_char *cp, u_int length, int indent)
+{
+ u_int i, t;
+ const uint8_t *tlv, *value;
+ uint8_t type, optlen;
+
+ i = 0;
+ while (i < length) {
+ if (i + 2 > length)
+ return -1;
+ tlv = cp + i;
+ type = GET_U_1(tlv);
+ optlen = GET_U_1(tlv + 1);
+ value = tlv + 2;
+
+ ND_PRINT("\n");
+ for (t = indent; t > 0; t--)
+ ND_PRINT("\t");
+
+ ND_PRINT("%s", tok2str(dh4opt_str, "Unknown", type));
+ ND_PRINT(" (%u)", optlen + 2 );
+ if (i + 2 + optlen > length)
+ return -1;
+
+ switch (type) {
+ case DH4OPT_DNS_SERVERS:
+ case DH4OPT_NTP_SERVERS: {
+ if (optlen < 4 || optlen % 4 != 0) {
+ return -1;
+ }
+ for (t = 0; t < optlen; t += 4)
+ ND_PRINT(" %s", GET_IPADDR_STRING(value + t));
+ }
+ break;
+ case DH4OPT_DOMAIN_SEARCH: {
+ const u_char *tp = value;
+ while (tp < value + optlen) {
+ ND_PRINT(" ");
+ if ((tp = fqdn_print(ndo, tp, value + optlen)) == NULL)
+ return -1;
+ }
+ }
+ break;
+ }
+
+ i += 2 + optlen;
+ }
+ return 0;
+}
+
+static int
+dhcpv6_print(netdissect_options *ndo,
+ const u_char *cp, u_int length, int indent)
+{
+ u_int i, t;
+ const u_char *tlv, *value;
+ uint16_t type, optlen;
+
+ i = 0;
+ while (i < length) {
+ if (i + 4 > length)
+ return -1;
+ tlv = cp + i;
+ type = GET_BE_U_2(tlv);
+ optlen = GET_BE_U_2(tlv + 2);
+ value = tlv + 4;
+
+ ND_PRINT("\n");
+ for (t = indent; t > 0; t--)
+ ND_PRINT("\t");
+
+ ND_PRINT("%s", tok2str(dh6opt_str, "Unknown", type));
+ ND_PRINT(" (%u)", optlen + 4 );
+ if (i + 4 + optlen > length)
+ return -1;
+
+ switch (type) {
+ case DH6OPT_DNS_SERVERS:
+ case DH6OPT_SNTP_SERVERS: {
+ if (optlen % 16 != 0) {
+ nd_print_invalid(ndo);
+ return -1;
+ }
+ for (t = 0; t < optlen; t += 16)
+ ND_PRINT(" %s", GET_IP6ADDR_STRING(value + t));
+ }
+ break;
+ case DH6OPT_DOMAIN_LIST: {
+ const u_char *tp = value;
+ while (tp < value + optlen) {
+ ND_PRINT(" ");
+ if ((tp = fqdn_print(ndo, tp, value + optlen)) == NULL)
+ return -1;
+ }
+ }
+ break;
+ }
+
+ i += 4 + optlen;
+ }
+ return 0;
+}
+
+/* Determine in-line mode */
+static int
+is_in_line(netdissect_options *ndo, int indent)
+{
+ return indent - 1 >= ndo->ndo_vflag && ndo->ndo_vflag < 3;
+}
+
+static void
+print_type_in_line(netdissect_options *ndo,
+ uint32_t type, int count, int indent, int *first_one)
+{
+ if (count > 0) {
+ if (*first_one) {
+ *first_one = 0;
+ if (indent > 1) {
+ u_int t;
+ ND_PRINT("\n");
+ for (t = indent; t > 0; t--)
+ ND_PRINT("\t");
+ } else {
+ ND_PRINT(" ");
+ }
+ } else {
+ ND_PRINT(", ");
+ }
+ ND_PRINT("%s", tok2str(type_values, "Easter Egg", type));
+ if (count > 1)
+ ND_PRINT(" (x%d)", count);
+ }
+}
+
+static void
+hncp_print_rec(netdissect_options *ndo,
+ const u_char *cp, u_int length, int indent)
+{
+ const int in_line = is_in_line(ndo, indent);
+ int first_one = 1;
+
+ u_int i, t;
+
+ uint32_t last_type_mask = 0xffffffffU;
+ int last_type_count = -1;
+
+ const uint8_t *tlv, *value;
+ uint16_t type, bodylen;
+ uint32_t type_mask;
+
+ i = 0;
+ while (i < length) {
+ tlv = cp + i;
+
+ if (!in_line) {
+ ND_PRINT("\n");
+ for (t = indent; t > 0; t--)
+ ND_PRINT("\t");
+ }
+
+ ND_TCHECK_4(tlv);
+ if (i + 4 > length)
+ goto invalid;
+
+ type = GET_BE_U_2(tlv);
+ bodylen = GET_BE_U_2(tlv + 2);
+ value = tlv + 4;
+ ND_TCHECK_LEN(value, bodylen);
+ if (i + bodylen + 4 > length)
+ goto invalid;
+
+ type_mask =
+ (type == 0) ? RANGE_DNCP_RESERVED:
+ (44 <= type && type <= 511) ? RANGE_HNCP_UNASSIGNED:
+ (768 <= type && type <= 1023) ? RANGE_DNCP_PRIVATE_USE:
+ RANGE_DNCP_FUTURE_USE;
+ if (type == 6 || type == 7)
+ type_mask = RANGE_DNCP_FUTURE_USE;
+
+ /* defined types */
+ {
+ t = 0;
+ while (1) {
+ u_int key = type_values[t++].v;
+ if (key > 0xffff)
+ break;
+ if (key == type) {
+ type_mask = type;
+ break;
+ }
+ }
+ }
+
+ if (in_line) {
+ if (last_type_mask == type_mask) {
+ last_type_count++;
+ } else {
+ print_type_in_line(ndo, last_type_mask, last_type_count, indent, &first_one);
+ last_type_mask = type_mask;
+ last_type_count = 1;
+ }
+
+ goto skip_multiline;
+ }
+
+ ND_PRINT("%s", tok2str(type_values, "Easter Egg (42)", type_mask) );
+ if (type_mask > 0xffff)
+ ND_PRINT(": type=%u", type );
+ ND_PRINT(" (%u)", bodylen + 4 );
+
+ switch (type_mask) {
+
+ case DNCP_REQUEST_NETWORK_STATE: {
+ if (bodylen != 0)
+ nd_print_invalid(ndo);
+ }
+ break;
+
+ case DNCP_REQUEST_NODE_STATE: {
+ const char *node_identifier;
+ if (bodylen != 4) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ node_identifier = format_nid(ndo, value);
+ ND_PRINT(" NID: %s", node_identifier);
+ }
+ break;
+
+ case DNCP_NODE_ENDPOINT: {
+ const char *node_identifier;
+ uint32_t endpoint_identifier;
+ if (bodylen != 8) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ node_identifier = format_nid(ndo, value);
+ endpoint_identifier = GET_BE_U_4(value + 4);
+ ND_PRINT(" NID: %s EPID: %08x",
+ node_identifier,
+ endpoint_identifier
+ );
+ }
+ break;
+
+ case DNCP_NETWORK_STATE: {
+ uint64_t hash;
+ if (bodylen != 8) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ hash = GET_BE_U_8(value);
+ ND_PRINT(" hash: %016" PRIx64, hash);
+ }
+ break;
+
+ case DNCP_NODE_STATE: {
+ const char *node_identifier, *interval;
+ uint32_t sequence_number;
+ uint64_t hash;
+ if (bodylen < 20) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ node_identifier = format_nid(ndo, value);
+ sequence_number = GET_BE_U_4(value + 4);
+ interval = format_interval(GET_BE_U_4(value + 8));
+ hash = GET_BE_U_8(value + 12);
+ ND_PRINT(" NID: %s seqno: %u %s hash: %016" PRIx64,
+ node_identifier,
+ sequence_number,
+ interval,
+ hash
+ );
+ hncp_print_rec(ndo, value+20, bodylen-20, indent+1);
+ }
+ break;
+
+ case DNCP_PEER: {
+ const char *peer_node_identifier;
+ uint32_t peer_endpoint_identifier, endpoint_identifier;
+ if (bodylen != 12) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ peer_node_identifier = format_nid(ndo, value);
+ peer_endpoint_identifier = GET_BE_U_4(value + 4);
+ endpoint_identifier = GET_BE_U_4(value + 8);
+ ND_PRINT(" Peer-NID: %s Peer-EPID: %08x Local-EPID: %08x",
+ peer_node_identifier,
+ peer_endpoint_identifier,
+ endpoint_identifier
+ );
+ }
+ break;
+
+ case DNCP_KEEP_ALIVE_INTERVAL: {
+ uint32_t endpoint_identifier;
+ const char *interval;
+ if (bodylen < 8) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ endpoint_identifier = GET_BE_U_4(value);
+ interval = format_interval(GET_BE_U_4(value + 4));
+ ND_PRINT(" EPID: %08x Interval: %s",
+ endpoint_identifier,
+ interval
+ );
+ }
+ break;
+
+ case DNCP_TRUST_VERDICT: {
+ if (bodylen <= 36) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ ND_PRINT(" Verdict: %u Fingerprint: %s Common Name: ",
+ GET_U_1(value),
+ format_256(ndo, value + 4));
+ nd_printjnp(ndo, value + 36, bodylen - 36);
+ }
+ break;
+
+ case HNCP_HNCP_VERSION: {
+ uint16_t capabilities;
+ uint8_t M, P, H, L;
+ if (bodylen < 5) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ capabilities = GET_BE_U_2(value + 2);
+ M = (uint8_t)((capabilities >> 12) & 0xf);
+ P = (uint8_t)((capabilities >> 8) & 0xf);
+ H = (uint8_t)((capabilities >> 4) & 0xf);
+ L = (uint8_t)(capabilities & 0xf);
+ ND_PRINT(" M: %u P: %u H: %u L: %u User-agent: ",
+ M, P, H, L
+ );
+ nd_printjnp(ndo, value + 4, bodylen - 4);
+ }
+ break;
+
+ case HNCP_EXTERNAL_CONNECTION: {
+ /* Container TLV */
+ hncp_print_rec(ndo, value, bodylen, indent+1);
+ }
+ break;
+
+ case HNCP_DELEGATED_PREFIX: {
+ int l;
+ if (bodylen < 9 || bodylen < 9 + (GET_U_1(value + 8) + 7) / 8) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ ND_PRINT(" VLSO: %s PLSO: %s Prefix: ",
+ format_interval(GET_BE_U_4(value)),
+ format_interval(GET_BE_U_4(value + 4))
+ );
+ l = print_prefix(ndo, value + 8, bodylen - 8);
+ if (l == -1) {
+ ND_PRINT("(length is invalid)");
+ break;
+ }
+ if (l < 0) {
+ /*
+ * We've already checked that we've captured the
+ * entire TLV, based on its length, so this will
+ * either be -1, meaning "the prefix length is
+ * greater than the longest possible address of
+ * that type" (i.e., > 32 for IPv4 or > 128 for
+ * IPv6", or -3, meaning "the prefix runs past
+ * the end of the TLV".
+ */
+ nd_print_invalid(ndo);
+ break;
+ }
+ l += 8 + (-l & 3);
+
+ if (bodylen >= l)
+ hncp_print_rec(ndo, value + l, bodylen - l, indent+1);
+ }
+ break;
+
+ case HNCP_PREFIX_POLICY: {
+ uint8_t policy;
+ int l;
+ if (bodylen < 1) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ policy = GET_U_1(value);
+ ND_PRINT(" type: ");
+ if (policy == 0) {
+ if (bodylen != 1) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ ND_PRINT("Internet connectivity");
+ } else if (policy >= 1 && policy <= 128) {
+ ND_PRINT("Dest-Prefix: ");
+ l = print_prefix(ndo, value, bodylen);
+ if (l == -1) {
+ ND_PRINT("(length is invalid)");
+ break;
+ }
+ if (l < 0) {
+ /*
+ * We've already checked that we've captured the
+ * entire TLV, based on its length, so this will
+ * either be -1, meaning "the prefix length is
+ * greater than the longest possible address of
+ * that type" (i.e., > 32 for IPv4 or > 128 for
+ * IPv6", or -3, meaning "the prefix runs past
+ * the end of the TLV".
+ */
+ nd_print_invalid(ndo);
+ break;
+ }
+ } else if (policy == 129) {
+ ND_PRINT("DNS domain: ");
+ print_dns_label(ndo, value+1, bodylen-1, 1);
+ } else if (policy == 130) {
+ ND_PRINT("Opaque UTF-8: ");
+ nd_printjnp(ndo, value + 1, bodylen - 1);
+ } else if (policy == 131) {
+ if (bodylen != 1) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ ND_PRINT("Restrictive assignment");
+ } else if (policy >= 132) {
+ ND_PRINT("Unknown (%u)", policy); /* Reserved for future additions */
+ }
+ }
+ break;
+
+ case HNCP_DHCPV4_DATA: {
+ if (bodylen == 0) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ if (dhcpv4_print(ndo, value, bodylen, indent+1) != 0)
+ goto invalid;
+ }
+ break;
+
+ case HNCP_DHCPV6_DATA: {
+ if (bodylen == 0) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ if (dhcpv6_print(ndo, value, bodylen, indent+1) != 0) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ }
+ break;
+
+ case HNCP_ASSIGNED_PREFIX: {
+ uint8_t prty;
+ int l;
+ if (bodylen < 6 || bodylen < 6 + (GET_U_1(value + 5) + 7) / 8) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ prty = GET_U_1(value + 4) & 0xf;
+ ND_PRINT(" EPID: %08x Prty: %u",
+ GET_BE_U_4(value),
+ prty
+ );
+ ND_PRINT(" Prefix: ");
+ if ((l = print_prefix(ndo, value + 5, bodylen - 5)) < 0) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ l += 5;
+ l += -l & 3;
+
+ if (bodylen >= l)
+ hncp_print_rec(ndo, value + l, bodylen - l, indent+1);
+ }
+ break;
+
+ case HNCP_NODE_ADDRESS: {
+ uint32_t endpoint_identifier;
+ const char *ip_address;
+ if (bodylen < 20) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ endpoint_identifier = GET_BE_U_4(value);
+ ip_address = format_ip6addr(ndo, value + 4);
+ ND_PRINT(" EPID: %08x IP Address: %s",
+ endpoint_identifier,
+ ip_address
+ );
+
+ hncp_print_rec(ndo, value + 20, bodylen - 20, indent+1);
+ }
+ break;
+
+ case HNCP_DNS_DELEGATED_ZONE: {
+ const char *ip_address;
+ int len;
+ if (bodylen < 17) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ ip_address = format_ip6addr(ndo, value);
+ ND_PRINT(" IP-Address: %s %c%c%c ",
+ ip_address,
+ (GET_U_1(value + 16) & 4) ? 'l' : '-',
+ (GET_U_1(value + 16) & 2) ? 'b' : '-',
+ (GET_U_1(value + 16) & 1) ? 's' : '-'
+ );
+ len = print_dns_label(ndo, value+17, bodylen-17, 1);
+ if (len < 0) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ len += 17;
+ len += -len & 3;
+ if (bodylen >= len)
+ hncp_print_rec(ndo, value+len, bodylen-len, indent+1);
+ }
+ break;
+
+ case HNCP_DOMAIN_NAME: {
+ if (bodylen == 0) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ ND_PRINT(" Domain: ");
+ print_dns_label(ndo, value, bodylen, 1);
+ }
+ break;
+
+ case HNCP_NODE_NAME: {
+ u_int l;
+ if (bodylen < 17) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ l = GET_U_1(value + 16);
+ if (bodylen < 17 + l) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ ND_PRINT(" IP-Address: %s Name: ",
+ format_ip6addr(ndo, value)
+ );
+ if (l < 64) {
+ ND_PRINT("\"");
+ nd_printjnp(ndo, value + 17, l);
+ ND_PRINT("\"");
+ } else {
+ nd_print_invalid(ndo);
+ }
+ l += 17;
+ l = roundup2(l, 4);
+ if (bodylen >= l)
+ hncp_print_rec(ndo, value + l, bodylen - l, indent+1);
+ }
+ break;
+
+ case HNCP_MANAGED_PSK: {
+ if (bodylen < 32) {
+ nd_print_invalid(ndo);
+ break;
+ }
+ ND_PRINT(" PSK: %s", format_256(ndo, value));
+ hncp_print_rec(ndo, value + 32, bodylen - 32, indent+1);
+ }
+ break;
+
+ case RANGE_DNCP_RESERVED:
+ case RANGE_HNCP_UNASSIGNED:
+ case RANGE_DNCP_PRIVATE_USE:
+ case RANGE_DNCP_FUTURE_USE:
+ break;
+
+ }
+ skip_multiline:
+
+ i += 4 + roundup2(bodylen, 4);
+ }
+ print_type_in_line(ndo, last_type_mask, last_type_count, indent, &first_one);
+
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+ return;
+
+ invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-hsrp.c b/print-hsrp.c
new file mode 100644
index 0000000..3027826
--- /dev/null
+++ b/print-hsrp.c
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2001 Julian Cowley
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* \summary: Cisco Hot Standby Router Protocol (HSRP) printer */
+
+/* specification: RFC 2281 for version 1 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+/* HSRP op code types. */
+static const char *op_code_str[] = {
+ "hello",
+ "coup",
+ "resign"
+};
+
+/* HSRP states and associated names. */
+static const struct tok states[] = {
+ { 0, "initial" },
+ { 1, "learn" },
+ { 2, "listen" },
+ { 4, "speak" },
+ { 8, "standby" },
+ { 16, "active" },
+ { 0, NULL }
+};
+
+/*
+ * RFC 2281:
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Version | Op Code | State | Hellotime |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Holdtime | Priority | Group | Reserved |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Authentication Data |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Authentication Data |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Virtual IP Address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+#define HSRP_AUTH_SIZE 8
+
+/* HSRP protocol header. */
+struct hsrp {
+ nd_uint8_t hsrp_version;
+ nd_uint8_t hsrp_op_code;
+ nd_uint8_t hsrp_state;
+ nd_uint8_t hsrp_hellotime;
+ nd_uint8_t hsrp_holdtime;
+ nd_uint8_t hsrp_priority;
+ nd_uint8_t hsrp_group;
+ nd_uint8_t hsrp_reserved;
+ nd_byte hsrp_authdata[HSRP_AUTH_SIZE];
+ nd_ipv4 hsrp_virtaddr;
+};
+
+void
+hsrp_print(netdissect_options *ndo, const u_char *bp, u_int len)
+{
+ const struct hsrp *hp = (const struct hsrp *) bp;
+ uint8_t version;
+
+ ndo->ndo_protocol = "hsrp";
+ version = GET_U_1(hp->hsrp_version);
+ ND_PRINT("HSRPv%u", version);
+ if (version != 0)
+ return;
+ ND_PRINT("-");
+ ND_PRINT("%s ",
+ tok2strary(op_code_str, "unknown (%u)", GET_U_1(hp->hsrp_op_code)));
+ ND_PRINT("%u: ", len);
+ ND_PRINT("state=%s ",
+ tok2str(states, "Unknown (%u)", GET_U_1(hp->hsrp_state)));
+ ND_PRINT("group=%u ", GET_U_1(hp->hsrp_group));
+ if (GET_U_1(hp->hsrp_reserved) != 0) {
+ ND_PRINT("[reserved=%u!] ", GET_U_1(hp->hsrp_reserved));
+ }
+ ND_PRINT("addr=%s", GET_IPADDR_STRING(hp->hsrp_virtaddr));
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" hellotime=");
+ unsigned_relts_print(ndo, GET_U_1(hp->hsrp_hellotime));
+ ND_PRINT(" holdtime=");
+ unsigned_relts_print(ndo, GET_U_1(hp->hsrp_holdtime));
+ ND_PRINT(" priority=%u", GET_U_1(hp->hsrp_priority));
+ ND_PRINT(" auth=\"");
+ /*
+ * RFC 2281 Section 5.1 does not specify the encoding of
+ * Authentication Data explicitly, but zero padding can be
+ * inferred from the "recommended default value".
+ */
+ nd_printjnp(ndo, hp->hsrp_authdata, HSRP_AUTH_SIZE);
+ ND_PRINT("\"");
+ }
+}
diff --git a/print-http.c b/print-http.c
new file mode 100644
index 0000000..6845d0d
--- /dev/null
+++ b/print-http.c
@@ -0,0 +1,74 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Hypertext Transfer Protocol (HTTP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+
+/*
+ * Includes WebDAV requests.
+ */
+static const char *httpcmds[] = {
+ "GET",
+ "PUT",
+ "COPY",
+ "HEAD",
+ "LOCK",
+ "MOVE",
+ "POLL",
+ "POST",
+ "BCOPY",
+ "BMOVE",
+ "MKCOL",
+ "TRACE",
+ "LABEL",
+ "MERGE",
+ "DELETE",
+ "SEARCH",
+ "UNLOCK",
+ "REPORT",
+ "UPDATE",
+ "NOTIFY",
+ "BDELETE",
+ "CONNECT",
+ "OPTIONS",
+ "CHECKIN",
+ "PROPFIND",
+ "CHECKOUT",
+ "CCM_POST",
+ "SUBSCRIBE",
+ "PROPPATCH",
+ "BPROPFIND",
+ "BPROPPATCH",
+ "UNCHECKOUT",
+ "MKACTIVITY",
+ "MKWORKSPACE",
+ "UNSUBSCRIBE",
+ "RPC_CONNECT",
+ "VERSION-CONTROL",
+ "BASELINE-CONTROL",
+ NULL
+};
+
+void
+http_print(netdissect_options *ndo, const u_char *pptr, u_int len)
+{
+ ndo->ndo_protocol = "http";
+ txtproto_print(ndo, pptr, len, httpcmds, RESP_CODE_SECOND_TOKEN);
+}
diff --git a/print-icmp.c b/print-icmp.c
new file mode 100644
index 0000000..54d215e
--- /dev/null
+++ b/print-icmp.c
@@ -0,0 +1,797 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Internet Control Message Protocol (ICMP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip.h"
+#include "udp.h"
+#include "ipproto.h"
+#include "mpls.h"
+
+/*
+ * Interface Control Message Protocol Definitions.
+ * Per RFC 792, September 1981.
+ */
+
+/*
+ * Structure of an icmp header.
+ */
+struct icmp {
+ nd_uint8_t icmp_type; /* type of message, see below */
+ nd_uint8_t icmp_code; /* type sub code */
+ nd_uint16_t icmp_cksum; /* ones complement cksum of struct */
+ union {
+ nd_uint8_t ih_pptr; /* ICMP_PARAMPROB */
+ nd_ipv4 ih_gwaddr; /* ICMP_REDIRECT */
+ struct ih_idseq {
+ nd_uint16_t icd_id;
+ nd_uint16_t icd_seq;
+ } ih_idseq;
+ nd_uint32_t ih_void;
+ } icmp_hun;
+#define icmp_pptr icmp_hun.ih_pptr
+#define icmp_gwaddr icmp_hun.ih_gwaddr
+#define icmp_id icmp_hun.ih_idseq.icd_id
+#define icmp_seq icmp_hun.ih_idseq.icd_seq
+#define icmp_void icmp_hun.ih_void
+ union {
+ struct id_ts {
+ nd_uint32_t its_otime;
+ nd_uint32_t its_rtime;
+ nd_uint32_t its_ttime;
+ } id_ts;
+ struct id_ip {
+ struct ip idi_ip;
+ /* options and then 64 bits of data */
+ } id_ip;
+ nd_uint32_t id_mask;
+ nd_byte id_data[1];
+ } icmp_dun;
+#define icmp_otime icmp_dun.id_ts.its_otime
+#define icmp_rtime icmp_dun.id_ts.its_rtime
+#define icmp_ttime icmp_dun.id_ts.its_ttime
+#define icmp_ip icmp_dun.id_ip.idi_ip
+#define icmp_mask icmp_dun.id_mask
+#define icmp_data icmp_dun.id_data
+};
+
+/*
+ * Lower bounds on packet lengths for various types.
+ * For the error advice packets must first insure that the
+ * packet is large enough to contain the returned ip header.
+ * Only then can we do the check to see if 64 bits of packet
+ * data have been returned, since we need to check the returned
+ * ip header length.
+ */
+#define ICMP_MINLEN 8 /* abs minimum */
+#define ICMP_EXTD_MINLEN (156 - sizeof (struct ip)) /* draft-bonica-internet-icmp-08 */
+#define ICMP_TSLEN (8 + 3 * sizeof (uint32_t)) /* timestamp */
+#define ICMP_MASKLEN 12 /* address mask */
+#define ICMP_ADVLENMIN (8 + sizeof (struct ip) + 8) /* min */
+#define ICMP_ADVLEN(p) (8 + (IP_HL(&(p)->icmp_ip) << 2) + 8)
+ /* N.B.: must separately check that ip_hl >= 5 */
+
+/*
+ * Definition of type and code field values.
+ */
+#define ICMP_ECHOREPLY 0 /* echo reply */
+#define ICMP_UNREACH 3 /* dest unreachable, codes: */
+#define ICMP_UNREACH_NET 0 /* bad net */
+#define ICMP_UNREACH_HOST 1 /* bad host */
+#define ICMP_UNREACH_PROTOCOL 2 /* bad protocol */
+#define ICMP_UNREACH_PORT 3 /* bad port */
+#define ICMP_UNREACH_NEEDFRAG 4 /* IP_DF caused drop */
+#define ICMP_UNREACH_SRCFAIL 5 /* src route failed */
+#define ICMP_UNREACH_NET_UNKNOWN 6 /* unknown net */
+#define ICMP_UNREACH_HOST_UNKNOWN 7 /* unknown host */
+#define ICMP_UNREACH_ISOLATED 8 /* src host isolated */
+#define ICMP_UNREACH_NET_PROHIB 9 /* prohibited access */
+#define ICMP_UNREACH_HOST_PROHIB 10 /* ditto */
+#define ICMP_UNREACH_TOSNET 11 /* bad tos for net */
+#define ICMP_UNREACH_TOSHOST 12 /* bad tos for host */
+#define ICMP_SOURCEQUENCH 4 /* packet lost, slow down */
+#define ICMP_REDIRECT 5 /* shorter route, codes: */
+#define ICMP_REDIRECT_NET 0 /* for network */
+#define ICMP_REDIRECT_HOST 1 /* for host */
+#define ICMP_REDIRECT_TOSNET 2 /* for tos and net */
+#define ICMP_REDIRECT_TOSHOST 3 /* for tos and host */
+#define ICMP_ECHO 8 /* echo service */
+#define ICMP_ROUTERADVERT 9 /* router advertisement */
+#define ICMP_ROUTERSOLICIT 10 /* router solicitation */
+#define ICMP_TIMXCEED 11 /* time exceeded, code: */
+#define ICMP_TIMXCEED_INTRANS 0 /* ttl==0 in transit */
+#define ICMP_TIMXCEED_REASS 1 /* ttl==0 in reass */
+#define ICMP_PARAMPROB 12 /* ip header bad */
+#define ICMP_PARAMPROB_OPTABSENT 1 /* req. opt. absent */
+#define ICMP_TSTAMP 13 /* timestamp request */
+#define ICMP_TSTAMPREPLY 14 /* timestamp reply */
+#define ICMP_IREQ 15 /* information request */
+#define ICMP_IREQREPLY 16 /* information reply */
+#define ICMP_MASKREQ 17 /* address mask request */
+#define ICMP_MASKREPLY 18 /* address mask reply */
+
+#define ICMP_MAXTYPE 18
+
+#define ICMP_ERRTYPE(type) \
+ ((type) == ICMP_UNREACH || (type) == ICMP_SOURCEQUENCH || \
+ (type) == ICMP_REDIRECT || (type) == ICMP_TIMXCEED || \
+ (type) == ICMP_PARAMPROB)
+#define ICMP_MULTIPART_EXT_TYPE(type) \
+ ((type) == ICMP_UNREACH || \
+ (type) == ICMP_TIMXCEED || \
+ (type) == ICMP_PARAMPROB)
+/* rfc1700 */
+#ifndef ICMP_UNREACH_NET_UNKNOWN
+#define ICMP_UNREACH_NET_UNKNOWN 6 /* destination net unknown */
+#endif
+#ifndef ICMP_UNREACH_HOST_UNKNOWN
+#define ICMP_UNREACH_HOST_UNKNOWN 7 /* destination host unknown */
+#endif
+#ifndef ICMP_UNREACH_ISOLATED
+#define ICMP_UNREACH_ISOLATED 8 /* source host isolated */
+#endif
+#ifndef ICMP_UNREACH_NET_PROHIB
+#define ICMP_UNREACH_NET_PROHIB 9 /* admin prohibited net */
+#endif
+#ifndef ICMP_UNREACH_HOST_PROHIB
+#define ICMP_UNREACH_HOST_PROHIB 10 /* admin prohibited host */
+#endif
+#ifndef ICMP_UNREACH_TOSNET
+#define ICMP_UNREACH_TOSNET 11 /* tos prohibited net */
+#endif
+#ifndef ICMP_UNREACH_TOSHOST
+#define ICMP_UNREACH_TOSHOST 12 /* tos prohibited host */
+#endif
+
+/* rfc1716 */
+#ifndef ICMP_UNREACH_FILTER_PROHIB
+#define ICMP_UNREACH_FILTER_PROHIB 13 /* admin prohibited filter */
+#endif
+#ifndef ICMP_UNREACH_HOST_PRECEDENCE
+#define ICMP_UNREACH_HOST_PRECEDENCE 14 /* host precedence violation */
+#endif
+#ifndef ICMP_UNREACH_PRECEDENCE_CUTOFF
+#define ICMP_UNREACH_PRECEDENCE_CUTOFF 15 /* precedence cutoff */
+#endif
+
+/* Most of the icmp types */
+static const struct tok icmp2str[] = {
+ { ICMP_ECHOREPLY, "echo reply" },
+ { ICMP_SOURCEQUENCH, "source quench" },
+ { ICMP_ECHO, "echo request" },
+ { ICMP_ROUTERSOLICIT, "router solicitation" },
+ { ICMP_TSTAMP, "time stamp request" },
+ { ICMP_TSTAMPREPLY, "time stamp reply" },
+ { ICMP_IREQ, "information request" },
+ { ICMP_IREQREPLY, "information reply" },
+ { ICMP_MASKREQ, "address mask request" },
+ { 0, NULL }
+};
+
+/* rfc1191 */
+struct mtu_discovery {
+ nd_uint16_t unused;
+ nd_uint16_t nexthopmtu;
+};
+
+/* rfc1256 */
+struct ih_rdiscovery {
+ nd_uint8_t ird_addrnum;
+ nd_uint8_t ird_addrsiz;
+ nd_uint16_t ird_lifetime;
+};
+
+struct id_rdiscovery {
+ nd_uint32_t ird_addr;
+ nd_uint32_t ird_pref;
+};
+
+/*
+ * RFC 4884 - Extended ICMP to Support Multi-Part Messages
+ *
+ * This is a general extension mechanism, based on the mechanism
+ * in draft-bonica-icmp-mpls-02 ICMP Extensions for MultiProtocol
+ * Label Switching.
+ *
+ * The Destination Unreachable, Time Exceeded
+ * and Parameter Problem messages are slightly changed as per
+ * the above RFC. A new Length field gets added to give
+ * the caller an idea about the length of the piggybacked
+ * IP packet before the extension header starts.
+ *
+ * The Length field represents length of the padded "original datagram"
+ * field measured in 32-bit words.
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Type | Code | Checksum |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | unused | Length | unused |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Internet Header + leading octets of original datagram |
+ * | |
+ * | // |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+struct icmp_ext_t {
+ nd_uint8_t icmp_type;
+ nd_uint8_t icmp_code;
+ nd_uint16_t icmp_checksum;
+ nd_byte icmp_reserved;
+ nd_uint8_t icmp_length;
+ nd_byte icmp_reserved2[2];
+ nd_byte icmp_ext_legacy_header[128]; /* extension header starts 128 bytes after ICMP header */
+ nd_byte icmp_ext_version_res[2];
+ nd_uint16_t icmp_ext_checksum;
+ nd_byte icmp_ext_data[1];
+};
+
+/*
+ * Extract version from the first octet of icmp_ext_version_res.
+ */
+#define ICMP_EXT_EXTRACT_VERSION(x) (((x)&0xf0)>>4)
+
+/*
+ * Current version.
+ */
+#define ICMP_EXT_VERSION 2
+
+/*
+ * Extension object class numbers.
+ *
+ * Class 1 dates back to draft-bonica-icmp-mpls-02.
+ */
+
+/* rfc4950 */
+#define MPLS_STACK_ENTRY_OBJECT_CLASS 1
+
+struct icmp_multipart_ext_object_header_t {
+ nd_uint16_t length;
+ nd_uint8_t class_num;
+ nd_uint8_t ctype;
+};
+
+static const struct tok icmp_multipart_ext_obj_values[] = {
+ { 1, "MPLS Stack Entry" },
+ { 2, "Interface Identification" },
+ { 0, NULL}
+};
+
+/* prototypes */
+const char *icmp_tstamp_print(u_int);
+
+/* print the milliseconds since midnight UTC */
+const char *
+icmp_tstamp_print(u_int tstamp)
+{
+ u_int msec,sec,min,hrs;
+
+ static char buf[64];
+
+ msec = tstamp % 1000;
+ sec = tstamp / 1000;
+ min = sec / 60; sec -= min * 60;
+ hrs = min / 60; min -= hrs * 60;
+ snprintf(buf, sizeof(buf), "%02u:%02u:%02u.%03u",hrs,min,sec,msec);
+ return buf;
+}
+
+void
+icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *bp2,
+ int fragmented)
+{
+ char *cp;
+ const struct icmp *dp;
+ uint8_t icmp_type, icmp_code;
+ const struct icmp_ext_t *ext_dp;
+ const struct ip *ip;
+ const char *str;
+ const struct ip *oip;
+ uint8_t ip_proto;
+ const struct udphdr *ouh;
+ const uint8_t *obj_tptr;
+ uint32_t raw_label;
+ const struct icmp_multipart_ext_object_header_t *icmp_multipart_ext_object_header;
+ u_int hlen, mtu, obj_tlen, obj_class_num, obj_ctype;
+ uint16_t dport;
+ char buf[MAXHOSTNAMELEN + 100];
+ struct cksum_vec vec[1];
+
+ ndo->ndo_protocol = "icmp";
+ dp = (const struct icmp *)bp;
+ ext_dp = (const struct icmp_ext_t *)bp;
+ ip = (const struct ip *)bp2;
+ str = buf;
+
+ icmp_type = GET_U_1(dp->icmp_type);
+ icmp_code = GET_U_1(dp->icmp_code);
+ switch (icmp_type) {
+
+ case ICMP_ECHO:
+ case ICMP_ECHOREPLY:
+ (void)snprintf(buf, sizeof(buf), "echo %s, id %u, seq %u",
+ icmp_type == ICMP_ECHO ?
+ "request" : "reply",
+ GET_BE_U_2(dp->icmp_id),
+ GET_BE_U_2(dp->icmp_seq));
+ break;
+
+ case ICMP_UNREACH:
+ switch (icmp_code) {
+
+ case ICMP_UNREACH_NET:
+ (void)snprintf(buf, sizeof(buf),
+ "net %s unreachable",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ case ICMP_UNREACH_HOST:
+ (void)snprintf(buf, sizeof(buf),
+ "host %s unreachable",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ case ICMP_UNREACH_PROTOCOL:
+ (void)snprintf(buf, sizeof(buf),
+ "%s protocol %u unreachable",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst),
+ GET_U_1(dp->icmp_ip.ip_p));
+ break;
+
+ case ICMP_UNREACH_PORT:
+ ND_TCHECK_1(dp->icmp_ip.ip_p);
+ oip = &dp->icmp_ip;
+ hlen = IP_HL(oip) * 4;
+ ouh = (const struct udphdr *)(((const u_char *)oip) + hlen);
+ dport = GET_BE_U_2(ouh->uh_dport);
+ ip_proto = GET_U_1(oip->ip_p);
+ switch (ip_proto) {
+
+ case IPPROTO_TCP:
+ (void)snprintf(buf, sizeof(buf),
+ "%s tcp port %s unreachable",
+ GET_IPADDR_STRING(oip->ip_dst),
+ tcpport_string(ndo, dport));
+ break;
+
+ case IPPROTO_UDP:
+ (void)snprintf(buf, sizeof(buf),
+ "%s udp port %s unreachable",
+ GET_IPADDR_STRING(oip->ip_dst),
+ udpport_string(ndo, dport));
+ break;
+
+ default:
+ (void)snprintf(buf, sizeof(buf),
+ "%s protocol %u port %u unreachable",
+ GET_IPADDR_STRING(oip->ip_dst),
+ ip_proto, dport);
+ break;
+ }
+ break;
+
+ case ICMP_UNREACH_NEEDFRAG:
+ {
+ const struct mtu_discovery *mp;
+ mp = (const struct mtu_discovery *)(const u_char *)&dp->icmp_void;
+ mtu = GET_BE_U_2(mp->nexthopmtu);
+ if (mtu) {
+ (void)snprintf(buf, sizeof(buf),
+ "%s unreachable - need to frag (mtu %u)",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst), mtu);
+ } else {
+ (void)snprintf(buf, sizeof(buf),
+ "%s unreachable - need to frag",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ }
+ }
+ break;
+
+ case ICMP_UNREACH_SRCFAIL:
+ (void)snprintf(buf, sizeof(buf),
+ "%s unreachable - source route failed",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ case ICMP_UNREACH_NET_UNKNOWN:
+ (void)snprintf(buf, sizeof(buf),
+ "net %s unreachable - unknown",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ case ICMP_UNREACH_HOST_UNKNOWN:
+ (void)snprintf(buf, sizeof(buf),
+ "host %s unreachable - unknown",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ case ICMP_UNREACH_ISOLATED:
+ (void)snprintf(buf, sizeof(buf),
+ "%s unreachable - source host isolated",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ case ICMP_UNREACH_NET_PROHIB:
+ (void)snprintf(buf, sizeof(buf),
+ "net %s unreachable - admin prohibited",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ case ICMP_UNREACH_HOST_PROHIB:
+ (void)snprintf(buf, sizeof(buf),
+ "host %s unreachable - admin prohibited",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ case ICMP_UNREACH_TOSNET:
+ (void)snprintf(buf, sizeof(buf),
+ "net %s unreachable - tos prohibited",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ case ICMP_UNREACH_TOSHOST:
+ (void)snprintf(buf, sizeof(buf),
+ "host %s unreachable - tos prohibited",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ case ICMP_UNREACH_FILTER_PROHIB:
+ (void)snprintf(buf, sizeof(buf),
+ "host %s unreachable - admin prohibited filter",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ case ICMP_UNREACH_HOST_PRECEDENCE:
+ (void)snprintf(buf, sizeof(buf),
+ "host %s unreachable - host precedence violation",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ case ICMP_UNREACH_PRECEDENCE_CUTOFF:
+ (void)snprintf(buf, sizeof(buf),
+ "host %s unreachable - precedence cutoff",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst));
+ break;
+
+ default:
+ (void)snprintf(buf, sizeof(buf),
+ "%s unreachable - #%u",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst),
+ icmp_code);
+ break;
+ }
+ break;
+
+ case ICMP_REDIRECT:
+ switch (icmp_code) {
+
+ case ICMP_REDIRECT_NET:
+ (void)snprintf(buf, sizeof(buf),
+ "redirect %s to net %s",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst),
+ GET_IPADDR_STRING(dp->icmp_gwaddr));
+ break;
+
+ case ICMP_REDIRECT_HOST:
+ (void)snprintf(buf, sizeof(buf),
+ "redirect %s to host %s",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst),
+ GET_IPADDR_STRING(dp->icmp_gwaddr));
+ break;
+
+ case ICMP_REDIRECT_TOSNET:
+ (void)snprintf(buf, sizeof(buf),
+ "redirect-tos %s to net %s",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst),
+ GET_IPADDR_STRING(dp->icmp_gwaddr));
+ break;
+
+ case ICMP_REDIRECT_TOSHOST:
+ (void)snprintf(buf, sizeof(buf),
+ "redirect-tos %s to host %s",
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst),
+ GET_IPADDR_STRING(dp->icmp_gwaddr));
+ break;
+
+ default:
+ (void)snprintf(buf, sizeof(buf),
+ "redirect-#%u %s to %s", icmp_code,
+ GET_IPADDR_STRING(dp->icmp_ip.ip_dst),
+ GET_IPADDR_STRING(dp->icmp_gwaddr));
+ break;
+ }
+ break;
+
+ case ICMP_ROUTERADVERT:
+ {
+ const struct ih_rdiscovery *ihp;
+ const struct id_rdiscovery *idp;
+ u_int lifetime, num, size;
+
+ (void)snprintf(buf, sizeof(buf), "router advertisement");
+ cp = buf + strlen(buf);
+
+ ihp = (const struct ih_rdiscovery *)&dp->icmp_void;
+ ND_TCHECK_SIZE(ihp);
+ (void)strncpy(cp, " lifetime ", sizeof(buf) - (cp - buf));
+ cp = buf + strlen(buf);
+ lifetime = GET_BE_U_2(ihp->ird_lifetime);
+ if (lifetime < 60) {
+ (void)snprintf(cp, sizeof(buf) - (cp - buf), "%u",
+ lifetime);
+ } else if (lifetime < 60 * 60) {
+ (void)snprintf(cp, sizeof(buf) - (cp - buf), "%u:%02u",
+ lifetime / 60, lifetime % 60);
+ } else {
+ (void)snprintf(cp, sizeof(buf) - (cp - buf),
+ "%u:%02u:%02u",
+ lifetime / 3600,
+ (lifetime % 3600) / 60,
+ lifetime % 60);
+ }
+ cp = buf + strlen(buf);
+
+ num = GET_U_1(ihp->ird_addrnum);
+ (void)snprintf(cp, sizeof(buf) - (cp - buf), " %u:", num);
+ cp = buf + strlen(buf);
+
+ size = GET_U_1(ihp->ird_addrsiz);
+ if (size != 2) {
+ (void)snprintf(cp, sizeof(buf) - (cp - buf),
+ " [size %u]", size);
+ break;
+ }
+ idp = (const struct id_rdiscovery *)&dp->icmp_data;
+ while (num > 0) {
+ ND_TCHECK_SIZE(idp);
+ (void)snprintf(cp, sizeof(buf) - (cp - buf), " {%s %u}",
+ GET_IPADDR_STRING(idp->ird_addr),
+ GET_BE_U_4(idp->ird_pref));
+ cp = buf + strlen(buf);
+ ++idp;
+ num--;
+ }
+ }
+ break;
+
+ case ICMP_TIMXCEED:
+ ND_TCHECK_4(dp->icmp_ip.ip_dst);
+ switch (icmp_code) {
+
+ case ICMP_TIMXCEED_INTRANS:
+ str = "time exceeded in-transit";
+ break;
+
+ case ICMP_TIMXCEED_REASS:
+ str = "ip reassembly time exceeded";
+ break;
+
+ default:
+ (void)snprintf(buf, sizeof(buf), "time exceeded-#%u",
+ icmp_code);
+ break;
+ }
+ break;
+
+ case ICMP_PARAMPROB:
+ if (icmp_code)
+ (void)snprintf(buf, sizeof(buf),
+ "parameter problem - code %u", icmp_code);
+ else {
+ (void)snprintf(buf, sizeof(buf),
+ "parameter problem - octet %u",
+ GET_U_1(dp->icmp_pptr));
+ }
+ break;
+
+ case ICMP_MASKREPLY:
+ (void)snprintf(buf, sizeof(buf), "address mask is 0x%08x",
+ GET_BE_U_4(dp->icmp_mask));
+ break;
+
+ case ICMP_TSTAMP:
+ (void)snprintf(buf, sizeof(buf),
+ "time stamp query id %u seq %u",
+ GET_BE_U_2(dp->icmp_id),
+ GET_BE_U_2(dp->icmp_seq));
+ break;
+
+ case ICMP_TSTAMPREPLY:
+ ND_TCHECK_4(dp->icmp_ttime);
+ (void)snprintf(buf, sizeof(buf),
+ "time stamp reply id %u seq %u: org %s",
+ GET_BE_U_2(dp->icmp_id),
+ GET_BE_U_2(dp->icmp_seq),
+ icmp_tstamp_print(GET_BE_U_4(dp->icmp_otime)));
+
+ (void)snprintf(buf+strlen(buf),sizeof(buf)-strlen(buf),", recv %s",
+ icmp_tstamp_print(GET_BE_U_4(dp->icmp_rtime)));
+ (void)snprintf(buf+strlen(buf),sizeof(buf)-strlen(buf),", xmit %s",
+ icmp_tstamp_print(GET_BE_U_4(dp->icmp_ttime)));
+ break;
+
+ default:
+ str = tok2str(icmp2str, "type-#%u", icmp_type);
+ break;
+ }
+ ND_PRINT("ICMP %s, length %u", str, plen);
+ if (ndo->ndo_vflag && !fragmented) { /* don't attempt checksumming if this is a frag */
+ if (ND_TTEST_LEN(bp, plen)) {
+ uint16_t sum;
+
+ vec[0].ptr = (const uint8_t *)(const void *)dp;
+ vec[0].len = plen;
+ sum = in_cksum(vec, 1);
+ if (sum != 0) {
+ uint16_t icmp_sum = GET_BE_U_2(dp->icmp_cksum);
+ ND_PRINT(" (wrong icmp cksum %x (->%x)!)",
+ icmp_sum,
+ in_cksum_shouldbe(icmp_sum, sum));
+ }
+ }
+ }
+
+ /*
+ * print the remnants of the IP packet.
+ * save the snaplength as this may get overridden in the IP printer.
+ */
+ if (ndo->ndo_vflag >= 1 && ICMP_ERRTYPE(icmp_type)) {
+ const u_char *snapend_save;
+
+ bp += 8;
+ ND_PRINT("\n\t");
+ ip = (const struct ip *)bp;
+ snapend_save = ndo->ndo_snapend;
+ /*
+ * Update the snapend because extensions (MPLS, ...) may be
+ * present after the IP packet. In this case the current
+ * (outer) packet's snapend is not what ip_print() needs to
+ * decode an IP packet nested in the middle of an ICMP payload.
+ *
+ * This prevents that, in ip_print(), for the nested IP packet,
+ * the remaining length < remaining caplen.
+ */
+ ndo->ndo_snapend = ND_MIN(bp + GET_BE_U_2(ip->ip_len),
+ ndo->ndo_snapend);
+ ip_print(ndo, bp, GET_BE_U_2(ip->ip_len));
+ ndo->ndo_snapend = snapend_save;
+ }
+
+ /* ndo_protocol reassignment after ip_print() call */
+ ndo->ndo_protocol = "icmp";
+
+ /*
+ * Attempt to decode multi-part message extensions (rfc4884) only for some ICMP types.
+ */
+ if (ndo->ndo_vflag >= 1 && plen > ICMP_EXTD_MINLEN && ICMP_MULTIPART_EXT_TYPE(icmp_type)) {
+
+ ND_TCHECK_SIZE(ext_dp);
+
+ /*
+ * Check first if the multi-part extension header shows a non-zero length.
+ * If the length field is not set then silently verify the checksum
+ * to check if an extension header is present. This is expedient,
+ * however not all implementations set the length field proper.
+ */
+ if (GET_U_1(ext_dp->icmp_length) == 0 &&
+ ND_TTEST_LEN(ext_dp->icmp_ext_version_res, plen - ICMP_EXTD_MINLEN)) {
+ vec[0].ptr = (const uint8_t *)(const void *)&ext_dp->icmp_ext_version_res;
+ vec[0].len = plen - ICMP_EXTD_MINLEN;
+ if (in_cksum(vec, 1)) {
+ return;
+ }
+ }
+
+ ND_PRINT("\n\tICMP Multi-Part extension v%u",
+ ICMP_EXT_EXTRACT_VERSION(*(ext_dp->icmp_ext_version_res)));
+
+ /*
+ * Sanity checking of the header.
+ */
+ if (ICMP_EXT_EXTRACT_VERSION(*(ext_dp->icmp_ext_version_res)) !=
+ ICMP_EXT_VERSION) {
+ ND_PRINT(" packet not supported");
+ return;
+ }
+
+ hlen = plen - ICMP_EXTD_MINLEN;
+ if (ND_TTEST_LEN(ext_dp->icmp_ext_version_res, hlen)) {
+ vec[0].ptr = (const uint8_t *)(const void *)&ext_dp->icmp_ext_version_res;
+ vec[0].len = hlen;
+ ND_PRINT(", checksum 0x%04x (%scorrect), length %u",
+ GET_BE_U_2(ext_dp->icmp_ext_checksum),
+ in_cksum(vec, 1) ? "in" : "",
+ hlen);
+ }
+
+ hlen -= 4; /* subtract common header size */
+ obj_tptr = (const uint8_t *)ext_dp->icmp_ext_data;
+
+ while (hlen > sizeof(struct icmp_multipart_ext_object_header_t)) {
+
+ icmp_multipart_ext_object_header = (const struct icmp_multipart_ext_object_header_t *)obj_tptr;
+ ND_TCHECK_SIZE(icmp_multipart_ext_object_header);
+ obj_tlen = GET_BE_U_2(icmp_multipart_ext_object_header->length);
+ obj_class_num = GET_U_1(icmp_multipart_ext_object_header->class_num);
+ obj_ctype = GET_U_1(icmp_multipart_ext_object_header->ctype);
+ obj_tptr += sizeof(struct icmp_multipart_ext_object_header_t);
+
+ ND_PRINT("\n\t %s Object (%u), Class-Type: %u, length %u",
+ tok2str(icmp_multipart_ext_obj_values,"unknown",obj_class_num),
+ obj_class_num,
+ obj_ctype,
+ obj_tlen);
+
+ hlen-=sizeof(struct icmp_multipart_ext_object_header_t); /* length field includes tlv header */
+
+ /* infinite loop protection */
+ if ((obj_class_num == 0) ||
+ (obj_tlen < sizeof(struct icmp_multipart_ext_object_header_t))) {
+ return;
+ }
+ obj_tlen-=sizeof(struct icmp_multipart_ext_object_header_t);
+
+ switch (obj_class_num) {
+ case MPLS_STACK_ENTRY_OBJECT_CLASS:
+ switch(obj_ctype) {
+ case 1:
+ raw_label = GET_BE_U_4(obj_tptr);
+ ND_PRINT("\n\t label %u, tc %u", MPLS_LABEL(raw_label), MPLS_TC(raw_label));
+ if (MPLS_STACK(raw_label))
+ ND_PRINT(", [S]");
+ ND_PRINT(", ttl %u", MPLS_TTL(raw_label));
+ break;
+ default:
+ print_unknown_data(ndo, obj_tptr, "\n\t ", obj_tlen);
+ }
+ break;
+
+ default:
+ print_unknown_data(ndo, obj_tptr, "\n\t ", obj_tlen);
+ break;
+ }
+ if (hlen < obj_tlen)
+ break;
+ hlen -= obj_tlen;
+ obj_tptr += obj_tlen;
+ }
+ }
+
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-icmp6.c b/print-icmp6.c
new file mode 100644
index 0000000..4738e77
--- /dev/null
+++ b/print-icmp6.c
@@ -0,0 +1,2082 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IPv6 Internet Control Message Protocol (ICMPv6) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "addrtostr.h"
+#include "extract.h"
+
+#include "ip6.h"
+#include "ipproto.h"
+
+#include "udp.h"
+#include "ah.h"
+
+/* NetBSD: icmp6.h,v 1.13 2000/08/03 16:30:37 itojun Exp */
+/* $KAME: icmp6.h,v 1.22 2000/08/03 15:25:16 jinmei Exp $ */
+
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+struct icmp6_hdr {
+ nd_uint8_t icmp6_type; /* type field */
+ nd_uint8_t icmp6_code; /* code field */
+ nd_uint16_t icmp6_cksum; /* checksum field */
+ union {
+ nd_uint32_t icmp6_un_data32[1]; /* type-specific field */
+ nd_uint16_t icmp6_un_data16[2]; /* type-specific field */
+ nd_uint8_t icmp6_un_data8[4]; /* type-specific field */
+ nd_byte icmp6_un_data[1]; /* type-specific field */
+ } icmp6_dataun;
+};
+
+#define icmp6_data32 icmp6_dataun.icmp6_un_data32
+#define icmp6_data16 icmp6_dataun.icmp6_un_data16
+#define icmp6_data8 icmp6_dataun.icmp6_un_data8
+#define icmp6_data icmp6_dataun.icmp6_un_data
+#define icmp6_pptr icmp6_data32[0] /* parameter prob */
+#define icmp6_mtu icmp6_data32[0] /* packet too big */
+#define icmp6_id icmp6_data16[0] /* echo request/reply */
+#define icmp6_seq icmp6_data16[1] /* echo request/reply */
+#define icmp6_maxdelay icmp6_data16[0] /* mcast group membership */
+
+#define ICMP6_DST_UNREACH 1 /* dest unreachable, codes: */
+#define ICMP6_PACKET_TOO_BIG 2 /* packet too big */
+#define ICMP6_TIME_EXCEEDED 3 /* time exceeded, code: */
+#define ICMP6_PARAM_PROB 4 /* ip6 header bad */
+
+#define ICMP6_ECHO_REQUEST 128 /* echo service */
+#define ICMP6_ECHO_REPLY 129 /* echo reply */
+#define ICMP6_MEMBERSHIP_QUERY 130 /* group membership query */
+#define MLD6_LISTENER_QUERY 130 /* multicast listener query */
+#define ICMP6_MEMBERSHIP_REPORT 131 /* group membership report */
+#define MLD6_LISTENER_REPORT 131 /* multicast listener report */
+#define ICMP6_MEMBERSHIP_REDUCTION 132 /* group membership termination */
+#define MLD6_LISTENER_DONE 132 /* multicast listener done */
+
+#define ND_ROUTER_SOLICIT 133 /* router solicitation */
+#define ND_ROUTER_ADVERT 134 /* router advertisement */
+#define ND_NEIGHBOR_SOLICIT 135 /* neighbor solicitation */
+#define ND_NEIGHBOR_ADVERT 136 /* neighbor advertisement */
+#define ND_REDIRECT 137 /* redirect */
+
+#define ICMP6_ROUTER_RENUMBERING 138 /* router renumbering */
+
+#define ICMP6_WRUREQUEST 139 /* who are you request */
+#define ICMP6_WRUREPLY 140 /* who are you reply */
+#define ICMP6_FQDN_QUERY 139 /* FQDN query */
+#define ICMP6_FQDN_REPLY 140 /* FQDN reply */
+#define ICMP6_NI_QUERY 139 /* node information request - RFC 4620 */
+#define ICMP6_NI_REPLY 140 /* node information reply - RFC 4620 */
+#define IND_SOLICIT 141 /* inverse neighbor solicitation */
+#define IND_ADVERT 142 /* inverse neighbor advertisement */
+
+#define ICMP6_V2_MEMBERSHIP_REPORT 143 /* v2 membership report */
+#define MLDV2_LISTENER_REPORT 143 /* v2 multicast listener report */
+#define ICMP6_HADISCOV_REQUEST 144
+#define ICMP6_HADISCOV_REPLY 145
+#define ICMP6_MOBILEPREFIX_SOLICIT 146
+#define ICMP6_MOBILEPREFIX_ADVERT 147
+
+#define MLD6_MTRACE_RESP 200 /* mtrace response(to sender) */
+#define MLD6_MTRACE 201 /* mtrace messages */
+
+#define ICMP6_MAXTYPE 201
+
+#define ICMP6_DST_UNREACH_NOROUTE 0 /* no route to destination */
+#define ICMP6_DST_UNREACH_ADMIN 1 /* administratively prohibited */
+#define ICMP6_DST_UNREACH_NOTNEIGHBOR 2 /* not a neighbor(obsolete) */
+#define ICMP6_DST_UNREACH_BEYONDSCOPE 2 /* beyond scope of source address */
+#define ICMP6_DST_UNREACH_ADDR 3 /* address unreachable */
+#define ICMP6_DST_UNREACH_NOPORT 4 /* port unreachable */
+
+#define ICMP6_TIME_EXCEED_TRANSIT 0 /* ttl==0 in transit */
+#define ICMP6_TIME_EXCEED_REASSEMBLY 1 /* ttl==0 in reass */
+
+#define ICMP6_PARAMPROB_HEADER 0 /* erroneous header field */
+#define ICMP6_PARAMPROB_NEXTHEADER 1 /* unrecognized next header */
+#define ICMP6_PARAMPROB_OPTION 2 /* unrecognized option */
+#define ICMP6_PARAMPROB_FRAGHDRCHAIN 3 /* incomplete header chain */
+
+#define ICMP6_INFOMSG_MASK 0x80 /* all informational messages */
+
+#define ICMP6_NI_SUBJ_IPV6 0 /* Query Subject is an IPv6 address */
+#define ICMP6_NI_SUBJ_FQDN 1 /* Query Subject is a Domain name */
+#define ICMP6_NI_SUBJ_IPV4 2 /* Query Subject is an IPv4 address */
+
+#define ICMP6_NI_SUCCESS 0 /* node information successful reply */
+#define ICMP6_NI_REFUSED 1 /* node information request is refused */
+#define ICMP6_NI_UNKNOWN 2 /* unknown Qtype */
+
+#define ICMP6_ROUTER_RENUMBERING_COMMAND 0 /* rr command */
+#define ICMP6_ROUTER_RENUMBERING_RESULT 1 /* rr result */
+#define ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET 255 /* rr seq num reset */
+
+/* Used in kernel only */
+#define ND_REDIRECT_ONLINK 0 /* redirect to an on-link node */
+#define ND_REDIRECT_ROUTER 1 /* redirect to a better router */
+
+/*
+ * Multicast Listener Discovery
+ */
+struct mld6_hdr {
+ struct icmp6_hdr mld6_hdr;
+ nd_ipv6 mld6_addr; /* multicast address */
+};
+
+#define mld6_type mld6_hdr.icmp6_type
+#define mld6_code mld6_hdr.icmp6_code
+#define mld6_cksum mld6_hdr.icmp6_cksum
+#define mld6_maxdelay mld6_hdr.icmp6_data16[0]
+#define mld6_reserved mld6_hdr.icmp6_data16[1]
+
+#define MLD_MINLEN 24
+#define MLDV2_MINLEN 28
+
+/*
+ * Neighbor Discovery
+ */
+
+struct nd_router_solicit { /* router solicitation */
+ struct icmp6_hdr nd_rs_hdr;
+ /* could be followed by options */
+};
+
+#define nd_rs_type nd_rs_hdr.icmp6_type
+#define nd_rs_code nd_rs_hdr.icmp6_code
+#define nd_rs_cksum nd_rs_hdr.icmp6_cksum
+#define nd_rs_reserved nd_rs_hdr.icmp6_data32[0]
+
+struct nd_router_advert { /* router advertisement */
+ struct icmp6_hdr nd_ra_hdr;
+ nd_uint32_t nd_ra_reachable; /* reachable time */
+ nd_uint32_t nd_ra_retransmit; /* retransmit timer */
+ /* could be followed by options */
+};
+
+#define nd_ra_type nd_ra_hdr.icmp6_type
+#define nd_ra_code nd_ra_hdr.icmp6_code
+#define nd_ra_cksum nd_ra_hdr.icmp6_cksum
+#define nd_ra_curhoplimit nd_ra_hdr.icmp6_data8[0]
+#define nd_ra_flags_reserved nd_ra_hdr.icmp6_data8[1]
+#define ND_RA_FLAG_MANAGED 0x80
+#define ND_RA_FLAG_OTHER 0x40
+#define ND_RA_FLAG_HOME_AGENT 0x20
+#define ND_RA_FLAG_IPV6ONLY 0x02
+
+/*
+ * Router preference values based on draft-draves-ipngwg-router-selection-01.
+ * These are non-standard definitions.
+ */
+#define ND_RA_FLAG_RTPREF_MASK 0x18 /* 00011000 */
+
+#define ND_RA_FLAG_RTPREF_HIGH 0x08 /* 00001000 */
+#define ND_RA_FLAG_RTPREF_MEDIUM 0x00 /* 00000000 */
+#define ND_RA_FLAG_RTPREF_LOW 0x18 /* 00011000 */
+#define ND_RA_FLAG_RTPREF_RSV 0x10 /* 00010000 */
+
+#define nd_ra_router_lifetime nd_ra_hdr.icmp6_data16[1]
+
+struct nd_neighbor_solicit { /* neighbor solicitation */
+ struct icmp6_hdr nd_ns_hdr;
+ nd_ipv6 nd_ns_target; /*target address */
+ /* could be followed by options */
+};
+
+#define nd_ns_type nd_ns_hdr.icmp6_type
+#define nd_ns_code nd_ns_hdr.icmp6_code
+#define nd_ns_cksum nd_ns_hdr.icmp6_cksum
+#define nd_ns_reserved nd_ns_hdr.icmp6_data32[0]
+
+struct nd_neighbor_advert { /* neighbor advertisement */
+ struct icmp6_hdr nd_na_hdr;
+ nd_ipv6 nd_na_target; /* target address */
+ /* could be followed by options */
+};
+
+#define nd_na_type nd_na_hdr.icmp6_type
+#define nd_na_code nd_na_hdr.icmp6_code
+#define nd_na_cksum nd_na_hdr.icmp6_cksum
+#define nd_na_flags_reserved nd_na_hdr.icmp6_data32[0]
+
+#define ND_NA_FLAG_ROUTER 0x80000000
+#define ND_NA_FLAG_SOLICITED 0x40000000
+#define ND_NA_FLAG_OVERRIDE 0x20000000
+
+struct nd_redirect { /* redirect */
+ struct icmp6_hdr nd_rd_hdr;
+ nd_ipv6 nd_rd_target; /* target address */
+ nd_ipv6 nd_rd_dst; /* destination address */
+ /* could be followed by options */
+};
+
+#define nd_rd_type nd_rd_hdr.icmp6_type
+#define nd_rd_code nd_rd_hdr.icmp6_code
+#define nd_rd_cksum nd_rd_hdr.icmp6_cksum
+#define nd_rd_reserved nd_rd_hdr.icmp6_data32[0]
+
+struct nd_opt_hdr { /* Neighbor discovery option header */
+ nd_uint8_t nd_opt_type;
+ nd_uint8_t nd_opt_len;
+ /* followed by option specific data*/
+};
+
+#define ND_OPT_SOURCE_LINKADDR 1
+#define ND_OPT_TARGET_LINKADDR 2
+#define ND_OPT_PREFIX_INFORMATION 3
+#define ND_OPT_REDIRECTED_HEADER 4
+#define ND_OPT_MTU 5
+#define ND_OPT_ADVINTERVAL 7
+#define ND_OPT_HOMEAGENT_INFO 8
+#define ND_OPT_ROUTE_INFO 24 /* RFC4191 */
+#define ND_OPT_RDNSS 25
+#define ND_OPT_DNSSL 31
+
+struct nd_opt_prefix_info { /* prefix information */
+ nd_uint8_t nd_opt_pi_type;
+ nd_uint8_t nd_opt_pi_len;
+ nd_uint8_t nd_opt_pi_prefix_len;
+ nd_uint8_t nd_opt_pi_flags_reserved;
+ nd_uint32_t nd_opt_pi_valid_time;
+ nd_uint32_t nd_opt_pi_preferred_time;
+ nd_uint32_t nd_opt_pi_reserved2;
+ nd_ipv6 nd_opt_pi_prefix;
+};
+
+#define ND_OPT_PI_FLAG_ONLINK 0x80
+#define ND_OPT_PI_FLAG_AUTO 0x40
+#define ND_OPT_PI_FLAG_ROUTER 0x20 /*2292bis*/
+
+struct nd_opt_rd_hdr { /* redirected header */
+ nd_uint8_t nd_opt_rh_type;
+ nd_uint8_t nd_opt_rh_len;
+ nd_uint16_t nd_opt_rh_reserved1;
+ nd_uint32_t nd_opt_rh_reserved2;
+ /* followed by IP header and data */
+};
+
+struct nd_opt_mtu { /* MTU option */
+ nd_uint8_t nd_opt_mtu_type;
+ nd_uint8_t nd_opt_mtu_len;
+ nd_uint16_t nd_opt_mtu_reserved;
+ nd_uint32_t nd_opt_mtu_mtu;
+};
+
+struct nd_opt_rdnss { /* RDNSS RFC 6106 5.1 */
+ nd_uint8_t nd_opt_rdnss_type;
+ nd_uint8_t nd_opt_rdnss_len;
+ nd_uint16_t nd_opt_rdnss_reserved;
+ nd_uint32_t nd_opt_rdnss_lifetime;
+ nd_ipv6 nd_opt_rdnss_addr[1]; /* variable-length */
+};
+
+struct nd_opt_dnssl { /* DNSSL RFC 6106 5.2 */
+ nd_uint8_t nd_opt_dnssl_type;
+ nd_uint8_t nd_opt_dnssl_len;
+ nd_uint16_t nd_opt_dnssl_reserved;
+ nd_uint32_t nd_opt_dnssl_lifetime;
+ /* followed by list of DNS search domains, variable-length */
+};
+
+struct nd_opt_advinterval { /* Advertisement interval option */
+ nd_uint8_t nd_opt_adv_type;
+ nd_uint8_t nd_opt_adv_len;
+ nd_uint16_t nd_opt_adv_reserved;
+ nd_uint32_t nd_opt_adv_interval;
+};
+
+struct nd_opt_homeagent_info { /* Home Agent info */
+ nd_uint8_t nd_opt_hai_type;
+ nd_uint8_t nd_opt_hai_len;
+ nd_uint16_t nd_opt_hai_reserved;
+ nd_uint16_t nd_opt_hai_preference;
+ nd_uint16_t nd_opt_hai_lifetime;
+};
+
+struct nd_opt_route_info { /* route info */
+ nd_uint8_t nd_opt_rti_type;
+ nd_uint8_t nd_opt_rti_len;
+ nd_uint8_t nd_opt_rti_prefixlen;
+ nd_uint8_t nd_opt_rti_flags;
+ nd_uint32_t nd_opt_rti_lifetime;
+ /* prefix follows */
+};
+
+/*
+ * icmp6 namelookup
+ */
+
+struct icmp6_namelookup {
+ struct icmp6_hdr icmp6_nl_hdr;
+ nd_byte icmp6_nl_nonce[8];
+ nd_int32_t icmp6_nl_ttl;
+#if 0
+ nd_uint8_t icmp6_nl_len;
+ nd_byte icmp6_nl_name[3];
+#endif
+ /* could be followed by options */
+};
+
+/*
+ * icmp6 node information
+ */
+struct icmp6_nodeinfo {
+ struct icmp6_hdr icmp6_ni_hdr;
+ nd_byte icmp6_ni_nonce[8];
+ /* could be followed by reply data */
+};
+
+#define ni_type icmp6_ni_hdr.icmp6_type
+#define ni_code icmp6_ni_hdr.icmp6_code
+#define ni_cksum icmp6_ni_hdr.icmp6_cksum
+#define ni_qtype icmp6_ni_hdr.icmp6_data16[0]
+#define ni_flags icmp6_ni_hdr.icmp6_data16[1]
+
+#define NI_QTYPE_NOOP 0 /* NOOP */
+#define NI_QTYPE_SUPTYPES 1 /* Supported Qtypes (drafts up to 09) */
+#define NI_QTYPE_FQDN 2 /* FQDN (draft 04) */
+#define NI_QTYPE_DNSNAME 2 /* DNS Name */
+#define NI_QTYPE_NODEADDR 3 /* Node Addresses */
+#define NI_QTYPE_IPV4ADDR 4 /* IPv4 Addresses */
+
+#define NI_NODEADDR_FLAG_TRUNCATE 0x0001
+#define NI_NODEADDR_FLAG_ALL 0x0002
+#define NI_NODEADDR_FLAG_COMPAT 0x0004
+#define NI_NODEADDR_FLAG_LINKLOCAL 0x0008
+#define NI_NODEADDR_FLAG_SITELOCAL 0x0010
+#define NI_NODEADDR_FLAG_GLOBAL 0x0020
+#define NI_NODEADDR_FLAG_ANYCAST 0x0040 /* just experimental. not in spec */
+
+struct ni_reply_fqdn {
+ nd_uint32_t ni_fqdn_ttl; /* TTL */
+ nd_uint8_t ni_fqdn_namelen; /* length in octets of the FQDN */
+ nd_byte ni_fqdn_name[3]; /* XXX: alignment */
+};
+
+/*
+ * Router Renumbering. as router-renum-08.txt
+ */
+struct icmp6_router_renum { /* router renumbering header */
+ struct icmp6_hdr rr_hdr;
+ nd_uint8_t rr_segnum;
+ nd_uint8_t rr_flags;
+ nd_uint16_t rr_maxdelay;
+ nd_uint32_t rr_reserved;
+};
+#define ICMP6_RR_FLAGS_TEST 0x80
+#define ICMP6_RR_FLAGS_REQRESULT 0x40
+#define ICMP6_RR_FLAGS_FORCEAPPLY 0x20
+#define ICMP6_RR_FLAGS_SPECSITE 0x10
+#define ICMP6_RR_FLAGS_PREVDONE 0x08
+
+#define rr_type rr_hdr.icmp6_type
+#define rr_code rr_hdr.icmp6_code
+#define rr_cksum rr_hdr.icmp6_cksum
+#define rr_seqnum rr_hdr.icmp6_data32[0]
+
+struct rr_pco_match { /* match prefix part */
+ nd_uint8_t rpm_code;
+ nd_uint8_t rpm_len;
+ nd_uint8_t rpm_ordinal;
+ nd_uint8_t rpm_matchlen;
+ nd_uint8_t rpm_minlen;
+ nd_uint8_t rpm_maxlen;
+ nd_uint16_t rpm_reserved;
+ nd_ipv6 rpm_prefix;
+};
+
+#define RPM_PCO_ADD 1
+#define RPM_PCO_CHANGE 2
+#define RPM_PCO_SETGLOBAL 3
+#define RPM_PCO_MAX 4
+
+struct rr_pco_use { /* use prefix part */
+ nd_uint8_t rpu_uselen;
+ nd_uint8_t rpu_keeplen;
+ nd_uint8_t rpu_ramask;
+ nd_uint8_t rpu_raflags;
+ nd_uint32_t rpu_vltime;
+ nd_uint32_t rpu_pltime;
+ nd_uint32_t rpu_flags;
+ nd_ipv6 rpu_prefix;
+};
+#define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK 0x80
+#define ICMP6_RR_PCOUSE_RAFLAGS_AUTO 0x40
+
+/* network endian */
+#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME ((uint32_t)htonl(0x80000000))
+#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME ((uint32_t)htonl(0x40000000))
+
+struct rr_result { /* router renumbering result message */
+ nd_uint16_t rrr_flags;
+ nd_uint8_t rrr_ordinal;
+ nd_uint8_t rrr_matchedlen;
+ nd_uint32_t rrr_ifid;
+ nd_ipv6 rrr_prefix;
+};
+/* network endian */
+#define ICMP6_RR_RESULT_FLAGS_OOB ((uint16_t)htons(0x0002))
+#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN ((uint16_t)htons(0x0001))
+
+static const char *get_rtpref(u_int);
+static const char *get_lifetime(uint32_t);
+static void print_lladdr(netdissect_options *ndo, const u_char *, size_t);
+static int icmp6_opt_print(netdissect_options *ndo, const u_char *, int);
+static void mld6_print(netdissect_options *ndo, const u_char *);
+static void mldv2_report_print(netdissect_options *ndo, const u_char *, u_int);
+static void mldv2_query_print(netdissect_options *ndo, const u_char *, u_int);
+static const struct udphdr *get_upperlayer(netdissect_options *ndo, const u_char *, u_int *);
+static void dnsname_print(netdissect_options *ndo, const u_char *, const u_char *);
+static void icmp6_nodeinfo_print(netdissect_options *ndo, u_int, const u_char *, const u_char *);
+static void icmp6_rrenum_print(netdissect_options *ndo, const u_char *, const u_char *);
+
+/*
+ * DIO: Updated to RFC6550, as published in 2012: section 6. (page 30)
+ */
+
+#define ND_RPL_MESSAGE 155 /* 0x9B */
+
+enum ND_RPL_CODE {
+ ND_RPL_DAG_IS=0x00,
+ ND_RPL_DAG_IO=0x01,
+ ND_RPL_DAO =0x02,
+ ND_RPL_DAO_ACK=0x03,
+ ND_RPL_SEC_DAG_IS = 0x80,
+ ND_RPL_SEC_DAG_IO = 0x81,
+ ND_RPL_SEC_DAG = 0x82,
+ ND_RPL_SEC_DAG_ACK= 0x83,
+ ND_RPL_SEC_CONSIST= 0x8A
+};
+
+enum ND_RPL_DIO_FLAGS {
+ ND_RPL_DIO_GROUNDED = 0x80,
+ ND_RPL_DIO_DATRIG = 0x40,
+ ND_RPL_DIO_DASUPPORT= 0x20,
+ ND_RPL_DIO_RES4 = 0x10,
+ ND_RPL_DIO_RES3 = 0x08,
+ ND_RPL_DIO_PRF_MASK = 0x07 /* 3-bit preference */
+};
+
+#define DAGID_LEN 16
+
+/* section 6 of draft-ietf-roll-rpl-19 */
+struct nd_rpl_security {
+ nd_uint8_t rpl_sec_t_reserved; /* bit 7 is T-bit */
+ nd_uint8_t rpl_sec_algo;
+ nd_uint16_t rpl_sec_kim_lvl_flags; /* bit 15/14, KIM */
+ /* bit 10-8, LVL, bit 7-0 flags */
+ nd_uint32_t rpl_sec_counter;
+#if 0
+ nd_byte rpl_sec_ki[0]; /* depends upon kim */
+#endif
+};
+
+/* section 6.2.1, DODAG Information Solication (DIS_IS) */
+struct nd_rpl_dis_is {
+ nd_uint8_t rpl_dis_flags;
+ nd_uint8_t rpl_dis_reserved;
+#if 0
+ nd_byte rpl_dis_options[0];
+#endif
+};
+
+/* section 6.3.1, DODAG Information Object (DIO) */
+struct nd_rpl_dio {
+ nd_uint8_t rpl_instanceid;
+ nd_uint8_t rpl_version;
+ nd_uint16_t rpl_dagrank;
+ nd_uint8_t rpl_mopprf; /* bit 7=G, 5-3=MOP, 2-0=PRF */
+ nd_uint8_t rpl_dtsn; /* Dest. Advertisement Trigger Sequence Number */
+ nd_uint8_t rpl_flags; /* no flags defined yet */
+ nd_uint8_t rpl_resv1;
+ nd_byte rpl_dagid[DAGID_LEN];
+};
+#define RPL_DIO_GROUND_FLAG 0x80
+#define RPL_DIO_MOP_SHIFT 3
+#define RPL_DIO_MOP_MASK (7 << RPL_DIO_MOP_SHIFT)
+#define RPL_DIO_PRF_SHIFT 0
+#define RPL_DIO_PRF_MASK (7 << RPL_DIO_PRF_SHIFT)
+#define RPL_DIO_GROUNDED(X) ((X)&RPL_DIO_GROUND_FLAG)
+#define RPL_DIO_MOP(X) (enum RPL_DIO_MOP)(((X)&RPL_DIO_MOP_MASK) >> RPL_DIO_MOP_SHIFT)
+#define RPL_DIO_PRF(X) (((X)&RPL_DIO_PRF_MASK) >> RPL_DIO_PRF_SHIFT)
+
+enum RPL_DIO_MOP {
+ RPL_DIO_NONSTORING= 0x0,
+ RPL_DIO_STORING = 0x1,
+ RPL_DIO_NONSTORING_MULTICAST = 0x2,
+ RPL_DIO_STORING_MULTICAST = 0x3
+};
+
+enum RPL_SUBOPT {
+ RPL_OPT_PAD1 = 0,
+ RPL_OPT_PADN = 1,
+ RPL_DIO_METRICS = 2,
+ RPL_DIO_ROUTINGINFO = 3,
+ RPL_DIO_CONFIG = 4,
+ RPL_DAO_RPLTARGET = 5,
+ RPL_DAO_TRANSITINFO = 6,
+ RPL_DIO_DESTPREFIX = 8,
+ RPL_DAO_RPLTARGET_DESC=9
+};
+
+struct rpl_genoption {
+ nd_uint8_t rpl_dio_type;
+ nd_uint8_t rpl_dio_len; /* suboption length, not including type/len */
+};
+#define RPL_GENOPTION_LEN 2
+
+#define RPL_DIO_LIFETIME_INFINITE 0xffffffff
+#define RPL_DIO_LIFETIME_DISCONNECT 0
+
+struct rpl_dio_destprefix {
+ nd_uint8_t rpl_dio_type;
+ nd_uint8_t rpl_dio_len;
+ nd_uint8_t rpl_dio_prefixlen; /* in bits */
+ nd_uint8_t rpl_dio_prf; /* flags, including Route Preference */
+ nd_uint32_t rpl_dio_prefixlifetime; /* in seconds */
+#if 0
+ nd_byte rpl_dio_prefix[0]; /* variable number of bytes */
+#endif
+};
+
+/* section 6.4.1, DODAG Information Object (DIO) */
+struct nd_rpl_dao {
+ nd_uint8_t rpl_instanceid;
+ nd_uint8_t rpl_flags; /* bit 7=K, 6=D */
+ nd_uint8_t rpl_resv;
+ nd_uint8_t rpl_daoseq;
+ nd_byte rpl_dagid[DAGID_LEN]; /* present when D set. */
+};
+#define ND_RPL_DAO_MIN_LEN 4 /* length without DAGID */
+
+/* indicates if this DAO is to be acK'ed */
+#define RPL_DAO_K_SHIFT 7
+#define RPL_DAO_K_MASK (1 << RPL_DAO_K_SHIFT)
+#define RPL_DAO_K(X) (((X)&RPL_DAO_K_MASK) >> RPL_DAO_K_SHIFT)
+
+/* indicates if the DAGID is present */
+#define RPL_DAO_D_SHIFT 6
+#define RPL_DAO_D_MASK (1 << RPL_DAO_D_SHIFT)
+#define RPL_DAO_D(X) (((X)&RPL_DAO_D_MASK) >> RPL_DAO_D_SHIFT)
+
+struct rpl_dao_target {
+ nd_uint8_t rpl_dao_type;
+ nd_uint8_t rpl_dao_len;
+ nd_uint8_t rpl_dao_flags; /* unused */
+ nd_uint8_t rpl_dao_prefixlen; /* in bits */
+#if 0
+ nd_byte rpl_dao_prefix[0]; /* variable number of bytes */
+#endif
+};
+
+/* section 6.5.1, Destination Advertisement Object Acknowledgement (DAO-ACK) */
+struct nd_rpl_daoack {
+ nd_uint8_t rpl_instanceid;
+ nd_uint8_t rpl_flags; /* bit 7=D */
+ nd_uint8_t rpl_daoseq;
+ nd_uint8_t rpl_status;
+ nd_byte rpl_dagid[DAGID_LEN]; /* present when D set. */
+};
+#define ND_RPL_DAOACK_MIN_LEN 4 /* length without DAGID */
+/* indicates if the DAGID is present */
+#define RPL_DAOACK_D_SHIFT 7
+#define RPL_DAOACK_D_MASK (1 << RPL_DAOACK_D_SHIFT)
+#define RPL_DAOACK_D(X) (((X)&RPL_DAOACK_D_MASK) >> RPL_DAOACK_D_SHIFT)
+
+static const struct tok icmp6_type_values[] = {
+ { ICMP6_DST_UNREACH, "destination unreachable"},
+ { ICMP6_PACKET_TOO_BIG, "packet too big"},
+ { ICMP6_TIME_EXCEEDED, "time exceeded in-transit"},
+ { ICMP6_PARAM_PROB, "parameter problem"},
+ { ICMP6_ECHO_REQUEST, "echo request"},
+ { ICMP6_ECHO_REPLY, "echo reply"},
+ { MLD6_LISTENER_QUERY, "multicast listener query"},
+ { MLD6_LISTENER_REPORT, "multicast listener report"},
+ { MLD6_LISTENER_DONE, "multicast listener done"},
+ { ND_ROUTER_SOLICIT, "router solicitation"},
+ { ND_ROUTER_ADVERT, "router advertisement"},
+ { ND_NEIGHBOR_SOLICIT, "neighbor solicitation"},
+ { ND_NEIGHBOR_ADVERT, "neighbor advertisement"},
+ { ND_REDIRECT, "redirect"},
+ { ICMP6_ROUTER_RENUMBERING, "router renumbering"},
+ { IND_SOLICIT, "inverse neighbor solicitation"},
+ { IND_ADVERT, "inverse neighbor advertisement"},
+ { MLDV2_LISTENER_REPORT, "multicast listener report v2"},
+ { ICMP6_HADISCOV_REQUEST, "ha discovery request"},
+ { ICMP6_HADISCOV_REPLY, "ha discovery reply"},
+ { ICMP6_MOBILEPREFIX_SOLICIT, "mobile router solicitation"},
+ { ICMP6_MOBILEPREFIX_ADVERT, "mobile router advertisement"},
+ { ICMP6_WRUREQUEST, "who-are-you request"},
+ { ICMP6_WRUREPLY, "who-are-you reply"},
+ { ICMP6_NI_QUERY, "node information query"},
+ { ICMP6_NI_REPLY, "node information reply"},
+ { MLD6_MTRACE, "mtrace message"},
+ { MLD6_MTRACE_RESP, "mtrace response"},
+ { ND_RPL_MESSAGE, "RPL"},
+ { 0, NULL }
+};
+
+static const struct tok icmp6_dst_unreach_code_values[] = {
+ { ICMP6_DST_UNREACH_NOROUTE, "unreachable route" },
+ { ICMP6_DST_UNREACH_ADMIN, " unreachable prohibited"},
+ { ICMP6_DST_UNREACH_BEYONDSCOPE, "beyond scope"},
+ { ICMP6_DST_UNREACH_ADDR, "unreachable address"},
+ { ICMP6_DST_UNREACH_NOPORT, "unreachable port"},
+ { 0, NULL }
+};
+
+static const struct tok icmp6_opt_pi_flag_values[] = {
+ { ND_OPT_PI_FLAG_ONLINK, "onlink" },
+ { ND_OPT_PI_FLAG_AUTO, "auto" },
+ { ND_OPT_PI_FLAG_ROUTER, "router" },
+ { 0, NULL }
+};
+
+static const struct tok icmp6_opt_ra_flag_values[] = {
+ { ND_RA_FLAG_MANAGED, "managed" },
+ { ND_RA_FLAG_OTHER, "other stateful"},
+ { ND_RA_FLAG_HOME_AGENT, "home agent"},
+ { ND_RA_FLAG_IPV6ONLY, "ipv6 only"},
+ { 0, NULL }
+};
+
+static const struct tok icmp6_nd_na_flag_values[] = {
+ { ND_NA_FLAG_ROUTER, "router" },
+ { ND_NA_FLAG_SOLICITED, "solicited" },
+ { ND_NA_FLAG_OVERRIDE, "override" },
+ { 0, NULL }
+};
+
+static const struct tok icmp6_opt_values[] = {
+ { ND_OPT_SOURCE_LINKADDR, "source link-address"},
+ { ND_OPT_TARGET_LINKADDR, "destination link-address"},
+ { ND_OPT_PREFIX_INFORMATION, "prefix info"},
+ { ND_OPT_REDIRECTED_HEADER, "redirected header"},
+ { ND_OPT_MTU, "mtu"},
+ { ND_OPT_RDNSS, "rdnss"},
+ { ND_OPT_DNSSL, "dnssl"},
+ { ND_OPT_ADVINTERVAL, "advertisement interval"},
+ { ND_OPT_HOMEAGENT_INFO, "homeagent information"},
+ { ND_OPT_ROUTE_INFO, "route info"},
+ { 0, NULL }
+};
+
+/* mldv2 report types */
+static const struct tok mldv2report2str[] = {
+ { 1, "is_in" },
+ { 2, "is_ex" },
+ { 3, "to_in" },
+ { 4, "to_ex" },
+ { 5, "allow" },
+ { 6, "block" },
+ { 0, NULL }
+};
+
+static const char *
+get_rtpref(u_int v)
+{
+ static const char *rtpref_str[] = {
+ "medium", /* 00 */
+ "high", /* 01 */
+ "rsv", /* 10 */
+ "low" /* 11 */
+ };
+
+ return rtpref_str[((v & ND_RA_FLAG_RTPREF_MASK) >> 3) & 0xff];
+}
+
+static const char *
+get_lifetime(uint32_t v)
+{
+ static char buf[20];
+
+ if (v == (uint32_t)~0UL)
+ return "infinity";
+ else {
+ snprintf(buf, sizeof(buf), "%us", v);
+ return buf;
+ }
+}
+
+static void
+print_lladdr(netdissect_options *ndo, const uint8_t *p, size_t l)
+{
+ const uint8_t *ep, *q;
+
+ q = p;
+ ep = p + l;
+ while (l > 0 && q < ep) {
+ if (q > p)
+ ND_PRINT(":");
+ ND_PRINT("%02x", GET_U_1(q));
+ q++;
+ l--;
+ }
+}
+
+static uint16_t icmp6_cksum(netdissect_options *ndo, const struct ip6_hdr *ip6,
+ const struct icmp6_hdr *icp, u_int len)
+{
+ return nextproto6_cksum(ndo, ip6, (const uint8_t *)(const void *)icp, len, len,
+ IPPROTO_ICMPV6);
+}
+
+static const struct tok rpl_mop_values[] = {
+ { RPL_DIO_NONSTORING, "nonstoring"},
+ { RPL_DIO_STORING, "storing"},
+ { RPL_DIO_NONSTORING_MULTICAST, "nonstoring-multicast"},
+ { RPL_DIO_STORING_MULTICAST, "storing-multicast"},
+ { 0, NULL},
+};
+
+static const struct tok rpl_subopt_values[] = {
+ { RPL_OPT_PAD1, "pad1"},
+ { RPL_OPT_PADN, "padN"},
+ { RPL_DIO_METRICS, "metrics"},
+ { RPL_DIO_ROUTINGINFO, "routinginfo"},
+ { RPL_DIO_CONFIG, "config"},
+ { RPL_DAO_RPLTARGET, "rpltarget"},
+ { RPL_DAO_TRANSITINFO, "transitinfo"},
+ { RPL_DIO_DESTPREFIX, "destprefix"},
+ { RPL_DAO_RPLTARGET_DESC, "rpltargetdesc"},
+ { 0, NULL},
+};
+
+static void
+rpl_printopts(netdissect_options *ndo, const uint8_t *opts, u_int length)
+{
+ const struct rpl_genoption *opt;
+ uint8_t dio_type;
+ u_int optlen;
+
+ while (length != 0) {
+ opt = (const struct rpl_genoption *)opts;
+ dio_type = GET_U_1(opt->rpl_dio_type);
+ if (dio_type == RPL_OPT_PAD1) {
+ optlen = 1;
+ ND_PRINT(" opt:pad1");
+ } else {
+ if (length < RPL_GENOPTION_LEN)
+ goto trunc;
+ optlen = GET_U_1(opt->rpl_dio_len)+RPL_GENOPTION_LEN;
+ ND_PRINT(" opt:%s len:%u ",
+ tok2str(rpl_subopt_values, "subopt:%u", dio_type),
+ optlen);
+ ND_TCHECK_LEN(opt, optlen);
+ if (length < optlen)
+ goto trunc;
+ if (ndo->ndo_vflag > 2) {
+ hex_print(ndo,
+ " ",
+ opts + RPL_GENOPTION_LEN, /* content of DIO option */
+ optlen - RPL_GENOPTION_LEN);
+ }
+ }
+ opts += optlen;
+ length -= optlen;
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+rpl_dio_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ const struct nd_rpl_dio *dio = (const struct nd_rpl_dio *)bp;
+
+ ND_LCHECK_ZU(length, sizeof(struct nd_rpl_dio));
+ ND_PRINT(" [dagid:%s,seq:%u,instance:%u,rank:%u,%smop:%s,prf:%u]",
+ GET_IP6ADDR_STRING(dio->rpl_dagid),
+ GET_U_1(dio->rpl_dtsn),
+ GET_U_1(dio->rpl_instanceid),
+ GET_BE_U_2(dio->rpl_dagrank),
+ RPL_DIO_GROUNDED(GET_U_1(dio->rpl_mopprf)) ? "grounded,":"",
+ tok2str(rpl_mop_values, "mop%u",
+ RPL_DIO_MOP(GET_U_1(dio->rpl_mopprf))),
+ RPL_DIO_PRF(GET_U_1(dio->rpl_mopprf)));
+
+ if(ndo->ndo_vflag > 1) {
+ rpl_printopts(ndo, bp + sizeof(struct nd_rpl_dio),
+ length - sizeof(struct nd_rpl_dio));
+ }
+ return;
+invalid:
+ nd_print_invalid(ndo);
+}
+
+static void
+rpl_dao_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ const struct nd_rpl_dao *dao = (const struct nd_rpl_dao *)bp;
+ const char *dagid_str = "<elided>";
+ uint8_t rpl_flags;
+
+ ND_TCHECK_SIZE(dao);
+ if (length < ND_RPL_DAO_MIN_LEN)
+ goto tooshort;
+
+ bp += ND_RPL_DAO_MIN_LEN;
+ length -= ND_RPL_DAO_MIN_LEN;
+ rpl_flags = GET_U_1(dao->rpl_flags);
+ if(RPL_DAO_D(rpl_flags)) {
+ ND_TCHECK_LEN(dao->rpl_dagid, DAGID_LEN);
+ if (length < DAGID_LEN)
+ goto tooshort;
+ dagid_str = ip6addr_string (ndo, dao->rpl_dagid);
+ bp += DAGID_LEN;
+ length -= DAGID_LEN;
+ }
+
+ ND_PRINT(" [dagid:%s,seq:%u,instance:%u%s%s,flags:%02x]",
+ dagid_str,
+ GET_U_1(dao->rpl_daoseq),
+ GET_U_1(dao->rpl_instanceid),
+ RPL_DAO_K(rpl_flags) ? ",acK":"",
+ RPL_DAO_D(rpl_flags) ? ",Dagid":"",
+ rpl_flags);
+
+ if(ndo->ndo_vflag > 1) {
+ rpl_printopts(ndo, bp, length);
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+ return;
+
+tooshort:
+ ND_PRINT(" [|length too short]");
+}
+
+static void
+rpl_daoack_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ const struct nd_rpl_daoack *daoack = (const struct nd_rpl_daoack *)bp;
+ const char *dagid_str = "<elided>";
+
+ ND_TCHECK_LEN(daoack, ND_RPL_DAOACK_MIN_LEN);
+ if (length < ND_RPL_DAOACK_MIN_LEN)
+ goto tooshort;
+
+ bp += ND_RPL_DAOACK_MIN_LEN;
+ length -= ND_RPL_DAOACK_MIN_LEN;
+ if(RPL_DAOACK_D(GET_U_1(daoack->rpl_flags))) {
+ ND_TCHECK_LEN(daoack->rpl_dagid, DAGID_LEN);
+ if (length < DAGID_LEN)
+ goto tooshort;
+ dagid_str = ip6addr_string (ndo, daoack->rpl_dagid);
+ bp += DAGID_LEN;
+ length -= DAGID_LEN;
+ }
+
+ ND_PRINT(" [dagid:%s,seq:%u,instance:%u,status:%u]",
+ dagid_str,
+ GET_U_1(daoack->rpl_daoseq),
+ GET_U_1(daoack->rpl_instanceid),
+ GET_U_1(daoack->rpl_status));
+
+ /* no officially defined options for DAOACK, but print any we find */
+ if(ndo->ndo_vflag > 1) {
+ rpl_printopts(ndo, bp, length);
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+ return;
+
+tooshort:
+ ND_PRINT(" [|dao-length too short]");
+}
+
+static void
+rpl_print(netdissect_options *ndo,
+ uint8_t icmp6_code,
+ const u_char *bp, u_int length)
+{
+ int secured = icmp6_code & 0x80;
+ int basecode= icmp6_code & 0x7f;
+
+ if(secured) {
+ ND_PRINT(", (SEC) [worktodo]");
+ /* XXX
+ * the next header pointer needs to move forward to
+ * skip the secure part.
+ */
+ return;
+ } else {
+ ND_PRINT(", (CLR)");
+ }
+
+ switch(basecode) {
+ case ND_RPL_DAG_IS:
+ ND_PRINT("DODAG Information Solicitation");
+ if(ndo->ndo_vflag) {
+ }
+ break;
+ case ND_RPL_DAG_IO:
+ ND_PRINT("DODAG Information Object");
+ if(ndo->ndo_vflag) {
+ rpl_dio_print(ndo, bp, length);
+ }
+ break;
+ case ND_RPL_DAO:
+ ND_PRINT("Destination Advertisement Object");
+ if(ndo->ndo_vflag) {
+ rpl_dao_print(ndo, bp, length);
+ }
+ break;
+ case ND_RPL_DAO_ACK:
+ ND_PRINT("Destination Advertisement Object Ack");
+ if(ndo->ndo_vflag) {
+ rpl_daoack_print(ndo, bp, length);
+ }
+ break;
+ default:
+ ND_PRINT("RPL message, unknown code %u",icmp6_code);
+ break;
+ }
+ return;
+
+#if 0
+trunc:
+ nd_print_trunc(ndo);
+ return;
+#endif
+
+}
+
+void
+icmp6_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, const u_char *bp2, int fragmented)
+{
+ const struct icmp6_hdr *dp;
+ uint8_t icmp6_type, icmp6_code;
+ const struct ip6_hdr *ip;
+ const struct ip6_hdr *oip;
+ const struct udphdr *ouh;
+ uint16_t dport;
+ const u_char *ep;
+ u_int prot;
+
+ ndo->ndo_protocol = "icmp6";
+ dp = (const struct icmp6_hdr *)bp;
+ ip = (const struct ip6_hdr *)bp2;
+ oip = (const struct ip6_hdr *)(dp + 1);
+ /* 'ep' points to the end of available data. */
+ ep = ndo->ndo_snapend;
+ if (length == 0) {
+ ND_PRINT("ICMP6, length 0");
+ nd_print_invalid(ndo);
+ return;
+ }
+
+ if (ndo->ndo_vflag && !fragmented) {
+ uint16_t sum, udp_sum;
+
+ if (ND_TTEST_LEN(bp, length)) {
+ udp_sum = GET_BE_U_2(dp->icmp6_cksum);
+ sum = icmp6_cksum(ndo, ip, dp, length);
+ if (sum != 0)
+ ND_PRINT("[bad icmp6 cksum 0x%04x -> 0x%04x!] ",
+ udp_sum,
+ in_cksum_shouldbe(udp_sum, sum));
+ else
+ ND_PRINT("[icmp6 sum ok] ");
+ }
+ }
+
+ icmp6_type = GET_U_1(dp->icmp6_type);
+ ND_PRINT("ICMP6, %s", tok2str(icmp6_type_values,"unknown icmp6 type (%u)",icmp6_type));
+
+ /* display cosmetics: print the packet length for printer that use the vflag now */
+ if (ndo->ndo_vflag && (icmp6_type == ND_ROUTER_SOLICIT ||
+ icmp6_type == ND_ROUTER_ADVERT ||
+ icmp6_type == ND_NEIGHBOR_ADVERT ||
+ icmp6_type == ND_NEIGHBOR_SOLICIT ||
+ icmp6_type == ND_REDIRECT ||
+ icmp6_type == ICMP6_HADISCOV_REPLY ||
+ icmp6_type == ICMP6_MOBILEPREFIX_ADVERT ))
+ ND_PRINT(", length %u", length);
+
+ icmp6_code = GET_U_1(dp->icmp6_code);
+
+ switch (icmp6_type) {
+ case ICMP6_DST_UNREACH:
+ ND_PRINT(", %s", tok2str(icmp6_dst_unreach_code_values,"unknown unreach code (%u)",icmp6_code));
+ switch (icmp6_code) {
+
+ case ICMP6_DST_UNREACH_NOROUTE: /* fall through */
+ case ICMP6_DST_UNREACH_ADMIN:
+ case ICMP6_DST_UNREACH_ADDR:
+ ND_PRINT(" %s",GET_IP6ADDR_STRING(oip->ip6_dst));
+ break;
+ case ICMP6_DST_UNREACH_BEYONDSCOPE:
+ ND_PRINT(" %s, source address %s",
+ GET_IP6ADDR_STRING(oip->ip6_dst),
+ GET_IP6ADDR_STRING(oip->ip6_src));
+ break;
+ case ICMP6_DST_UNREACH_NOPORT:
+ if ((ouh = get_upperlayer(ndo, (const u_char *)oip, &prot))
+ == NULL)
+ goto trunc;
+
+ dport = GET_BE_U_2(ouh->uh_dport);
+ switch (prot) {
+ case IPPROTO_TCP:
+ ND_PRINT(", %s tcp port %s",
+ GET_IP6ADDR_STRING(oip->ip6_dst),
+ tcpport_string(ndo, dport));
+ break;
+ case IPPROTO_UDP:
+ ND_PRINT(", %s udp port %s",
+ GET_IP6ADDR_STRING(oip->ip6_dst),
+ udpport_string(ndo, dport));
+ break;
+ default:
+ ND_PRINT(", %s protocol %u port %u unreachable",
+ GET_IP6ADDR_STRING(oip->ip6_dst),
+ prot, dport);
+ break;
+ }
+ break;
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ print_unknown_data(ndo, bp,"\n\t",length);
+ return;
+ }
+ break;
+ }
+ break;
+ case ICMP6_PACKET_TOO_BIG:
+ ND_PRINT(", mtu %u", GET_BE_U_4(dp->icmp6_mtu));
+ break;
+ case ICMP6_TIME_EXCEEDED:
+ switch (icmp6_code) {
+ case ICMP6_TIME_EXCEED_TRANSIT:
+ ND_PRINT(" for %s",
+ GET_IP6ADDR_STRING(oip->ip6_dst));
+ break;
+ case ICMP6_TIME_EXCEED_REASSEMBLY:
+ ND_PRINT(" (reassembly)");
+ break;
+ default:
+ ND_PRINT(", unknown code (%u)", icmp6_code);
+ break;
+ }
+ break;
+ case ICMP6_PARAM_PROB:
+ ND_TCHECK_16(oip->ip6_dst);
+ switch (icmp6_code) {
+ case ICMP6_PARAMPROB_HEADER:
+ ND_PRINT(", erroneous - octet %u",
+ GET_BE_U_4(dp->icmp6_pptr));
+ break;
+ case ICMP6_PARAMPROB_NEXTHEADER:
+ ND_PRINT(", next header - octet %u",
+ GET_BE_U_4(dp->icmp6_pptr));
+ break;
+ case ICMP6_PARAMPROB_OPTION:
+ ND_PRINT(", option - octet %u",
+ GET_BE_U_4(dp->icmp6_pptr));
+ break;
+ case ICMP6_PARAMPROB_FRAGHDRCHAIN:
+ ND_PRINT(", incomplete header chain - octet %u",
+ GET_BE_U_4(dp->icmp6_pptr));
+ break;
+ default:
+ ND_PRINT(", code-#%u",
+ icmp6_code);
+ break;
+ }
+ break;
+ case ICMP6_ECHO_REQUEST:
+ case ICMP6_ECHO_REPLY:
+ ND_PRINT(", id %u, seq %u", GET_BE_U_2(dp->icmp6_id),
+ GET_BE_U_2(dp->icmp6_seq));
+ break;
+ case ICMP6_MEMBERSHIP_QUERY:
+ if (length == MLD_MINLEN) {
+ mld6_print(ndo, (const u_char *)dp);
+ } else if (length >= MLDV2_MINLEN) {
+ ND_PRINT(" v2");
+ mldv2_query_print(ndo, (const u_char *)dp, length);
+ } else {
+ ND_PRINT(" unknown-version (len %u) ", length);
+ }
+ break;
+ case ICMP6_MEMBERSHIP_REPORT:
+ mld6_print(ndo, (const u_char *)dp);
+ break;
+ case ICMP6_MEMBERSHIP_REDUCTION:
+ mld6_print(ndo, (const u_char *)dp);
+ break;
+ case ND_ROUTER_SOLICIT:
+#define RTSOLLEN 8
+ if (ndo->ndo_vflag) {
+ if (icmp6_opt_print(ndo, (const u_char *)dp + RTSOLLEN,
+ length - RTSOLLEN) == -1)
+ goto trunc;
+ }
+ break;
+ case ND_ROUTER_ADVERT:
+#define RTADVLEN 16
+ if (ndo->ndo_vflag) {
+ const struct nd_router_advert *p;
+
+ p = (const struct nd_router_advert *)dp;
+ ND_PRINT("\n\thop limit %u, Flags [%s]"
+ ", pref %s, router lifetime %us, reachable time %ums, retrans timer %ums",
+ GET_U_1(p->nd_ra_curhoplimit),
+ bittok2str(icmp6_opt_ra_flag_values,"none",GET_U_1(p->nd_ra_flags_reserved)),
+ get_rtpref(GET_U_1(p->nd_ra_flags_reserved)),
+ GET_BE_U_2(p->nd_ra_router_lifetime),
+ GET_BE_U_4(p->nd_ra_reachable),
+ GET_BE_U_4(p->nd_ra_retransmit));
+
+ if (icmp6_opt_print(ndo, (const u_char *)dp + RTADVLEN,
+ length - RTADVLEN) == -1)
+ goto trunc;
+ }
+ break;
+ case ND_NEIGHBOR_SOLICIT:
+ {
+ const struct nd_neighbor_solicit *p;
+ p = (const struct nd_neighbor_solicit *)dp;
+ ND_PRINT(", who has %s", GET_IP6ADDR_STRING(p->nd_ns_target));
+ if (ndo->ndo_vflag) {
+#define NDSOLLEN 24
+ if (icmp6_opt_print(ndo, (const u_char *)dp + NDSOLLEN,
+ length - NDSOLLEN) == -1)
+ goto trunc;
+ }
+ }
+ break;
+ case ND_NEIGHBOR_ADVERT:
+ {
+ const struct nd_neighbor_advert *p;
+
+ p = (const struct nd_neighbor_advert *)dp;
+ ND_PRINT(", tgt is %s",
+ GET_IP6ADDR_STRING(p->nd_na_target));
+ if (ndo->ndo_vflag) {
+ ND_PRINT(", Flags [%s]",
+ bittok2str(icmp6_nd_na_flag_values,
+ "none",
+ GET_BE_U_4(p->nd_na_flags_reserved)));
+#define NDADVLEN 24
+ if (icmp6_opt_print(ndo, (const u_char *)dp + NDADVLEN,
+ length - NDADVLEN) == -1)
+ goto trunc;
+#undef NDADVLEN
+ }
+ }
+ break;
+ case ND_REDIRECT:
+ {
+ const struct nd_redirect *p;
+
+ p = (const struct nd_redirect *)dp;
+ ND_PRINT(", %s", GET_IP6ADDR_STRING(p->nd_rd_dst));
+ ND_PRINT(" to %s", GET_IP6ADDR_STRING(p->nd_rd_target));
+#define REDIRECTLEN 40
+ if (ndo->ndo_vflag) {
+ if (icmp6_opt_print(ndo, (const u_char *)dp + REDIRECTLEN,
+ length - REDIRECTLEN) == -1)
+ goto trunc;
+#undef REDIRECTLEN
+ }
+ }
+ break;
+ case ICMP6_ROUTER_RENUMBERING:
+ icmp6_rrenum_print(ndo, bp, ep);
+ break;
+ case ICMP6_NI_QUERY:
+ case ICMP6_NI_REPLY:
+ icmp6_nodeinfo_print(ndo, length, bp, ep);
+ break;
+ case IND_SOLICIT:
+ case IND_ADVERT:
+ break;
+ case ICMP6_V2_MEMBERSHIP_REPORT:
+ mldv2_report_print(ndo, (const u_char *) dp, length);
+ break;
+ case ICMP6_MOBILEPREFIX_SOLICIT: /* fall through */
+ case ICMP6_HADISCOV_REQUEST:
+ ND_PRINT(", id 0x%04x", GET_BE_U_2(dp->icmp6_data16[0]));
+ break;
+ case ICMP6_HADISCOV_REPLY:
+ if (ndo->ndo_vflag) {
+ const u_char *cp;
+ const u_char *p;
+
+ ND_PRINT(", id 0x%04x",
+ GET_BE_U_2(dp->icmp6_data16[0]));
+ cp = (const u_char *)dp + length;
+ p = (const u_char *)(dp + 1);
+ while (p < cp) {
+ ND_PRINT(", %s", GET_IP6ADDR_STRING(p));
+ p += 16;
+ }
+ }
+ break;
+ case ICMP6_MOBILEPREFIX_ADVERT:
+ if (ndo->ndo_vflag) {
+ uint16_t flags;
+
+ ND_PRINT(", id 0x%04x",
+ GET_BE_U_2(dp->icmp6_data16[0]));
+ flags = GET_BE_U_2(dp->icmp6_data16[1]);
+ if (flags & 0xc000)
+ ND_PRINT(" ");
+ if (flags & 0x8000)
+ ND_PRINT("M");
+ if (flags & 0x4000)
+ ND_PRINT("O");
+#define MPADVLEN 8
+ if (icmp6_opt_print(ndo, (const u_char *)dp + MPADVLEN,
+ length - MPADVLEN) == -1)
+ goto trunc;
+ }
+ break;
+ case ND_RPL_MESSAGE:
+ /* plus 4, because struct icmp6_hdr contains 4 bytes of icmp payload */
+ rpl_print(ndo, icmp6_code, dp->icmp6_data, length-sizeof(struct icmp6_hdr)+4);
+ break;
+ default:
+ ND_PRINT(", length %u", length);
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, bp,"\n\t", length);
+ return;
+ }
+ if (!ndo->ndo_vflag)
+ ND_PRINT(", length %u", length);
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static const struct udphdr *
+get_upperlayer(netdissect_options *ndo, const u_char *bp, u_int *prot)
+{
+ const u_char *ep;
+ const struct ip6_hdr *ip6 = (const struct ip6_hdr *)bp;
+ const struct udphdr *uh;
+ const struct ip6_hbh *hbh;
+ const struct ip6_frag *fragh;
+ const struct ah *ah;
+ u_int nh;
+ int hlen;
+
+ /* 'ep' points to the end of available data. */
+ ep = ndo->ndo_snapend;
+
+ if (!ND_TTEST_1(ip6->ip6_nxt))
+ return NULL;
+
+ nh = GET_U_1(ip6->ip6_nxt);
+ hlen = sizeof(struct ip6_hdr);
+
+ while (bp < ep) {
+ bp += hlen;
+
+ switch(nh) {
+ case IPPROTO_UDP:
+ case IPPROTO_TCP:
+ uh = (const struct udphdr *)bp;
+ if (ND_TTEST_2(uh->uh_dport)) {
+ *prot = nh;
+ return(uh);
+ }
+ else
+ return(NULL);
+ /* NOTREACHED */
+
+ case IPPROTO_HOPOPTS:
+ case IPPROTO_DSTOPTS:
+ case IPPROTO_ROUTING:
+ hbh = (const struct ip6_hbh *)bp;
+ if (!ND_TTEST_1(hbh->ip6h_len))
+ return(NULL);
+ nh = GET_U_1(hbh->ip6h_nxt);
+ hlen = (GET_U_1(hbh->ip6h_len) + 1) << 3;
+ break;
+
+ case IPPROTO_FRAGMENT: /* this should be odd, but try anyway */
+ fragh = (const struct ip6_frag *)bp;
+ if (!ND_TTEST_2(fragh->ip6f_offlg))
+ return(NULL);
+ /* fragments with non-zero offset are meaningless */
+ if ((GET_BE_U_2(fragh->ip6f_offlg) & IP6F_OFF_MASK) != 0)
+ return(NULL);
+ nh = GET_U_1(fragh->ip6f_nxt);
+ hlen = sizeof(struct ip6_frag);
+ break;
+
+ case IPPROTO_AH:
+ ah = (const struct ah *)bp;
+ if (!ND_TTEST_1(ah->ah_len))
+ return(NULL);
+ nh = GET_U_1(ah->ah_nxt);
+ hlen = (GET_U_1(ah->ah_len) + 2) << 2;
+ break;
+
+ default: /* unknown or undecodable header */
+ *prot = nh; /* meaningless, but set here anyway */
+ return(NULL);
+ }
+ }
+
+ return(NULL); /* should be notreached, though */
+}
+
+static int
+icmp6_opt_print(netdissect_options *ndo, const u_char *bp, int resid)
+{
+ const struct nd_opt_hdr *op;
+ uint8_t opt_type;
+ u_int opt_len;
+ const struct nd_opt_prefix_info *opp;
+ const struct nd_opt_mtu *opm;
+ const struct nd_opt_rdnss *oprd;
+ const struct nd_opt_dnssl *opds;
+ const struct nd_opt_advinterval *opa;
+ const struct nd_opt_homeagent_info *oph;
+ const struct nd_opt_route_info *opri;
+ const u_char *cp, *ep, *domp;
+ nd_ipv6 in6;
+ size_t l;
+ u_int i;
+
+ cp = bp;
+ /* 'ep' points to the end of available data. */
+ ep = ndo->ndo_snapend;
+
+ while (cp < ep) {
+ op = (const struct nd_opt_hdr *)cp;
+
+ ND_TCHECK_1(op->nd_opt_len);
+ if (resid <= 0)
+ return 0;
+ opt_type = GET_U_1(op->nd_opt_type);
+ opt_len = GET_U_1(op->nd_opt_len);
+ if (opt_len == 0)
+ goto trunc;
+ if (cp + (opt_len << 3) > ep)
+ goto trunc;
+
+ ND_PRINT("\n\t %s option (%u), length %u (%u): ",
+ tok2str(icmp6_opt_values, "unknown", opt_type),
+ opt_type,
+ opt_len << 3,
+ opt_len);
+
+ switch (opt_type) {
+ case ND_OPT_SOURCE_LINKADDR:
+ l = (opt_len << 3) - 2;
+ print_lladdr(ndo, cp + 2, l);
+ break;
+ case ND_OPT_TARGET_LINKADDR:
+ l = (opt_len << 3) - 2;
+ print_lladdr(ndo, cp + 2, l);
+ break;
+ case ND_OPT_PREFIX_INFORMATION:
+ opp = (const struct nd_opt_prefix_info *)op;
+ ND_PRINT("%s/%u%s, Flags [%s], valid time %s",
+ GET_IP6ADDR_STRING(opp->nd_opt_pi_prefix),
+ GET_U_1(opp->nd_opt_pi_prefix_len),
+ (opt_len != 4) ? "badlen" : "",
+ bittok2str(icmp6_opt_pi_flag_values, "none", GET_U_1(opp->nd_opt_pi_flags_reserved)),
+ get_lifetime(GET_BE_U_4(opp->nd_opt_pi_valid_time)));
+ ND_PRINT(", pref. time %s",
+ get_lifetime(GET_BE_U_4(opp->nd_opt_pi_preferred_time)));
+ break;
+ case ND_OPT_REDIRECTED_HEADER:
+ print_unknown_data(ndo, bp,"\n\t ",opt_len<<3);
+ /* xxx */
+ break;
+ case ND_OPT_MTU:
+ opm = (const struct nd_opt_mtu *)op;
+ ND_PRINT(" %u%s",
+ GET_BE_U_4(opm->nd_opt_mtu_mtu),
+ (opt_len != 1) ? "bad option length" : "" );
+ break;
+ case ND_OPT_RDNSS:
+ oprd = (const struct nd_opt_rdnss *)op;
+ l = (opt_len - 1) / 2;
+ ND_PRINT(" lifetime %us,",
+ GET_BE_U_4(oprd->nd_opt_rdnss_lifetime));
+ for (i = 0; i < l; i++) {
+ ND_PRINT(" addr: %s",
+ GET_IP6ADDR_STRING(oprd->nd_opt_rdnss_addr[i]));
+ }
+ break;
+ case ND_OPT_DNSSL:
+ opds = (const struct nd_opt_dnssl *)op;
+ ND_PRINT(" lifetime %us, domain(s):",
+ GET_BE_U_4(opds->nd_opt_dnssl_lifetime));
+ domp = cp + 8; /* domain names, variable-sized, RFC1035-encoded */
+ while (domp < cp + (opt_len << 3) && GET_U_1(domp) != '\0')
+ {
+ ND_PRINT(" ");
+ if ((domp = fqdn_print(ndo, domp, bp)) == NULL)
+ goto trunc;
+ }
+ break;
+ case ND_OPT_ADVINTERVAL:
+ opa = (const struct nd_opt_advinterval *)op;
+ ND_PRINT(" %ums",
+ GET_BE_U_4(opa->nd_opt_adv_interval));
+ break;
+ case ND_OPT_HOMEAGENT_INFO:
+ oph = (const struct nd_opt_homeagent_info *)op;
+ ND_PRINT(" preference %u, lifetime %u",
+ GET_BE_U_2(oph->nd_opt_hai_preference),
+ GET_BE_U_2(oph->nd_opt_hai_lifetime));
+ break;
+ case ND_OPT_ROUTE_INFO:
+ opri = (const struct nd_opt_route_info *)op;
+ ND_TCHECK_4(opri->nd_opt_rti_lifetime);
+ memset(&in6, 0, sizeof(in6));
+ switch (opt_len) {
+ case 1:
+ break;
+ case 2:
+ GET_CPY_BYTES(&in6, opri + 1, 8);
+ break;
+ case 3:
+ GET_CPY_BYTES(&in6, opri + 1, 16);
+ break;
+ default:
+ goto trunc;
+ }
+ ND_PRINT(" %s/%u", ip6addr_string(ndo, (const u_char *)&in6), /* local buffer, not packet data; don't use GET_IP6ADDR_STRING() */
+ GET_U_1(opri->nd_opt_rti_prefixlen));
+ ND_PRINT(", pref=%s",
+ get_rtpref(GET_U_1(opri->nd_opt_rti_flags)));
+ ND_PRINT(", lifetime=%s",
+ get_lifetime(GET_BE_U_4(opri->nd_opt_rti_lifetime)));
+ break;
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ print_unknown_data(ndo,cp+2,"\n\t ", (opt_len << 3) - 2); /* skip option header */
+ return 0;
+ }
+ break;
+ }
+ /* do we want to see an additional hexdump ? */
+ if (ndo->ndo_vflag> 1)
+ print_unknown_data(ndo, cp+2,"\n\t ", (opt_len << 3) - 2); /* skip option header */
+
+ cp += opt_len << 3;
+ resid -= opt_len << 3;
+ }
+ return 0;
+
+trunc:
+ return -1;
+}
+
+static void
+mld6_print(netdissect_options *ndo, const u_char *bp)
+{
+ const struct mld6_hdr *mp = (const struct mld6_hdr *)bp;
+ const u_char *ep;
+
+ /* 'ep' points to the end of available data. */
+ ep = ndo->ndo_snapend;
+
+ if ((const u_char *)mp + sizeof(*mp) > ep)
+ return;
+
+ ND_PRINT("max resp delay: %u ", GET_BE_U_2(mp->mld6_maxdelay));
+ ND_PRINT("addr: %s", GET_IP6ADDR_STRING(mp->mld6_addr));
+}
+
+static void
+mldv2_report_print(netdissect_options *ndo, const u_char *bp, u_int len)
+{
+ const struct icmp6_hdr *icp = (const struct icmp6_hdr *) bp;
+ u_int group, nsrcs, ngroups;
+ u_int i, j;
+
+ /* Minimum len is 8 */
+ if (len < 8) {
+ ND_PRINT(" [invalid len %u]", len);
+ return;
+ }
+
+ ngroups = GET_BE_U_2(icp->icmp6_data16[1]);
+ ND_PRINT(", %u group record(s)", ngroups);
+ if (ndo->ndo_vflag > 0) {
+ /* Print the group records */
+ group = 8;
+ for (i = 0; i < ngroups; i++) {
+ /* type(1) + auxlen(1) + numsrc(2) + grp(16) */
+ if (len < group + 20) {
+ ND_PRINT(" [invalid number of groups]");
+ return;
+ }
+ ND_PRINT(" [gaddr %s", GET_IP6ADDR_STRING(bp + group + 4));
+ ND_PRINT(" %s", tok2str(mldv2report2str, " [v2-report-#%u]",
+ GET_U_1(bp + group)));
+ nsrcs = GET_BE_U_2(bp + group + 2);
+ /* Check the number of sources and print them */
+ if (len < group + 20 + (nsrcs * sizeof(nd_ipv6))) {
+ ND_PRINT(" [invalid number of sources %u]", nsrcs);
+ return;
+ }
+ if (ndo->ndo_vflag == 1)
+ ND_PRINT(", %u source(s)", nsrcs);
+ else {
+ /* Print the sources */
+ ND_PRINT(" {");
+ for (j = 0; j < nsrcs; j++) {
+ ND_PRINT(" %s", GET_IP6ADDR_STRING(bp + group + 20 + (j * sizeof(nd_ipv6))));
+ }
+ ND_PRINT(" }");
+ }
+ /* Next group record */
+ group += 20 + nsrcs * sizeof(nd_ipv6);
+ ND_PRINT("]");
+ }
+ }
+}
+
+static void
+mldv2_query_print(netdissect_options *ndo, const u_char *bp, u_int len)
+{
+ const struct icmp6_hdr *icp = (const struct icmp6_hdr *) bp;
+ u_int mrc;
+ u_int mrt, qqi;
+ u_int nsrcs;
+ u_int i;
+
+ /* Minimum len is 28 */
+ if (len < 28) {
+ ND_PRINT(" [invalid len %u]", len);
+ return;
+ }
+ mrc = GET_BE_U_2(icp->icmp6_data16[0]);
+ if (mrc < 32768) {
+ mrt = mrc;
+ } else {
+ mrt = ((mrc & 0x0fff) | 0x1000) << (((mrc & 0x7000) >> 12) + 3);
+ }
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" [max resp delay=%u]", mrt);
+ }
+ ND_PRINT(" [gaddr %s", GET_IP6ADDR_STRING(bp + 8));
+
+ if (ndo->ndo_vflag) {
+ if (GET_U_1(bp + 24) & 0x08) {
+ ND_PRINT(" sflag");
+ }
+ if (GET_U_1(bp + 24) & 0x07) {
+ ND_PRINT(" robustness=%u", GET_U_1(bp + 24) & 0x07);
+ }
+ if (GET_U_1(bp + 25) < 128) {
+ qqi = GET_U_1(bp + 25);
+ } else {
+ qqi = ((GET_U_1(bp + 25) & 0x0f) | 0x10) <<
+ (((GET_U_1(bp + 25) & 0x70) >> 4) + 3);
+ }
+ ND_PRINT(" qqi=%u", qqi);
+ }
+
+ nsrcs = GET_BE_U_2(bp + 26);
+ if (nsrcs > 0) {
+ if (len < 28 + nsrcs * sizeof(nd_ipv6))
+ ND_PRINT(" [invalid number of sources]");
+ else if (ndo->ndo_vflag > 1) {
+ ND_PRINT(" {");
+ for (i = 0; i < nsrcs; i++) {
+ ND_PRINT(" %s", GET_IP6ADDR_STRING(bp + 28 + (i * sizeof(nd_ipv6))));
+ }
+ ND_PRINT(" }");
+ } else
+ ND_PRINT(", %u source(s)", nsrcs);
+ }
+ ND_PRINT("]");
+}
+
+static void
+dnsname_print(netdissect_options *ndo, const u_char *cp, const u_char *ep)
+{
+ int i;
+
+ /* DNS name decoding - no decompression */
+ ND_PRINT(", \"");
+ while (cp < ep) {
+ i = GET_U_1(cp);
+ cp++;
+ if (i) {
+ if (i > ep - cp) {
+ ND_PRINT("???");
+ break;
+ }
+ while (i-- && cp < ep) {
+ fn_print_char(ndo, GET_U_1(cp));
+ cp++;
+ }
+ if (cp + 1 < ep && GET_U_1(cp))
+ ND_PRINT(".");
+ } else {
+ if (cp == ep) {
+ /* FQDN */
+ ND_PRINT(".");
+ } else if (cp + 1 == ep && GET_U_1(cp) == '\0') {
+ /* truncated */
+ } else {
+ /* invalid */
+ ND_PRINT("???");
+ }
+ break;
+ }
+ }
+ ND_PRINT("\"");
+}
+
+static void
+icmp6_nodeinfo_print(netdissect_options *ndo, u_int icmp6len, const u_char *bp, const u_char *ep)
+{
+ const struct icmp6_nodeinfo *ni6;
+ const struct icmp6_hdr *dp;
+ const u_char *cp;
+ size_t siz, i;
+ int needcomma;
+
+ if (ep < bp)
+ return;
+ dp = (const struct icmp6_hdr *)bp;
+ ni6 = (const struct icmp6_nodeinfo *)bp;
+ siz = ep - bp;
+
+ switch (GET_U_1(ni6->ni_type)) {
+ case ICMP6_NI_QUERY:
+ if (siz == sizeof(*dp) + 4) {
+ /* KAME who-are-you */
+ ND_PRINT(" who-are-you request");
+ break;
+ }
+ ND_PRINT(" node information query");
+
+ ND_TCHECK_LEN(dp, sizeof(*ni6));
+ ni6 = (const struct icmp6_nodeinfo *)dp;
+ ND_PRINT(" ("); /*)*/
+ switch (GET_BE_U_2(ni6->ni_qtype)) {
+ case NI_QTYPE_NOOP:
+ ND_PRINT("noop");
+ break;
+ case NI_QTYPE_SUPTYPES:
+ ND_PRINT("supported qtypes");
+ i = GET_BE_U_2(ni6->ni_flags);
+ if (i)
+ ND_PRINT(" [%s]", (i & 0x01) ? "C" : "");
+ break;
+ case NI_QTYPE_FQDN:
+ ND_PRINT("DNS name");
+ break;
+ case NI_QTYPE_NODEADDR:
+ ND_PRINT("node addresses");
+ i = GET_BE_U_2(ni6->ni_flags);
+ if (!i)
+ break;
+ /* NI_NODEADDR_FLAG_TRUNCATE undefined for query */
+ ND_PRINT(" [%s%s%s%s%s%s]",
+ (i & NI_NODEADDR_FLAG_ANYCAST) ? "a" : "",
+ (i & NI_NODEADDR_FLAG_GLOBAL) ? "G" : "",
+ (i & NI_NODEADDR_FLAG_SITELOCAL) ? "S" : "",
+ (i & NI_NODEADDR_FLAG_LINKLOCAL) ? "L" : "",
+ (i & NI_NODEADDR_FLAG_COMPAT) ? "C" : "",
+ (i & NI_NODEADDR_FLAG_ALL) ? "A" : "");
+ break;
+ default:
+ ND_PRINT("unknown");
+ break;
+ }
+
+ if (GET_BE_U_2(ni6->ni_qtype) == NI_QTYPE_NOOP ||
+ GET_BE_U_2(ni6->ni_qtype) == NI_QTYPE_SUPTYPES) {
+ if (siz != sizeof(*ni6))
+ if (ndo->ndo_vflag)
+ ND_PRINT(", invalid len");
+ /*(*/
+ ND_PRINT(")");
+ break;
+ }
+
+ /* XXX backward compat, icmp-name-lookup-03 */
+ if (siz == sizeof(*ni6)) {
+ ND_PRINT(", 03 draft");
+ /*(*/
+ ND_PRINT(")");
+ break;
+ }
+
+ cp = (const u_char *)(ni6 + 1);
+ switch (GET_U_1(ni6->ni_code)) {
+ case ICMP6_NI_SUBJ_IPV6:
+ if (!ND_TTEST_LEN(dp, sizeof(*ni6) + sizeof(nd_ipv6)))
+ break;
+ if (siz != sizeof(*ni6) + sizeof(nd_ipv6)) {
+ if (ndo->ndo_vflag)
+ ND_PRINT(", invalid subject len");
+ break;
+ }
+ ND_PRINT(", subject=%s",
+ GET_IP6ADDR_STRING(cp));
+ break;
+ case ICMP6_NI_SUBJ_FQDN:
+ ND_PRINT(", subject=DNS name");
+ if (GET_U_1(cp) == ep - cp - 1) {
+ /* icmp-name-lookup-03, pascal string */
+ if (ndo->ndo_vflag)
+ ND_PRINT(", 03 draft");
+ cp++;
+ ND_PRINT(", \"");
+ while (cp < ep) {
+ fn_print_char(ndo, GET_U_1(cp));
+ cp++;
+ }
+ ND_PRINT("\"");
+ } else
+ dnsname_print(ndo, cp, ep);
+ break;
+ case ICMP6_NI_SUBJ_IPV4:
+ if (!ND_TTEST_LEN(dp, sizeof(*ni6) + sizeof(nd_ipv4)))
+ break;
+ if (siz != sizeof(*ni6) + sizeof(nd_ipv4)) {
+ if (ndo->ndo_vflag)
+ ND_PRINT(", invalid subject len");
+ break;
+ }
+ ND_PRINT(", subject=%s",
+ GET_IPADDR_STRING(cp));
+ break;
+ default:
+ ND_PRINT(", unknown subject");
+ break;
+ }
+
+ /*(*/
+ ND_PRINT(")");
+ break;
+
+ case ICMP6_NI_REPLY:
+ if (icmp6len > siz)
+ goto trunc;
+
+ needcomma = 0;
+
+ ND_TCHECK_LEN(dp, sizeof(*ni6));
+ ni6 = (const struct icmp6_nodeinfo *)dp;
+ ND_PRINT(" node information reply");
+ ND_PRINT(" ("); /*)*/
+ switch (GET_U_1(ni6->ni_code)) {
+ case ICMP6_NI_SUCCESS:
+ if (ndo->ndo_vflag) {
+ ND_PRINT("success");
+ needcomma++;
+ }
+ break;
+ case ICMP6_NI_REFUSED:
+ ND_PRINT("refused");
+ needcomma++;
+ if (siz != sizeof(*ni6))
+ if (ndo->ndo_vflag)
+ ND_PRINT(", invalid length");
+ break;
+ case ICMP6_NI_UNKNOWN:
+ ND_PRINT("unknown");
+ needcomma++;
+ if (siz != sizeof(*ni6))
+ if (ndo->ndo_vflag)
+ ND_PRINT(", invalid length");
+ break;
+ }
+
+ if (GET_U_1(ni6->ni_code) != ICMP6_NI_SUCCESS) {
+ /*(*/
+ ND_PRINT(")");
+ break;
+ }
+
+ switch (GET_BE_U_2(ni6->ni_qtype)) {
+ case NI_QTYPE_NOOP:
+ if (needcomma)
+ ND_PRINT(", ");
+ ND_PRINT("noop");
+ if (siz != sizeof(*ni6))
+ if (ndo->ndo_vflag)
+ ND_PRINT(", invalid length");
+ break;
+ case NI_QTYPE_SUPTYPES:
+ if (needcomma)
+ ND_PRINT(", ");
+ ND_PRINT("supported qtypes");
+ i = GET_BE_U_2(ni6->ni_flags);
+ if (i)
+ ND_PRINT(" [%s]", (i & 0x01) ? "C" : "");
+ break;
+ case NI_QTYPE_FQDN:
+ if (needcomma)
+ ND_PRINT(", ");
+ ND_PRINT("DNS name");
+ cp = (const u_char *)(ni6 + 1) + 4;
+ if (GET_U_1(cp) == ep - cp - 1) {
+ /* icmp-name-lookup-03, pascal string */
+ if (ndo->ndo_vflag)
+ ND_PRINT(", 03 draft");
+ cp++;
+ ND_PRINT(", \"");
+ while (cp < ep) {
+ fn_print_char(ndo, GET_U_1(cp));
+ cp++;
+ }
+ ND_PRINT("\"");
+ } else
+ dnsname_print(ndo, cp, ep);
+ if ((GET_BE_U_2(ni6->ni_flags) & 0x01) != 0)
+ ND_PRINT(" [TTL=%u]", GET_BE_U_4(ni6 + 1));
+ break;
+ case NI_QTYPE_NODEADDR:
+ if (needcomma)
+ ND_PRINT(", ");
+ ND_PRINT("node addresses");
+ i = sizeof(*ni6);
+ while (i < siz) {
+ if (i + sizeof(uint32_t) + sizeof(nd_ipv6) > siz)
+ break;
+ ND_PRINT(" %s(%u)",
+ GET_IP6ADDR_STRING(bp + i + sizeof(uint32_t)),
+ GET_BE_U_4(bp + i));
+ i += sizeof(uint32_t) + sizeof(nd_ipv6);
+ }
+ i = GET_BE_U_2(ni6->ni_flags);
+ if (!i)
+ break;
+ ND_PRINT(" [%s%s%s%s%s%s%s]",
+ (i & NI_NODEADDR_FLAG_ANYCAST) ? "a" : "",
+ (i & NI_NODEADDR_FLAG_GLOBAL) ? "G" : "",
+ (i & NI_NODEADDR_FLAG_SITELOCAL) ? "S" : "",
+ (i & NI_NODEADDR_FLAG_LINKLOCAL) ? "L" : "",
+ (i & NI_NODEADDR_FLAG_COMPAT) ? "C" : "",
+ (i & NI_NODEADDR_FLAG_ALL) ? "A" : "",
+ (i & NI_NODEADDR_FLAG_TRUNCATE) ? "T" : "");
+ break;
+ default:
+ if (needcomma)
+ ND_PRINT(", ");
+ ND_PRINT("unknown");
+ break;
+ }
+
+ /*(*/
+ ND_PRINT(")");
+ break;
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+icmp6_rrenum_print(netdissect_options *ndo, const u_char *bp, const u_char *ep)
+{
+ const struct icmp6_router_renum *rr6;
+ const char *cp;
+ const struct rr_pco_match *match;
+ const struct rr_pco_use *use;
+ char hbuf[NI_MAXHOST];
+ int n;
+
+ if (ep < bp)
+ return;
+ rr6 = (const struct icmp6_router_renum *)bp;
+ cp = (const char *)(rr6 + 1);
+
+ ND_TCHECK_4(rr6->rr_reserved);
+ switch (GET_U_1(rr6->rr_code)) {
+ case ICMP6_ROUTER_RENUMBERING_COMMAND:
+ ND_PRINT(", command");
+ break;
+ case ICMP6_ROUTER_RENUMBERING_RESULT:
+ ND_PRINT(", result");
+ break;
+ case ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET:
+ ND_PRINT(", sequence number reset");
+ break;
+ default:
+ ND_PRINT(", code-#%u", GET_U_1(rr6->rr_code));
+ break;
+ }
+
+ ND_PRINT(", seq=%u", GET_BE_U_4(rr6->rr_seqnum));
+
+ if (ndo->ndo_vflag) {
+ uint8_t rr_flags = GET_U_1(rr6->rr_flags);
+#define F(x, y) (rr_flags & (x) ? (y) : "")
+ ND_PRINT("["); /*]*/
+ if (rr_flags) {
+ ND_PRINT("%s%s%s%s%s,", F(ICMP6_RR_FLAGS_TEST, "T"),
+ F(ICMP6_RR_FLAGS_REQRESULT, "R"),
+ F(ICMP6_RR_FLAGS_FORCEAPPLY, "A"),
+ F(ICMP6_RR_FLAGS_SPECSITE, "S"),
+ F(ICMP6_RR_FLAGS_PREVDONE, "P"));
+ }
+ ND_PRINT("seg=%u,", GET_U_1(rr6->rr_segnum));
+ ND_PRINT("maxdelay=%u", GET_BE_U_2(rr6->rr_maxdelay));
+ if (GET_BE_U_4(rr6->rr_reserved))
+ ND_PRINT("rsvd=0x%x", GET_BE_U_4(rr6->rr_reserved));
+ /*[*/
+ ND_PRINT("]");
+#undef F
+ }
+
+ if (GET_U_1(rr6->rr_code) == ICMP6_ROUTER_RENUMBERING_COMMAND) {
+ match = (const struct rr_pco_match *)cp;
+ cp = (const char *)(match + 1);
+
+ ND_TCHECK_16(match->rpm_prefix);
+
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("\n\t");
+ else
+ ND_PRINT(" ");
+ ND_PRINT("match("); /*)*/
+ switch (GET_U_1(match->rpm_code)) {
+ case RPM_PCO_ADD: ND_PRINT("add"); break;
+ case RPM_PCO_CHANGE: ND_PRINT("change"); break;
+ case RPM_PCO_SETGLOBAL: ND_PRINT("setglobal"); break;
+ default: ND_PRINT("#%u",
+ GET_U_1(match->rpm_code)); break;
+ }
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT(",ord=%u", GET_U_1(match->rpm_ordinal));
+ ND_PRINT(",min=%u", GET_U_1(match->rpm_minlen));
+ ND_PRINT(",max=%u", GET_U_1(match->rpm_maxlen));
+ }
+ if (addrtostr6(match->rpm_prefix, hbuf, sizeof(hbuf)))
+ ND_PRINT(",%s/%u", hbuf, GET_U_1(match->rpm_matchlen));
+ else
+ ND_PRINT(",?/%u", GET_U_1(match->rpm_matchlen));
+ /*(*/
+ ND_PRINT(")");
+
+ n = GET_U_1(match->rpm_len) - 3;
+ if (n % 4)
+ goto trunc;
+ n /= 4;
+ while (n-- > 0) {
+ use = (const struct rr_pco_use *)cp;
+ cp = (const char *)(use + 1);
+
+ ND_TCHECK_16(use->rpu_prefix);
+
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("\n\t");
+ else
+ ND_PRINT(" ");
+ ND_PRINT("use("); /*)*/
+ if (GET_U_1(use->rpu_flags)) {
+#define F(x, y) (GET_U_1(use->rpu_flags) & (x) ? (y) : "")
+ ND_PRINT("%s%s,",
+ F(ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME, "V"),
+ F(ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME, "P"));
+#undef F
+ }
+ if (ndo->ndo_vflag) {
+ ND_PRINT("mask=0x%x,",
+ GET_U_1(use->rpu_ramask));
+ ND_PRINT("raflags=0x%x,",
+ GET_U_1(use->rpu_raflags));
+ if (GET_BE_U_4(use->rpu_vltime) == 0xffffffff)
+ ND_PRINT("vltime=infty,");
+ else
+ ND_PRINT("vltime=%u,",
+ GET_BE_U_4(use->rpu_vltime));
+ if (GET_BE_U_4(use->rpu_pltime) == 0xffffffff)
+ ND_PRINT("pltime=infty,");
+ else
+ ND_PRINT("pltime=%u,",
+ GET_BE_U_4(use->rpu_pltime));
+ }
+ if (addrtostr6(use->rpu_prefix, hbuf, sizeof(hbuf)))
+ ND_PRINT("%s/%u/%u", hbuf,
+ GET_U_1(use->rpu_uselen),
+ GET_U_1(use->rpu_keeplen));
+ else
+ ND_PRINT("?/%u/%u", GET_U_1(use->rpu_uselen),
+ GET_U_1(use->rpu_keeplen));
+ /*(*/
+ ND_PRINT(")");
+ }
+ }
+
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-igmp.c b/print-igmp.c
new file mode 100644
index 0000000..914e3d6
--- /dev/null
+++ b/print-igmp.c
@@ -0,0 +1,301 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Internet Group Management Protocol (IGMP) printer */
+
+/*
+ * specification:
+ *
+ * RFC 2236 for IGMPv2
+ * RFC 3376 for IGMPv3
+ * draft-asaeda-mboned-mtrace-v2 for the mtrace message
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#ifndef IN_CLASSD
+#define IN_CLASSD(i) (((int32_t)(i) & 0xf0000000) == 0xe0000000)
+#endif
+
+
+/* (following from ipmulti/mrouted/prune.h) */
+
+/*
+ * The packet format for a traceroute request.
+ */
+struct tr_query {
+ nd_uint32_t tr_src; /* traceroute source */
+ nd_uint32_t tr_dst; /* traceroute destination */
+ nd_uint32_t tr_raddr; /* traceroute response address */
+ nd_uint8_t tr_rttl; /* response ttl */
+ nd_uint24_t tr_qid; /* qid */
+};
+
+/*
+ * Traceroute response format. A traceroute response has a tr_query at the
+ * beginning, followed by one tr_resp for each hop taken.
+ */
+struct tr_resp {
+ nd_uint32_t tr_qarr; /* query arrival time */
+ nd_uint32_t tr_inaddr; /* incoming interface address */
+ nd_uint32_t tr_outaddr; /* outgoing interface address */
+ nd_uint32_t tr_rmtaddr; /* parent address in source tree */
+ nd_uint32_t tr_vifin; /* input packet count on interface */
+ nd_uint32_t tr_vifout; /* output packet count on interface */
+ nd_uint32_t tr_pktcnt; /* total incoming packets for src-grp */
+ nd_uint8_t tr_rproto; /* routing proto deployed on router */
+ nd_uint8_t tr_fttl; /* ttl required to forward on outvif */
+ nd_uint8_t tr_smask; /* subnet mask for src addr */
+ nd_uint8_t tr_rflags; /* forwarding error codes */
+};
+
+/* defs within mtrace */
+#define TR_QUERY 1
+#define TR_RESP 2
+
+/* fields for tr_rflags (forwarding error codes) */
+#define TR_NO_ERR 0
+#define TR_WRONG_IF 1
+#define TR_PRUNED 2
+#define TR_OPRUNED 3
+#define TR_SCOPED 4
+#define TR_NO_RTE 5
+#define TR_NO_FWD 7
+#define TR_NO_SPACE 0x81
+#define TR_OLD_ROUTER 0x82
+
+/* fields for tr_rproto (routing protocol) */
+#define TR_PROTO_DVMRP 1
+#define TR_PROTO_MOSPF 2
+#define TR_PROTO_PIM 3
+#define TR_PROTO_CBT 4
+
+/* igmpv3 report types */
+static const struct tok igmpv3report2str[] = {
+ { 1, "is_in" },
+ { 2, "is_ex" },
+ { 3, "to_in" },
+ { 4, "to_ex" },
+ { 5, "allow" },
+ { 6, "block" },
+ { 0, NULL }
+};
+
+static void
+print_mtrace(netdissect_options *ndo,
+ const char *typename,
+ const u_char *bp, u_int len)
+{
+ const struct tr_query *tr = (const struct tr_query *)(bp + 8);
+
+ if (len < 8 + sizeof (struct tr_query)) {
+ ND_PRINT(" [invalid len %u]", len);
+ return;
+ }
+ ND_PRINT("%s %u: %s to %s reply-to %s",
+ typename,
+ GET_BE_U_3(tr->tr_qid),
+ GET_IPADDR_STRING(tr->tr_src), GET_IPADDR_STRING(tr->tr_dst),
+ GET_IPADDR_STRING(tr->tr_raddr));
+ if (IN_CLASSD(GET_BE_U_4(tr->tr_raddr)))
+ ND_PRINT(" with-ttl %u", GET_U_1(tr->tr_rttl));
+}
+
+static void
+print_igmpv3_report(netdissect_options *ndo,
+ const u_char *bp, u_int len)
+{
+ u_int group, nsrcs, ngroups;
+ u_int i, j;
+
+ /* Minimum len is 16, and should be a multiple of 4 */
+ if (len < 16 || len & 0x03) {
+ ND_PRINT(" [invalid len %u]", len);
+ return;
+ }
+ ngroups = GET_BE_U_2(bp + 6);
+ ND_PRINT(", %u group record(s)", ngroups);
+ if (ndo->ndo_vflag > 0) {
+ /* Print the group records */
+ group = 8;
+ for (i=0; i<ngroups; i++) {
+ if (len < group+8) {
+ ND_PRINT(" [invalid number of groups]");
+ return;
+ }
+ ND_PRINT(" [gaddr %s", GET_IPADDR_STRING(bp + group + 4));
+ ND_PRINT(" %s", tok2str(igmpv3report2str, " [v3-report-#%u]",
+ GET_U_1(bp + group)));
+ nsrcs = GET_BE_U_2(bp + group + 2);
+ /* Check the number of sources and print them */
+ if (len < group+8+(nsrcs<<2)) {
+ ND_PRINT(" [invalid number of sources %u]", nsrcs);
+ return;
+ }
+ if (ndo->ndo_vflag == 1)
+ ND_PRINT(", %u source(s)", nsrcs);
+ else {
+ /* Print the sources */
+ ND_PRINT(" {");
+ for (j=0; j<nsrcs; j++) {
+ ND_PRINT(" %s", GET_IPADDR_STRING(bp + group + 8 + (j << 2)));
+ }
+ ND_PRINT(" }");
+ }
+ /* Next group record */
+ group += 8 + (nsrcs << 2);
+ ND_PRINT("]");
+ }
+ }
+}
+
+static void
+print_igmpv3_query(netdissect_options *ndo,
+ const u_char *bp, u_int len)
+{
+ u_int mrc;
+ u_int mrt;
+ u_int nsrcs;
+ u_int i;
+
+ ND_PRINT(" v3");
+ /* Minimum len is 12, and should be a multiple of 4 */
+ if (len < 12 || len & 0x03) {
+ ND_PRINT(" [invalid len %u]", len);
+ return;
+ }
+ mrc = GET_U_1(bp + 1);
+ if (mrc < 128) {
+ mrt = mrc;
+ } else {
+ mrt = ((mrc & 0x0f) | 0x10) << (((mrc & 0x70) >> 4) + 3);
+ }
+ if (mrc != 100) {
+ ND_PRINT(" [max resp time ");
+ if (mrt < 600) {
+ ND_PRINT("%.1fs", mrt * 0.1);
+ } else {
+ unsigned_relts_print(ndo, mrt / 10);
+ }
+ ND_PRINT("]");
+ }
+ if (GET_BE_U_4(bp + 4) == 0)
+ return;
+ ND_PRINT(" [gaddr %s", GET_IPADDR_STRING(bp + 4));
+ nsrcs = GET_BE_U_2(bp + 10);
+ if (nsrcs > 0) {
+ if (len < 12 + (nsrcs << 2))
+ ND_PRINT(" [invalid number of sources]");
+ else if (ndo->ndo_vflag > 1) {
+ ND_PRINT(" {");
+ for (i=0; i<nsrcs; i++) {
+ ND_PRINT(" %s", GET_IPADDR_STRING(bp + 12 + (i << 2)));
+ }
+ ND_PRINT(" }");
+ } else
+ ND_PRINT(", %u source(s)", nsrcs);
+ }
+ ND_PRINT("]");
+}
+
+void
+igmp_print(netdissect_options *ndo,
+ const u_char *bp, u_int len)
+{
+ struct cksum_vec vec[1];
+
+ ndo->ndo_protocol = "igmp";
+ if (ndo->ndo_qflag) {
+ ND_PRINT("igmp");
+ return;
+ }
+
+ switch (GET_U_1(bp)) {
+ case 0x11:
+ ND_PRINT("igmp query");
+ if (len >= 12)
+ print_igmpv3_query(ndo, bp, len);
+ else {
+ if (GET_U_1(bp + 1)) {
+ ND_PRINT(" v2");
+ if (GET_U_1(bp + 1) != 100)
+ ND_PRINT(" [max resp time %u]", GET_U_1(bp + 1));
+ } else
+ ND_PRINT(" v1");
+ if (GET_BE_U_4(bp + 4))
+ ND_PRINT(" [gaddr %s]", GET_IPADDR_STRING(bp + 4));
+ if (len != 8)
+ ND_PRINT(" [len %u]", len);
+ }
+ break;
+ case 0x12:
+ ND_PRINT("igmp v1 report %s", GET_IPADDR_STRING(bp + 4));
+ if (len != 8)
+ ND_PRINT(" [len %u]", len);
+ break;
+ case 0x16:
+ ND_PRINT("igmp v2 report %s", GET_IPADDR_STRING(bp + 4));
+ break;
+ case 0x22:
+ ND_PRINT("igmp v3 report");
+ print_igmpv3_report(ndo, bp, len);
+ break;
+ case 0x17:
+ ND_PRINT("igmp leave %s", GET_IPADDR_STRING(bp + 4));
+ break;
+ case 0x13:
+ ND_PRINT("igmp dvmrp");
+ if (len < 8)
+ ND_PRINT(" [len %u]", len);
+ else
+ dvmrp_print(ndo, bp, len);
+ break;
+ case 0x14:
+ ND_PRINT("igmp pimv1");
+ pimv1_print(ndo, bp, len);
+ break;
+ case 0x1e:
+ print_mtrace(ndo, "mresp", bp, len);
+ break;
+ case 0x1f:
+ print_mtrace(ndo, "mtrace", bp, len);
+ break;
+ default:
+ ND_PRINT("igmp-%u", GET_U_1(bp));
+ break;
+ }
+
+ if (ndo->ndo_vflag && len >= 4 && ND_TTEST_LEN(bp, len)) {
+ /* Check the IGMP checksum */
+ vec[0].ptr = bp;
+ vec[0].len = len;
+ if (in_cksum(vec, 1))
+ ND_PRINT(" bad igmp cksum %x!", GET_BE_U_2(bp + 2));
+ }
+}
diff --git a/print-igrp.c b/print-igrp.c
new file mode 100644
index 0000000..23dc1f5
--- /dev/null
+++ b/print-igrp.c
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Initial contribution from Francis Dupont (francis.dupont@inria.fr)
+ */
+
+/* \summary: Interior Gateway Routing Protocol (IGRP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+/* Cisco IGRP definitions */
+
+/* IGRP Header */
+
+struct igrphdr {
+ nd_uint8_t ig_vop; /* protocol version number / opcode */
+#define IGRP_V(x) (((x) & 0xf0) >> 4)
+#define IGRP_OP(x) ((x) & 0x0f)
+ nd_uint8_t ig_ed; /* edition number */
+ nd_uint16_t ig_as; /* autonomous system number */
+ nd_uint16_t ig_ni; /* number of subnet in local net */
+ nd_uint16_t ig_ns; /* number of networks in AS */
+ nd_uint16_t ig_nx; /* number of networks outside AS */
+ nd_uint16_t ig_sum; /* checksum of IGRP header & data */
+};
+
+#define IGRP_UPDATE 1
+#define IGRP_REQUEST 2
+
+/* IGRP routing entry */
+
+struct igrprte {
+ nd_byte igr_net[3]; /* 3 significant octets of IP address */
+ nd_uint24_t igr_dly; /* delay in tens of microseconds */
+ nd_uint24_t igr_bw; /* bandwidth in units of 1 kb/s */
+ nd_uint16_t igr_mtu; /* MTU in octets */
+ nd_uint8_t igr_rel; /* percent packets successfully tx/rx */
+ nd_uint8_t igr_ld; /* percent of channel occupied */
+ nd_uint8_t igr_hct; /* hop count */
+};
+
+#define IGRP_RTE_SIZE 14 /* sizeof() is accurate now */
+
+static void
+igrp_entry_print(netdissect_options *ndo, const struct igrprte *igr)
+{
+ u_int delay, bandwidth;
+ u_int metric, mtu;
+
+ delay = GET_BE_U_3(igr->igr_dly);
+ bandwidth = GET_BE_U_3(igr->igr_bw);
+ metric = ND_MIN(bandwidth + delay, 0xffffff);
+ mtu = GET_BE_U_2(igr->igr_mtu);
+
+ ND_PRINT(" d=%u b=%u r=%u l=%u M=%u mtu=%u in %u hops",
+ 10 * delay, bandwidth == 0 ? 0 : 10000000 / bandwidth,
+ GET_U_1(igr->igr_rel), GET_U_1(igr->igr_ld), metric,
+ mtu, GET_U_1(igr->igr_hct));
+}
+
+static const struct tok op2str[] = {
+ { IGRP_UPDATE, "update" },
+ { IGRP_REQUEST, "request" },
+ { 0, NULL }
+};
+
+void
+igrp_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const struct igrphdr *hdr;
+ const u_char *cp;
+ u_int nint, nsys, next;
+ uint16_t cksum;
+
+ ndo->ndo_protocol = "igrp";
+ hdr = (const struct igrphdr *)bp;
+ cp = (const u_char *)(hdr + 1);
+ ND_PRINT("igrp:");
+
+ /* Header */
+ nint = GET_BE_U_2(hdr->ig_ni);
+ nsys = GET_BE_U_2(hdr->ig_ns);
+ next = GET_BE_U_2(hdr->ig_nx);
+
+ ND_PRINT(" %s V%u edit=%u AS=%u (%u/%u/%u)",
+ tok2str(op2str, "op-#%u", IGRP_OP(GET_U_1(hdr->ig_vop))),
+ IGRP_V(GET_U_1(hdr->ig_vop)),
+ GET_U_1(hdr->ig_ed),
+ GET_BE_U_2(hdr->ig_as),
+ nint,
+ nsys,
+ next);
+ cksum = GET_BE_U_2(hdr->ig_sum);
+ if (ndo->ndo_vflag)
+ ND_PRINT(" checksum=0x%04x", cksum);
+
+ length -= sizeof(*hdr);
+ while (length >= IGRP_RTE_SIZE) {
+ const struct igrprte *igr = (const struct igrprte *)cp;
+ uint8_t net0 = GET_U_1(&igr->igr_net[0]);
+ uint8_t net1 = GET_U_1(&igr->igr_net[1]);
+ uint8_t net2 = GET_U_1(&igr->igr_net[2]);
+
+ if (nint > 0) {
+ ND_PRINT(" *.%u.%u.%u", net0, net1, net2);
+ igrp_entry_print(ndo, igr);
+ --nint;
+ } else if (nsys > 0) {
+ ND_PRINT(" %u.%u.%u.0", net0, net1, net2);
+ igrp_entry_print(ndo, igr);
+ --nsys;
+ } else if (next > 0) {
+ ND_PRINT(" X%u.%u.%u.0", net0, net1, net2);
+ igrp_entry_print(ndo, igr);
+ --next;
+ } else {
+ ND_PRINT(" [extra bytes %u]", length);
+ break;
+ }
+ cp += IGRP_RTE_SIZE;
+ length -= IGRP_RTE_SIZE;
+ }
+ if (nint || nsys || next || length)
+ nd_print_invalid(ndo);
+}
diff --git a/print-ip-demux.c b/print-ip-demux.c
new file mode 100644
index 0000000..a0a6fbd
--- /dev/null
+++ b/print-ip-demux.c
@@ -0,0 +1,231 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IPv4/IPv6 payload printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip.h"
+#include "ipproto.h"
+
+void
+ip_demux_print(netdissect_options *ndo,
+ const u_char *bp,
+ u_int length, u_int ver, int fragmented, u_int ttl_hl,
+ uint8_t nh, const u_char *iph)
+{
+ int advance;
+ const char *p_name;
+
+ advance = 0;
+
+again:
+ switch (nh) {
+
+ case IPPROTO_AH:
+ if (!ND_TTEST_1(bp)) {
+ ndo->ndo_protocol = "ah";
+ nd_print_trunc(ndo);
+ break;
+ }
+ nh = GET_U_1(bp);
+ advance = ah_print(ndo, bp);
+ if (advance <= 0)
+ break;
+ bp += advance;
+ length -= advance;
+ goto again;
+
+ case IPPROTO_ESP:
+ {
+ esp_print(ndo, bp, length, iph, ver, fragmented, ttl_hl);
+ /*
+ * Either this has decrypted the payload and
+ * printed it, in which case there's nothing more
+ * to do, or it hasn't, in which case there's
+ * nothing more to do.
+ */
+ break;
+ }
+
+ case IPPROTO_IPCOMP:
+ {
+ ipcomp_print(ndo, bp);
+ /*
+ * Either this has decompressed the payload and
+ * printed it, in which case there's nothing more
+ * to do, or it hasn't, in which case there's
+ * nothing more to do.
+ */
+ break;
+ }
+
+ case IPPROTO_SCTP:
+ sctp_print(ndo, bp, iph, length);
+ break;
+
+ case IPPROTO_DCCP:
+ dccp_print(ndo, bp, iph, length);
+ break;
+
+ case IPPROTO_TCP:
+ tcp_print(ndo, bp, length, iph, fragmented);
+ break;
+
+ case IPPROTO_UDP:
+ udp_print(ndo, bp, length, iph, fragmented, ttl_hl);
+ break;
+
+ case IPPROTO_ICMP:
+ if (ver == 4)
+ icmp_print(ndo, bp, length, iph, fragmented);
+ else {
+ ND_PRINT("[%s requires IPv4]",
+ tok2str(ipproto_values,"unknown",nh));
+ nd_print_invalid(ndo);
+ }
+ break;
+
+ case IPPROTO_ICMPV6:
+ if (ver == 6)
+ icmp6_print(ndo, bp, length, iph, fragmented);
+ else {
+ ND_PRINT("[%s requires IPv6]",
+ tok2str(ipproto_values,"unknown",nh));
+ nd_print_invalid(ndo);
+ }
+ break;
+
+ case IPPROTO_PIGP:
+ /*
+ * XXX - the current IANA protocol number assignments
+ * page lists 9 as "any private interior gateway
+ * (used by Cisco for their IGRP)" and 88 as
+ * "EIGRP" from Cisco.
+ *
+ * Recent BSD <netinet/in.h> headers define
+ * IP_PROTO_PIGP as 9 and IP_PROTO_IGRP as 88.
+ * We define IP_PROTO_PIGP as 9 and
+ * IP_PROTO_EIGRP as 88; those names better
+ * match was the current protocol number
+ * assignments say.
+ */
+ igrp_print(ndo, bp, length);
+ break;
+
+ case IPPROTO_EIGRP:
+ eigrp_print(ndo, bp, length);
+ break;
+
+ case IPPROTO_ND:
+ ND_PRINT(" nd %u", length);
+ break;
+
+ case IPPROTO_EGP:
+ egp_print(ndo, bp, length);
+ break;
+
+ case IPPROTO_OSPF:
+ if (ver == 6)
+ ospf6_print(ndo, bp, length);
+ else
+ ospf_print(ndo, bp, length, iph);
+ break;
+
+ case IPPROTO_IGMP:
+ if (ver == 4)
+ igmp_print(ndo, bp, length);
+ else {
+ ND_PRINT("[%s requires IPv4]",
+ tok2str(ipproto_values,"unknown",nh));
+ nd_print_invalid(ndo);
+ }
+ break;
+
+ case IPPROTO_IPV4:
+ /* ipv4-in-ip encapsulation */
+ ip_print(ndo, bp, length);
+ break;
+
+ case IPPROTO_IPV6:
+ /* ip6-in-ip encapsulation */
+ ip6_print(ndo, bp, length);
+ break;
+
+ case IPPROTO_RSVP:
+ rsvp_print(ndo, bp, length);
+ break;
+
+ case IPPROTO_GRE:
+ gre_print(ndo, bp, length);
+ break;
+
+ case IPPROTO_MOBILE:
+ mobile_print(ndo, bp, length);
+ break;
+
+ case IPPROTO_PIM:
+ pim_print(ndo, bp, length, iph);
+ break;
+
+ case IPPROTO_VRRP:
+ if (ndo->ndo_packettype == PT_CARP) {
+ carp_print(ndo, bp, length, ttl_hl);
+ } else {
+ vrrp_print(ndo, bp, length, iph, ttl_hl, ver);
+ }
+ break;
+
+ case IPPROTO_PGM:
+ pgm_print(ndo, bp, length, iph);
+ break;
+
+ case IPPROTO_ETHERNET:
+ if (ver == 6)
+ ether_print(ndo, bp, length, ND_BYTES_AVAILABLE_AFTER(bp), NULL, NULL);
+ else {
+ ND_PRINT("[%s requires IPv6]",
+ tok2str(ipproto_values,"unknown",nh));
+ nd_print_invalid(ndo);
+ }
+ break;
+
+ case IPPROTO_NONE:
+ ND_PRINT("no next header");
+ break;
+
+ default:
+ if (ndo->ndo_nflag==0 && (p_name = netdb_protoname(nh)) != NULL)
+ ND_PRINT(" %s", p_name);
+ else
+ ND_PRINT(" ip-proto-%u", nh);
+ ND_PRINT(" %u", length);
+ break;
+ }
+}
diff --git a/print-ip.c b/print-ip.c
new file mode 100644
index 0000000..23ba99c
--- /dev/null
+++ b/print-ip.c
@@ -0,0 +1,538 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IP printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip.h"
+#include "ipproto.h"
+
+
+static const struct tok ip_option_values[] = {
+ { IPOPT_EOL, "EOL" },
+ { IPOPT_NOP, "NOP" },
+ { IPOPT_TS, "timestamp" },
+ { IPOPT_SECURITY, "security" },
+ { IPOPT_RR, "RR" },
+ { IPOPT_SSRR, "SSRR" },
+ { IPOPT_LSRR, "LSRR" },
+ { IPOPT_RA, "RA" },
+ { IPOPT_RFC1393, "traceroute" },
+ { 0, NULL }
+};
+
+/*
+ * print the recorded route in an IP RR, LSRR or SSRR option.
+ */
+static int
+ip_printroute(netdissect_options *ndo,
+ const u_char *cp, u_int length)
+{
+ u_int ptr;
+ u_int len;
+
+ if (length < 3) {
+ ND_PRINT(" [bad length %u]", length);
+ return (0);
+ }
+ if ((length + 1) & 3)
+ ND_PRINT(" [bad length %u]", length);
+ ptr = GET_U_1(cp + 2) - 1;
+ if (ptr < 3 || ((ptr + 1) & 3) || ptr > length + 1)
+ ND_PRINT(" [bad ptr %u]", GET_U_1(cp + 2));
+
+ for (len = 3; len < length; len += 4) {
+ ND_TCHECK_4(cp + len); /* Needed to print the IP addresses */
+ ND_PRINT(" %s", GET_IPADDR_STRING(cp + len));
+ if (ptr > len)
+ ND_PRINT(",");
+ }
+ return (0);
+
+trunc:
+ return (-1);
+}
+
+/*
+ * If source-routing is present and valid, return the final destination.
+ * Otherwise, return IP destination.
+ *
+ * This is used for UDP and TCP pseudo-header in the checksum
+ * calculation.
+ */
+static uint32_t
+ip_finddst(netdissect_options *ndo,
+ const struct ip *ip)
+{
+ u_int length;
+ u_int len;
+ const u_char *cp;
+
+ cp = (const u_char *)(ip + 1);
+ length = IP_HL(ip) * 4;
+ if (length < sizeof(struct ip))
+ goto trunc;
+ length -= sizeof(struct ip);
+
+ for (; length != 0; cp += len, length -= len) {
+ int tt;
+
+ tt = GET_U_1(cp);
+ if (tt == IPOPT_EOL)
+ break;
+ else if (tt == IPOPT_NOP)
+ len = 1;
+ else {
+ len = GET_U_1(cp + 1);
+ if (len < 2)
+ break;
+ }
+ if (length < len)
+ goto trunc;
+ ND_TCHECK_LEN(cp, len);
+ switch (tt) {
+
+ case IPOPT_SSRR:
+ case IPOPT_LSRR:
+ if (len < 7)
+ break;
+ return (GET_IPV4_TO_NETWORK_ORDER(cp + len - 4));
+ }
+ }
+trunc:
+ return (GET_IPV4_TO_NETWORK_ORDER(ip->ip_dst));
+}
+
+/*
+ * Compute a V4-style checksum by building a pseudoheader.
+ */
+uint16_t
+nextproto4_cksum(netdissect_options *ndo,
+ const struct ip *ip, const uint8_t *data,
+ u_int len, u_int covlen, uint8_t next_proto)
+{
+ struct phdr {
+ uint32_t src;
+ uint32_t dst;
+ uint8_t mbz;
+ uint8_t proto;
+ uint16_t len;
+ } ph;
+ struct cksum_vec vec[2];
+
+ /* pseudo-header.. */
+ ph.len = htons((uint16_t)len);
+ ph.mbz = 0;
+ ph.proto = next_proto;
+ ph.src = GET_IPV4_TO_NETWORK_ORDER(ip->ip_src);
+ if (IP_HL(ip) == 5)
+ ph.dst = GET_IPV4_TO_NETWORK_ORDER(ip->ip_dst);
+ else
+ ph.dst = ip_finddst(ndo, ip);
+
+ vec[0].ptr = (const uint8_t *)(void *)&ph;
+ vec[0].len = sizeof(ph);
+ vec[1].ptr = data;
+ vec[1].len = covlen;
+ return (in_cksum(vec, 2));
+}
+
+static int
+ip_printts(netdissect_options *ndo,
+ const u_char *cp, u_int length)
+{
+ u_int ptr;
+ u_int len;
+ u_int hoplen;
+ const char *type;
+
+ if (length < 4) {
+ ND_PRINT("[bad length %u]", length);
+ return (0);
+ }
+ ND_PRINT(" TS{");
+ hoplen = ((GET_U_1(cp + 3) & 0xF) != IPOPT_TS_TSONLY) ? 8 : 4;
+ if ((length - 4) & (hoplen-1))
+ ND_PRINT("[bad length %u]", length);
+ ptr = GET_U_1(cp + 2) - 1;
+ len = 0;
+ if (ptr < 4 || ((ptr - 4) & (hoplen-1)) || ptr > length + 1)
+ ND_PRINT("[bad ptr %u]", GET_U_1(cp + 2));
+ switch (GET_U_1(cp + 3)&0xF) {
+ case IPOPT_TS_TSONLY:
+ ND_PRINT("TSONLY");
+ break;
+ case IPOPT_TS_TSANDADDR:
+ ND_PRINT("TS+ADDR");
+ break;
+ case IPOPT_TS_PRESPEC:
+ ND_PRINT("PRESPEC");
+ break;
+ default:
+ ND_PRINT("[bad ts type %u]", GET_U_1(cp + 3)&0xF);
+ goto done;
+ }
+
+ type = " ";
+ for (len = 4; len < length; len += hoplen) {
+ if (ptr == len)
+ type = " ^ ";
+ ND_TCHECK_LEN(cp + len, hoplen);
+ ND_PRINT("%s%u@%s", type, GET_BE_U_4(cp + len + hoplen - 4),
+ hoplen!=8 ? "" : GET_IPADDR_STRING(cp + len));
+ type = " ";
+ }
+
+done:
+ ND_PRINT("%s", ptr == len ? " ^ " : "");
+
+ if (GET_U_1(cp + 3) >> 4)
+ ND_PRINT(" [%u hops not recorded]} ", GET_U_1(cp + 3)>>4);
+ else
+ ND_PRINT("}");
+ return (0);
+
+trunc:
+ return (-1);
+}
+
+/*
+ * print IP options.
+ If truncated return -1, else 0.
+ */
+static int
+ip_optprint(netdissect_options *ndo,
+ const u_char *cp, u_int length)
+{
+ u_int option_len;
+ const char *sep = "";
+
+ for (; length > 0; cp += option_len, length -= option_len) {
+ u_int option_code;
+
+ ND_PRINT("%s", sep);
+ sep = ",";
+
+ option_code = GET_U_1(cp);
+
+ ND_PRINT("%s",
+ tok2str(ip_option_values,"unknown %u",option_code));
+
+ if (option_code == IPOPT_NOP ||
+ option_code == IPOPT_EOL)
+ option_len = 1;
+
+ else {
+ option_len = GET_U_1(cp + 1);
+ if (option_len < 2) {
+ ND_PRINT(" [bad length %u]", option_len);
+ return 0;
+ }
+ }
+
+ if (option_len > length) {
+ ND_PRINT(" [bad length %u]", option_len);
+ return 0;
+ }
+
+ ND_TCHECK_LEN(cp, option_len);
+
+ switch (option_code) {
+ case IPOPT_EOL:
+ return 0;
+
+ case IPOPT_TS:
+ if (ip_printts(ndo, cp, option_len) == -1)
+ goto trunc;
+ break;
+
+ case IPOPT_RR: /* fall through */
+ case IPOPT_SSRR:
+ case IPOPT_LSRR:
+ if (ip_printroute(ndo, cp, option_len) == -1)
+ goto trunc;
+ break;
+
+ case IPOPT_RA:
+ if (option_len < 4) {
+ ND_PRINT(" [bad length %u]", option_len);
+ break;
+ }
+ ND_TCHECK_1(cp + 3);
+ if (GET_BE_U_2(cp + 2) != 0)
+ ND_PRINT(" value %u", GET_BE_U_2(cp + 2));
+ break;
+
+ case IPOPT_NOP: /* nothing to print - fall through */
+ case IPOPT_SECURITY:
+ default:
+ break;
+ }
+ }
+ return 0;
+
+trunc:
+ return -1;
+}
+
+#define IP_RES 0x8000
+
+static const struct tok ip_frag_values[] = {
+ { IP_MF, "+" },
+ { IP_DF, "DF" },
+ { IP_RES, "rsvd" }, /* The RFC3514 evil ;-) bit */
+ { 0, NULL }
+};
+
+
+/*
+ * print an IP datagram.
+ */
+void
+ip_print(netdissect_options *ndo,
+ const u_char *bp,
+ u_int length)
+{
+ const struct ip *ip;
+ u_int off;
+ u_int hlen;
+ u_int len;
+ struct cksum_vec vec[1];
+ uint8_t ip_tos, ip_ttl, ip_proto;
+ uint16_t sum, ip_sum;
+ const char *p_name;
+ int truncated = 0;
+
+ ndo->ndo_protocol = "ip";
+ ip = (const struct ip *)bp;
+ if (IP_V(ip) != 4) { /* print version and fail if != 4 */
+ if (IP_V(ip) == 6)
+ ND_PRINT("IP6, wrong link-layer encapsulation");
+ else
+ ND_PRINT("IP%u", IP_V(ip));
+ nd_print_invalid(ndo);
+ return;
+ }
+ if (!ndo->ndo_eflag)
+ ND_PRINT("IP ");
+
+ ND_TCHECK_SIZE(ip);
+ if (length < sizeof (struct ip)) {
+ ND_PRINT("truncated-ip %u", length);
+ return;
+ }
+ hlen = IP_HL(ip) * 4;
+ if (hlen < sizeof (struct ip)) {
+ ND_PRINT("bad-hlen %u", hlen);
+ return;
+ }
+
+ len = GET_BE_U_2(ip->ip_len);
+ if (length < len)
+ ND_PRINT("truncated-ip - %u bytes missing! ",
+ len - length);
+ if (len < hlen) {
+#ifdef GUESS_TSO
+ if (len) {
+ ND_PRINT("bad-len %u", len);
+ return;
+ }
+ else {
+ /* we guess that it is a TSO send */
+ len = length;
+ }
+#else
+ ND_PRINT("bad-len %u", len);
+ return;
+#endif /* GUESS_TSO */
+ }
+
+ /*
+ * Cut off the snapshot length to the end of the IP payload.
+ */
+ if (!nd_push_snaplen(ndo, bp, len)) {
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: can't push snaplen on buffer stack", __func__);
+ }
+
+ len -= hlen;
+
+ off = GET_BE_U_2(ip->ip_off);
+
+ ip_proto = GET_U_1(ip->ip_p);
+
+ if (ndo->ndo_vflag) {
+ ip_tos = GET_U_1(ip->ip_tos);
+ ND_PRINT("(tos 0x%x", ip_tos);
+ /* ECN bits */
+ switch (ip_tos & 0x03) {
+
+ case 0:
+ break;
+
+ case 1:
+ ND_PRINT(",ECT(1)");
+ break;
+
+ case 2:
+ ND_PRINT(",ECT(0)");
+ break;
+
+ case 3:
+ ND_PRINT(",CE");
+ break;
+ }
+
+ ip_ttl = GET_U_1(ip->ip_ttl);
+ if (ip_ttl >= 1)
+ ND_PRINT(", ttl %u", ip_ttl);
+
+ /*
+ * for the firewall guys, print id, offset.
+ * On all but the last stick a "+" in the flags portion.
+ * For unfragmented datagrams, note the don't fragment flag.
+ */
+ ND_PRINT(", id %u, offset %u, flags [%s], proto %s (%u)",
+ GET_BE_U_2(ip->ip_id),
+ (off & IP_OFFMASK) * 8,
+ bittok2str(ip_frag_values, "none", off & (IP_RES|IP_DF|IP_MF)),
+ tok2str(ipproto_values, "unknown", ip_proto),
+ ip_proto);
+
+ ND_PRINT(", length %u", GET_BE_U_2(ip->ip_len));
+
+ if ((hlen - sizeof(struct ip)) > 0) {
+ ND_PRINT(", options (");
+ if (ip_optprint(ndo, (const u_char *)(ip + 1),
+ hlen - sizeof(struct ip)) == -1) {
+ ND_PRINT(" [truncated-option]");
+ truncated = 1;
+ }
+ ND_PRINT(")");
+ }
+
+ if (!ndo->ndo_Kflag && (const u_char *)ip + hlen <= ndo->ndo_snapend) {
+ vec[0].ptr = (const uint8_t *)(const void *)ip;
+ vec[0].len = hlen;
+ sum = in_cksum(vec, 1);
+ if (sum != 0) {
+ ip_sum = GET_BE_U_2(ip->ip_sum);
+ ND_PRINT(", bad cksum %x (->%x)!", ip_sum,
+ in_cksum_shouldbe(ip_sum, sum));
+ }
+ }
+
+ ND_PRINT(")\n ");
+ if (truncated) {
+ ND_PRINT("%s > %s: ",
+ GET_IPADDR_STRING(ip->ip_src),
+ GET_IPADDR_STRING(ip->ip_dst));
+ nd_print_trunc(ndo);
+ nd_pop_packet_info(ndo);
+ return;
+ }
+ }
+
+ /*
+ * If this is fragment zero, hand it to the next higher
+ * level protocol. Let them know whether there are more
+ * fragments.
+ */
+ if ((off & IP_OFFMASK) == 0) {
+ uint8_t nh = GET_U_1(ip->ip_p);
+
+ if (nh != IPPROTO_TCP && nh != IPPROTO_UDP &&
+ nh != IPPROTO_SCTP && nh != IPPROTO_DCCP) {
+ ND_PRINT("%s > %s: ",
+ GET_IPADDR_STRING(ip->ip_src),
+ GET_IPADDR_STRING(ip->ip_dst));
+ }
+ /*
+ * Do a bounds check before calling ip_demux_print().
+ * At least the header data is required.
+ */
+ if (!ND_TTEST_LEN((const u_char *)ip, hlen)) {
+ ND_PRINT(" [remaining caplen(%u) < header length(%u)]",
+ ND_BYTES_AVAILABLE_AFTER((const u_char *)ip),
+ hlen);
+ nd_trunc_longjmp(ndo);
+ }
+ ip_demux_print(ndo, (const u_char *)ip + hlen, len, 4,
+ off & IP_MF, GET_U_1(ip->ip_ttl), nh, bp);
+ } else {
+ /*
+ * Ultra quiet now means that all this stuff should be
+ * suppressed.
+ */
+ if (ndo->ndo_qflag > 1) {
+ nd_pop_packet_info(ndo);
+ return;
+ }
+
+ /*
+ * This isn't the first frag, so we're missing the
+ * next level protocol header. print the ip addr
+ * and the protocol.
+ */
+ ND_PRINT("%s > %s:", GET_IPADDR_STRING(ip->ip_src),
+ GET_IPADDR_STRING(ip->ip_dst));
+ if (!ndo->ndo_nflag && (p_name = netdb_protoname(ip_proto)) != NULL)
+ ND_PRINT(" %s", p_name);
+ else
+ ND_PRINT(" ip-proto-%u", ip_proto);
+ }
+ nd_pop_packet_info(ndo);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+void
+ipN_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ ndo->ndo_protocol = "ipn";
+ if (length < 1) {
+ ND_PRINT("truncated-ip %u", length);
+ return;
+ }
+
+ switch (GET_U_1(bp) & 0xF0) {
+ case 0x40:
+ ip_print(ndo, bp, length);
+ break;
+ case 0x60:
+ ip6_print(ndo, bp, length);
+ break;
+ default:
+ ND_PRINT("unknown ip %u", (GET_U_1(bp) & 0xF0) >> 4);
+ break;
+ }
+}
diff --git a/print-ip6.c b/print-ip6.c
new file mode 100644
index 0000000..2f1183c
--- /dev/null
+++ b/print-ip6.c
@@ -0,0 +1,502 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IPv6 printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip6.h"
+#include "ipproto.h"
+
+/*
+ * If routing headers are presend and valid, set dst to the final destination.
+ * Otherwise, set it to the IPv6 destination.
+ *
+ * This is used for UDP and TCP pseudo-header in the checksum
+ * calculation.
+ */
+static void
+ip6_finddst(netdissect_options *ndo, nd_ipv6 *dst,
+ const struct ip6_hdr *ip6)
+{
+ const u_char *cp;
+ u_int advance;
+ u_int nh;
+ const void *dst_addr;
+ const struct ip6_rthdr *dp;
+ const struct ip6_rthdr0 *dp0;
+ const struct ip6_srh *srh;
+ const u_char *p;
+ int i, len;
+
+ cp = (const u_char *)ip6;
+ advance = sizeof(struct ip6_hdr);
+ nh = GET_U_1(ip6->ip6_nxt);
+ dst_addr = (const void *)ip6->ip6_dst;
+
+ while (cp < ndo->ndo_snapend) {
+ cp += advance;
+
+ switch (nh) {
+
+ case IPPROTO_HOPOPTS:
+ case IPPROTO_DSTOPTS:
+ case IPPROTO_MOBILITY_OLD:
+ case IPPROTO_MOBILITY:
+ /*
+ * These have a header length byte, following
+ * the next header byte, giving the length of
+ * the header, in units of 8 octets, excluding
+ * the first 8 octets.
+ */
+ advance = (GET_U_1(cp + 1) + 1) << 3;
+ nh = GET_U_1(cp);
+ break;
+
+ case IPPROTO_FRAGMENT:
+ /*
+ * The byte following the next header byte is
+ * marked as reserved, and the header is always
+ * the same size.
+ */
+ advance = sizeof(struct ip6_frag);
+ nh = GET_U_1(cp);
+ break;
+
+ case IPPROTO_ROUTING:
+ /*
+ * OK, we found it.
+ */
+ dp = (const struct ip6_rthdr *)cp;
+ ND_TCHECK_SIZE(dp);
+ len = GET_U_1(dp->ip6r_len);
+ switch (GET_U_1(dp->ip6r_type)) {
+
+ case IPV6_RTHDR_TYPE_0:
+ case IPV6_RTHDR_TYPE_2: /* Mobile IPv6 ID-20 */
+ dp0 = (const struct ip6_rthdr0 *)dp;
+ if (len % 2 == 1)
+ goto trunc;
+ len >>= 1;
+ p = (const u_char *) dp0->ip6r0_addr;
+ for (i = 0; i < len; i++) {
+ ND_TCHECK_16(p);
+ dst_addr = (const void *)p;
+ p += 16;
+ }
+ break;
+ case IPV6_RTHDR_TYPE_4:
+ /* IPv6 Segment Routing Header (SRH) */
+ srh = (const struct ip6_srh *)dp;
+ if (len % 2 == 1)
+ goto trunc;
+ p = (const u_char *) srh->srh_segments;
+ /*
+ * The list of segments are encoded in the reverse order.
+ * Accordingly, the final DA is encoded in srh_segments[0]
+ */
+ ND_TCHECK_16(p);
+ dst_addr = (const void *)p;
+ break;
+
+ default:
+ break;
+ }
+
+ /*
+ * Only one routing header to a customer.
+ */
+ goto done;
+
+ case IPPROTO_AH:
+ case IPPROTO_ESP:
+ case IPPROTO_IPCOMP:
+ default:
+ /*
+ * AH and ESP are, in the RFCs that describe them,
+ * described as being "viewed as an end-to-end
+ * payload" "in the IPv6 context, so that they
+ * "should appear after hop-by-hop, routing, and
+ * fragmentation extension headers". We assume
+ * that's the case, and stop as soon as we see
+ * one. (We can't handle an ESP header in
+ * the general case anyway, as its length depends
+ * on the encryption algorithm.)
+ *
+ * IPComp is also "viewed as an end-to-end
+ * payload" "in the IPv6 context".
+ *
+ * All other protocols are assumed to be the final
+ * protocol.
+ */
+ goto done;
+ }
+ }
+
+done:
+trunc:
+ GET_CPY_BYTES(dst, dst_addr, sizeof(nd_ipv6));
+}
+
+/*
+ * Compute a V6-style checksum by building a pseudoheader.
+ */
+uint16_t
+nextproto6_cksum(netdissect_options *ndo,
+ const struct ip6_hdr *ip6, const uint8_t *data,
+ u_int len, u_int covlen, uint8_t next_proto)
+{
+ struct {
+ nd_ipv6 ph_src;
+ nd_ipv6 ph_dst;
+ uint32_t ph_len;
+ uint8_t ph_zero[3];
+ uint8_t ph_nxt;
+ } ph;
+ struct cksum_vec vec[2];
+ u_int nh;
+
+ /* pseudo-header */
+ memset(&ph, 0, sizeof(ph));
+ GET_CPY_BYTES(&ph.ph_src, ip6->ip6_src, sizeof(nd_ipv6));
+ nh = GET_U_1(ip6->ip6_nxt);
+ switch (nh) {
+
+ case IPPROTO_HOPOPTS:
+ case IPPROTO_DSTOPTS:
+ case IPPROTO_MOBILITY_OLD:
+ case IPPROTO_MOBILITY:
+ case IPPROTO_FRAGMENT:
+ case IPPROTO_ROUTING:
+ /*
+ * The next header is either a routing header or a header
+ * after which there might be a routing header, so scan
+ * for a routing header.
+ */
+ ip6_finddst(ndo, &ph.ph_dst, ip6);
+ break;
+
+ default:
+ GET_CPY_BYTES(&ph.ph_dst, ip6->ip6_dst, sizeof(nd_ipv6));
+ break;
+ }
+ ph.ph_len = htonl(len);
+ ph.ph_nxt = next_proto;
+
+ vec[0].ptr = (const uint8_t *)(void *)&ph;
+ vec[0].len = sizeof(ph);
+ vec[1].ptr = data;
+ vec[1].len = covlen;
+
+ return in_cksum(vec, 2);
+}
+
+/*
+ * print an IP6 datagram.
+ */
+void
+ip6_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const struct ip6_hdr *ip6;
+ int advance;
+ u_int len;
+ u_int total_advance;
+ const u_char *cp;
+ uint32_t payload_len;
+ uint8_t ph, nh;
+ int fragmented = 0;
+ u_int flow;
+ int found_extension_header;
+ int found_jumbo;
+ int found_hbh;
+
+ ndo->ndo_protocol = "ip6";
+ ip6 = (const struct ip6_hdr *)bp;
+
+ ND_TCHECK_SIZE(ip6);
+ if (length < sizeof (struct ip6_hdr)) {
+ ND_PRINT("truncated-ip6 %u", length);
+ return;
+ }
+
+ if (!ndo->ndo_eflag)
+ ND_PRINT("IP6 ");
+
+ if (IP6_VERSION(ip6) != 6) {
+ ND_PRINT("version error: %u != 6", IP6_VERSION(ip6));
+ return;
+ }
+
+ payload_len = GET_BE_U_2(ip6->ip6_plen);
+ /*
+ * RFC 1883 says:
+ *
+ * The Payload Length field in the IPv6 header must be set to zero
+ * in every packet that carries the Jumbo Payload option. If a
+ * packet is received with a valid Jumbo Payload option present and
+ * a non-zero IPv6 Payload Length field, an ICMP Parameter Problem
+ * message, Code 0, should be sent to the packet's source, pointing
+ * to the Option Type field of the Jumbo Payload option.
+ *
+ * Later versions of the IPv6 spec don't discuss the Jumbo Payload
+ * option.
+ *
+ * If the payload length is 0, we temporarily just set the total
+ * length to the remaining data in the packet (which, for Ethernet,
+ * could include frame padding, but if it's a Jumbo Payload frame,
+ * it shouldn't even be sendable over Ethernet, so we don't worry
+ * about that), so we can process the extension headers in order
+ * to *find* a Jumbo Payload hop-by-hop option and, when we've
+ * processed all the extension headers, check whether we found
+ * a Jumbo Payload option, and fail if we haven't.
+ */
+ if (payload_len != 0) {
+ len = payload_len + sizeof(struct ip6_hdr);
+ if (length < len)
+ ND_PRINT("truncated-ip6 - %u bytes missing!",
+ len - length);
+ } else
+ len = length + sizeof(struct ip6_hdr);
+
+ ph = 255;
+ nh = GET_U_1(ip6->ip6_nxt);
+ if (ndo->ndo_vflag) {
+ flow = GET_BE_U_4(ip6->ip6_flow);
+ ND_PRINT("(");
+ /* RFC 2460 */
+ if (flow & 0x0ff00000)
+ ND_PRINT("class 0x%02x, ", (flow & 0x0ff00000) >> 20);
+ if (flow & 0x000fffff)
+ ND_PRINT("flowlabel 0x%05x, ", flow & 0x000fffff);
+
+ ND_PRINT("hlim %u, next-header %s (%u) payload length: %u) ",
+ GET_U_1(ip6->ip6_hlim),
+ tok2str(ipproto_values,"unknown",nh),
+ nh,
+ payload_len);
+ }
+
+ /*
+ * Cut off the snapshot length to the end of the IP payload.
+ */
+ if (!nd_push_snaplen(ndo, bp, len)) {
+ (*ndo->ndo_error)(ndo, S_ERR_ND_MEM_ALLOC,
+ "%s: can't push snaplen on buffer stack", __func__);
+ }
+
+ cp = (const u_char *)ip6;
+ advance = sizeof(struct ip6_hdr);
+ total_advance = 0;
+ /* Process extension headers */
+ found_extension_header = 0;
+ found_jumbo = 0;
+ found_hbh = 0;
+ while (cp < ndo->ndo_snapend && advance > 0) {
+ if (len < (u_int)advance)
+ goto trunc;
+ cp += advance;
+ len -= advance;
+ total_advance += advance;
+
+ if (cp == (const u_char *)(ip6 + 1) &&
+ nh != IPPROTO_TCP && nh != IPPROTO_UDP &&
+ nh != IPPROTO_DCCP && nh != IPPROTO_SCTP) {
+ ND_PRINT("%s > %s: ", GET_IP6ADDR_STRING(ip6->ip6_src),
+ GET_IP6ADDR_STRING(ip6->ip6_dst));
+ }
+
+ switch (nh) {
+
+ case IPPROTO_HOPOPTS:
+ /*
+ * The Hop-by-Hop Options header, when present,
+ * must immediately follow the IPv6 header (RFC 8200)
+ */
+ if (found_hbh == 1) {
+ ND_PRINT("[The Hop-by-Hop Options header was already found]");
+ nd_print_invalid(ndo);
+ return;
+ }
+ if (ph != 255) {
+ ND_PRINT("[The Hop-by-Hop Options header don't follow the IPv6 header]");
+ nd_print_invalid(ndo);
+ return;
+ }
+ advance = hbhopt_process(ndo, cp, &found_jumbo, &payload_len);
+ if (payload_len == 0 && found_jumbo == 0) {
+ ND_PRINT("[No valid Jumbo Payload Hop-by-Hop option found]");
+ nd_print_invalid(ndo);
+ return;
+ }
+ if (advance < 0) {
+ nd_pop_packet_info(ndo);
+ return;
+ }
+ found_extension_header = 1;
+ found_hbh = 1;
+ nh = GET_U_1(cp);
+ break;
+
+ case IPPROTO_DSTOPTS:
+ advance = dstopt_process(ndo, cp);
+ if (advance < 0) {
+ nd_pop_packet_info(ndo);
+ return;
+ }
+ found_extension_header = 1;
+ nh = GET_U_1(cp);
+ break;
+
+ case IPPROTO_FRAGMENT:
+ advance = frag6_print(ndo, cp, (const u_char *)ip6);
+ if (advance < 0 || ndo->ndo_snapend <= cp + advance) {
+ nd_pop_packet_info(ndo);
+ return;
+ }
+ found_extension_header = 1;
+ nh = GET_U_1(cp);
+ fragmented = 1;
+ break;
+
+ case IPPROTO_MOBILITY_OLD:
+ case IPPROTO_MOBILITY:
+ /*
+ * XXX - we don't use "advance"; RFC 3775 says that
+ * the next header field in a mobility header
+ * should be IPPROTO_NONE, but speaks of
+ * the possibility of a future extension in
+ * which payload can be piggybacked atop a
+ * mobility header.
+ */
+ advance = mobility_print(ndo, cp, (const u_char *)ip6);
+ if (advance < 0) {
+ nd_pop_packet_info(ndo);
+ return;
+ }
+ found_extension_header = 1;
+ nh = GET_U_1(cp);
+ nd_pop_packet_info(ndo);
+ return;
+
+ case IPPROTO_ROUTING:
+ ND_TCHECK_1(cp);
+ advance = rt6_print(ndo, cp, (const u_char *)ip6);
+ if (advance < 0) {
+ nd_pop_packet_info(ndo);
+ return;
+ }
+ found_extension_header = 1;
+ nh = GET_U_1(cp);
+ break;
+
+ default:
+ /*
+ * Not an extension header; hand off to the
+ * IP protocol demuxer.
+ */
+ if (found_jumbo) {
+ /*
+ * We saw a Jumbo Payload option.
+ * Set the length to the payload length
+ * plus the IPv6 header length, and
+ * change the snapshot length accordingly.
+ *
+ * But make sure it's not shorter than
+ * the total number of bytes we've
+ * processed so far.
+ */
+ len = payload_len + sizeof(struct ip6_hdr);
+ if (len < total_advance)
+ goto trunc;
+ if (length < len)
+ ND_PRINT("truncated-ip6 - %u bytes missing!",
+ len - length);
+ nd_change_snaplen(ndo, bp, len);
+
+ /*
+ * Now subtract the length of the IPv6
+ * header plus extension headers to get
+ * the payload length.
+ */
+ len -= total_advance;
+ } else {
+ /*
+ * We didn't see a Jumbo Payload option;
+ * was the payload length zero?
+ */
+ if (payload_len == 0) {
+ /*
+ * Yes. If we found an extension
+ * header, treat that as a truncated
+ * packet header, as there was
+ * no payload to contain an
+ * extension header.
+ */
+ if (found_extension_header)
+ goto trunc;
+
+ /*
+ * OK, we didn't see any extension
+ * header, but that means we have
+ * no payload, so set the length
+ * to the IPv6 header length,
+ * and change the snapshot length
+ * accordingly.
+ */
+ len = sizeof(struct ip6_hdr);
+ nd_change_snaplen(ndo, bp, len);
+
+ /*
+ * Now subtract the length of
+ * the IPv6 header plus extension
+ * headers (there weren't any, so
+ * that's just the IPv6 header
+ * length) to get the payload length.
+ */
+ len -= total_advance;
+ }
+ }
+ ip_demux_print(ndo, cp, len, 6, fragmented,
+ GET_U_1(ip6->ip6_hlim), nh, bp);
+ nd_pop_packet_info(ndo);
+ return;
+ }
+ ph = nh;
+
+ /* ndo_protocol reassignment after xxx_print() calls */
+ ndo->ndo_protocol = "ip6";
+ }
+
+ nd_pop_packet_info(ndo);
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-ip6opts.c b/print-ip6opts.c
new file mode 100644
index 0000000..a78c76d
--- /dev/null
+++ b/print-ip6opts.c
@@ -0,0 +1,265 @@
+/*
+ * Copyright (C) 1998 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* \summary: IPv6 header option printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip6.h"
+
+static int
+ip6_sopt_print(netdissect_options *ndo, const u_char *bp, int len)
+{
+ int i;
+ int optlen;
+
+ for (i = 0; i < len; i += optlen) {
+ if (GET_U_1(bp + i) == IP6OPT_PAD1)
+ optlen = 1;
+ else {
+ if (i + 1 < len)
+ optlen = GET_U_1(bp + i + 1) + 2;
+ else
+ goto trunc;
+ }
+ if (i + optlen > len)
+ goto trunc;
+
+ switch (GET_U_1(bp + i)) {
+ case IP6OPT_PAD1:
+ ND_PRINT(", pad1");
+ break;
+ case IP6OPT_PADN:
+ if (len - i < IP6OPT_MINLEN) {
+ ND_PRINT(", padn: trunc");
+ goto trunc;
+ }
+ ND_PRINT(", padn");
+ break;
+ default:
+ if (len - i < IP6OPT_MINLEN) {
+ ND_PRINT(", sopt_type %u: trunc)", GET_U_1(bp + i));
+ goto trunc;
+ }
+ ND_PRINT(", sopt_type 0x%02x: len=%u", GET_U_1(bp + i),
+ GET_U_1(bp + i + 1));
+ break;
+ }
+ }
+ return 0;
+
+trunc:
+ return -1;
+}
+
+static int
+ip6_opt_process(netdissect_options *ndo, const u_char *bp, int len,
+ int *found_jumbop, uint32_t *payload_len)
+{
+ int i;
+ int optlen = 0;
+ int found_jumbo = 0;
+ uint32_t jumbolen = 0;
+
+ if (len == 0)
+ return 0;
+ for (i = 0; i < len; i += optlen) {
+ if (GET_U_1(bp + i) == IP6OPT_PAD1)
+ optlen = 1;
+ else {
+ if (i + 1 < len)
+ optlen = GET_U_1(bp + i + 1) + 2;
+ else
+ goto trunc;
+ }
+ if (i + optlen > len)
+ goto trunc;
+
+ switch (GET_U_1(bp + i)) {
+ case IP6OPT_PAD1:
+ if (ndo->ndo_vflag)
+ ND_PRINT("(pad1)");
+ break;
+ case IP6OPT_PADN:
+ if (len - i < IP6OPT_MINLEN) {
+ ND_PRINT("(padn: trunc)");
+ goto trunc;
+ }
+ if (ndo->ndo_vflag)
+ ND_PRINT("(padn)");
+ break;
+ case IP6OPT_ROUTER_ALERT:
+ if (len - i < IP6OPT_RTALERT_LEN) {
+ ND_PRINT("(rtalert: trunc)");
+ goto trunc;
+ }
+ if (GET_U_1(bp + i + 1) != IP6OPT_RTALERT_LEN - 2) {
+ ND_PRINT("(rtalert: invalid len %u)", GET_U_1(bp + i + 1));
+ goto trunc;
+ }
+ if (ndo->ndo_vflag)
+ ND_PRINT("(rtalert: 0x%04x) ", GET_BE_U_2(bp + i + 2));
+ break;
+ case IP6OPT_JUMBO:
+ if (len - i < IP6OPT_JUMBO_LEN) {
+ ND_PRINT("(jumbo: trunc)");
+ goto trunc;
+ }
+ if (GET_U_1(bp + i + 1) != IP6OPT_JUMBO_LEN - 2) {
+ ND_PRINT("(jumbo: invalid len %u)", GET_U_1(bp + i + 1));
+ goto trunc;
+ }
+ jumbolen = GET_BE_U_4(bp + i + 2);
+ if (found_jumbo) {
+ /* More than one Jumbo Payload option */
+ if (ndo->ndo_vflag)
+ ND_PRINT("(jumbo: %u - already seen) ", jumbolen);
+ } else {
+ found_jumbo = 1;
+ if (payload_len == NULL) {
+ /* Not a hop-by-hop option - not valid */
+ if (ndo->ndo_vflag)
+ ND_PRINT("(jumbo: %u - not a hop-by-hop option) ", jumbolen);
+ } else if (*payload_len != 0) {
+ /* Payload length was non-zero - not valid */
+ if (ndo->ndo_vflag)
+ ND_PRINT("(jumbo: %u - payload len != 0) ", jumbolen);
+ } else {
+ /*
+ * This is a hop-by-hop option, and Payload length
+ * was zero in the IPv6 header.
+ */
+ if (jumbolen < 65536) {
+ /* Too short */
+ if (ndo->ndo_vflag)
+ ND_PRINT("(jumbo: %u - < 65536) ", jumbolen);
+ } else {
+ /* OK, this is valid */
+ *found_jumbop = 1;
+ *payload_len = jumbolen;
+ if (ndo->ndo_vflag)
+ ND_PRINT("(jumbo: %u) ", jumbolen);
+ }
+ }
+ }
+ break;
+ case IP6OPT_HOME_ADDRESS:
+ if (len - i < IP6OPT_HOMEADDR_MINLEN) {
+ ND_PRINT("(homeaddr: trunc)");
+ goto trunc;
+ }
+ if (GET_U_1(bp + i + 1) < IP6OPT_HOMEADDR_MINLEN - 2) {
+ ND_PRINT("(homeaddr: invalid len %u)", GET_U_1(bp + i + 1));
+ goto trunc;
+ }
+ if (ndo->ndo_vflag) {
+ ND_PRINT("(homeaddr: %s", GET_IP6ADDR_STRING(bp + i + 2));
+ if (GET_U_1(bp + i + 1) > IP6OPT_HOMEADDR_MINLEN - 2) {
+ if (ip6_sopt_print(ndo, bp + i + IP6OPT_HOMEADDR_MINLEN,
+ (optlen - IP6OPT_HOMEADDR_MINLEN)) == -1)
+ goto trunc;
+ }
+ ND_PRINT(")");
+ }
+ break;
+ default:
+ if (len - i < IP6OPT_MINLEN) {
+ ND_PRINT("(type %u: trunc)", GET_U_1(bp + i));
+ goto trunc;
+ }
+ if (ndo->ndo_vflag)
+ ND_PRINT("(opt_type 0x%02x: len=%u)", GET_U_1(bp + i),
+ GET_U_1(bp + i + 1));
+ break;
+ }
+ }
+ if (ndo->ndo_vflag)
+ ND_PRINT(" ");
+ return 0;
+
+trunc:
+ return -1;
+}
+
+int
+hbhopt_process(netdissect_options *ndo, const u_char *bp, int *found_jumbo,
+ uint32_t *jumbolen)
+{
+ const struct ip6_hbh *dp = (const struct ip6_hbh *)bp;
+ u_int hbhlen = 0;
+
+ ndo->ndo_protocol = "hbhopt";
+ hbhlen = (GET_U_1(dp->ip6h_len) + 1) << 3;
+ ND_TCHECK_LEN(dp, hbhlen);
+ ND_PRINT("HBH ");
+ if (ip6_opt_process(ndo, (const u_char *)dp + sizeof(*dp),
+ hbhlen - sizeof(*dp), found_jumbo, jumbolen) == -1)
+ goto trunc;
+ return hbhlen;
+
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
+
+int
+dstopt_process(netdissect_options *ndo, const u_char *bp)
+{
+ const struct ip6_dest *dp = (const struct ip6_dest *)bp;
+ u_int dstoptlen = 0;
+
+ ndo->ndo_protocol = "dstopt";
+ dstoptlen = (GET_U_1(dp->ip6d_len) + 1) << 3;
+ ND_TCHECK_LEN(dp, dstoptlen);
+ ND_PRINT("DSTOPT ");
+ if (ndo->ndo_vflag) {
+ /*
+ * The Jumbo Payload option is a hop-by-hop option; we don't
+ * honor Jumbo Payload destination options, reporting them
+ * as invalid.
+ */
+ if (ip6_opt_process(ndo, (const u_char *)dp + sizeof(*dp),
+ dstoptlen - sizeof(*dp), NULL, NULL) == -1)
+ goto trunc;
+ }
+
+ return dstoptlen;
+
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
diff --git a/print-ipcomp.c b/print-ipcomp.c
new file mode 100644
index 0000000..c0c184d
--- /dev/null
+++ b/print-ipcomp.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IP Payload Compression Protocol (IPComp) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+struct ipcomp {
+ nd_uint8_t comp_nxt; /* Next Header */
+ nd_uint8_t comp_flags; /* Length of data, in 32bit */
+ nd_uint16_t comp_cpi; /* Compression parameter index */
+};
+
+void
+ipcomp_print(netdissect_options *ndo, const u_char *bp)
+{
+ const struct ipcomp *ipcomp;
+ uint16_t cpi;
+
+ ndo->ndo_protocol = "ipcomp";
+ ipcomp = (const struct ipcomp *)bp;
+ cpi = GET_BE_U_2(ipcomp->comp_cpi);
+
+ ND_PRINT("IPComp(cpi=0x%04x)", cpi);
+
+ /*
+ * XXX - based on the CPI, we could decompress the packet here.
+ * Packet buffer management is a headache (if we decompress,
+ * packet will become larger).
+ *
+ * We would decompress the packet and then call a routine that,
+ * based on ipcomp->comp_nxt, dissects the decompressed data.
+ *
+ * Until we do that, however, we just return -1, so that
+ * the loop that processes "protocol"/"next header" types
+ * stops - there's nothing more it can do with a compressed
+ * payload.
+ */
+}
diff --git a/print-ipfc.c b/print-ipfc.c
new file mode 100644
index 0000000..ab5a813
--- /dev/null
+++ b/print-ipfc.c
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IP over Fibre Channel printer */
+
+/* specification: RFC 2625 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+
+
+struct ipfc_header {
+ nd_byte ipfc_dhost[2+MAC_ADDR_LEN];
+ nd_byte ipfc_shost[2+MAC_ADDR_LEN];
+};
+
+#define IPFC_HDRLEN 16
+
+/* Extract src, dst addresses */
+static void
+extract_ipfc_addrs(const struct ipfc_header *ipfcp, char *ipfcsrc,
+ char *ipfcdst)
+{
+ /*
+ * We assume that, as per RFC 2625, the lower 48 bits of the
+ * source and destination addresses are MAC addresses.
+ */
+ memcpy(ipfcdst, (const char *)&ipfcp->ipfc_dhost[2], MAC_ADDR_LEN);
+ memcpy(ipfcsrc, (const char *)&ipfcp->ipfc_shost[2], MAC_ADDR_LEN);
+}
+
+/*
+ * Print the Network_Header
+ */
+static void
+ipfc_hdr_print(netdissect_options *ndo,
+ const struct ipfc_header *ipfcp _U_, u_int length,
+ const u_char *ipfcsrc, const u_char *ipfcdst)
+{
+ const char *srcname, *dstname;
+
+ srcname = etheraddr_string(ndo, ipfcsrc);
+ dstname = etheraddr_string(ndo, ipfcdst);
+
+ /*
+ * XXX - should we show the upper 16 bits of the addresses?
+ * Do so only if "vflag" is set?
+ * Section 3.3 "FC Port and Node Network Addresses" says that
+ *
+ * In this specification, both the Source and Destination
+ * 4-bit NAA identifiers SHALL be set to binary '0001'
+ * indicating that an IEEE 48-bit MAC address is contained
+ * in the lower 48 bits of the network address fields. The
+ * high order 12 bits in the network address fields SHALL
+ * be set to 0x0000.
+ *
+ * so, for captures following this specification, the upper 16
+ * bits should be 0x1000, followed by a MAC address.
+ */
+ ND_PRINT("%s > %s, length %u: ", srcname, dstname, length);
+}
+
+static u_int
+ipfc_print(netdissect_options *ndo, const u_char *p, u_int length, u_int caplen)
+{
+ const struct ipfc_header *ipfcp = (const struct ipfc_header *)p;
+ nd_mac_addr srcmac, dstmac;
+ struct lladdr_info src, dst;
+ int llc_hdrlen;
+
+ ndo->ndo_protocol = "ipfc";
+ ND_TCHECK_LEN(p, IPFC_HDRLEN);
+ /*
+ * Get the network addresses into a canonical form
+ */
+ extract_ipfc_addrs(ipfcp, (char *)srcmac, (char *)dstmac);
+
+ if (ndo->ndo_eflag)
+ ipfc_hdr_print(ndo, ipfcp, length, srcmac, dstmac);
+
+ src.addr = srcmac;
+ src.addr_string = etheraddr_string;
+ dst.addr = dstmac;
+ dst.addr_string = etheraddr_string;
+
+ /* Skip over Network_Header */
+ length -= IPFC_HDRLEN;
+ p += IPFC_HDRLEN;
+ caplen -= IPFC_HDRLEN;
+
+ /* Try to print the LLC-layer header & higher layers */
+ llc_hdrlen = llc_print(ndo, p, length, caplen, &src, &dst);
+ if (llc_hdrlen < 0) {
+ /*
+ * Some kinds of LLC packet we cannot
+ * handle intelligently
+ */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ llc_hdrlen = -llc_hdrlen;
+ }
+ return (IPFC_HDRLEN + llc_hdrlen);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the Network_Header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+ipfc_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ ndo->ndo_protocol = "ipfc";
+ ndo->ndo_ll_hdr_len += ipfc_print(ndo, p, h->len, h->caplen);
+}
diff --git a/print-ipnet.c b/print-ipnet.c
new file mode 100644
index 0000000..eddcc1d
--- /dev/null
+++ b/print-ipnet.c
@@ -0,0 +1,110 @@
+/* \summary: Solaris DLT_IPNET printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+
+typedef struct ipnet_hdr {
+ nd_uint8_t iph_version;
+ nd_uint8_t iph_family;
+ nd_uint16_t iph_htype;
+ nd_uint32_t iph_pktlen;
+ nd_uint32_t iph_ifindex;
+ nd_uint32_t iph_grifindex;
+ nd_uint32_t iph_zsrc;
+ nd_uint32_t iph_zdst;
+} ipnet_hdr_t;
+
+#define IPH_AF_INET 2 /* Matches Solaris's AF_INET */
+#define IPH_AF_INET6 26 /* Matches Solaris's AF_INET6 */
+
+#ifdef DLT_IPNET
+
+static const struct tok ipnet_values[] = {
+ { IPH_AF_INET, "IPv4" },
+ { IPH_AF_INET6, "IPv6" },
+ { 0, NULL }
+};
+
+static void
+ipnet_hdr_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const ipnet_hdr_t *hdr;
+ hdr = (const ipnet_hdr_t *)bp;
+
+ ND_PRINT("%u > %u", GET_BE_U_4(hdr->iph_zsrc),
+ GET_BE_U_4(hdr->iph_zdst));
+
+ if (!ndo->ndo_qflag) {
+ ND_PRINT(", family %s (%u)",
+ tok2str(ipnet_values, "Unknown",
+ GET_U_1(hdr->iph_family)),
+ GET_U_1(hdr->iph_family));
+ } else {
+ ND_PRINT(", %s",
+ tok2str(ipnet_values,
+ "Unknown Ethertype (0x%04x)",
+ GET_U_1(hdr->iph_family)));
+ }
+
+ ND_PRINT(", length %u: ", length);
+}
+
+static void
+ipnet_print(netdissect_options *ndo, const u_char *p, u_int length, u_int caplen)
+{
+ const ipnet_hdr_t *hdr;
+
+ ND_TCHECK_LEN(p, sizeof(ipnet_hdr_t));
+ ndo->ndo_ll_hdr_len += sizeof(ipnet_hdr_t);
+
+ if (ndo->ndo_eflag)
+ ipnet_hdr_print(ndo, p, length);
+
+ length -= sizeof(ipnet_hdr_t);
+ caplen -= sizeof(ipnet_hdr_t);
+ hdr = (const ipnet_hdr_t *)p;
+ p += sizeof(ipnet_hdr_t);
+
+ switch (GET_U_1(hdr->iph_family)) {
+
+ case IPH_AF_INET:
+ ip_print(ndo, p, length);
+ break;
+
+ case IPH_AF_INET6:
+ ip6_print(ndo, p, length);
+ break;
+
+ default:
+ if (!ndo->ndo_eflag)
+ ipnet_hdr_print(ndo, (const u_char *)hdr,
+ length + sizeof(ipnet_hdr_t));
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ break;
+ }
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+ipnet_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ ndo->ndo_protocol = "ipnet";
+ ipnet_print(ndo, p, h->len, h->caplen);
+}
+#endif /* DLT_IPNET */
diff --git a/print-ipoib.c b/print-ipoib.c
new file mode 100644
index 0000000..3d43123
--- /dev/null
+++ b/print-ipoib.c
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+ * 1997, 2000, 2011, 2012
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+/*
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ */
+
+/* \summary: IP-over-InfiniBand (IPoIB) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+
+extern const struct tok ethertype_values[];
+
+#define IPOIB_HDRLEN 44
+
+static inline void
+ipoib_hdr_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ uint16_t ether_type;
+
+ ether_type = GET_BE_U_2(bp + 40);
+ if (!ndo->ndo_qflag) {
+ ND_PRINT(", ethertype %s (0x%04x)",
+ tok2str(ethertype_values,"Unknown", ether_type),
+ ether_type);
+ } else {
+ ND_PRINT(", ethertype %s",
+ tok2str(ethertype_values,"Unknown", ether_type));
+ }
+
+ ND_PRINT(", length %u: ", length);
+}
+
+/*
+ * Print an InfiniBand frame.
+ * This might be encapsulated within another frame; we might be passed
+ * a pointer to a function that can print header information for that
+ * frame's protocol, and an argument to pass to that function.
+ */
+static void
+ipoib_print(netdissect_options *ndo, const u_char *p, u_int length, u_int caplen,
+ void (*print_encap_header)(const u_char *), const u_char *encap_header_arg)
+{
+ const u_char *orig_hdr = p;
+ u_int orig_length;
+ u_short ether_type;
+
+ if (caplen < IPOIB_HDRLEN) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+
+ if (length < IPOIB_HDRLEN) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += length;
+ return;
+ }
+
+ if (ndo->ndo_eflag) {
+ nd_print_protocol_caps(ndo);
+ if (print_encap_header != NULL)
+ (*print_encap_header)(encap_header_arg);
+ ipoib_hdr_print(ndo, p, length);
+ }
+ orig_length = length;
+
+ ndo->ndo_ll_hdr_len += IPOIB_HDRLEN;
+ length -= IPOIB_HDRLEN;
+ caplen -= IPOIB_HDRLEN;
+ ether_type = GET_BE_U_2(p + 40);
+ p += IPOIB_HDRLEN;
+
+ if (ethertype_print(ndo, ether_type, p, length, caplen, NULL, NULL) == 0) {
+ /* ether_type not known, print raw packet */
+ if (!ndo->ndo_eflag) {
+ if (print_encap_header != NULL)
+ (*print_encap_header)(encap_header_arg);
+ ipoib_hdr_print(ndo, orig_hdr , orig_length);
+ }
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ }
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+ipoib_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ ndo->ndo_protocol = "ipoib";
+ ipoib_print(ndo, p, h->len, h->caplen, NULL, NULL);
+}
diff --git a/print-ipx.c b/print-ipx.c
new file mode 100644
index 0000000..f8c0ce7
--- /dev/null
+++ b/print-ipx.c
@@ -0,0 +1,267 @@
+/*
+ * Copyright (c) 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Contributed by Brad Parker (brad@fcr.com).
+ */
+
+/* \summary: Novell IPX printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+/* well-known sockets */
+#define IPX_SKT_NCP 0x0451
+#define IPX_SKT_SAP 0x0452
+#define IPX_SKT_RIP 0x0453
+#define IPX_SKT_NETBIOS 0x0455
+#define IPX_SKT_DIAGNOSTICS 0x0456
+#define IPX_SKT_NWLINK_DGM 0x0553 /* NWLink datagram, may contain SMB */
+#define IPX_SKT_EIGRP 0x85be /* Cisco EIGRP over IPX */
+
+/* IPX transport header */
+struct ipxHdr {
+ nd_uint16_t cksum; /* Checksum */
+ nd_uint16_t length; /* Length, in bytes, including header */
+ nd_uint8_t tCtl; /* Transport Control (i.e. hop count) */
+ nd_uint8_t pType; /* Packet Type (i.e. level 2 protocol) */
+ nd_uint32_t dstNet; /* destination net */
+ nd_mac_addr dstNode; /* destination node */
+ nd_uint16_t dstSkt; /* destination socket */
+ nd_uint32_t srcNet; /* source net */
+ nd_mac_addr srcNode; /* source node */
+ nd_uint16_t srcSkt; /* source socket */
+};
+
+#define ipxSize 30
+
+static const char *ipxaddr_string(netdissect_options *, uint32_t, const u_char *);
+static void ipx_decode(netdissect_options *, const struct ipxHdr *, const u_char *, u_int);
+static void ipx_sap_print(netdissect_options *, const u_char *, u_int);
+static void ipx_rip_print(netdissect_options *, const u_char *, u_int);
+
+/*
+ * Print IPX datagram packets.
+ */
+void
+ipx_print(netdissect_options *ndo, const u_char *p, u_int length)
+{
+ const struct ipxHdr *ipx = (const struct ipxHdr *)p;
+
+ ndo->ndo_protocol = "ipx";
+ if (!ndo->ndo_eflag)
+ ND_PRINT("IPX ");
+
+ ND_PRINT("%s.%04x > ",
+ ipxaddr_string(ndo, GET_BE_U_4(ipx->srcNet), ipx->srcNode),
+ GET_BE_U_2(ipx->srcSkt));
+
+ ND_PRINT("%s.%04x: ",
+ ipxaddr_string(ndo, GET_BE_U_4(ipx->dstNet), ipx->dstNode),
+ GET_BE_U_2(ipx->dstSkt));
+
+ /* take length from ipx header */
+ length = GET_BE_U_2(ipx->length);
+
+ if (length < ipxSize) {
+ ND_PRINT("[length %u < %u]", length, ipxSize);
+ nd_print_invalid(ndo);
+ return;
+ }
+ ipx_decode(ndo, ipx, p + ipxSize, length - ipxSize);
+}
+
+static const char *
+ipxaddr_string(netdissect_options *ndo, uint32_t net, const u_char *node)
+{
+ static char line[256];
+
+ snprintf(line, sizeof(line), "%08x.%02x:%02x:%02x:%02x:%02x:%02x",
+ net, GET_U_1(node), GET_U_1(node + 1),
+ GET_U_1(node + 2), GET_U_1(node + 3),
+ GET_U_1(node + 4), GET_U_1(node + 5));
+
+ return line;
+}
+
+static void
+ipx_decode(netdissect_options *ndo, const struct ipxHdr *ipx, const u_char *datap, u_int length)
+{
+ u_short dstSkt;
+
+ dstSkt = GET_BE_U_2(ipx->dstSkt);
+ switch (dstSkt) {
+ case IPX_SKT_NCP:
+ ND_PRINT("ipx-ncp %u", length);
+ break;
+ case IPX_SKT_SAP:
+ ipx_sap_print(ndo, datap, length);
+ break;
+ case IPX_SKT_RIP:
+ ipx_rip_print(ndo, datap, length);
+ break;
+ case IPX_SKT_NETBIOS:
+ ND_PRINT("ipx-netbios %u", length);
+#ifdef ENABLE_SMB
+ ipx_netbios_print(ndo, datap, length);
+#endif
+ break;
+ case IPX_SKT_DIAGNOSTICS:
+ ND_PRINT("ipx-diags %u", length);
+ break;
+ case IPX_SKT_NWLINK_DGM:
+ ND_PRINT("ipx-nwlink-dgm %u", length);
+#ifdef ENABLE_SMB
+ ipx_netbios_print(ndo, datap, length);
+#endif
+ break;
+ case IPX_SKT_EIGRP:
+ eigrp_print(ndo, datap, length);
+ break;
+ default:
+ ND_PRINT("ipx-#%x %u", dstSkt, length);
+ break;
+ }
+}
+
+static void
+ipx_sap_print(netdissect_options *ndo, const u_char *ipx, u_int length)
+{
+ int command, i;
+
+ command = GET_BE_U_2(ipx);
+ ND_LCHECK_U(length, 2);
+ ipx += 2;
+ length -= 2;
+
+ switch (command) {
+ case 1:
+ case 3:
+ if (command == 1)
+ ND_PRINT("ipx-sap-req");
+ else
+ ND_PRINT("ipx-sap-nearest-req");
+
+ ND_PRINT(" %s", ipxsap_string(ndo, htons(GET_BE_U_2(ipx))));
+ break;
+
+ case 2:
+ case 4:
+ if (command == 2)
+ ND_PRINT("ipx-sap-resp");
+ else
+ ND_PRINT("ipx-sap-nearest-resp");
+
+ for (i = 0; i < 8 && length != 0; i++) {
+ ND_TCHECK_2(ipx);
+ if (length < 2)
+ goto invalid;
+ ND_PRINT(" %s '", ipxsap_string(ndo, htons(GET_BE_U_2(ipx))));
+ ipx += 2;
+ length -= 2;
+ if (length < 48) {
+ ND_PRINT("'");
+ goto invalid;
+ }
+ nd_printjnp(ndo, ipx, 48);
+ ND_PRINT("'");
+ ipx += 48;
+ length -= 48;
+ /*
+ * 10 bytes of IPX address.
+ */
+ ND_TCHECK_LEN(ipx, 10);
+ if (length < 10)
+ goto invalid;
+ ND_PRINT(" addr %s",
+ ipxaddr_string(ndo, GET_BE_U_4(ipx), ipx + 4));
+ ipx += 10;
+ length -= 10;
+ /*
+ * 2 bytes of socket and 2 bytes of number of intermediate
+ * networks.
+ */
+ ND_TCHECK_4(ipx);
+ if (length < 4)
+ goto invalid;
+ ipx += 4;
+ length -= 4;
+ }
+ break;
+ default:
+ ND_PRINT("ipx-sap-?%x", command);
+ break;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
+
+static void
+ipx_rip_print(netdissect_options *ndo, const u_char *ipx, u_int length)
+{
+ int command, i;
+
+ command = GET_BE_U_2(ipx);
+ ND_LCHECK_U(length, 2);
+ ipx += 2;
+ length -= 2;
+
+ switch (command) {
+ case 1:
+ ND_PRINT("ipx-rip-req");
+ if (length != 0) {
+ if (length < 8)
+ goto invalid;
+ ND_PRINT(" %08x/%u.%u", GET_BE_U_4(ipx),
+ GET_BE_U_2(ipx + 4), GET_BE_U_2(ipx + 6));
+ }
+ break;
+ case 2:
+ ND_PRINT("ipx-rip-resp");
+ for (i = 0; i < 50 && length != 0; i++) {
+ if (length < 8)
+ goto invalid;
+ ND_PRINT(" %08x/%u.%u", GET_BE_U_4(ipx),
+ GET_BE_U_2(ipx + 4), GET_BE_U_2(ipx + 6));
+
+ ipx += 8;
+ length -= 8;
+ }
+ break;
+ default:
+ ND_PRINT("ipx-rip-?%x", command);
+ break;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-isakmp.c b/print-isakmp.c
new file mode 100644
index 0000000..c08bbc0
--- /dev/null
+++ b/print-isakmp.c
@@ -0,0 +1,3141 @@
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+/* \summary: Internet Security Association and Key Management Protocol (ISAKMP) printer */
+
+/* specification: RFC 2407, RFC 2408, RFC 5996 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+/* The functions from print-esp.c used in this file are only defined when both
+ * OpenSSL and evp.h are detected. Employ the same preprocessor device here.
+ */
+#ifndef HAVE_OPENSSL_EVP_H
+#undef HAVE_LIBCRYPTO
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect-ctype.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip.h"
+#include "ip6.h"
+#include "ipproto.h"
+
+typedef nd_byte cookie_t[8];
+typedef nd_byte msgid_t[4];
+
+#define PORT_ISAKMP 500
+
+/* 3.1 ISAKMP Header Format (IKEv1 and IKEv2)
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ ! Initiator !
+ ! Cookie !
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ ! Responder !
+ ! Cookie !
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ ! Next Payload ! MjVer ! MnVer ! Exchange Type ! Flags !
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ ! Message ID !
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ ! Length !
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+*/
+struct isakmp {
+ cookie_t i_ck; /* Initiator Cookie */
+ cookie_t r_ck; /* Responder Cookie */
+ nd_uint8_t np; /* Next Payload Type */
+ nd_uint8_t vers;
+#define ISAKMP_VERS_MAJOR 0xf0
+#define ISAKMP_VERS_MAJOR_SHIFT 4
+#define ISAKMP_VERS_MINOR 0x0f
+#define ISAKMP_VERS_MINOR_SHIFT 0
+ nd_uint8_t etype; /* Exchange Type */
+ nd_uint8_t flags; /* Flags */
+ msgid_t msgid;
+ nd_uint32_t len; /* Length */
+};
+
+/* Next Payload Type */
+#define ISAKMP_NPTYPE_NONE 0 /* NONE*/
+#define ISAKMP_NPTYPE_SA 1 /* Security Association */
+#define ISAKMP_NPTYPE_P 2 /* Proposal */
+#define ISAKMP_NPTYPE_T 3 /* Transform */
+#define ISAKMP_NPTYPE_KE 4 /* Key Exchange */
+#define ISAKMP_NPTYPE_ID 5 /* Identification */
+#define ISAKMP_NPTYPE_CERT 6 /* Certificate */
+#define ISAKMP_NPTYPE_CR 7 /* Certificate Request */
+#define ISAKMP_NPTYPE_HASH 8 /* Hash */
+#define ISAKMP_NPTYPE_SIG 9 /* Signature */
+#define ISAKMP_NPTYPE_NONCE 10 /* Nonce */
+#define ISAKMP_NPTYPE_N 11 /* Notification */
+#define ISAKMP_NPTYPE_D 12 /* Delete */
+#define ISAKMP_NPTYPE_VID 13 /* Vendor ID */
+#define ISAKMP_NPTYPE_v2E 46 /* v2 Encrypted payload */
+
+#define IKEv1_MAJOR_VERSION 1
+#define IKEv1_MINOR_VERSION 0
+
+#define IKEv2_MAJOR_VERSION 2
+#define IKEv2_MINOR_VERSION 0
+
+/* Flags */
+#define ISAKMP_FLAG_E 0x01 /* Encryption Bit */
+#define ISAKMP_FLAG_C 0x02 /* Commit Bit */
+#define ISAKMP_FLAG_extra 0x04
+
+/* IKEv2 */
+#define ISAKMP_FLAG_I (1 << 3) /* (I)nitiator */
+#define ISAKMP_FLAG_V (1 << 4) /* (V)ersion */
+#define ISAKMP_FLAG_R (1 << 5) /* (R)esponse */
+
+
+/* 3.2 Payload Generic Header
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ ! Next Payload ! RESERVED ! Payload Length !
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+*/
+struct isakmp_gen {
+ nd_uint8_t np; /* Next Payload */
+ nd_uint8_t critical; /* bit 7 - critical, rest is RESERVED */
+ nd_uint16_t len; /* Payload Length */
+};
+
+/* 3.3 Data Attributes
+ 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
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ !A! Attribute Type ! AF=0 Attribute Length !
+ !F! ! AF=1 Attribute Value !
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ . AF=0 Attribute Value .
+ . AF=1 Not Transmitted .
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+*/
+struct isakmp_data {
+ nd_uint16_t type; /* defined by DOI-spec, and Attribute Format */
+ nd_uint16_t lorv; /* if f equal 1, Attribute Length */
+ /* if f equal 0, Attribute Value */
+ /* if f equal 1, Attribute Value */
+};
+
+/* 3.4 Security Association Payload */
+ /* MAY NOT be used, because of being defined in ipsec-doi. */
+ /*
+ If the current payload is the last in the message,
+ then the value of the next payload field will be 0.
+ This field MUST NOT contain the
+ values for the Proposal or Transform payloads as they are considered
+ part of the security association negotiation. For example, this
+ field would contain the value "10" (Nonce payload) in the first
+ message of a Base Exchange (see Section 4.4) and the value "0" in the
+ first message of an Identity Protect Exchange (see Section 4.5).
+ */
+struct ikev1_pl_sa {
+ struct isakmp_gen h;
+ nd_uint32_t doi; /* Domain of Interpretation */
+ nd_uint32_t sit; /* Situation */
+};
+
+/* 3.5 Proposal Payload */
+ /*
+ The value of the next payload field MUST only contain the value "2"
+ or "0". If there are additional Proposal payloads in the message,
+ then this field will be 2. If the current Proposal payload is the
+ last within the security association proposal, then this field will
+ be 0.
+ */
+struct ikev1_pl_p {
+ struct isakmp_gen h;
+ nd_uint8_t p_no; /* Proposal # */
+ nd_uint8_t prot_id; /* Protocol */
+ nd_uint8_t spi_size; /* SPI Size */
+ nd_uint8_t num_t; /* Number of Transforms */
+ /* SPI */
+};
+
+/* 3.6 Transform Payload */
+ /*
+ The value of the next payload field MUST only contain the value "3"
+ or "0". If there are additional Transform payloads in the proposal,
+ then this field will be 3. If the current Transform payload is the
+ last within the proposal, then this field will be 0.
+ */
+struct ikev1_pl_t {
+ struct isakmp_gen h;
+ nd_uint8_t t_no; /* Transform # */
+ nd_uint8_t t_id; /* Transform-Id */
+ nd_byte reserved[2]; /* RESERVED2 */
+ /* SA Attributes */
+};
+
+/* 3.7 Key Exchange Payload */
+struct ikev1_pl_ke {
+ struct isakmp_gen h;
+ /* Key Exchange Data */
+};
+
+/* 3.8 Identification Payload */
+ /* MUST NOT to be used, because of being defined in ipsec-doi. */
+struct ikev1_pl_id {
+ struct isakmp_gen h;
+ union {
+ nd_uint8_t id_type; /* ID Type */
+ nd_uint32_t doi_data; /* DOI Specific ID Data */
+ } d;
+ /* Identification Data */
+};
+
+/* 3.9 Certificate Payload */
+struct ikev1_pl_cert {
+ struct isakmp_gen h;
+ nd_uint8_t encode; /* Cert Encoding */
+ nd_uint8_t cert; /* Certificate Data */
+ /*
+ This field indicates the type of
+ certificate or certificate-related information contained in the
+ Certificate Data field.
+ */
+};
+
+/* 3.10 Certificate Request Payload */
+struct ikev1_pl_cr {
+ struct isakmp_gen h;
+ nd_uint8_t num_cert; /* # Cert. Types */
+ /*
+ Certificate Types (variable length)
+ -- Contains a list of the types of certificates requested,
+ sorted in order of preference. Each individual certificate
+ type is 1 octet. This field is NOT requiredo
+ */
+ /* # Certificate Authorities (1 octet) */
+ /* Certificate Authorities (variable length) */
+};
+
+/* 3.11 Hash Payload */
+ /* may not be used, because of having only data. */
+struct ikev1_pl_hash {
+ struct isakmp_gen h;
+ /* Hash Data */
+};
+
+/* 3.12 Signature Payload */
+ /* may not be used, because of having only data. */
+struct ikev1_pl_sig {
+ struct isakmp_gen h;
+ /* Signature Data */
+};
+
+/* 3.13 Nonce Payload */
+ /* may not be used, because of having only data. */
+struct ikev1_pl_nonce {
+ struct isakmp_gen h;
+ /* Nonce Data */
+};
+
+/* 3.14 Notification Payload */
+struct ikev1_pl_n {
+ struct isakmp_gen h;
+ nd_uint32_t doi; /* Domain of Interpretation */
+ nd_uint8_t prot_id; /* Protocol-ID */
+ nd_uint8_t spi_size; /* SPI Size */
+ nd_uint16_t type; /* Notify Message Type */
+ /* SPI */
+ /* Notification Data */
+};
+
+/* 3.14.1 Notify Message Types */
+/* NOTIFY MESSAGES - ERROR TYPES */
+#define ISAKMP_NTYPE_INVALID_PAYLOAD_TYPE 1
+#define ISAKMP_NTYPE_DOI_NOT_SUPPORTED 2
+#define ISAKMP_NTYPE_SITUATION_NOT_SUPPORTED 3
+#define ISAKMP_NTYPE_INVALID_COOKIE 4
+#define ISAKMP_NTYPE_INVALID_MAJOR_VERSION 5
+#define ISAKMP_NTYPE_INVALID_MINOR_VERSION 6
+#define ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE 7
+#define ISAKMP_NTYPE_INVALID_FLAGS 8
+#define ISAKMP_NTYPE_INVALID_MESSAGE_ID 9
+#define ISAKMP_NTYPE_INVALID_PROTOCOL_ID 10
+#define ISAKMP_NTYPE_INVALID_SPI 11
+#define ISAKMP_NTYPE_INVALID_TRANSFORM_ID 12
+#define ISAKMP_NTYPE_ATTRIBUTES_NOT_SUPPORTED 13
+#define ISAKMP_NTYPE_NO_PROPOSAL_CHOSEN 14
+#define ISAKMP_NTYPE_BAD_PROPOSAL_SYNTAX 15
+#define ISAKMP_NTYPE_PAYLOAD_MALFORMED 16
+#define ISAKMP_NTYPE_INVALID_KEY_INFORMATION 17
+#define ISAKMP_NTYPE_INVALID_ID_INFORMATION 18
+#define ISAKMP_NTYPE_INVALID_CERT_ENCODING 19
+#define ISAKMP_NTYPE_INVALID_CERTIFICATE 20
+#define ISAKMP_NTYPE_BAD_CERT_REQUEST_SYNTAX 21
+#define ISAKMP_NTYPE_INVALID_CERT_AUTHORITY 22
+#define ISAKMP_NTYPE_INVALID_HASH_INFORMATION 23
+#define ISAKMP_NTYPE_AUTHENTICATION_FAILED 24
+#define ISAKMP_NTYPE_INVALID_SIGNATURE 25
+#define ISAKMP_NTYPE_ADDRESS_NOTIFICATION 26
+
+/* 3.15 Delete Payload */
+struct ikev1_pl_d {
+ struct isakmp_gen h;
+ nd_uint32_t doi; /* Domain of Interpretation */
+ nd_uint8_t prot_id; /* Protocol-Id */
+ nd_uint8_t spi_size; /* SPI Size */
+ nd_uint16_t num_spi; /* # of SPIs */
+ /* SPI(es) */
+};
+
+/* IKEv2 (RFC4306) */
+
+/* 3.3 Security Association Payload -- generic header */
+/* 3.3.1. Proposal Substructure */
+struct ikev2_p {
+ struct isakmp_gen h;
+ nd_uint8_t p_no; /* Proposal # */
+ nd_uint8_t prot_id; /* Protocol */
+ nd_uint8_t spi_size; /* SPI Size */
+ nd_uint8_t num_t; /* Number of Transforms */
+};
+
+/* 3.3.2. Transform Substructure */
+struct ikev2_t {
+ struct isakmp_gen h;
+ nd_uint8_t t_type; /* Transform Type (ENCR,PRF,INTEG,etc.*/
+ nd_byte res2; /* reserved byte */
+ nd_uint16_t t_id; /* Transform ID */
+};
+
+enum ikev2_t_type {
+ IV2_T_ENCR = 1,
+ IV2_T_PRF = 2,
+ IV2_T_INTEG= 3,
+ IV2_T_DH = 4,
+ IV2_T_ESN = 5
+};
+
+/* 3.4. Key Exchange Payload */
+struct ikev2_ke {
+ struct isakmp_gen h;
+ nd_uint16_t ke_group;
+ nd_uint16_t ke_res1;
+ /* KE data */
+};
+
+
+/* 3.5. Identification Payloads */
+enum ikev2_id_type {
+ ID_IPV4_ADDR=1,
+ ID_FQDN=2,
+ ID_RFC822_ADDR=3,
+ ID_IPV6_ADDR=5,
+ ID_DER_ASN1_DN=9,
+ ID_DER_ASN1_GN=10,
+ ID_KEY_ID=11
+};
+struct ikev2_id {
+ struct isakmp_gen h;
+ nd_uint8_t type; /* ID type */
+ nd_byte res1;
+ nd_byte res2[2];
+ /* SPI */
+ /* Notification Data */
+};
+
+/* 3.10 Notification Payload */
+struct ikev2_n {
+ struct isakmp_gen h;
+ nd_uint8_t prot_id; /* Protocol-ID */
+ nd_uint8_t spi_size; /* SPI Size */
+ nd_uint16_t type; /* Notify Message Type */
+};
+
+enum ikev2_n_type {
+ IV2_NOTIFY_UNSUPPORTED_CRITICAL_PAYLOAD = 1,
+ IV2_NOTIFY_INVALID_IKE_SPI = 4,
+ IV2_NOTIFY_INVALID_MAJOR_VERSION = 5,
+ IV2_NOTIFY_INVALID_SYNTAX = 7,
+ IV2_NOTIFY_INVALID_MESSAGE_ID = 9,
+ IV2_NOTIFY_INVALID_SPI =11,
+ IV2_NOTIFY_NO_PROPOSAL_CHOSEN =14,
+ IV2_NOTIFY_INVALID_KE_PAYLOAD =17,
+ IV2_NOTIFY_AUTHENTICATION_FAILED =24,
+ IV2_NOTIFY_SINGLE_PAIR_REQUIRED =34,
+ IV2_NOTIFY_NO_ADDITIONAL_SAS =35,
+ IV2_NOTIFY_INTERNAL_ADDRESS_FAILURE =36,
+ IV2_NOTIFY_FAILED_CP_REQUIRED =37,
+ IV2_NOTIFY_INVALID_SELECTORS =39,
+ IV2_NOTIFY_INITIAL_CONTACT =16384,
+ IV2_NOTIFY_SET_WINDOW_SIZE =16385,
+ IV2_NOTIFY_ADDITIONAL_TS_POSSIBLE =16386,
+ IV2_NOTIFY_IPCOMP_SUPPORTED =16387,
+ IV2_NOTIFY_NAT_DETECTION_SOURCE_IP =16388,
+ IV2_NOTIFY_NAT_DETECTION_DESTINATION_IP =16389,
+ IV2_NOTIFY_COOKIE =16390,
+ IV2_NOTIFY_USE_TRANSPORT_MODE =16391,
+ IV2_NOTIFY_HTTP_CERT_LOOKUP_SUPPORTED =16392,
+ IV2_NOTIFY_REKEY_SA =16393,
+ IV2_NOTIFY_ESP_TFC_PADDING_NOT_SUPPORTED =16394,
+ IV2_NOTIFY_NON_FIRST_FRAGMENTS_ALSO =16395
+};
+
+struct notify_messages {
+ uint16_t type;
+ char *msg;
+};
+
+/* 3.8 Authentication Payload */
+struct ikev2_auth {
+ struct isakmp_gen h;
+ nd_uint8_t auth_method; /* Protocol-ID */
+ nd_byte reserved[3];
+ /* authentication data */
+};
+
+enum ikev2_auth_type {
+ IV2_RSA_SIG = 1,
+ IV2_SHARED = 2,
+ IV2_DSS_SIG = 3
+};
+
+/* refer to RFC 2409 */
+
+#if 0
+/* isakmp sa structure */
+struct oakley_sa {
+ uint8_t proto_id; /* OAKLEY */
+ vchar_t *spi; /* spi */
+ uint8_t dhgrp; /* DH; group */
+ uint8_t auth_t; /* method of authentication */
+ uint8_t prf_t; /* type of prf */
+ uint8_t hash_t; /* type of hash */
+ uint8_t enc_t; /* type of cipher */
+ uint8_t life_t; /* type of duration of lifetime */
+ uint32_t ldur; /* life duration */
+};
+#endif
+
+/* refer to RFC 2407 */
+
+#define IPSEC_DOI 1
+
+/* 4.2 IPSEC Situation Definition */
+#define IPSECDOI_SIT_IDENTITY_ONLY 0x00000001
+#define IPSECDOI_SIT_SECRECY 0x00000002
+#define IPSECDOI_SIT_INTEGRITY 0x00000004
+
+/* 4.4.1 IPSEC Security Protocol Identifiers */
+ /* 4.4.2 IPSEC ISAKMP Transform Values */
+#define IPSECDOI_PROTO_ISAKMP 1
+#define IPSECDOI_KEY_IKE 1
+
+/* 4.4.1 IPSEC Security Protocol Identifiers */
+#define IPSECDOI_PROTO_IPSEC_AH 2
+ /* 4.4.3 IPSEC AH Transform Values */
+#define IPSECDOI_AH_MD5 2
+#define IPSECDOI_AH_SHA 3
+#define IPSECDOI_AH_DES 4
+#define IPSECDOI_AH_SHA2_256 5
+#define IPSECDOI_AH_SHA2_384 6
+#define IPSECDOI_AH_SHA2_512 7
+
+/* 4.4.1 IPSEC Security Protocol Identifiers */
+#define IPSECDOI_PROTO_IPSEC_ESP 3
+ /* 4.4.4 IPSEC ESP Transform Identifiers */
+#define IPSECDOI_ESP_DES_IV64 1
+#define IPSECDOI_ESP_DES 2
+#define IPSECDOI_ESP_3DES 3
+#define IPSECDOI_ESP_RC5 4
+#define IPSECDOI_ESP_IDEA 5
+#define IPSECDOI_ESP_CAST 6
+#define IPSECDOI_ESP_BLOWFISH 7
+#define IPSECDOI_ESP_3IDEA 8
+#define IPSECDOI_ESP_DES_IV32 9
+#define IPSECDOI_ESP_RC4 10
+#define IPSECDOI_ESP_NULL 11
+#define IPSECDOI_ESP_RIJNDAEL 12
+#define IPSECDOI_ESP_AES 12
+
+/* 4.4.1 IPSEC Security Protocol Identifiers */
+#define IPSECDOI_PROTO_IPCOMP 4
+ /* 4.4.5 IPSEC IPCOMP Transform Identifiers */
+#define IPSECDOI_IPCOMP_OUI 1
+#define IPSECDOI_IPCOMP_DEFLATE 2
+#define IPSECDOI_IPCOMP_LZS 3
+
+/* 4.5 IPSEC Security Association Attributes */
+#define IPSECDOI_ATTR_SA_LTYPE 1 /* B */
+#define IPSECDOI_ATTR_SA_LTYPE_DEFAULT 1
+#define IPSECDOI_ATTR_SA_LTYPE_SEC 1
+#define IPSECDOI_ATTR_SA_LTYPE_KB 2
+#define IPSECDOI_ATTR_SA_LDUR 2 /* V */
+#define IPSECDOI_ATTR_SA_LDUR_DEFAULT 28800 /* 8 hours */
+#define IPSECDOI_ATTR_GRP_DESC 3 /* B */
+#define IPSECDOI_ATTR_ENC_MODE 4 /* B */
+ /* default value: host dependent */
+#define IPSECDOI_ATTR_ENC_MODE_TUNNEL 1
+#define IPSECDOI_ATTR_ENC_MODE_TRNS 2
+#define IPSECDOI_ATTR_AUTH 5 /* B */
+ /* 0 means not to use authentication. */
+#define IPSECDOI_ATTR_AUTH_HMAC_MD5 1
+#define IPSECDOI_ATTR_AUTH_HMAC_SHA1 2
+#define IPSECDOI_ATTR_AUTH_DES_MAC 3
+#define IPSECDOI_ATTR_AUTH_KPDK 4 /*RFC-1826(Key/Pad/Data/Key)*/
+ /*
+ * When negotiating ESP without authentication, the Auth
+ * Algorithm attribute MUST NOT be included in the proposal.
+ * When negotiating ESP without confidentiality, the Auth
+ * Algorithm attribute MUST be included in the proposal and
+ * the ESP transform ID must be ESP_NULL.
+ */
+#define IPSECDOI_ATTR_KEY_LENGTH 6 /* B */
+#define IPSECDOI_ATTR_KEY_ROUNDS 7 /* B */
+#define IPSECDOI_ATTR_COMP_DICT_SIZE 8 /* B */
+#define IPSECDOI_ATTR_COMP_PRIVALG 9 /* V */
+
+/* 4.6.1 Security Association Payload */
+struct ipsecdoi_sa {
+ struct isakmp_gen h;
+ nd_uint32_t doi; /* Domain of Interpretation */
+ nd_uint32_t sit; /* Situation */
+};
+
+struct ipsecdoi_secrecy_h {
+ nd_uint16_t len;
+ nd_uint16_t reserved;
+};
+
+/* 4.6.2.1 Identification Type Values */
+struct ipsecdoi_id {
+ struct isakmp_gen h;
+ nd_uint8_t type; /* ID Type */
+ nd_uint8_t proto_id; /* Protocol ID */
+ nd_uint16_t port; /* Port */
+ /* Identification Data */
+};
+
+#define IPSECDOI_ID_IPV4_ADDR 1
+#define IPSECDOI_ID_FQDN 2
+#define IPSECDOI_ID_USER_FQDN 3
+#define IPSECDOI_ID_IPV4_ADDR_SUBNET 4
+#define IPSECDOI_ID_IPV6_ADDR 5
+#define IPSECDOI_ID_IPV6_ADDR_SUBNET 6
+#define IPSECDOI_ID_IPV4_ADDR_RANGE 7
+#define IPSECDOI_ID_IPV6_ADDR_RANGE 8
+#define IPSECDOI_ID_DER_ASN1_DN 9
+#define IPSECDOI_ID_DER_ASN1_GN 10
+#define IPSECDOI_ID_KEY_ID 11
+
+/* 4.6.3 IPSEC DOI Notify Message Types */
+/* Notify Messages - Status Types */
+#define IPSECDOI_NTYPE_RESPONDER_LIFETIME 24576
+#define IPSECDOI_NTYPE_REPLAY_STATUS 24577
+#define IPSECDOI_NTYPE_INITIAL_CONTACT 24578
+
+#define DECLARE_PRINTER(func) static const u_char *ike##func##_print( \
+ netdissect_options *ndo, u_char tpay, \
+ const struct isakmp_gen *ext, \
+ u_int item_len, \
+ const u_char *end_pointer, \
+ uint32_t phase,\
+ uint32_t doi0, \
+ uint32_t proto0, int depth)
+
+DECLARE_PRINTER(v1_sa);
+DECLARE_PRINTER(v1_p);
+DECLARE_PRINTER(v1_t);
+DECLARE_PRINTER(v1_ke);
+DECLARE_PRINTER(v1_id);
+DECLARE_PRINTER(v1_cert);
+DECLARE_PRINTER(v1_cr);
+DECLARE_PRINTER(v1_sig);
+DECLARE_PRINTER(v1_hash);
+DECLARE_PRINTER(v1_nonce);
+DECLARE_PRINTER(v1_n);
+DECLARE_PRINTER(v1_d);
+DECLARE_PRINTER(v1_vid);
+
+DECLARE_PRINTER(v2_sa);
+DECLARE_PRINTER(v2_ke);
+DECLARE_PRINTER(v2_ID);
+DECLARE_PRINTER(v2_cert);
+DECLARE_PRINTER(v2_cr);
+DECLARE_PRINTER(v2_auth);
+DECLARE_PRINTER(v2_nonce);
+DECLARE_PRINTER(v2_n);
+DECLARE_PRINTER(v2_d);
+DECLARE_PRINTER(v2_vid);
+DECLARE_PRINTER(v2_TS);
+DECLARE_PRINTER(v2_cp);
+DECLARE_PRINTER(v2_eap);
+
+static const u_char *ikev2_e_print(netdissect_options *ndo,
+ const struct isakmp *base,
+ u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len,
+ const u_char *end_pointer,
+ uint32_t phase,
+ uint32_t doi0,
+ uint32_t proto0, int depth);
+
+
+static const u_char *ike_sub0_print(netdissect_options *ndo,u_char, const struct isakmp_gen *,
+ const u_char *, uint32_t, uint32_t, uint32_t, int);
+static const u_char *ikev1_sub_print(netdissect_options *ndo,u_char, const struct isakmp_gen *,
+ const u_char *, uint32_t, uint32_t, uint32_t, int);
+
+static const u_char *ikev2_sub_print(netdissect_options *ndo,
+ const struct isakmp *base,
+ u_char np, const struct isakmp_gen *ext,
+ const u_char *ep, uint32_t phase,
+ uint32_t doi, uint32_t proto,
+ int depth);
+
+
+static char *numstr(u_int);
+
+static void
+ikev1_print(netdissect_options *ndo,
+ const u_char *bp, u_int length,
+ const u_char *bp2, const struct isakmp *base);
+
+#define MAXINITIATORS 20
+static int ninitiator = 0;
+union inaddr_u {
+ nd_ipv4 in4;
+ nd_ipv6 in6;
+};
+static struct {
+ cookie_t initiator;
+ u_int version;
+ union inaddr_u iaddr;
+ union inaddr_u raddr;
+} cookiecache[MAXINITIATORS];
+
+/* protocol id */
+static const char *protoidstr[] = {
+ NULL, "isakmp", "ipsec-ah", "ipsec-esp", "ipcomp",
+};
+
+/* isakmp->np */
+static const char *npstr[] = {
+ "none", "sa", "p", "t", "ke", "id", "cert", "cr", "hash", /* 0 - 8 */
+ "sig", "nonce", "n", "d", "vid", /* 9 - 13 */
+ "pay14", "pay15", "pay16", "pay17", "pay18", /* 14- 18 */
+ "pay19", "pay20", "pay21", "pay22", "pay23", /* 19- 23 */
+ "pay24", "pay25", "pay26", "pay27", "pay28", /* 24- 28 */
+ "pay29", "pay30", "pay31", "pay32", /* 29- 32 */
+ "v2sa", "v2ke", "v2IDi", "v2IDr", "v2cert",/* 33- 37 */
+ "v2cr", "v2auth","v2nonce", "v2n", "v2d", /* 38- 42 */
+ "v2vid", "v2TSi", "v2TSr", "v2e", "v2cp", /* 43- 47 */
+ "v2eap", /* 48 */
+
+};
+
+/* isakmp->np */
+static const u_char *(*npfunc[])(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len,
+ const u_char *end_pointer,
+ uint32_t phase,
+ uint32_t doi0,
+ uint32_t proto0, int depth) = {
+ NULL,
+ ikev1_sa_print,
+ ikev1_p_print,
+ ikev1_t_print,
+ ikev1_ke_print,
+ ikev1_id_print,
+ ikev1_cert_print,
+ ikev1_cr_print,
+ ikev1_hash_print,
+ ikev1_sig_print,
+ ikev1_nonce_print,
+ ikev1_n_print,
+ ikev1_d_print,
+ ikev1_vid_print, /* 13 */
+ NULL, NULL, NULL, NULL, NULL, /* 14- 18 */
+ NULL, NULL, NULL, NULL, NULL, /* 19- 23 */
+ NULL, NULL, NULL, NULL, NULL, /* 24- 28 */
+ NULL, NULL, NULL, NULL, /* 29- 32 */
+ ikev2_sa_print, /* 33 */
+ ikev2_ke_print, /* 34 */
+ ikev2_ID_print, /* 35 */
+ ikev2_ID_print, /* 36 */
+ ikev2_cert_print, /* 37 */
+ ikev2_cr_print, /* 38 */
+ ikev2_auth_print, /* 39 */
+ ikev2_nonce_print, /* 40 */
+ ikev2_n_print, /* 41 */
+ ikev2_d_print, /* 42 */
+ ikev2_vid_print, /* 43 */
+ ikev2_TS_print, /* 44 */
+ ikev2_TS_print, /* 45 */
+ NULL, /* ikev2_e_print,*/ /* 46 - special */
+ ikev2_cp_print, /* 47 */
+ ikev2_eap_print, /* 48 */
+};
+
+/* isakmp->etype */
+static const char *etypestr[] = {
+/* IKEv1 exchange types */
+ "none", "base", "ident", "auth", "agg", "inf", NULL, NULL, /* 0-7 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 8-15 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 16-23 */
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* 24-31 */
+ "oakley-quick", "oakley-newgroup", /* 32-33 */
+/* IKEv2 exchange types */
+ "ikev2_init", "ikev2_auth", "child_sa", "inf2" /* 34-37 */
+};
+
+#define STR_OR_ID(x, tab) \
+ (((x) < sizeof(tab)/sizeof(tab[0]) && tab[(x)]) ? tab[(x)] : numstr(x))
+#define PROTOIDSTR(x) STR_OR_ID(x, protoidstr)
+#define NPSTR(x) STR_OR_ID(x, npstr)
+#define ETYPESTR(x) STR_OR_ID(x, etypestr)
+
+#define CHECKLEN(p, np) \
+ if (ep < (const u_char *)(p)) { \
+ ND_PRINT(" [|%s]", NPSTR(np)); \
+ goto done; \
+ }
+
+
+#define NPFUNC(x) \
+ (((x) < sizeof(npfunc)/sizeof(npfunc[0]) && npfunc[(x)]) \
+ ? npfunc[(x)] : NULL)
+
+static int
+iszero(netdissect_options *ndo, const u_char *p, size_t l)
+{
+ while (l != 0) {
+ if (GET_U_1(p))
+ return 0;
+ p++;
+ l--;
+ }
+ return 1;
+}
+
+/* find cookie from initiator cache */
+static int
+cookie_find(const cookie_t *in)
+{
+ int i;
+
+ for (i = 0; i < MAXINITIATORS; i++) {
+ if (memcmp(in, &cookiecache[i].initiator, sizeof(*in)) == 0)
+ return i;
+ }
+
+ return -1;
+}
+
+/* record initiator */
+static void
+cookie_record(netdissect_options *ndo, const cookie_t *in, const u_char *bp2)
+{
+ int i;
+ const struct ip *ip;
+ const struct ip6_hdr *ip6;
+
+ i = cookie_find(in);
+ if (0 <= i) {
+ ninitiator = (i + 1) % MAXINITIATORS;
+ return;
+ }
+
+ ip = (const struct ip *)bp2;
+ switch (IP_V(ip)) {
+ case 4:
+ cookiecache[ninitiator].version = 4;
+ UNALIGNED_MEMCPY(&cookiecache[ninitiator].iaddr.in4,
+ ip->ip_src, sizeof(nd_ipv4));
+ UNALIGNED_MEMCPY(&cookiecache[ninitiator].raddr.in4,
+ ip->ip_dst, sizeof(nd_ipv4));
+ break;
+ case 6:
+ ip6 = (const struct ip6_hdr *)bp2;
+ cookiecache[ninitiator].version = 6;
+ UNALIGNED_MEMCPY(&cookiecache[ninitiator].iaddr.in6,
+ ip6->ip6_src, sizeof(nd_ipv6));
+ UNALIGNED_MEMCPY(&cookiecache[ninitiator].raddr.in6,
+ ip6->ip6_dst, sizeof(nd_ipv6));
+ break;
+ default:
+ return;
+ }
+ UNALIGNED_MEMCPY(&cookiecache[ninitiator].initiator, in, sizeof(*in));
+ ninitiator = (ninitiator + 1) % MAXINITIATORS;
+}
+
+#define cookie_isinitiator(ndo, x, y) cookie_sidecheck(ndo, (x), (y), 1)
+#define cookie_isresponder(ndo, x, y) cookie_sidecheck(ndo, (x), (y), 0)
+static int
+cookie_sidecheck(netdissect_options *ndo, int i, const u_char *bp2, int initiator)
+{
+ const struct ip *ip;
+ const struct ip6_hdr *ip6;
+
+ ip = (const struct ip *)bp2;
+ switch (IP_V(ip)) {
+ case 4:
+ if (cookiecache[i].version != 4)
+ return 0;
+ if (initiator) {
+ if (UNALIGNED_MEMCMP(ip->ip_src, &cookiecache[i].iaddr.in4, sizeof(nd_ipv4)) == 0)
+ return 1;
+ } else {
+ if (UNALIGNED_MEMCMP(ip->ip_src, &cookiecache[i].raddr.in4, sizeof(nd_ipv4)) == 0)
+ return 1;
+ }
+ break;
+ case 6:
+ if (cookiecache[i].version != 6)
+ return 0;
+ ip6 = (const struct ip6_hdr *)bp2;
+ if (initiator) {
+ if (UNALIGNED_MEMCMP(ip6->ip6_src, &cookiecache[i].iaddr.in6, sizeof(nd_ipv6)) == 0)
+ return 1;
+ } else {
+ if (UNALIGNED_MEMCMP(ip6->ip6_src, &cookiecache[i].raddr.in6, sizeof(nd_ipv6)) == 0)
+ return 1;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+static void
+hexprint(netdissect_options *ndo, const uint8_t *loc, size_t len)
+{
+ const uint8_t *p;
+ size_t i;
+
+ p = loc;
+ for (i = 0; i < len; i++)
+ ND_PRINT("%02x", p[i] & 0xff);
+}
+
+static int
+rawprint(netdissect_options *ndo, const uint8_t *loc, size_t len)
+{
+ ND_TCHECK_LEN(loc, len);
+
+ hexprint(ndo, loc, len);
+ return 1;
+trunc:
+ return 0;
+}
+
+
+/*
+ * returns false if we run out of data buffer
+ */
+static int ike_show_somedata(netdissect_options *ndo,
+ const u_char *cp, const u_char *ep)
+{
+ /* there is too much data, just show some of it */
+ const u_char *end = ep - 20;
+ size_t elen = 20;
+ size_t len = ep - cp;
+ if(len > 10) {
+ len = 10;
+ }
+
+ /* really shouldn't happen because of above */
+ if(end < cp + len) {
+ end = cp+len;
+ elen = ep - end;
+ }
+
+ ND_PRINT(" data=(");
+ if(!rawprint(ndo, (const uint8_t *)(cp), len)) goto trunc;
+ ND_PRINT("...");
+ if(elen) {
+ if(!rawprint(ndo, (const uint8_t *)(end), elen)) goto trunc;
+ }
+ ND_PRINT(")");
+ return 1;
+
+trunc:
+ return 0;
+}
+
+struct attrmap {
+ const char *type;
+ u_int nvalue;
+ const char *value[30]; /*XXX*/
+};
+
+static const u_char *
+ikev1_attrmap_print(netdissect_options *ndo,
+ const u_char *p, const u_char *ep2,
+ const struct attrmap *map, size_t nmap)
+{
+ u_int totlen;
+ uint32_t t, v;
+
+ if (GET_U_1(p) & 0x80)
+ totlen = 4;
+ else {
+ totlen = 4 + GET_BE_U_2(p + 2);
+ }
+ if (ep2 < p + totlen) {
+ ND_PRINT("[|attr]");
+ return ep2 + 1;
+ }
+
+ ND_PRINT("(");
+ t = GET_BE_U_2(p) & 0x7fff;
+ if (map && t < nmap && map[t].type)
+ ND_PRINT("type=%s ", map[t].type);
+ else
+ ND_PRINT("type=#%u ", t);
+ if (GET_U_1(p) & 0x80) {
+ ND_PRINT("value=");
+ v = GET_BE_U_2(p + 2);
+ if (map && t < nmap && v < map[t].nvalue && map[t].value[v])
+ ND_PRINT("%s", map[t].value[v]);
+ else {
+ if (!rawprint(ndo, (const uint8_t *)(p + 2), 2)) {
+ ND_PRINT(")");
+ goto trunc;
+ }
+ }
+ } else {
+ ND_PRINT("len=%u value=", totlen - 4);
+ if (!rawprint(ndo, (const uint8_t *)(p + 4), totlen - 4)) {
+ ND_PRINT(")");
+ goto trunc;
+ }
+ }
+ ND_PRINT(")");
+ return p + totlen;
+
+trunc:
+ return NULL;
+}
+
+static const u_char *
+ikev1_attr_print(netdissect_options *ndo, const u_char *p, const u_char *ep2)
+{
+ u_int totlen;
+ uint32_t t;
+
+ if (GET_U_1(p) & 0x80)
+ totlen = 4;
+ else {
+ totlen = 4 + GET_BE_U_2(p + 2);
+ }
+ if (ep2 < p + totlen) {
+ ND_PRINT("[|attr]");
+ return ep2 + 1;
+ }
+
+ ND_PRINT("(");
+ t = GET_BE_U_2(p) & 0x7fff;
+ ND_PRINT("type=#%u ", t);
+ if (GET_U_1(p) & 0x80) {
+ ND_PRINT("value=");
+ t = GET_U_1(p + 2);
+ if (!rawprint(ndo, (const uint8_t *)(p + 2), 2)) {
+ ND_PRINT(")");
+ goto trunc;
+ }
+ } else {
+ ND_PRINT("len=%u value=", totlen - 4);
+ if (!rawprint(ndo, (const uint8_t *)(p + 4), totlen - 4)) {
+ ND_PRINT(")");
+ goto trunc;
+ }
+ }
+ ND_PRINT(")");
+ return p + totlen;
+
+trunc:
+ return NULL;
+}
+
+static const u_char *
+ikev1_sa_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext,
+ u_int item_len _U_,
+ const u_char *ep, uint32_t phase, uint32_t doi0 _U_,
+ uint32_t proto0, int depth)
+{
+ const struct ikev1_pl_sa *p;
+ uint32_t doi, sit, ident;
+ const u_char *cp, *np;
+ int t;
+
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_SA));
+
+ p = (const struct ikev1_pl_sa *)ext;
+ ND_TCHECK_SIZE(p);
+ doi = GET_BE_U_4(p->doi);
+ sit = GET_BE_U_4(p->sit);
+ if (doi != 1) {
+ ND_PRINT(" doi=%u", doi);
+ ND_PRINT(" situation=%u", sit);
+ return (const u_char *)(p + 1);
+ }
+
+ ND_PRINT(" doi=ipsec");
+ ND_PRINT(" situation=");
+ t = 0;
+ if (sit & 0x01) {
+ ND_PRINT("identity");
+ t++;
+ }
+ if (sit & 0x02) {
+ ND_PRINT("%ssecrecy", t ? "+" : "");
+ t++;
+ }
+ if (sit & 0x04)
+ ND_PRINT("%sintegrity", t ? "+" : "");
+
+ np = (const u_char *)ext + sizeof(struct ikev1_pl_sa);
+ if (sit != 0x01) {
+ ident = GET_BE_U_4(ext + 1);
+ ND_PRINT(" ident=%u", ident);
+ np += sizeof(ident);
+ }
+
+ ext = (const struct isakmp_gen *)np;
+ ND_TCHECK_SIZE(ext);
+
+ cp = ikev1_sub_print(ndo, ISAKMP_NPTYPE_P, ext, ep, phase, doi, proto0,
+ depth);
+
+ return cp;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_SA));
+ return NULL;
+}
+
+static const u_char *
+ikev1_p_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext, u_int item_len _U_,
+ const u_char *ep, uint32_t phase, uint32_t doi0,
+ uint32_t proto0 _U_, int depth)
+{
+ const struct ikev1_pl_p *p;
+ const u_char *cp;
+ uint8_t spi_size;
+
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_P));
+
+ p = (const struct ikev1_pl_p *)ext;
+ ND_TCHECK_SIZE(p);
+ ND_PRINT(" #%u protoid=%s transform=%u",
+ GET_U_1(p->p_no), PROTOIDSTR(GET_U_1(p->prot_id)),
+ GET_U_1(p->num_t));
+ spi_size = GET_U_1(p->spi_size);
+ if (spi_size) {
+ ND_PRINT(" spi=");
+ if (!rawprint(ndo, (const uint8_t *)(p + 1), spi_size))
+ goto trunc;
+ }
+
+ ext = (const struct isakmp_gen *)((const u_char *)(p + 1) + spi_size);
+ ND_TCHECK_SIZE(ext);
+
+ cp = ikev1_sub_print(ndo, ISAKMP_NPTYPE_T, ext, ep, phase, doi0,
+ GET_U_1(p->prot_id), depth);
+
+ return cp;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_P));
+ return NULL;
+}
+
+static const char *ikev1_p_map[] = {
+ NULL, "ike",
+};
+
+static const char *ikev2_t_type_map[]={
+ NULL, "encr", "prf", "integ", "dh", "esn"
+};
+
+static const char *ah_p_map[] = {
+ NULL, "(reserved)", "md5", "sha", "1des",
+ "sha2-256", "sha2-384", "sha2-512",
+};
+
+static const char *prf_p_map[] = {
+ NULL, "hmac-md5", "hmac-sha", "hmac-tiger",
+ "aes128_xcbc"
+};
+
+static const char *integ_p_map[] = {
+ NULL, "hmac-md5", "hmac-sha", "dec-mac",
+ "kpdk-md5", "aes-xcbc"
+};
+
+static const char *esn_p_map[] = {
+ "no-esn", "esn"
+};
+
+static const char *dh_p_map[] = {
+ NULL, "modp768",
+ "modp1024", /* group 2 */
+ "EC2N 2^155", /* group 3 */
+ "EC2N 2^185", /* group 4 */
+ "modp1536", /* group 5 */
+ "iana-grp06", "iana-grp07", /* reserved */
+ "iana-grp08", "iana-grp09",
+ "iana-grp10", "iana-grp11",
+ "iana-grp12", "iana-grp13",
+ "modp2048", /* group 14 */
+ "modp3072", /* group 15 */
+ "modp4096", /* group 16 */
+ "modp6144", /* group 17 */
+ "modp8192", /* group 18 */
+};
+
+static const char *esp_p_map[] = {
+ NULL, "1des-iv64", "1des", "3des", "rc5", "idea", "cast",
+ "blowfish", "3idea", "1des-iv32", "rc4", "null", "aes"
+};
+
+static const char *ipcomp_p_map[] = {
+ NULL, "oui", "deflate", "lzs",
+};
+
+static const struct attrmap ipsec_t_map[] = {
+ { NULL, 0, { NULL } },
+ { "lifetype", 3, { NULL, "sec", "kb", }, },
+ { "life", 0, { NULL } },
+ { "group desc", 18, { NULL, "modp768",
+ "modp1024", /* group 2 */
+ "EC2N 2^155", /* group 3 */
+ "EC2N 2^185", /* group 4 */
+ "modp1536", /* group 5 */
+ "iana-grp06", "iana-grp07", /* reserved */
+ "iana-grp08", "iana-grp09",
+ "iana-grp10", "iana-grp11",
+ "iana-grp12", "iana-grp13",
+ "modp2048", /* group 14 */
+ "modp3072", /* group 15 */
+ "modp4096", /* group 16 */
+ "modp6144", /* group 17 */
+ "modp8192", /* group 18 */
+ }, },
+ { "enc mode", 3, { NULL, "tunnel", "transport", }, },
+ { "auth", 5, { NULL, "hmac-md5", "hmac-sha1", "1des-mac", "keyed", }, },
+ { "keylen", 0, { NULL } },
+ { "rounds", 0, { NULL } },
+ { "dictsize", 0, { NULL } },
+ { "privalg", 0, { NULL } },
+};
+
+static const struct attrmap encr_t_map[] = {
+ { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 0, 1 */
+ { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 2, 3 */
+ { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 4, 5 */
+ { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 6, 7 */
+ { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 8, 9 */
+ { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 10,11*/
+ { NULL, 0, { NULL } }, { NULL, 0, { NULL } }, /* 12,13*/
+ { "keylen", 14, { NULL }},
+};
+
+static const struct attrmap oakley_t_map[] = {
+ { NULL, 0, { NULL } },
+ { "enc", 8, { NULL, "1des", "idea", "blowfish", "rc5",
+ "3des", "cast", "aes", }, },
+ { "hash", 7, { NULL, "md5", "sha1", "tiger",
+ "sha2-256", "sha2-384", "sha2-512", }, },
+ { "auth", 6, { NULL, "preshared", "dss", "rsa sig", "rsa enc",
+ "rsa enc revised", }, },
+ { "group desc", 18, { NULL, "modp768",
+ "modp1024", /* group 2 */
+ "EC2N 2^155", /* group 3 */
+ "EC2N 2^185", /* group 4 */
+ "modp1536", /* group 5 */
+ "iana-grp06", "iana-grp07", /* reserved */
+ "iana-grp08", "iana-grp09",
+ "iana-grp10", "iana-grp11",
+ "iana-grp12", "iana-grp13",
+ "modp2048", /* group 14 */
+ "modp3072", /* group 15 */
+ "modp4096", /* group 16 */
+ "modp6144", /* group 17 */
+ "modp8192", /* group 18 */
+ }, },
+ { "group type", 4, { NULL, "MODP", "ECP", "EC2N", }, },
+ { "group prime", 0, { NULL } },
+ { "group gen1", 0, { NULL } },
+ { "group gen2", 0, { NULL } },
+ { "group curve A", 0, { NULL } },
+ { "group curve B", 0, { NULL } },
+ { "lifetype", 3, { NULL, "sec", "kb", }, },
+ { "lifeduration", 0, { NULL } },
+ { "prf", 0, { NULL } },
+ { "keylen", 0, { NULL } },
+ { "field", 0, { NULL } },
+ { "order", 0, { NULL } },
+};
+
+static const u_char *
+ikev1_t_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext, u_int item_len,
+ const u_char *ep, uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto, int depth _U_)
+{
+ const struct ikev1_pl_t *p;
+ const u_char *cp;
+ const char *idstr;
+ const struct attrmap *map;
+ size_t nmap;
+ const u_char *ep2;
+
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_T));
+
+ p = (const struct ikev1_pl_t *)ext;
+ ND_TCHECK_SIZE(p);
+
+ switch (proto) {
+ case 1:
+ idstr = STR_OR_ID(GET_U_1(p->t_id), ikev1_p_map);
+ map = oakley_t_map;
+ nmap = sizeof(oakley_t_map)/sizeof(oakley_t_map[0]);
+ break;
+ case 2:
+ idstr = STR_OR_ID(GET_U_1(p->t_id), ah_p_map);
+ map = ipsec_t_map;
+ nmap = sizeof(ipsec_t_map)/sizeof(ipsec_t_map[0]);
+ break;
+ case 3:
+ idstr = STR_OR_ID(GET_U_1(p->t_id), esp_p_map);
+ map = ipsec_t_map;
+ nmap = sizeof(ipsec_t_map)/sizeof(ipsec_t_map[0]);
+ break;
+ case 4:
+ idstr = STR_OR_ID(GET_U_1(p->t_id), ipcomp_p_map);
+ map = ipsec_t_map;
+ nmap = sizeof(ipsec_t_map)/sizeof(ipsec_t_map[0]);
+ break;
+ default:
+ idstr = NULL;
+ map = NULL;
+ nmap = 0;
+ break;
+ }
+
+ if (idstr)
+ ND_PRINT(" #%u id=%s ", GET_U_1(p->t_no), idstr);
+ else
+ ND_PRINT(" #%u id=%u ", GET_U_1(p->t_no), GET_U_1(p->t_id));
+ cp = (const u_char *)(p + 1);
+ ep2 = (const u_char *)p + item_len;
+ while (cp < ep && cp < ep2) {
+ if (map && nmap)
+ cp = ikev1_attrmap_print(ndo, cp, ep2, map, nmap);
+ else
+ cp = ikev1_attr_print(ndo, cp, ep2);
+ if (cp == NULL)
+ goto trunc;
+ }
+ if (ep < ep2)
+ ND_PRINT("...");
+ return cp;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_T));
+ return NULL;
+}
+
+static const u_char *
+ikev1_ke_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext, u_int item_len,
+ const u_char *ep _U_, uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_KE));
+
+ ND_TCHECK_SIZE(ext);
+ /*
+ * Our caller has ensured that the length is >= 4.
+ */
+ ND_PRINT(" key len=%u", item_len - 4);
+ if (2 < ndo->ndo_vflag && item_len > 4) {
+ /* Print the entire payload in hex */
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)(ext + 1), item_len - 4))
+ goto trunc;
+ }
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_KE));
+ return NULL;
+}
+
+static const u_char *
+ikev1_id_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext, u_int item_len,
+ const u_char *ep _U_, uint32_t phase, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+#define USE_IPSECDOI_IN_PHASE1 1
+ const struct ikev1_pl_id *p;
+ static const char *idtypestr[] = {
+ "IPv4", "IPv4net", "IPv6", "IPv6net",
+ };
+ static const char *ipsecidtypestr[] = {
+ NULL, "IPv4", "FQDN", "user FQDN", "IPv4net", "IPv6",
+ "IPv6net", "IPv4range", "IPv6range", "ASN1 DN", "ASN1 GN",
+ "keyid",
+ };
+ u_int len;
+ const u_char *data;
+
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_ID));
+
+ p = (const struct ikev1_pl_id *)ext;
+ ND_TCHECK_SIZE(p);
+ if (sizeof(*p) < item_len) {
+ data = (const u_char *)(p + 1);
+ len = item_len - sizeof(*p);
+ } else {
+ data = NULL;
+ len = 0;
+ }
+
+#if 0 /*debug*/
+ ND_PRINT(" [phase=%u doi=%u proto=%u]", phase, doi, proto);
+#endif
+ switch (phase) {
+#ifndef USE_IPSECDOI_IN_PHASE1
+ case 1:
+#endif
+ default:
+ ND_PRINT(" idtype=%s",
+ STR_OR_ID(GET_U_1(p->d.id_type), idtypestr));
+ ND_PRINT(" doi_data=%u",
+ GET_BE_U_4(p->d.doi_data) & 0xffffff);
+ break;
+
+#ifdef USE_IPSECDOI_IN_PHASE1
+ case 1:
+#endif
+ case 2:
+ {
+ const struct ipsecdoi_id *doi_p;
+ const char *p_name;
+ uint8_t type, proto_id;
+
+ doi_p = (const struct ipsecdoi_id *)ext;
+ ND_TCHECK_SIZE(doi_p);
+ type = GET_U_1(doi_p->type);
+ ND_PRINT(" idtype=%s", STR_OR_ID(type, ipsecidtypestr));
+ /* A protocol ID of 0 DOES NOT mean IPPROTO_IP! */
+ proto_id = GET_U_1(doi_p->proto_id);
+ if (!ndo->ndo_nflag && proto_id && (p_name = netdb_protoname(proto_id)) != NULL)
+ ND_PRINT(" protoid=%s", p_name);
+ else
+ ND_PRINT(" protoid=%u", proto_id);
+ ND_PRINT(" port=%u", GET_BE_U_2(doi_p->port));
+ if (!len)
+ break;
+ if (data == NULL)
+ goto trunc;
+ ND_TCHECK_LEN(data, len);
+ switch (type) {
+ case IPSECDOI_ID_IPV4_ADDR:
+ if (len < 4)
+ ND_PRINT(" len=%u [bad: < 4]", len);
+ else
+ ND_PRINT(" len=%u %s", len, GET_IPADDR_STRING(data));
+ len = 0;
+ break;
+ case IPSECDOI_ID_FQDN:
+ case IPSECDOI_ID_USER_FQDN:
+ {
+ u_int i;
+ ND_PRINT(" len=%u ", len);
+ for (i = 0; i < len; i++)
+ fn_print_char(ndo, GET_U_1(data + i));
+ len = 0;
+ break;
+ }
+ case IPSECDOI_ID_IPV4_ADDR_SUBNET:
+ {
+ const u_char *mask;
+ if (len < 8)
+ ND_PRINT(" len=%u [bad: < 8]", len);
+ else {
+ mask = data + sizeof(nd_ipv4);
+ ND_PRINT(" len=%u %s/%u.%u.%u.%u", len,
+ GET_IPADDR_STRING(data),
+ GET_U_1(mask), GET_U_1(mask + 1),
+ GET_U_1(mask + 2),
+ GET_U_1(mask + 3));
+ }
+ len = 0;
+ break;
+ }
+ case IPSECDOI_ID_IPV6_ADDR:
+ if (len < 16)
+ ND_PRINT(" len=%u [bad: < 16]", len);
+ else
+ ND_PRINT(" len=%u %s", len, GET_IP6ADDR_STRING(data));
+ len = 0;
+ break;
+ case IPSECDOI_ID_IPV6_ADDR_SUBNET:
+ {
+ const u_char *mask;
+ if (len < 32)
+ ND_PRINT(" len=%u [bad: < 32]", len);
+ else {
+ mask = (const u_char *)(data + sizeof(nd_ipv6));
+ /*XXX*/
+ ND_PRINT(" len=%u %s/0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", len,
+ GET_IP6ADDR_STRING(data),
+ GET_U_1(mask), GET_U_1(mask + 1),
+ GET_U_1(mask + 2),
+ GET_U_1(mask + 3),
+ GET_U_1(mask + 4),
+ GET_U_1(mask + 5),
+ GET_U_1(mask + 6),
+ GET_U_1(mask + 7),
+ GET_U_1(mask + 8),
+ GET_U_1(mask + 9),
+ GET_U_1(mask + 10),
+ GET_U_1(mask + 11),
+ GET_U_1(mask + 12),
+ GET_U_1(mask + 13),
+ GET_U_1(mask + 14),
+ GET_U_1(mask + 15));
+ }
+ len = 0;
+ break;
+ }
+ case IPSECDOI_ID_IPV4_ADDR_RANGE:
+ if (len < 8)
+ ND_PRINT(" len=%u [bad: < 8]", len);
+ else {
+ ND_PRINT(" len=%u %s-%s", len,
+ GET_IPADDR_STRING(data),
+ GET_IPADDR_STRING(data + sizeof(nd_ipv4)));
+ }
+ len = 0;
+ break;
+ case IPSECDOI_ID_IPV6_ADDR_RANGE:
+ if (len < 32)
+ ND_PRINT(" len=%u [bad: < 32]", len);
+ else {
+ ND_PRINT(" len=%u %s-%s", len,
+ GET_IP6ADDR_STRING(data),
+ GET_IP6ADDR_STRING(data + sizeof(nd_ipv6)));
+ }
+ len = 0;
+ break;
+ case IPSECDOI_ID_DER_ASN1_DN:
+ case IPSECDOI_ID_DER_ASN1_GN:
+ case IPSECDOI_ID_KEY_ID:
+ break;
+ }
+ break;
+ }
+ }
+ if (data && len) {
+ ND_PRINT(" len=%u", len);
+ if (2 < ndo->ndo_vflag) {
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)data, len))
+ goto trunc;
+ }
+ }
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_ID));
+ return NULL;
+}
+
+static const u_char *
+ikev1_cert_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext, u_int item_len,
+ const u_char *ep _U_, uint32_t phase _U_,
+ uint32_t doi0 _U_,
+ uint32_t proto0 _U_, int depth _U_)
+{
+ const struct ikev1_pl_cert *p;
+ static const char *certstr[] = {
+ "none", "pkcs7", "pgp", "dns",
+ "x509sign", "x509ke", "kerberos", "crl",
+ "arl", "spki", "x509attr",
+ };
+
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_CERT));
+
+ p = (const struct ikev1_pl_cert *)ext;
+ ND_TCHECK_SIZE(p);
+ /*
+ * Our caller has ensured that the length is >= 4.
+ */
+ ND_PRINT(" len=%u", item_len - 4);
+ ND_PRINT(" type=%s", STR_OR_ID(GET_U_1(p->encode), certstr));
+ if (2 < ndo->ndo_vflag && 4 < item_len) {
+ /* Print the entire payload in hex */
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)(ext + 1), item_len - 4))
+ goto trunc;
+ }
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_CERT));
+ return NULL;
+}
+
+static const u_char *
+ikev1_cr_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext, u_int item_len,
+ const u_char *ep _U_, uint32_t phase _U_, uint32_t doi0 _U_,
+ uint32_t proto0 _U_, int depth _U_)
+{
+ const struct ikev1_pl_cert *p;
+ static const char *certstr[] = {
+ "none", "pkcs7", "pgp", "dns",
+ "x509sign", "x509ke", "kerberos", "crl",
+ "arl", "spki", "x509attr",
+ };
+
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_CR));
+
+ p = (const struct ikev1_pl_cert *)ext;
+ ND_TCHECK_SIZE(p);
+ /*
+ * Our caller has ensured that the length is >= 4.
+ */
+ ND_PRINT(" len=%u", item_len - 4);
+ ND_PRINT(" type=%s", STR_OR_ID(GET_U_1(p->encode), certstr));
+ if (2 < ndo->ndo_vflag && 4 < item_len) {
+ /* Print the entire payload in hex */
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)(ext + 1), item_len - 4))
+ goto trunc;
+ }
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_CR));
+ return NULL;
+}
+
+static const u_char *
+ikev1_hash_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext, u_int item_len,
+ const u_char *ep _U_, uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_HASH));
+
+ ND_TCHECK_SIZE(ext);
+ /*
+ * Our caller has ensured that the length is >= 4.
+ */
+ ND_PRINT(" len=%u", item_len - 4);
+ if (2 < ndo->ndo_vflag && 4 < item_len) {
+ /* Print the entire payload in hex */
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)(ext + 1), item_len - 4))
+ goto trunc;
+ }
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_HASH));
+ return NULL;
+}
+
+static const u_char *
+ikev1_sig_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext, u_int item_len,
+ const u_char *ep _U_, uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_SIG));
+
+ ND_TCHECK_SIZE(ext);
+ /*
+ * Our caller has ensured that the length is >= 4.
+ */
+ ND_PRINT(" len=%u", item_len - 4);
+ if (2 < ndo->ndo_vflag && 4 < item_len) {
+ /* Print the entire payload in hex */
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)(ext + 1), item_len - 4))
+ goto trunc;
+ }
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_SIG));
+ return NULL;
+}
+
+static const u_char *
+ikev1_nonce_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext,
+ u_int item_len,
+ const u_char *ep,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_NONCE));
+
+ ND_TCHECK_SIZE(ext);
+ /*
+ * Our caller has ensured that the length is >= 4.
+ */
+ ND_PRINT(" n len=%u", item_len - 4);
+ if (item_len > 4) {
+ if (ndo->ndo_vflag > 2) {
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)(ext + 1), item_len - 4))
+ goto trunc;
+ } else if (ndo->ndo_vflag > 1) {
+ ND_PRINT(" ");
+ if (!ike_show_somedata(ndo, (const u_char *)(ext + 1), ep))
+ goto trunc;
+ }
+ }
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_NONCE));
+ return NULL;
+}
+
+static const u_char *
+ikev1_n_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext, u_int item_len,
+ const u_char *ep, uint32_t phase _U_, uint32_t doi0 _U_,
+ uint32_t proto0 _U_, int depth _U_)
+{
+ const struct ikev1_pl_n *p;
+ const u_char *cp;
+ const u_char *ep2;
+ uint32_t doi;
+ uint32_t proto;
+ uint16_t type;
+ uint8_t spi_size;
+ static const char *notify_error_str[] = {
+ NULL, "INVALID-PAYLOAD-TYPE",
+ "DOI-NOT-SUPPORTED", "SITUATION-NOT-SUPPORTED",
+ "INVALID-COOKIE", "INVALID-MAJOR-VERSION",
+ "INVALID-MINOR-VERSION", "INVALID-EXCHANGE-TYPE",
+ "INVALID-FLAGS", "INVALID-MESSAGE-ID",
+ "INVALID-PROTOCOL-ID", "INVALID-SPI",
+ "INVALID-TRANSFORM-ID", "ATTRIBUTES-NOT-SUPPORTED",
+ "NO-PROPOSAL-CHOSEN", "BAD-PROPOSAL-SYNTAX",
+ "PAYLOAD-MALFORMED", "INVALID-KEY-INFORMATION",
+ "INVALID-ID-INFORMATION", "INVALID-CERT-ENCODING",
+ "INVALID-CERTIFICATE", "CERT-TYPE-UNSUPPORTED",
+ "INVALID-CERT-AUTHORITY", "INVALID-HASH-INFORMATION",
+ "AUTHENTICATION-FAILED", "INVALID-SIGNATURE",
+ "ADDRESS-NOTIFICATION", "NOTIFY-SA-LIFETIME",
+ "CERTIFICATE-UNAVAILABLE", "UNSUPPORTED-EXCHANGE-TYPE",
+ "UNEQUAL-PAYLOAD-LENGTHS",
+ };
+ static const char *ipsec_notify_error_str[] = {
+ "RESERVED",
+ };
+ static const char *notify_status_str[] = {
+ "CONNECTED",
+ };
+ static const char *ipsec_notify_status_str[] = {
+ "RESPONDER-LIFETIME", "REPLAY-STATUS",
+ "INITIAL-CONTACT",
+ };
+/* NOTE: these macro must be called with x in proper range */
+
+/* 0 - 8191 */
+#define NOTIFY_ERROR_STR(x) \
+ STR_OR_ID((x), notify_error_str)
+
+/* 8192 - 16383 */
+#define IPSEC_NOTIFY_ERROR_STR(x) \
+ STR_OR_ID((u_int)((x) - 8192), ipsec_notify_error_str)
+
+/* 16384 - 24575 */
+#define NOTIFY_STATUS_STR(x) \
+ STR_OR_ID((u_int)((x) - 16384), notify_status_str)
+
+/* 24576 - 32767 */
+#define IPSEC_NOTIFY_STATUS_STR(x) \
+ STR_OR_ID((u_int)((x) - 24576), ipsec_notify_status_str)
+
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_N));
+
+ p = (const struct ikev1_pl_n *)ext;
+ ND_TCHECK_SIZE(p);
+ doi = GET_BE_U_4(p->doi);
+ proto = GET_U_1(p->prot_id);
+ if (doi != 1) {
+ ND_PRINT(" doi=%u", doi);
+ ND_PRINT(" proto=%u", proto);
+ type = GET_BE_U_2(p->type);
+ if (type < 8192)
+ ND_PRINT(" type=%s", NOTIFY_ERROR_STR(type));
+ else if (type < 16384)
+ ND_PRINT(" type=%s", numstr(type));
+ else if (type < 24576)
+ ND_PRINT(" type=%s", NOTIFY_STATUS_STR(type));
+ else
+ ND_PRINT(" type=%s", numstr(type));
+ spi_size = GET_U_1(p->spi_size);
+ if (spi_size) {
+ ND_PRINT(" spi=");
+ if (!rawprint(ndo, (const uint8_t *)(p + 1), spi_size))
+ goto trunc;
+ }
+ return (const u_char *)(p + 1) + spi_size;
+ }
+
+ ND_PRINT(" doi=ipsec");
+ ND_PRINT(" proto=%s", PROTOIDSTR(proto));
+ type = GET_BE_U_2(p->type);
+ if (type < 8192)
+ ND_PRINT(" type=%s", NOTIFY_ERROR_STR(type));
+ else if (type < 16384)
+ ND_PRINT(" type=%s", IPSEC_NOTIFY_ERROR_STR(type));
+ else if (type < 24576)
+ ND_PRINT(" type=%s", NOTIFY_STATUS_STR(type));
+ else if (type < 32768)
+ ND_PRINT(" type=%s", IPSEC_NOTIFY_STATUS_STR(type));
+ else
+ ND_PRINT(" type=%s", numstr(type));
+ spi_size = GET_U_1(p->spi_size);
+ if (spi_size) {
+ ND_PRINT(" spi=");
+ if (!rawprint(ndo, (const uint8_t *)(p + 1), spi_size))
+ goto trunc;
+ }
+
+ cp = (const u_char *)(p + 1) + spi_size;
+ ep2 = (const u_char *)p + item_len;
+
+ if (cp < ep) {
+ switch (type) {
+ case IPSECDOI_NTYPE_RESPONDER_LIFETIME:
+ {
+ const struct attrmap *map = oakley_t_map;
+ size_t nmap = sizeof(oakley_t_map)/sizeof(oakley_t_map[0]);
+ ND_PRINT(" attrs=(");
+ while (cp < ep && cp < ep2) {
+ cp = ikev1_attrmap_print(ndo, cp, ep2, map, nmap);
+ if (cp == NULL) {
+ ND_PRINT(")");
+ goto trunc;
+ }
+ }
+ ND_PRINT(")");
+ break;
+ }
+ case IPSECDOI_NTYPE_REPLAY_STATUS:
+ ND_PRINT(" status=(");
+ ND_PRINT("replay detection %sabled",
+ GET_BE_U_4(cp) ? "en" : "dis");
+ ND_PRINT(")");
+ break;
+ default:
+ /*
+ * XXX - fill in more types here; see, for example,
+ * draft-ietf-ipsec-notifymsg-04.
+ */
+ if (ndo->ndo_vflag > 3) {
+ ND_PRINT(" data=(");
+ if (!rawprint(ndo, (const uint8_t *)(cp), ep - cp))
+ goto trunc;
+ ND_PRINT(")");
+ } else {
+ if (!ike_show_somedata(ndo, cp, ep))
+ goto trunc;
+ }
+ break;
+ }
+ }
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_N));
+ return NULL;
+}
+
+static const u_char *
+ikev1_d_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext, u_int item_len _U_,
+ const u_char *ep _U_, uint32_t phase _U_, uint32_t doi0 _U_,
+ uint32_t proto0 _U_, int depth _U_)
+{
+ const struct ikev1_pl_d *p;
+ const uint8_t *q;
+ uint32_t doi;
+ uint32_t proto;
+ uint8_t spi_size;
+ uint16_t num_spi;
+ u_int i;
+
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_D));
+
+ p = (const struct ikev1_pl_d *)ext;
+ ND_TCHECK_SIZE(p);
+ doi = GET_BE_U_4(p->doi);
+ proto = GET_U_1(p->prot_id);
+ if (doi != 1) {
+ ND_PRINT(" doi=%u", doi);
+ ND_PRINT(" proto=%u", proto);
+ } else {
+ ND_PRINT(" doi=ipsec");
+ ND_PRINT(" proto=%s", PROTOIDSTR(proto));
+ }
+ spi_size = GET_U_1(p->spi_size);
+ ND_PRINT(" spilen=%u", spi_size);
+ num_spi = GET_BE_U_2(p->num_spi);
+ ND_PRINT(" nspi=%u", num_spi);
+ ND_PRINT(" spi=");
+ q = (const uint8_t *)(p + 1);
+ for (i = 0; i < num_spi; i++) {
+ if (i != 0)
+ ND_PRINT(",");
+ if (!rawprint(ndo, (const uint8_t *)q, spi_size))
+ goto trunc;
+ q += spi_size;
+ }
+ return q;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_D));
+ return NULL;
+}
+
+static const u_char *
+ikev1_vid_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep _U_,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ ND_PRINT("%s:", NPSTR(ISAKMP_NPTYPE_VID));
+
+ ND_TCHECK_SIZE(ext);
+ /*
+ * Our caller has ensured that the length is >= 4.
+ */
+ ND_PRINT(" len=%u", item_len - 4);
+ if (2 < ndo->ndo_vflag && 4 < item_len) {
+ /* Print the entire payload in hex */
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)(ext + 1), item_len - 4))
+ goto trunc;
+ }
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_VID));
+ return NULL;
+}
+
+/************************************************************/
+/* */
+/* IKE v2 - rfc4306 - dissector */
+/* */
+/************************************************************/
+
+static void
+ikev2_pay_print(netdissect_options *ndo, const char *payname, uint8_t critical)
+{
+ ND_PRINT("%s%s:", payname, critical&0x80 ? "[C]" : "");
+}
+
+static const u_char *
+ikev2_gen_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext, u_int item_len)
+{
+ const struct isakmp_gen *p = (const struct isakmp_gen *)ext;
+
+ ND_TCHECK_SIZE(ext);
+ ikev2_pay_print(ndo, NPSTR(tpay), GET_U_1(p->critical));
+
+ /*
+ * Our caller has ensured that the length is >= 4.
+ */
+ ND_PRINT(" len=%u", item_len - 4);
+ if (2 < ndo->ndo_vflag && 4 < item_len) {
+ /* Print the entire payload in hex */
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)(ext + 1), item_len - 4))
+ goto trunc;
+ }
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(tpay));
+ return NULL;
+}
+
+static const u_char *
+ikev2_t_print(netdissect_options *ndo, int tcount,
+ const struct isakmp_gen *ext, u_int item_len,
+ const u_char *ep)
+{
+ const struct ikev2_t *p;
+ uint16_t t_id;
+ uint8_t t_type;
+ const u_char *cp;
+ const char *idstr;
+ const struct attrmap *map;
+ size_t nmap;
+ const u_char *ep2;
+
+ p = (const struct ikev2_t *)ext;
+ ND_TCHECK_SIZE(p);
+ ikev2_pay_print(ndo, NPSTR(ISAKMP_NPTYPE_T), GET_U_1(p->h.critical));
+
+ t_id = GET_BE_U_2(p->t_id);
+
+ map = NULL;
+ nmap = 0;
+
+ t_type = GET_U_1(p->t_type);
+ switch (t_type) {
+ case IV2_T_ENCR:
+ idstr = STR_OR_ID(t_id, esp_p_map);
+ map = encr_t_map;
+ nmap = sizeof(encr_t_map)/sizeof(encr_t_map[0]);
+ break;
+
+ case IV2_T_PRF:
+ idstr = STR_OR_ID(t_id, prf_p_map);
+ break;
+
+ case IV2_T_INTEG:
+ idstr = STR_OR_ID(t_id, integ_p_map);
+ break;
+
+ case IV2_T_DH:
+ idstr = STR_OR_ID(t_id, dh_p_map);
+ break;
+
+ case IV2_T_ESN:
+ idstr = STR_OR_ID(t_id, esn_p_map);
+ break;
+
+ default:
+ idstr = NULL;
+ break;
+ }
+
+ if (idstr)
+ ND_PRINT(" #%u type=%s id=%s ", tcount,
+ STR_OR_ID(t_type, ikev2_t_type_map),
+ idstr);
+ else
+ ND_PRINT(" #%u type=%s id=%u ", tcount,
+ STR_OR_ID(t_type, ikev2_t_type_map),
+ t_id);
+ cp = (const u_char *)(p + 1);
+ ep2 = (const u_char *)p + item_len;
+ while (cp < ep && cp < ep2) {
+ if (map && nmap) {
+ cp = ikev1_attrmap_print(ndo, cp, ep2, map, nmap);
+ } else
+ cp = ikev1_attr_print(ndo, cp, ep2);
+ if (cp == NULL)
+ goto trunc;
+ }
+ if (ep < ep2)
+ ND_PRINT("...");
+ return cp;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_T));
+ return NULL;
+}
+
+static const u_char *
+ikev2_p_print(netdissect_options *ndo, u_char tpay _U_, int pcount _U_,
+ const struct isakmp_gen *ext, u_int oprop_length,
+ const u_char *ep, int depth)
+{
+ const struct ikev2_p *p;
+ u_int prop_length;
+ uint8_t spi_size;
+ const u_char *cp;
+ int i;
+ int tcount;
+ u_char np;
+ u_int item_len;
+
+ p = (const struct ikev2_p *)ext;
+ ND_TCHECK_SIZE(p);
+
+ ikev2_pay_print(ndo, NPSTR(ISAKMP_NPTYPE_P), GET_U_1(p->h.critical));
+
+ /*
+ * ikev2_sa_print() guarantees that this is >= 4.
+ */
+ prop_length = oprop_length - 4;
+ ND_PRINT(" #%u protoid=%s transform=%u len=%u",
+ GET_U_1(p->p_no), PROTOIDSTR(GET_U_1(p->prot_id)),
+ GET_U_1(p->num_t), oprop_length);
+ cp = (const u_char *)(p + 1);
+
+ spi_size = GET_U_1(p->spi_size);
+ if (spi_size) {
+ if (prop_length < spi_size)
+ goto toolong;
+ ND_PRINT(" spi=");
+ if (!rawprint(ndo, (const uint8_t *)cp, spi_size))
+ goto trunc;
+ cp += spi_size;
+ prop_length -= spi_size;
+ }
+
+ /*
+ * Print the transforms.
+ */
+ tcount = 0;
+ for (np = ISAKMP_NPTYPE_T; np != 0; np = GET_U_1(ext->np)) {
+ tcount++;
+ ext = (const struct isakmp_gen *)cp;
+ if (prop_length < sizeof(*ext))
+ goto toolong;
+ ND_TCHECK_SIZE(ext);
+
+ /*
+ * Since we can't have a payload length of less than 4 bytes,
+ * we need to bail out here if the generic header is nonsensical
+ * or truncated, otherwise we could loop forever processing
+ * zero-length items or otherwise misdissect the packet.
+ */
+ item_len = GET_BE_U_2(ext->len);
+ if (item_len <= 4)
+ goto trunc;
+
+ if (prop_length < item_len)
+ goto toolong;
+ ND_TCHECK_LEN(cp, item_len);
+
+ depth++;
+ ND_PRINT("\n");
+ for (i = 0; i < depth; i++)
+ ND_PRINT(" ");
+ ND_PRINT("(");
+ if (np == ISAKMP_NPTYPE_T) {
+ cp = ikev2_t_print(ndo, tcount, ext, item_len, ep);
+ if (cp == NULL) {
+ /* error, already reported */
+ return NULL;
+ }
+ } else {
+ ND_PRINT("%s", NPSTR(np));
+ cp += item_len;
+ }
+ ND_PRINT(")");
+ depth--;
+ prop_length -= item_len;
+ }
+ return cp;
+toolong:
+ /*
+ * Skip the rest of the proposal.
+ */
+ cp += prop_length;
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_P));
+ return cp;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_P));
+ return NULL;
+}
+
+static const u_char *
+ikev2_sa_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext1,
+ u_int osa_length, const u_char *ep,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth)
+{
+ const struct isakmp_gen *ext;
+ u_int sa_length;
+ const u_char *cp;
+ int i;
+ int pcount;
+ u_char np;
+ u_int item_len;
+
+ ND_TCHECK_SIZE(ext1);
+ ikev2_pay_print(ndo, "sa", GET_U_1(ext1->critical));
+
+ /*
+ * ikev2_sub0_print() guarantees that this is >= 4.
+ */
+ osa_length= GET_BE_U_2(ext1->len);
+ sa_length = osa_length - 4;
+ ND_PRINT(" len=%u", sa_length);
+
+ /*
+ * Print the payloads.
+ */
+ cp = (const u_char *)(ext1 + 1);
+ pcount = 0;
+ for (np = ISAKMP_NPTYPE_P; np != 0; np = GET_U_1(ext->np)) {
+ pcount++;
+ ext = (const struct isakmp_gen *)cp;
+ if (sa_length < sizeof(*ext))
+ goto toolong;
+ ND_TCHECK_SIZE(ext);
+
+ /*
+ * Since we can't have a payload length of less than 4 bytes,
+ * we need to bail out here if the generic header is nonsensical
+ * or truncated, otherwise we could loop forever processing
+ * zero-length items or otherwise misdissect the packet.
+ */
+ item_len = GET_BE_U_2(ext->len);
+ if (item_len <= 4)
+ goto trunc;
+
+ if (sa_length < item_len)
+ goto toolong;
+ ND_TCHECK_LEN(cp, item_len);
+
+ depth++;
+ ND_PRINT("\n");
+ for (i = 0; i < depth; i++)
+ ND_PRINT(" ");
+ ND_PRINT("(");
+ if (np == ISAKMP_NPTYPE_P) {
+ cp = ikev2_p_print(ndo, np, pcount, ext, item_len,
+ ep, depth);
+ if (cp == NULL) {
+ /* error, already reported */
+ return NULL;
+ }
+ } else {
+ ND_PRINT("%s", NPSTR(np));
+ cp += item_len;
+ }
+ ND_PRINT(")");
+ depth--;
+ sa_length -= item_len;
+ }
+ return cp;
+toolong:
+ /*
+ * Skip the rest of the SA.
+ */
+ cp += sa_length;
+ ND_PRINT(" [|%s]", NPSTR(tpay));
+ return cp;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(tpay));
+ return NULL;
+}
+
+static const u_char *
+ikev2_ke_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep _U_,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ const struct ikev2_ke *k;
+
+ k = (const struct ikev2_ke *)ext;
+ ND_TCHECK_SIZE(k);
+ ikev2_pay_print(ndo, NPSTR(tpay), GET_U_1(k->h.critical));
+
+ if (item_len < 8) {
+ ND_PRINT(" len=%u < 8", item_len);
+ return (const u_char *)ext + item_len;
+ }
+ ND_PRINT(" len=%u group=%s", item_len - 8,
+ STR_OR_ID(GET_BE_U_2(k->ke_group), dh_p_map));
+
+ if (2 < ndo->ndo_vflag && 8 < item_len) {
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)(k + 1), item_len - 8))
+ goto trunc;
+ }
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(tpay));
+ return NULL;
+}
+
+static const u_char *
+ikev2_ID_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep _U_,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ const struct ikev2_id *idp;
+ u_int idtype_len, i;
+ unsigned int dumpascii, dumphex;
+ const unsigned char *typedata;
+
+ idp = (const struct ikev2_id *)ext;
+ ND_TCHECK_SIZE(idp);
+ ikev2_pay_print(ndo, NPSTR(tpay), GET_U_1(idp->h.critical));
+
+ /*
+ * Our caller has ensured that the length is >= 4.
+ */
+ ND_PRINT(" len=%u", item_len - 4);
+ if (2 < ndo->ndo_vflag && 4 < item_len) {
+ /* Print the entire payload in hex */
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)(ext + 1), item_len - 4))
+ goto trunc;
+ }
+
+ idtype_len =item_len - sizeof(struct ikev2_id);
+ dumpascii = 0;
+ dumphex = 0;
+ typedata = (const unsigned char *)(ext)+sizeof(struct ikev2_id);
+
+ switch(GET_U_1(idp->type)) {
+ case ID_IPV4_ADDR:
+ ND_PRINT(" ipv4:");
+ dumphex=1;
+ break;
+ case ID_FQDN:
+ ND_PRINT(" fqdn:");
+ dumpascii=1;
+ break;
+ case ID_RFC822_ADDR:
+ ND_PRINT(" rfc822:");
+ dumpascii=1;
+ break;
+ case ID_IPV6_ADDR:
+ ND_PRINT(" ipv6:");
+ dumphex=1;
+ break;
+ case ID_DER_ASN1_DN:
+ ND_PRINT(" dn:");
+ dumphex=1;
+ break;
+ case ID_DER_ASN1_GN:
+ ND_PRINT(" gn:");
+ dumphex=1;
+ break;
+ case ID_KEY_ID:
+ ND_PRINT(" keyid:");
+ dumphex=1;
+ break;
+ }
+
+ if(dumpascii) {
+ ND_TCHECK_LEN(typedata, idtype_len);
+ for(i=0; i<idtype_len; i++) {
+ if(ND_ASCII_ISPRINT(GET_U_1(typedata + i))) {
+ ND_PRINT("%c", GET_U_1(typedata + i));
+ } else {
+ ND_PRINT(".");
+ }
+ }
+ }
+ if(dumphex) {
+ if (!rawprint(ndo, (const uint8_t *)typedata, idtype_len))
+ goto trunc;
+ }
+
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(tpay));
+ return NULL;
+}
+
+static const u_char *
+ikev2_cert_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep _U_,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ return ikev2_gen_print(ndo, tpay, ext, item_len);
+}
+
+static const u_char *
+ikev2_cr_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep _U_,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ return ikev2_gen_print(ndo, tpay, ext, item_len);
+}
+
+static const u_char *
+ikev2_auth_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ const struct ikev2_auth *p;
+ const char *v2_auth[]={ "invalid", "rsasig",
+ "shared-secret", "dsssig" };
+ const u_char *authdata = (const u_char *)ext + sizeof(struct ikev2_auth);
+
+ ND_TCHECK_LEN(ext, sizeof(struct ikev2_auth));
+ p = (const struct ikev2_auth *)ext;
+ ikev2_pay_print(ndo, NPSTR(tpay), GET_U_1(p->h.critical));
+
+ /*
+ * Our caller has ensured that the length is >= 4.
+ */
+ ND_PRINT(" len=%u method=%s", item_len-4,
+ STR_OR_ID(GET_U_1(p->auth_method), v2_auth));
+ if (item_len > 4) {
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT(" authdata=(");
+ if (!rawprint(ndo, (const uint8_t *)authdata, item_len - sizeof(struct ikev2_auth)))
+ goto trunc;
+ ND_PRINT(") ");
+ } else if (ndo->ndo_vflag) {
+ if (!ike_show_somedata(ndo, authdata, ep))
+ goto trunc;
+ }
+ }
+
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(tpay));
+ return NULL;
+}
+
+static const u_char *
+ikev2_nonce_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ ND_TCHECK_SIZE(ext);
+ ikev2_pay_print(ndo, "nonce", GET_U_1(ext->critical));
+
+ /*
+ * Our caller has ensured that the length is >= 4.
+ */
+ ND_PRINT(" len=%u", item_len - 4);
+ if (1 < ndo->ndo_vflag && 4 < item_len) {
+ ND_PRINT(" nonce=(");
+ if (!rawprint(ndo, (const uint8_t *)(ext + 1), item_len - 4))
+ goto trunc;
+ ND_PRINT(") ");
+ } else if(ndo->ndo_vflag && 4 < item_len) {
+ if(!ike_show_somedata(ndo, (const u_char *)(ext+1), ep)) goto trunc;
+ }
+
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(tpay));
+ return NULL;
+}
+
+/* notify payloads */
+static const u_char *
+ikev2_n_print(netdissect_options *ndo, u_char tpay _U_,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ const struct ikev2_n *p;
+ uint16_t type;
+ uint8_t spi_size;
+ const u_char *cp;
+ u_char showspi, showsomedata;
+ const char *notify_name;
+
+ p = (const struct ikev2_n *)ext;
+ ND_TCHECK_SIZE(p);
+ ikev2_pay_print(ndo, NPSTR(ISAKMP_NPTYPE_N), GET_U_1(p->h.critical));
+
+ showspi = 1;
+ showsomedata=0;
+ notify_name=NULL;
+
+ ND_PRINT(" prot_id=%s", PROTOIDSTR(GET_U_1(p->prot_id)));
+
+ type = GET_BE_U_2(p->type);
+
+ /* notify space is annoying sparse */
+ switch(type) {
+ case IV2_NOTIFY_UNSUPPORTED_CRITICAL_PAYLOAD:
+ notify_name = "unsupported_critical_payload";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_INVALID_IKE_SPI:
+ notify_name = "invalid_ike_spi";
+ showspi = 1;
+ break;
+
+ case IV2_NOTIFY_INVALID_MAJOR_VERSION:
+ notify_name = "invalid_major_version";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_INVALID_SYNTAX:
+ notify_name = "invalid_syntax";
+ showspi = 1;
+ break;
+
+ case IV2_NOTIFY_INVALID_MESSAGE_ID:
+ notify_name = "invalid_message_id";
+ showspi = 1;
+ break;
+
+ case IV2_NOTIFY_INVALID_SPI:
+ notify_name = "invalid_spi";
+ showspi = 1;
+ break;
+
+ case IV2_NOTIFY_NO_PROPOSAL_CHOSEN:
+ notify_name = "no_protocol_chosen";
+ showspi = 1;
+ break;
+
+ case IV2_NOTIFY_INVALID_KE_PAYLOAD:
+ notify_name = "invalid_ke_payload";
+ showspi = 1;
+ break;
+
+ case IV2_NOTIFY_AUTHENTICATION_FAILED:
+ notify_name = "authentication_failed";
+ showspi = 1;
+ break;
+
+ case IV2_NOTIFY_SINGLE_PAIR_REQUIRED:
+ notify_name = "single_pair_required";
+ showspi = 1;
+ break;
+
+ case IV2_NOTIFY_NO_ADDITIONAL_SAS:
+ notify_name = "no_additional_sas";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_INTERNAL_ADDRESS_FAILURE:
+ notify_name = "internal_address_failure";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_FAILED_CP_REQUIRED:
+ notify_name = "failed:cp_required";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_INVALID_SELECTORS:
+ notify_name = "invalid_selectors";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_INITIAL_CONTACT:
+ notify_name = "initial_contact";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_SET_WINDOW_SIZE:
+ notify_name = "set_window_size";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_ADDITIONAL_TS_POSSIBLE:
+ notify_name = "additional_ts_possible";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_IPCOMP_SUPPORTED:
+ notify_name = "ipcomp_supported";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_NAT_DETECTION_SOURCE_IP:
+ notify_name = "nat_detection_source_ip";
+ showspi = 1;
+ break;
+
+ case IV2_NOTIFY_NAT_DETECTION_DESTINATION_IP:
+ notify_name = "nat_detection_destination_ip";
+ showspi = 1;
+ break;
+
+ case IV2_NOTIFY_COOKIE:
+ notify_name = "cookie";
+ showspi = 1;
+ showsomedata= 1;
+ break;
+
+ case IV2_NOTIFY_USE_TRANSPORT_MODE:
+ notify_name = "use_transport_mode";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_HTTP_CERT_LOOKUP_SUPPORTED:
+ notify_name = "http_cert_lookup_supported";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_REKEY_SA:
+ notify_name = "rekey_sa";
+ showspi = 1;
+ break;
+
+ case IV2_NOTIFY_ESP_TFC_PADDING_NOT_SUPPORTED:
+ notify_name = "tfc_padding_not_supported";
+ showspi = 0;
+ break;
+
+ case IV2_NOTIFY_NON_FIRST_FRAGMENTS_ALSO:
+ notify_name = "non_first_fragment_also";
+ showspi = 0;
+ break;
+
+ default:
+ if (type < 8192) {
+ notify_name="error";
+ } else if(type < 16384) {
+ notify_name="private-error";
+ } else if(type < 40960) {
+ notify_name="status";
+ } else {
+ notify_name="private-status";
+ }
+ }
+
+ if(notify_name) {
+ ND_PRINT(" type=%u(%s)", type, notify_name);
+ }
+
+
+ spi_size = GET_U_1(p->spi_size);
+ if (showspi && spi_size) {
+ ND_PRINT(" spi=");
+ if (!rawprint(ndo, (const uint8_t *)(p + 1), spi_size))
+ goto trunc;
+ }
+
+ cp = (const u_char *)(p + 1) + spi_size;
+
+ if (cp < ep) {
+ if (ndo->ndo_vflag > 3 || (showsomedata && ep-cp < 30)) {
+ ND_PRINT(" data=(");
+ if (!rawprint(ndo, (const uint8_t *)(cp), ep - cp))
+ goto trunc;
+
+ ND_PRINT(")");
+ } else if (showsomedata) {
+ if (!ike_show_somedata(ndo, cp, ep))
+ goto trunc;
+ }
+ }
+
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(ISAKMP_NPTYPE_N));
+ return NULL;
+}
+
+static const u_char *
+ikev2_d_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep _U_,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ return ikev2_gen_print(ndo, tpay, ext, item_len);
+}
+
+static const u_char *
+ikev2_vid_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep _U_,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ const u_char *vid;
+ u_int i, len;
+
+ ND_TCHECK_SIZE(ext);
+ ikev2_pay_print(ndo, NPSTR(tpay), GET_U_1(ext->critical));
+
+ /*
+ * Our caller has ensured that the length is >= 4.
+ */
+ ND_PRINT(" len=%u vid=", item_len - 4);
+
+ vid = (const u_char *)(ext+1);
+ len = item_len - 4;
+ ND_TCHECK_LEN(vid, len);
+ for(i=0; i<len; i++) {
+ if(ND_ASCII_ISPRINT(GET_U_1(vid + i)))
+ ND_PRINT("%c", GET_U_1(vid + i));
+ else ND_PRINT(".");
+ }
+ if (2 < ndo->ndo_vflag && 4 < len) {
+ /* Print the entire payload in hex */
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)(ext + 1), item_len - 4))
+ goto trunc;
+ }
+ return (const u_char *)ext + item_len;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(tpay));
+ return NULL;
+}
+
+static const u_char *
+ikev2_TS_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep _U_,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ return ikev2_gen_print(ndo, tpay, ext, item_len);
+}
+
+static const u_char *
+ikev2_e_print(netdissect_options *ndo,
+#ifndef HAVE_LIBCRYPTO
+ _U_
+#endif
+ const struct isakmp *base,
+ u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep _U_,
+#ifndef HAVE_LIBCRYPTO
+ _U_
+#endif
+ uint32_t phase,
+#ifndef HAVE_LIBCRYPTO
+ _U_
+#endif
+ uint32_t doi,
+#ifndef HAVE_LIBCRYPTO
+ _U_
+#endif
+ uint32_t proto,
+#ifndef HAVE_LIBCRYPTO
+ _U_
+#endif
+ int depth)
+{
+ const u_char *dat;
+ u_int dlen;
+#ifdef HAVE_LIBCRYPTO
+ uint8_t np;
+#endif
+
+ ND_TCHECK_SIZE(ext);
+ ikev2_pay_print(ndo, NPSTR(tpay), GET_U_1(ext->critical));
+
+ dlen = item_len-4;
+
+ ND_PRINT(" len=%u", dlen);
+ if (2 < ndo->ndo_vflag && 4 < dlen) {
+ ND_PRINT(" ");
+ if (!rawprint(ndo, (const uint8_t *)(ext + 1), dlen))
+ goto trunc;
+ }
+
+ dat = (const u_char *)(ext+1);
+ ND_TCHECK_LEN(dat, dlen);
+
+#ifdef HAVE_LIBCRYPTO
+ np = GET_U_1(ext->np);
+
+ /* try to decrypt it! */
+ if(esp_decrypt_buffer_by_ikev2_print(ndo,
+ GET_U_1(base->flags) & ISAKMP_FLAG_I,
+ base->i_ck, base->r_ck,
+ dat, dat+dlen)) {
+
+ ext = (const struct isakmp_gen *)ndo->ndo_packetp;
+
+ /* got it decrypted, print stuff inside. */
+ ikev2_sub_print(ndo, base, np, ext,
+ ndo->ndo_snapend, phase, doi, proto, depth+1);
+
+ /*
+ * esp_decrypt_buffer_by_ikev2_print pushed information
+ * on the buffer stack; we're done with the buffer, so
+ * pop it (which frees the buffer)
+ */
+ nd_pop_packet_info(ndo);
+ }
+#endif
+
+
+ /* always return NULL, because E must be at end, and NP refers
+ * to what was inside.
+ */
+ return NULL;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(tpay));
+ return NULL;
+}
+
+static const u_char *
+ikev2_cp_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep _U_,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ return ikev2_gen_print(ndo, tpay, ext, item_len);
+}
+
+static const u_char *
+ikev2_eap_print(netdissect_options *ndo, u_char tpay,
+ const struct isakmp_gen *ext,
+ u_int item_len, const u_char *ep _U_,
+ uint32_t phase _U_, uint32_t doi _U_,
+ uint32_t proto _U_, int depth _U_)
+{
+ return ikev2_gen_print(ndo, tpay, ext, item_len);
+}
+
+static const u_char *
+ike_sub0_print(netdissect_options *ndo,
+ u_char np, const struct isakmp_gen *ext, const u_char *ep,
+
+ uint32_t phase, uint32_t doi, uint32_t proto, int depth)
+{
+ const u_char *cp;
+ u_int item_len;
+
+ cp = (const u_char *)ext;
+ ND_TCHECK_SIZE(ext);
+
+ /*
+ * Since we can't have a payload length of less than 4 bytes,
+ * we need to bail out here if the generic header is nonsensical
+ * or truncated, otherwise we could loop forever processing
+ * zero-length items or otherwise misdissect the packet.
+ */
+ item_len = GET_BE_U_2(ext->len);
+ if (item_len <= 4)
+ return NULL;
+
+ if (NPFUNC(np)) {
+ /*
+ * XXX - what if item_len is too short, or too long,
+ * for this payload type?
+ */
+ cp = (*npfunc[np])(ndo, np, ext, item_len, ep, phase, doi, proto, depth);
+ } else {
+ ND_PRINT("%s", NPSTR(np));
+ cp += item_len;
+ }
+
+ return cp;
+trunc:
+ nd_print_trunc(ndo);
+ return NULL;
+}
+
+static const u_char *
+ikev1_sub_print(netdissect_options *ndo,
+ u_char np, const struct isakmp_gen *ext, const u_char *ep,
+ uint32_t phase, uint32_t doi, uint32_t proto, int depth)
+{
+ const u_char *cp;
+ int i;
+ u_int item_len;
+
+ cp = (const u_char *)ext;
+
+ while (np) {
+ ND_TCHECK_SIZE(ext);
+
+ item_len = GET_BE_U_2(ext->len);
+ ND_TCHECK_LEN(ext, item_len);
+
+ depth++;
+ ND_PRINT("\n");
+ for (i = 0; i < depth; i++)
+ ND_PRINT(" ");
+ ND_PRINT("(");
+ cp = ike_sub0_print(ndo, np, ext, ep, phase, doi, proto, depth);
+ ND_PRINT(")");
+ depth--;
+
+ if (cp == NULL) {
+ /* Zero-length subitem */
+ return NULL;
+ }
+
+ np = GET_U_1(ext->np);
+ ext = (const struct isakmp_gen *)cp;
+ }
+ return cp;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(np));
+ return NULL;
+}
+
+static char *
+numstr(u_int x)
+{
+ static char buf[20];
+ snprintf(buf, sizeof(buf), "#%u", x);
+ return buf;
+}
+
+static void
+ikev1_print(netdissect_options *ndo,
+ const u_char *bp, u_int length,
+ const u_char *bp2, const struct isakmp *base)
+{
+ const struct isakmp *p;
+ const u_char *ep;
+ u_int flags;
+ u_char np;
+ int i;
+ u_int phase;
+
+ p = (const struct isakmp *)bp;
+ ep = ndo->ndo_snapend;
+
+ phase = (GET_BE_U_4(base->msgid) == 0) ? 1 : 2;
+ if (phase == 1)
+ ND_PRINT(" phase %u", phase);
+ else
+ ND_PRINT(" phase %u/others", phase);
+
+ i = cookie_find(&base->i_ck);
+ if (i < 0) {
+ if (iszero(ndo, base->r_ck, sizeof(base->r_ck))) {
+ /* the first packet */
+ ND_PRINT(" I");
+ if (bp2)
+ cookie_record(ndo, &base->i_ck, bp2);
+ } else
+ ND_PRINT(" ?");
+ } else {
+ if (bp2 && cookie_isinitiator(ndo, i, bp2))
+ ND_PRINT(" I");
+ else if (bp2 && cookie_isresponder(ndo, i, bp2))
+ ND_PRINT(" R");
+ else
+ ND_PRINT(" ?");
+ }
+
+ ND_PRINT(" %s", ETYPESTR(GET_U_1(base->etype)));
+ flags = GET_U_1(base->flags);
+ if (flags) {
+ ND_PRINT("[%s%s]", flags & ISAKMP_FLAG_E ? "E" : "",
+ flags & ISAKMP_FLAG_C ? "C" : "");
+ }
+
+ if (ndo->ndo_vflag) {
+ const struct isakmp_gen *ext;
+
+ ND_PRINT(":");
+
+ np = GET_U_1(base->np);
+
+ /* regardless of phase... */
+ if (flags & ISAKMP_FLAG_E) {
+ /*
+ * encrypted, nothing we can do right now.
+ * we hope to decrypt the packet in the future...
+ */
+ ND_PRINT(" [encrypted %s]", NPSTR(np));
+ goto done;
+ }
+
+ CHECKLEN(p + 1, np);
+ ext = (const struct isakmp_gen *)(p + 1);
+ ikev1_sub_print(ndo, np, ext, ep, phase, 0, 0, 0);
+ }
+
+done:
+ if (ndo->ndo_vflag) {
+ if (GET_BE_U_4(base->len) != length) {
+ ND_PRINT(" (len mismatch: isakmp %u/ip %u)",
+ GET_BE_U_4(base->len), length);
+ }
+ }
+}
+
+static const u_char *
+ikev2_sub0_print(netdissect_options *ndo, const struct isakmp *base,
+ u_char np,
+ const struct isakmp_gen *ext, const u_char *ep,
+ uint32_t phase, uint32_t doi, uint32_t proto, int depth)
+{
+ const u_char *cp;
+ u_int item_len;
+
+ cp = (const u_char *)ext;
+ ND_TCHECK_SIZE(ext);
+
+ /*
+ * Since we can't have a payload length of less than 4 bytes,
+ * we need to bail out here if the generic header is nonsensical
+ * or truncated, otherwise we could loop forever processing
+ * zero-length items or otherwise misdissect the packet.
+ */
+ item_len = GET_BE_U_2(ext->len);
+ if (item_len <= 4)
+ return NULL;
+
+ if (np == ISAKMP_NPTYPE_v2E) {
+ cp = ikev2_e_print(ndo, base, np, ext, item_len,
+ ep, phase, doi, proto, depth);
+ } else if (NPFUNC(np)) {
+ /*
+ * XXX - what if item_len is too short, or too long,
+ * for this payload type?
+ */
+ cp = (*npfunc[np])(ndo, np, ext, item_len,
+ ep, phase, doi, proto, depth);
+ } else {
+ ND_PRINT("%s", NPSTR(np));
+ cp += item_len;
+ }
+
+ return cp;
+trunc:
+ nd_print_trunc(ndo);
+ return NULL;
+}
+
+static const u_char *
+ikev2_sub_print(netdissect_options *ndo,
+ const struct isakmp *base,
+ u_char np, const struct isakmp_gen *ext, const u_char *ep,
+ uint32_t phase, uint32_t doi, uint32_t proto, int depth)
+{
+ const u_char *cp;
+ int i;
+
+ cp = (const u_char *)ext;
+ while (np) {
+ ND_TCHECK_SIZE(ext);
+
+ ND_TCHECK_LEN(ext, GET_BE_U_2(ext->len));
+
+ depth++;
+ ND_PRINT("\n");
+ for (i = 0; i < depth; i++)
+ ND_PRINT(" ");
+ ND_PRINT("(");
+ cp = ikev2_sub0_print(ndo, base, np,
+ ext, ep, phase, doi, proto, depth);
+ ND_PRINT(")");
+ depth--;
+
+ if (cp == NULL) {
+ /* Zero-length subitem */
+ return NULL;
+ }
+
+ np = GET_U_1(ext->np);
+ ext = (const struct isakmp_gen *)cp;
+ }
+ return cp;
+trunc:
+ ND_PRINT(" [|%s]", NPSTR(np));
+ return NULL;
+}
+
+static void
+ikev2_print(netdissect_options *ndo,
+ const u_char *bp, u_int length,
+ const u_char *bp2 _U_, const struct isakmp *base)
+{
+ const struct isakmp *p;
+ const u_char *ep;
+ uint8_t flags;
+ u_char np;
+ u_int phase;
+
+ p = (const struct isakmp *)bp;
+ ep = ndo->ndo_snapend;
+
+ phase = (GET_BE_U_4(base->msgid) == 0) ? 1 : 2;
+ if (phase == 1)
+ ND_PRINT(" parent_sa");
+ else
+ ND_PRINT(" child_sa ");
+
+ ND_PRINT(" %s", ETYPESTR(GET_U_1(base->etype)));
+ flags = GET_U_1(base->flags);
+ if (flags) {
+ ND_PRINT("[%s%s%s]",
+ flags & ISAKMP_FLAG_I ? "I" : "",
+ flags & ISAKMP_FLAG_V ? "V" : "",
+ flags & ISAKMP_FLAG_R ? "R" : "");
+ }
+
+ if (ndo->ndo_vflag) {
+ const struct isakmp_gen *ext;
+
+ ND_PRINT(":");
+
+ np = GET_U_1(base->np);
+
+ /* regardless of phase... */
+ if (flags & ISAKMP_FLAG_E) {
+ /*
+ * encrypted, nothing we can do right now.
+ * we hope to decrypt the packet in the future...
+ */
+ ND_PRINT(" [encrypted %s]", NPSTR(np));
+ goto done;
+ }
+
+ CHECKLEN(p + 1, np)
+ ext = (const struct isakmp_gen *)(p + 1);
+ ikev2_sub_print(ndo, base, np, ext, ep, phase, 0, 0, 0);
+ }
+
+done:
+ if (ndo->ndo_vflag) {
+ if (GET_BE_U_4(base->len) != length) {
+ ND_PRINT(" (len mismatch: isakmp %u/ip %u)",
+ GET_BE_U_4(base->len), length);
+ }
+ }
+}
+
+void
+isakmp_print(netdissect_options *ndo,
+ const u_char *bp, u_int length,
+ const u_char *bp2)
+{
+ const struct isakmp *p;
+ const u_char *ep;
+ u_int major, minor;
+
+ ndo->ndo_protocol = "isakmp";
+#ifdef HAVE_LIBCRYPTO
+ /* initialize SAs */
+ if (ndo->ndo_sa_list_head == NULL) {
+ if (ndo->ndo_espsecret)
+ esp_decodesecret_print(ndo);
+ }
+#endif
+
+ p = (const struct isakmp *)bp;
+ ep = ndo->ndo_snapend;
+
+ if ((const struct isakmp *)ep < p + 1) {
+ nd_print_trunc(ndo);
+ return;
+ }
+
+ ND_PRINT("isakmp");
+ major = (GET_U_1(p->vers) & ISAKMP_VERS_MAJOR)
+ >> ISAKMP_VERS_MAJOR_SHIFT;
+ minor = (GET_U_1(p->vers) & ISAKMP_VERS_MINOR)
+ >> ISAKMP_VERS_MINOR_SHIFT;
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" %u.%u", major, minor);
+ }
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" msgid ");
+ hexprint(ndo, p->msgid, sizeof(p->msgid));
+ }
+
+ if (1 < ndo->ndo_vflag) {
+ ND_PRINT(" cookie ");
+ hexprint(ndo, p->i_ck, sizeof(p->i_ck));
+ ND_PRINT("->");
+ hexprint(ndo, p->r_ck, sizeof(p->r_ck));
+ }
+ ND_PRINT(":");
+
+ switch(major) {
+ case IKEv1_MAJOR_VERSION:
+ ikev1_print(ndo, bp, length, bp2, p);
+ break;
+
+ case IKEv2_MAJOR_VERSION:
+ ikev2_print(ndo, bp, length, bp2, p);
+ break;
+ }
+}
+
+void
+isakmp_rfc3948_print(netdissect_options *ndo,
+ const u_char *bp, u_int length,
+ const u_char *bp2, int ver, int fragmented, u_int ttl_hl)
+{
+ ndo->ndo_protocol = "isakmp_rfc3948";
+ if(length == 1 && GET_U_1(bp)==0xff) {
+ ND_PRINT("isakmp-nat-keep-alive");
+ return;
+ }
+
+ if(length < 4) {
+ goto trunc;
+ }
+
+ /*
+ * see if this is an IKE packet
+ */
+ if (GET_BE_U_4(bp) == 0) {
+ ND_PRINT("NONESP-encap: ");
+ isakmp_print(ndo, bp+4, length-4, bp2);
+ return;
+ }
+
+ /* must be an ESP packet */
+ {
+ ND_PRINT("UDP-encap: ");
+
+ esp_print(ndo, bp, length, bp2, ver, fragmented, ttl_hl);
+
+ /*
+ * Either this has decrypted the payload and
+ * printed it, in which case there's nothing more
+ * to do, or it hasn't, in which case there's
+ * nothing more to do.
+ */
+ return;
+ }
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-isoclns.c b/print-isoclns.c
new file mode 100644
index 0000000..ddd5595
--- /dev/null
+++ b/print-isoclns.c
@@ -0,0 +1,3561 @@
+/*
+ * Copyright (c) 1992, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Matt Thomas, Digital Equipment Corporation
+ *
+ * Extensively modified by Hannes Gredler (hannes@gredler.at) for more
+ * complete IS-IS & CLNP support.
+ */
+
+/* \summary: ISO CLNS, ESIS, and ISIS printer */
+
+/*
+ * specification:
+ *
+ * CLNP: ISO 8473 (respective ITU version is at https://www.itu.int/rec/T-REC-X.233/en/)
+ * ES-IS: ISO 9542
+ * IS-IS: ISO 10589
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "nlpid.h"
+#include "extract.h"
+#include "gmpls.h"
+#include "oui.h"
+#include "signature.h"
+
+
+/*
+ * IS-IS is defined in ISO 10589. Look there for protocol definitions.
+ */
+
+#define SYSTEM_ID_LEN MAC_ADDR_LEN
+#define NODE_ID_LEN (SYSTEM_ID_LEN+1)
+#define LSP_ID_LEN (SYSTEM_ID_LEN+2)
+
+#define ISIS_VERSION 1
+#define ESIS_VERSION 1
+#define CLNP_VERSION 1
+
+#define ISIS_PDU_TYPE_MASK 0x1F
+#define ESIS_PDU_TYPE_MASK 0x1F
+#define CLNP_PDU_TYPE_MASK 0x1F
+#define CLNP_FLAG_MASK 0xE0
+#define ISIS_LAN_PRIORITY_MASK 0x7F
+
+#define ISIS_PDU_L1_LAN_IIH 15
+#define ISIS_PDU_L2_LAN_IIH 16
+#define ISIS_PDU_PTP_IIH 17
+#define ISIS_PDU_L1_LSP 18
+#define ISIS_PDU_L2_LSP 20
+#define ISIS_PDU_L1_CSNP 24
+#define ISIS_PDU_L2_CSNP 25
+#define ISIS_PDU_L1_PSNP 26
+#define ISIS_PDU_L2_PSNP 27
+
+static const struct tok isis_pdu_values[] = {
+ { ISIS_PDU_L1_LAN_IIH, "L1 Lan IIH"},
+ { ISIS_PDU_L2_LAN_IIH, "L2 Lan IIH"},
+ { ISIS_PDU_PTP_IIH, "p2p IIH"},
+ { ISIS_PDU_L1_LSP, "L1 LSP"},
+ { ISIS_PDU_L2_LSP, "L2 LSP"},
+ { ISIS_PDU_L1_CSNP, "L1 CSNP"},
+ { ISIS_PDU_L2_CSNP, "L2 CSNP"},
+ { ISIS_PDU_L1_PSNP, "L1 PSNP"},
+ { ISIS_PDU_L2_PSNP, "L2 PSNP"},
+ { 0, NULL}
+};
+
+/*
+ * A TLV is a tuple of a type, length and a value and is normally used for
+ * encoding information in all sorts of places. This is an enumeration of
+ * the well known types.
+ *
+ * list taken from rfc3359 plus some memory from veterans ;-)
+ */
+
+#define ISIS_TLV_AREA_ADDR 1 /* iso10589 */
+#define ISIS_TLV_IS_REACH 2 /* iso10589 */
+#define ISIS_TLV_ESNEIGH 3 /* iso10589 */
+#define ISIS_TLV_PART_DIS 4 /* iso10589 */
+#define ISIS_TLV_PREFIX_NEIGH 5 /* iso10589 */
+#define ISIS_TLV_ISNEIGH 6 /* iso10589 */
+#define ISIS_TLV_INSTANCE_ID 7 /* rfc8202 */
+#define ISIS_TLV_PADDING 8 /* iso10589 */
+#define ISIS_TLV_LSP 9 /* iso10589 */
+#define ISIS_TLV_AUTH 10 /* iso10589, rfc3567 */
+#define ISIS_TLV_CHECKSUM 12 /* rfc3358 */
+#define ISIS_TLV_CHECKSUM_MINLEN 2
+#define ISIS_TLV_POI 13 /* rfc6232 */
+#define ISIS_TLV_LSP_BUFFERSIZE 14 /* iso10589 rev2 */
+#define ISIS_TLV_EXT_IS_REACH 22 /* rfc5305 */
+#define ISIS_TLV_IS_ALIAS_ID 24 /* rfc5311 */
+#define ISIS_TLV_DECNET_PHASE4 42
+#define ISIS_TLV_LUCENT_PRIVATE 66
+#define ISIS_TLV_INT_IP_REACH 128 /* rfc1195, rfc2966 */
+#define ISIS_TLV_PROTOCOLS 129 /* rfc1195 */
+#define ISIS_TLV_EXT_IP_REACH 130 /* rfc1195, rfc2966 */
+#define ISIS_TLV_IDRP_INFO 131 /* rfc1195 */
+#define ISIS_TLV_IPADDR 132 /* rfc1195 */
+#define ISIS_TLV_IPAUTH 133 /* rfc1195 */
+#define ISIS_TLV_TE_ROUTER_ID 134 /* rfc5305 */
+#define ISIS_TLV_EXTD_IP_REACH 135 /* rfc5305 */
+#define ISIS_TLV_HOSTNAME 137 /* rfc2763 */
+#define ISIS_TLV_SHARED_RISK_GROUP 138 /* draft-ietf-isis-gmpls-extensions */
+#define ISIS_TLV_MT_PORT_CAP 143 /* rfc6165 */
+#define ISIS_TLV_MT_CAPABILITY 144 /* rfc6329 */
+#define ISIS_TLV_NORTEL_PRIVATE1 176
+#define ISIS_TLV_NORTEL_PRIVATE2 177
+#define ISIS_TLV_RESTART_SIGNALING 211 /* rfc3847 */
+#define ISIS_TLV_RESTART_SIGNALING_FLAGLEN 1
+#define ISIS_TLV_RESTART_SIGNALING_HOLDTIMELEN 2
+#define ISIS_TLV_MT_IS_REACH 222 /* draft-ietf-isis-wg-multi-topology-05 */
+#define ISIS_TLV_MT_SUPPORTED 229 /* draft-ietf-isis-wg-multi-topology-05 */
+#define ISIS_TLV_IP6ADDR 232 /* draft-ietf-isis-ipv6-02 */
+#define ISIS_TLV_MT_IP_REACH 235 /* draft-ietf-isis-wg-multi-topology-05 */
+#define ISIS_TLV_IP6_REACH 236 /* draft-ietf-isis-ipv6-02 */
+#define ISIS_TLV_MT_IP6_REACH 237 /* draft-ietf-isis-wg-multi-topology-05 */
+#define ISIS_TLV_PTP_ADJ 240 /* rfc3373 */
+#define ISIS_TLV_IIH_SEQNR 241 /* draft-shen-isis-iih-sequence-00 */
+#define ISIS_TLV_ROUTER_CAPABILITY 242 /* rfc7981 */
+#define ISIS_TLV_VENDOR_PRIVATE 250 /* draft-ietf-isis-experimental-tlv-01 */
+#define ISIS_TLV_VENDOR_PRIVATE_MINLEN 3
+
+static const struct tok isis_tlv_values[] = {
+ { ISIS_TLV_AREA_ADDR, "Area address(es)"},
+ { ISIS_TLV_IS_REACH, "IS Reachability"},
+ { ISIS_TLV_ESNEIGH, "ES Neighbor(s)"},
+ { ISIS_TLV_PART_DIS, "Partition DIS"},
+ { ISIS_TLV_PREFIX_NEIGH, "Prefix Neighbors"},
+ { ISIS_TLV_ISNEIGH, "IS Neighbor(s)"},
+ { ISIS_TLV_INSTANCE_ID, "Instance Identifier"},
+ { ISIS_TLV_PADDING, "Padding"},
+ { ISIS_TLV_LSP, "LSP entries"},
+ { ISIS_TLV_AUTH, "Authentication"},
+ { ISIS_TLV_CHECKSUM, "Checksum"},
+ { ISIS_TLV_POI, "Purge Originator Identifier"},
+ { ISIS_TLV_LSP_BUFFERSIZE, "LSP Buffersize"},
+ { ISIS_TLV_EXT_IS_REACH, "Extended IS Reachability"},
+ { ISIS_TLV_IS_ALIAS_ID, "IS Alias ID"},
+ { ISIS_TLV_DECNET_PHASE4, "DECnet Phase IV"},
+ { ISIS_TLV_LUCENT_PRIVATE, "Lucent Proprietary"},
+ { ISIS_TLV_INT_IP_REACH, "IPv4 Internal Reachability"},
+ { ISIS_TLV_PROTOCOLS, "Protocols supported"},
+ { ISIS_TLV_EXT_IP_REACH, "IPv4 External Reachability"},
+ { ISIS_TLV_IDRP_INFO, "Inter-Domain Information Type"},
+ { ISIS_TLV_IPADDR, "IPv4 Interface address(es)"},
+ { ISIS_TLV_IPAUTH, "IPv4 authentication (deprecated)"},
+ { ISIS_TLV_TE_ROUTER_ID, "Traffic Engineering Router ID"},
+ { ISIS_TLV_EXTD_IP_REACH, "Extended IPv4 Reachability"},
+ { ISIS_TLV_SHARED_RISK_GROUP, "Shared Risk Link Group"},
+ { ISIS_TLV_MT_PORT_CAP, "Multi-Topology-Aware Port Capability"},
+ { ISIS_TLV_MT_CAPABILITY, "Multi-Topology Capability"},
+ { ISIS_TLV_NORTEL_PRIVATE1, "Nortel Proprietary"},
+ { ISIS_TLV_NORTEL_PRIVATE2, "Nortel Proprietary"},
+ { ISIS_TLV_HOSTNAME, "Hostname"},
+ { ISIS_TLV_RESTART_SIGNALING, "Restart Signaling"},
+ { ISIS_TLV_MT_IS_REACH, "Multi Topology IS Reachability"},
+ { ISIS_TLV_MT_SUPPORTED, "Multi Topology"},
+ { ISIS_TLV_IP6ADDR, "IPv6 Interface address(es)"},
+ { ISIS_TLV_MT_IP_REACH, "Multi-Topology IPv4 Reachability"},
+ { ISIS_TLV_IP6_REACH, "IPv6 reachability"},
+ { ISIS_TLV_MT_IP6_REACH, "Multi-Topology IP6 Reachability"},
+ { ISIS_TLV_PTP_ADJ, "Point-to-point Adjacency State"},
+ { ISIS_TLV_IIH_SEQNR, "Hello PDU Sequence Number"},
+ { ISIS_TLV_ROUTER_CAPABILITY, "IS-IS Router Capability"},
+ { ISIS_TLV_VENDOR_PRIVATE, "Vendor Private"},
+ { 0, NULL }
+};
+
+#define ESIS_OPTION_PROTOCOLS 129
+#define ESIS_OPTION_QOS_MAINTENANCE 195 /* iso9542 */
+#define ESIS_OPTION_SECURITY 197 /* iso9542 */
+#define ESIS_OPTION_ES_CONF_TIME 198 /* iso9542 */
+#define ESIS_OPTION_PRIORITY 205 /* iso9542 */
+#define ESIS_OPTION_ADDRESS_MASK 225 /* iso9542 */
+#define ESIS_OPTION_SNPA_MASK 226 /* iso9542 */
+
+static const struct tok esis_option_values[] = {
+ { ESIS_OPTION_PROTOCOLS, "Protocols supported"},
+ { ESIS_OPTION_QOS_MAINTENANCE, "QoS Maintenance" },
+ { ESIS_OPTION_SECURITY, "Security" },
+ { ESIS_OPTION_ES_CONF_TIME, "ES Configuration Time" },
+ { ESIS_OPTION_PRIORITY, "Priority" },
+ { ESIS_OPTION_ADDRESS_MASK, "Addressk Mask" },
+ { ESIS_OPTION_SNPA_MASK, "SNPA Mask" },
+ { 0, NULL }
+};
+
+#define CLNP_OPTION_DISCARD_REASON 193
+#define CLNP_OPTION_QOS_MAINTENANCE 195 /* iso8473 */
+#define CLNP_OPTION_SECURITY 197 /* iso8473 */
+#define CLNP_OPTION_SOURCE_ROUTING 200 /* iso8473 */
+#define CLNP_OPTION_ROUTE_RECORDING 203 /* iso8473 */
+#define CLNP_OPTION_PADDING 204 /* iso8473 */
+#define CLNP_OPTION_PRIORITY 205 /* iso8473 */
+
+static const struct tok clnp_option_values[] = {
+ { CLNP_OPTION_DISCARD_REASON, "Discard Reason"},
+ { CLNP_OPTION_PRIORITY, "Priority"},
+ { CLNP_OPTION_QOS_MAINTENANCE, "QoS Maintenance"},
+ { CLNP_OPTION_SECURITY, "Security"},
+ { CLNP_OPTION_SOURCE_ROUTING, "Source Routing"},
+ { CLNP_OPTION_ROUTE_RECORDING, "Route Recording"},
+ { CLNP_OPTION_PADDING, "Padding"},
+ { 0, NULL }
+};
+
+static const struct tok clnp_option_rfd_class_values[] = {
+ { 0x0, "General"},
+ { 0x8, "Address"},
+ { 0x9, "Source Routeing"},
+ { 0xa, "Lifetime"},
+ { 0xb, "PDU Discarded"},
+ { 0xc, "Reassembly"},
+ { 0, NULL }
+};
+
+static const struct tok clnp_option_rfd_general_values[] = {
+ { 0x0, "Reason not specified"},
+ { 0x1, "Protocol procedure error"},
+ { 0x2, "Incorrect checksum"},
+ { 0x3, "PDU discarded due to congestion"},
+ { 0x4, "Header syntax error (cannot be parsed)"},
+ { 0x5, "Segmentation needed but not permitted"},
+ { 0x6, "Incomplete PDU received"},
+ { 0x7, "Duplicate option"},
+ { 0, NULL }
+};
+
+static const struct tok clnp_option_rfd_address_values[] = {
+ { 0x0, "Destination address unreachable"},
+ { 0x1, "Destination address unknown"},
+ { 0, NULL }
+};
+
+static const struct tok clnp_option_rfd_source_routeing_values[] = {
+ { 0x0, "Unspecified source routeing error"},
+ { 0x1, "Syntax error in source routeing field"},
+ { 0x2, "Unknown address in source routeing field"},
+ { 0x3, "Path not acceptable"},
+ { 0, NULL }
+};
+
+static const struct tok clnp_option_rfd_lifetime_values[] = {
+ { 0x0, "Lifetime expired while data unit in transit"},
+ { 0x1, "Lifetime expired during reassembly"},
+ { 0, NULL }
+};
+
+static const struct tok clnp_option_rfd_pdu_discard_values[] = {
+ { 0x0, "Unsupported option not specified"},
+ { 0x1, "Unsupported protocol version"},
+ { 0x2, "Unsupported security option"},
+ { 0x3, "Unsupported source routeing option"},
+ { 0x4, "Unsupported recording of route option"},
+ { 0, NULL }
+};
+
+static const struct tok clnp_option_rfd_reassembly_values[] = {
+ { 0x0, "Reassembly interference"},
+ { 0, NULL }
+};
+
+/* array of 16 error-classes */
+static const struct tok *clnp_option_rfd_error_class[] = {
+ clnp_option_rfd_general_values,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ clnp_option_rfd_address_values,
+ clnp_option_rfd_source_routeing_values,
+ clnp_option_rfd_lifetime_values,
+ clnp_option_rfd_pdu_discard_values,
+ clnp_option_rfd_reassembly_values,
+ NULL,
+ NULL,
+ NULL
+};
+
+#define CLNP_OPTION_OPTION_QOS_MASK 0x3f
+#define CLNP_OPTION_SCOPE_MASK 0xc0
+#define CLNP_OPTION_SCOPE_SA_SPEC 0x40
+#define CLNP_OPTION_SCOPE_DA_SPEC 0x80
+#define CLNP_OPTION_SCOPE_GLOBAL 0xc0
+
+static const struct tok clnp_option_scope_values[] = {
+ { CLNP_OPTION_SCOPE_SA_SPEC, "Source Address Specific"},
+ { CLNP_OPTION_SCOPE_DA_SPEC, "Destination Address Specific"},
+ { CLNP_OPTION_SCOPE_GLOBAL, "Globally unique"},
+ { 0, NULL }
+};
+
+static const struct tok clnp_option_sr_rr_values[] = {
+ { 0x0, "partial"},
+ { 0x1, "complete"},
+ { 0, NULL }
+};
+
+static const struct tok clnp_option_sr_rr_string_values[] = {
+ { CLNP_OPTION_SOURCE_ROUTING, "source routing"},
+ { CLNP_OPTION_ROUTE_RECORDING, "recording of route in progress"},
+ { 0, NULL }
+};
+
+static const struct tok clnp_option_qos_global_values[] = {
+ { 0x20, "reserved"},
+ { 0x10, "sequencing vs. delay"},
+ { 0x08, "congested"},
+ { 0x04, "delay vs. cost"},
+ { 0x02, "error vs. delay"},
+ { 0x01, "error vs. cost"},
+ { 0, NULL }
+};
+
+static const struct tok isis_tlv_router_capability_flags[] = {
+ { 0x01, "S bit"},
+ { 0x02, "D bit"},
+ { 0, NULL }
+};
+
+#define ISIS_SUBTLV_ROUTER_CAP_SR 2 /* rfc 8667 */
+
+static const struct tok isis_router_capability_subtlv_values[] = {
+ { ISIS_SUBTLV_ROUTER_CAP_SR, "SR-Capabilities"},
+ { 0, NULL }
+};
+
+static const struct tok isis_router_capability_sr_flags[] = {
+ { 0x80, "ipv4"},
+ { 0x40, "ipv6"},
+ { 0, NULL }
+};
+
+#define ISIS_SUBTLV_EXT_IS_REACH_ADMIN_GROUP 3 /* rfc5305 */
+#define ISIS_SUBTLV_EXT_IS_REACH_LINK_LOCAL_REMOTE_ID 4 /* rfc4205 */
+#define ISIS_SUBTLV_EXT_IS_REACH_LINK_REMOTE_ID 5 /* rfc5305 */
+#define ISIS_SUBTLV_EXT_IS_REACH_IPV4_INTF_ADDR 6 /* rfc5305 */
+#define ISIS_SUBTLV_EXT_IS_REACH_IPV4_NEIGHBOR_ADDR 8 /* rfc5305 */
+#define ISIS_SUBTLV_EXT_IS_REACH_MAX_LINK_BW 9 /* rfc5305 */
+#define ISIS_SUBTLV_EXT_IS_REACH_RESERVABLE_BW 10 /* rfc5305 */
+#define ISIS_SUBTLV_EXT_IS_REACH_UNRESERVED_BW 11 /* rfc4124 */
+#define ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS_OLD 12 /* draft-ietf-tewg-diff-te-proto-06 */
+#define ISIS_SUBTLV_EXT_IS_REACH_TE_METRIC 18 /* rfc5305 */
+#define ISIS_SUBTLV_EXT_IS_REACH_LINK_ATTRIBUTE 19 /* draft-ietf-isis-link-attr-01 */
+#define ISIS_SUBTLV_EXT_IS_REACH_LINK_PROTECTION_TYPE 20 /* rfc4205 */
+#define ISIS_SUBTLV_EXT_IS_REACH_INTF_SW_CAP_DESCR 21 /* rfc4205 */
+#define ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS 22 /* rfc4124 */
+#define ISIS_SUBTLV_EXT_IS_REACH_LAN_ADJ_SEGMENT_ID 32 /* rfc8667 */
+
+#define ISIS_SUBTLV_SPB_METRIC 29 /* rfc6329 */
+
+static const struct tok isis_ext_is_reach_subtlv_values[] = {
+ { ISIS_SUBTLV_EXT_IS_REACH_ADMIN_GROUP, "Administrative groups" },
+ { ISIS_SUBTLV_EXT_IS_REACH_LINK_LOCAL_REMOTE_ID, "Link Local/Remote Identifier" },
+ { ISIS_SUBTLV_EXT_IS_REACH_LINK_REMOTE_ID, "Link Remote Identifier" },
+ { ISIS_SUBTLV_EXT_IS_REACH_IPV4_INTF_ADDR, "IPv4 interface address" },
+ { ISIS_SUBTLV_EXT_IS_REACH_IPV4_NEIGHBOR_ADDR, "IPv4 neighbor address" },
+ { ISIS_SUBTLV_EXT_IS_REACH_MAX_LINK_BW, "Maximum link bandwidth" },
+ { ISIS_SUBTLV_EXT_IS_REACH_RESERVABLE_BW, "Reservable link bandwidth" },
+ { ISIS_SUBTLV_EXT_IS_REACH_UNRESERVED_BW, "Unreserved bandwidth" },
+ { ISIS_SUBTLV_EXT_IS_REACH_TE_METRIC, "Traffic Engineering Metric" },
+ { ISIS_SUBTLV_EXT_IS_REACH_LINK_ATTRIBUTE, "Link Attribute" },
+ { ISIS_SUBTLV_EXT_IS_REACH_LINK_PROTECTION_TYPE, "Link Protection Type" },
+ { ISIS_SUBTLV_EXT_IS_REACH_INTF_SW_CAP_DESCR, "Interface Switching Capability" },
+ { ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS_OLD, "Bandwidth Constraints (old)" },
+ { ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS, "Bandwidth Constraints" },
+ { ISIS_SUBTLV_EXT_IS_REACH_LAN_ADJ_SEGMENT_ID, "LAN Adjacency Segment Identifier" },
+ { ISIS_SUBTLV_SPB_METRIC, "SPB Metric" },
+ { 250, "Reserved for cisco specific extensions" },
+ { 251, "Reserved for cisco specific extensions" },
+ { 252, "Reserved for cisco specific extensions" },
+ { 253, "Reserved for cisco specific extensions" },
+ { 254, "Reserved for cisco specific extensions" },
+ { 255, "Reserved for future expansion" },
+ { 0, NULL }
+};
+
+#define ISIS_SUBTLV_EXTD_IP_REACH_ADMIN_TAG32 1 /* draft-ietf-isis-admin-tags-01 */
+#define ISIS_SUBTLV_EXTD_IP_REACH_ADMIN_TAG64 2 /* draft-ietf-isis-admin-tags-01 */
+#define ISIS_SUBTLV_EXTD_IP_REACH_PREFIX_SID 3 /* rfc8667 */
+#define ISIS_SUBTLV_EXTD_IP_REACH_MGMT_PREFIX_COLOR 117 /* draft-ietf-isis-wg-multi-topology-05 */
+
+static const struct tok isis_ext_ip_reach_subtlv_values[] = {
+ { ISIS_SUBTLV_EXTD_IP_REACH_ADMIN_TAG32, "32-Bit Administrative tag" },
+ { ISIS_SUBTLV_EXTD_IP_REACH_ADMIN_TAG64, "64-Bit Administrative tag" },
+ { ISIS_SUBTLV_EXTD_IP_REACH_PREFIX_SID, "Prefix SID" },
+ { ISIS_SUBTLV_EXTD_IP_REACH_MGMT_PREFIX_COLOR, "Management Prefix Color" },
+ { 0, NULL }
+};
+
+#define ISIS_PREFIX_SID_FLAG_R 0x80 /* rfc 8667 */
+#define ISIS_PREFIX_SID_FLAG_N 0x40 /* rfc 8667 */
+#define ISIS_PREFIX_SID_FLAG_P 0x20 /* rfc 8667 */
+#define ISIS_PREFIX_SID_FLAG_E 0x10 /* rfc 8667 */
+#define ISIS_PREFIX_SID_FLAG_V 0x08 /* rfc 8667 */
+#define ISIS_PREFIX_SID_FLAG_L 0x04 /* rfc 8667 */
+
+static const struct tok prefix_sid_flag_values[] = {
+ { ISIS_PREFIX_SID_FLAG_R, "Readvertisement"},
+ { ISIS_PREFIX_SID_FLAG_N, "Node"},
+ { ISIS_PREFIX_SID_FLAG_P, "No-PHP"},
+ { ISIS_PREFIX_SID_FLAG_E, "Explicit NULL"},
+ { ISIS_PREFIX_SID_FLAG_V, "Value"},
+ { ISIS_PREFIX_SID_FLAG_L, "Local"},
+ { 0, NULL}
+};
+
+
+/* rfc 8667 */
+static const struct tok prefix_sid_algo_values[] = {
+ { 0, "SPF"},
+ { 1, "strict-SPF"},
+ { 0, NULL}
+};
+
+static const struct tok isis_subtlv_link_attribute_values[] = {
+ { 0x01, "Local Protection Available" },
+ { 0x02, "Link excluded from local protection path" },
+ { 0x04, "Local maintenance required"},
+ { 0, NULL }
+};
+
+static const struct tok isis_lan_adj_sid_flag_values[] = {
+ { 0x80, "Address family IPv6" },
+ { 0x40, "Backup" },
+ { 0x20, "Value" },
+ { 0x10, "Local significance" },
+ { 0x08, "Set of adjacencies" },
+ { 0x04, "Persistent" },
+ { 0, NULL }
+};
+
+#define ISIS_SUBTLV_AUTH_SIMPLE 1
+#define ISIS_SUBTLV_AUTH_GENERIC 3 /* rfc 5310 */
+#define ISIS_SUBTLV_AUTH_MD5 54
+#define ISIS_SUBTLV_AUTH_MD5_LEN 16
+#define ISIS_SUBTLV_AUTH_PRIVATE 255
+
+static const struct tok isis_subtlv_auth_values[] = {
+ { ISIS_SUBTLV_AUTH_SIMPLE, "simple text password"},
+ { ISIS_SUBTLV_AUTH_GENERIC, "Generic Crypto key-id"},
+ { ISIS_SUBTLV_AUTH_MD5, "HMAC-MD5 password"},
+ { ISIS_SUBTLV_AUTH_PRIVATE, "Routing Domain private password"},
+ { 0, NULL }
+};
+
+#define ISIS_SUBTLV_IDRP_RES 0
+#define ISIS_SUBTLV_IDRP_LOCAL 1
+#define ISIS_SUBTLV_IDRP_ASN 2
+
+static const struct tok isis_subtlv_idrp_values[] = {
+ { ISIS_SUBTLV_IDRP_RES, "Reserved"},
+ { ISIS_SUBTLV_IDRP_LOCAL, "Routing-Domain Specific"},
+ { ISIS_SUBTLV_IDRP_ASN, "AS Number Tag"},
+ { 0, NULL}
+};
+
+#define ISIS_SUBTLV_SPB_MCID 4
+#define ISIS_SUBTLV_SPB_DIGEST 5
+#define ISIS_SUBTLV_SPB_BVID 6
+
+#define ISIS_SUBTLV_SPB_INSTANCE 1
+#define ISIS_SUBTLV_SPBM_SI 3
+
+#define ISIS_SPB_MCID_LEN 51
+#define ISIS_SUBTLV_SPB_MCID_MIN_LEN 102
+#define ISIS_SUBTLV_SPB_DIGEST_MIN_LEN 33
+#define ISIS_SUBTLV_SPB_BVID_MIN_LEN 6
+#define ISIS_SUBTLV_SPB_INSTANCE_MIN_LEN 19
+#define ISIS_SUBTLV_SPB_INSTANCE_VLAN_TUPLE_LEN 8
+
+static const struct tok isis_mt_port_cap_subtlv_values[] = {
+ { ISIS_SUBTLV_SPB_MCID, "SPB MCID" },
+ { ISIS_SUBTLV_SPB_DIGEST, "SPB Digest" },
+ { ISIS_SUBTLV_SPB_BVID, "SPB BVID" },
+ { 0, NULL }
+};
+
+static const struct tok isis_mt_capability_subtlv_values[] = {
+ { ISIS_SUBTLV_SPB_INSTANCE, "SPB Instance" },
+ { ISIS_SUBTLV_SPBM_SI, "SPBM Service Identifier and Unicast Address" },
+ { 0, NULL }
+};
+
+struct isis_spb_mcid {
+ nd_uint8_t format_id;
+ nd_byte name[32];
+ nd_uint16_t revision_lvl;
+ nd_byte digest[16];
+};
+
+struct isis_subtlv_spb_mcid {
+ struct isis_spb_mcid mcid;
+ struct isis_spb_mcid aux_mcid;
+};
+
+struct isis_subtlv_spb_instance {
+ nd_byte cist_root_id[8];
+ nd_uint32_t cist_external_root_path_cost;
+ nd_uint16_t bridge_priority;
+ nd_uint32_t spsourceid;
+ nd_uint8_t no_of_trees;
+};
+
+#define CLNP_SEGMENT_PART 0x80
+#define CLNP_MORE_SEGMENTS 0x40
+#define CLNP_REQUEST_ER 0x20
+
+static const struct tok clnp_flag_values[] = {
+ { CLNP_SEGMENT_PART, "Segmentation permitted"},
+ { CLNP_MORE_SEGMENTS, "more Segments"},
+ { CLNP_REQUEST_ER, "request Error Report"},
+ { 0, NULL}
+};
+
+#define ISIS_MASK_LSP_OL_BIT(x) (GET_U_1(x)&0x4)
+#define ISIS_MASK_LSP_ISTYPE_BITS(x) (GET_U_1(x)&0x3)
+#define ISIS_MASK_LSP_PARTITION_BIT(x) (GET_U_1(x)&0x80)
+#define ISIS_MASK_LSP_ATT_BITS(x) (GET_U_1(x)&0x78)
+#define ISIS_MASK_LSP_ATT_ERROR_BIT(x) (GET_U_1(x)&0x40)
+#define ISIS_MASK_LSP_ATT_EXPENSE_BIT(x) (GET_U_1(x)&0x20)
+#define ISIS_MASK_LSP_ATT_DELAY_BIT(x) (GET_U_1(x)&0x10)
+#define ISIS_MASK_LSP_ATT_DEFAULT_BIT(x) (GET_U_1(x)&0x8)
+
+#define ISIS_MASK_MTID(x) ((x)&0x0fff)
+#define ISIS_MASK_MTFLAGS(x) ((x)&0xf000)
+
+static const struct tok isis_mt_flag_values[] = {
+ { 0x4000, "ATT bit set"},
+ { 0x8000, "Overload bit set"},
+ { 0, NULL}
+};
+
+#define ISIS_MASK_TLV_EXTD_IP_UPDOWN(x) ((x)&0x80)
+#define ISIS_MASK_TLV_EXTD_IP_SUBTLV(x) ((x)&0x40)
+
+#define ISIS_MASK_TLV_EXTD_IP6_IE(x) ((x)&0x40)
+#define ISIS_MASK_TLV_EXTD_IP6_SUBTLV(x) ((x)&0x20)
+
+#define ISIS_LSP_TLV_METRIC_SUPPORTED(x) (GET_U_1(x)&0x80)
+#define ISIS_LSP_TLV_METRIC_IE(x) (GET_U_1(x)&0x40)
+#define ISIS_LSP_TLV_METRIC_UPDOWN(x) (GET_U_1(x)&0x80)
+#define ISIS_LSP_TLV_METRIC_VALUE(x) (GET_U_1(x)&0x3f)
+
+#define ISIS_MASK_TLV_SHARED_RISK_GROUP(x) ((x)&0x1)
+
+static const struct tok isis_mt_values[] = {
+ { 0, "IPv4 unicast"},
+ { 1, "In-Band Management"},
+ { 2, "IPv6 unicast"},
+ { 3, "Multicast"},
+ { 4095, "Development, Experimental or Proprietary"},
+ { 0, NULL }
+};
+
+static const struct tok isis_iih_circuit_type_values[] = {
+ { 1, "Level 1 only"},
+ { 2, "Level 2 only"},
+ { 3, "Level 1, Level 2"},
+ { 0, NULL}
+};
+
+#define ISIS_LSP_TYPE_UNUSED0 0
+#define ISIS_LSP_TYPE_LEVEL_1 1
+#define ISIS_LSP_TYPE_UNUSED2 2
+#define ISIS_LSP_TYPE_LEVEL_2 3
+
+static const struct tok isis_lsp_istype_values[] = {
+ { ISIS_LSP_TYPE_UNUSED0, "Unused 0x0 (invalid)"},
+ { ISIS_LSP_TYPE_LEVEL_1, "L1 IS"},
+ { ISIS_LSP_TYPE_UNUSED2, "Unused 0x2 (invalid)"},
+ { ISIS_LSP_TYPE_LEVEL_2, "L2 IS"},
+ { 0, NULL }
+};
+
+/*
+ * Katz's point to point adjacency TLV uses codes to tell us the state of
+ * the remote adjacency. Enumerate them.
+ */
+
+#define ISIS_PTP_ADJ_UP 0
+#define ISIS_PTP_ADJ_INIT 1
+#define ISIS_PTP_ADJ_DOWN 2
+
+static const struct tok isis_ptp_adjancey_values[] = {
+ { ISIS_PTP_ADJ_UP, "Up" },
+ { ISIS_PTP_ADJ_INIT, "Initializing" },
+ { ISIS_PTP_ADJ_DOWN, "Down" },
+ { 0, NULL}
+};
+
+struct isis_tlv_ptp_adj {
+ nd_uint8_t adjacency_state;
+ nd_uint32_t extd_local_circuit_id;
+ nd_byte neighbor_sysid[SYSTEM_ID_LEN];
+ nd_uint32_t neighbor_extd_local_circuit_id;
+};
+
+static void osi_print_cksum(netdissect_options *, const uint8_t *pptr,
+ uint16_t checksum, int checksum_offset, u_int length);
+static int clnp_print(netdissect_options *, const uint8_t *, u_int);
+static void esis_print(netdissect_options *, const uint8_t *, u_int);
+static int isis_print(netdissect_options *, const uint8_t *, u_int);
+
+struct isis_metric_block {
+ nd_uint8_t metric_default;
+ nd_uint8_t metric_delay;
+ nd_uint8_t metric_expense;
+ nd_uint8_t metric_error;
+};
+
+struct isis_tlv_is_reach {
+ struct isis_metric_block isis_metric_block;
+ nd_byte neighbor_nodeid[NODE_ID_LEN];
+};
+
+struct isis_tlv_es_reach {
+ struct isis_metric_block isis_metric_block;
+ nd_byte neighbor_sysid[SYSTEM_ID_LEN];
+};
+
+struct isis_tlv_ip_reach {
+ struct isis_metric_block isis_metric_block;
+ nd_ipv4 prefix;
+ nd_ipv4 mask;
+};
+
+static const struct tok isis_is_reach_virtual_values[] = {
+ { 0, "IsNotVirtual"},
+ { 1, "IsVirtual"},
+ { 0, NULL }
+};
+
+static const struct tok isis_restart_flag_values[] = {
+ { 0x1, "Restart Request"},
+ { 0x2, "Restart Acknowledgement"},
+ { 0x4, "Suppress adjacency advertisement"},
+ { 0, NULL }
+};
+
+struct isis_common_header {
+ nd_uint8_t nlpid;
+ nd_uint8_t fixed_len;
+ nd_uint8_t version; /* Protocol version */
+ nd_uint8_t id_length;
+ nd_uint8_t pdu_type; /* 3 MSbits are reserved */
+ nd_uint8_t pdu_version; /* Packet format version */
+ nd_byte reserved;
+ nd_uint8_t max_area;
+};
+
+struct isis_iih_lan_header {
+ nd_uint8_t circuit_type;
+ nd_byte source_id[SYSTEM_ID_LEN];
+ nd_uint16_t holding_time;
+ nd_uint16_t pdu_len;
+ nd_uint8_t priority;
+ nd_byte lan_id[NODE_ID_LEN];
+};
+
+struct isis_iih_ptp_header {
+ nd_uint8_t circuit_type;
+ nd_byte source_id[SYSTEM_ID_LEN];
+ nd_uint16_t holding_time;
+ nd_uint16_t pdu_len;
+ nd_uint8_t circuit_id;
+};
+
+struct isis_lsp_header {
+ nd_uint16_t pdu_len;
+ nd_uint16_t remaining_lifetime;
+ nd_byte lsp_id[LSP_ID_LEN];
+ nd_uint32_t sequence_number;
+ nd_uint16_t checksum;
+ nd_uint8_t typeblock;
+};
+
+struct isis_csnp_header {
+ nd_uint16_t pdu_len;
+ nd_byte source_id[NODE_ID_LEN];
+ nd_byte start_lsp_id[LSP_ID_LEN];
+ nd_byte end_lsp_id[LSP_ID_LEN];
+};
+
+struct isis_psnp_header {
+ nd_uint16_t pdu_len;
+ nd_byte source_id[NODE_ID_LEN];
+};
+
+struct isis_tlv_lsp {
+ nd_uint16_t remaining_lifetime;
+ nd_byte lsp_id[LSP_ID_LEN];
+ nd_uint32_t sequence_number;
+ nd_uint16_t checksum;
+};
+
+#define ISIS_COMMON_HEADER_SIZE (sizeof(struct isis_common_header))
+#define ISIS_IIH_LAN_HEADER_SIZE (sizeof(struct isis_iih_lan_header))
+#define ISIS_IIH_PTP_HEADER_SIZE (sizeof(struct isis_iih_ptp_header))
+#define ISIS_LSP_HEADER_SIZE (sizeof(struct isis_lsp_header))
+#define ISIS_CSNP_HEADER_SIZE (sizeof(struct isis_csnp_header))
+#define ISIS_PSNP_HEADER_SIZE (sizeof(struct isis_psnp_header))
+
+void
+isoclns_print(netdissect_options *ndo, const u_char *p, u_int length)
+{
+ ndo->ndo_protocol = "isoclns";
+
+ if (ndo->ndo_eflag)
+ ND_PRINT("OSI NLPID %s (0x%02x): ",
+ tok2str(nlpid_values, "Unknown", GET_U_1(p)),
+ GET_U_1(p));
+
+ switch (GET_U_1(p)) {
+
+ case NLPID_CLNP:
+ if (!clnp_print(ndo, p, length))
+ print_unknown_data(ndo, p, "\n\t", length);
+ break;
+
+ case NLPID_ESIS:
+ esis_print(ndo, p, length);
+ return;
+
+ case NLPID_ISIS:
+ if (!isis_print(ndo, p, length))
+ print_unknown_data(ndo, p, "\n\t", length);
+ break;
+
+ case NLPID_NULLNS:
+ ND_PRINT("%slength: %u", ndo->ndo_eflag ? "" : ", ", length);
+ break;
+
+ case NLPID_Q933:
+ q933_print(ndo, p + 1, length - 1);
+ break;
+
+ case NLPID_IP:
+ ip_print(ndo, p + 1, length - 1);
+ break;
+
+ case NLPID_IP6:
+ ip6_print(ndo, p + 1, length - 1);
+ break;
+
+ case NLPID_PPP:
+ ppp_print(ndo, p + 1, length - 1);
+ break;
+
+ default:
+ if (!ndo->ndo_eflag)
+ ND_PRINT("OSI NLPID 0x%02x unknown", GET_U_1(p));
+ ND_PRINT("%slength: %u", ndo->ndo_eflag ? "" : ", ", length);
+ if (length > 1)
+ print_unknown_data(ndo, p, "\n\t", length);
+ break;
+ }
+}
+
+#define CLNP_PDU_ER 1
+#define CLNP_PDU_DT 28
+#define CLNP_PDU_MD 29
+#define CLNP_PDU_ERQ 30
+#define CLNP_PDU_ERP 31
+
+static const struct tok clnp_pdu_values[] = {
+ { CLNP_PDU_ER, "Error Report"},
+ { CLNP_PDU_MD, "MD"},
+ { CLNP_PDU_DT, "Data"},
+ { CLNP_PDU_ERQ, "Echo Request"},
+ { CLNP_PDU_ERP, "Echo Response"},
+ { 0, NULL }
+};
+
+struct clnp_header_t {
+ nd_uint8_t nlpid;
+ nd_uint8_t length_indicator;
+ nd_uint8_t version;
+ nd_uint8_t lifetime; /* units of 500ms */
+ nd_uint8_t type;
+ nd_uint16_t segment_length;
+ nd_uint16_t cksum;
+};
+
+struct clnp_segment_header_t {
+ nd_uint16_t data_unit_id;
+ nd_uint16_t segment_offset;
+ nd_uint16_t total_length;
+};
+
+/*
+ * clnp_print
+ * Decode CLNP packets. Return 0 on error.
+ */
+
+static int
+clnp_print(netdissect_options *ndo,
+ const uint8_t *pptr, u_int length)
+{
+ const uint8_t *optr,*source_address,*dest_address;
+ u_int li,li_remaining,tlen,nsap_offset,source_address_length,dest_address_length, clnp_pdu_type, clnp_flags;
+ const struct clnp_header_t *clnp_header;
+ const struct clnp_segment_header_t *clnp_segment_header;
+ uint8_t rfd_error,rfd_error_major,rfd_error_minor;
+
+ ndo->ndo_protocol = "clnp";
+ clnp_header = (const struct clnp_header_t *) pptr;
+ ND_TCHECK_SIZE(clnp_header);
+
+ li = GET_U_1(clnp_header->length_indicator);
+ li_remaining = li;
+ optr = pptr;
+
+ if (!ndo->ndo_eflag)
+ nd_print_protocol_caps(ndo);
+
+ /*
+ * Sanity checking of the header.
+ */
+
+ if (GET_U_1(clnp_header->version) != CLNP_VERSION) {
+ ND_PRINT("version %u packet not supported",
+ GET_U_1(clnp_header->version));
+ return (0);
+ }
+
+ if (li > length) {
+ ND_PRINT(" length indicator(%u) > PDU size (%u)!", li, length);
+ return (0);
+ }
+
+ if (li < sizeof(struct clnp_header_t)) {
+ ND_PRINT(" length indicator %u < min PDU size:", li);
+ while (pptr < ndo->ndo_snapend) {
+ ND_PRINT("%02X", GET_U_1(pptr));
+ pptr++;
+ }
+ return (0);
+ }
+
+ /* FIXME further header sanity checking */
+
+ clnp_pdu_type = GET_U_1(clnp_header->type) & CLNP_PDU_TYPE_MASK;
+ clnp_flags = GET_U_1(clnp_header->type) & CLNP_FLAG_MASK;
+
+ pptr += sizeof(struct clnp_header_t);
+ li_remaining -= sizeof(struct clnp_header_t);
+
+ if (li_remaining < 1) {
+ ND_PRINT("li < size of fixed part of CLNP header and addresses");
+ return (0);
+ }
+ dest_address_length = GET_U_1(pptr);
+ pptr += 1;
+ li_remaining -= 1;
+ if (li_remaining < dest_address_length) {
+ ND_PRINT("li < size of fixed part of CLNP header and addresses");
+ return (0);
+ }
+ ND_TCHECK_LEN(pptr, dest_address_length);
+ dest_address = pptr;
+ pptr += dest_address_length;
+ li_remaining -= dest_address_length;
+
+ if (li_remaining < 1) {
+ ND_PRINT("li < size of fixed part of CLNP header and addresses");
+ return (0);
+ }
+ source_address_length = GET_U_1(pptr);
+ pptr += 1;
+ li_remaining -= 1;
+ if (li_remaining < source_address_length) {
+ ND_PRINT("li < size of fixed part of CLNP header and addresses");
+ return (0);
+ }
+ ND_TCHECK_LEN(pptr, source_address_length);
+ source_address = pptr;
+ pptr += source_address_length;
+ li_remaining -= source_address_length;
+
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT("%s%s > %s, %s, length %u",
+ ndo->ndo_eflag ? "" : ", ",
+ GET_ISONSAP_STRING(source_address, source_address_length),
+ GET_ISONSAP_STRING(dest_address, dest_address_length),
+ tok2str(clnp_pdu_values,"unknown (%u)",clnp_pdu_type),
+ length);
+ return (1);
+ }
+ ND_PRINT("%slength %u", ndo->ndo_eflag ? "" : ", ", length);
+
+ ND_PRINT("\n\t%s PDU, hlen: %u, v: %u, lifetime: %u.%us, Segment PDU length: %u, checksum: 0x%04x",
+ tok2str(clnp_pdu_values, "unknown (%u)",clnp_pdu_type),
+ GET_U_1(clnp_header->length_indicator),
+ GET_U_1(clnp_header->version),
+ GET_U_1(clnp_header->lifetime)/2,
+ (GET_U_1(clnp_header->lifetime)%2)*5,
+ GET_BE_U_2(clnp_header->segment_length),
+ GET_BE_U_2(clnp_header->cksum));
+
+ osi_print_cksum(ndo, optr, GET_BE_U_2(clnp_header->cksum), 7,
+ GET_U_1(clnp_header->length_indicator));
+
+ ND_PRINT("\n\tFlags [%s]",
+ bittok2str(clnp_flag_values, "none", clnp_flags));
+
+ ND_PRINT("\n\tsource address (length %u): %s\n\tdest address (length %u): %s",
+ source_address_length,
+ GET_ISONSAP_STRING(source_address, source_address_length),
+ dest_address_length,
+ GET_ISONSAP_STRING(dest_address, dest_address_length));
+
+ if (clnp_flags & CLNP_SEGMENT_PART) {
+ if (li_remaining < sizeof(struct clnp_segment_header_t)) {
+ ND_PRINT("li < size of fixed part of CLNP header, addresses, and segment part");
+ return (0);
+ }
+ clnp_segment_header = (const struct clnp_segment_header_t *) pptr;
+ ND_TCHECK_SIZE(clnp_segment_header);
+ ND_PRINT("\n\tData Unit ID: 0x%04x, Segment Offset: %u, Total PDU Length: %u",
+ GET_BE_U_2(clnp_segment_header->data_unit_id),
+ GET_BE_U_2(clnp_segment_header->segment_offset),
+ GET_BE_U_2(clnp_segment_header->total_length));
+ pptr+=sizeof(struct clnp_segment_header_t);
+ li_remaining-=sizeof(struct clnp_segment_header_t);
+ }
+
+ /* now walk the options */
+ while (li_remaining != 0) {
+ u_int op, opli;
+ const uint8_t *tptr;
+
+ if (li_remaining < 2) {
+ ND_PRINT(", bad opts/li");
+ return (0);
+ }
+ op = GET_U_1(pptr);
+ opli = GET_U_1(pptr + 1);
+ pptr += 2;
+ li_remaining -= 2;
+ if (opli > li_remaining) {
+ ND_PRINT(", opt (%u) too long", op);
+ return (0);
+ }
+ ND_TCHECK_LEN(pptr, opli);
+ li_remaining -= opli;
+ tptr = pptr;
+ tlen = opli;
+
+ ND_PRINT("\n\t %s Option #%u, length %u, value: ",
+ tok2str(clnp_option_values,"Unknown",op),
+ op,
+ opli);
+
+ /*
+ * We've already checked that the entire option is present
+ * in the captured packet with the ND_TCHECK_LEN() call.
+ * Therefore, we don't need to do ND_TCHECK()/ND_TCHECK_LEN()
+ * checks.
+ * We do, however, need to check tlen, to make sure we
+ * don't run past the end of the option.
+ */
+ switch (op) {
+
+
+ case CLNP_OPTION_ROUTE_RECORDING: /* those two options share the format */
+ case CLNP_OPTION_SOURCE_ROUTING:
+ if (tlen < 2) {
+ ND_PRINT(", bad opt len");
+ return (0);
+ }
+ ND_PRINT("%s %s",
+ tok2str(clnp_option_sr_rr_values,"Unknown",GET_U_1(tptr)),
+ tok2str(clnp_option_sr_rr_string_values, "Unknown Option %u", op));
+ nsap_offset=GET_U_1(tptr + 1);
+ if (nsap_offset == 0) {
+ ND_PRINT(" Bad NSAP offset (0)");
+ break;
+ }
+ nsap_offset-=1; /* offset to nsap list */
+ if (nsap_offset > tlen) {
+ ND_PRINT(" Bad NSAP offset (past end of option)");
+ break;
+ }
+ tptr+=nsap_offset;
+ tlen-=nsap_offset;
+ while (tlen > 0) {
+ source_address_length=GET_U_1(tptr);
+ if (tlen < source_address_length+1) {
+ ND_PRINT("\n\t NSAP address goes past end of option");
+ break;
+ }
+ if (source_address_length > 0) {
+ source_address=(tptr+1);
+ ND_PRINT("\n\t NSAP address (length %u): %s",
+ source_address_length,
+ GET_ISONSAP_STRING(source_address, source_address_length));
+ }
+ tlen-=source_address_length+1;
+ }
+ break;
+
+ case CLNP_OPTION_PRIORITY:
+ if (tlen < 1) {
+ ND_PRINT(", bad opt len");
+ return (0);
+ }
+ ND_PRINT("0x%1x", GET_U_1(tptr)&0x0f);
+ break;
+
+ case CLNP_OPTION_QOS_MAINTENANCE:
+ if (tlen < 1) {
+ ND_PRINT(", bad opt len");
+ return (0);
+ }
+ ND_PRINT("\n\t Format Code: %s",
+ tok2str(clnp_option_scope_values, "Reserved", GET_U_1(tptr) & CLNP_OPTION_SCOPE_MASK));
+
+ if ((GET_U_1(tptr)&CLNP_OPTION_SCOPE_MASK) == CLNP_OPTION_SCOPE_GLOBAL)
+ ND_PRINT("\n\t QoS Flags [%s]",
+ bittok2str(clnp_option_qos_global_values,
+ "none",
+ GET_U_1(tptr)&CLNP_OPTION_OPTION_QOS_MASK));
+ break;
+
+ case CLNP_OPTION_SECURITY:
+ if (tlen < 2) {
+ ND_PRINT(", bad opt len");
+ return (0);
+ }
+ ND_PRINT("\n\t Format Code: %s, Security-Level %u",
+ tok2str(clnp_option_scope_values,"Reserved",GET_U_1(tptr)&CLNP_OPTION_SCOPE_MASK),
+ GET_U_1(tptr + 1));
+ break;
+
+ case CLNP_OPTION_DISCARD_REASON:
+ if (tlen < 1) {
+ ND_PRINT(", bad opt len");
+ return (0);
+ }
+ rfd_error = GET_U_1(tptr);
+ rfd_error_major = (rfd_error&0xf0) >> 4;
+ rfd_error_minor = rfd_error&0x0f;
+ ND_PRINT("\n\t Class: %s Error (0x%01x), %s (0x%01x)",
+ tok2str(clnp_option_rfd_class_values,"Unknown",rfd_error_major),
+ rfd_error_major,
+ tok2str(clnp_option_rfd_error_class[rfd_error_major],"Unknown",rfd_error_minor),
+ rfd_error_minor);
+ break;
+
+ case CLNP_OPTION_PADDING:
+ ND_PRINT("padding data");
+ break;
+
+ /*
+ * FIXME those are the defined Options that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+
+ default:
+ print_unknown_data(ndo, tptr, "\n\t ", opli);
+ break;
+ }
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo, pptr, "\n\t ", opli);
+ pptr += opli;
+ }
+
+ switch (clnp_pdu_type) {
+
+ case CLNP_PDU_ER: /* fall through */
+ case CLNP_PDU_ERP:
+ if (GET_U_1(pptr) == NLPID_CLNP) {
+ ND_PRINT("\n\t-----original packet-----\n\t");
+ /* FIXME recursion protection */
+ clnp_print(ndo, pptr, length - li);
+ break;
+ }
+
+ /* The cases above break from the switch block if they see and print
+ * a CLNP header in the Data part. For an Error Report PDU this is
+ * described in Section 7.9.6 of ITU X.233 (1997 E), also known as
+ * ISO/IEC 8473-1:1998(E). It is not clear why in this code the same
+ * applies to an Echo Response PDU, as the standard does not specify
+ * the contents -- could be a proprietary extension or a bug. In either
+ * case, if the Data part does not contain a CLNP header, its structure
+ * is considered unknown and the decoding falls through to print the
+ * contents as-is.
+ */
+ ND_FALL_THROUGH;
+
+ case CLNP_PDU_DT:
+ case CLNP_PDU_MD:
+ case CLNP_PDU_ERQ:
+
+ default:
+ /* dump the PDU specific data */
+ if (length > ND_BYTES_BETWEEN(pptr, optr)) {
+ ND_PRINT("\n\t undecoded non-header data, length %u", length-li);
+ print_unknown_data(ndo, pptr, "\n\t ", length - ND_BYTES_BETWEEN(pptr, optr));
+ }
+ }
+
+ return (1);
+
+ trunc:
+ nd_print_trunc(ndo);
+ return (1);
+
+}
+
+
+#define ESIS_PDU_REDIRECT 6
+#define ESIS_PDU_ESH 2
+#define ESIS_PDU_ISH 4
+
+static const struct tok esis_pdu_values[] = {
+ { ESIS_PDU_REDIRECT, "redirect"},
+ { ESIS_PDU_ESH, "ESH"},
+ { ESIS_PDU_ISH, "ISH"},
+ { 0, NULL }
+};
+
+struct esis_header_t {
+ nd_uint8_t nlpid;
+ nd_uint8_t length_indicator;
+ nd_uint8_t version;
+ nd_byte reserved;
+ nd_uint8_t type;
+ nd_uint16_t holdtime;
+ nd_uint16_t cksum;
+};
+
+static void
+esis_print(netdissect_options *ndo,
+ const uint8_t *pptr, u_int length)
+{
+ const uint8_t *optr;
+ u_int li, version, esis_pdu_type, source_address_length, source_address_number;
+ const struct esis_header_t *esis_header;
+
+ ndo->ndo_protocol = "esis";
+ if (!ndo->ndo_eflag)
+ ND_PRINT("ES-IS");
+
+ if (length <= 2) {
+ ND_PRINT(ndo->ndo_qflag ? "bad pkt!" : "no header at all!");
+ return;
+ }
+
+ esis_header = (const struct esis_header_t *) pptr;
+ ND_TCHECK_SIZE(esis_header);
+ li = GET_U_1(esis_header->length_indicator);
+ optr = pptr;
+
+ /*
+ * Sanity checking of the header.
+ */
+
+ if (GET_U_1(esis_header->nlpid) != NLPID_ESIS) {
+ ND_PRINT(" nlpid 0x%02x packet not supported",
+ GET_U_1(esis_header->nlpid));
+ return;
+ }
+
+ version = GET_U_1(esis_header->version);
+ if (version != ESIS_VERSION) {
+ ND_PRINT(" version %u packet not supported", version);
+ return;
+ }
+
+ if (li > length) {
+ ND_PRINT(" length indicator(%u) > PDU size (%u)!", li, length);
+ return;
+ }
+
+ if (li < sizeof(struct esis_header_t) + 2) {
+ ND_PRINT(" length indicator %u < min PDU size:", li);
+ while (pptr < ndo->ndo_snapend) {
+ ND_PRINT("%02X", GET_U_1(pptr));
+ pptr++;
+ }
+ return;
+ }
+
+ esis_pdu_type = GET_U_1(esis_header->type) & ESIS_PDU_TYPE_MASK;
+
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT("%s%s, length %u",
+ ndo->ndo_eflag ? "" : ", ",
+ tok2str(esis_pdu_values,"unknown type (%u)",esis_pdu_type),
+ length);
+ return;
+ } else
+ ND_PRINT("%slength %u\n\t%s (%u)",
+ ndo->ndo_eflag ? "" : ", ",
+ length,
+ tok2str(esis_pdu_values,"unknown type: %u", esis_pdu_type),
+ esis_pdu_type);
+
+ ND_PRINT(", v: %u%s", version, version == ESIS_VERSION ? "" : "unsupported" );
+ ND_PRINT(", checksum: 0x%04x", GET_BE_U_2(esis_header->cksum));
+
+ osi_print_cksum(ndo, pptr, GET_BE_U_2(esis_header->cksum), 7,
+ li);
+
+ ND_PRINT(", holding time: %us, length indicator: %u",
+ GET_BE_U_2(esis_header->holdtime), li);
+
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo, optr, "\n\t", sizeof(struct esis_header_t));
+
+ pptr += sizeof(struct esis_header_t);
+ li -= sizeof(struct esis_header_t);
+
+ switch (esis_pdu_type) {
+ case ESIS_PDU_REDIRECT: {
+ const uint8_t *dst, *snpa, *neta;
+ u_int dstl, snpal, netal;
+
+ ND_TCHECK_1(pptr);
+ if (li < 1) {
+ ND_PRINT(", bad redirect/li");
+ return;
+ }
+ dstl = GET_U_1(pptr);
+ pptr++;
+ li--;
+ ND_TCHECK_LEN(pptr, dstl);
+ if (li < dstl) {
+ ND_PRINT(", bad redirect/li");
+ return;
+ }
+ dst = pptr;
+ pptr += dstl;
+ li -= dstl;
+ ND_PRINT("\n\t %s", GET_ISONSAP_STRING(dst, dstl));
+
+ ND_TCHECK_1(pptr);
+ if (li < 1) {
+ ND_PRINT(", bad redirect/li");
+ return;
+ }
+ snpal = GET_U_1(pptr);
+ pptr++;
+ li--;
+ ND_TCHECK_LEN(pptr, snpal);
+ if (li < snpal) {
+ ND_PRINT(", bad redirect/li");
+ return;
+ }
+ snpa = pptr;
+ pptr += snpal;
+ li -= snpal;
+ ND_TCHECK_1(pptr);
+ if (li < 1) {
+ ND_PRINT(", bad redirect/li");
+ return;
+ }
+ netal = GET_U_1(pptr);
+ pptr++;
+ ND_TCHECK_LEN(pptr, netal);
+ if (li < netal) {
+ ND_PRINT(", bad redirect/li");
+ return;
+ }
+ neta = pptr;
+ pptr += netal;
+ li -= netal;
+
+ if (snpal == MAC_ADDR_LEN)
+ ND_PRINT("\n\t SNPA (length: %u): %s",
+ snpal,
+ GET_ETHERADDR_STRING(snpa));
+ else
+ ND_PRINT("\n\t SNPA (length: %u): %s",
+ snpal,
+ GET_LINKADDR_STRING(snpa, LINKADDR_OTHER, snpal));
+ if (netal != 0)
+ ND_PRINT("\n\t NET (length: %u) %s",
+ netal,
+ GET_ISONSAP_STRING(neta, netal));
+ break;
+ }
+
+ case ESIS_PDU_ESH:
+ ND_TCHECK_1(pptr);
+ if (li < 1) {
+ ND_PRINT(", bad esh/li");
+ return;
+ }
+ source_address_number = GET_U_1(pptr);
+ pptr++;
+ li--;
+
+ ND_PRINT("\n\t Number of Source Addresses: %u", source_address_number);
+
+ while (source_address_number > 0) {
+ ND_TCHECK_1(pptr);
+ if (li < 1) {
+ ND_PRINT(", bad esh/li");
+ return;
+ }
+ source_address_length = GET_U_1(pptr);
+ pptr++;
+ li--;
+
+ ND_TCHECK_LEN(pptr, source_address_length);
+ if (li < source_address_length) {
+ ND_PRINT(", bad esh/li");
+ return;
+ }
+ ND_PRINT("\n\t NET (length: %u): %s",
+ source_address_length,
+ GET_ISONSAP_STRING(pptr, source_address_length));
+ pptr += source_address_length;
+ li -= source_address_length;
+ source_address_number--;
+ }
+
+ break;
+
+ case ESIS_PDU_ISH: {
+ ND_TCHECK_1(pptr);
+ if (li < 1) {
+ ND_PRINT(", bad ish/li");
+ return;
+ }
+ source_address_length = GET_U_1(pptr);
+ pptr++;
+ li--;
+ ND_TCHECK_LEN(pptr, source_address_length);
+ if (li < source_address_length) {
+ ND_PRINT(", bad ish/li");
+ return;
+ }
+ ND_PRINT("\n\t NET (length: %u): %s", source_address_length, GET_ISONSAP_STRING(pptr, source_address_length));
+ pptr += source_address_length;
+ li -= source_address_length;
+ break;
+ }
+
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ /*
+ * If there's at least one byte to print, print
+ * it/them.
+ */
+ if (ND_TTEST_LEN(pptr, 1))
+ print_unknown_data(ndo, pptr, "\n\t ", ND_BYTES_AVAILABLE_AFTER(pptr));
+ }
+ return;
+ }
+
+ /* now walk the options */
+ while (li != 0) {
+ u_int op, opli;
+ const uint8_t *tptr;
+
+ if (li < 2) {
+ ND_PRINT(", bad opts/li");
+ return;
+ }
+ op = GET_U_1(pptr);
+ opli = GET_U_1(pptr + 1);
+ pptr += 2;
+ li -= 2;
+ if (opli > li) {
+ ND_PRINT(", opt (%u) too long", op);
+ return;
+ }
+ li -= opli;
+ tptr = pptr;
+
+ ND_PRINT("\n\t %s Option #%u, length %u, value: ",
+ tok2str(esis_option_values,"Unknown",op),
+ op,
+ opli);
+
+ switch (op) {
+
+ case ESIS_OPTION_ES_CONF_TIME:
+ if (opli == 2) {
+ ND_TCHECK_2(pptr);
+ ND_PRINT("%us", GET_BE_U_2(tptr));
+ } else
+ ND_PRINT("(bad length)");
+ break;
+
+ case ESIS_OPTION_PROTOCOLS:
+ while (opli>0) {
+ ND_PRINT("%s (0x%02x)",
+ tok2str(nlpid_values,
+ "unknown",
+ GET_U_1(tptr)),
+ GET_U_1(tptr));
+ if (opli>1) /* further NPLIDs ? - put comma */
+ ND_PRINT(", ");
+ tptr++;
+ opli--;
+ }
+ break;
+
+ /*
+ * FIXME those are the defined Options that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+
+ case ESIS_OPTION_QOS_MAINTENANCE:
+ case ESIS_OPTION_SECURITY:
+ case ESIS_OPTION_PRIORITY:
+ case ESIS_OPTION_ADDRESS_MASK:
+ case ESIS_OPTION_SNPA_MASK:
+
+ default:
+ print_unknown_data(ndo, tptr, "\n\t ", opli);
+ break;
+ }
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo, pptr, "\n\t ", opli);
+ pptr += opli;
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+isis_print_mcid(netdissect_options *ndo,
+ const struct isis_spb_mcid *mcid)
+{
+ int i;
+
+ ND_TCHECK_SIZE(mcid);
+ ND_PRINT("ID: %u, Name: ", GET_U_1(mcid->format_id));
+
+ nd_printjnp(ndo, mcid->name, sizeof(mcid->name));
+
+ ND_PRINT("\n\t Lvl: %u", GET_BE_U_2(mcid->revision_lvl));
+
+ ND_PRINT(", Digest: ");
+
+ for(i=0;i<16;i++)
+ ND_PRINT("%.2x ", mcid->digest[i]);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static int
+isis_print_mt_port_cap_subtlv(netdissect_options *ndo,
+ const uint8_t *tptr, u_int len)
+{
+ u_int stlv_type, stlv_len;
+ const struct isis_subtlv_spb_mcid *subtlv_spb_mcid;
+ int i;
+
+ while (len > 2)
+ {
+ stlv_type = GET_U_1(tptr);
+ stlv_len = GET_U_1(tptr + 1);
+
+ /* first lets see if we know the subTLVs name*/
+ ND_PRINT("\n\t %s subTLV #%u, length: %u",
+ tok2str(isis_mt_port_cap_subtlv_values, "unknown", stlv_type),
+ stlv_type,
+ stlv_len);
+
+ tptr += 2;
+ /*len -= TLV_TYPE_LEN_OFFSET;*/
+ len -= 2;
+
+ /* Make sure the subTLV fits within the space left */
+ if (len < stlv_len)
+ goto subtlv_too_long;
+ /* Make sure the entire subTLV is in the captured data */
+ ND_TCHECK_LEN(tptr, stlv_len);
+
+ switch (stlv_type)
+ {
+ case ISIS_SUBTLV_SPB_MCID:
+ {
+ if (stlv_len < ISIS_SUBTLV_SPB_MCID_MIN_LEN)
+ goto subtlv_too_short;
+
+ subtlv_spb_mcid = (const struct isis_subtlv_spb_mcid *)tptr;
+
+ ND_PRINT("\n\t MCID: ");
+ isis_print_mcid(ndo, &(subtlv_spb_mcid->mcid));
+
+ /*tptr += SPB_MCID_MIN_LEN;
+ len -= SPB_MCID_MIN_LEN; */
+
+ ND_PRINT("\n\t AUX-MCID: ");
+ isis_print_mcid(ndo, &(subtlv_spb_mcid->aux_mcid));
+
+ /*tptr += SPB_MCID_MIN_LEN;
+ len -= SPB_MCID_MIN_LEN; */
+ tptr += ISIS_SUBTLV_SPB_MCID_MIN_LEN;
+ len -= ISIS_SUBTLV_SPB_MCID_MIN_LEN;
+ stlv_len -= ISIS_SUBTLV_SPB_MCID_MIN_LEN;
+
+ break;
+ }
+
+ case ISIS_SUBTLV_SPB_DIGEST:
+ {
+ if (stlv_len < ISIS_SUBTLV_SPB_DIGEST_MIN_LEN)
+ goto subtlv_too_short;
+
+ ND_PRINT("\n\t RES: %u V: %u A: %u D: %u",
+ (GET_U_1(tptr) >> 5),
+ ((GET_U_1(tptr) >> 4) & 0x01),
+ ((GET_U_1(tptr) >> 2) & 0x03),
+ (GET_U_1(tptr) & 0x03));
+
+ tptr++;
+
+ ND_PRINT("\n\t Digest: ");
+
+ for(i=1;i<=8; i++)
+ {
+ ND_PRINT("%08x ", GET_BE_U_4(tptr));
+ if (i%4 == 0 && i != 8)
+ ND_PRINT("\n\t ");
+ tptr += 4;
+ }
+
+ len -= ISIS_SUBTLV_SPB_DIGEST_MIN_LEN;
+ stlv_len -= ISIS_SUBTLV_SPB_DIGEST_MIN_LEN;
+
+ break;
+ }
+
+ case ISIS_SUBTLV_SPB_BVID:
+ {
+ while (stlv_len != 0)
+ {
+ if (stlv_len < 4)
+ goto subtlv_too_short;
+ ND_PRINT("\n\t ECT: %08x",
+ GET_BE_U_4(tptr));
+
+ tptr += 4;
+ len -= 4;
+ stlv_len -= 4;
+
+ if (stlv_len < 2)
+ goto subtlv_too_short;
+ ND_PRINT(" BVID: %u, U:%01x M:%01x ",
+ (GET_BE_U_2(tptr) >> 4) ,
+ (GET_BE_U_2(tptr) >> 3) & 0x01,
+ (GET_BE_U_2(tptr) >> 2) & 0x01);
+
+ tptr += 2;
+ len -= 2;
+ stlv_len -= 2;
+ }
+
+ break;
+ }
+
+ default:
+ break;
+ }
+ tptr += stlv_len;
+ len -= stlv_len;
+ }
+ return (0);
+
+trunc:
+ nd_print_trunc(ndo);
+ return (1);
+
+subtlv_too_long:
+ ND_PRINT(" (> containing TLV length)");
+ return (1);
+
+subtlv_too_short:
+ ND_PRINT(" (too short)");
+ return (1);
+}
+
+static int
+isis_print_mt_capability_subtlv(netdissect_options *ndo,
+ const uint8_t *tptr, u_int len)
+{
+ u_int stlv_type, stlv_len, treecount;
+
+ while (len > 2)
+ {
+ stlv_type = GET_U_1(tptr);
+ stlv_len = GET_U_1(tptr + 1);
+ tptr += 2;
+ len -= 2;
+
+ /* first lets see if we know the subTLVs name*/
+ ND_PRINT("\n\t %s subTLV #%u, length: %u",
+ tok2str(isis_mt_capability_subtlv_values, "unknown", stlv_type),
+ stlv_type,
+ stlv_len);
+
+ /* Make sure the subTLV fits within the space left */
+ if (len < stlv_len)
+ goto subtlv_too_long;
+ /* Make sure the entire subTLV is in the captured data */
+ ND_TCHECK_LEN(tptr, stlv_len);
+
+ switch (stlv_type)
+ {
+ case ISIS_SUBTLV_SPB_INSTANCE:
+ if (stlv_len < ISIS_SUBTLV_SPB_INSTANCE_MIN_LEN)
+ goto subtlv_too_short;
+
+ ND_PRINT("\n\t CIST Root-ID: %08x", GET_BE_U_4(tptr));
+ tptr += 4;
+ ND_PRINT(" %08x", GET_BE_U_4(tptr));
+ tptr += 4;
+ ND_PRINT(", Path Cost: %08x", GET_BE_U_4(tptr));
+ tptr += 4;
+ ND_PRINT(", Prio: %u", GET_BE_U_2(tptr));
+ tptr += 2;
+ ND_PRINT("\n\t RES: %u",
+ GET_BE_U_2(tptr) >> 5);
+ ND_PRINT(", V: %u",
+ (GET_BE_U_2(tptr) >> 4) & 0x0001);
+ ND_PRINT(", SPSource-ID: %u",
+ (GET_BE_U_4(tptr) & 0x000fffff));
+ tptr += 4;
+ ND_PRINT(", No of Trees: %x", GET_U_1(tptr));
+
+ treecount = GET_U_1(tptr);
+ tptr++;
+
+ len -= ISIS_SUBTLV_SPB_INSTANCE_MIN_LEN;
+ stlv_len -= ISIS_SUBTLV_SPB_INSTANCE_MIN_LEN;
+
+ while (treecount)
+ {
+ if (stlv_len < ISIS_SUBTLV_SPB_INSTANCE_VLAN_TUPLE_LEN)
+ goto trunc;
+
+ ND_PRINT("\n\t U:%u, M:%u, A:%u, RES:%u",
+ GET_U_1(tptr) >> 7,
+ (GET_U_1(tptr) >> 6) & 0x01,
+ (GET_U_1(tptr) >> 5) & 0x01,
+ (GET_U_1(tptr) & 0x1f));
+
+ tptr++;
+
+ ND_PRINT(", ECT: %08x", GET_BE_U_4(tptr));
+
+ tptr += 4;
+
+ ND_PRINT(", BVID: %u, SPVID: %u",
+ (GET_BE_U_3(tptr) >> 12) & 0x000fff,
+ GET_BE_U_3(tptr) & 0x000fff);
+
+ tptr += 3;
+ len -= ISIS_SUBTLV_SPB_INSTANCE_VLAN_TUPLE_LEN;
+ stlv_len -= ISIS_SUBTLV_SPB_INSTANCE_VLAN_TUPLE_LEN;
+ treecount--;
+ }
+
+ break;
+
+ case ISIS_SUBTLV_SPBM_SI:
+ if (stlv_len < 8)
+ goto trunc;
+
+ ND_PRINT("\n\t BMAC: %08x", GET_BE_U_4(tptr));
+ tptr += 4;
+ ND_PRINT("%04x", GET_BE_U_2(tptr));
+ tptr += 2;
+
+ ND_PRINT(", RES: %u, VID: %u", GET_BE_U_2(tptr) >> 12,
+ (GET_BE_U_2(tptr)) & 0x0fff);
+
+ tptr += 2;
+ len -= 8;
+ stlv_len -= 8;
+
+ while (stlv_len >= 4) {
+ ND_PRINT("\n\t T: %u, R: %u, RES: %u, ISID: %u",
+ (GET_BE_U_4(tptr) >> 31),
+ (GET_BE_U_4(tptr) >> 30) & 0x01,
+ (GET_BE_U_4(tptr) >> 24) & 0x03f,
+ (GET_BE_U_4(tptr)) & 0x0ffffff);
+
+ tptr += 4;
+ len -= 4;
+ stlv_len -= 4;
+ }
+
+ break;
+
+ default:
+ break;
+ }
+ tptr += stlv_len;
+ len -= stlv_len;
+ }
+ return (0);
+
+trunc:
+ nd_print_trunc(ndo);
+ return (1);
+
+subtlv_too_long:
+ ND_PRINT(" (> containing TLV length)");
+ return (1);
+
+subtlv_too_short:
+ ND_PRINT(" (too short)");
+ return (1);
+}
+
+/* shared routine for printing system, node and lsp-ids */
+static char *
+isis_print_id(netdissect_options *ndo, const uint8_t *cp, u_int id_len)
+{
+ u_int i;
+ static char id[sizeof("xxxx.xxxx.xxxx.yy-zz")];
+ char *pos = id;
+ u_int sysid_len;
+
+ sysid_len = SYSTEM_ID_LEN;
+ if (sysid_len > id_len)
+ sysid_len = id_len;
+ for (i = 1; i <= sysid_len; i++) {
+ snprintf(pos, sizeof(id) - (pos - id), "%02x", GET_U_1(cp));
+ cp++;
+ pos += strlen(pos);
+ if (i == 2 || i == 4)
+ *pos++ = '.';
+ }
+ if (id_len >= NODE_ID_LEN) {
+ snprintf(pos, sizeof(id) - (pos - id), ".%02x", GET_U_1(cp));
+ cp++;
+ pos += strlen(pos);
+ }
+ if (id_len == LSP_ID_LEN)
+ snprintf(pos, sizeof(id) - (pos - id), "-%02x", GET_U_1(cp));
+ return (id);
+}
+
+/* print the 4-byte metric block which is common found in the old-style TLVs */
+static int
+isis_print_metric_block(netdissect_options *ndo,
+ const struct isis_metric_block *isis_metric_block)
+{
+ ND_PRINT(", Default Metric: %u, %s",
+ ISIS_LSP_TLV_METRIC_VALUE(isis_metric_block->metric_default),
+ ISIS_LSP_TLV_METRIC_IE(isis_metric_block->metric_default) ? "External" : "Internal");
+ if (!ISIS_LSP_TLV_METRIC_SUPPORTED(isis_metric_block->metric_delay))
+ ND_PRINT("\n\t\t Delay Metric: %u, %s",
+ ISIS_LSP_TLV_METRIC_VALUE(isis_metric_block->metric_delay),
+ ISIS_LSP_TLV_METRIC_IE(isis_metric_block->metric_delay) ? "External" : "Internal");
+ if (!ISIS_LSP_TLV_METRIC_SUPPORTED(isis_metric_block->metric_expense))
+ ND_PRINT("\n\t\t Expense Metric: %u, %s",
+ ISIS_LSP_TLV_METRIC_VALUE(isis_metric_block->metric_expense),
+ ISIS_LSP_TLV_METRIC_IE(isis_metric_block->metric_expense) ? "External" : "Internal");
+ if (!ISIS_LSP_TLV_METRIC_SUPPORTED(isis_metric_block->metric_error))
+ ND_PRINT("\n\t\t Error Metric: %u, %s",
+ ISIS_LSP_TLV_METRIC_VALUE(isis_metric_block->metric_error),
+ ISIS_LSP_TLV_METRIC_IE(isis_metric_block->metric_error) ? "External" : "Internal");
+
+ return(1); /* everything is ok */
+}
+
+static int
+isis_print_tlv_ip_reach(netdissect_options *ndo,
+ const uint8_t *cp, const char *ident, u_int length)
+{
+ int prefix_len;
+ const struct isis_tlv_ip_reach *tlv_ip_reach;
+
+ tlv_ip_reach = (const struct isis_tlv_ip_reach *)cp;
+
+ while (length > 0) {
+ if ((size_t)length < sizeof(*tlv_ip_reach)) {
+ ND_PRINT("short IPv4 Reachability (%u vs %zu)",
+ length,
+ sizeof(*tlv_ip_reach));
+ return (0);
+ }
+
+ ND_TCHECK_SIZE(tlv_ip_reach);
+
+ prefix_len = mask2plen(GET_IPV4_TO_HOST_ORDER(tlv_ip_reach->mask));
+
+ if (prefix_len == -1)
+ ND_PRINT("%sIPv4 prefix: %s mask %s",
+ ident,
+ GET_IPADDR_STRING(tlv_ip_reach->prefix),
+ GET_IPADDR_STRING(tlv_ip_reach->mask));
+ else
+ ND_PRINT("%sIPv4 prefix: %15s/%u",
+ ident,
+ GET_IPADDR_STRING(tlv_ip_reach->prefix),
+ prefix_len);
+
+ ND_PRINT(", Distribution: %s, Metric: %u, %s",
+ ISIS_LSP_TLV_METRIC_UPDOWN(tlv_ip_reach->isis_metric_block.metric_default) ? "down" : "up",
+ ISIS_LSP_TLV_METRIC_VALUE(tlv_ip_reach->isis_metric_block.metric_default),
+ ISIS_LSP_TLV_METRIC_IE(tlv_ip_reach->isis_metric_block.metric_default) ? "External" : "Internal");
+
+ if (!ISIS_LSP_TLV_METRIC_SUPPORTED(tlv_ip_reach->isis_metric_block.metric_delay))
+ ND_PRINT("%s Delay Metric: %u, %s",
+ ident,
+ ISIS_LSP_TLV_METRIC_VALUE(tlv_ip_reach->isis_metric_block.metric_delay),
+ ISIS_LSP_TLV_METRIC_IE(tlv_ip_reach->isis_metric_block.metric_delay) ? "External" : "Internal");
+
+ if (!ISIS_LSP_TLV_METRIC_SUPPORTED(tlv_ip_reach->isis_metric_block.metric_expense))
+ ND_PRINT("%s Expense Metric: %u, %s",
+ ident,
+ ISIS_LSP_TLV_METRIC_VALUE(tlv_ip_reach->isis_metric_block.metric_expense),
+ ISIS_LSP_TLV_METRIC_IE(tlv_ip_reach->isis_metric_block.metric_expense) ? "External" : "Internal");
+
+ if (!ISIS_LSP_TLV_METRIC_SUPPORTED(tlv_ip_reach->isis_metric_block.metric_error))
+ ND_PRINT("%s Error Metric: %u, %s",
+ ident,
+ ISIS_LSP_TLV_METRIC_VALUE(tlv_ip_reach->isis_metric_block.metric_error),
+ ISIS_LSP_TLV_METRIC_IE(tlv_ip_reach->isis_metric_block.metric_error) ? "External" : "Internal");
+
+ length -= sizeof(struct isis_tlv_ip_reach);
+ tlv_ip_reach++;
+ }
+ return (1);
+trunc:
+ return 0;
+}
+
+/*
+ * this is the common IP-REACH subTLV decoder it is called
+ * from various EXTD-IP REACH TLVs (135,235,236,237)
+ */
+
+static int
+isis_print_ip_reach_subtlv(netdissect_options *ndo,
+ const uint8_t *tptr, u_int subt, u_int subl,
+ const char *ident)
+{
+ /* first lets see if we know the subTLVs name*/
+ ND_PRINT("%s%s subTLV #%u, length: %u",
+ ident, tok2str(isis_ext_ip_reach_subtlv_values, "unknown", subt),
+ subt, subl);
+
+ ND_TCHECK_LEN(tptr, subl);
+
+ switch(subt) {
+ case ISIS_SUBTLV_EXTD_IP_REACH_MGMT_PREFIX_COLOR: /* fall through */
+ case ISIS_SUBTLV_EXTD_IP_REACH_ADMIN_TAG32:
+ while (subl >= 4) {
+ ND_PRINT(", 0x%08x (=%u)",
+ GET_BE_U_4(tptr),
+ GET_BE_U_4(tptr));
+ tptr+=4;
+ subl-=4;
+ }
+ break;
+ case ISIS_SUBTLV_EXTD_IP_REACH_ADMIN_TAG64:
+ while (subl >= 8) {
+ ND_PRINT(", 0x%08x%08x",
+ GET_BE_U_4(tptr),
+ GET_BE_U_4(tptr + 4));
+ tptr+=8;
+ subl-=8;
+ }
+ break;
+ case ISIS_SUBTLV_EXTD_IP_REACH_PREFIX_SID:
+ {
+ uint8_t algo, flags;
+ uint32_t sid;
+
+ flags = GET_U_1(tptr);
+ algo = GET_U_1(tptr+1);
+
+ if (flags & ISIS_PREFIX_SID_FLAG_V) {
+ if (subl < 5)
+ goto trunc;
+ sid = GET_BE_U_3(tptr+2);
+ tptr+=5;
+ subl-=5;
+ } else {
+ if (subl < 6)
+ goto trunc;
+ sid = GET_BE_U_4(tptr+2);
+ tptr+=6;
+ subl-=6;
+ }
+
+ ND_PRINT(", Flags [%s], Algo %s (%u), %s %u",
+ bittok2str(prefix_sid_flag_values, "None", flags),
+ tok2str(prefix_sid_algo_values, "Unknown", algo), algo,
+ flags & ISIS_PREFIX_SID_FLAG_V ? "label" : "index",
+ sid);
+ }
+ break;
+ default:
+ if (!print_unknown_data(ndo, tptr, "\n\t\t ", subl))
+ return(0);
+ break;
+ }
+ return(1);
+
+trunc:
+ nd_print_trunc(ndo);
+ return(0);
+}
+
+/*
+ * this is the common IS-REACH decoder it is called
+ * from various EXTD-IS REACH style TLVs (22,24,222)
+ */
+
+static int
+isis_print_ext_is_reach(netdissect_options *ndo,
+ const uint8_t *tptr, const char *ident, u_int tlv_type,
+ u_int tlv_remaining)
+{
+ char ident_buffer[20];
+ u_int subtlv_type,subtlv_len,subtlv_sum_len;
+ int proc_bytes = 0; /* how many bytes did we process ? */
+ u_int te_class,priority_level,gmpls_switch_cap;
+ union { /* int to float conversion buffer for several subTLVs */
+ float f;
+ uint32_t i;
+ } bw;
+
+ ND_TCHECK_LEN(tptr, NODE_ID_LEN);
+ if (tlv_remaining < NODE_ID_LEN)
+ return(0);
+
+ ND_PRINT("%sIS Neighbor: %s", ident, isis_print_id(ndo, tptr, NODE_ID_LEN));
+ tptr+=NODE_ID_LEN;
+ tlv_remaining-=NODE_ID_LEN;
+ proc_bytes+=NODE_ID_LEN;
+
+ if (tlv_type != ISIS_TLV_IS_ALIAS_ID) { /* the Alias TLV Metric field is implicit 0 */
+ ND_TCHECK_3(tptr);
+ if (tlv_remaining < 3)
+ return(0);
+ ND_PRINT(", Metric: %u", GET_BE_U_3(tptr));
+ tptr+=3;
+ tlv_remaining-=3;
+ proc_bytes+=3;
+ }
+
+ ND_TCHECK_1(tptr);
+ if (tlv_remaining < 1)
+ return(0);
+ subtlv_sum_len=GET_U_1(tptr); /* read out subTLV length */
+ tptr++;
+ tlv_remaining--;
+ proc_bytes++;
+ ND_PRINT(", %ssub-TLVs present",subtlv_sum_len ? "" : "no ");
+ if (subtlv_sum_len) {
+ ND_PRINT(" (%u)", subtlv_sum_len);
+ /* prepend the indent string */
+ snprintf(ident_buffer, sizeof(ident_buffer), "%s ",ident);
+ ident = ident_buffer;
+ while (subtlv_sum_len != 0) {
+ ND_TCHECK_2(tptr);
+ if (tlv_remaining < 2) {
+ ND_PRINT("%sRemaining data in TLV shorter than a subTLV header",ident);
+ proc_bytes += tlv_remaining;
+ break;
+ }
+ if (subtlv_sum_len < 2) {
+ ND_PRINT("%sRemaining data in subTLVs shorter than a subTLV header",ident);
+ proc_bytes += subtlv_sum_len;
+ break;
+ }
+ subtlv_type=GET_U_1(tptr);
+ subtlv_len=GET_U_1(tptr + 1);
+ tptr += 2;
+ tlv_remaining -= 2;
+ subtlv_sum_len -= 2;
+ proc_bytes += 2;
+ ND_PRINT("%s%s subTLV #%u, length: %u",
+ ident, tok2str(isis_ext_is_reach_subtlv_values, "unknown", subtlv_type),
+ subtlv_type, subtlv_len);
+
+ if (subtlv_sum_len < subtlv_len) {
+ ND_PRINT(" (remaining data in subTLVs shorter than the current subTLV)");
+ proc_bytes += subtlv_sum_len;
+ break;
+ }
+
+ if (tlv_remaining < subtlv_len) {
+ ND_PRINT(" (> remaining tlv length)");
+ proc_bytes += tlv_remaining;
+ break;
+ }
+
+ ND_TCHECK_LEN(tptr, subtlv_len);
+
+ switch(subtlv_type) {
+ case ISIS_SUBTLV_EXT_IS_REACH_ADMIN_GROUP:
+ case ISIS_SUBTLV_EXT_IS_REACH_LINK_LOCAL_REMOTE_ID:
+ case ISIS_SUBTLV_EXT_IS_REACH_LINK_REMOTE_ID:
+ if (subtlv_len >= 4) {
+ ND_PRINT(", 0x%08x", GET_BE_U_4(tptr));
+ if (subtlv_len == 8) /* rfc4205 */
+ ND_PRINT(", 0x%08x", GET_BE_U_4(tptr + 4));
+ }
+ break;
+ case ISIS_SUBTLV_EXT_IS_REACH_IPV4_INTF_ADDR:
+ case ISIS_SUBTLV_EXT_IS_REACH_IPV4_NEIGHBOR_ADDR:
+ if (subtlv_len >= sizeof(nd_ipv4))
+ ND_PRINT(", %s", GET_IPADDR_STRING(tptr));
+ break;
+ case ISIS_SUBTLV_EXT_IS_REACH_MAX_LINK_BW :
+ case ISIS_SUBTLV_EXT_IS_REACH_RESERVABLE_BW:
+ if (subtlv_len >= 4) {
+ bw.i = GET_BE_U_4(tptr);
+ ND_PRINT(", %.3f Mbps", bw.f * 8 / 1000000);
+ }
+ break;
+ case ISIS_SUBTLV_EXT_IS_REACH_UNRESERVED_BW :
+ if (subtlv_len >= 32) {
+ for (te_class = 0; te_class < 8; te_class++) {
+ bw.i = GET_BE_U_4(tptr);
+ ND_PRINT("%s TE-Class %u: %.3f Mbps",
+ ident,
+ te_class,
+ bw.f * 8 / 1000000);
+ tptr += 4;
+ subtlv_len -= 4;
+ subtlv_sum_len -= 4;
+ proc_bytes += 4;
+ }
+ }
+ break;
+ case ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS: /* fall through */
+ case ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS_OLD:
+ if (subtlv_len == 0)
+ break;
+ ND_PRINT("%sBandwidth Constraints Model ID: %s (%u)",
+ ident,
+ tok2str(diffserv_te_bc_values, "unknown", GET_U_1(tptr)),
+ GET_U_1(tptr));
+ tptr++;
+ subtlv_len--;
+ subtlv_sum_len--;
+ proc_bytes++;
+ /* decode BCs until the subTLV ends */
+ for (te_class = 0; subtlv_len != 0; te_class++) {
+ if (subtlv_len < 4)
+ break;
+ bw.i = GET_BE_U_4(tptr);
+ ND_PRINT("%s Bandwidth constraint CT%u: %.3f Mbps",
+ ident,
+ te_class,
+ bw.f * 8 / 1000000);
+ tptr += 4;
+ subtlv_len -= 4;
+ subtlv_sum_len -= 4;
+ proc_bytes += 4;
+ }
+ break;
+ case ISIS_SUBTLV_EXT_IS_REACH_TE_METRIC:
+ if (subtlv_len >= 3)
+ ND_PRINT(", %u", GET_BE_U_3(tptr));
+ break;
+ case ISIS_SUBTLV_EXT_IS_REACH_LINK_ATTRIBUTE:
+ if (subtlv_len == 2) {
+ ND_PRINT(", [ %s ] (0x%04x)",
+ bittok2str(isis_subtlv_link_attribute_values,
+ "Unknown",
+ GET_BE_U_2(tptr)),
+ GET_BE_U_2(tptr));
+ }
+ break;
+ case ISIS_SUBTLV_EXT_IS_REACH_LINK_PROTECTION_TYPE:
+ if (subtlv_len >= 2) {
+ ND_PRINT(", %s, Priority %u",
+ bittok2str(gmpls_link_prot_values, "none", GET_U_1(tptr)),
+ GET_U_1(tptr + 1));
+ }
+ break;
+ case ISIS_SUBTLV_SPB_METRIC:
+ if (subtlv_len >= 6) {
+ ND_PRINT(", LM: %u", GET_BE_U_3(tptr));
+ tptr += 3;
+ subtlv_len -= 3;
+ subtlv_sum_len -= 3;
+ proc_bytes += 3;
+ ND_PRINT(", P: %u", GET_U_1(tptr));
+ tptr++;
+ subtlv_len--;
+ subtlv_sum_len--;
+ proc_bytes++;
+ ND_PRINT(", P-ID: %u", GET_BE_U_2(tptr));
+ }
+ break;
+ case ISIS_SUBTLV_EXT_IS_REACH_INTF_SW_CAP_DESCR:
+ if (subtlv_len >= 36) {
+ gmpls_switch_cap = GET_U_1(tptr);
+ ND_PRINT("%s Interface Switching Capability:%s",
+ ident,
+ tok2str(gmpls_switch_cap_values, "Unknown", gmpls_switch_cap));
+ ND_PRINT(", LSP Encoding: %s",
+ tok2str(gmpls_encoding_values, "Unknown", GET_U_1((tptr + 1))));
+ tptr += 4;
+ subtlv_len -= 4;
+ subtlv_sum_len -= 4;
+ proc_bytes += 4;
+ ND_PRINT("%s Max LSP Bandwidth:", ident);
+ for (priority_level = 0; priority_level < 8; priority_level++) {
+ bw.i = GET_BE_U_4(tptr);
+ ND_PRINT("%s priority level %u: %.3f Mbps",
+ ident,
+ priority_level,
+ bw.f * 8 / 1000000);
+ tptr += 4;
+ subtlv_len -= 4;
+ subtlv_sum_len -= 4;
+ proc_bytes += 4;
+ }
+ switch (gmpls_switch_cap) {
+ case GMPLS_PSC1:
+ case GMPLS_PSC2:
+ case GMPLS_PSC3:
+ case GMPLS_PSC4:
+ if (subtlv_len < 6)
+ break;
+ bw.i = GET_BE_U_4(tptr);
+ ND_PRINT("%s Min LSP Bandwidth: %.3f Mbps", ident, bw.f * 8 / 1000000);
+ ND_PRINT("%s Interface MTU: %u", ident,
+ GET_BE_U_2(tptr + 4));
+ break;
+ case GMPLS_TSC:
+ if (subtlv_len < 8)
+ break;
+ bw.i = GET_BE_U_4(tptr);
+ ND_PRINT("%s Min LSP Bandwidth: %.3f Mbps", ident, bw.f * 8 / 1000000);
+ ND_PRINT("%s Indication %s", ident,
+ tok2str(gmpls_switch_cap_tsc_indication_values, "Unknown (%u)", GET_U_1((tptr + 4))));
+ break;
+ default:
+ /* there is some optional stuff left to decode but this is as of yet
+ not specified so just lets hexdump what is left */
+ if (subtlv_len != 0) {
+ if (!print_unknown_data(ndo, tptr, "\n\t\t ", subtlv_len))
+ return(0);
+ }
+ }
+ }
+ break;
+ case ISIS_SUBTLV_EXT_IS_REACH_LAN_ADJ_SEGMENT_ID:
+ if (subtlv_len >= 8) {
+ ND_PRINT("%s Flags: [%s]", ident,
+ bittok2str(isis_lan_adj_sid_flag_values,
+ "none",
+ GET_U_1(tptr)));
+ int vflag = (GET_U_1(tptr) & 0x20) ? 1:0;
+ int lflag = (GET_U_1(tptr) & 0x10) ? 1:0;
+ tptr++;
+ subtlv_len--;
+ subtlv_sum_len--;
+ proc_bytes++;
+ ND_PRINT("%s Weight: %u", ident, GET_U_1(tptr));
+ tptr++;
+ subtlv_len--;
+ subtlv_sum_len--;
+ proc_bytes++;
+ if(subtlv_len>=SYSTEM_ID_LEN) {
+ ND_TCHECK_LEN(tptr, SYSTEM_ID_LEN);
+ ND_PRINT("%s Neighbor System-ID: %s", ident,
+ isis_print_id(ndo, tptr, SYSTEM_ID_LEN));
+ }
+ /* RFC 8667 section 2.2.2 */
+ /* if V-flag is set to 1 and L-flag is set to 1 ==> 3 octet label */
+ /* if V-flag is set to 0 and L-flag is set to 0 ==> 4 octet index */
+ if (vflag && lflag) {
+ ND_PRINT("%s Label: %u",
+ ident, GET_BE_U_3(tptr+SYSTEM_ID_LEN));
+ } else if ((!vflag) && (!lflag)) {
+ ND_PRINT("%s Index: %u",
+ ident, GET_BE_U_4(tptr+SYSTEM_ID_LEN));
+ } else
+ nd_print_invalid(ndo);
+ }
+ break;
+ default:
+ if (!print_unknown_data(ndo, tptr, "\n\t\t ", subtlv_len))
+ return(0);
+ break;
+ }
+
+ tptr += subtlv_len;
+ tlv_remaining -= subtlv_len;
+ subtlv_sum_len -= subtlv_len;
+ proc_bytes += subtlv_len;
+ }
+ }
+ return(proc_bytes);
+
+trunc:
+ return(0);
+}
+
+/*
+ * this is the common Multi Topology ID decoder
+ * it is called from various MT-TLVs (222,229,235,237)
+ */
+
+static uint8_t
+isis_print_mtid(netdissect_options *ndo,
+ const uint8_t *tptr, const char *ident, u_int tlv_remaining)
+{
+ if (tlv_remaining < 2)
+ goto trunc;
+
+ ND_PRINT("%s%s",
+ ident,
+ tok2str(isis_mt_values,
+ "Reserved for IETF Consensus",
+ ISIS_MASK_MTID(GET_BE_U_2(tptr))));
+
+ ND_PRINT(" Topology (0x%03x), Flags: [%s]",
+ ISIS_MASK_MTID(GET_BE_U_2(tptr)),
+ bittok2str(isis_mt_flag_values, "none",ISIS_MASK_MTFLAGS(GET_BE_U_2(tptr))));
+
+ return(2);
+trunc:
+ return 0;
+}
+
+/*
+ * this is the common extended IP reach decoder
+ * it is called from TLVs (135,235,236,237)
+ * we process the TLV and optional subTLVs and return
+ * the amount of processed bytes
+ */
+
+static u_int
+isis_print_extd_ip_reach(netdissect_options *ndo,
+ const uint8_t *tptr, const char *ident, uint16_t afi)
+{
+ char ident_buffer[20];
+ uint8_t prefix[sizeof(nd_ipv6)]; /* shared copy buffer for IPv4 and IPv6 prefixes */
+ u_int metric, status_byte, bit_length, byte_length, sublen, processed, subtlvtype, subtlvlen;
+
+ metric = GET_BE_U_4(tptr);
+ processed=4;
+ tptr+=4;
+
+ if (afi == AF_INET) {
+ status_byte=GET_U_1(tptr);
+ tptr++;
+ bit_length = status_byte&0x3f;
+ if (bit_length > 32) {
+ ND_PRINT("%sIPv4 prefix: bad bit length %u",
+ ident,
+ bit_length);
+ return (0);
+ }
+ processed++;
+ } else if (afi == AF_INET6) {
+ status_byte=GET_U_1(tptr);
+ bit_length=GET_U_1(tptr + 1);
+ if (bit_length > 128) {
+ ND_PRINT("%sIPv6 prefix: bad bit length %u",
+ ident,
+ bit_length);
+ return (0);
+ }
+ tptr+=2;
+ processed+=2;
+ } else
+ return (0); /* somebody is fooling us */
+
+ byte_length = (bit_length + 7) / 8; /* prefix has variable length encoding */
+
+ memset(prefix, 0, sizeof(prefix)); /* clear the copy buffer */
+ GET_CPY_BYTES(prefix,tptr,byte_length); /* copy as much as is stored in the TLV */
+ tptr+=byte_length;
+ processed+=byte_length;
+
+ if (afi == AF_INET)
+ ND_PRINT("%sIPv4 prefix: %15s/%u",
+ ident,
+ ipaddr_string(ndo, prefix), /* local buffer, not packet data; don't use GET_IPADDR_STRING() */
+ bit_length);
+ else if (afi == AF_INET6)
+ ND_PRINT("%sIPv6 prefix: %s/%u",
+ ident,
+ ip6addr_string(ndo, prefix), /* local buffer, not packet data; don't use GET_IP6ADDR_STRING() */
+ bit_length);
+
+ ND_PRINT(", Distribution: %s, Metric: %u",
+ ISIS_MASK_TLV_EXTD_IP_UPDOWN(status_byte) ? "down" : "up",
+ metric);
+
+ if (afi == AF_INET && ISIS_MASK_TLV_EXTD_IP_SUBTLV(status_byte))
+ ND_PRINT(", sub-TLVs present");
+ else if (afi == AF_INET6)
+ ND_PRINT(", %s%s",
+ ISIS_MASK_TLV_EXTD_IP6_IE(status_byte) ? "External" : "Internal",
+ ISIS_MASK_TLV_EXTD_IP6_SUBTLV(status_byte) ? ", sub-TLVs present" : "");
+
+ if ((afi == AF_INET && ISIS_MASK_TLV_EXTD_IP_SUBTLV(status_byte))
+ || (afi == AF_INET6 && ISIS_MASK_TLV_EXTD_IP6_SUBTLV(status_byte))
+ ) {
+ /* assume that one prefix can hold more
+ than one subTLV - therefore the first byte must reflect
+ the aggregate bytecount of the subTLVs for this prefix
+ */
+ sublen=GET_U_1(tptr);
+ tptr++;
+ processed+=sublen+1;
+ ND_PRINT(" (%u)", sublen); /* print out subTLV length */
+
+ while (sublen>0) {
+ subtlvtype=GET_U_1(tptr);
+ subtlvlen=GET_U_1(tptr + 1);
+ tptr+=2;
+ /* prepend the indent string */
+ snprintf(ident_buffer, sizeof(ident_buffer), "%s ",ident);
+ if (!isis_print_ip_reach_subtlv(ndo, tptr, subtlvtype, subtlvlen, ident_buffer))
+ return(0);
+ tptr+=subtlvlen;
+ sublen-=(subtlvlen+2);
+ }
+ }
+ return (processed);
+}
+
+static void
+isis_print_router_cap_subtlv(netdissect_options *ndo, const uint8_t *tptr, uint8_t tlen)
+{
+ uint8_t subt, subl;
+
+ while (tlen >= 2) {
+ subt = GET_U_1(tptr);
+ subl = GET_U_1(tptr+1);
+ tlen -= 2;
+ tptr += 2;
+
+ /* first lets see if we know the subTLVs name*/
+ ND_PRINT("\n\t\t%s subTLV #%u, length: %u",
+ tok2str(isis_router_capability_subtlv_values, "unknown", subt),
+ subt, subl);
+
+ /*
+ * Boundary check.
+ */
+ if (subl > tlen) {
+ break;
+ }
+ ND_TCHECK_LEN(tptr, subl);
+
+ switch (subt) {
+ case ISIS_SUBTLV_ROUTER_CAP_SR:
+ {
+ uint8_t flags, sid_tlen, sid_type, sid_len;
+ uint32_t range;
+ const uint8_t *sid_ptr;
+
+ flags = GET_U_1(tptr);
+ range = GET_BE_U_3(tptr+1);
+ ND_PRINT(", Flags [%s], Range %u",
+ bittok2str(isis_router_capability_sr_flags, "None", flags),
+ range);
+ sid_ptr = tptr + 4;
+ sid_tlen = subl - 4;
+
+ while (sid_tlen >= 5) {
+ sid_type = GET_U_1(sid_ptr);
+ sid_len = GET_U_1(sid_ptr+1);
+ sid_tlen -= 2;
+ sid_ptr += 2;
+
+ /*
+ * Boundary check.
+ */
+ if (sid_len > sid_tlen) {
+ break;
+ }
+
+ switch (sid_type) {
+ case 1:
+ if (sid_len == 3) {
+ ND_PRINT(", SID value %u", GET_BE_U_3(sid_ptr));
+ } else if (sid_len == 4) {
+ ND_PRINT(", SID value %u", GET_BE_U_4(sid_ptr));
+ } else {
+ ND_PRINT(", Unknown SID length%u", sid_len);
+ }
+ break;
+ default:
+ print_unknown_data(ndo, sid_ptr, "\n\t\t ", sid_len);
+ }
+
+ sid_ptr += sid_len;
+ sid_tlen -= sid_len;
+ }
+ }
+ break;
+ default:
+ print_unknown_data(ndo, tptr, "\n\t\t", subl);
+ break;
+ }
+
+ tlen -= subl;
+ tptr += subl;
+ }
+ trunc:
+ return;
+}
+
+/*
+ * Clear checksum and lifetime prior to signature verification.
+ */
+static void
+isis_clear_checksum_lifetime(void *header)
+{
+ struct isis_lsp_header *header_lsp = (struct isis_lsp_header *) header;
+
+ header_lsp->checksum[0] = 0;
+ header_lsp->checksum[1] = 0;
+ header_lsp->remaining_lifetime[0] = 0;
+ header_lsp->remaining_lifetime[1] = 0;
+}
+
+/*
+ * isis_print
+ * Decode IS-IS packets. Return 0 on error.
+ */
+
+#define INVALID_OR_DECREMENT(length,decr) \
+ if ((length) < (decr)) { \
+ ND_PRINT(" [packet length %u < %zu]", (length), (decr)); \
+ nd_print_invalid(ndo); \
+ return 1; \
+ } \
+ length -= (decr);
+
+static int
+isis_print(netdissect_options *ndo,
+ const uint8_t *p, u_int length)
+{
+ const struct isis_common_header *isis_header;
+
+ const struct isis_iih_lan_header *header_iih_lan;
+ const struct isis_iih_ptp_header *header_iih_ptp;
+ const struct isis_lsp_header *header_lsp;
+ const struct isis_csnp_header *header_csnp;
+ const struct isis_psnp_header *header_psnp;
+
+ const struct isis_tlv_lsp *tlv_lsp;
+ const struct isis_tlv_ptp_adj *tlv_ptp_adj;
+ const struct isis_tlv_is_reach *tlv_is_reach;
+ const struct isis_tlv_es_reach *tlv_es_reach;
+
+ uint8_t version, pdu_version, fixed_len;
+ uint8_t pdu_type, pdu_max_area, max_area, pdu_id_length, id_length, tlv_type, tlv_len, tlen, alen, prefix_len;
+ u_int ext_is_len, ext_ip_len;
+ uint8_t mt_len;
+ uint8_t isis_subtlv_idrp;
+ const uint8_t *optr, *pptr, *tptr;
+ u_int packet_len;
+ u_short pdu_len, key_id;
+ u_int i,vendor_id, num_vals;
+ uint8_t auth_type;
+ uint8_t num_system_ids;
+ int sigcheck;
+
+ ndo->ndo_protocol = "isis";
+ packet_len=length;
+ optr = p; /* initialize the _o_riginal pointer to the packet start -
+ need it for parsing the checksum TLV and authentication
+ TLV verification */
+ isis_header = (const struct isis_common_header *)p;
+ ND_TCHECK_SIZE(isis_header);
+ if (length < ISIS_COMMON_HEADER_SIZE)
+ goto trunc;
+ pptr = p+(ISIS_COMMON_HEADER_SIZE);
+ header_iih_lan = (const struct isis_iih_lan_header *)pptr;
+ header_iih_ptp = (const struct isis_iih_ptp_header *)pptr;
+ header_lsp = (const struct isis_lsp_header *)pptr;
+ header_csnp = (const struct isis_csnp_header *)pptr;
+ header_psnp = (const struct isis_psnp_header *)pptr;
+
+ if (!ndo->ndo_eflag)
+ ND_PRINT("IS-IS");
+
+ /*
+ * Sanity checking of the header.
+ */
+
+ version = GET_U_1(isis_header->version);
+ if (version != ISIS_VERSION) {
+ ND_PRINT("version %u packet not supported", version);
+ return (0);
+ }
+
+ pdu_id_length = GET_U_1(isis_header->id_length);
+ if ((pdu_id_length != SYSTEM_ID_LEN) && (pdu_id_length != 0)) {
+ ND_PRINT("system ID length of %u is not supported",
+ pdu_id_length);
+ return (0);
+ }
+
+ pdu_version = GET_U_1(isis_header->pdu_version);
+ if (pdu_version != ISIS_VERSION) {
+ ND_PRINT("version %u packet not supported", pdu_version);
+ return (0);
+ }
+
+ fixed_len = GET_U_1(isis_header->fixed_len);
+ if (length < fixed_len) {
+ ND_PRINT("fixed header length %u > packet length %u", fixed_len, length);
+ return (0);
+ }
+
+ if (fixed_len < ISIS_COMMON_HEADER_SIZE) {
+ ND_PRINT("fixed header length %u < minimum header size %u", fixed_len, (u_int)ISIS_COMMON_HEADER_SIZE);
+ return (0);
+ }
+
+ pdu_max_area = GET_U_1(isis_header->max_area);
+ switch(pdu_max_area) {
+ case 0:
+ max_area = 3; /* silly shit */
+ break;
+ case 255:
+ ND_PRINT("bad packet -- 255 areas");
+ return (0);
+ default:
+ max_area = pdu_max_area;
+ break;
+ }
+
+ switch(pdu_id_length) {
+ case 0:
+ id_length = 6; /* silly shit again */
+ break;
+ case 1: /* 1-8 are valid sys-ID lengths */
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ id_length = pdu_id_length;
+ break;
+ case 255:
+ id_length = 0; /* entirely useless */
+ break;
+ default:
+ id_length = pdu_id_length;
+ break;
+ }
+
+ /* toss any non 6-byte sys-ID len PDUs */
+ if (id_length != 6 ) {
+ ND_PRINT("bad packet -- illegal sys-ID length (%u)", id_length);
+ return (0);
+ }
+
+ pdu_type = GET_U_1(isis_header->pdu_type);
+
+ /* in non-verbose mode print the basic PDU Type plus PDU specific brief information*/
+ if (ndo->ndo_vflag == 0) {
+ ND_PRINT("%s%s",
+ ndo->ndo_eflag ? "" : ", ",
+ tok2str(isis_pdu_values, "unknown PDU-Type %u", pdu_type));
+ } else {
+ /* ok they seem to want to know everything - lets fully decode it */
+ ND_PRINT("%slength %u", ndo->ndo_eflag ? "" : ", ", length);
+
+ ND_PRINT("\n\t%s, hlen: %u, v: %u, pdu-v: %u, sys-id-len: %u (%u), max-area: %u (%u)",
+ tok2str(isis_pdu_values,
+ "unknown, type %u",
+ pdu_type),
+ fixed_len,
+ version,
+ pdu_version,
+ id_length,
+ pdu_id_length,
+ max_area,
+ pdu_max_area);
+
+ if (ndo->ndo_vflag > 1) {
+ if (!print_unknown_data(ndo, optr, "\n\t", 8)) /* provide the _o_riginal pointer */
+ return (0); /* for optionally debugging the common header */
+ }
+ }
+
+ switch (pdu_type) {
+
+ case ISIS_PDU_L1_LAN_IIH:
+ case ISIS_PDU_L2_LAN_IIH:
+ if (fixed_len != (ISIS_COMMON_HEADER_SIZE+ISIS_IIH_LAN_HEADER_SIZE)) {
+ ND_PRINT(", bogus fixed header length %u should be %zu",
+ fixed_len, ISIS_COMMON_HEADER_SIZE+ISIS_IIH_LAN_HEADER_SIZE);
+ return (0);
+ }
+ ND_TCHECK_SIZE(header_iih_lan);
+ if (length < ISIS_COMMON_HEADER_SIZE+ISIS_IIH_LAN_HEADER_SIZE)
+ goto trunc;
+ if (ndo->ndo_vflag == 0) {
+ ND_PRINT(", src-id %s",
+ isis_print_id(ndo, header_iih_lan->source_id, SYSTEM_ID_LEN));
+ ND_PRINT(", lan-id %s, prio %u",
+ isis_print_id(ndo, header_iih_lan->lan_id,NODE_ID_LEN),
+ GET_U_1(header_iih_lan->priority));
+ ND_PRINT(", length %u", length);
+ return (1);
+ }
+ pdu_len=GET_BE_U_2(header_iih_lan->pdu_len);
+ if (packet_len>pdu_len) {
+ packet_len=pdu_len; /* do TLV decoding as long as it makes sense */
+ length=pdu_len;
+ }
+
+ ND_PRINT("\n\t source-id: %s, holding time: %us, Flags: [%s]",
+ isis_print_id(ndo, header_iih_lan->source_id,SYSTEM_ID_LEN),
+ GET_BE_U_2(header_iih_lan->holding_time),
+ tok2str(isis_iih_circuit_type_values,
+ "unknown circuit type 0x%02x",
+ GET_U_1(header_iih_lan->circuit_type)));
+
+ ND_PRINT("\n\t lan-id: %s, Priority: %u, PDU length: %u",
+ isis_print_id(ndo, header_iih_lan->lan_id, NODE_ID_LEN),
+ GET_U_1(header_iih_lan->priority) & ISIS_LAN_PRIORITY_MASK,
+ pdu_len);
+
+ if (ndo->ndo_vflag > 1) {
+ if (!print_unknown_data(ndo, pptr, "\n\t ", ISIS_IIH_LAN_HEADER_SIZE))
+ return (0);
+ }
+
+ INVALID_OR_DECREMENT(packet_len,ISIS_COMMON_HEADER_SIZE+ISIS_IIH_LAN_HEADER_SIZE);
+ pptr = p + (ISIS_COMMON_HEADER_SIZE+ISIS_IIH_LAN_HEADER_SIZE);
+ break;
+
+ case ISIS_PDU_PTP_IIH:
+ if (fixed_len != (ISIS_COMMON_HEADER_SIZE+ISIS_IIH_PTP_HEADER_SIZE)) {
+ ND_PRINT(", bogus fixed header length %u should be %zu",
+ fixed_len, ISIS_COMMON_HEADER_SIZE+ISIS_IIH_PTP_HEADER_SIZE);
+ return (0);
+ }
+ ND_TCHECK_SIZE(header_iih_ptp);
+ if (length < ISIS_COMMON_HEADER_SIZE+ISIS_IIH_PTP_HEADER_SIZE)
+ goto trunc;
+ if (ndo->ndo_vflag == 0) {
+ ND_PRINT(", src-id %s", isis_print_id(ndo, header_iih_ptp->source_id, SYSTEM_ID_LEN));
+ ND_PRINT(", length %u", length);
+ return (1);
+ }
+ pdu_len=GET_BE_U_2(header_iih_ptp->pdu_len);
+ if (packet_len>pdu_len) {
+ packet_len=pdu_len; /* do TLV decoding as long as it makes sense */
+ length=pdu_len;
+ }
+
+ ND_PRINT("\n\t source-id: %s, holding time: %us, Flags: [%s]",
+ isis_print_id(ndo, header_iih_ptp->source_id,SYSTEM_ID_LEN),
+ GET_BE_U_2(header_iih_ptp->holding_time),
+ tok2str(isis_iih_circuit_type_values,
+ "unknown circuit type 0x%02x",
+ GET_U_1(header_iih_ptp->circuit_type)));
+
+ ND_PRINT("\n\t circuit-id: 0x%02x, PDU length: %u",
+ GET_U_1(header_iih_ptp->circuit_id),
+ pdu_len);
+
+ if (ndo->ndo_vflag > 1) {
+ if (!print_unknown_data(ndo, pptr, "\n\t ", ISIS_IIH_PTP_HEADER_SIZE))
+ return (0);
+ }
+ INVALID_OR_DECREMENT(packet_len,ISIS_COMMON_HEADER_SIZE+ISIS_IIH_PTP_HEADER_SIZE);
+ pptr = p + (ISIS_COMMON_HEADER_SIZE+ISIS_IIH_PTP_HEADER_SIZE);
+ break;
+
+ case ISIS_PDU_L1_LSP:
+ case ISIS_PDU_L2_LSP:
+ if (fixed_len != (ISIS_COMMON_HEADER_SIZE+ISIS_LSP_HEADER_SIZE)) {
+ ND_PRINT(", bogus fixed header length %u should be %zu",
+ fixed_len, ISIS_LSP_HEADER_SIZE);
+ return (0);
+ }
+ ND_TCHECK_SIZE(header_lsp);
+ if (length < ISIS_COMMON_HEADER_SIZE+ISIS_LSP_HEADER_SIZE)
+ goto trunc;
+ if (ndo->ndo_vflag == 0) {
+ ND_PRINT(", lsp-id %s, seq 0x%08x, lifetime %5us",
+ isis_print_id(ndo, header_lsp->lsp_id, LSP_ID_LEN),
+ GET_BE_U_4(header_lsp->sequence_number),
+ GET_BE_U_2(header_lsp->remaining_lifetime));
+ ND_PRINT(", length %u", length);
+ return (1);
+ }
+ pdu_len=GET_BE_U_2(header_lsp->pdu_len);
+ if (packet_len>pdu_len) {
+ packet_len=pdu_len; /* do TLV decoding as long as it makes sense */
+ length=pdu_len;
+ }
+
+ ND_PRINT("\n\t lsp-id: %s, seq: 0x%08x, lifetime: %5us\n\t chksum: 0x%04x",
+ isis_print_id(ndo, header_lsp->lsp_id, LSP_ID_LEN),
+ GET_BE_U_4(header_lsp->sequence_number),
+ GET_BE_U_2(header_lsp->remaining_lifetime),
+ GET_BE_U_2(header_lsp->checksum));
+
+ osi_print_cksum(ndo, (const uint8_t *)header_lsp->lsp_id,
+ GET_BE_U_2(header_lsp->checksum),
+ 12, length-12);
+
+ ND_PRINT(", PDU length: %u, Flags: [ %s",
+ pdu_len,
+ ISIS_MASK_LSP_OL_BIT(header_lsp->typeblock) ? "Overload bit set, " : "");
+
+ if (ISIS_MASK_LSP_ATT_BITS(header_lsp->typeblock)) {
+ ND_PRINT("%s", ISIS_MASK_LSP_ATT_DEFAULT_BIT(header_lsp->typeblock) ? "default " : "");
+ ND_PRINT("%s", ISIS_MASK_LSP_ATT_DELAY_BIT(header_lsp->typeblock) ? "delay " : "");
+ ND_PRINT("%s", ISIS_MASK_LSP_ATT_EXPENSE_BIT(header_lsp->typeblock) ? "expense " : "");
+ ND_PRINT("%s", ISIS_MASK_LSP_ATT_ERROR_BIT(header_lsp->typeblock) ? "error " : "");
+ ND_PRINT("ATT bit set, ");
+ }
+ ND_PRINT("%s", ISIS_MASK_LSP_PARTITION_BIT(header_lsp->typeblock) ? "P bit set, " : "");
+ ND_PRINT("%s ]", tok2str(isis_lsp_istype_values, "Unknown(0x%x)",
+ ISIS_MASK_LSP_ISTYPE_BITS(header_lsp->typeblock)));
+
+ if (ndo->ndo_vflag > 1) {
+ if (!print_unknown_data(ndo, pptr, "\n\t ", ISIS_LSP_HEADER_SIZE))
+ return (0);
+ }
+
+ INVALID_OR_DECREMENT(packet_len,ISIS_COMMON_HEADER_SIZE+ISIS_LSP_HEADER_SIZE);
+ pptr = p + (ISIS_COMMON_HEADER_SIZE+ISIS_LSP_HEADER_SIZE);
+ break;
+
+ case ISIS_PDU_L1_CSNP:
+ case ISIS_PDU_L2_CSNP:
+ if (fixed_len != (ISIS_COMMON_HEADER_SIZE+ISIS_CSNP_HEADER_SIZE)) {
+ ND_PRINT(", bogus fixed header length %u should be %zu",
+ fixed_len, ISIS_COMMON_HEADER_SIZE+ISIS_CSNP_HEADER_SIZE);
+ return (0);
+ }
+ ND_TCHECK_SIZE(header_csnp);
+ if (length < ISIS_COMMON_HEADER_SIZE+ISIS_CSNP_HEADER_SIZE)
+ goto trunc;
+ if (ndo->ndo_vflag == 0) {
+ ND_PRINT(", src-id %s", isis_print_id(ndo, header_csnp->source_id, NODE_ID_LEN));
+ ND_PRINT(", length %u", length);
+ return (1);
+ }
+ pdu_len=GET_BE_U_2(header_csnp->pdu_len);
+ if (packet_len>pdu_len) {
+ packet_len=pdu_len; /* do TLV decoding as long as it makes sense */
+ length=pdu_len;
+ }
+
+ ND_PRINT("\n\t source-id: %s, PDU length: %u",
+ isis_print_id(ndo, header_csnp->source_id, NODE_ID_LEN),
+ pdu_len);
+ ND_PRINT("\n\t start lsp-id: %s",
+ isis_print_id(ndo, header_csnp->start_lsp_id, LSP_ID_LEN));
+ ND_PRINT("\n\t end lsp-id: %s",
+ isis_print_id(ndo, header_csnp->end_lsp_id, LSP_ID_LEN));
+
+ if (ndo->ndo_vflag > 1) {
+ if (!print_unknown_data(ndo, pptr, "\n\t ", ISIS_CSNP_HEADER_SIZE))
+ return (0);
+ }
+
+ INVALID_OR_DECREMENT(packet_len,ISIS_COMMON_HEADER_SIZE+ISIS_CSNP_HEADER_SIZE);
+ pptr = p + (ISIS_COMMON_HEADER_SIZE+ISIS_CSNP_HEADER_SIZE);
+ break;
+
+ case ISIS_PDU_L1_PSNP:
+ case ISIS_PDU_L2_PSNP:
+ if (fixed_len != (ISIS_COMMON_HEADER_SIZE+ISIS_PSNP_HEADER_SIZE)) {
+ ND_PRINT("- bogus fixed header length %u should be %zu",
+ fixed_len, ISIS_COMMON_HEADER_SIZE+ISIS_PSNP_HEADER_SIZE);
+ return (0);
+ }
+ ND_TCHECK_SIZE(header_psnp);
+ if (length < ISIS_COMMON_HEADER_SIZE+ISIS_PSNP_HEADER_SIZE)
+ goto trunc;
+ if (ndo->ndo_vflag == 0) {
+ ND_PRINT(", src-id %s", isis_print_id(ndo, header_psnp->source_id, NODE_ID_LEN));
+ ND_PRINT(", length %u", length);
+ return (1);
+ }
+ pdu_len=GET_BE_U_2(header_psnp->pdu_len);
+ if (packet_len>pdu_len) {
+ packet_len=pdu_len; /* do TLV decoding as long as it makes sense */
+ length=pdu_len;
+ }
+
+ ND_PRINT("\n\t source-id: %s, PDU length: %u",
+ isis_print_id(ndo, header_psnp->source_id, NODE_ID_LEN),
+ pdu_len);
+
+ if (ndo->ndo_vflag > 1) {
+ if (!print_unknown_data(ndo, pptr, "\n\t ", ISIS_PSNP_HEADER_SIZE))
+ return (0);
+ }
+
+ INVALID_OR_DECREMENT(packet_len,ISIS_COMMON_HEADER_SIZE+ISIS_PSNP_HEADER_SIZE);
+ pptr = p + (ISIS_COMMON_HEADER_SIZE+ISIS_PSNP_HEADER_SIZE);
+ break;
+
+ default:
+ if (ndo->ndo_vflag == 0) {
+ ND_PRINT(", length %u", length);
+ return (1);
+ }
+ (void)print_unknown_data(ndo, pptr, "\n\t ", length);
+ return (0);
+ }
+
+ /*
+ * Now print the TLV's.
+ */
+
+ while (packet_len > 0) {
+ ND_TCHECK_2(pptr);
+ if (packet_len < 2)
+ goto trunc;
+ tlv_type = GET_U_1(pptr);
+ tlv_len = GET_U_1(pptr + 1);
+ pptr += 2;
+ packet_len -= 2;
+ tlen = tlv_len; /* copy temporary len & pointer to packet data */
+ tptr = pptr;
+
+ /* first lets see if we know the TLVs name*/
+ ND_PRINT("\n\t %s TLV #%u, length: %u",
+ tok2str(isis_tlv_values,
+ "unknown",
+ tlv_type),
+ tlv_type,
+ tlv_len);
+
+ if (packet_len < tlv_len)
+ goto trunc;
+
+ /* now check if we have a decoder otherwise do a hexdump at the end*/
+ switch (tlv_type) {
+ case ISIS_TLV_AREA_ADDR:
+ while (tlen != 0) {
+ alen = GET_U_1(tptr);
+ tptr++;
+ tlen--;
+ if (tlen < alen)
+ goto tlv_trunc;
+ ND_PRINT("\n\t Area address (length: %u): %s",
+ alen,
+ GET_ISONSAP_STRING(tptr, alen));
+ tptr += alen;
+ tlen -= alen;
+ }
+ break;
+ case ISIS_TLV_ISNEIGH:
+ while (tlen != 0) {
+ if (tlen < MAC_ADDR_LEN)
+ goto tlv_trunc;
+ ND_TCHECK_LEN(tptr, MAC_ADDR_LEN);
+ ND_PRINT("\n\t SNPA: %s", isis_print_id(ndo, tptr, MAC_ADDR_LEN));
+ tlen -= MAC_ADDR_LEN;
+ tptr += MAC_ADDR_LEN;
+ }
+ break;
+
+ case ISIS_TLV_INSTANCE_ID:
+ if (tlen < 4)
+ goto tlv_trunc;
+ num_vals = (tlen-2)/2;
+ ND_PRINT("\n\t Instance ID: %u, ITIDs(%u)%s ",
+ GET_BE_U_2(tptr), num_vals,
+ num_vals ? ":" : "");
+ tptr += 2;
+ tlen -= 2;
+ for (i=0; i < num_vals; i++) {
+ ND_PRINT("%u", GET_BE_U_2(tptr));
+ if (i < (num_vals - 1)) {
+ ND_PRINT(", ");
+ }
+ tptr += 2;
+ tlen -= 2;
+ }
+ break;
+
+ case ISIS_TLV_PADDING:
+ break;
+
+ case ISIS_TLV_MT_IS_REACH:
+ mt_len = isis_print_mtid(ndo, tptr, "\n\t ", tlen);
+ if (mt_len == 0) /* did something go wrong ? */
+ goto trunc;
+ tptr+=mt_len;
+ tlen-=mt_len;
+ while (tlen != 0) {
+ ext_is_len = isis_print_ext_is_reach(ndo, tptr, "\n\t ", tlv_type, tlen);
+ if (ext_is_len == 0) /* did something go wrong ? */
+ goto trunc;
+ if (tlen < ext_is_len) {
+ ND_PRINT(" [remaining tlv length %u < %u]", tlen, ext_is_len);
+ nd_print_invalid(ndo);
+ break;
+ }
+ tlen-=(uint8_t)ext_is_len;
+ tptr+=(uint8_t)ext_is_len;
+ }
+ break;
+
+ case ISIS_TLV_IS_ALIAS_ID:
+ while (tlen != 0) {
+ ext_is_len = isis_print_ext_is_reach(ndo, tptr, "\n\t ", tlv_type, tlen);
+ if (ext_is_len == 0) /* did something go wrong ? */
+ goto trunc;
+ if (tlen < ext_is_len) {
+ ND_PRINT(" [remaining tlv length %u < %u]", tlen, ext_is_len);
+ nd_print_invalid(ndo);
+ break;
+ }
+ tlen-=(uint8_t)ext_is_len;
+ tptr+=(uint8_t)ext_is_len;
+ }
+ break;
+
+ case ISIS_TLV_EXT_IS_REACH:
+ while (tlen != 0) {
+ ext_is_len = isis_print_ext_is_reach(ndo, tptr, "\n\t ", tlv_type, tlen);
+ if (ext_is_len == 0) /* did something go wrong ? */
+ goto trunc;
+ if (tlen < ext_is_len) {
+ ND_PRINT(" [remaining tlv length %u < %u]", tlen, ext_is_len);
+ nd_print_invalid(ndo);
+ break;
+ }
+ tlen-=(uint8_t)ext_is_len;
+ tptr+=(uint8_t)ext_is_len;
+ }
+ break;
+ case ISIS_TLV_IS_REACH:
+ if (tlen < 1)
+ goto tlv_trunc;
+ ND_PRINT("\n\t %s",
+ tok2str(isis_is_reach_virtual_values,
+ "bogus virtual flag 0x%02x",
+ GET_U_1(tptr)));
+ tptr++;
+ tlen--;
+ tlv_is_reach = (const struct isis_tlv_is_reach *)tptr;
+ while (tlen != 0) {
+ if (tlen < sizeof(struct isis_tlv_is_reach))
+ goto tlv_trunc;
+ ND_TCHECK_SIZE(tlv_is_reach);
+ ND_PRINT("\n\t IS Neighbor: %s",
+ isis_print_id(ndo, tlv_is_reach->neighbor_nodeid, NODE_ID_LEN));
+ isis_print_metric_block(ndo, &tlv_is_reach->isis_metric_block);
+ tlen -= sizeof(struct isis_tlv_is_reach);
+ tlv_is_reach++;
+ }
+ break;
+
+ case ISIS_TLV_ESNEIGH:
+ tlv_es_reach = (const struct isis_tlv_es_reach *)tptr;
+ while (tlen != 0) {
+ if (tlen < sizeof(struct isis_tlv_es_reach))
+ goto tlv_trunc;
+ ND_TCHECK_SIZE(tlv_es_reach);
+ ND_PRINT("\n\t ES Neighbor: %s",
+ isis_print_id(ndo, tlv_es_reach->neighbor_sysid, SYSTEM_ID_LEN));
+ isis_print_metric_block(ndo, &tlv_es_reach->isis_metric_block);
+ tlen -= sizeof(struct isis_tlv_es_reach);
+ tlv_es_reach++;
+ }
+ break;
+
+ /* those two TLVs share the same format */
+ case ISIS_TLV_INT_IP_REACH:
+ case ISIS_TLV_EXT_IP_REACH:
+ if (!isis_print_tlv_ip_reach(ndo, pptr, "\n\t ", tlv_len))
+ return (1);
+ break;
+
+ case ISIS_TLV_EXTD_IP_REACH:
+ while (tlen != 0) {
+ ext_ip_len = isis_print_extd_ip_reach(ndo, tptr, "\n\t ", AF_INET);
+ if (ext_ip_len == 0) /* did something go wrong ? */
+ goto trunc;
+ if (tlen < ext_ip_len) {
+ ND_PRINT(" [remaining tlv length %u < %u]", tlen, ext_ip_len);
+ nd_print_invalid(ndo);
+ break;
+ }
+ tlen-=(uint8_t)ext_ip_len;
+ tptr+=(uint8_t)ext_ip_len;
+ }
+ break;
+
+ case ISIS_TLV_MT_IP_REACH:
+ mt_len = isis_print_mtid(ndo, tptr, "\n\t ", tlen);
+ if (mt_len == 0) { /* did something go wrong ? */
+ goto trunc;
+ }
+ tptr+=mt_len;
+ tlen-=mt_len;
+
+ while (tlen != 0) {
+ ext_ip_len = isis_print_extd_ip_reach(ndo, tptr, "\n\t ", AF_INET);
+ if (ext_ip_len == 0) /* did something go wrong ? */
+ goto trunc;
+ if (tlen < ext_ip_len) {
+ ND_PRINT(" [remaining tlv length %u < %u]", tlen, ext_ip_len);
+ nd_print_invalid(ndo);
+ break;
+ }
+ tlen-=(uint8_t)ext_ip_len;
+ tptr+=(uint8_t)ext_ip_len;
+ }
+ break;
+
+ case ISIS_TLV_IP6_REACH:
+ while (tlen != 0) {
+ ext_ip_len = isis_print_extd_ip_reach(ndo, tptr, "\n\t ", AF_INET6);
+ if (ext_ip_len == 0) /* did something go wrong ? */
+ goto trunc;
+ if (tlen < ext_ip_len) {
+ ND_PRINT(" [remaining tlv length %u < %u]", tlen, ext_ip_len);
+ nd_print_invalid(ndo);
+ break;
+ }
+ tlen-=(uint8_t)ext_ip_len;
+ tptr+=(uint8_t)ext_ip_len;
+ }
+ break;
+
+ case ISIS_TLV_MT_IP6_REACH:
+ mt_len = isis_print_mtid(ndo, tptr, "\n\t ", tlen);
+ if (mt_len == 0) { /* did something go wrong ? */
+ goto trunc;
+ }
+ tptr+=mt_len;
+ tlen-=mt_len;
+
+ while (tlen != 0) {
+ ext_ip_len = isis_print_extd_ip_reach(ndo, tptr, "\n\t ", AF_INET6);
+ if (ext_ip_len == 0) /* did something go wrong ? */
+ goto trunc;
+ if (tlen < ext_ip_len) {
+ ND_PRINT(" [remaining tlv length %u < %u]", tlen, ext_ip_len);
+ nd_print_invalid(ndo);
+ break;
+ }
+ tlen-=(uint8_t)ext_ip_len;
+ tptr+=(uint8_t)ext_ip_len;
+ }
+ break;
+
+ case ISIS_TLV_IP6ADDR:
+ while (tlen != 0) {
+ if (tlen < sizeof(nd_ipv6))
+ goto tlv_trunc;
+ ND_PRINT("\n\t IPv6 interface address: %s",
+ GET_IP6ADDR_STRING(tptr));
+
+ tptr += sizeof(nd_ipv6);
+ tlen -= sizeof(nd_ipv6);
+ }
+ break;
+ case ISIS_TLV_AUTH:
+ if (tlen < 1)
+ goto tlv_trunc;
+ auth_type = GET_U_1(tptr);
+ tptr++;
+ tlen--;
+
+ ND_PRINT("\n\t %s: ",
+ tok2str(isis_subtlv_auth_values,
+ "unknown Authentication type 0x%02x",
+ auth_type));
+
+ switch (auth_type) {
+ case ISIS_SUBTLV_AUTH_SIMPLE:
+ nd_printjnp(ndo, tptr, tlen);
+ break;
+ case ISIS_SUBTLV_AUTH_MD5:
+ for(i=0;i<tlen;i++) {
+ ND_PRINT("%02x", GET_U_1(tptr + i));
+ }
+ if (tlen != ISIS_SUBTLV_AUTH_MD5_LEN)
+ ND_PRINT(", (invalid subTLV) ");
+
+ sigcheck = signature_verify(ndo, optr, length, tptr,
+ isis_clear_checksum_lifetime,
+ header_lsp);
+ ND_PRINT(" (%s)", tok2str(signature_check_values, "Unknown", sigcheck));
+
+ break;
+ case ISIS_SUBTLV_AUTH_GENERIC:
+ if (tlen < 2)
+ goto tlv_trunc;
+ key_id = GET_BE_U_2(tptr);
+ ND_PRINT("%u, password: ", key_id);
+ tptr += 2;
+ tlen -= 2;
+ for(i=0;i<tlen;i++) {
+ ND_PRINT("%02x", GET_U_1(tptr + i));
+ }
+ break;
+ case ISIS_SUBTLV_AUTH_PRIVATE:
+ default:
+ if (!print_unknown_data(ndo, tptr, "\n\t\t ", tlen))
+ return(0);
+ break;
+ }
+ break;
+
+ case ISIS_TLV_PTP_ADJ:
+ tlv_ptp_adj = (const struct isis_tlv_ptp_adj *)tptr;
+ if(tlen>=1) {
+ ND_PRINT("\n\t Adjacency State: %s (%u)",
+ tok2str(isis_ptp_adjancey_values, "unknown", GET_U_1(tptr)),
+ GET_U_1(tptr));
+ tlen--;
+ }
+ if(tlen>sizeof(tlv_ptp_adj->extd_local_circuit_id)) {
+ ND_PRINT("\n\t Extended Local circuit-ID: 0x%08x",
+ GET_BE_U_4(tlv_ptp_adj->extd_local_circuit_id));
+ tlen-=sizeof(tlv_ptp_adj->extd_local_circuit_id);
+ }
+ if(tlen>=SYSTEM_ID_LEN) {
+ ND_TCHECK_LEN(tlv_ptp_adj->neighbor_sysid, SYSTEM_ID_LEN);
+ ND_PRINT("\n\t Neighbor System-ID: %s",
+ isis_print_id(ndo, tlv_ptp_adj->neighbor_sysid, SYSTEM_ID_LEN));
+ tlen-=SYSTEM_ID_LEN;
+ }
+ if(tlen>=sizeof(tlv_ptp_adj->neighbor_extd_local_circuit_id)) {
+ ND_PRINT("\n\t Neighbor Extended Local circuit-ID: 0x%08x",
+ GET_BE_U_4(tlv_ptp_adj->neighbor_extd_local_circuit_id));
+ }
+ break;
+
+ case ISIS_TLV_PROTOCOLS:
+ ND_PRINT("\n\t NLPID(s): ");
+ while (tlen != 0) {
+ ND_PRINT("%s (0x%02x)",
+ tok2str(nlpid_values,
+ "unknown",
+ GET_U_1(tptr)),
+ GET_U_1(tptr));
+ if (tlen>1) /* further NPLIDs ? - put comma */
+ ND_PRINT(", ");
+ tptr++;
+ tlen--;
+ }
+ break;
+
+ case ISIS_TLV_MT_PORT_CAP:
+ {
+ if (tlen < 2)
+ goto tlv_trunc;
+
+ ND_PRINT("\n\t RES: %u, MTID(s): %u",
+ (GET_BE_U_2(tptr) >> 12),
+ (GET_BE_U_2(tptr) & 0x0fff));
+
+ tptr += 2;
+ tlen -= 2;
+
+ if (tlen)
+ isis_print_mt_port_cap_subtlv(ndo, tptr, tlen);
+
+ break;
+ }
+
+ case ISIS_TLV_MT_CAPABILITY:
+ if (tlen < 2)
+ goto tlv_trunc;
+
+ ND_PRINT("\n\t O: %u, RES: %u, MTID(s): %u",
+ (GET_BE_U_2(tptr) >> 15) & 0x01,
+ (GET_BE_U_2(tptr) >> 12) & 0x07,
+ GET_BE_U_2(tptr) & 0x0fff);
+
+ tptr += 2;
+ tlen -= 2;
+
+ if (tlen)
+ isis_print_mt_capability_subtlv(ndo, tptr, tlen);
+
+ break;
+
+ case ISIS_TLV_TE_ROUTER_ID:
+ if (tlen < sizeof(nd_ipv4))
+ goto tlv_trunc;
+ ND_PRINT("\n\t Traffic Engineering Router ID: %s", GET_IPADDR_STRING(pptr));
+ break;
+
+ case ISIS_TLV_IPADDR:
+ while (tlen != 0) {
+ if (tlen < sizeof(nd_ipv4))
+ goto tlv_trunc;
+ ND_PRINT("\n\t IPv4 interface address: %s", GET_IPADDR_STRING(tptr));
+ tptr += sizeof(nd_ipv4);
+ tlen -= sizeof(nd_ipv4);
+ }
+ break;
+
+ case ISIS_TLV_HOSTNAME:
+ ND_PRINT("\n\t Hostname: ");
+ nd_printjnp(ndo, tptr, tlen);
+ break;
+
+ case ISIS_TLV_SHARED_RISK_GROUP:
+ if (tlen < NODE_ID_LEN)
+ break;
+ ND_TCHECK_LEN(tptr, NODE_ID_LEN);
+ ND_PRINT("\n\t IS Neighbor: %s", isis_print_id(ndo, tptr, NODE_ID_LEN));
+ tptr+=NODE_ID_LEN;
+ tlen-=NODE_ID_LEN;
+
+ if (tlen < 1)
+ break;
+ ND_PRINT(", Flags: [%s]",
+ ISIS_MASK_TLV_SHARED_RISK_GROUP(GET_U_1(tptr)) ? "numbered" : "unnumbered");
+ tptr++;
+ tlen--;
+
+ if (tlen < sizeof(nd_ipv4))
+ break;
+ ND_PRINT("\n\t IPv4 interface address: %s", GET_IPADDR_STRING(tptr));
+ tptr+=sizeof(nd_ipv4);
+ tlen-=sizeof(nd_ipv4);
+
+ if (tlen < sizeof(nd_ipv4))
+ break;
+ ND_PRINT("\n\t IPv4 neighbor address: %s", GET_IPADDR_STRING(tptr));
+ tptr+=sizeof(nd_ipv4);
+ tlen-=sizeof(nd_ipv4);
+
+ while (tlen != 0) {
+ if (tlen < 4)
+ goto tlv_trunc;
+ ND_PRINT("\n\t Link-ID: 0x%08x", GET_BE_U_4(tptr));
+ tptr+=4;
+ tlen-=4;
+ }
+ break;
+
+ case ISIS_TLV_LSP:
+ tlv_lsp = (const struct isis_tlv_lsp *)tptr;
+ while (tlen != 0) {
+ if (tlen < sizeof(struct isis_tlv_lsp))
+ goto tlv_trunc;
+ ND_TCHECK_1(tlv_lsp->lsp_id + LSP_ID_LEN - 1);
+ ND_PRINT("\n\t lsp-id: %s",
+ isis_print_id(ndo, tlv_lsp->lsp_id, LSP_ID_LEN));
+ ND_PRINT(", seq: 0x%08x",
+ GET_BE_U_4(tlv_lsp->sequence_number));
+ ND_PRINT(", lifetime: %5ds",
+ GET_BE_U_2(tlv_lsp->remaining_lifetime));
+ ND_PRINT(", chksum: 0x%04x", GET_BE_U_2(tlv_lsp->checksum));
+ tlen-=sizeof(struct isis_tlv_lsp);
+ tlv_lsp++;
+ }
+ break;
+
+ case ISIS_TLV_CHECKSUM:
+ if (tlen < ISIS_TLV_CHECKSUM_MINLEN)
+ break;
+ ND_TCHECK_LEN(tptr, ISIS_TLV_CHECKSUM_MINLEN);
+ ND_PRINT("\n\t checksum: 0x%04x ", GET_BE_U_2(tptr));
+ /* do not attempt to verify the checksum if it is zero
+ * most likely a HMAC-MD5 TLV is also present and
+ * to avoid conflicts the checksum TLV is zeroed.
+ * see rfc3358 for details
+ */
+ osi_print_cksum(ndo, optr, GET_BE_U_2(tptr), (int)(tptr-optr),
+ length);
+ break;
+
+ case ISIS_TLV_POI:
+ if (tlen < 1)
+ goto tlv_trunc;
+ num_system_ids = GET_U_1(tptr);
+ tptr++;
+ tlen--;
+ if (num_system_ids == 0) {
+ /* Not valid */
+ ND_PRINT(" No system IDs supplied");
+ } else {
+ if (tlen < SYSTEM_ID_LEN)
+ goto tlv_trunc;
+ ND_TCHECK_LEN(tptr, SYSTEM_ID_LEN);
+ ND_PRINT("\n\t Purge Originator System-ID: %s",
+ isis_print_id(ndo, tptr, SYSTEM_ID_LEN));
+ tptr += SYSTEM_ID_LEN;
+ tlen -= SYSTEM_ID_LEN;
+
+ if (num_system_ids > 1) {
+ if (tlen < SYSTEM_ID_LEN)
+ goto tlv_trunc;
+ ND_TCHECK_LEN(tptr, SYSTEM_ID_LEN);
+ ND_TCHECK_LEN(tptr, 2 * SYSTEM_ID_LEN + 1);
+ ND_PRINT("\n\t Received from System-ID: %s",
+ isis_print_id(ndo, tptr, SYSTEM_ID_LEN));
+ }
+ }
+ break;
+
+ case ISIS_TLV_MT_SUPPORTED:
+ while (tlen != 0) {
+ /* length can only be a multiple of 2, otherwise there is
+ something broken -> so decode down until length is 1 */
+ if (tlen!=1) {
+ mt_len = isis_print_mtid(ndo, tptr, "\n\t ", tlen);
+ if (mt_len == 0) /* did something go wrong ? */
+ goto trunc;
+ tptr+=mt_len;
+ tlen-=mt_len;
+ } else {
+ ND_PRINT("\n\t invalid MT-ID");
+ break;
+ }
+ }
+ break;
+
+ case ISIS_TLV_RESTART_SIGNALING:
+ /* first attempt to decode the flags */
+ if (tlen < ISIS_TLV_RESTART_SIGNALING_FLAGLEN)
+ break;
+ ND_TCHECK_LEN(tptr, ISIS_TLV_RESTART_SIGNALING_FLAGLEN);
+ ND_PRINT("\n\t Flags [%s]",
+ bittok2str(isis_restart_flag_values, "none", GET_U_1(tptr)));
+ tptr+=ISIS_TLV_RESTART_SIGNALING_FLAGLEN;
+ tlen-=ISIS_TLV_RESTART_SIGNALING_FLAGLEN;
+
+ /* is there anything other than the flags field? */
+ if (tlen == 0)
+ break;
+
+ if (tlen < ISIS_TLV_RESTART_SIGNALING_HOLDTIMELEN)
+ break;
+ ND_TCHECK_LEN(tptr, ISIS_TLV_RESTART_SIGNALING_HOLDTIMELEN);
+
+ ND_PRINT(", Remaining holding time %us", GET_BE_U_2(tptr));
+ tptr+=ISIS_TLV_RESTART_SIGNALING_HOLDTIMELEN;
+ tlen-=ISIS_TLV_RESTART_SIGNALING_HOLDTIMELEN;
+
+ /* is there an additional sysid field present ?*/
+ if (tlen == SYSTEM_ID_LEN) {
+ ND_TCHECK_LEN(tptr, SYSTEM_ID_LEN);
+ ND_PRINT(", for %s", isis_print_id(ndo, tptr,SYSTEM_ID_LEN));
+ }
+ break;
+
+ case ISIS_TLV_IDRP_INFO:
+ if (tlen < 1)
+ break;
+ isis_subtlv_idrp = GET_U_1(tptr);
+ ND_PRINT("\n\t Inter-Domain Information Type: %s",
+ tok2str(isis_subtlv_idrp_values,
+ "Unknown (0x%02x)",
+ isis_subtlv_idrp));
+ tptr++;
+ tlen--;
+ switch (isis_subtlv_idrp) {
+ case ISIS_SUBTLV_IDRP_ASN:
+ if (tlen < 2)
+ goto tlv_trunc;
+ ND_PRINT("AS Number: %u", GET_BE_U_2(tptr));
+ break;
+ case ISIS_SUBTLV_IDRP_LOCAL:
+ case ISIS_SUBTLV_IDRP_RES:
+ default:
+ if (!print_unknown_data(ndo, tptr, "\n\t ", tlen))
+ return(0);
+ break;
+ }
+ break;
+
+ case ISIS_TLV_LSP_BUFFERSIZE:
+ if (tlen < 2)
+ break;
+ ND_PRINT("\n\t LSP Buffersize: %u", GET_BE_U_2(tptr));
+ break;
+
+ case ISIS_TLV_PART_DIS:
+ while (tlen != 0) {
+ if (tlen < SYSTEM_ID_LEN)
+ goto tlv_trunc;
+ ND_TCHECK_LEN(tptr, SYSTEM_ID_LEN);
+ ND_PRINT("\n\t %s", isis_print_id(ndo, tptr, SYSTEM_ID_LEN));
+ tptr+=SYSTEM_ID_LEN;
+ tlen-=SYSTEM_ID_LEN;
+ }
+ break;
+
+ case ISIS_TLV_PREFIX_NEIGH:
+ if (tlen < sizeof(struct isis_metric_block))
+ break;
+ ND_TCHECK_LEN(tptr, sizeof(struct isis_metric_block));
+ ND_PRINT("\n\t Metric Block");
+ isis_print_metric_block(ndo, (const struct isis_metric_block *)tptr);
+ tptr+=sizeof(struct isis_metric_block);
+ tlen-=sizeof(struct isis_metric_block);
+
+ while (tlen != 0) {
+ prefix_len=GET_U_1(tptr); /* read out prefix length in semioctets*/
+ tptr++;
+ tlen--;
+ if (prefix_len < 2) {
+ ND_PRINT("\n\t\tAddress: prefix length %u < 2", prefix_len);
+ break;
+ }
+ if (tlen < prefix_len/2)
+ break;
+ ND_PRINT("\n\t\tAddress: %s/%u",
+ GET_ISONSAP_STRING(tptr, prefix_len / 2), prefix_len * 4);
+ tptr+=prefix_len/2;
+ tlen-=prefix_len/2;
+ }
+ break;
+
+ case ISIS_TLV_IIH_SEQNR:
+ if (tlen < 4)
+ break;
+ ND_PRINT("\n\t Sequence number: %u", GET_BE_U_4(tptr));
+ break;
+
+ case ISIS_TLV_ROUTER_CAPABILITY:
+ if (tlen < 5) {
+ ND_PRINT(" [object length %u < 5]", tlen);
+ nd_print_invalid(ndo);
+ break;
+ }
+ ND_PRINT("\n\t Router-ID %s", GET_IPADDR_STRING(tptr));
+ ND_PRINT(", Flags [%s]",
+ bittok2str(isis_tlv_router_capability_flags, "none", GET_U_1(tptr+4)));
+
+ /* Optional set of sub-TLV */
+ if (tlen > 5) {
+ isis_print_router_cap_subtlv(ndo, tptr+5, tlen-5);
+ }
+ break;
+
+ case ISIS_TLV_VENDOR_PRIVATE:
+ if (tlen < 3)
+ break;
+ vendor_id = GET_BE_U_3(tptr);
+ ND_PRINT("\n\t Vendor: %s (%u)",
+ tok2str(oui_values, "Unknown", vendor_id),
+ vendor_id);
+ tptr+=3;
+ tlen-=3;
+ if (tlen != 0) /* hexdump the rest */
+ if (!print_unknown_data(ndo, tptr, "\n\t\t", tlen))
+ return(0);
+ break;
+ /*
+ * FIXME those are the defined TLVs that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+
+ case ISIS_TLV_DECNET_PHASE4:
+ case ISIS_TLV_LUCENT_PRIVATE:
+ case ISIS_TLV_IPAUTH:
+ case ISIS_TLV_NORTEL_PRIVATE1:
+ case ISIS_TLV_NORTEL_PRIVATE2:
+
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ if (!print_unknown_data(ndo, pptr, "\n\t\t", tlv_len))
+ return(0);
+ }
+ break;
+ }
+tlv_trunc:
+ /* do we want to see an additionally hexdump ? */
+ if (ndo->ndo_vflag> 1) {
+ if (!print_unknown_data(ndo, pptr, "\n\t ", tlv_len))
+ return(0);
+ }
+
+ pptr += tlv_len;
+ packet_len -= tlv_len;
+ }
+
+ if (packet_len != 0) {
+ ND_PRINT("\n\t %u straggler bytes", packet_len);
+ }
+ return (1);
+
+trunc:
+ nd_print_trunc(ndo);
+ return (1);
+}
+
+static void
+osi_print_cksum(netdissect_options *ndo, const uint8_t *pptr,
+ uint16_t checksum, int checksum_offset, u_int length)
+{
+ uint16_t calculated_checksum;
+
+ /* do not attempt to verify the checksum if it is zero,
+ * if the offset is nonsense,
+ * or the base pointer is not sane
+ */
+ if (!checksum
+ || checksum_offset < 0
+ || !ND_TTEST_2(pptr + checksum_offset)
+ || (u_int)checksum_offset > length
+ || !ND_TTEST_LEN(pptr, length)) {
+ ND_PRINT(" (unverified)");
+ } else {
+#if 0
+ ND_PRINT("\nosi_print_cksum: %p %d %u\n", pptr, checksum_offset, length);
+#endif
+ calculated_checksum = create_osi_cksum(pptr, checksum_offset, length);
+ if (checksum == calculated_checksum) {
+ ND_PRINT(" (correct)");
+ } else {
+ ND_PRINT(" (incorrect should be 0x%04x)", calculated_checksum);
+ }
+ }
+}
diff --git a/print-juniper.c b/print-juniper.c
new file mode 100644
index 0000000..2fc0b55
--- /dev/null
+++ b/print-juniper.c
@@ -0,0 +1,1626 @@
+/* NetBSD: print-juniper.c,v 1.2 2007/07/24 11:53:45 drochner Exp */
+
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+/* \summary: DLT_JUNIPER_* printers */
+
+#ifndef lint
+#else
+__RCSID("NetBSD: print-juniper.c,v 1.3 2007/07/25 06:31:32 dogcow Exp ");
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+#include "ppp.h"
+#include "llc.h"
+#include "nlpid.h"
+#include "ethertype.h"
+#include "atm.h"
+
+/*
+ * If none of the Juniper DLT_s are defined, there's nothing to do.
+ */
+#if defined(DLT_JUNIPER_GGSN) || defined(DLT_JUNIPER_ES) || \
+ defined(DLT_JUNIPER_MONITOR) || defined(DLT_JUNIPER_SERVICES) || \
+ defined(DLT_JUNIPER_PPPOE) || defined(DLT_JUNIPER_ETHER) || \
+ defined(DLT_JUNIPER_PPP) || defined(DLT_JUNIPER_FRELAY) || \
+ defined(DLT_JUNIPER_CHDLC) || defined(DLT_JUNIPER_PPPOE_ATM) || \
+ defined(DLT_JUNIPER_MLPPP) || defined(DLT_JUNIPER_MFR) || \
+ defined(DLT_JUNIPER_MLFR) || defined(DLT_JUNIPER_ATM1) || \
+ defined(DLT_JUNIPER_ATM2)
+#define JUNIPER_BPF_OUT 0 /* Outgoing packet */
+#define JUNIPER_BPF_IN 1 /* Incoming packet */
+#define JUNIPER_BPF_PKT_IN 0x1 /* Incoming packet */
+#define JUNIPER_BPF_NO_L2 0x2 /* L2 header stripped */
+#define JUNIPER_BPF_IIF 0x4 /* IIF is valid */
+#define JUNIPER_BPF_FILTER 0x40 /* BPF filtering is supported */
+#define JUNIPER_BPF_EXT 0x80 /* extensions present */
+#define JUNIPER_MGC_NUMBER 0x4d4743 /* = "MGC" */
+
+#define JUNIPER_LSQ_COOKIE_RE (1 << 3)
+#define JUNIPER_LSQ_COOKIE_DIR (1 << 2)
+#define JUNIPER_LSQ_L3_PROTO_SHIFT 4
+#define JUNIPER_LSQ_L3_PROTO_MASK (0x17 << JUNIPER_LSQ_L3_PROTO_SHIFT)
+#define JUNIPER_LSQ_L3_PROTO_IPV4 (0 << JUNIPER_LSQ_L3_PROTO_SHIFT)
+#define JUNIPER_LSQ_L3_PROTO_IPV6 (1 << JUNIPER_LSQ_L3_PROTO_SHIFT)
+#define JUNIPER_LSQ_L3_PROTO_MPLS (2 << JUNIPER_LSQ_L3_PROTO_SHIFT)
+#define JUNIPER_LSQ_L3_PROTO_ISO (3 << JUNIPER_LSQ_L3_PROTO_SHIFT)
+#define AS_PIC_COOKIE_LEN 8
+
+#define JUNIPER_IPSEC_O_ESP_ENCRYPT_ESP_AUTHEN_TYPE 1
+#define JUNIPER_IPSEC_O_ESP_ENCRYPT_AH_AUTHEN_TYPE 2
+#define JUNIPER_IPSEC_O_ESP_AUTHENTICATION_TYPE 3
+#define JUNIPER_IPSEC_O_AH_AUTHENTICATION_TYPE 4
+#define JUNIPER_IPSEC_O_ESP_ENCRYPTION_TYPE 5
+
+#ifdef DLT_JUNIPER_ES
+static const struct tok juniper_ipsec_type_values[] = {
+ { JUNIPER_IPSEC_O_ESP_ENCRYPT_ESP_AUTHEN_TYPE, "ESP ENCR-AUTH" },
+ { JUNIPER_IPSEC_O_ESP_ENCRYPT_AH_AUTHEN_TYPE, "ESP ENCR-AH AUTH" },
+ { JUNIPER_IPSEC_O_ESP_AUTHENTICATION_TYPE, "ESP AUTH" },
+ { JUNIPER_IPSEC_O_AH_AUTHENTICATION_TYPE, "AH AUTH" },
+ { JUNIPER_IPSEC_O_ESP_ENCRYPTION_TYPE, "ESP ENCR" },
+ { 0, NULL}
+};
+#endif
+
+static const struct tok juniper_direction_values[] = {
+ { JUNIPER_BPF_IN, "In"},
+ { JUNIPER_BPF_OUT, "Out"},
+ { 0, NULL}
+};
+
+/* codepoints for encoding extensions to a .pcap file */
+enum {
+ JUNIPER_EXT_TLV_IFD_IDX = 1,
+ JUNIPER_EXT_TLV_IFD_NAME = 2,
+ JUNIPER_EXT_TLV_IFD_MEDIATYPE = 3,
+ JUNIPER_EXT_TLV_IFL_IDX = 4,
+ JUNIPER_EXT_TLV_IFL_UNIT = 5,
+ JUNIPER_EXT_TLV_IFL_ENCAPS = 6,
+ JUNIPER_EXT_TLV_TTP_IFD_MEDIATYPE = 7,
+ JUNIPER_EXT_TLV_TTP_IFL_ENCAPS = 8
+};
+
+/* 1 byte type and 1-byte length */
+#define JUNIPER_EXT_TLV_OVERHEAD 2U
+
+static const struct tok jnx_ext_tlv_values[] = {
+ { JUNIPER_EXT_TLV_IFD_IDX, "Device Interface Index" },
+ { JUNIPER_EXT_TLV_IFD_NAME,"Device Interface Name" },
+ { JUNIPER_EXT_TLV_IFD_MEDIATYPE, "Device Media Type" },
+ { JUNIPER_EXT_TLV_IFL_IDX, "Logical Interface Index" },
+ { JUNIPER_EXT_TLV_IFL_UNIT,"Logical Unit Number" },
+ { JUNIPER_EXT_TLV_IFL_ENCAPS, "Logical Interface Encapsulation" },
+ { JUNIPER_EXT_TLV_TTP_IFD_MEDIATYPE, "TTP derived Device Media Type" },
+ { JUNIPER_EXT_TLV_TTP_IFL_ENCAPS, "TTP derived Logical Interface Encapsulation" },
+ { 0, NULL }
+};
+
+static const struct tok jnx_flag_values[] = {
+ { JUNIPER_BPF_EXT, "Ext" },
+ { JUNIPER_BPF_FILTER, "Filter" },
+ { JUNIPER_BPF_IIF, "IIF" },
+ { JUNIPER_BPF_NO_L2, "no-L2" },
+ { JUNIPER_BPF_PKT_IN, "In" },
+ { 0, NULL }
+};
+
+#define JUNIPER_IFML_ETHER 1
+#define JUNIPER_IFML_FDDI 2
+#define JUNIPER_IFML_TOKENRING 3
+#define JUNIPER_IFML_PPP 4
+#define JUNIPER_IFML_FRAMERELAY 5
+#define JUNIPER_IFML_CISCOHDLC 6
+#define JUNIPER_IFML_SMDSDXI 7
+#define JUNIPER_IFML_ATMPVC 8
+#define JUNIPER_IFML_PPP_CCC 9
+#define JUNIPER_IFML_FRAMERELAY_CCC 10
+#define JUNIPER_IFML_IPIP 11
+#define JUNIPER_IFML_GRE 12
+#define JUNIPER_IFML_PIM 13
+#define JUNIPER_IFML_PIMD 14
+#define JUNIPER_IFML_CISCOHDLC_CCC 15
+#define JUNIPER_IFML_VLAN_CCC 16
+#define JUNIPER_IFML_MLPPP 17
+#define JUNIPER_IFML_MLFR 18
+#define JUNIPER_IFML_ML 19
+#define JUNIPER_IFML_LSI 20
+#define JUNIPER_IFML_DFE 21
+#define JUNIPER_IFML_ATM_CELLRELAY_CCC 22
+#define JUNIPER_IFML_CRYPTO 23
+#define JUNIPER_IFML_GGSN 24
+#define JUNIPER_IFML_LSI_PPP 25
+#define JUNIPER_IFML_LSI_CISCOHDLC 26
+#define JUNIPER_IFML_PPP_TCC 27
+#define JUNIPER_IFML_FRAMERELAY_TCC 28
+#define JUNIPER_IFML_CISCOHDLC_TCC 29
+#define JUNIPER_IFML_ETHERNET_CCC 30
+#define JUNIPER_IFML_VT 31
+#define JUNIPER_IFML_EXTENDED_VLAN_CCC 32
+#define JUNIPER_IFML_ETHER_OVER_ATM 33
+#define JUNIPER_IFML_MONITOR 34
+#define JUNIPER_IFML_ETHERNET_TCC 35
+#define JUNIPER_IFML_VLAN_TCC 36
+#define JUNIPER_IFML_EXTENDED_VLAN_TCC 37
+#define JUNIPER_IFML_CONTROLLER 38
+#define JUNIPER_IFML_MFR 39
+#define JUNIPER_IFML_LS 40
+#define JUNIPER_IFML_ETHERNET_VPLS 41
+#define JUNIPER_IFML_ETHERNET_VLAN_VPLS 42
+#define JUNIPER_IFML_ETHERNET_EXTENDED_VLAN_VPLS 43
+#define JUNIPER_IFML_LT 44
+#define JUNIPER_IFML_SERVICES 45
+#define JUNIPER_IFML_ETHER_VPLS_OVER_ATM 46
+#define JUNIPER_IFML_FR_PORT_CCC 47
+#define JUNIPER_IFML_FRAMERELAY_EXT_CCC 48
+#define JUNIPER_IFML_FRAMERELAY_EXT_TCC 49
+#define JUNIPER_IFML_FRAMERELAY_FLEX 50
+#define JUNIPER_IFML_GGSNI 51
+#define JUNIPER_IFML_ETHERNET_FLEX 52
+#define JUNIPER_IFML_COLLECTOR 53
+#define JUNIPER_IFML_AGGREGATOR 54
+#define JUNIPER_IFML_LAPD 55
+#define JUNIPER_IFML_PPPOE 56
+#define JUNIPER_IFML_PPP_SUBORDINATE 57
+#define JUNIPER_IFML_CISCOHDLC_SUBORDINATE 58
+#define JUNIPER_IFML_DFC 59
+#define JUNIPER_IFML_PICPEER 60
+
+static const struct tok juniper_ifmt_values[] = {
+ { JUNIPER_IFML_ETHER, "Ethernet" },
+ { JUNIPER_IFML_FDDI, "FDDI" },
+ { JUNIPER_IFML_TOKENRING, "Token-Ring" },
+ { JUNIPER_IFML_PPP, "PPP" },
+ { JUNIPER_IFML_PPP_SUBORDINATE, "PPP-Subordinate" },
+ { JUNIPER_IFML_FRAMERELAY, "Frame-Relay" },
+ { JUNIPER_IFML_CISCOHDLC, "Cisco-HDLC" },
+ { JUNIPER_IFML_SMDSDXI, "SMDS-DXI" },
+ { JUNIPER_IFML_ATMPVC, "ATM-PVC" },
+ { JUNIPER_IFML_PPP_CCC, "PPP-CCC" },
+ { JUNIPER_IFML_FRAMERELAY_CCC, "Frame-Relay-CCC" },
+ { JUNIPER_IFML_FRAMERELAY_EXT_CCC, "Extended FR-CCC" },
+ { JUNIPER_IFML_IPIP, "IP-over-IP" },
+ { JUNIPER_IFML_GRE, "GRE" },
+ { JUNIPER_IFML_PIM, "PIM-Encapsulator" },
+ { JUNIPER_IFML_PIMD, "PIM-Decapsulator" },
+ { JUNIPER_IFML_CISCOHDLC_CCC, "Cisco-HDLC-CCC" },
+ { JUNIPER_IFML_VLAN_CCC, "VLAN-CCC" },
+ { JUNIPER_IFML_EXTENDED_VLAN_CCC, "Extended-VLAN-CCC" },
+ { JUNIPER_IFML_MLPPP, "Multilink-PPP" },
+ { JUNIPER_IFML_MLFR, "Multilink-FR" },
+ { JUNIPER_IFML_MFR, "Multilink-FR-UNI-NNI" },
+ { JUNIPER_IFML_ML, "Multilink" },
+ { JUNIPER_IFML_LS, "LinkService" },
+ { JUNIPER_IFML_LSI, "LSI" },
+ { JUNIPER_IFML_ATM_CELLRELAY_CCC, "ATM-CCC-Cell-Relay" },
+ { JUNIPER_IFML_CRYPTO, "IPSEC-over-IP" },
+ { JUNIPER_IFML_GGSN, "GGSN" },
+ { JUNIPER_IFML_PPP_TCC, "PPP-TCC" },
+ { JUNIPER_IFML_FRAMERELAY_TCC, "Frame-Relay-TCC" },
+ { JUNIPER_IFML_FRAMERELAY_EXT_TCC, "Extended FR-TCC" },
+ { JUNIPER_IFML_CISCOHDLC_TCC, "Cisco-HDLC-TCC" },
+ { JUNIPER_IFML_ETHERNET_CCC, "Ethernet-CCC" },
+ { JUNIPER_IFML_VT, "VPN-Loopback-tunnel" },
+ { JUNIPER_IFML_ETHER_OVER_ATM, "Ethernet-over-ATM" },
+ { JUNIPER_IFML_ETHER_VPLS_OVER_ATM, "Ethernet-VPLS-over-ATM" },
+ { JUNIPER_IFML_MONITOR, "Monitor" },
+ { JUNIPER_IFML_ETHERNET_TCC, "Ethernet-TCC" },
+ { JUNIPER_IFML_VLAN_TCC, "VLAN-TCC" },
+ { JUNIPER_IFML_EXTENDED_VLAN_TCC, "Extended-VLAN-TCC" },
+ { JUNIPER_IFML_CONTROLLER, "Controller" },
+ { JUNIPER_IFML_ETHERNET_VPLS, "VPLS" },
+ { JUNIPER_IFML_ETHERNET_VLAN_VPLS, "VLAN-VPLS" },
+ { JUNIPER_IFML_ETHERNET_EXTENDED_VLAN_VPLS, "Extended-VLAN-VPLS" },
+ { JUNIPER_IFML_LT, "Logical-tunnel" },
+ { JUNIPER_IFML_SERVICES, "General-Services" },
+ { JUNIPER_IFML_PPPOE, "PPPoE" },
+ { JUNIPER_IFML_ETHERNET_FLEX, "Flexible-Ethernet-Services" },
+ { JUNIPER_IFML_FRAMERELAY_FLEX, "Flexible-FrameRelay" },
+ { JUNIPER_IFML_COLLECTOR, "Flow-collection" },
+ { JUNIPER_IFML_PICPEER, "PIC Peer" },
+ { JUNIPER_IFML_DFC, "Dynamic-Flow-Capture" },
+ {0, NULL}
+};
+
+#define JUNIPER_IFLE_ATM_SNAP 2
+#define JUNIPER_IFLE_ATM_NLPID 3
+#define JUNIPER_IFLE_ATM_VCMUX 4
+#define JUNIPER_IFLE_ATM_LLC 5
+#define JUNIPER_IFLE_ATM_PPP_VCMUX 6
+#define JUNIPER_IFLE_ATM_PPP_LLC 7
+#define JUNIPER_IFLE_ATM_PPP_FUNI 8
+#define JUNIPER_IFLE_ATM_CCC 9
+#define JUNIPER_IFLE_FR_NLPID 10
+#define JUNIPER_IFLE_FR_SNAP 11
+#define JUNIPER_IFLE_FR_PPP 12
+#define JUNIPER_IFLE_FR_CCC 13
+#define JUNIPER_IFLE_ENET2 14
+#define JUNIPER_IFLE_IEEE8023_SNAP 15
+#define JUNIPER_IFLE_IEEE8023_LLC 16
+#define JUNIPER_IFLE_PPP 17
+#define JUNIPER_IFLE_CISCOHDLC 18
+#define JUNIPER_IFLE_PPP_CCC 19
+#define JUNIPER_IFLE_IPIP_NULL 20
+#define JUNIPER_IFLE_PIM_NULL 21
+#define JUNIPER_IFLE_GRE_NULL 22
+#define JUNIPER_IFLE_GRE_PPP 23
+#define JUNIPER_IFLE_PIMD_DECAPS 24
+#define JUNIPER_IFLE_CISCOHDLC_CCC 25
+#define JUNIPER_IFLE_ATM_CISCO_NLPID 26
+#define JUNIPER_IFLE_VLAN_CCC 27
+#define JUNIPER_IFLE_MLPPP 28
+#define JUNIPER_IFLE_MLFR 29
+#define JUNIPER_IFLE_LSI_NULL 30
+#define JUNIPER_IFLE_AGGREGATE_UNUSED 31
+#define JUNIPER_IFLE_ATM_CELLRELAY_CCC 32
+#define JUNIPER_IFLE_CRYPTO 33
+#define JUNIPER_IFLE_GGSN 34
+#define JUNIPER_IFLE_ATM_TCC 35
+#define JUNIPER_IFLE_FR_TCC 36
+#define JUNIPER_IFLE_PPP_TCC 37
+#define JUNIPER_IFLE_CISCOHDLC_TCC 38
+#define JUNIPER_IFLE_ETHERNET_CCC 39
+#define JUNIPER_IFLE_VT 40
+#define JUNIPER_IFLE_ATM_EOA_LLC 41
+#define JUNIPER_IFLE_EXTENDED_VLAN_CCC 42
+#define JUNIPER_IFLE_ATM_SNAP_TCC 43
+#define JUNIPER_IFLE_MONITOR 44
+#define JUNIPER_IFLE_ETHERNET_TCC 45
+#define JUNIPER_IFLE_VLAN_TCC 46
+#define JUNIPER_IFLE_EXTENDED_VLAN_TCC 47
+#define JUNIPER_IFLE_MFR 48
+#define JUNIPER_IFLE_ETHERNET_VPLS 49
+#define JUNIPER_IFLE_ETHERNET_VLAN_VPLS 50
+#define JUNIPER_IFLE_ETHERNET_EXTENDED_VLAN_VPLS 51
+#define JUNIPER_IFLE_SERVICES 52
+#define JUNIPER_IFLE_ATM_ETHER_VPLS_ATM_LLC 53
+#define JUNIPER_IFLE_FR_PORT_CCC 54
+#define JUNIPER_IFLE_ATM_MLPPP_LLC 55
+#define JUNIPER_IFLE_ATM_EOA_CCC 56
+#define JUNIPER_IFLE_LT_VLAN 57
+#define JUNIPER_IFLE_COLLECTOR 58
+#define JUNIPER_IFLE_AGGREGATOR 59
+#define JUNIPER_IFLE_LAPD 60
+#define JUNIPER_IFLE_ATM_PPPOE_LLC 61
+#define JUNIPER_IFLE_ETHERNET_PPPOE 62
+#define JUNIPER_IFLE_PPPOE 63
+#define JUNIPER_IFLE_PPP_SUBORDINATE 64
+#define JUNIPER_IFLE_CISCOHDLC_SUBORDINATE 65
+#define JUNIPER_IFLE_DFC 66
+#define JUNIPER_IFLE_PICPEER 67
+
+static const struct tok juniper_ifle_values[] = {
+ { JUNIPER_IFLE_AGGREGATOR, "Aggregator" },
+ { JUNIPER_IFLE_ATM_CCC, "CCC over ATM" },
+ { JUNIPER_IFLE_ATM_CELLRELAY_CCC, "ATM CCC Cell Relay" },
+ { JUNIPER_IFLE_ATM_CISCO_NLPID, "CISCO compatible NLPID" },
+ { JUNIPER_IFLE_ATM_EOA_CCC, "Ethernet over ATM CCC" },
+ { JUNIPER_IFLE_ATM_EOA_LLC, "Ethernet over ATM LLC" },
+ { JUNIPER_IFLE_ATM_ETHER_VPLS_ATM_LLC, "Ethernet VPLS over ATM LLC" },
+ { JUNIPER_IFLE_ATM_LLC, "ATM LLC" },
+ { JUNIPER_IFLE_ATM_MLPPP_LLC, "MLPPP over ATM LLC" },
+ { JUNIPER_IFLE_ATM_NLPID, "ATM NLPID" },
+ { JUNIPER_IFLE_ATM_PPPOE_LLC, "PPPoE over ATM LLC" },
+ { JUNIPER_IFLE_ATM_PPP_FUNI, "PPP over FUNI" },
+ { JUNIPER_IFLE_ATM_PPP_LLC, "PPP over ATM LLC" },
+ { JUNIPER_IFLE_ATM_PPP_VCMUX, "PPP over ATM VCMUX" },
+ { JUNIPER_IFLE_ATM_SNAP, "ATM SNAP" },
+ { JUNIPER_IFLE_ATM_SNAP_TCC, "ATM SNAP TCC" },
+ { JUNIPER_IFLE_ATM_TCC, "ATM VCMUX TCC" },
+ { JUNIPER_IFLE_ATM_VCMUX, "ATM VCMUX" },
+ { JUNIPER_IFLE_CISCOHDLC, "C-HDLC" },
+ { JUNIPER_IFLE_CISCOHDLC_CCC, "C-HDLC CCC" },
+ { JUNIPER_IFLE_CISCOHDLC_SUBORDINATE, "C-HDLC via dialer" },
+ { JUNIPER_IFLE_CISCOHDLC_TCC, "C-HDLC TCC" },
+ { JUNIPER_IFLE_COLLECTOR, "Collector" },
+ { JUNIPER_IFLE_CRYPTO, "Crypto" },
+ { JUNIPER_IFLE_ENET2, "Ethernet" },
+ { JUNIPER_IFLE_ETHERNET_CCC, "Ethernet CCC" },
+ { JUNIPER_IFLE_ETHERNET_EXTENDED_VLAN_VPLS, "Extended VLAN VPLS" },
+ { JUNIPER_IFLE_ETHERNET_PPPOE, "PPPoE over Ethernet" },
+ { JUNIPER_IFLE_ETHERNET_TCC, "Ethernet TCC" },
+ { JUNIPER_IFLE_ETHERNET_VLAN_VPLS, "VLAN VPLS" },
+ { JUNIPER_IFLE_ETHERNET_VPLS, "VPLS" },
+ { JUNIPER_IFLE_EXTENDED_VLAN_CCC, "Extended VLAN CCC" },
+ { JUNIPER_IFLE_EXTENDED_VLAN_TCC, "Extended VLAN TCC" },
+ { JUNIPER_IFLE_FR_CCC, "FR CCC" },
+ { JUNIPER_IFLE_FR_NLPID, "FR NLPID" },
+ { JUNIPER_IFLE_FR_PORT_CCC, "FR CCC" },
+ { JUNIPER_IFLE_FR_PPP, "FR PPP" },
+ { JUNIPER_IFLE_FR_SNAP, "FR SNAP" },
+ { JUNIPER_IFLE_FR_TCC, "FR TCC" },
+ { JUNIPER_IFLE_GGSN, "GGSN" },
+ { JUNIPER_IFLE_GRE_NULL, "GRE NULL" },
+ { JUNIPER_IFLE_GRE_PPP, "PPP over GRE" },
+ { JUNIPER_IFLE_IPIP_NULL, "IPIP" },
+ { JUNIPER_IFLE_LAPD, "LAPD" },
+ { JUNIPER_IFLE_LSI_NULL, "LSI Null" },
+ { JUNIPER_IFLE_LT_VLAN, "LT VLAN" },
+ { JUNIPER_IFLE_MFR, "MFR" },
+ { JUNIPER_IFLE_MLFR, "MLFR" },
+ { JUNIPER_IFLE_MLPPP, "MLPPP" },
+ { JUNIPER_IFLE_MONITOR, "Monitor" },
+ { JUNIPER_IFLE_PIMD_DECAPS, "PIMd" },
+ { JUNIPER_IFLE_PIM_NULL, "PIM Null" },
+ { JUNIPER_IFLE_PPP, "PPP" },
+ { JUNIPER_IFLE_PPPOE, "PPPoE" },
+ { JUNIPER_IFLE_PPP_CCC, "PPP CCC" },
+ { JUNIPER_IFLE_PPP_SUBORDINATE, "" },
+ { JUNIPER_IFLE_PPP_TCC, "PPP TCC" },
+ { JUNIPER_IFLE_SERVICES, "General Services" },
+ { JUNIPER_IFLE_VLAN_CCC, "VLAN CCC" },
+ { JUNIPER_IFLE_VLAN_TCC, "VLAN TCC" },
+ { JUNIPER_IFLE_VT, "VT" },
+ {0, NULL}
+};
+
+struct juniper_cookie_table_t {
+ uint32_t pictype; /* pic type */
+ uint8_t cookie_len; /* cookie len */
+ const char *s; /* pic name */
+};
+
+static const struct juniper_cookie_table_t juniper_cookie_table[] = {
+#ifdef DLT_JUNIPER_ATM1
+ { DLT_JUNIPER_ATM1, 4, "ATM1"},
+#endif
+#ifdef DLT_JUNIPER_ATM2
+ { DLT_JUNIPER_ATM2, 8, "ATM2"},
+#endif
+#ifdef DLT_JUNIPER_MLPPP
+ { DLT_JUNIPER_MLPPP, 2, "MLPPP"},
+#endif
+#ifdef DLT_JUNIPER_MLFR
+ { DLT_JUNIPER_MLFR, 2, "MLFR"},
+#endif
+#ifdef DLT_JUNIPER_MFR
+ { DLT_JUNIPER_MFR, 4, "MFR"},
+#endif
+#ifdef DLT_JUNIPER_PPPOE
+ { DLT_JUNIPER_PPPOE, 0, "PPPoE"},
+#endif
+#ifdef DLT_JUNIPER_PPPOE_ATM
+ { DLT_JUNIPER_PPPOE_ATM, 0, "PPPoE ATM"},
+#endif
+#ifdef DLT_JUNIPER_GGSN
+ { DLT_JUNIPER_GGSN, 8, "GGSN"},
+#endif
+#ifdef DLT_JUNIPER_MONITOR
+ { DLT_JUNIPER_MONITOR, 8, "MONITOR"},
+#endif
+#ifdef DLT_JUNIPER_SERVICES
+ { DLT_JUNIPER_SERVICES, 8, "AS"},
+#endif
+#ifdef DLT_JUNIPER_ES
+ { DLT_JUNIPER_ES, 0, "ES"},
+#endif
+ { 0, 0, NULL }
+};
+
+struct juniper_l2info_t {
+ uint32_t length;
+ uint32_t caplen;
+ uint32_t pictype;
+ uint8_t direction;
+ u_int header_len;
+ uint8_t cookie_len;
+ uint8_t cookie_type;
+ uint8_t cookie[8];
+ u_int bundle;
+ uint16_t proto;
+ uint8_t flags;
+};
+
+#define LS_COOKIE_ID 0x54
+#define AS_COOKIE_ID 0x47
+#define LS_MLFR_COOKIE_LEN 4
+#define ML_MLFR_COOKIE_LEN 2
+#define LS_MFR_COOKIE_LEN 6
+#define ATM1_COOKIE_LEN 4
+#define ATM2_COOKIE_LEN 8
+
+#define ATM2_PKT_TYPE_MASK 0x70
+#define ATM2_GAP_COUNT_MASK 0x3F
+
+#define JUNIPER_PROTO_NULL 1
+#define JUNIPER_PROTO_IPV4 2
+#define JUNIPER_PROTO_IPV6 6
+
+#define MFR_BE_MASK 0xc0
+
+#ifdef DLT_JUNIPER_GGSN
+static const struct tok juniper_protocol_values[] = {
+ { JUNIPER_PROTO_NULL, "Null" },
+ { JUNIPER_PROTO_IPV4, "IPv4" },
+ { JUNIPER_PROTO_IPV6, "IPv6" },
+ { 0, NULL}
+};
+#endif
+
+static int ip_heuristic_guess(netdissect_options *, const u_char *, u_int);
+#ifdef DLT_JUNIPER_ATM2
+static int juniper_ppp_heuristic_guess(netdissect_options *, const u_char *, u_int);
+#endif
+static int juniper_parse_header(netdissect_options *, const u_char *, const struct pcap_pkthdr *, struct juniper_l2info_t *);
+
+#ifdef DLT_JUNIPER_GGSN
+void
+juniper_ggsn_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+ struct juniper_ggsn_header {
+ nd_uint8_t svc_id;
+ nd_uint8_t flags_len;
+ nd_uint8_t proto;
+ nd_uint8_t flags;
+ nd_uint16_t vlan_id;
+ nd_byte res[2];
+ };
+ const struct juniper_ggsn_header *gh;
+ uint8_t proto;
+
+ ndo->ndo_protocol = "juniper_ggsn";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_GGSN;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+ gh = (struct juniper_ggsn_header *)&l2info.cookie;
+
+ /* use EXTRACT_, not GET_ (not packet buffer pointer) */
+ proto = EXTRACT_U_1(gh->proto);
+ if (ndo->ndo_eflag) {
+ ND_PRINT("proto %s (%u), vlan %u: ",
+ tok2str(juniper_protocol_values,"Unknown",proto),
+ proto,
+ EXTRACT_BE_U_2(gh->vlan_id));
+ }
+
+ switch (proto) {
+ case JUNIPER_PROTO_IPV4:
+ ip_print(ndo, p, l2info.length);
+ break;
+ case JUNIPER_PROTO_IPV6:
+ ip6_print(ndo, p, l2info.length);
+ break;
+ default:
+ if (!ndo->ndo_eflag)
+ ND_PRINT("unknown GGSN proto (%u)", proto);
+ }
+
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+#ifdef DLT_JUNIPER_ES
+void
+juniper_es_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+ struct juniper_ipsec_header {
+ nd_uint16_t sa_index;
+ nd_uint8_t ttl;
+ nd_uint8_t type;
+ nd_uint32_t spi;
+ nd_ipv4 src_ip;
+ nd_ipv4 dst_ip;
+ };
+ u_int rewrite_len,es_type_bundle;
+ const struct juniper_ipsec_header *ih;
+
+ ndo->ndo_protocol = "juniper_es";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_ES;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+ ih = (const struct juniper_ipsec_header *)p;
+
+ ND_TCHECK_SIZE(ih);
+ switch (GET_U_1(ih->type)) {
+ case JUNIPER_IPSEC_O_ESP_ENCRYPT_ESP_AUTHEN_TYPE:
+ case JUNIPER_IPSEC_O_ESP_ENCRYPT_AH_AUTHEN_TYPE:
+ rewrite_len = 0;
+ es_type_bundle = 1;
+ break;
+ case JUNIPER_IPSEC_O_ESP_AUTHENTICATION_TYPE:
+ case JUNIPER_IPSEC_O_AH_AUTHENTICATION_TYPE:
+ case JUNIPER_IPSEC_O_ESP_ENCRYPTION_TYPE:
+ rewrite_len = 16;
+ es_type_bundle = 0;
+ break;
+ default:
+ ND_PRINT("ES Invalid type %u, length %u",
+ GET_U_1(ih->type),
+ l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ l2info.length-=rewrite_len;
+ p+=rewrite_len;
+
+ if (ndo->ndo_eflag) {
+ if (!es_type_bundle) {
+ ND_PRINT("ES SA, index %u, ttl %u type %s (%u), spi %u, Tunnel %s > %s, length %u\n",
+ GET_BE_U_2(ih->sa_index),
+ GET_U_1(ih->ttl),
+ tok2str(juniper_ipsec_type_values,"Unknown",GET_U_1(ih->type)),
+ GET_U_1(ih->type),
+ GET_BE_U_4(ih->spi),
+ GET_IPADDR_STRING(ih->src_ip),
+ GET_IPADDR_STRING(ih->dst_ip),
+ l2info.length);
+ } else {
+ ND_PRINT("ES SA, index %u, ttl %u type %s (%u), length %u\n",
+ GET_BE_U_2(ih->sa_index),
+ GET_U_1(ih->ttl),
+ tok2str(juniper_ipsec_type_values,"Unknown",GET_U_1(ih->type)),
+ GET_U_1(ih->type),
+ l2info.length);
+ }
+ }
+
+ ip_print(ndo, p, l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+#ifdef DLT_JUNIPER_MONITOR
+void
+juniper_monitor_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+ struct juniper_monitor_header {
+ nd_uint8_t pkt_type;
+ nd_byte padding;
+ nd_uint16_t iif;
+ nd_uint32_t service_id;
+ };
+ const struct juniper_monitor_header *mh;
+
+ ndo->ndo_protocol = "juniper_monitor";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_MONITOR;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+ mh = (const struct juniper_monitor_header *)p;
+
+ ND_TCHECK_SIZE(mh);
+ if (ndo->ndo_eflag)
+ ND_PRINT("service-id %u, iif %u, pkt-type %u: ",
+ GET_BE_U_4(mh->service_id),
+ GET_BE_U_2(mh->iif),
+ GET_U_1(mh->pkt_type));
+
+ /* no proto field - lets guess by first byte of IP header*/
+ ip_heuristic_guess (ndo, p, l2info.length);
+
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+#ifdef DLT_JUNIPER_SERVICES
+void
+juniper_services_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+ struct juniper_services_header {
+ nd_uint8_t svc_id;
+ nd_uint8_t flags_len;
+ nd_uint16_t svc_set_id;
+ nd_byte pad;
+ nd_uint24_t dir_iif;
+ };
+ const struct juniper_services_header *sh;
+
+ ndo->ndo_protocol = "juniper_services";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_SERVICES;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+ sh = (const struct juniper_services_header *)p;
+
+ ND_TCHECK_SIZE(sh);
+ if (ndo->ndo_eflag)
+ ND_PRINT("service-id %u flags 0x%02x service-set-id 0x%04x iif %u: ",
+ GET_U_1(sh->svc_id),
+ GET_U_1(sh->flags_len),
+ GET_BE_U_2(sh->svc_set_id),
+ GET_BE_U_3(sh->dir_iif));
+
+ /* no proto field - lets guess by first byte of IP header*/
+ ip_heuristic_guess (ndo, p, l2info.length);
+
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+#ifdef DLT_JUNIPER_PPPOE
+void
+juniper_pppoe_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+
+ ndo->ndo_protocol = "juniper_pppoe";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_PPPOE;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+ /* this DLT contains nothing but raw ethernet frames */
+ ether_print(ndo, p, l2info.length, l2info.caplen, NULL, NULL);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+#ifdef DLT_JUNIPER_ETHER
+void
+juniper_ether_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+
+ ndo->ndo_protocol = "juniper_ether";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_ETHER;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+ /* this DLT contains nothing but raw Ethernet frames */
+ ndo->ndo_ll_hdr_len +=
+ l2info.header_len +
+ ether_print(ndo, p, l2info.length, l2info.caplen, NULL, NULL);
+}
+#endif
+
+#ifdef DLT_JUNIPER_PPP
+void
+juniper_ppp_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+
+ ndo->ndo_protocol = "juniper_ppp";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_PPP;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+ /* this DLT contains nothing but raw ppp frames */
+ ppp_print(ndo, p, l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+#ifdef DLT_JUNIPER_FRELAY
+void
+juniper_frelay_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+
+ ndo->ndo_protocol = "juniper_frelay";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_FRELAY;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+ /* this DLT contains nothing but raw frame-relay frames */
+ fr_print(ndo, p, l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+#ifdef DLT_JUNIPER_CHDLC
+void
+juniper_chdlc_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+
+ ndo->ndo_protocol = "juniper_chdlc";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_CHDLC;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+ /* this DLT contains nothing but raw c-hdlc frames */
+ chdlc_print(ndo, p, l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+#ifdef DLT_JUNIPER_PPPOE_ATM
+void
+juniper_pppoe_atm_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+ uint16_t extracted_ethertype;
+
+ ndo->ndo_protocol = "juniper_pppoe_atm";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_PPPOE_ATM;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+
+ extracted_ethertype = GET_BE_U_2(p);
+ /* this DLT contains nothing but raw PPPoE frames,
+ * prepended with a type field*/
+ if (ethertype_print(ndo, extracted_ethertype,
+ p+ETHERTYPE_LEN,
+ l2info.length-ETHERTYPE_LEN,
+ l2info.caplen-ETHERTYPE_LEN,
+ NULL, NULL) == 0)
+ /* ether_type not known, probably it wasn't one */
+ ND_PRINT("unknown ethertype 0x%04x", extracted_ethertype);
+
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+#ifdef DLT_JUNIPER_MLPPP
+void
+juniper_mlppp_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+
+ ndo->ndo_protocol = "juniper_mlppp";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_MLPPP;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ /* suppress Bundle-ID if frame was captured on a child-link
+ * best indicator if the cookie looks like a proto */
+ if (ndo->ndo_eflag &&
+ /* use EXTRACT_, not GET_ (not packet buffer pointer) */
+ EXTRACT_BE_U_2(&l2info.cookie) != PPP_OSI &&
+ /* use EXTRACT_, not GET_ (not packet buffer pointer) */
+ EXTRACT_BE_U_2(&l2info.cookie) != (PPP_ADDRESS << 8 | PPP_CONTROL))
+ ND_PRINT("Bundle-ID %u: ", l2info.bundle);
+
+ p+=l2info.header_len;
+
+ /* first try the LSQ protos */
+ switch(l2info.proto) {
+ case JUNIPER_LSQ_L3_PROTO_IPV4:
+ /* IP traffic going to the RE would not have a cookie
+ * -> this must be incoming IS-IS over PPP
+ */
+ if (l2info.cookie[4] == (JUNIPER_LSQ_COOKIE_RE|JUNIPER_LSQ_COOKIE_DIR))
+ ppp_print(ndo, p, l2info.length);
+ else
+ ip_print(ndo, p, l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ case JUNIPER_LSQ_L3_PROTO_IPV6:
+ ip6_print(ndo, p,l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ case JUNIPER_LSQ_L3_PROTO_MPLS:
+ mpls_print(ndo, p, l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ case JUNIPER_LSQ_L3_PROTO_ISO:
+ isoclns_print(ndo, p, l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ default:
+ break;
+ }
+
+ /* zero length cookie ? */
+ /* use EXTRACT_, not GET_ (not packet buffer pointer) */
+ switch (EXTRACT_BE_U_2(&l2info.cookie)) {
+ case PPP_OSI:
+ ppp_print(ndo, p - 2, l2info.length + 2);
+ break;
+ case (PPP_ADDRESS << 8 | PPP_CONTROL): /* fall through */
+ default:
+ ppp_print(ndo, p, l2info.length);
+ break;
+ }
+
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+
+#ifdef DLT_JUNIPER_MFR
+void
+juniper_mfr_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+
+ ndo->ndo_protocol = "juniper_mfr";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_MFR;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+
+ /* child-link ? */
+ if (l2info.cookie_len == 0) {
+ mfr_print(ndo, p, l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ /* first try the LSQ protos */
+ if (l2info.cookie_len == AS_PIC_COOKIE_LEN) {
+ switch(l2info.proto) {
+ case JUNIPER_LSQ_L3_PROTO_IPV4:
+ ip_print(ndo, p, l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ case JUNIPER_LSQ_L3_PROTO_IPV6:
+ ip6_print(ndo, p,l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ case JUNIPER_LSQ_L3_PROTO_MPLS:
+ mpls_print(ndo, p, l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ case JUNIPER_LSQ_L3_PROTO_ISO:
+ isoclns_print(ndo, p, l2info.length);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ default:
+ break;
+ }
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ /* suppress Bundle-ID if frame was captured on a child-link */
+ /* use EXTRACT_, not GET_ (not packet buffer pointer) */
+ if (ndo->ndo_eflag && EXTRACT_BE_U_4(l2info.cookie) != 1)
+ ND_PRINT("Bundle-ID %u, ", l2info.bundle);
+ switch (l2info.proto) {
+ case (LLCSAP_ISONS<<8 | LLCSAP_ISONS):
+ /* At least one byte is required */
+ ND_TCHECK_LEN(p, 1);
+ isoclns_print(ndo, p + 1, l2info.length - 1);
+ break;
+ case (LLC_UI<<8 | NLPID_Q933):
+ case (LLC_UI<<8 | NLPID_IP):
+ case (LLC_UI<<8 | NLPID_IP6):
+ /* pass IP{4,6} to the OSI layer for proper link-layer printing */
+ isoclns_print(ndo, p - 1, l2info.length + 1);
+ break;
+ default:
+ ND_PRINT("unknown protocol 0x%04x, length %u", l2info.proto, l2info.length);
+ }
+
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+#ifdef DLT_JUNIPER_MLFR
+void
+juniper_mlfr_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ struct juniper_l2info_t l2info;
+
+ ndo->ndo_protocol = "juniper_mlfr";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_MLFR;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+
+ /* suppress Bundle-ID if frame was captured on a child-link */
+ /* use EXTRACT_, not GET_ (not packet buffer pointer) */
+ if (ndo->ndo_eflag && EXTRACT_BE_U_4(l2info.cookie) != 1)
+ ND_PRINT("Bundle-ID %u, ", l2info.bundle);
+ switch (l2info.proto) {
+ case (LLC_UI):
+ case (LLC_UI<<8):
+ isoclns_print(ndo, p, l2info.length);
+ break;
+ case (LLC_UI<<8 | NLPID_Q933):
+ case (LLC_UI<<8 | NLPID_IP):
+ case (LLC_UI<<8 | NLPID_IP6):
+ /* pass IP{4,6} to the OSI layer for proper link-layer printing */
+ isoclns_print(ndo, p - 1, l2info.length + 1);
+ break;
+ default:
+ ND_PRINT("unknown protocol 0x%04x, length %u", l2info.proto, l2info.length);
+ }
+
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+/*
+ * ATM1 PIC cookie format
+ *
+ * +-----+-------------------------+-------------------------------+
+ * |fmtid| vc index | channel ID |
+ * +-----+-------------------------+-------------------------------+
+ */
+
+#ifdef DLT_JUNIPER_ATM1
+void
+juniper_atm1_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ int llc_hdrlen;
+
+ struct juniper_l2info_t l2info;
+
+ ndo->ndo_protocol = "juniper_atm1";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_ATM1;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+
+ if (l2info.cookie[0] == 0x80) { /* OAM cell ? */
+ oam_print(ndo, p, l2info.length, ATM_OAM_NOHEC);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ if (GET_BE_U_3(p) == 0xfefe03 || /* NLPID encaps ? */
+ GET_BE_U_3(p) == 0xaaaa03) { /* SNAP encaps ? */
+
+ llc_hdrlen = llc_print(ndo, p, l2info.length, l2info.caplen, NULL, NULL);
+ if (llc_hdrlen > 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+ }
+
+ if (GET_U_1(p) == 0x03) { /* Cisco style NLPID encaps ? */
+ /* At least one byte is required */
+ ND_TCHECK_LEN(p, 1);
+ isoclns_print(ndo, p + 1, l2info.length - 1);
+ /* FIXME check if frame was recognized */
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ if (ip_heuristic_guess(ndo, p, l2info.length) != 0) { /* last try - vcmux encaps ? */
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+#endif
+
+/*
+ * ATM2 PIC cookie format
+ *
+ * +-------------------------------+---------+---+-----+-----------+
+ * | channel ID | reserv |AAL| CCRQ| gap cnt |
+ * +-------------------------------+---------+---+-----+-----------+
+ */
+
+#ifdef DLT_JUNIPER_ATM2
+void
+juniper_atm2_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ int llc_hdrlen;
+
+ struct juniper_l2info_t l2info;
+
+ ndo->ndo_protocol = "juniper_atm2";
+ memset(&l2info, 0, sizeof(l2info));
+ l2info.pictype = DLT_JUNIPER_ATM2;
+ if (juniper_parse_header(ndo, p, h, &l2info) == 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ p+=l2info.header_len;
+
+ if (l2info.cookie[7] & ATM2_PKT_TYPE_MASK) { /* OAM cell ? */
+ oam_print(ndo, p, l2info.length, ATM_OAM_NOHEC);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ if (GET_BE_U_3(p) == 0xfefe03 || /* NLPID encaps ? */
+ GET_BE_U_3(p) == 0xaaaa03) { /* SNAP encaps ? */
+
+ llc_hdrlen = llc_print(ndo, p, l2info.length, l2info.caplen, NULL, NULL);
+ if (llc_hdrlen > 0) {
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+ }
+
+ if (l2info.direction != JUNIPER_BPF_PKT_IN && /* ether-over-1483 encaps ? */
+ /* use EXTRACT_, not GET_ (not packet buffer pointer) */
+ (EXTRACT_BE_U_4(l2info.cookie) & ATM2_GAP_COUNT_MASK)) {
+ ether_print(ndo, p, l2info.length, l2info.caplen, NULL, NULL);
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ if (GET_U_1(p) == 0x03) { /* Cisco style NLPID encaps ? */
+ /* At least one byte is required */
+ ND_TCHECK_LEN(p, 1);
+ isoclns_print(ndo, p + 1, l2info.length - 1);
+ /* FIXME check if frame was recognized */
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ if(juniper_ppp_heuristic_guess(ndo, p, l2info.length) != 0) { /* PPPoA vcmux encaps ? */
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ if (ip_heuristic_guess(ndo, p, l2info.length) != 0) { /* last try - vcmux encaps ? */
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+ return;
+ }
+
+ ndo->ndo_ll_hdr_len += l2info.header_len;
+}
+
+/* try to guess, based on all PPP protos that are supported in
+ * a juniper router if the payload data is encapsulated using PPP */
+static int
+juniper_ppp_heuristic_guess(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ switch(GET_BE_U_2(p)) {
+ case PPP_IP :
+ case PPP_OSI :
+ case PPP_MPLS_UCAST :
+ case PPP_MPLS_MCAST :
+ case PPP_IPCP :
+ case PPP_OSICP :
+ case PPP_MPLSCP :
+ case PPP_LCP :
+ case PPP_PAP :
+ case PPP_CHAP :
+ case PPP_ML :
+ case PPP_IPV6 :
+ case PPP_IPV6CP :
+ ppp_print(ndo, p, length);
+ break;
+
+ default:
+ return 0; /* did not find a ppp header */
+ break;
+ }
+ return 1; /* we printed a ppp packet */
+}
+#endif
+
+static int
+ip_heuristic_guess(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ switch(GET_U_1(p)) {
+ case 0x45:
+ case 0x46:
+ case 0x47:
+ case 0x48:
+ case 0x49:
+ case 0x4a:
+ case 0x4b:
+ case 0x4c:
+ case 0x4d:
+ case 0x4e:
+ case 0x4f:
+ ip_print(ndo, p, length);
+ break;
+ case 0x60:
+ case 0x61:
+ case 0x62:
+ case 0x63:
+ case 0x64:
+ case 0x65:
+ case 0x66:
+ case 0x67:
+ case 0x68:
+ case 0x69:
+ case 0x6a:
+ case 0x6b:
+ case 0x6c:
+ case 0x6d:
+ case 0x6e:
+ case 0x6f:
+ ip6_print(ndo, p, length);
+ break;
+ default:
+ return 0; /* did not find a ip header */
+ break;
+ }
+ return 1; /* we printed an v4/v6 packet */
+}
+
+static int
+juniper_read_tlv_value(netdissect_options *ndo,
+ const u_char *p, u_int tlv_type, u_int tlv_len)
+{
+ int tlv_value;
+
+ /* TLVs < 128 are little endian encoded */
+ if (tlv_type < 128) {
+ switch (tlv_len) {
+ case 1:
+ tlv_value = GET_U_1(p);
+ break;
+ case 2:
+ tlv_value = GET_LE_U_2(p);
+ break;
+ case 3:
+ tlv_value = GET_LE_U_3(p);
+ break;
+ case 4:
+ tlv_value = GET_LE_U_4(p);
+ break;
+ default:
+ tlv_value = -1;
+ break;
+ }
+ } else {
+ /* TLVs >= 128 are big endian encoded */
+ switch (tlv_len) {
+ case 1:
+ tlv_value = GET_U_1(p);
+ break;
+ case 2:
+ tlv_value = GET_BE_U_2(p);
+ break;
+ case 3:
+ tlv_value = GET_BE_U_3(p);
+ break;
+ case 4:
+ tlv_value = GET_BE_U_4(p);
+ break;
+ default:
+ tlv_value = -1;
+ break;
+ }
+ }
+ return tlv_value;
+}
+
+static int
+juniper_parse_header(netdissect_options *ndo,
+ const u_char *p, const struct pcap_pkthdr *h, struct juniper_l2info_t *l2info)
+{
+ const struct juniper_cookie_table_t *lp;
+ u_int idx, extension_length, jnx_header_len = 0;
+ uint8_t tlv_type,tlv_len;
+#ifdef DLT_JUNIPER_ATM2
+ uint32_t control_word;
+#endif
+ int tlv_value;
+ const u_char *tptr;
+
+
+ l2info->header_len = 0;
+ l2info->cookie_len = 0;
+ l2info->proto = 0;
+
+
+ l2info->length = h->len;
+ l2info->caplen = h->caplen;
+ l2info->flags = GET_U_1(p + 3);
+ l2info->direction = GET_U_1(p + 3) & JUNIPER_BPF_PKT_IN;
+
+ if (GET_BE_U_3(p) != JUNIPER_MGC_NUMBER) { /* magic number found ? */
+ ND_PRINT("no magic-number found!");
+ return 0;
+ }
+
+ if (ndo->ndo_eflag) /* print direction */
+ ND_PRINT("%3s ", tok2str(juniper_direction_values, "---", l2info->direction));
+
+ /* magic number + flags */
+ jnx_header_len = 4;
+
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("\n\tJuniper PCAP Flags [%s]",
+ bittok2str(jnx_flag_values, "none", l2info->flags));
+
+ /* extensions present ? - calculate how much bytes to skip */
+ if ((l2info->flags & JUNIPER_BPF_EXT ) == JUNIPER_BPF_EXT ) {
+
+ tptr = p+jnx_header_len;
+
+ /* ok to read extension length ? */
+ extension_length = GET_BE_U_2(tptr);
+ jnx_header_len += 2;
+ tptr +=2;
+
+ /* nail up the total length -
+ * just in case something goes wrong
+ * with TLV parsing */
+ jnx_header_len += extension_length;
+
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT(", PCAP Extension(s) total length %u", extension_length);
+
+ ND_TCHECK_LEN(tptr, extension_length);
+ while (extension_length > JUNIPER_EXT_TLV_OVERHEAD) {
+ tlv_type = GET_U_1(tptr);
+ tptr++;
+ tlv_len = GET_U_1(tptr);
+ tptr++;
+ tlv_value = 0;
+
+ /* sanity checks */
+ if (tlv_type == 0 || tlv_len == 0)
+ break;
+ ND_LCHECK_U(extension_length, tlv_len + JUNIPER_EXT_TLV_OVERHEAD);
+
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("\n\t %s Extension TLV #%u, length %u, value ",
+ tok2str(jnx_ext_tlv_values,"Unknown",tlv_type),
+ tlv_type,
+ tlv_len);
+
+ tlv_value = juniper_read_tlv_value(ndo, tptr, tlv_type, tlv_len);
+ switch (tlv_type) {
+ case JUNIPER_EXT_TLV_IFD_NAME:
+ /* FIXME */
+ break;
+ case JUNIPER_EXT_TLV_IFD_MEDIATYPE:
+ case JUNIPER_EXT_TLV_TTP_IFD_MEDIATYPE:
+ if (tlv_value != -1) {
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("%s (%u)",
+ tok2str(juniper_ifmt_values, "Unknown", tlv_value),
+ tlv_value);
+ }
+ break;
+ case JUNIPER_EXT_TLV_IFL_ENCAPS:
+ case JUNIPER_EXT_TLV_TTP_IFL_ENCAPS:
+ if (tlv_value != -1) {
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("%s (%u)",
+ tok2str(juniper_ifle_values, "Unknown", tlv_value),
+ tlv_value);
+ }
+ break;
+ case JUNIPER_EXT_TLV_IFL_IDX: /* fall through */
+ case JUNIPER_EXT_TLV_IFL_UNIT:
+ case JUNIPER_EXT_TLV_IFD_IDX:
+ default:
+ if (tlv_value != -1) {
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("%u", tlv_value);
+ }
+ break;
+ }
+
+ tptr+=tlv_len;
+ extension_length -= tlv_len+JUNIPER_EXT_TLV_OVERHEAD;
+ }
+
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("\n\t-----original packet-----\n\t");
+ }
+
+ if ((l2info->flags & JUNIPER_BPF_NO_L2 ) == JUNIPER_BPF_NO_L2 ) {
+ if (ndo->ndo_eflag)
+ ND_PRINT("no-L2-hdr, ");
+
+ /* there is no link-layer present -
+ * perform the v4/v6 heuristics
+ * to figure out what it is
+ */
+ ND_TCHECK_1(p + (jnx_header_len + 4));
+ if (ip_heuristic_guess(ndo, p + jnx_header_len + 4,
+ l2info->length - (jnx_header_len + 4)) == 0)
+ ND_PRINT("no IP-hdr found!");
+
+ l2info->header_len=jnx_header_len+4;
+ return 0; /* stop parsing the output further */
+
+ }
+ l2info->header_len = jnx_header_len;
+ p+=l2info->header_len;
+ l2info->length -= l2info->header_len;
+ l2info->caplen -= l2info->header_len;
+
+ /* search through the cookie table for one matching our PIC type */
+ lp = NULL;
+ for (const struct juniper_cookie_table_t *table_lp = juniper_cookie_table;
+ table_lp->s != NULL; table_lp++) {
+ if (table_lp->pictype == l2info->pictype) {
+ lp = table_lp;
+ break;
+ }
+ }
+
+ /* If we found one matching our PIC type, copy its values */
+ if (lp != NULL) {
+ l2info->cookie_len += lp->cookie_len;
+
+ switch (GET_U_1(p)) {
+ case LS_COOKIE_ID:
+ l2info->cookie_type = LS_COOKIE_ID;
+ l2info->cookie_len += 2;
+ break;
+ case AS_COOKIE_ID:
+ l2info->cookie_type = AS_COOKIE_ID;
+ l2info->cookie_len = 8;
+ break;
+
+ default:
+ l2info->bundle = l2info->cookie[0];
+ break;
+ }
+
+
+#ifdef DLT_JUNIPER_MFR
+ /* MFR child links don't carry cookies */
+ if (l2info->pictype == DLT_JUNIPER_MFR &&
+ (GET_U_1(p) & MFR_BE_MASK) == MFR_BE_MASK) {
+ l2info->cookie_len = 0;
+ }
+#endif
+
+ l2info->header_len += l2info->cookie_len;
+ l2info->length -= l2info->cookie_len;
+ l2info->caplen -= l2info->cookie_len;
+
+ if (ndo->ndo_eflag)
+ ND_PRINT("%s-PIC, cookie-len %u",
+ lp->s,
+ l2info->cookie_len);
+
+ if (l2info->cookie_len > 8) {
+ nd_print_invalid(ndo);
+ return 0;
+ }
+
+ if (l2info->cookie_len > 0) {
+ ND_TCHECK_LEN(p, l2info->cookie_len);
+ if (ndo->ndo_eflag)
+ ND_PRINT(", cookie 0x");
+ for (idx = 0; idx < l2info->cookie_len; idx++) {
+ l2info->cookie[idx] = GET_U_1(p + idx); /* copy cookie data */
+ if (ndo->ndo_eflag) ND_PRINT("%02x", GET_U_1(p + idx));
+ }
+ }
+
+ if (ndo->ndo_eflag) ND_PRINT(": "); /* print demarc b/w L2/L3*/
+
+
+ l2info->proto = GET_BE_U_2(p + l2info->cookie_len);
+ }
+ p+=l2info->cookie_len;
+
+ /* DLT_ specific parsing */
+ switch(l2info->pictype) {
+#ifdef DLT_JUNIPER_MLPPP
+ case DLT_JUNIPER_MLPPP:
+ switch (l2info->cookie_type) {
+ case LS_COOKIE_ID:
+ l2info->bundle = l2info->cookie[1];
+ break;
+ case AS_COOKIE_ID:
+ /* use EXTRACT_, not GET_ (not packet buffer pointer) */
+ l2info->bundle = (EXTRACT_BE_U_2(&l2info->cookie[6])>>3)&0xfff;
+ l2info->proto = (l2info->cookie[5])&JUNIPER_LSQ_L3_PROTO_MASK;
+ break;
+ default:
+ l2info->bundle = l2info->cookie[0];
+ break;
+ }
+ break;
+#endif
+#ifdef DLT_JUNIPER_MLFR
+ case DLT_JUNIPER_MLFR:
+ switch (l2info->cookie_type) {
+ case LS_COOKIE_ID:
+ l2info->bundle = l2info->cookie[1];
+ l2info->proto = GET_BE_U_2(p);
+ l2info->header_len += 2;
+ l2info->length -= 2;
+ l2info->caplen -= 2;
+ break;
+ case AS_COOKIE_ID:
+ /* use EXTRACT_, not GET_ (not packet buffer pointer) */
+ l2info->bundle = (EXTRACT_BE_U_2(&l2info->cookie[6])>>3)&0xfff;
+ l2info->proto = (l2info->cookie[5])&JUNIPER_LSQ_L3_PROTO_MASK;
+ break;
+ default:
+ l2info->bundle = l2info->cookie[0];
+ l2info->header_len += 2;
+ l2info->length -= 2;
+ l2info->caplen -= 2;
+ break;
+ }
+ break;
+#endif
+#ifdef DLT_JUNIPER_MFR
+ case DLT_JUNIPER_MFR:
+ switch (l2info->cookie_type) {
+ case LS_COOKIE_ID:
+ l2info->bundle = l2info->cookie[1];
+ l2info->proto = GET_BE_U_2(p);
+ l2info->header_len += 2;
+ l2info->length -= 2;
+ l2info->caplen -= 2;
+ break;
+ case AS_COOKIE_ID:
+ /* use EXTRACT_, not GET_ (not packet buffer pointer) */
+ l2info->bundle = (EXTRACT_BE_U_2(&l2info->cookie[6])>>3)&0xfff;
+ l2info->proto = (l2info->cookie[5])&JUNIPER_LSQ_L3_PROTO_MASK;
+ break;
+ default:
+ l2info->bundle = l2info->cookie[0];
+ break;
+ }
+ break;
+#endif
+#ifdef DLT_JUNIPER_ATM2
+ case DLT_JUNIPER_ATM2:
+ ND_TCHECK_4(p);
+ /* ATM cell relay control word present ? */
+ if (l2info->cookie[7] & ATM2_PKT_TYPE_MASK) {
+ control_word = GET_BE_U_4(p);
+ /* some control word heuristics */
+ switch(control_word) {
+ case 0: /* zero control word */
+ case 0x08000000: /* < JUNOS 7.4 control-word */
+ case 0x08380000: /* cntl word plus cell length (56) >= JUNOS 7.4*/
+ l2info->header_len += 4;
+ break;
+ default:
+ break;
+ }
+
+ if (ndo->ndo_eflag)
+ ND_PRINT("control-word 0x%08x ", control_word);
+ }
+ break;
+#endif
+#ifdef DLT_JUNIPER_ES
+ case DLT_JUNIPER_ES:
+ break;
+#endif
+#ifdef DLT_JUNIPER_GGSN
+ case DLT_JUNIPER_GGSN:
+ break;
+#endif
+#ifdef DLT_JUNIPER_SERVICES
+ case DLT_JUNIPER_SERVICES:
+ break;
+#endif
+#ifdef DLT_JUNIPER_ATM1
+ case DLT_JUNIPER_ATM1:
+ break;
+#endif
+#ifdef DLT_JUNIPER_PPP
+ case DLT_JUNIPER_PPP:
+ break;
+#endif
+#ifdef DLT_JUNIPER_CHDLC
+ case DLT_JUNIPER_CHDLC:
+ break;
+#endif
+#ifdef DLT_JUNIPER_ETHER
+ case DLT_JUNIPER_ETHER:
+ break;
+#endif
+#ifdef DLT_JUNIPER_FRELAY
+ case DLT_JUNIPER_FRELAY:
+ break;
+#endif
+#ifdef DLT_JUNIPER_MONITOR
+ case DLT_JUNIPER_MONITOR:
+ break;
+#endif
+#ifdef DLT_JUNIPER_PPPOE
+ case DLT_JUNIPER_PPPOE:
+ break;
+#endif
+#ifdef DLT_JUNIPER_PPPOE_ATM
+ case DLT_JUNIPER_PPPOE_ATM:
+ break;
+#endif
+
+ default:
+ ND_PRINT("Unknown Juniper DLT_ type %u: ", l2info->pictype);
+ break;
+ }
+
+ if (ndo->ndo_eflag)
+ ND_PRINT("hlen %u, proto 0x%04x, ", l2info->header_len, l2info->proto);
+
+ return 1; /* everything went ok so far. continue parsing */
+invalid:
+ nd_print_invalid(ndo);
+ return 0;
+}
+#endif /* defined(DLT_JUNIPER_GGSN) || defined(DLT_JUNIPER_ES) || \
+ defined(DLT_JUNIPER_MONITOR) || defined(DLT_JUNIPER_SERVICES) || \
+ defined(DLT_JUNIPER_PPPOE) || defined(DLT_JUNIPER_ETHER) || \
+ defined(DLT_JUNIPER_PPP) || defined(DLT_JUNIPER_FRELAY) || \
+ defined(DLT_JUNIPER_CHDLC) || defined(DLT_JUNIPER_PPPOE_ATM) || \
+ defined(DLT_JUNIPER_MLPPP) || defined(DLT_JUNIPER_MFR) || \
+ defined(DLT_JUNIPER_MLFR) || defined(DLT_JUNIPER_ATM1) || \
+ defined(DLT_JUNIPER_ATM2) */
diff --git a/print-krb.c b/print-krb.c
new file mode 100644
index 0000000..959b555
--- /dev/null
+++ b/print-krb.c
@@ -0,0 +1,259 @@
+/*
+ * Copyright (c) 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Initial contribution from John Hawkinson (jhawk@mit.edu).
+ */
+
+/* \summary: Kerberos printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+/*
+ * Kerberos 4:
+ *
+ * Athena Technical Plan
+ * Section E.2.1
+ * Kerberos Authentication and Authorization System
+ * by S. P. Miller, B. C. Neuman, J. I. Schiller, and J. H. Saltzer
+ *
+ * https://web.mit.edu/Saltzer/www/publications/athenaplan/e.2.1.pdf
+ *
+ * 7. Appendix I Design Specifications
+ *
+ * Kerberos 5:
+ *
+ * RFC 1510, RFC 2630, etc.
+ */
+
+
+static const u_char *c_print(netdissect_options *, const u_char *, const u_char *);
+static const u_char *krb4_print_hdr(netdissect_options *, const u_char *);
+static void krb4_print(netdissect_options *, const u_char *);
+
+#define AUTH_MSG_KDC_REQUEST 1<<1
+#define AUTH_MSG_KDC_REPLY 2<<1
+#define AUTH_MSG_APPL_REQUEST 3<<1
+#define AUTH_MSG_APPL_REQUEST_MUTUAL 4<<1
+#define AUTH_MSG_ERR_REPLY 5<<1
+#define AUTH_MSG_PRIVATE 6<<1
+#define AUTH_MSG_SAFE 7<<1
+#define AUTH_MSG_APPL_ERR 8<<1
+#define AUTH_MSG_DIE 63<<1
+
+#define KERB_ERR_OK 0
+#define KERB_ERR_NAME_EXP 1
+#define KERB_ERR_SERVICE_EXP 2
+#define KERB_ERR_AUTH_EXP 3
+#define KERB_ERR_PKT_VER 4
+#define KERB_ERR_NAME_MAST_KEY_VER 5
+#define KERB_ERR_SERV_MAST_KEY_VER 6
+#define KERB_ERR_BYTE_ORDER 7
+#define KERB_ERR_PRINCIPAL_UNKNOWN 8
+#define KERB_ERR_PRINCIPAL_NOT_UNIQUE 9
+#define KERB_ERR_NULL_KEY 10
+
+struct krb {
+ nd_uint8_t pvno; /* Protocol Version */
+ nd_uint8_t type; /* Type+B */
+};
+
+static const struct tok type2str[] = {
+ { AUTH_MSG_KDC_REQUEST, "KDC_REQUEST" },
+ { AUTH_MSG_KDC_REPLY, "KDC_REPLY" },
+ { AUTH_MSG_APPL_REQUEST, "APPL_REQUEST" },
+ { AUTH_MSG_APPL_REQUEST_MUTUAL, "APPL_REQUEST_MUTUAL" },
+ { AUTH_MSG_ERR_REPLY, "ERR_REPLY" },
+ { AUTH_MSG_PRIVATE, "PRIVATE" },
+ { AUTH_MSG_SAFE, "SAFE" },
+ { AUTH_MSG_APPL_ERR, "APPL_ERR" },
+ { AUTH_MSG_DIE, "DIE" },
+ { 0, NULL }
+};
+
+static const struct tok kerr2str[] = {
+ { KERB_ERR_OK, "OK" },
+ { KERB_ERR_NAME_EXP, "NAME_EXP" },
+ { KERB_ERR_SERVICE_EXP, "SERVICE_EXP" },
+ { KERB_ERR_AUTH_EXP, "AUTH_EXP" },
+ { KERB_ERR_PKT_VER, "PKT_VER" },
+ { KERB_ERR_NAME_MAST_KEY_VER, "NAME_MAST_KEY_VER" },
+ { KERB_ERR_SERV_MAST_KEY_VER, "SERV_MAST_KEY_VER" },
+ { KERB_ERR_BYTE_ORDER, "BYTE_ORDER" },
+ { KERB_ERR_PRINCIPAL_UNKNOWN, "PRINCIPAL_UNKNOWN" },
+ { KERB_ERR_PRINCIPAL_NOT_UNIQUE,"PRINCIPAL_NOT_UNIQUE" },
+ { KERB_ERR_NULL_KEY, "NULL_KEY"},
+ { 0, NULL}
+};
+
+static const u_char *
+c_print(netdissect_options *ndo,
+ const u_char *s, const u_char *ep)
+{
+ u_char c;
+ int flag;
+
+ flag = 1;
+ while (s < ep) {
+ c = GET_U_1(s);
+ s++;
+ if (c == '\0') {
+ flag = 0;
+ break;
+ }
+ fn_print_char(ndo, c);
+ }
+ if (flag)
+ return NULL;
+ return (s);
+}
+
+static const u_char *
+krb4_print_hdr(netdissect_options *ndo,
+ const u_char *cp)
+{
+ cp += 2;
+
+#define PRINT if ((cp = c_print(ndo, cp, ndo->ndo_snapend)) == NULL) goto trunc
+
+ PRINT;
+ ND_PRINT(".");
+ PRINT;
+ ND_PRINT("@");
+ PRINT;
+ return (cp);
+
+trunc:
+ nd_print_trunc(ndo);
+ return (NULL);
+
+#undef PRINT
+}
+
+static void
+krb4_print(netdissect_options *ndo,
+ const u_char *cp)
+{
+ const struct krb *kp;
+ u_char type;
+ u_short len;
+
+#define PRINT if ((cp = c_print(ndo, cp, ndo->ndo_snapend)) == NULL) goto trunc
+/* True if struct krb is little endian */
+#define IS_LENDIAN(kp) ((GET_U_1((kp)->type) & 0x01) != 0)
+#define KTOHSP(kp, cp) (IS_LENDIAN(kp) ? GET_LE_U_2(cp) : GET_BE_U_2(cp))
+
+ kp = (const struct krb *)cp;
+
+ type = GET_U_1(kp->type) & (0xFF << 1);
+
+ ND_PRINT(" %s %s: ",
+ IS_LENDIAN(kp) ? "le" : "be", tok2str(type2str, NULL, type));
+
+ switch (type) {
+
+ case AUTH_MSG_KDC_REQUEST:
+ if ((cp = krb4_print_hdr(ndo, cp)) == NULL)
+ return;
+ cp += 4; /* ctime */
+ ND_PRINT(" %umin ", GET_U_1(cp) * 5);
+ cp++;
+ PRINT;
+ ND_PRINT(".");
+ PRINT;
+ break;
+
+ case AUTH_MSG_APPL_REQUEST:
+ cp += 2;
+ ND_PRINT("v%u ", GET_U_1(cp));
+ cp++;
+ PRINT;
+ ND_PRINT(" (%u)", GET_U_1(cp));
+ cp++;
+ ND_PRINT(" (%u)", GET_U_1(cp));
+ break;
+
+ case AUTH_MSG_KDC_REPLY:
+ if ((cp = krb4_print_hdr(ndo, cp)) == NULL)
+ return;
+ cp += 10; /* timestamp + n + exp + kvno */
+ len = KTOHSP(kp, cp);
+ ND_PRINT(" (%u)", len);
+ break;
+
+ case AUTH_MSG_ERR_REPLY:
+ if ((cp = krb4_print_hdr(ndo, cp)) == NULL)
+ return;
+ cp += 4; /* timestamp */
+ ND_PRINT(" %s ", tok2str(kerr2str, NULL, KTOHSP(kp, cp)));
+ cp += 4;
+ PRINT;
+ break;
+
+ default:
+ ND_PRINT("(unknown)");
+ break;
+ }
+
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+void
+krb_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct krb *kp;
+
+ ndo->ndo_protocol = "krb";
+ kp = (const struct krb *)dat;
+
+ if (dat >= ndo->ndo_snapend) {
+ nd_print_trunc(ndo);
+ return;
+ }
+
+ switch (GET_U_1(kp->pvno)) {
+
+ case 1:
+ case 2:
+ case 3:
+ ND_PRINT(" v%u", GET_U_1(kp->pvno));
+ break;
+
+ case 4:
+ ND_PRINT(" v%u", GET_U_1(kp->pvno));
+ krb4_print(ndo, (const u_char *)kp);
+ break;
+
+ case 106:
+ case 107:
+ ND_PRINT(" v5");
+ /* Decode ASN.1 here "someday" */
+ break;
+ }
+}
diff --git a/print-l2tp.c b/print-l2tp.c
new file mode 100644
index 0000000..895efd2
--- /dev/null
+++ b/print-l2tp.c
@@ -0,0 +1,859 @@
+/*
+ * Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * L2TP support contributed by Motonori Shindo (mshindo@mshindo.net)
+ */
+
+/* \summary: Layer Two Tunneling Protocol (L2TP) printer */
+
+/* specification: RFC 2661 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+#define L2TP_FLAG_TYPE 0x8000 /* Type (0=Data, 1=Control) */
+#define L2TP_FLAG_LENGTH 0x4000 /* Length */
+#define L2TP_FLAG_SEQUENCE 0x0800 /* Sequence */
+#define L2TP_FLAG_OFFSET 0x0200 /* Offset */
+#define L2TP_FLAG_PRIORITY 0x0100 /* Priority */
+
+#define L2TP_VERSION_MASK 0x000f /* Version Mask */
+#define L2TP_VERSION_L2F 0x0001 /* L2F */
+#define L2TP_VERSION_L2TP 0x0002 /* L2TP */
+
+#define L2TP_AVP_HDR_FLAG_MANDATORY 0x8000 /* Mandatory Flag */
+#define L2TP_AVP_HDR_FLAG_HIDDEN 0x4000 /* Hidden Flag */
+#define L2TP_AVP_HDR_LEN_MASK 0x03ff /* Length Mask */
+
+#define L2TP_FRAMING_CAP_SYNC_MASK 0x00000001 /* Synchronous */
+#define L2TP_FRAMING_CAP_ASYNC_MASK 0x00000002 /* Asynchronous */
+
+#define L2TP_FRAMING_TYPE_SYNC_MASK 0x00000001 /* Synchronous */
+#define L2TP_FRAMING_TYPE_ASYNC_MASK 0x00000002 /* Asynchronous */
+
+#define L2TP_BEARER_CAP_DIGITAL_MASK 0x00000001 /* Digital */
+#define L2TP_BEARER_CAP_ANALOG_MASK 0x00000002 /* Analog */
+
+#define L2TP_BEARER_TYPE_DIGITAL_MASK 0x00000001 /* Digital */
+#define L2TP_BEARER_TYPE_ANALOG_MASK 0x00000002 /* Analog */
+
+/* Authen Type */
+#define L2TP_AUTHEN_TYPE_RESERVED 0x0000 /* Reserved */
+#define L2TP_AUTHEN_TYPE_TEXTUAL 0x0001 /* Textual username/password exchange */
+#define L2TP_AUTHEN_TYPE_CHAP 0x0002 /* PPP CHAP */
+#define L2TP_AUTHEN_TYPE_PAP 0x0003 /* PPP PAP */
+#define L2TP_AUTHEN_TYPE_NO_AUTH 0x0004 /* No Authentication */
+#define L2TP_AUTHEN_TYPE_MSCHAPv1 0x0005 /* MSCHAPv1 */
+
+#define L2TP_PROXY_AUTH_ID_MASK 0x00ff
+
+
+#define L2TP_MSGTYPE_SCCRQ 1 /* Start-Control-Connection-Request */
+#define L2TP_MSGTYPE_SCCRP 2 /* Start-Control-Connection-Reply */
+#define L2TP_MSGTYPE_SCCCN 3 /* Start-Control-Connection-Connected */
+#define L2TP_MSGTYPE_STOPCCN 4 /* Stop-Control-Connection-Notification */
+#define L2TP_MSGTYPE_HELLO 6 /* Hello */
+#define L2TP_MSGTYPE_OCRQ 7 /* Outgoing-Call-Request */
+#define L2TP_MSGTYPE_OCRP 8 /* Outgoing-Call-Reply */
+#define L2TP_MSGTYPE_OCCN 9 /* Outgoing-Call-Connected */
+#define L2TP_MSGTYPE_ICRQ 10 /* Incoming-Call-Request */
+#define L2TP_MSGTYPE_ICRP 11 /* Incoming-Call-Reply */
+#define L2TP_MSGTYPE_ICCN 12 /* Incoming-Call-Connected */
+#define L2TP_MSGTYPE_CDN 14 /* Call-Disconnect-Notify */
+#define L2TP_MSGTYPE_WEN 15 /* WAN-Error-Notify */
+#define L2TP_MSGTYPE_SLI 16 /* Set-Link-Info */
+
+static const struct tok l2tp_msgtype2str[] = {
+ { L2TP_MSGTYPE_SCCRQ, "SCCRQ" },
+ { L2TP_MSGTYPE_SCCRP, "SCCRP" },
+ { L2TP_MSGTYPE_SCCCN, "SCCCN" },
+ { L2TP_MSGTYPE_STOPCCN, "StopCCN" },
+ { L2TP_MSGTYPE_HELLO, "HELLO" },
+ { L2TP_MSGTYPE_OCRQ, "OCRQ" },
+ { L2TP_MSGTYPE_OCRP, "OCRP" },
+ { L2TP_MSGTYPE_OCCN, "OCCN" },
+ { L2TP_MSGTYPE_ICRQ, "ICRQ" },
+ { L2TP_MSGTYPE_ICRP, "ICRP" },
+ { L2TP_MSGTYPE_ICCN, "ICCN" },
+ { L2TP_MSGTYPE_CDN, "CDN" },
+ { L2TP_MSGTYPE_WEN, "WEN" },
+ { L2TP_MSGTYPE_SLI, "SLI" },
+ { 0, NULL }
+};
+
+#define L2TP_AVP_MSGTYPE 0 /* Message Type */
+#define L2TP_AVP_RESULT_CODE 1 /* Result Code */
+#define L2TP_AVP_PROTO_VER 2 /* Protocol Version */
+#define L2TP_AVP_FRAMING_CAP 3 /* Framing Capabilities */
+#define L2TP_AVP_BEARER_CAP 4 /* Bearer Capabilities */
+#define L2TP_AVP_TIE_BREAKER 5 /* Tie Breaker */
+#define L2TP_AVP_FIRM_VER 6 /* Firmware Revision */
+#define L2TP_AVP_HOST_NAME 7 /* Host Name */
+#define L2TP_AVP_VENDOR_NAME 8 /* Vendor Name */
+#define L2TP_AVP_ASSND_TUN_ID 9 /* Assigned Tunnel ID */
+#define L2TP_AVP_RECV_WIN_SIZE 10 /* Receive Window Size */
+#define L2TP_AVP_CHALLENGE 11 /* Challenge */
+#define L2TP_AVP_Q931_CC 12 /* Q.931 Cause Code */
+#define L2TP_AVP_CHALLENGE_RESP 13 /* Challenge Response */
+#define L2TP_AVP_ASSND_SESS_ID 14 /* Assigned Session ID */
+#define L2TP_AVP_CALL_SER_NUM 15 /* Call Serial Number */
+#define L2TP_AVP_MINIMUM_BPS 16 /* Minimum BPS */
+#define L2TP_AVP_MAXIMUM_BPS 17 /* Maximum BPS */
+#define L2TP_AVP_BEARER_TYPE 18 /* Bearer Type */
+#define L2TP_AVP_FRAMING_TYPE 19 /* Framing Type */
+#define L2TP_AVP_PACKET_PROC_DELAY 20 /* Packet Processing Delay (OBSOLETE) */
+#define L2TP_AVP_CALLED_NUMBER 21 /* Called Number */
+#define L2TP_AVP_CALLING_NUMBER 22 /* Calling Number */
+#define L2TP_AVP_SUB_ADDRESS 23 /* Sub-Address */
+#define L2TP_AVP_TX_CONN_SPEED 24 /* (Tx) Connect Speed */
+#define L2TP_AVP_PHY_CHANNEL_ID 25 /* Physical Channel ID */
+#define L2TP_AVP_INI_RECV_LCP 26 /* Initial Received LCP CONFREQ */
+#define L2TP_AVP_LAST_SENT_LCP 27 /* Last Sent LCP CONFREQ */
+#define L2TP_AVP_LAST_RECV_LCP 28 /* Last Received LCP CONFREQ */
+#define L2TP_AVP_PROXY_AUTH_TYPE 29 /* Proxy Authen Type */
+#define L2TP_AVP_PROXY_AUTH_NAME 30 /* Proxy Authen Name */
+#define L2TP_AVP_PROXY_AUTH_CHAL 31 /* Proxy Authen Challenge */
+#define L2TP_AVP_PROXY_AUTH_ID 32 /* Proxy Authen ID */
+#define L2TP_AVP_PROXY_AUTH_RESP 33 /* Proxy Authen Response */
+#define L2TP_AVP_CALL_ERRORS 34 /* Call Errors */
+#define L2TP_AVP_ACCM 35 /* ACCM */
+#define L2TP_AVP_RANDOM_VECTOR 36 /* Random Vector */
+#define L2TP_AVP_PRIVATE_GRP_ID 37 /* Private Group ID */
+#define L2TP_AVP_RX_CONN_SPEED 38 /* (Rx) Connect Speed */
+#define L2TP_AVP_SEQ_REQUIRED 39 /* Sequencing Required */
+#define L2TP_AVP_PPP_DISCON_CC 46 /* PPP Disconnect Cause Code - RFC 3145 */
+
+static const struct tok l2tp_avp2str[] = {
+ { L2TP_AVP_MSGTYPE, "MSGTYPE" },
+ { L2TP_AVP_RESULT_CODE, "RESULT_CODE" },
+ { L2TP_AVP_PROTO_VER, "PROTO_VER" },
+ { L2TP_AVP_FRAMING_CAP, "FRAMING_CAP" },
+ { L2TP_AVP_BEARER_CAP, "BEARER_CAP" },
+ { L2TP_AVP_TIE_BREAKER, "TIE_BREAKER" },
+ { L2TP_AVP_FIRM_VER, "FIRM_VER" },
+ { L2TP_AVP_HOST_NAME, "HOST_NAME" },
+ { L2TP_AVP_VENDOR_NAME, "VENDOR_NAME" },
+ { L2TP_AVP_ASSND_TUN_ID, "ASSND_TUN_ID" },
+ { L2TP_AVP_RECV_WIN_SIZE, "RECV_WIN_SIZE" },
+ { L2TP_AVP_CHALLENGE, "CHALLENGE" },
+ { L2TP_AVP_Q931_CC, "Q931_CC", },
+ { L2TP_AVP_CHALLENGE_RESP, "CHALLENGE_RESP" },
+ { L2TP_AVP_ASSND_SESS_ID, "ASSND_SESS_ID" },
+ { L2TP_AVP_CALL_SER_NUM, "CALL_SER_NUM" },
+ { L2TP_AVP_MINIMUM_BPS, "MINIMUM_BPS" },
+ { L2TP_AVP_MAXIMUM_BPS, "MAXIMUM_BPS" },
+ { L2TP_AVP_BEARER_TYPE, "BEARER_TYPE" },
+ { L2TP_AVP_FRAMING_TYPE, "FRAMING_TYPE" },
+ { L2TP_AVP_PACKET_PROC_DELAY, "PACKET_PROC_DELAY" },
+ { L2TP_AVP_CALLED_NUMBER, "CALLED_NUMBER" },
+ { L2TP_AVP_CALLING_NUMBER, "CALLING_NUMBER" },
+ { L2TP_AVP_SUB_ADDRESS, "SUB_ADDRESS" },
+ { L2TP_AVP_TX_CONN_SPEED, "TX_CONN_SPEED" },
+ { L2TP_AVP_PHY_CHANNEL_ID, "PHY_CHANNEL_ID" },
+ { L2TP_AVP_INI_RECV_LCP, "INI_RECV_LCP" },
+ { L2TP_AVP_LAST_SENT_LCP, "LAST_SENT_LCP" },
+ { L2TP_AVP_LAST_RECV_LCP, "LAST_RECV_LCP" },
+ { L2TP_AVP_PROXY_AUTH_TYPE, "PROXY_AUTH_TYPE" },
+ { L2TP_AVP_PROXY_AUTH_NAME, "PROXY_AUTH_NAME" },
+ { L2TP_AVP_PROXY_AUTH_CHAL, "PROXY_AUTH_CHAL" },
+ { L2TP_AVP_PROXY_AUTH_ID, "PROXY_AUTH_ID" },
+ { L2TP_AVP_PROXY_AUTH_RESP, "PROXY_AUTH_RESP" },
+ { L2TP_AVP_CALL_ERRORS, "CALL_ERRORS" },
+ { L2TP_AVP_ACCM, "ACCM" },
+ { L2TP_AVP_RANDOM_VECTOR, "RANDOM_VECTOR" },
+ { L2TP_AVP_PRIVATE_GRP_ID, "PRIVATE_GRP_ID" },
+ { L2TP_AVP_RX_CONN_SPEED, "RX_CONN_SPEED" },
+ { L2TP_AVP_SEQ_REQUIRED, "SEQ_REQUIRED" },
+ { L2TP_AVP_PPP_DISCON_CC, "PPP_DISCON_CC" },
+ { 0, NULL }
+};
+
+static const struct tok l2tp_authentype2str[] = {
+ { L2TP_AUTHEN_TYPE_RESERVED, "Reserved" },
+ { L2TP_AUTHEN_TYPE_TEXTUAL, "Textual" },
+ { L2TP_AUTHEN_TYPE_CHAP, "CHAP" },
+ { L2TP_AUTHEN_TYPE_PAP, "PAP" },
+ { L2TP_AUTHEN_TYPE_NO_AUTH, "No Auth" },
+ { L2TP_AUTHEN_TYPE_MSCHAPv1, "MS-CHAPv1" },
+ { 0, NULL }
+};
+
+#define L2TP_PPP_DISCON_CC_DIRECTION_GLOBAL 0
+#define L2TP_PPP_DISCON_CC_DIRECTION_AT_PEER 1
+#define L2TP_PPP_DISCON_CC_DIRECTION_AT_LOCAL 2
+
+static const struct tok l2tp_cc_direction2str[] = {
+ { L2TP_PPP_DISCON_CC_DIRECTION_GLOBAL, "global error" },
+ { L2TP_PPP_DISCON_CC_DIRECTION_AT_PEER, "at peer" },
+ { L2TP_PPP_DISCON_CC_DIRECTION_AT_LOCAL,"at local" },
+ { 0, NULL }
+};
+
+#if 0
+static char *l2tp_result_code_StopCCN[] = {
+ "Reserved",
+ "General request to clear control connection",
+ "General error--Error Code indicates the problem",
+ "Control channel already exists",
+ "Requester is not authorized to establish a control channel",
+ "The protocol version of the requester is not supported",
+ "Requester is being shut down",
+ "Finite State Machine error"
+#define L2TP_MAX_RESULT_CODE_STOPCC_INDEX 8
+};
+#endif
+
+#if 0
+static char *l2tp_result_code_CDN[] = {
+ "Reserved",
+ "Call disconnected due to loss of carrier",
+ "Call disconnected for the reason indicated in error code",
+ "Call disconnected for administrative reasons",
+ "Call failed due to lack of appropriate facilities being "
+ "available (temporary condition)",
+ "Call failed due to lack of appropriate facilities being "
+ "available (permanent condition)",
+ "Invalid destination",
+ "Call failed due to no carrier detected",
+ "Call failed due to detection of a busy signal",
+ "Call failed due to lack of a dial tone",
+ "Call was not established within time allotted by LAC",
+ "Call was connected but no appropriate framing was detected"
+#define L2TP_MAX_RESULT_CODE_CDN_INDEX 12
+};
+#endif
+
+#if 0
+static char *l2tp_error_code_general[] = {
+ "No general error",
+ "No control connection exists yet for this LAC-LNS pair",
+ "Length is wrong",
+ "One of the field values was out of range or "
+ "reserved field was non-zero"
+ "Insufficient resources to handle this operation now",
+ "The Session ID is invalid in this context",
+ "A generic vendor-specific error occurred in the LAC",
+ "Try another"
+#define L2TP_MAX_ERROR_CODE_GENERAL_INDEX 8
+};
+#endif
+
+/******************************/
+/* generic print out routines */
+/******************************/
+static void
+print_string(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ u_int i;
+ for (i=0; i<length; i++) {
+ fn_print_char(ndo, GET_U_1(dat));
+ dat++;
+ }
+}
+
+static void
+print_octets(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ u_int i;
+ for (i=0; i<length; i++) {
+ ND_PRINT("%02x", GET_U_1(dat));
+ dat++;
+ }
+}
+
+static void
+print_16bits_val(netdissect_options *ndo, const uint8_t *dat)
+{
+ ND_PRINT("%u", GET_BE_U_2(dat));
+}
+
+static void
+print_32bits_val(netdissect_options *ndo, const uint8_t *dat)
+{
+ ND_PRINT("%u", GET_BE_U_4(dat));
+}
+
+/***********************************/
+/* AVP-specific print out routines */
+/***********************************/
+static void
+l2tp_msgtype_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ if (length < 2) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ ND_PRINT("%s", tok2str(l2tp_msgtype2str, "MSGTYPE-#%u",
+ GET_BE_U_2(dat)));
+}
+
+static void
+l2tp_result_code_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ /* Result Code */
+ if (length < 2) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ ND_PRINT("%u", GET_BE_U_2(dat));
+ dat += 2;
+ length -= 2;
+
+ /* Error Code (opt) */
+ if (length == 0)
+ return;
+ if (length < 2) {
+ ND_PRINT(" AVP too short");
+ return;
+ }
+ ND_PRINT("/%u", GET_BE_U_2(dat));
+ dat += 2;
+ length -= 2;
+
+ /* Error Message (opt) */
+ if (length == 0)
+ return;
+ ND_PRINT(" ");
+ print_string(ndo, dat, length);
+}
+
+static void
+l2tp_proto_ver_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ if (length < 2) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ ND_PRINT("%u.%u", (GET_BE_U_2(dat) >> 8),
+ (GET_BE_U_2(dat) & 0xff));
+}
+
+static void
+l2tp_framing_cap_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ if (length < 4) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ if (GET_BE_U_4(dat) & L2TP_FRAMING_CAP_ASYNC_MASK) {
+ ND_PRINT("A");
+ }
+ if (GET_BE_U_4(dat) & L2TP_FRAMING_CAP_SYNC_MASK) {
+ ND_PRINT("S");
+ }
+}
+
+static void
+l2tp_bearer_cap_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ if (length < 4) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ if (GET_BE_U_4(dat) & L2TP_BEARER_CAP_ANALOG_MASK) {
+ ND_PRINT("A");
+ }
+ if (GET_BE_U_4(dat) & L2TP_BEARER_CAP_DIGITAL_MASK) {
+ ND_PRINT("D");
+ }
+}
+
+static void
+l2tp_q931_cc_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ if (length < 3) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ print_16bits_val(ndo, dat);
+ ND_PRINT(", %02x", GET_U_1(dat + 2));
+ dat += 3;
+ length -= 3;
+ if (length != 0) {
+ ND_PRINT(" ");
+ print_string(ndo, dat, length);
+ }
+}
+
+static void
+l2tp_bearer_type_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ if (length < 4) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ if (GET_BE_U_4(dat) & L2TP_BEARER_TYPE_ANALOG_MASK) {
+ ND_PRINT("A");
+ }
+ if (GET_BE_U_4(dat) & L2TP_BEARER_TYPE_DIGITAL_MASK) {
+ ND_PRINT("D");
+ }
+}
+
+static void
+l2tp_framing_type_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ if (length < 4) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ if (GET_BE_U_4(dat) & L2TP_FRAMING_TYPE_ASYNC_MASK) {
+ ND_PRINT("A");
+ }
+ if (GET_BE_U_4(dat) & L2TP_FRAMING_TYPE_SYNC_MASK) {
+ ND_PRINT("S");
+ }
+}
+
+static void
+l2tp_packet_proc_delay_print(netdissect_options *ndo)
+{
+ ND_PRINT("obsolete");
+}
+
+static void
+l2tp_proxy_auth_type_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ if (length < 2) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ ND_PRINT("%s", tok2str(l2tp_authentype2str,
+ "AuthType-#%u", GET_BE_U_2(dat)));
+}
+
+static void
+l2tp_proxy_auth_id_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ if (length < 2) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ ND_PRINT("%u", GET_BE_U_2(dat) & L2TP_PROXY_AUTH_ID_MASK);
+}
+
+static void
+l2tp_call_errors_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ uint32_t val;
+
+ if (length < 2) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ dat += 2; /* skip "Reserved" */
+ length -= 2;
+
+ if (length < 4) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ val = GET_BE_U_4(dat); dat += 4; length -= 4;
+ ND_PRINT("CRCErr=%u ", val);
+
+ if (length < 4) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ val = GET_BE_U_4(dat); dat += 4; length -= 4;
+ ND_PRINT("FrameErr=%u ", val);
+
+ if (length < 4) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ val = GET_BE_U_4(dat); dat += 4; length -= 4;
+ ND_PRINT("HardOver=%u ", val);
+
+ if (length < 4) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ val = GET_BE_U_4(dat); dat += 4; length -= 4;
+ ND_PRINT("BufOver=%u ", val);
+
+ if (length < 4) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ val = GET_BE_U_4(dat); dat += 4; length -= 4;
+ ND_PRINT("Timeout=%u ", val);
+
+ if (length < 4) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ val = GET_BE_U_4(dat); dat += 4; length -= 4;
+ ND_PRINT("AlignErr=%u ", val);
+}
+
+static void
+l2tp_accm_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ uint32_t val;
+
+ if (length < 2) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ dat += 2; /* skip "Reserved" */
+ length -= 2;
+
+ if (length < 4) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ val = GET_BE_U_4(dat); dat += 4; length -= 4;
+ ND_PRINT("send=%08x ", val);
+
+ if (length < 4) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ val = GET_BE_U_4(dat); dat += 4; length -= 4;
+ ND_PRINT("recv=%08x ", val);
+}
+
+static void
+l2tp_ppp_discon_cc_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ if (length < 5) {
+ ND_PRINT("AVP too short");
+ return;
+ }
+ /* Disconnect Code */
+ ND_PRINT("%04x, ", GET_BE_U_2(dat));
+ dat += 2;
+ length -= 2;
+ /* Control Protocol Number */
+ ND_PRINT("%04x ", GET_BE_U_2(dat));
+ dat += 2;
+ length -= 2;
+ /* Direction */
+ ND_PRINT("%s", tok2str(l2tp_cc_direction2str,
+ "Direction-#%u", GET_U_1(dat)));
+ dat++;
+ length--;
+
+ if (length != 0) {
+ ND_PRINT(" ");
+ print_string(ndo, (const u_char *)dat, length);
+ }
+}
+
+static u_int
+l2tp_avp_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ u_int len;
+ uint16_t attr_type;
+ int hidden = FALSE;
+
+ ND_PRINT(" ");
+ /* Flags & Length */
+ len = GET_BE_U_2(dat) & L2TP_AVP_HDR_LEN_MASK;
+
+ /* If it is not long enough to contain the header, we'll give up. */
+ if (len < 6)
+ goto trunc;
+
+ /* If it goes past the end of the remaining length of the packet,
+ we'll give up. */
+ if (len > (u_int)length)
+ goto trunc;
+
+ /* If it goes past the end of the remaining length of the captured
+ data, we'll give up. */
+ ND_TCHECK_LEN(dat, len);
+
+ /*
+ * After this point, we don't need to check whether we go past
+ * the length of the captured data; however, we *do* need to
+ * check whether we go past the end of the AVP.
+ */
+
+ if (GET_BE_U_2(dat) & L2TP_AVP_HDR_FLAG_MANDATORY) {
+ ND_PRINT("*");
+ }
+ if (GET_BE_U_2(dat) & L2TP_AVP_HDR_FLAG_HIDDEN) {
+ hidden = TRUE;
+ ND_PRINT("?");
+ }
+ dat += 2;
+
+ if (GET_BE_U_2(dat)) {
+ /* Vendor Specific Attribute */
+ ND_PRINT("VENDOR%04x:", GET_BE_U_2(dat)); dat += 2;
+ ND_PRINT("ATTR%04x", GET_BE_U_2(dat)); dat += 2;
+ ND_PRINT("(");
+ print_octets(ndo, dat, len-6);
+ ND_PRINT(")");
+ } else {
+ /* IETF-defined Attributes */
+ dat += 2;
+ attr_type = GET_BE_U_2(dat); dat += 2;
+ ND_PRINT("%s", tok2str(l2tp_avp2str, "AVP-#%u", attr_type));
+ ND_PRINT("(");
+ if (hidden) {
+ ND_PRINT("???");
+ } else {
+ switch (attr_type) {
+ case L2TP_AVP_MSGTYPE:
+ l2tp_msgtype_print(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_RESULT_CODE:
+ l2tp_result_code_print(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_PROTO_VER:
+ l2tp_proto_ver_print(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_FRAMING_CAP:
+ l2tp_framing_cap_print(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_BEARER_CAP:
+ l2tp_bearer_cap_print(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_TIE_BREAKER:
+ if (len-6 < 8) {
+ ND_PRINT("AVP too short");
+ break;
+ }
+ print_octets(ndo, dat, 8);
+ break;
+ case L2TP_AVP_FIRM_VER:
+ case L2TP_AVP_ASSND_TUN_ID:
+ case L2TP_AVP_RECV_WIN_SIZE:
+ case L2TP_AVP_ASSND_SESS_ID:
+ if (len-6 < 2) {
+ ND_PRINT("AVP too short");
+ break;
+ }
+ print_16bits_val(ndo, dat);
+ break;
+ case L2TP_AVP_HOST_NAME:
+ case L2TP_AVP_VENDOR_NAME:
+ case L2TP_AVP_CALLING_NUMBER:
+ case L2TP_AVP_CALLED_NUMBER:
+ case L2TP_AVP_SUB_ADDRESS:
+ case L2TP_AVP_PROXY_AUTH_NAME:
+ case L2TP_AVP_PRIVATE_GRP_ID:
+ print_string(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_CHALLENGE:
+ case L2TP_AVP_INI_RECV_LCP:
+ case L2TP_AVP_LAST_SENT_LCP:
+ case L2TP_AVP_LAST_RECV_LCP:
+ case L2TP_AVP_PROXY_AUTH_CHAL:
+ case L2TP_AVP_PROXY_AUTH_RESP:
+ case L2TP_AVP_RANDOM_VECTOR:
+ print_octets(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_Q931_CC:
+ l2tp_q931_cc_print(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_CHALLENGE_RESP:
+ if (len-6 < 16) {
+ ND_PRINT("AVP too short");
+ break;
+ }
+ print_octets(ndo, dat, 16);
+ break;
+ case L2TP_AVP_CALL_SER_NUM:
+ case L2TP_AVP_MINIMUM_BPS:
+ case L2TP_AVP_MAXIMUM_BPS:
+ case L2TP_AVP_TX_CONN_SPEED:
+ case L2TP_AVP_PHY_CHANNEL_ID:
+ case L2TP_AVP_RX_CONN_SPEED:
+ if (len-6 < 4) {
+ ND_PRINT("AVP too short");
+ break;
+ }
+ print_32bits_val(ndo, dat);
+ break;
+ case L2TP_AVP_BEARER_TYPE:
+ l2tp_bearer_type_print(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_FRAMING_TYPE:
+ l2tp_framing_type_print(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_PACKET_PROC_DELAY:
+ l2tp_packet_proc_delay_print(ndo);
+ break;
+ case L2TP_AVP_PROXY_AUTH_TYPE:
+ l2tp_proxy_auth_type_print(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_PROXY_AUTH_ID:
+ l2tp_proxy_auth_id_print(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_CALL_ERRORS:
+ l2tp_call_errors_print(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_ACCM:
+ l2tp_accm_print(ndo, dat, len-6);
+ break;
+ case L2TP_AVP_SEQ_REQUIRED:
+ break; /* No Attribute Value */
+ case L2TP_AVP_PPP_DISCON_CC:
+ l2tp_ppp_discon_cc_print(ndo, dat, len-6);
+ break;
+ default:
+ break;
+ }
+ }
+ ND_PRINT(")");
+ }
+
+ return (len);
+
+ trunc:
+ nd_print_trunc(ndo);
+ return (0);
+}
+
+
+void
+l2tp_print(netdissect_options *ndo, const u_char *dat, u_int length)
+{
+ const u_char *ptr = dat;
+ u_int cnt = 0; /* total octets consumed */
+ uint16_t pad;
+ int flag_t, flag_l, flag_s, flag_o;
+ uint16_t l2tp_len;
+
+ ndo->ndo_protocol = "l2tp";
+ flag_t = flag_l = flag_s = flag_o = FALSE;
+
+ if ((GET_BE_U_2(ptr) & L2TP_VERSION_MASK) == L2TP_VERSION_L2TP) {
+ ND_PRINT(" l2tp:");
+ } else if ((GET_BE_U_2(ptr) & L2TP_VERSION_MASK) == L2TP_VERSION_L2F) {
+ ND_PRINT(" l2f:");
+ return; /* nothing to do */
+ } else {
+ ND_PRINT(" Unknown Version, neither L2F(1) nor L2TP(2)");
+ return; /* nothing we can do */
+ }
+
+ ND_PRINT("[");
+ if (GET_BE_U_2(ptr) & L2TP_FLAG_TYPE) {
+ flag_t = TRUE;
+ ND_PRINT("T");
+ }
+ if (GET_BE_U_2(ptr) & L2TP_FLAG_LENGTH) {
+ flag_l = TRUE;
+ ND_PRINT("L");
+ }
+ if (GET_BE_U_2(ptr) & L2TP_FLAG_SEQUENCE) {
+ flag_s = TRUE;
+ ND_PRINT("S");
+ }
+ if (GET_BE_U_2(ptr) & L2TP_FLAG_OFFSET) {
+ flag_o = TRUE;
+ ND_PRINT("O");
+ }
+ if (GET_BE_U_2(ptr) & L2TP_FLAG_PRIORITY)
+ ND_PRINT("P");
+ ND_PRINT("]");
+
+ ptr += 2;
+ cnt += 2;
+
+ if (flag_l) {
+ l2tp_len = GET_BE_U_2(ptr);
+ ptr += 2;
+ cnt += 2;
+ } else {
+ l2tp_len = 0;
+ }
+ /* Tunnel ID */
+ ND_PRINT("(%u/", GET_BE_U_2(ptr));
+ ptr += 2;
+ cnt += 2;
+ /* Session ID */
+ ND_PRINT("%u)", GET_BE_U_2(ptr));
+ ptr += 2;
+ cnt += 2;
+
+ if (flag_s) {
+ ND_PRINT("Ns=%u,", GET_BE_U_2(ptr));
+ ptr += 2;
+ cnt += 2;
+ ND_PRINT("Nr=%u", GET_BE_U_2(ptr));
+ ptr += 2;
+ cnt += 2;
+ }
+
+ if (flag_o) { /* Offset Size */
+ pad = GET_BE_U_2(ptr);
+ /* Offset padding octets in packet buffer? */
+ ND_TCHECK_LEN(ptr + 2, pad);
+ ptr += (2 + pad);
+ cnt += (2 + pad);
+ }
+
+ if (flag_l) {
+ if (length < l2tp_len) {
+ ND_PRINT(" Length %u larger than packet", l2tp_len);
+ return;
+ }
+ length = l2tp_len;
+ }
+ if (length < cnt) {
+ ND_PRINT(" Length %u smaller than header length", length);
+ return;
+ }
+ if (flag_t) {
+ if (!flag_l) {
+ ND_PRINT(" No length");
+ return;
+ }
+ if (length - cnt == 0) {
+ ND_PRINT(" ZLB");
+ } else {
+ /*
+ * Print AVPs.
+ */
+ while (length - cnt != 0) {
+ u_int avp_length;
+
+ avp_length = l2tp_avp_print(ndo, ptr, length - cnt);
+ if (avp_length == 0) {
+ /*
+ * Truncated.
+ */
+ break;
+ }
+ cnt += avp_length;
+ ptr += avp_length;
+ }
+ }
+ } else {
+ ND_PRINT(" {");
+ ppp_print(ndo, ptr, length - cnt);
+ ND_PRINT("}");
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-lane.c b/print-lane.c
new file mode 100644
index 0000000..c5fa33b
--- /dev/null
+++ b/print-lane.c
@@ -0,0 +1,110 @@
+/*
+ * Marko Kiiskila carnil@cs.tut.fi
+ *
+ * Tampere University of Technology - Telecommunications Laboratory
+ *
+ * Permission to use, copy, modify and distribute this
+ * software and its documentation is hereby granted,
+ * provided that both the copyright notice and this
+ * permission notice appear in all copies of the software,
+ * derivative works or modified versions, and any portions
+ * thereof, that both notices appear in supporting
+ * documentation, and that the use of this software is
+ * acknowledged in any publications resulting from using
+ * the software.
+ *
+ * TUT ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION AND DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS
+ * SOFTWARE.
+ *
+ */
+
+/* \summary: ATM LANE printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+struct lecdatahdr_8023 {
+ nd_uint16_t le_header;
+ nd_mac_addr h_dest;
+ nd_mac_addr h_source;
+ nd_uint16_t h_type;
+};
+
+struct lane_controlhdr {
+ nd_uint16_t lec_header;
+ nd_uint8_t lec_proto;
+ nd_uint8_t lec_vers;
+ nd_uint16_t lec_opcode;
+};
+
+static const struct tok lecop2str[] = {
+ { 0x0001, "configure request" },
+ { 0x0101, "configure response" },
+ { 0x0002, "join request" },
+ { 0x0102, "join response" },
+ { 0x0003, "ready query" },
+ { 0x0103, "ready indication" },
+ { 0x0004, "register request" },
+ { 0x0104, "register response" },
+ { 0x0005, "unregister request" },
+ { 0x0105, "unregister response" },
+ { 0x0006, "ARP request" },
+ { 0x0106, "ARP response" },
+ { 0x0007, "flush request" },
+ { 0x0107, "flush response" },
+ { 0x0008, "NARP request" },
+ { 0x0009, "topology request" },
+ { 0, NULL }
+};
+
+static void
+lane_hdr_print(netdissect_options *ndo, const u_char *bp)
+{
+ ND_PRINT("lecid:%x ", GET_BE_U_2(bp));
+}
+
+/*
+ * This assumes 802.3, not 802.5, LAN emulation.
+ */
+void
+lane_print(netdissect_options *ndo, const u_char *p, u_int length, u_int caplen)
+{
+ const struct lane_controlhdr *lec;
+
+ ndo->ndo_protocol = "lane";
+
+ lec = (const struct lane_controlhdr *)p;
+ if (GET_BE_U_2(lec->lec_header) == 0xff00) {
+ /*
+ * LE Control.
+ */
+ ND_PRINT("lec: proto %x vers %x %s",
+ GET_U_1(lec->lec_proto),
+ GET_U_1(lec->lec_vers),
+ tok2str(lecop2str, "opcode-#%u", GET_BE_U_2(lec->lec_opcode)));
+ return;
+ }
+
+ /*
+ * Go past the LE header.
+ */
+ ND_TCHECK_2(p); /* Needed */
+ length -= 2;
+ caplen -= 2;
+ p += 2;
+
+ /*
+ * Now print the encapsulated frame, under the assumption
+ * that it's an Ethernet frame.
+ */
+ ether_print(ndo, p, length, caplen, lane_hdr_print, p - 2);
+}
diff --git a/print-ldp.c b/print-ldp.c
new file mode 100644
index 0000000..896bc40
--- /dev/null
+++ b/print-ldp.c
@@ -0,0 +1,700 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ * and Steinar Haug (sthaug@nethelp.no)
+ */
+
+/* \summary: Label Distribution Protocol (LDP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+#include "l2vpn.h"
+#include "af.h"
+
+
+/*
+ * ldp common header
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Version | PDU Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | LDP Identifier |
+ * + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ */
+
+struct ldp_common_header {
+ nd_uint16_t version;
+ nd_uint16_t pdu_length;
+ nd_ipv4 lsr_id;
+ nd_uint16_t label_space;
+};
+
+#define LDP_VERSION 1
+
+/*
+ * ldp message header
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |U| Message Type | Message Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Message ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * + +
+ * | Mandatory Parameters |
+ * + +
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * + +
+ * | Optional Parameters |
+ * + +
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+struct ldp_msg_header {
+ nd_uint16_t type;
+ nd_uint16_t length;
+ nd_uint32_t id;
+};
+
+#define LDP_MASK_MSG_TYPE(x) ((x)&0x7fff)
+#define LDP_MASK_U_BIT(x) ((x)&0x8000)
+
+#define LDP_MSG_NOTIF 0x0001
+#define LDP_MSG_HELLO 0x0100
+#define LDP_MSG_INIT 0x0200
+#define LDP_MSG_KEEPALIVE 0x0201
+#define LDP_MSG_ADDRESS 0x0300
+#define LDP_MSG_ADDRESS_WITHDRAW 0x0301
+#define LDP_MSG_LABEL_MAPPING 0x0400
+#define LDP_MSG_LABEL_REQUEST 0x0401
+#define LDP_MSG_LABEL_WITHDRAW 0x0402
+#define LDP_MSG_LABEL_RELEASE 0x0403
+#define LDP_MSG_LABEL_ABORT_REQUEST 0x0404
+
+#define LDP_VENDOR_PRIVATE_MIN 0x3e00
+#define LDP_VENDOR_PRIVATE_MAX 0x3eff
+#define LDP_EXPERIMENTAL_MIN 0x3f00
+#define LDP_EXPERIMENTAL_MAX 0x3fff
+
+static const struct tok ldp_msg_values[] = {
+ { LDP_MSG_NOTIF, "Notification" },
+ { LDP_MSG_HELLO, "Hello" },
+ { LDP_MSG_INIT, "Initialization" },
+ { LDP_MSG_KEEPALIVE, "Keepalive" },
+ { LDP_MSG_ADDRESS, "Address" },
+ { LDP_MSG_ADDRESS_WITHDRAW, "Address Withdraw" },
+ { LDP_MSG_LABEL_MAPPING, "Label Mapping" },
+ { LDP_MSG_LABEL_REQUEST, "Label Request" },
+ { LDP_MSG_LABEL_WITHDRAW, "Label Withdraw" },
+ { LDP_MSG_LABEL_RELEASE, "Label Release" },
+ { LDP_MSG_LABEL_ABORT_REQUEST, "Label Abort Request" },
+ { 0, NULL}
+};
+
+#define LDP_MASK_TLV_TYPE(x) ((x)&0x3fff)
+#define LDP_MASK_F_BIT(x) ((x)&0x4000)
+
+#define LDP_TLV_FEC 0x0100
+#define LDP_TLV_ADDRESS_LIST 0x0101
+#define LDP_TLV_ADDRESS_LIST_AFNUM_LEN 2
+#define LDP_TLV_HOP_COUNT 0x0103
+#define LDP_TLV_PATH_VECTOR 0x0104
+#define LDP_TLV_GENERIC_LABEL 0x0200
+#define LDP_TLV_ATM_LABEL 0x0201
+#define LDP_TLV_FR_LABEL 0x0202
+#define LDP_TLV_STATUS 0x0300
+#define LDP_TLV_EXTD_STATUS 0x0301
+#define LDP_TLV_RETURNED_PDU 0x0302
+#define LDP_TLV_RETURNED_MSG 0x0303
+#define LDP_TLV_COMMON_HELLO 0x0400
+#define LDP_TLV_IPV4_TRANSPORT_ADDR 0x0401
+#define LDP_TLV_CONFIG_SEQ_NUMBER 0x0402
+#define LDP_TLV_IPV6_TRANSPORT_ADDR 0x0403
+#define LDP_TLV_COMMON_SESSION 0x0500
+#define LDP_TLV_ATM_SESSION_PARM 0x0501
+#define LDP_TLV_FR_SESSION_PARM 0x0502
+#define LDP_TLV_FT_SESSION 0x0503
+#define LDP_TLV_LABEL_REQUEST_MSG_ID 0x0600
+#define LDP_TLV_MTU 0x0601 /* rfc 3988 */
+
+static const struct tok ldp_tlv_values[] = {
+ { LDP_TLV_FEC, "FEC" },
+ { LDP_TLV_ADDRESS_LIST, "Address List" },
+ { LDP_TLV_HOP_COUNT, "Hop Count" },
+ { LDP_TLV_PATH_VECTOR, "Path Vector" },
+ { LDP_TLV_GENERIC_LABEL, "Generic Label" },
+ { LDP_TLV_ATM_LABEL, "ATM Label" },
+ { LDP_TLV_FR_LABEL, "Frame-Relay Label" },
+ { LDP_TLV_STATUS, "Status" },
+ { LDP_TLV_EXTD_STATUS, "Extended Status" },
+ { LDP_TLV_RETURNED_PDU, "Returned PDU" },
+ { LDP_TLV_RETURNED_MSG, "Returned Message" },
+ { LDP_TLV_COMMON_HELLO, "Common Hello Parameters" },
+ { LDP_TLV_IPV4_TRANSPORT_ADDR, "IPv4 Transport Address" },
+ { LDP_TLV_CONFIG_SEQ_NUMBER, "Configuration Sequence Number" },
+ { LDP_TLV_IPV6_TRANSPORT_ADDR, "IPv6 Transport Address" },
+ { LDP_TLV_COMMON_SESSION, "Common Session Parameters" },
+ { LDP_TLV_ATM_SESSION_PARM, "ATM Session Parameters" },
+ { LDP_TLV_FR_SESSION_PARM, "Frame-Relay Session Parameters" },
+ { LDP_TLV_FT_SESSION, "Fault-Tolerant Session Parameters" },
+ { LDP_TLV_LABEL_REQUEST_MSG_ID, "Label Request Message ID" },
+ { LDP_TLV_MTU, "MTU" },
+ { 0, NULL}
+};
+
+#define LDP_FEC_WILDCARD 0x01
+#define LDP_FEC_PREFIX 0x02
+#define LDP_FEC_HOSTADDRESS 0x03
+/* From RFC 4906; should probably be updated to RFC 4447 (e.g., VC -> PW) */
+#define LDP_FEC_MARTINI_VC 0x80
+
+static const struct tok ldp_fec_values[] = {
+ { LDP_FEC_WILDCARD, "Wildcard" },
+ { LDP_FEC_PREFIX, "Prefix" },
+ { LDP_FEC_HOSTADDRESS, "Host address" },
+ { LDP_FEC_MARTINI_VC, "Martini VC" },
+ { 0, NULL}
+};
+
+#define LDP_FEC_MARTINI_IFPARM_MTU 0x01
+#define LDP_FEC_MARTINI_IFPARM_DESC 0x03
+#define LDP_FEC_MARTINI_IFPARM_VCCV 0x0c
+
+static const struct tok ldp_fec_martini_ifparm_values[] = {
+ { LDP_FEC_MARTINI_IFPARM_MTU, "MTU" },
+ { LDP_FEC_MARTINI_IFPARM_DESC, "Description" },
+ { LDP_FEC_MARTINI_IFPARM_VCCV, "VCCV" },
+ { 0, NULL}
+};
+
+/* draft-ietf-pwe3-vccv-04.txt */
+static const struct tok ldp_fec_martini_ifparm_vccv_cc_values[] = {
+ { 0x01, "PWE3 control word" },
+ { 0x02, "MPLS Router Alert Label" },
+ { 0x04, "MPLS inner label TTL = 1" },
+ { 0, NULL}
+};
+
+/* draft-ietf-pwe3-vccv-04.txt */
+static const struct tok ldp_fec_martini_ifparm_vccv_cv_values[] = {
+ { 0x01, "ICMP Ping" },
+ { 0x02, "LSP Ping" },
+ { 0x04, "BFD" },
+ { 0, NULL}
+};
+
+static u_int ldp_pdu_print(netdissect_options *, const u_char *);
+
+/*
+ * ldp tlv header
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |U|F| Type | Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | Value |
+ * ~ ~
+ * | |
+ * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+#define TLV_TCHECK(minlen) \
+ if (tlv_tlen < minlen) { \
+ ND_PRINT(" [tlv length %u < %u]", tlv_tlen, minlen); \
+ nd_print_invalid(ndo); \
+ goto invalid; \
+ }
+
+static u_int
+ldp_tlv_print(netdissect_options *ndo,
+ const u_char *tptr,
+ u_int msg_tlen)
+{
+ struct ldp_tlv_header {
+ nd_uint16_t type;
+ nd_uint16_t length;
+ };
+
+ const struct ldp_tlv_header *ldp_tlv_header;
+ u_short tlv_type,tlv_len,tlv_tlen,af,ft_flags;
+ u_char fec_type;
+ u_int ui,vc_info_len, vc_info_tlv_type, vc_info_tlv_len,idx;
+ char buf[100];
+ int i;
+
+ ldp_tlv_header = (const struct ldp_tlv_header *)tptr;
+ ND_TCHECK_SIZE(ldp_tlv_header);
+ tlv_len=GET_BE_U_2(ldp_tlv_header->length);
+ if (tlv_len + 4U > msg_tlen) {
+ ND_PRINT("\n\t\t TLV contents go past end of message");
+ return 0;
+ }
+ tlv_tlen=tlv_len;
+ tlv_type=LDP_MASK_TLV_TYPE(GET_BE_U_2(ldp_tlv_header->type));
+
+ /* FIXME vendor private / experimental check */
+ ND_PRINT("\n\t %s TLV (0x%04x), length: %u, Flags: [%s and %s forward if unknown]",
+ tok2str(ldp_tlv_values,
+ "Unknown",
+ tlv_type),
+ tlv_type,
+ tlv_len,
+ LDP_MASK_U_BIT(GET_BE_U_2(ldp_tlv_header->type)) ? "continue processing" : "ignore",
+ LDP_MASK_F_BIT(GET_BE_U_2(ldp_tlv_header->type)) ? "do" : "don't");
+
+ tptr+=sizeof(struct ldp_tlv_header);
+
+ switch(tlv_type) {
+
+ case LDP_TLV_COMMON_HELLO:
+ TLV_TCHECK(4);
+ ND_PRINT("\n\t Hold Time: %us, Flags: [%s Hello%s]",
+ GET_BE_U_2(tptr),
+ (GET_BE_U_2(tptr + 2)&0x8000) ? "Targeted" : "Link",
+ (GET_BE_U_2(tptr + 2)&0x4000) ? ", Request for targeted Hellos" : "");
+ break;
+
+ case LDP_TLV_IPV4_TRANSPORT_ADDR:
+ TLV_TCHECK(4);
+ ND_PRINT("\n\t IPv4 Transport Address: %s", GET_IPADDR_STRING(tptr));
+ break;
+ case LDP_TLV_IPV6_TRANSPORT_ADDR:
+ TLV_TCHECK(16);
+ ND_PRINT("\n\t IPv6 Transport Address: %s", GET_IP6ADDR_STRING(tptr));
+ break;
+ case LDP_TLV_CONFIG_SEQ_NUMBER:
+ TLV_TCHECK(4);
+ ND_PRINT("\n\t Sequence Number: %u", GET_BE_U_4(tptr));
+ break;
+
+ case LDP_TLV_ADDRESS_LIST:
+ TLV_TCHECK(LDP_TLV_ADDRESS_LIST_AFNUM_LEN);
+ af = GET_BE_U_2(tptr);
+ tptr+=LDP_TLV_ADDRESS_LIST_AFNUM_LEN;
+ tlv_tlen -= LDP_TLV_ADDRESS_LIST_AFNUM_LEN;
+ ND_PRINT("\n\t Address Family: %s, addresses",
+ tok2str(af_values, "Unknown (%u)", af));
+ switch (af) {
+ case AFNUM_INET:
+ while(tlv_tlen >= sizeof(nd_ipv4)) {
+ ND_PRINT(" %s", GET_IPADDR_STRING(tptr));
+ tlv_tlen-=sizeof(nd_ipv4);
+ tptr+=sizeof(nd_ipv4);
+ }
+ break;
+ case AFNUM_INET6:
+ while(tlv_tlen >= sizeof(nd_ipv6)) {
+ ND_PRINT(" %s", GET_IP6ADDR_STRING(tptr));
+ tlv_tlen-=sizeof(nd_ipv6);
+ tptr+=sizeof(nd_ipv6);
+ }
+ break;
+ default:
+ /* unknown AF */
+ break;
+ }
+ break;
+
+ case LDP_TLV_COMMON_SESSION:
+ TLV_TCHECK(8);
+ ND_PRINT("\n\t Version: %u, Keepalive: %us, Flags: [Downstream %s, Loop Detection %s]",
+ GET_BE_U_2(tptr), GET_BE_U_2(tptr + 2),
+ (GET_BE_U_2(tptr + 6)&0x8000) ? "On Demand" : "Unsolicited",
+ (GET_BE_U_2(tptr + 6)&0x4000) ? "Enabled" : "Disabled"
+ );
+ break;
+
+ case LDP_TLV_FEC:
+ TLV_TCHECK(1);
+ fec_type = GET_U_1(tptr);
+ ND_PRINT("\n\t %s FEC (0x%02x)",
+ tok2str(ldp_fec_values, "Unknown", fec_type),
+ fec_type);
+
+ tptr+=1;
+ tlv_tlen-=1;
+ switch(fec_type) {
+
+ case LDP_FEC_WILDCARD:
+ break;
+ case LDP_FEC_PREFIX:
+ TLV_TCHECK(2);
+ af = GET_BE_U_2(tptr);
+ tptr+=2;
+ tlv_tlen-=2;
+ if (af == AFNUM_INET) {
+ i=decode_prefix4(ndo, tptr, tlv_tlen, buf, sizeof(buf));
+ if (i == -2)
+ goto trunc;
+ if (i == -3)
+ ND_PRINT(": IPv4 prefix (goes past end of TLV)");
+ else if (i == -1)
+ ND_PRINT(": IPv4 prefix (invalid length)");
+ else
+ ND_PRINT(": IPv4 prefix %s", buf);
+ }
+ else if (af == AFNUM_INET6) {
+ i=decode_prefix6(ndo, tptr, tlv_tlen, buf, sizeof(buf));
+ if (i == -2)
+ goto trunc;
+ if (i == -3)
+ ND_PRINT(": IPv4 prefix (goes past end of TLV)");
+ else if (i == -1)
+ ND_PRINT(": IPv6 prefix (invalid length)");
+ else
+ ND_PRINT(": IPv6 prefix %s", buf);
+ }
+ else
+ ND_PRINT(": Address family %u prefix", af);
+ break;
+ case LDP_FEC_HOSTADDRESS:
+ break;
+ case LDP_FEC_MARTINI_VC:
+ /*
+ * We assume the type was supposed to be one of the MPLS
+ * Pseudowire Types.
+ */
+ TLV_TCHECK(7);
+ vc_info_len = GET_U_1(tptr + 2);
+
+ /*
+ * According to RFC 4908, the VC info Length field can be zero,
+ * in which case not only are there no interface parameters,
+ * there's no VC ID.
+ */
+ if (vc_info_len == 0) {
+ ND_PRINT(": %s, %scontrol word, group-ID %u, VC-info-length: %u",
+ tok2str(mpls_pw_types_values, "Unknown", GET_BE_U_2(tptr)&0x7fff),
+ GET_BE_U_2(tptr)&0x8000 ? "" : "no ",
+ GET_BE_U_4(tptr + 3),
+ vc_info_len);
+ break;
+ }
+
+ /* Make sure we have the VC ID as well */
+ TLV_TCHECK(11);
+ ND_PRINT(": %s, %scontrol word, group-ID %u, VC-ID %u, VC-info-length: %u",
+ tok2str(mpls_pw_types_values, "Unknown", GET_BE_U_2(tptr)&0x7fff),
+ GET_BE_U_2(tptr)&0x8000 ? "" : "no ",
+ GET_BE_U_4(tptr + 3),
+ GET_BE_U_4(tptr + 7),
+ vc_info_len);
+ if (vc_info_len < 4) {
+ /* minimum 4, for the VC ID */
+ ND_PRINT(" (invalid, < 4");
+ return(tlv_len+4); /* Type & Length fields not included */
+ }
+ vc_info_len -= 4; /* subtract out the VC ID, giving the length of the interface parameters */
+
+ /* Skip past the fixed information and the VC ID */
+ tptr+=11;
+ tlv_tlen-=11;
+ TLV_TCHECK(vc_info_len);
+
+ while (vc_info_len > 2) {
+ vc_info_tlv_type = GET_U_1(tptr);
+ vc_info_tlv_len = GET_U_1(tptr + 1);
+ if (vc_info_tlv_len < 2)
+ break;
+ if (vc_info_len < vc_info_tlv_len)
+ break;
+
+ ND_PRINT("\n\t\tInterface Parameter: %s (0x%02x), len %u",
+ tok2str(ldp_fec_martini_ifparm_values,"Unknown",vc_info_tlv_type),
+ vc_info_tlv_type,
+ vc_info_tlv_len);
+
+ switch(vc_info_tlv_type) {
+ case LDP_FEC_MARTINI_IFPARM_MTU:
+ ND_PRINT(": %u", GET_BE_U_2(tptr + 2));
+ break;
+
+ case LDP_FEC_MARTINI_IFPARM_DESC:
+ ND_PRINT(": ");
+ for (idx = 2; idx < vc_info_tlv_len; idx++)
+ fn_print_char(ndo, GET_U_1(tptr + idx));
+ break;
+
+ case LDP_FEC_MARTINI_IFPARM_VCCV:
+ ND_PRINT("\n\t\t Control Channels (0x%02x) = [%s]",
+ GET_U_1((tptr + 2)),
+ bittok2str(ldp_fec_martini_ifparm_vccv_cc_values, "none", GET_U_1((tptr + 2))));
+ ND_PRINT("\n\t\t CV Types (0x%02x) = [%s]",
+ GET_U_1((tptr + 3)),
+ bittok2str(ldp_fec_martini_ifparm_vccv_cv_values, "none", GET_U_1((tptr + 3))));
+ break;
+
+ default:
+ print_unknown_data(ndo, tptr+2, "\n\t\t ", vc_info_tlv_len-2);
+ break;
+ }
+
+ vc_info_len -= vc_info_tlv_len;
+ tptr += vc_info_tlv_len;
+ }
+ break;
+ }
+
+ break;
+
+ case LDP_TLV_GENERIC_LABEL:
+ TLV_TCHECK(4);
+ ND_PRINT("\n\t Label: %u", GET_BE_U_4(tptr) & 0xfffff);
+ break;
+
+ case LDP_TLV_STATUS:
+ TLV_TCHECK(8);
+ ui = GET_BE_U_4(tptr);
+ tptr+=4;
+ ND_PRINT("\n\t Status: 0x%02x, Flags: [%s and %s forward]",
+ ui&0x3fffffff,
+ ui&0x80000000 ? "Fatal error" : "Advisory Notification",
+ ui&0x40000000 ? "do" : "don't");
+ ui = GET_BE_U_4(tptr);
+ tptr+=4;
+ if (ui)
+ ND_PRINT(", causing Message ID: 0x%08x", ui);
+ break;
+
+ case LDP_TLV_FT_SESSION:
+ TLV_TCHECK(12);
+ ft_flags = GET_BE_U_2(tptr);
+ ND_PRINT("\n\t Flags: [%sReconnect, %sSave State, %sAll-Label Protection, %s Checkpoint, %sRe-Learn State]",
+ ft_flags&0x8000 ? "" : "No ",
+ ft_flags&0x8 ? "" : "Don't ",
+ ft_flags&0x4 ? "" : "No ",
+ ft_flags&0x2 ? "Sequence Numbered Label" : "All Labels",
+ ft_flags&0x1 ? "" : "Don't ");
+ /* 16 bits (FT Flags) + 16 bits (Reserved) */
+ tptr+=4;
+ ui = GET_BE_U_4(tptr);
+ if (ui)
+ ND_PRINT(", Reconnect Timeout: %ums", ui);
+ tptr+=4;
+ ui = GET_BE_U_4(tptr);
+ if (ui)
+ ND_PRINT(", Recovery Time: %ums", ui);
+ break;
+
+ case LDP_TLV_MTU:
+ TLV_TCHECK(2);
+ ND_PRINT("\n\t MTU: %u", GET_BE_U_2(tptr));
+ break;
+
+
+ /*
+ * FIXME those are the defined TLVs that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+
+ case LDP_TLV_HOP_COUNT:
+ case LDP_TLV_PATH_VECTOR:
+ case LDP_TLV_ATM_LABEL:
+ case LDP_TLV_FR_LABEL:
+ case LDP_TLV_EXTD_STATUS:
+ case LDP_TLV_RETURNED_PDU:
+ case LDP_TLV_RETURNED_MSG:
+ case LDP_TLV_ATM_SESSION_PARM:
+ case LDP_TLV_FR_SESSION_PARM:
+ case LDP_TLV_LABEL_REQUEST_MSG_ID:
+
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, tptr, "\n\t ", tlv_tlen);
+ break;
+ }
+ return(tlv_len+4); /* Type & Length fields not included */
+
+trunc:
+ nd_trunc_longjmp(ndo);
+
+invalid:
+ return(tlv_len+4); /* Type & Length fields not included */
+}
+
+void
+ldp_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len)
+{
+ u_int processed;
+
+ ndo->ndo_protocol = "ldp";
+ while (len > (sizeof(struct ldp_common_header) + sizeof(struct ldp_msg_header))) {
+ processed = ldp_pdu_print(ndo, pptr);
+ if (processed == 0)
+ return;
+ if (len < processed) {
+ ND_PRINT(" [remaining length %u < %u]", len, processed);
+ nd_print_invalid(ndo);
+ break;
+ }
+ len -= processed;
+ pptr += processed;
+ }
+}
+
+static u_int
+ldp_pdu_print(netdissect_options *ndo,
+ const u_char *pptr)
+{
+ const struct ldp_common_header *ldp_com_header;
+ const struct ldp_msg_header *ldp_msg_header;
+ const u_char *tptr,*msg_tptr;
+ u_short tlen;
+ u_short pdu_len,msg_len,msg_type;
+ u_int msg_tlen;
+ int hexdump,processed;
+
+ ldp_com_header = (const struct ldp_common_header *)pptr;
+ ND_TCHECK_SIZE(ldp_com_header);
+
+ /*
+ * Sanity checking of the header.
+ */
+ if (GET_BE_U_2(ldp_com_header->version) != LDP_VERSION) {
+ ND_PRINT("%sLDP version %u packet not supported",
+ (ndo->ndo_vflag < 1) ? "" : "\n\t",
+ GET_BE_U_2(ldp_com_header->version));
+ return 0;
+ }
+
+ pdu_len = GET_BE_U_2(ldp_com_header->pdu_length);
+ if (pdu_len < sizeof(struct ldp_common_header)-4) {
+ /* length too short */
+ ND_PRINT("%sLDP, pdu-length: %u (too short, < %zu)",
+ (ndo->ndo_vflag < 1) ? "" : "\n\t",
+ pdu_len,
+ sizeof(struct ldp_common_header)-4);
+ return 0;
+ }
+
+ /* print the LSR-ID, label-space & length */
+ ND_PRINT("%sLDP, Label-Space-ID: %s:%u, pdu-length: %u",
+ (ndo->ndo_vflag < 1) ? "" : "\n\t",
+ GET_IPADDR_STRING(ldp_com_header->lsr_id),
+ GET_BE_U_2(ldp_com_header->label_space),
+ pdu_len);
+
+ /* bail out if non-verbose */
+ if (ndo->ndo_vflag < 1)
+ return 0;
+
+ /* ok they seem to want to know everything - lets fully decode it */
+ tptr = pptr + sizeof(struct ldp_common_header);
+ tlen = pdu_len - (sizeof(struct ldp_common_header)-4); /* Type & Length fields not included */
+
+ while(tlen>0) {
+ /* did we capture enough for fully decoding the msg header ? */
+ ND_TCHECK_LEN(tptr, sizeof(struct ldp_msg_header));
+
+ ldp_msg_header = (const struct ldp_msg_header *)tptr;
+ msg_len=GET_BE_U_2(ldp_msg_header->length);
+ msg_type=LDP_MASK_MSG_TYPE(GET_BE_U_2(ldp_msg_header->type));
+
+ if (msg_len < sizeof(struct ldp_msg_header)-4) {
+ /* length too short */
+ /* FIXME vendor private / experimental check */
+ ND_PRINT("\n\t %s Message (0x%04x), length: %u (too short, < %zu)",
+ tok2str(ldp_msg_values,
+ "Unknown",
+ msg_type),
+ msg_type,
+ msg_len,
+ sizeof(struct ldp_msg_header)-4);
+ return 0;
+ }
+
+ /* FIXME vendor private / experimental check */
+ ND_PRINT("\n\t %s Message (0x%04x), length: %u, Message ID: 0x%08x, Flags: [%s if unknown]",
+ tok2str(ldp_msg_values,
+ "Unknown",
+ msg_type),
+ msg_type,
+ msg_len,
+ GET_BE_U_4(ldp_msg_header->id),
+ LDP_MASK_U_BIT(GET_BE_U_2(ldp_msg_header->type)) ? "continue processing" : "ignore");
+
+ msg_tptr=tptr+sizeof(struct ldp_msg_header);
+ msg_tlen=msg_len-(sizeof(struct ldp_msg_header)-4); /* Type & Length fields not included */
+
+ /* did we capture enough for fully decoding the message ? */
+ ND_TCHECK_LEN(tptr, msg_len);
+ hexdump=FALSE;
+
+ switch(msg_type) {
+
+ case LDP_MSG_NOTIF:
+ case LDP_MSG_HELLO:
+ case LDP_MSG_INIT:
+ case LDP_MSG_KEEPALIVE:
+ case LDP_MSG_ADDRESS:
+ case LDP_MSG_LABEL_MAPPING:
+ case LDP_MSG_ADDRESS_WITHDRAW:
+ case LDP_MSG_LABEL_WITHDRAW:
+ while(msg_tlen >= 4) {
+ processed = ldp_tlv_print(ndo, msg_tptr, msg_tlen);
+ if (processed == 0)
+ break;
+ msg_tlen-=processed;
+ msg_tptr+=processed;
+ }
+ break;
+
+ /*
+ * FIXME those are the defined messages that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+
+ case LDP_MSG_LABEL_REQUEST:
+ case LDP_MSG_LABEL_RELEASE:
+ case LDP_MSG_LABEL_ABORT_REQUEST:
+
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, msg_tptr, "\n\t ", msg_tlen);
+ break;
+ }
+ /* do we want to see an additionally hexdump ? */
+ if (ndo->ndo_vflag > 1 || hexdump==TRUE)
+ print_unknown_data(ndo, tptr+sizeof(struct ldp_msg_header), "\n\t ",
+ msg_len);
+
+ tptr += msg_len+4;
+ tlen -= msg_len+4;
+ }
+ return pdu_len+4;
+trunc:
+ nd_trunc_longjmp(ndo);
+}
diff --git a/print-lisp.c b/print-lisp.c
new file mode 100644
index 0000000..756fff0
--- /dev/null
+++ b/print-lisp.c
@@ -0,0 +1,453 @@
+/*
+ * Copyright (c) 2015 Ritesh Ranjan (r.ranjan789@gmail.com)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: - Locator/Identifier Separation Protocol (LISP) printer */
+
+/*
+ * specification: RFC 6830
+ *
+ *
+ * The Map-Register message format is:
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Type=3 |P|S|I|R| Reserved |M| Record Count |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Nonce . . . |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | . . . Nonce |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Key ID | Authentication Data Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * ~ Authentication Data ~
+ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | | Record TTL |
+ * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * R | Locator Count | EID mask-len | ACT |A| Reserved |
+ * e +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * c | Rsvd | Map-Version Number | EID-Prefix-AFI |
+ * o +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * r | EID-Prefix |
+ * d +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | /| Priority | Weight | M Priority | M Weight |
+ * | L +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | o | Unused Flags |L|p|R| Loc-AFI |
+ * | c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | \| Locator |
+ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ *
+ * The Map-Notify message format is:
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Type=4 |I|R| Reserved | Record Count |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Nonce . . . |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | . . . Nonce |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Key ID | Authentication Data Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * ~ Authentication Data ~
+ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | | Record TTL |
+ * | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * R | Locator Count | EID mask-len | ACT |A| Reserved |
+ * e +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * c | Rsvd | Map-Version Number | EID-Prefix-AFI |
+ * o +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * r | EID-Prefix |
+ * d +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | /| Priority | Weight | M Priority | M Weight |
+ * | L +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | o | Unused Flags |L|p|R| Loc-AFI |
+ * | c +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | \| Locator |
+ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include "netdissect.h"
+
+#include "ip.h"
+#include "ip6.h"
+
+#include "extract.h"
+#include "addrtoname.h"
+
+
+#define IPv4_AFI 1
+#define IPv6_AFI 2
+#define TYPE_INDEX 4
+#define LISP_MAP_NOTIFY_IBIT_MASK 8
+#define LISP_MAP_REGISTER_IBIT_MASK 2
+
+enum {
+ LISP_MAP_REQUEST = 1,
+ LISP_MAP_REPLY,
+ LISP_MAP_REGISTER,
+ LISP_MAP_NOTIFY,
+ LISP_ENCAPSULATED_CONTROL_MESSAGE = 8
+};
+
+enum {
+ LISP_AUTH_NONE,
+ LISP_AUTH_SHA1,
+ LISP_AUTH_SHA256
+};
+
+static const struct tok lisp_type [] = {
+ { 0, "LISP-Reserved" },
+ { 1, "LISP-Map-Request" },
+ { 2, "LISP-Map-Reply" },
+ { 3, "LISP-Map-Register" },
+ { 4, "LISP-Map-Notify" },
+ { 8, "LISP-Encapsulated-Contol-Message" },
+ { 0, NULL }
+};
+
+/*
+ * P-Bit : Request for Proxy Map-Reply from the MS/MR
+ * S-Bit : Security Enhancement. ETR is LISP-SEC enabled. draft-ietf-lisp-sec
+ * I-Bit : 128 bit xTR-ID and 64 bit Site-ID present.
+ * xTR-ID and Site-ID help in differentiation of xTRs in multi xTR
+ * and multi Site deployment scenarios.
+ * R-Bit : Built for a Reencapsulating-Tunnel-Router. Used in Traffic
+ * Engineering and Service Chaining
+ */
+static const struct tok map_register_hdr_flag[] = {
+ { 0x08000000, "P-Proxy-Map-Reply" },
+ { 0x04000000, "S-LISP-SEC-Capable" },
+ { 0x02000000, "I-xTR-ID-Present" },
+ { 0x01000000, "R-Build-For-RTR" },
+ { 0x00000100, "M-Want-Map-Notify" },
+ { 0, NULL }
+};
+
+static const struct tok map_notify_hdr_flag[] = {
+ { 0x08000000, "I-xTR-ID-Present" },
+ { 0x04000000, "R-Build-For-RTR" },
+ { 0, NULL }
+};
+
+static const struct tok auth_type[] = {
+ { LISP_AUTH_NONE, "None" },
+ { LISP_AUTH_SHA1, "SHA1" },
+ { LISP_AUTH_SHA256, "SHA256" },
+ { 0, NULL}
+};
+
+static const struct tok lisp_eid_action[] = {
+ { 0, "No-Action" },
+ { 1, "Natively-Forward" },
+ { 2, "Send-Map-Request" },
+ { 3, "Drop" },
+ { 0, NULL}
+};
+
+static const struct tok lisp_loc_flag[] = {
+ { 0x0004, "Local-Locator" },
+ { 0x0002, "RLoc-Probed" },
+ { 0x0001, "Reachable" },
+ { 0, NULL }
+};
+
+typedef struct map_register_hdr {
+ nd_uint8_t type_and_flag;
+ nd_uint8_t reserved;
+ nd_uint8_t reserved_and_flag2;
+ nd_uint8_t record_count;
+ nd_uint64_t nonce;
+ nd_uint16_t key_id;
+ nd_uint16_t auth_data_len;
+} lisp_map_register_hdr;
+
+#define MAP_REGISTER_HDR_LEN sizeof(lisp_map_register_hdr)
+
+typedef struct map_register_eid {
+ nd_uint32_t ttl;
+ nd_uint8_t locator_count;
+ nd_uint8_t eid_prefix_mask_length;
+ nd_uint8_t act_auth_inc_res;
+ nd_uint8_t reserved;
+ nd_uint16_t reserved_and_version;
+ nd_uint16_t eid_prefix_afi;
+} lisp_map_register_eid;
+
+#define MAP_REGISTER_EID_LEN sizeof(lisp_map_register_eid)
+
+typedef struct map_register_loc {
+ nd_uint8_t priority;
+ nd_uint8_t weight;
+ nd_uint8_t m_priority;
+ nd_uint8_t m_weight;
+ nd_uint16_t unused_and_flag;
+ nd_uint16_t locator_afi;
+} lisp_map_register_loc;
+
+#define MAP_REGISTER_LOC_LEN sizeof(lisp_map_register_loc)
+
+static uint8_t extract_lisp_type(uint8_t);
+static uint8_t is_xtr_data_present(uint8_t, uint8_t);
+static void lisp_hdr_flag(netdissect_options *, const lisp_map_register_hdr *);
+static void action_flag(netdissect_options *, uint8_t);
+static void loc_hdr_flag(netdissect_options *, uint16_t);
+
+void
+lisp_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ uint8_t type_and_flag;
+ uint8_t type;
+ uint8_t mask_len;
+ uint8_t loc_count;
+ uint8_t xtr_present;
+ uint8_t record_count;
+ uint16_t key_id;
+ uint16_t eid_afi;
+ uint16_t loc_afi;
+ uint16_t map_version;
+ uint16_t packet_offset;
+ uint16_t auth_data_len;
+ uint32_t ttl;
+ const u_char *packet_iterator;
+ const u_char *loc_ip_pointer;
+ const lisp_map_register_hdr *lisp_hdr;
+ const lisp_map_register_eid *lisp_eid;
+ const lisp_map_register_loc *lisp_loc;
+
+ ndo->ndo_protocol = "lisp";
+ /* Check if enough bytes for header are available */
+ ND_TCHECK_LEN(bp, MAP_REGISTER_HDR_LEN);
+ lisp_hdr = (const lisp_map_register_hdr *) bp;
+ lisp_hdr_flag(ndo, lisp_hdr);
+ /* Supporting only MAP NOTIFY and MAP REGISTER LISP packets */
+ type_and_flag = GET_U_1(lisp_hdr->type_and_flag);
+ type = extract_lisp_type(type_and_flag);
+ if ((type != LISP_MAP_REGISTER) && (type != LISP_MAP_NOTIFY))
+ return;
+
+ /* Find if the packet contains xTR and Site-ID data */
+ xtr_present = is_xtr_data_present(type, type_and_flag);
+
+ /* Extract the number of EID records present */
+ auth_data_len = GET_BE_U_2(lisp_hdr->auth_data_len);
+ packet_iterator = (const u_char *)(lisp_hdr);
+ packet_offset = MAP_REGISTER_HDR_LEN;
+ record_count = GET_U_1(lisp_hdr->record_count);
+
+ if (ndo->ndo_vflag) {
+ key_id = GET_BE_U_2(lisp_hdr->key_id);
+ ND_PRINT("\n %u record(s), ", record_count);
+ ND_PRINT("Authentication %s,",
+ tok2str(auth_type, "unknown-type", key_id));
+ hex_print(ndo, "\n Authentication-Data: ", packet_iterator +
+ packet_offset, auth_data_len);
+ } else {
+ ND_PRINT(" %u record(s),", record_count);
+ }
+ packet_offset += auth_data_len;
+
+ if (record_count == 0)
+ goto invalid;
+
+ /* Print all the EID records */
+ while ((length > packet_offset) && (record_count != 0)) {
+ record_count--;
+ ND_TCHECK_LEN(packet_iterator + packet_offset,
+ MAP_REGISTER_EID_LEN);
+ ND_PRINT("\n");
+ lisp_eid = (const lisp_map_register_eid *)
+ ((const u_char *)lisp_hdr + packet_offset);
+ packet_offset += MAP_REGISTER_EID_LEN;
+ mask_len = GET_U_1(lisp_eid->eid_prefix_mask_length);
+ eid_afi = GET_BE_U_2(lisp_eid->eid_prefix_afi);
+ loc_count = GET_U_1(lisp_eid->locator_count);
+
+ if (ndo->ndo_vflag) {
+ ttl = GET_BE_U_4(lisp_eid->ttl);
+ ND_PRINT(" Record TTL %u,", ttl);
+ action_flag(ndo, GET_U_1(lisp_eid->act_auth_inc_res));
+ map_version = GET_BE_U_2(lisp_eid->reserved_and_version) & 0x0FFF;
+ ND_PRINT(" Map Version: %u,", map_version);
+ }
+
+ switch (eid_afi) {
+ case IPv4_AFI:
+ ND_PRINT(" EID %s/%u,",
+ GET_IPADDR_STRING(packet_iterator + packet_offset),
+ mask_len);
+ packet_offset += 4;
+ break;
+ case IPv6_AFI:
+ ND_PRINT(" EID %s/%u,",
+ GET_IP6ADDR_STRING(packet_iterator + packet_offset),
+ mask_len);
+ packet_offset += 16;
+ break;
+ default:
+ /*
+ * No support for LCAF right now.
+ */
+ return;
+ break;
+ }
+
+ ND_PRINT(" %u locator(s)", loc_count);
+
+ while (loc_count != 0) {
+ loc_count--;
+ ND_TCHECK_LEN(packet_iterator + packet_offset,
+ MAP_REGISTER_LOC_LEN);
+ lisp_loc = (const lisp_map_register_loc *) (packet_iterator + packet_offset);
+ loc_ip_pointer = (const u_char *) (lisp_loc + 1);
+ packet_offset += MAP_REGISTER_LOC_LEN;
+ loc_afi = GET_BE_U_2(lisp_loc->locator_afi);
+
+ if (ndo->ndo_vflag)
+ ND_PRINT("\n ");
+
+ switch (loc_afi) {
+ case IPv4_AFI:
+ ND_TCHECK_4(packet_iterator + packet_offset);
+ ND_PRINT(" LOC %s", GET_IPADDR_STRING(loc_ip_pointer));
+ packet_offset += 4;
+ break;
+ case IPv6_AFI:
+ ND_TCHECK_16(packet_iterator + packet_offset);
+ ND_PRINT(" LOC %s", GET_IP6ADDR_STRING(loc_ip_pointer));
+ packet_offset += 16;
+ break;
+ default:
+ break;
+ }
+ if (ndo->ndo_vflag) {
+ ND_PRINT("\n Priority/Weight %u/%u,"
+ " Multicast Priority/Weight %u/%u,",
+ GET_U_1(lisp_loc->priority),
+ GET_U_1(lisp_loc->weight),
+ GET_U_1(lisp_loc->m_priority),
+ GET_U_1(lisp_loc->m_weight));
+ loc_hdr_flag(ndo,
+ GET_BE_U_2(lisp_loc->unused_and_flag));
+ }
+ }
+ }
+
+ /*
+ * Print xTR and Site ID. Handle the fact that the packet could be invalid.
+ * If the xTR_ID_Present bit is not set, and we still have data to display,
+ * show it as hex data.
+ */
+ if (xtr_present) {
+ if (!ND_TTEST_LEN(packet_iterator + packet_offset, 24))
+ goto invalid;
+ hex_print(ndo, "\n xTR-ID: ", packet_iterator + packet_offset, 16);
+ ND_PRINT("\n SITE-ID: %" PRIu64,
+ GET_BE_U_8(packet_iterator + packet_offset + 16));
+ } else {
+ /* Check if packet isn't over yet */
+ if (packet_iterator + packet_offset < ndo->ndo_snapend) {
+ hex_print(ndo, "\n Data: ", packet_iterator + packet_offset,
+ ND_BYTES_AVAILABLE_AFTER(packet_iterator + packet_offset));
+ }
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+ return;
+invalid:
+ nd_print_invalid(ndo);
+}
+
+static uint8_t
+extract_lisp_type(uint8_t lisp_hdr_flags)
+{
+ return (lisp_hdr_flags) >> TYPE_INDEX;
+}
+
+static uint8_t
+is_xtr_data_present(uint8_t type, uint8_t lisp_hdr_flags)
+{
+ uint8_t xtr_present = 0;
+
+ if (type == LISP_MAP_REGISTER)
+ xtr_present = (lisp_hdr_flags) & LISP_MAP_REGISTER_IBIT_MASK;
+ else if (type == LISP_MAP_NOTIFY)
+ xtr_present = (lisp_hdr_flags) & LISP_MAP_NOTIFY_IBIT_MASK;
+
+ return xtr_present;
+}
+
+static void lisp_hdr_flag(netdissect_options *ndo, const lisp_map_register_hdr *lisp_hdr)
+{
+ uint8_t type = extract_lisp_type(GET_U_1(lisp_hdr->type_and_flag));
+
+ if (!ndo->ndo_vflag) {
+ ND_PRINT("%s,", tok2str(lisp_type, "unknown-type-%u", type));
+ return;
+ } else {
+ ND_PRINT("%s,", tok2str(lisp_type, "unknown-type-%u", type));
+ }
+
+ if (type == LISP_MAP_REGISTER) {
+ ND_PRINT(" flags [%s],", bittok2str(map_register_hdr_flag,
+ "none", GET_BE_U_4(lisp_hdr)));
+ } else if (type == LISP_MAP_NOTIFY) {
+ ND_PRINT(" flags [%s],", bittok2str(map_notify_hdr_flag,
+ "none", GET_BE_U_4(lisp_hdr)));
+ }
+}
+
+static void action_flag(netdissect_options *ndo, uint8_t act_auth_inc_res)
+{
+ uint8_t action;
+ uint8_t authoritative;
+
+ authoritative = ((act_auth_inc_res >> 4) & 1);
+
+ if (authoritative)
+ ND_PRINT(" Authoritative,");
+ else
+ ND_PRINT(" Non-Authoritative,");
+
+ action = act_auth_inc_res >> 5;
+ ND_PRINT(" %s,", tok2str(lisp_eid_action, "unknown", action));
+}
+
+static void loc_hdr_flag(netdissect_options *ndo, uint16_t flag)
+{
+ ND_PRINT(" flags [%s],", bittok2str(lisp_loc_flag, "none", flag));
+}
+
diff --git a/print-llc.c b/print-llc.c
new file mode 100644
index 0000000..ae3ae4c
--- /dev/null
+++ b/print-llc.c
@@ -0,0 +1,610 @@
+/*
+ * Copyright (c) 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Code by Matt Thomas, Digital Equipment Corporation
+ * with an awful lot of hacking by Jeffrey Mogul, DECWRL
+ */
+
+/* \summary: IEEE 802.2 LLC printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "llc.h"
+#include "ethertype.h"
+#include "oui.h"
+
+static const struct tok llc_values[] = {
+ { LLCSAP_NULL, "Null" },
+ { LLCSAP_GLOBAL, "Global" },
+ { LLCSAP_8021B_I, "802.1B I" },
+ { LLCSAP_8021B_G, "802.1B G" },
+ { LLCSAP_IP, "IP" },
+ { LLCSAP_SNA, "SNA" },
+ { LLCSAP_PROWAYNM, "ProWay NM" },
+ { LLCSAP_8021D, "STP" },
+ { LLCSAP_RS511, "RS511" },
+ { LLCSAP_ISO8208, "ISO8208" },
+ { LLCSAP_PROWAY, "ProWay" },
+ { LLCSAP_SNAP, "SNAP" },
+ { LLCSAP_IPX, "IPX" },
+ { LLCSAP_NETBEUI, "NetBeui" },
+ { LLCSAP_ISONS, "OSI" },
+ { 0, NULL },
+};
+
+static const struct tok llc_cmd_values[] = {
+ { LLC_UI, "ui" },
+ { LLC_TEST, "test" },
+ { LLC_XID, "xid" },
+ { LLC_UA, "ua" },
+ { LLC_DISC, "disc" },
+ { LLC_DM, "dm" },
+ { LLC_SABME, "sabme" },
+ { LLC_FRMR, "frmr" },
+ { 0, NULL }
+};
+
+static const struct tok llc_flag_values[] = {
+ { 0, "Command" },
+ { LLC_GSAP, "Response" },
+ { LLC_U_POLL, "Poll" },
+ { LLC_GSAP|LLC_U_POLL, "Final" },
+ { LLC_IS_POLL, "Poll" },
+ { LLC_GSAP|LLC_IS_POLL, "Final" },
+ { 0, NULL }
+};
+
+
+static const struct tok llc_ig_flag_values[] = {
+ { 0, "Individual" },
+ { LLC_IG, "Group" },
+ { 0, NULL }
+};
+
+
+static const struct tok llc_supervisory_values[] = {
+ { 0, "Receiver Ready" },
+ { 1, "Receiver not Ready" },
+ { 2, "Reject" },
+ { 0, NULL }
+};
+
+
+static const struct tok cisco_values[] = {
+ { PID_CISCO_CDP, "CDP" },
+ { PID_CISCO_VTP, "VTP" },
+ { PID_CISCO_DTP, "DTP" },
+ { PID_CISCO_UDLD, "UDLD" },
+ { PID_CISCO_PVST, "PVST" },
+ { PID_CISCO_VLANBRIDGE, "VLAN Bridge" },
+ { 0, NULL }
+};
+
+static const struct tok bridged_values[] = {
+ { PID_RFC2684_ETH_FCS, "Ethernet + FCS" },
+ { PID_RFC2684_ETH_NOFCS, "Ethernet w/o FCS" },
+ { PID_RFC2684_802_4_FCS, "802.4 + FCS" },
+ { PID_RFC2684_802_4_NOFCS, "802.4 w/o FCS" },
+ { PID_RFC2684_802_5_FCS, "Token Ring + FCS" },
+ { PID_RFC2684_802_5_NOFCS, "Token Ring w/o FCS" },
+ { PID_RFC2684_FDDI_FCS, "FDDI + FCS" },
+ { PID_RFC2684_FDDI_NOFCS, "FDDI w/o FCS" },
+ { PID_RFC2684_802_6_FCS, "802.6 + FCS" },
+ { PID_RFC2684_802_6_NOFCS, "802.6 w/o FCS" },
+ { PID_RFC2684_BPDU, "BPDU" },
+ { 0, NULL },
+};
+
+static const struct tok null_values[] = {
+ { 0, NULL }
+};
+
+struct oui_tok {
+ uint32_t oui;
+ const struct tok *tok;
+};
+
+static const struct oui_tok oui_to_tok[] = {
+ { OUI_ENCAP_ETHER, ethertype_values },
+ { OUI_CISCO_90, ethertype_values }, /* uses some Ethertype values */
+ { OUI_APPLETALK, ethertype_values }, /* uses some Ethertype values */
+ { OUI_CISCO, cisco_values },
+ { OUI_RFC2684, bridged_values }, /* bridged, RFC 2427 FR or RFC 2864 ATM */
+ { 0, NULL }
+};
+
+/*
+ * If we printed information about the payload, returns the length of the LLC
+ * header, plus the length of any SNAP header following it.
+ *
+ * Otherwise (for example, if the packet has unknown SAPs or has a SNAP
+ * header with an unknown OUI/PID combination), returns the *negative*
+ * of that value.
+ */
+int
+llc_print(netdissect_options *ndo, const u_char *p, u_int length, u_int caplen,
+ const struct lladdr_info *src, const struct lladdr_info *dst)
+{
+ uint8_t dsap_field, dsap, ssap_field, ssap;
+ uint16_t control;
+ int hdrlen;
+ int is_u;
+
+ ndo->ndo_protocol = "llc";
+ if (caplen < 3) {
+ nd_print_trunc(ndo);
+ ND_DEFAULTPRINT((const u_char *)p, caplen);
+ return (caplen);
+ }
+ if (length < 3) {
+ nd_print_trunc(ndo);
+ ND_DEFAULTPRINT((const u_char *)p, caplen);
+ return (length);
+ }
+
+ dsap_field = GET_U_1(p);
+ ssap_field = GET_U_1(p + 1);
+
+ /*
+ * OK, what type of LLC frame is this? The length
+ * of the control field depends on that - I frames
+ * have a two-byte control field, and U frames have
+ * a one-byte control field.
+ */
+ control = GET_U_1(p + 2);
+ if ((control & LLC_U_FMT) == LLC_U_FMT) {
+ /*
+ * U frame.
+ */
+ is_u = 1;
+ hdrlen = 3; /* DSAP, SSAP, 1-byte control field */
+ } else {
+ /*
+ * The control field in I and S frames is
+ * 2 bytes...
+ */
+ if (caplen < 4) {
+ nd_print_trunc(ndo);
+ ND_DEFAULTPRINT((const u_char *)p, caplen);
+ return (caplen);
+ }
+ if (length < 4) {
+ nd_print_trunc(ndo);
+ ND_DEFAULTPRINT((const u_char *)p, caplen);
+ return (length);
+ }
+
+ /*
+ * ...and is little-endian.
+ */
+ control = GET_LE_U_2(p + 2);
+ is_u = 0;
+ hdrlen = 4; /* DSAP, SSAP, 2-byte control field */
+ }
+
+ if (ssap_field == LLCSAP_GLOBAL && dsap_field == LLCSAP_GLOBAL) {
+ /*
+ * This is an Ethernet_802.3 IPX frame; it has an
+ * 802.3 header (i.e., an Ethernet header where the
+ * type/length field is <= MAX_ETHERNET_LENGTH_VAL,
+ * i.e. it's a length field, not a type field), but
+ * has no 802.2 header - the IPX packet starts right
+ * after the Ethernet header, with a signature of two
+ * bytes of 0xFF (which is LLCSAP_GLOBAL).
+ *
+ * (It might also have been an Ethernet_802.3 IPX at
+ * one time, but got bridged onto another network,
+ * such as an 802.11 network; this has appeared in at
+ * least one capture file.)
+ */
+
+ if (ndo->ndo_eflag)
+ ND_PRINT("IPX 802.3: ");
+
+ ipx_print(ndo, p, length);
+ return (0); /* no LLC header */
+ }
+
+ dsap = dsap_field & ~LLC_IG;
+ ssap = ssap_field & ~LLC_GSAP;
+
+ if (ndo->ndo_eflag) {
+ ND_PRINT("LLC, dsap %s (0x%02x) %s, ssap %s (0x%02x) %s",
+ tok2str(llc_values, "Unknown", dsap),
+ dsap,
+ tok2str(llc_ig_flag_values, "Unknown", dsap_field & LLC_IG),
+ tok2str(llc_values, "Unknown", ssap),
+ ssap,
+ tok2str(llc_flag_values, "Unknown", ssap_field & LLC_GSAP));
+
+ if (is_u) {
+ ND_PRINT(", ctrl 0x%02x: ", control);
+ } else {
+ ND_PRINT(", ctrl 0x%04x: ", control);
+ }
+ }
+
+ /*
+ * Skip LLC header.
+ */
+ p += hdrlen;
+ length -= hdrlen;
+ caplen -= hdrlen;
+
+ if (ssap == LLCSAP_SNAP && dsap == LLCSAP_SNAP
+ && control == LLC_UI) {
+ /*
+ * XXX - what *is* the right bridge pad value here?
+ * Does anybody ever bridge one form of LAN traffic
+ * over a networking type that uses 802.2 LLC?
+ */
+ if (!snap_print(ndo, p, length, caplen, src, dst, 2)) {
+ /*
+ * Unknown packet type; tell our caller, by
+ * returning a negative value, so they
+ * can print the raw packet.
+ */
+ return (-(hdrlen + 5)); /* include LLC and SNAP header */
+ } else
+ return (hdrlen + 5); /* include LLC and SNAP header */
+ }
+
+ if (ssap == LLCSAP_8021D && dsap == LLCSAP_8021D &&
+ control == LLC_UI) {
+ stp_print(ndo, p, length);
+ return (hdrlen);
+ }
+
+ if (ssap == LLCSAP_IP && dsap == LLCSAP_IP &&
+ control == LLC_UI) {
+ /*
+ * This is an RFC 948-style IP packet, with
+ * an 802.3 header and an 802.2 LLC header
+ * with the source and destination SAPs being
+ * the IP SAP.
+ */
+ ip_print(ndo, p, length);
+ return (hdrlen);
+ }
+
+ if (ssap == LLCSAP_IPX && dsap == LLCSAP_IPX &&
+ control == LLC_UI) {
+ /*
+ * This is an Ethernet_802.2 IPX frame, with an 802.3
+ * header and an 802.2 LLC header with the source and
+ * destination SAPs being the IPX SAP.
+ */
+ if (ndo->ndo_eflag)
+ ND_PRINT("IPX 802.2: ");
+
+ ipx_print(ndo, p, length);
+ return (hdrlen);
+ }
+
+#ifdef ENABLE_SMB
+ if (ssap == LLCSAP_NETBEUI && dsap == LLCSAP_NETBEUI
+ && (!(control & LLC_S_FMT) || control == LLC_U_FMT)) {
+ /*
+ * we don't actually have a full netbeui parser yet, but the
+ * smb parser can handle many smb-in-netbeui packets, which
+ * is very useful, so we call that
+ *
+ * We don't call it for S frames, however, just I frames
+ * (which are frames that don't have the low-order bit,
+ * LLC_S_FMT, set in the first byte of the control field)
+ * and UI frames (whose control field is just 3, LLC_U_FMT).
+ */
+ netbeui_print(ndo, control, p, length);
+ return (hdrlen);
+ }
+#endif
+ if (ssap == LLCSAP_ISONS && dsap == LLCSAP_ISONS
+ && control == LLC_UI) {
+ isoclns_print(ndo, p, length);
+ return (hdrlen);
+ }
+
+ if (!ndo->ndo_eflag) {
+ if (ssap == dsap) {
+ if (src == NULL || dst == NULL)
+ ND_PRINT("%s ", tok2str(llc_values, "Unknown DSAP 0x%02x", dsap));
+ else
+ ND_PRINT("%s > %s %s ",
+ (src->addr_string)(ndo, src->addr),
+ (dst->addr_string)(ndo, dst->addr),
+ tok2str(llc_values, "Unknown DSAP 0x%02x", dsap));
+ } else {
+ if (src == NULL || dst == NULL)
+ ND_PRINT("%s > %s ",
+ tok2str(llc_values, "Unknown SSAP 0x%02x", ssap),
+ tok2str(llc_values, "Unknown DSAP 0x%02x", dsap));
+ else
+ ND_PRINT("%s %s > %s %s ",
+ (src->addr_string)(ndo, src->addr),
+ tok2str(llc_values, "Unknown SSAP 0x%02x", ssap),
+ (dst->addr_string)(ndo, dst->addr),
+ tok2str(llc_values, "Unknown DSAP 0x%02x", dsap));
+ }
+ }
+
+ if (is_u) {
+ ND_PRINT("Unnumbered, %s, Flags [%s], length %u",
+ tok2str(llc_cmd_values, "%02x", LLC_U_CMD(control)),
+ tok2str(llc_flag_values,"?",(ssap_field & LLC_GSAP) | (control & LLC_U_POLL)),
+ length + hdrlen);
+
+ if ((control & ~LLC_U_POLL) == LLC_XID) {
+ if (length == 0) {
+ /*
+ * XID with no payload.
+ * This could, for example, be an SNA
+ * "short form" XID.
+ */
+ return (hdrlen);
+ }
+ if (caplen < 1) {
+ nd_print_trunc(ndo);
+ if (caplen > 0)
+ ND_DEFAULTPRINT((const u_char *)p, caplen);
+ return (hdrlen);
+ }
+ if (GET_U_1(p) == LLC_XID_FI) {
+ if (caplen < 3 || length < 3) {
+ nd_print_trunc(ndo);
+ if (caplen > 0)
+ ND_DEFAULTPRINT((const u_char *)p, caplen);
+ } else
+ ND_PRINT(": %02x %02x",
+ GET_U_1(p + 1),
+ GET_U_1(p + 2));
+ return (hdrlen);
+ }
+ }
+ } else {
+ if ((control & LLC_S_FMT) == LLC_S_FMT) {
+ ND_PRINT("Supervisory, %s, rcv seq %u, Flags [%s], length %u",
+ tok2str(llc_supervisory_values,"?",LLC_S_CMD(control)),
+ LLC_IS_NR(control),
+ tok2str(llc_flag_values,"?",(ssap_field & LLC_GSAP) | (control & LLC_IS_POLL)),
+ length + hdrlen);
+ return (hdrlen); /* no payload to print */
+ } else {
+ ND_PRINT("Information, send seq %u, rcv seq %u, Flags [%s], length %u",
+ LLC_I_NS(control),
+ LLC_IS_NR(control),
+ tok2str(llc_flag_values,"?",(ssap_field & LLC_GSAP) | (control & LLC_IS_POLL)),
+ length + hdrlen);
+ }
+ }
+ return (-hdrlen);
+}
+
+static const struct tok *
+oui_to_struct_tok(uint32_t orgcode)
+{
+ const struct tok *tok = null_values;
+ const struct oui_tok *otp;
+
+ for (otp = &oui_to_tok[0]; otp->tok != NULL; otp++) {
+ if (otp->oui == orgcode) {
+ tok = otp->tok;
+ break;
+ }
+ }
+ return (tok);
+}
+
+int
+snap_print(netdissect_options *ndo, const u_char *p, u_int length, u_int caplen,
+ const struct lladdr_info *src, const struct lladdr_info *dst,
+ u_int bridge_pad)
+{
+ uint32_t orgcode;
+ u_short et;
+ int ret;
+
+ ndo->ndo_protocol = "snap";
+ ND_TCHECK_5(p);
+ if (caplen < 5 || length < 5)
+ goto trunc;
+ orgcode = GET_BE_U_3(p);
+ et = GET_BE_U_2(p + 3);
+
+ if (ndo->ndo_eflag) {
+ /*
+ * Somebody's already printed the MAC addresses, if there
+ * are any, so just print the SNAP header, not the MAC
+ * addresses.
+ */
+ ND_PRINT("oui %s (0x%06x), %s %s (0x%04x), length %u: ",
+ tok2str(oui_values, "Unknown", orgcode),
+ orgcode,
+ (orgcode == 0x000000 ? "ethertype" : "pid"),
+ tok2str(oui_to_struct_tok(orgcode), "Unknown", et),
+ et, length - 5);
+ }
+ p += 5;
+ length -= 5;
+ caplen -= 5;
+
+ switch (orgcode) {
+ case OUI_ENCAP_ETHER:
+ case OUI_CISCO_90:
+ /*
+ * This is an encapsulated Ethernet packet,
+ * or a packet bridged by some piece of
+ * Cisco hardware; the protocol ID is
+ * an Ethernet protocol type.
+ */
+ ret = ethertype_print(ndo, et, p, length, caplen, src, dst);
+ if (ret)
+ return (ret);
+ break;
+
+ case OUI_APPLETALK:
+ if (et == ETHERTYPE_ATALK) {
+ /*
+ * No, I have no idea why Apple used one
+ * of their own OUIs, rather than
+ * 0x000000, and an Ethernet packet
+ * type, for Appletalk data packets,
+ * but used 0x000000 and an Ethernet
+ * packet type for AARP packets.
+ */
+ ret = ethertype_print(ndo, et, p, length, caplen, src, dst);
+ if (ret)
+ return (ret);
+ }
+ break;
+
+ case OUI_CISCO:
+ switch (et) {
+ case PID_CISCO_CDP:
+ cdp_print(ndo, p, length);
+ return (1);
+ case PID_CISCO_DTP:
+ dtp_print(ndo, p, length);
+ return (1);
+ case PID_CISCO_UDLD:
+ udld_print(ndo, p, length);
+ return (1);
+ case PID_CISCO_VTP:
+ vtp_print(ndo, p, length);
+ return (1);
+ case PID_CISCO_PVST:
+ case PID_CISCO_VLANBRIDGE:
+ stp_print(ndo, p, length);
+ return (1);
+ default:
+ break;
+ }
+ break;
+
+ case OUI_RFC2684:
+ switch (et) {
+
+ case PID_RFC2684_ETH_FCS:
+ case PID_RFC2684_ETH_NOFCS:
+ /*
+ * XXX - remove the last two bytes for
+ * PID_RFC2684_ETH_FCS?
+ */
+ /*
+ * Skip the padding.
+ */
+ ND_TCHECK_LEN(p, bridge_pad);
+ caplen -= bridge_pad;
+ length -= bridge_pad;
+ p += bridge_pad;
+
+ /*
+ * What remains is an Ethernet packet.
+ */
+ ether_print(ndo, p, length, caplen, NULL, NULL);
+ return (1);
+
+ case PID_RFC2684_802_5_FCS:
+ case PID_RFC2684_802_5_NOFCS:
+ /*
+ * XXX - remove the last two bytes for
+ * PID_RFC2684_ETH_FCS?
+ */
+ /*
+ * Skip the padding, but not the Access
+ * Control field.
+ */
+ ND_TCHECK_LEN(p, bridge_pad);
+ caplen -= bridge_pad;
+ length -= bridge_pad;
+ p += bridge_pad;
+
+ /*
+ * What remains is an 802.5 Token Ring
+ * packet.
+ */
+ token_print(ndo, p, length, caplen);
+ return (1);
+
+ case PID_RFC2684_FDDI_FCS:
+ case PID_RFC2684_FDDI_NOFCS:
+ /*
+ * XXX - remove the last two bytes for
+ * PID_RFC2684_ETH_FCS?
+ */
+ /*
+ * Skip the padding.
+ */
+ ND_TCHECK_LEN(p, bridge_pad + 1);
+ caplen -= bridge_pad + 1;
+ length -= bridge_pad + 1;
+ p += bridge_pad + 1;
+
+ /*
+ * What remains is an FDDI packet.
+ */
+ fddi_print(ndo, p, length, caplen);
+ return (1);
+
+ case PID_RFC2684_BPDU:
+ stp_print(ndo, p, length);
+ return (1);
+ }
+ }
+ if (!ndo->ndo_eflag) {
+ /*
+ * Nobody printed the link-layer addresses, so print them, if
+ * we have any.
+ */
+ if (src != NULL && dst != NULL) {
+ ND_PRINT("%s > %s ",
+ (src->addr_string)(ndo, src->addr),
+ (dst->addr_string)(ndo, dst->addr));
+ }
+ /*
+ * Print the SNAP header, but if the OUI is 000000, don't
+ * bother printing it, and report the PID as being an
+ * ethertype.
+ */
+ if (orgcode == 0x000000) {
+ ND_PRINT("SNAP, ethertype %s (0x%04x), length %u: ",
+ tok2str(ethertype_values, "Unknown", et),
+ et, length);
+ } else {
+ ND_PRINT("SNAP, oui %s (0x%06x), pid %s (0x%04x), length %u: ",
+ tok2str(oui_values, "Unknown", orgcode),
+ orgcode,
+ tok2str(oui_to_struct_tok(orgcode), "Unknown", et),
+ et, length);
+ }
+ }
+ return (0);
+
+trunc:
+ nd_print_trunc(ndo);
+ return (1);
+}
diff --git a/print-lldp.c b/print-lldp.c
new file mode 100644
index 0000000..f0e5f60
--- /dev/null
+++ b/print-lldp.c
@@ -0,0 +1,1682 @@
+/*
+ * Copyright (c) 1998-2007 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ * IEEE and TIA extensions by Carles Kishimoto <carles.kishimoto@gmail.com>
+ * DCBX extensions by Kaladhar Musunuru <kaladharm@sourceforge.net>
+ */
+
+/* \summary: IEEE 802.1ab Link Layer Discovery Protocol (LLDP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "af.h"
+#include "oui.h"
+
+#define LLDP_EXTRACT_TYPE(x) (((x)&0xfe00)>>9)
+#define LLDP_EXTRACT_LEN(x) ((x)&0x01ff)
+
+/*
+ * TLV type codes
+ */
+#define LLDP_END_TLV 0
+#define LLDP_CHASSIS_ID_TLV 1
+#define LLDP_PORT_ID_TLV 2
+#define LLDP_TTL_TLV 3
+#define LLDP_PORT_DESCR_TLV 4
+#define LLDP_SYSTEM_NAME_TLV 5
+#define LLDP_SYSTEM_DESCR_TLV 6
+#define LLDP_SYSTEM_CAP_TLV 7
+#define LLDP_MGMT_ADDR_TLV 8
+#define LLDP_PRIVATE_TLV 127
+
+static const struct tok lldp_tlv_values[] = {
+ { LLDP_END_TLV, "End" },
+ { LLDP_CHASSIS_ID_TLV, "Chassis ID" },
+ { LLDP_PORT_ID_TLV, "Port ID" },
+ { LLDP_TTL_TLV, "Time to Live" },
+ { LLDP_PORT_DESCR_TLV, "Port Description" },
+ { LLDP_SYSTEM_NAME_TLV, "System Name" },
+ { LLDP_SYSTEM_DESCR_TLV, "System Description" },
+ { LLDP_SYSTEM_CAP_TLV, "System Capabilities" },
+ { LLDP_MGMT_ADDR_TLV, "Management Address" },
+ { LLDP_PRIVATE_TLV, "Organization specific" },
+ { 0, NULL}
+};
+
+/*
+ * Chassis ID subtypes
+ */
+#define LLDP_CHASSIS_CHASSIS_COMP_SUBTYPE 1
+#define LLDP_CHASSIS_INTF_ALIAS_SUBTYPE 2
+#define LLDP_CHASSIS_PORT_COMP_SUBTYPE 3
+#define LLDP_CHASSIS_MAC_ADDR_SUBTYPE 4
+#define LLDP_CHASSIS_NETWORK_ADDR_SUBTYPE 5
+#define LLDP_CHASSIS_INTF_NAME_SUBTYPE 6
+#define LLDP_CHASSIS_LOCAL_SUBTYPE 7
+
+static const struct tok lldp_chassis_subtype_values[] = {
+ { LLDP_CHASSIS_CHASSIS_COMP_SUBTYPE, "Chassis component"},
+ { LLDP_CHASSIS_INTF_ALIAS_SUBTYPE, "Interface alias"},
+ { LLDP_CHASSIS_PORT_COMP_SUBTYPE, "Port component"},
+ { LLDP_CHASSIS_MAC_ADDR_SUBTYPE, "MAC address"},
+ { LLDP_CHASSIS_NETWORK_ADDR_SUBTYPE, "Network address"},
+ { LLDP_CHASSIS_INTF_NAME_SUBTYPE, "Interface name"},
+ { LLDP_CHASSIS_LOCAL_SUBTYPE, "Local"},
+ { 0, NULL}
+};
+
+/*
+ * Port ID subtypes
+ */
+#define LLDP_PORT_INTF_ALIAS_SUBTYPE 1
+#define LLDP_PORT_PORT_COMP_SUBTYPE 2
+#define LLDP_PORT_MAC_ADDR_SUBTYPE 3
+#define LLDP_PORT_NETWORK_ADDR_SUBTYPE 4
+#define LLDP_PORT_INTF_NAME_SUBTYPE 5
+#define LLDP_PORT_AGENT_CIRC_ID_SUBTYPE 6
+#define LLDP_PORT_LOCAL_SUBTYPE 7
+
+static const struct tok lldp_port_subtype_values[] = {
+ { LLDP_PORT_INTF_ALIAS_SUBTYPE, "Interface alias"},
+ { LLDP_PORT_PORT_COMP_SUBTYPE, "Port component"},
+ { LLDP_PORT_MAC_ADDR_SUBTYPE, "MAC address"},
+ { LLDP_PORT_NETWORK_ADDR_SUBTYPE, "Network Address"},
+ { LLDP_PORT_INTF_NAME_SUBTYPE, "Interface Name"},
+ { LLDP_PORT_AGENT_CIRC_ID_SUBTYPE, "Agent circuit ID"},
+ { LLDP_PORT_LOCAL_SUBTYPE, "Local"},
+ { 0, NULL}
+};
+
+/*
+ * System Capabilities
+ */
+#define LLDP_CAP_OTHER (1 << 0)
+#define LLDP_CAP_REPEATER (1 << 1)
+#define LLDP_CAP_BRIDGE (1 << 2)
+#define LLDP_CAP_WLAN_AP (1 << 3)
+#define LLDP_CAP_ROUTER (1 << 4)
+#define LLDP_CAP_PHONE (1 << 5)
+#define LLDP_CAP_DOCSIS (1 << 6)
+#define LLDP_CAP_STATION_ONLY (1 << 7)
+
+static const struct tok lldp_cap_values[] = {
+ { LLDP_CAP_OTHER, "Other"},
+ { LLDP_CAP_REPEATER, "Repeater"},
+ { LLDP_CAP_BRIDGE, "Bridge"},
+ { LLDP_CAP_WLAN_AP, "WLAN AP"},
+ { LLDP_CAP_ROUTER, "Router"},
+ { LLDP_CAP_PHONE, "Telephone"},
+ { LLDP_CAP_DOCSIS, "Docsis"},
+ { LLDP_CAP_STATION_ONLY, "Station Only"},
+ { 0, NULL}
+};
+
+#define LLDP_PRIVATE_8021_SUBTYPE_PORT_VLAN_ID 1
+#define LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_VLAN_ID 2
+#define LLDP_PRIVATE_8021_SUBTYPE_VLAN_NAME 3
+#define LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_IDENTITY 4
+#define LLDP_PRIVATE_8021_SUBTYPE_LINKAGGR 7
+#define LLDP_PRIVATE_8021_SUBTYPE_CONGESTION_NOTIFICATION 8
+#define LLDP_PRIVATE_8021_SUBTYPE_ETS_CONFIGURATION 9
+#define LLDP_PRIVATE_8021_SUBTYPE_ETS_RECOMMENDATION 10
+#define LLDP_PRIVATE_8021_SUBTYPE_PFC_CONFIGURATION 11
+#define LLDP_PRIVATE_8021_SUBTYPE_APPLICATION_PRIORITY 12
+#define LLDP_PRIVATE_8021_SUBTYPE_EVB 13
+#define LLDP_PRIVATE_8021_SUBTYPE_CDCP 14
+
+static const struct tok lldp_8021_subtype_values[] = {
+ { LLDP_PRIVATE_8021_SUBTYPE_PORT_VLAN_ID, "Port VLAN Id"},
+ { LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_VLAN_ID, "Port and Protocol VLAN ID"},
+ { LLDP_PRIVATE_8021_SUBTYPE_VLAN_NAME, "VLAN name"},
+ { LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_IDENTITY, "Protocol Identity"},
+ { LLDP_PRIVATE_8021_SUBTYPE_LINKAGGR, "Link aggregation"},
+ { LLDP_PRIVATE_8021_SUBTYPE_CONGESTION_NOTIFICATION, "Congestion Notification"},
+ { LLDP_PRIVATE_8021_SUBTYPE_ETS_CONFIGURATION, "ETS Configuration"},
+ { LLDP_PRIVATE_8021_SUBTYPE_ETS_RECOMMENDATION, "ETS Recommendation"},
+ { LLDP_PRIVATE_8021_SUBTYPE_PFC_CONFIGURATION, "Priority Flow Control Configuration"},
+ { LLDP_PRIVATE_8021_SUBTYPE_APPLICATION_PRIORITY, "Application Priority"},
+ { LLDP_PRIVATE_8021_SUBTYPE_EVB, "EVB"},
+ { LLDP_PRIVATE_8021_SUBTYPE_CDCP,"CDCP"},
+ { 0, NULL}
+};
+
+#define LLDP_8021_PORT_PROTOCOL_VLAN_SUPPORT (1 << 1)
+#define LLDP_8021_PORT_PROTOCOL_VLAN_STATUS (1 << 2)
+
+static const struct tok lldp_8021_port_protocol_id_values[] = {
+ { LLDP_8021_PORT_PROTOCOL_VLAN_SUPPORT, "supported"},
+ { LLDP_8021_PORT_PROTOCOL_VLAN_STATUS, "enabled"},
+ { 0, NULL}
+};
+
+#define LLDP_PRIVATE_8023_SUBTYPE_MACPHY 1
+#define LLDP_PRIVATE_8023_SUBTYPE_MDIPOWER 2
+#define LLDP_PRIVATE_8023_SUBTYPE_LINKAGGR 3
+#define LLDP_PRIVATE_8023_SUBTYPE_MTU 4
+
+static const struct tok lldp_8023_subtype_values[] = {
+ { LLDP_PRIVATE_8023_SUBTYPE_MACPHY, "MAC/PHY configuration/status"},
+ { LLDP_PRIVATE_8023_SUBTYPE_MDIPOWER, "Power via MDI"},
+ { LLDP_PRIVATE_8023_SUBTYPE_LINKAGGR, "Link aggregation"},
+ { LLDP_PRIVATE_8023_SUBTYPE_MTU, "Max frame size"},
+ { 0, NULL}
+};
+
+#define LLDP_PRIVATE_TIA_SUBTYPE_CAPABILITIES 1
+#define LLDP_PRIVATE_TIA_SUBTYPE_NETWORK_POLICY 2
+#define LLDP_PRIVATE_TIA_SUBTYPE_LOCAL_ID 3
+#define LLDP_PRIVATE_TIA_SUBTYPE_EXTENDED_POWER_MDI 4
+#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_HARDWARE_REV 5
+#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_FIRMWARE_REV 6
+#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SOFTWARE_REV 7
+#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SERIAL_NUMBER 8
+#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MANUFACTURER_NAME 9
+#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MODEL_NAME 10
+#define LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_ASSET_ID 11
+
+static const struct tok lldp_tia_subtype_values[] = {
+ { LLDP_PRIVATE_TIA_SUBTYPE_CAPABILITIES, "LLDP-MED Capabilities" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_NETWORK_POLICY, "Network policy" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_LOCAL_ID, "Location identification" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_EXTENDED_POWER_MDI, "Extended power-via-MDI" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_HARDWARE_REV, "Inventory - hardware revision" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_FIRMWARE_REV, "Inventory - firmware revision" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SOFTWARE_REV, "Inventory - software revision" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SERIAL_NUMBER, "Inventory - serial number" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MANUFACTURER_NAME, "Inventory - manufacturer name" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MODEL_NAME, "Inventory - model name" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_ASSET_ID, "Inventory - asset ID" },
+ { 0, NULL}
+};
+
+#define LLDP_PRIVATE_TIA_LOCATION_ALTITUDE_METERS 1
+#define LLDP_PRIVATE_TIA_LOCATION_ALTITUDE_FLOORS 2
+
+static const struct tok lldp_tia_location_altitude_type_values[] = {
+ { LLDP_PRIVATE_TIA_LOCATION_ALTITUDE_METERS, "meters"},
+ { LLDP_PRIVATE_TIA_LOCATION_ALTITUDE_FLOORS, "floors"},
+ { 0, NULL}
+};
+
+/* ANSI/TIA-1057 - Annex B */
+#define LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A1 1
+#define LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A2 2
+#define LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A3 3
+#define LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A4 4
+#define LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A5 5
+#define LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A6 6
+
+static const struct tok lldp_tia_location_lci_catype_values[] = {
+ { LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A1, "national subdivisions (state,canton,region,province,prefecture)"},
+ { LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A2, "county, parish, gun, district"},
+ { LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A3, "city, township, shi"},
+ { LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A4, "city division, borough, city district, ward chou"},
+ { LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A5, "neighborhood, block"},
+ { LLDP_PRIVATE_TIA_LOCATION_LCI_CATYPE_A6, "street"},
+ { 0, NULL}
+};
+
+static const struct tok lldp_tia_location_lci_what_values[] = {
+ { 0, "location of DHCP server"},
+ { 1, "location of the network element believed to be closest to the client"},
+ { 2, "location of the client"},
+ { 0, NULL}
+};
+
+/*
+ * From RFC 3636 - dot3MauType
+ */
+#define LLDP_MAU_TYPE_UNKNOWN 0
+#define LLDP_MAU_TYPE_AUI 1
+#define LLDP_MAU_TYPE_10BASE_5 2
+#define LLDP_MAU_TYPE_FOIRL 3
+#define LLDP_MAU_TYPE_10BASE_2 4
+#define LLDP_MAU_TYPE_10BASE_T 5
+#define LLDP_MAU_TYPE_10BASE_FP 6
+#define LLDP_MAU_TYPE_10BASE_FB 7
+#define LLDP_MAU_TYPE_10BASE_FL 8
+#define LLDP_MAU_TYPE_10BROAD36 9
+#define LLDP_MAU_TYPE_10BASE_T_HD 10
+#define LLDP_MAU_TYPE_10BASE_T_FD 11
+#define LLDP_MAU_TYPE_10BASE_FL_HD 12
+#define LLDP_MAU_TYPE_10BASE_FL_FD 13
+#define LLDP_MAU_TYPE_100BASE_T4 14
+#define LLDP_MAU_TYPE_100BASE_TX_HD 15
+#define LLDP_MAU_TYPE_100BASE_TX_FD 16
+#define LLDP_MAU_TYPE_100BASE_FX_HD 17
+#define LLDP_MAU_TYPE_100BASE_FX_FD 18
+#define LLDP_MAU_TYPE_100BASE_T2_HD 19
+#define LLDP_MAU_TYPE_100BASE_T2_FD 20
+#define LLDP_MAU_TYPE_1000BASE_X_HD 21
+#define LLDP_MAU_TYPE_1000BASE_X_FD 22
+#define LLDP_MAU_TYPE_1000BASE_LX_HD 23
+#define LLDP_MAU_TYPE_1000BASE_LX_FD 24
+#define LLDP_MAU_TYPE_1000BASE_SX_HD 25
+#define LLDP_MAU_TYPE_1000BASE_SX_FD 26
+#define LLDP_MAU_TYPE_1000BASE_CX_HD 27
+#define LLDP_MAU_TYPE_1000BASE_CX_FD 28
+#define LLDP_MAU_TYPE_1000BASE_T_HD 29
+#define LLDP_MAU_TYPE_1000BASE_T_FD 30
+#define LLDP_MAU_TYPE_10GBASE_X 31
+#define LLDP_MAU_TYPE_10GBASE_LX4 32
+#define LLDP_MAU_TYPE_10GBASE_R 33
+#define LLDP_MAU_TYPE_10GBASE_ER 34
+#define LLDP_MAU_TYPE_10GBASE_LR 35
+#define LLDP_MAU_TYPE_10GBASE_SR 36
+#define LLDP_MAU_TYPE_10GBASE_W 37
+#define LLDP_MAU_TYPE_10GBASE_EW 38
+#define LLDP_MAU_TYPE_10GBASE_LW 39
+#define LLDP_MAU_TYPE_10GBASE_SW 40
+
+static const struct tok lldp_mau_types_values[] = {
+ { LLDP_MAU_TYPE_UNKNOWN, "Unknown"},
+ { LLDP_MAU_TYPE_AUI, "AUI"},
+ { LLDP_MAU_TYPE_10BASE_5, "10BASE_5"},
+ { LLDP_MAU_TYPE_FOIRL, "FOIRL"},
+ { LLDP_MAU_TYPE_10BASE_2, "10BASE2"},
+ { LLDP_MAU_TYPE_10BASE_T, "10BASET duplex mode unknown"},
+ { LLDP_MAU_TYPE_10BASE_FP, "10BASEFP"},
+ { LLDP_MAU_TYPE_10BASE_FB, "10BASEFB"},
+ { LLDP_MAU_TYPE_10BASE_FL, "10BASEFL duplex mode unknown"},
+ { LLDP_MAU_TYPE_10BROAD36, "10BROAD36"},
+ { LLDP_MAU_TYPE_10BASE_T_HD, "10BASET hdx"},
+ { LLDP_MAU_TYPE_10BASE_T_FD, "10BASET fdx"},
+ { LLDP_MAU_TYPE_10BASE_FL_HD, "10BASEFL hdx"},
+ { LLDP_MAU_TYPE_10BASE_FL_FD, "10BASEFL fdx"},
+ { LLDP_MAU_TYPE_100BASE_T4, "100BASET4"},
+ { LLDP_MAU_TYPE_100BASE_TX_HD, "100BASETX hdx"},
+ { LLDP_MAU_TYPE_100BASE_TX_FD, "100BASETX fdx"},
+ { LLDP_MAU_TYPE_100BASE_FX_HD, "100BASEFX hdx"},
+ { LLDP_MAU_TYPE_100BASE_FX_FD, "100BASEFX fdx"},
+ { LLDP_MAU_TYPE_100BASE_T2_HD, "100BASET2 hdx"},
+ { LLDP_MAU_TYPE_100BASE_T2_FD, "100BASET2 fdx"},
+ { LLDP_MAU_TYPE_1000BASE_X_HD, "1000BASEX hdx"},
+ { LLDP_MAU_TYPE_1000BASE_X_FD, "1000BASEX fdx"},
+ { LLDP_MAU_TYPE_1000BASE_LX_HD, "1000BASELX hdx"},
+ { LLDP_MAU_TYPE_1000BASE_LX_FD, "1000BASELX fdx"},
+ { LLDP_MAU_TYPE_1000BASE_SX_HD, "1000BASESX hdx"},
+ { LLDP_MAU_TYPE_1000BASE_SX_FD, "1000BASESX fdx"},
+ { LLDP_MAU_TYPE_1000BASE_CX_HD, "1000BASECX hdx"},
+ { LLDP_MAU_TYPE_1000BASE_CX_FD, "1000BASECX fdx"},
+ { LLDP_MAU_TYPE_1000BASE_T_HD, "1000BASET hdx"},
+ { LLDP_MAU_TYPE_1000BASE_T_FD, "1000BASET fdx"},
+ { LLDP_MAU_TYPE_10GBASE_X, "10GBASEX"},
+ { LLDP_MAU_TYPE_10GBASE_LX4, "10GBASELX4"},
+ { LLDP_MAU_TYPE_10GBASE_R, "10GBASER"},
+ { LLDP_MAU_TYPE_10GBASE_ER, "10GBASEER"},
+ { LLDP_MAU_TYPE_10GBASE_LR, "10GBASELR"},
+ { LLDP_MAU_TYPE_10GBASE_SR, "10GBASESR"},
+ { LLDP_MAU_TYPE_10GBASE_W, "10GBASEW"},
+ { LLDP_MAU_TYPE_10GBASE_EW, "10GBASEEW"},
+ { LLDP_MAU_TYPE_10GBASE_LW, "10GBASELW"},
+ { LLDP_MAU_TYPE_10GBASE_SW, "10GBASESW"},
+ { 0, NULL}
+};
+
+#define LLDP_8023_AUTONEGOTIATION_SUPPORT (1 << 0)
+#define LLDP_8023_AUTONEGOTIATION_STATUS (1 << 1)
+
+static const struct tok lldp_8023_autonegotiation_values[] = {
+ { LLDP_8023_AUTONEGOTIATION_SUPPORT, "supported"},
+ { LLDP_8023_AUTONEGOTIATION_STATUS, "enabled"},
+ { 0, NULL}
+};
+
+#define LLDP_TIA_CAPABILITY_MED (1 << 0)
+#define LLDP_TIA_CAPABILITY_NETWORK_POLICY (1 << 1)
+#define LLDP_TIA_CAPABILITY_LOCATION_IDENTIFICATION (1 << 2)
+#define LLDP_TIA_CAPABILITY_EXTENDED_POWER_MDI_PSE (1 << 3)
+#define LLDP_TIA_CAPABILITY_EXTENDED_POWER_MDI_PD (1 << 4)
+#define LLDP_TIA_CAPABILITY_INVENTORY (1 << 5)
+
+static const struct tok lldp_tia_capabilities_values[] = {
+ { LLDP_TIA_CAPABILITY_MED, "LLDP-MED capabilities"},
+ { LLDP_TIA_CAPABILITY_NETWORK_POLICY, "network policy"},
+ { LLDP_TIA_CAPABILITY_LOCATION_IDENTIFICATION, "location identification"},
+ { LLDP_TIA_CAPABILITY_EXTENDED_POWER_MDI_PSE, "extended power via MDI-PSE"},
+ { LLDP_TIA_CAPABILITY_EXTENDED_POWER_MDI_PD, "extended power via MDI-PD"},
+ { LLDP_TIA_CAPABILITY_INVENTORY, "Inventory"},
+ { 0, NULL}
+};
+
+#define LLDP_TIA_DEVICE_TYPE_ENDPOINT_CLASS_1 1
+#define LLDP_TIA_DEVICE_TYPE_ENDPOINT_CLASS_2 2
+#define LLDP_TIA_DEVICE_TYPE_ENDPOINT_CLASS_3 3
+#define LLDP_TIA_DEVICE_TYPE_NETWORK_CONNECTIVITY 4
+
+static const struct tok lldp_tia_device_type_values[] = {
+ { LLDP_TIA_DEVICE_TYPE_ENDPOINT_CLASS_1, "endpoint class 1"},
+ { LLDP_TIA_DEVICE_TYPE_ENDPOINT_CLASS_2, "endpoint class 2"},
+ { LLDP_TIA_DEVICE_TYPE_ENDPOINT_CLASS_3, "endpoint class 3"},
+ { LLDP_TIA_DEVICE_TYPE_NETWORK_CONNECTIVITY, "network connectivity"},
+ { 0, NULL}
+};
+
+#define LLDP_TIA_APPLICATION_TYPE_VOICE 1
+#define LLDP_TIA_APPLICATION_TYPE_VOICE_SIGNALING 2
+#define LLDP_TIA_APPLICATION_TYPE_GUEST_VOICE 3
+#define LLDP_TIA_APPLICATION_TYPE_GUEST_VOICE_SIGNALING 4
+#define LLDP_TIA_APPLICATION_TYPE_SOFTPHONE_VOICE 5
+#define LLDP_TIA_APPLICATION_TYPE_VIDEO_CONFERENCING 6
+#define LLDP_TIA_APPLICATION_TYPE_STREAMING_VIDEO 7
+#define LLDP_TIA_APPLICATION_TYPE_VIDEO_SIGNALING 8
+
+static const struct tok lldp_tia_application_type_values[] = {
+ { LLDP_TIA_APPLICATION_TYPE_VOICE, "voice"},
+ { LLDP_TIA_APPLICATION_TYPE_VOICE_SIGNALING, "voice signaling"},
+ { LLDP_TIA_APPLICATION_TYPE_GUEST_VOICE, "guest voice"},
+ { LLDP_TIA_APPLICATION_TYPE_GUEST_VOICE_SIGNALING, "guest voice signaling"},
+ { LLDP_TIA_APPLICATION_TYPE_SOFTPHONE_VOICE, "softphone voice"},
+ { LLDP_TIA_APPLICATION_TYPE_VIDEO_CONFERENCING, "video conferencing"},
+ { LLDP_TIA_APPLICATION_TYPE_STREAMING_VIDEO, "streaming video"},
+ { LLDP_TIA_APPLICATION_TYPE_VIDEO_SIGNALING, "video signaling"},
+ { 0, NULL}
+};
+
+#define LLDP_TIA_NETWORK_POLICY_X_BIT (1 << 5)
+#define LLDP_TIA_NETWORK_POLICY_T_BIT (1 << 6)
+#define LLDP_TIA_NETWORK_POLICY_U_BIT (1 << 7)
+
+static const struct tok lldp_tia_network_policy_bits_values[] = {
+ { LLDP_TIA_NETWORK_POLICY_U_BIT, "Unknown"},
+ { LLDP_TIA_NETWORK_POLICY_T_BIT, "Tagged"},
+ { LLDP_TIA_NETWORK_POLICY_X_BIT, "reserved"},
+ { 0, NULL}
+};
+
+#define LLDP_EXTRACT_NETWORK_POLICY_VLAN(x) (((x)&0x1ffe)>>1)
+#define LLDP_EXTRACT_NETWORK_POLICY_L2_PRIORITY(x) (((x)&0x01ff)>>6)
+#define LLDP_EXTRACT_NETWORK_POLICY_DSCP(x) ((x)&0x003f)
+
+#define LLDP_TIA_LOCATION_DATA_FORMAT_COORDINATE_BASED 1
+#define LLDP_TIA_LOCATION_DATA_FORMAT_CIVIC_ADDRESS 2
+#define LLDP_TIA_LOCATION_DATA_FORMAT_ECS_ELIN 3
+
+static const struct tok lldp_tia_location_data_format_values[] = {
+ { LLDP_TIA_LOCATION_DATA_FORMAT_COORDINATE_BASED, "coordinate-based LCI"},
+ { LLDP_TIA_LOCATION_DATA_FORMAT_CIVIC_ADDRESS, "civic address LCI"},
+ { LLDP_TIA_LOCATION_DATA_FORMAT_ECS_ELIN, "ECS ELIN"},
+ { 0, NULL}
+};
+
+#define LLDP_TIA_LOCATION_DATUM_WGS_84 1
+#define LLDP_TIA_LOCATION_DATUM_NAD_83_NAVD_88 2
+#define LLDP_TIA_LOCATION_DATUM_NAD_83_MLLW 3
+
+static const struct tok lldp_tia_location_datum_type_values[] = {
+ { LLDP_TIA_LOCATION_DATUM_WGS_84, "World Geodesic System 1984"},
+ { LLDP_TIA_LOCATION_DATUM_NAD_83_NAVD_88, "North American Datum 1983 (NAVD88)"},
+ { LLDP_TIA_LOCATION_DATUM_NAD_83_MLLW, "North American Datum 1983 (MLLW)"},
+ { 0, NULL}
+};
+
+#define LLDP_TIA_POWER_SOURCE_PSE 1
+#define LLDP_TIA_POWER_SOURCE_LOCAL 2
+#define LLDP_TIA_POWER_SOURCE_PSE_AND_LOCAL 3
+
+static const struct tok lldp_tia_power_source_values[] = {
+ { LLDP_TIA_POWER_SOURCE_PSE, "PSE - primary power source"},
+ { LLDP_TIA_POWER_SOURCE_LOCAL, "local - backup power source"},
+ { LLDP_TIA_POWER_SOURCE_PSE_AND_LOCAL, "PSE+local - reserved"},
+ { 0, NULL}
+};
+
+#define LLDP_TIA_POWER_PRIORITY_CRITICAL 1
+#define LLDP_TIA_POWER_PRIORITY_HIGH 2
+#define LLDP_TIA_POWER_PRIORITY_LOW 3
+
+static const struct tok lldp_tia_power_priority_values[] = {
+ { LLDP_TIA_POWER_PRIORITY_CRITICAL, "critical"},
+ { LLDP_TIA_POWER_PRIORITY_HIGH, "high"},
+ { LLDP_TIA_POWER_PRIORITY_LOW, "low"},
+ { 0, NULL}
+};
+
+#define LLDP_TIA_POWER_VAL_MAX 1024
+
+static const struct tok lldp_tia_inventory_values[] = {
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_HARDWARE_REV, "Hardware revision" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_FIRMWARE_REV, "Firmware revision" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SOFTWARE_REV, "Software revision" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SERIAL_NUMBER, "Serial number" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MANUFACTURER_NAME, "Manufacturer name" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MODEL_NAME, "Model name" },
+ { LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_ASSET_ID, "Asset ID" },
+ { 0, NULL}
+};
+
+/*
+ * From RFC 3636 - ifMauAutoNegCapAdvertisedBits
+ */
+#define LLDP_MAU_PMD_OTHER (1 << 15)
+#define LLDP_MAU_PMD_10BASE_T (1 << 14)
+#define LLDP_MAU_PMD_10BASE_T_FD (1 << 13)
+#define LLDP_MAU_PMD_100BASE_T4 (1 << 12)
+#define LLDP_MAU_PMD_100BASE_TX (1 << 11)
+#define LLDP_MAU_PMD_100BASE_TX_FD (1 << 10)
+#define LLDP_MAU_PMD_100BASE_T2 (1 << 9)
+#define LLDP_MAU_PMD_100BASE_T2_FD (1 << 8)
+#define LLDP_MAU_PMD_FDXPAUSE (1 << 7)
+#define LLDP_MAU_PMD_FDXAPAUSE (1 << 6)
+#define LLDP_MAU_PMD_FDXSPAUSE (1 << 5)
+#define LLDP_MAU_PMD_FDXBPAUSE (1 << 4)
+#define LLDP_MAU_PMD_1000BASE_X (1 << 3)
+#define LLDP_MAU_PMD_1000BASE_X_FD (1 << 2)
+#define LLDP_MAU_PMD_1000BASE_T (1 << 1)
+#define LLDP_MAU_PMD_1000BASE_T_FD (1 << 0)
+
+static const struct tok lldp_pmd_capability_values[] = {
+ { LLDP_MAU_PMD_10BASE_T, "10BASE-T hdx"},
+ { LLDP_MAU_PMD_10BASE_T_FD, "10BASE-T fdx"},
+ { LLDP_MAU_PMD_100BASE_T4, "100BASE-T4"},
+ { LLDP_MAU_PMD_100BASE_TX, "100BASE-TX hdx"},
+ { LLDP_MAU_PMD_100BASE_TX_FD, "100BASE-TX fdx"},
+ { LLDP_MAU_PMD_100BASE_T2, "100BASE-T2 hdx"},
+ { LLDP_MAU_PMD_100BASE_T2_FD, "100BASE-T2 fdx"},
+ { LLDP_MAU_PMD_FDXPAUSE, "Pause for fdx links"},
+ { LLDP_MAU_PMD_FDXAPAUSE, "Asym PAUSE for fdx"},
+ { LLDP_MAU_PMD_FDXSPAUSE, "Sym PAUSE for fdx"},
+ { LLDP_MAU_PMD_FDXBPAUSE, "Asym and Sym PAUSE for fdx"},
+ { LLDP_MAU_PMD_1000BASE_X, "1000BASE-{X LX SX CX} hdx"},
+ { LLDP_MAU_PMD_1000BASE_X_FD, "1000BASE-{X LX SX CX} fdx"},
+ { LLDP_MAU_PMD_1000BASE_T, "1000BASE-T hdx"},
+ { LLDP_MAU_PMD_1000BASE_T_FD, "1000BASE-T fdx"},
+ { 0, NULL}
+};
+
+#define LLDP_MDI_PORT_CLASS (1 << 0)
+#define LLDP_MDI_POWER_SUPPORT (1 << 1)
+#define LLDP_MDI_POWER_STATE (1 << 2)
+#define LLDP_MDI_PAIR_CONTROL_ABILITY (1 << 3)
+
+static const struct tok lldp_mdi_values[] = {
+ { LLDP_MDI_PORT_CLASS, "PSE"},
+ { LLDP_MDI_POWER_SUPPORT, "supported"},
+ { LLDP_MDI_POWER_STATE, "enabled"},
+ { LLDP_MDI_PAIR_CONTROL_ABILITY, "can be controlled"},
+ { 0, NULL}
+};
+
+#define LLDP_MDI_PSE_PORT_POWER_PAIRS_SIGNAL 1
+#define LLDP_MDI_PSE_PORT_POWER_PAIRS_SPARE 2
+
+static const struct tok lldp_mdi_power_pairs_values[] = {
+ { LLDP_MDI_PSE_PORT_POWER_PAIRS_SIGNAL, "signal"},
+ { LLDP_MDI_PSE_PORT_POWER_PAIRS_SPARE, "spare"},
+ { 0, NULL}
+};
+
+#define LLDP_MDI_POWER_CLASS0 1
+#define LLDP_MDI_POWER_CLASS1 2
+#define LLDP_MDI_POWER_CLASS2 3
+#define LLDP_MDI_POWER_CLASS3 4
+#define LLDP_MDI_POWER_CLASS4 5
+
+static const struct tok lldp_mdi_power_class_values[] = {
+ { LLDP_MDI_POWER_CLASS0, "class0"},
+ { LLDP_MDI_POWER_CLASS1, "class1"},
+ { LLDP_MDI_POWER_CLASS2, "class2"},
+ { LLDP_MDI_POWER_CLASS3, "class3"},
+ { LLDP_MDI_POWER_CLASS4, "class4"},
+ { 0, NULL}
+};
+
+#define LLDP_AGGREGATION_CAPABILITY (1 << 0)
+#define LLDP_AGGREGATION_STATUS (1 << 1)
+
+static const struct tok lldp_aggregation_values[] = {
+ { LLDP_AGGREGATION_CAPABILITY, "supported"},
+ { LLDP_AGGREGATION_STATUS, "enabled"},
+ { 0, NULL}
+};
+
+/*
+ * DCBX protocol subtypes.
+ */
+#define LLDP_DCBX_SUBTYPE_1 1
+#define LLDP_DCBX_SUBTYPE_2 2
+
+static const struct tok lldp_dcbx_subtype_values[] = {
+ { LLDP_DCBX_SUBTYPE_1, "DCB Capability Exchange Protocol Rev 1" },
+ { LLDP_DCBX_SUBTYPE_2, "DCB Capability Exchange Protocol Rev 1.01" },
+ { 0, NULL}
+};
+
+#define LLDP_DCBX_CONTROL_TLV 1
+#define LLDP_DCBX_PRIORITY_GROUPS_TLV 2
+#define LLDP_DCBX_PRIORITY_FLOW_CONTROL_TLV 3
+#define LLDP_DCBX_APPLICATION_TLV 4
+
+/*
+ * Interface numbering subtypes.
+ */
+#define LLDP_INTF_NUMB_IFX_SUBTYPE 2
+#define LLDP_INTF_NUMB_SYSPORT_SUBTYPE 3
+
+static const struct tok lldp_intf_numb_subtype_values[] = {
+ { LLDP_INTF_NUMB_IFX_SUBTYPE, "Interface Index" },
+ { LLDP_INTF_NUMB_SYSPORT_SUBTYPE, "System Port Number" },
+ { 0, NULL}
+};
+
+#define LLDP_INTF_NUM_LEN 5
+
+#define LLDP_EVB_MODE_NOT_SUPPORTED 0
+#define LLDP_EVB_MODE_EVB_BRIDGE 1
+#define LLDP_EVB_MODE_EVB_STATION 2
+#define LLDP_EVB_MODE_RESERVED 3
+
+static const struct tok lldp_evb_mode_values[]={
+ { LLDP_EVB_MODE_NOT_SUPPORTED, "Not Supported"},
+ { LLDP_EVB_MODE_EVB_BRIDGE, "EVB Bridge"},
+ { LLDP_EVB_MODE_EVB_STATION, "EVB Station"},
+ { LLDP_EVB_MODE_RESERVED, "Reserved for future Standardization"},
+ { 0, NULL},
+};
+
+#define NO_OF_BITS 8
+#define LLDP_PRIVATE_8021_SUBTYPE_CONGESTION_NOTIFICATION_LENGTH 6
+#define LLDP_PRIVATE_8021_SUBTYPE_ETS_CONFIGURATION_LENGTH 25
+#define LLDP_PRIVATE_8021_SUBTYPE_ETS_RECOMMENDATION_LENGTH 25
+#define LLDP_PRIVATE_8021_SUBTYPE_PFC_CONFIGURATION_LENGTH 6
+#define LLDP_PRIVATE_8021_SUBTYPE_APPLICATION_PRIORITY_MIN_LENGTH 5
+#define LLDP_PRIVATE_8021_SUBTYPE_EVB_LENGTH 9
+#define LLDP_PRIVATE_8021_SUBTYPE_CDCP_MIN_LENGTH 8
+
+#define LLDP_IANA_SUBTYPE_MUDURL 1
+
+static const struct tok lldp_iana_subtype_values[] = {
+ { LLDP_IANA_SUBTYPE_MUDURL, "MUD-URL" },
+ { 0, NULL }
+};
+
+
+static void
+print_ets_priority_assignment_table(netdissect_options *ndo,
+ const u_char *ptr)
+{
+ ND_PRINT("\n\t Priority Assignment Table");
+ ND_PRINT("\n\t Priority : 0 1 2 3 4 5 6 7");
+ ND_PRINT("\n\t Value : %-3d %-3d %-3d %-3d %-3d %-3d %-3d %-3d",
+ GET_U_1(ptr) >> 4, GET_U_1(ptr) & 0x0f,
+ GET_U_1(ptr + 1) >> 4, GET_U_1(ptr + 1) & 0x0f,
+ GET_U_1(ptr + 2) >> 4, GET_U_1(ptr + 2) & 0x0f,
+ GET_U_1(ptr + 3) >> 4, GET_U_1(ptr + 3) & 0x0f);
+}
+
+static void
+print_tc_bandwidth_table(netdissect_options *ndo,
+ const u_char *ptr)
+{
+ ND_PRINT("\n\t TC Bandwidth Table");
+ ND_PRINT("\n\t TC%% : 0 1 2 3 4 5 6 7");
+ ND_PRINT("\n\t Value : %-3d %-3d %-3d %-3d %-3d %-3d %-3d %-3d",
+ GET_U_1(ptr), GET_U_1(ptr + 1), GET_U_1(ptr + 2),
+ GET_U_1(ptr + 3), GET_U_1(ptr + 4), GET_U_1(ptr + 5),
+ GET_U_1(ptr + 6), GET_U_1(ptr + 7));
+}
+
+static void
+print_tsa_assignment_table(netdissect_options *ndo,
+ const u_char *ptr)
+{
+ ND_PRINT("\n\t TSA Assignment Table");
+ ND_PRINT("\n\t Traffic Class: 0 1 2 3 4 5 6 7");
+ ND_PRINT("\n\t Value : %-3d %-3d %-3d %-3d %-3d %-3d %-3d %-3d",
+ GET_U_1(ptr), GET_U_1(ptr + 1), GET_U_1(ptr + 2),
+ GET_U_1(ptr + 3), GET_U_1(ptr + 4), GET_U_1(ptr + 5),
+ GET_U_1(ptr + 6), GET_U_1(ptr + 7));
+}
+
+/*
+ * Print IEEE 802.1 private extensions. (802.1AB annex E)
+ */
+static int
+lldp_private_8021_print(netdissect_options *ndo,
+ const u_char *tptr, u_int tlv_len)
+{
+ int hexdump = FALSE;
+ u_int subtype;
+ u_int sublen;
+ u_int tval;
+ u_int i;
+
+ if (tlv_len < 4) {
+ return hexdump;
+ }
+ subtype = GET_U_1(tptr + 3);
+
+ ND_PRINT("\n\t %s Subtype (%u)",
+ tok2str(lldp_8021_subtype_values, "unknown", subtype),
+ subtype);
+
+ switch (subtype) {
+ case LLDP_PRIVATE_8021_SUBTYPE_PORT_VLAN_ID:
+ if (tlv_len < 6) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t port vlan id (PVID): %u",
+ GET_BE_U_2(tptr + 4));
+ break;
+ case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_VLAN_ID:
+ if (tlv_len < 7) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t port and protocol vlan id (PPVID): %u, flags [%s] (0x%02x)",
+ GET_BE_U_2(tptr + 5),
+ bittok2str(lldp_8021_port_protocol_id_values, "none", GET_U_1(tptr + 4)),
+ GET_U_1(tptr + 4));
+ break;
+ case LLDP_PRIVATE_8021_SUBTYPE_VLAN_NAME:
+ if (tlv_len < 6) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t vlan id (VID): %u", GET_BE_U_2(tptr + 4));
+ if (tlv_len < 7) {
+ return hexdump;
+ }
+ sublen = GET_U_1(tptr + 6);
+ if (tlv_len < 7+sublen) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t vlan name: ");
+ nd_printjnp(ndo, tptr + 7, sublen);
+ break;
+ case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_IDENTITY:
+ if (tlv_len < 5) {
+ return hexdump;
+ }
+ sublen = GET_U_1(tptr + 4);
+ if (tlv_len < 5+sublen) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t protocol identity: ");
+ nd_printjnp(ndo, tptr + 5, sublen);
+ break;
+
+ case LLDP_PRIVATE_8021_SUBTYPE_LINKAGGR:
+ if (tlv_len < 9) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t aggregation status [%s], aggregation port ID %u",
+ bittok2str(lldp_aggregation_values, "none", GET_U_1((tptr + 4))),
+ GET_BE_U_4(tptr + 5));
+ break;
+
+ case LLDP_PRIVATE_8021_SUBTYPE_CONGESTION_NOTIFICATION:
+ if(tlv_len<LLDP_PRIVATE_8021_SUBTYPE_CONGESTION_NOTIFICATION_LENGTH){
+ return hexdump;
+ }
+ tval=GET_U_1(tptr + 4);
+ ND_PRINT("\n\t Pre-Priority CNPV Indicator");
+ ND_PRINT("\n\t Priority : 0 1 2 3 4 5 6 7");
+ ND_PRINT("\n\t Value : ");
+ for(i=0;i<NO_OF_BITS;i++)
+ ND_PRINT("%-2d ", (tval >> i) & 0x01);
+ tval=GET_U_1(tptr + 5);
+ ND_PRINT("\n\t Pre-Priority Ready Indicator");
+ ND_PRINT("\n\t Priority : 0 1 2 3 4 5 6 7");
+ ND_PRINT("\n\t Value : ");
+ for(i=0;i<NO_OF_BITS;i++)
+ ND_PRINT("%-2d ", (tval >> i) & 0x01);
+ break;
+
+ case LLDP_PRIVATE_8021_SUBTYPE_ETS_CONFIGURATION:
+ if(tlv_len<LLDP_PRIVATE_8021_SUBTYPE_ETS_CONFIGURATION_LENGTH) {
+ return hexdump;
+ }
+ tval=GET_U_1(tptr + 4);
+ ND_PRINT("\n\t Willing:%u, CBS:%u, RES:%u, Max TCs:%u",
+ tval >> 7, (tval >> 6) & 0x02, (tval >> 3) & 0x07, tval & 0x07);
+
+ /*Print Priority Assignment Table*/
+ print_ets_priority_assignment_table(ndo, tptr + 5);
+
+ /*Print TC Bandwidth Table*/
+ print_tc_bandwidth_table(ndo, tptr + 9);
+
+ /* Print TSA Assignment Table */
+ print_tsa_assignment_table(ndo, tptr + 17);
+
+ break;
+
+ case LLDP_PRIVATE_8021_SUBTYPE_ETS_RECOMMENDATION:
+ if(tlv_len<LLDP_PRIVATE_8021_SUBTYPE_ETS_RECOMMENDATION_LENGTH) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t RES: %u", GET_U_1(tptr + 4));
+ /*Print Priority Assignment Table */
+ print_ets_priority_assignment_table(ndo, tptr + 5);
+ /*Print TC Bandwidth Table */
+ print_tc_bandwidth_table(ndo, tptr + 9);
+ /* Print TSA Assignment Table */
+ print_tsa_assignment_table(ndo, tptr + 17);
+ break;
+
+ case LLDP_PRIVATE_8021_SUBTYPE_PFC_CONFIGURATION:
+ if(tlv_len<LLDP_PRIVATE_8021_SUBTYPE_PFC_CONFIGURATION_LENGTH) {
+ return hexdump;
+ }
+ tval=GET_U_1(tptr + 4);
+ ND_PRINT("\n\t Willing: %u, MBC: %u, RES: %u, PFC cap:%u ",
+ tval >> 7, (tval >> 6) & 0x01, (tval >> 4) & 0x03, (tval & 0x0f));
+ ND_PRINT("\n\t PFC Enable");
+ tval=GET_U_1(tptr + 5);
+ ND_PRINT("\n\t Priority : 0 1 2 3 4 5 6 7");
+ ND_PRINT("\n\t Value : ");
+ for(i=0;i<NO_OF_BITS;i++)
+ ND_PRINT("%-2d ", (tval >> i) & 0x01);
+ break;
+
+ case LLDP_PRIVATE_8021_SUBTYPE_APPLICATION_PRIORITY:
+ if(tlv_len<LLDP_PRIVATE_8021_SUBTYPE_APPLICATION_PRIORITY_MIN_LENGTH) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t RES: %u", GET_U_1(tptr + 4));
+ if(tlv_len<=LLDP_PRIVATE_8021_SUBTYPE_APPLICATION_PRIORITY_MIN_LENGTH){
+ return hexdump;
+ }
+ /* Length of Application Priority Table */
+ sublen=tlv_len-5;
+ if(sublen%3!=0){
+ return hexdump;
+ }
+ i=0;
+ ND_PRINT("\n\t Application Priority Table");
+ while(i<sublen) {
+ tval=GET_U_1(tptr + i + 5);
+ ND_PRINT("\n\t Priority: %u, RES: %u, Sel: %u, Protocol ID: %u",
+ tval >> 5, (tval >> 3) & 0x03, (tval & 0x07),
+ GET_BE_U_2(tptr + i + 6));
+ i=i+3;
+ }
+ break;
+ case LLDP_PRIVATE_8021_SUBTYPE_EVB:
+ if(tlv_len<LLDP_PRIVATE_8021_SUBTYPE_EVB_LENGTH){
+ return hexdump;
+ }
+ ND_PRINT("\n\t EVB Bridge Status");
+ tval=GET_U_1(tptr + 4);
+ ND_PRINT("\n\t RES: %u, BGID: %u, RRCAP: %u, RRCTR: %u",
+ tval >> 3, (tval >> 2) & 0x01, (tval >> 1) & 0x01, tval & 0x01);
+ ND_PRINT("\n\t EVB Station Status");
+ tval=GET_U_1(tptr + 5);
+ ND_PRINT("\n\t RES: %u, SGID: %u, RRREQ: %u,RRSTAT: %u",
+ tval >> 4, (tval >> 3) & 0x01, (tval >> 2) & 0x01, tval & 0x03);
+ tval=GET_U_1(tptr + 6);
+ ND_PRINT("\n\t R: %u, RTE: %u, ",tval >> 5, tval & 0x1f);
+ tval=GET_U_1(tptr + 7);
+ ND_PRINT("EVB Mode: %s [%u]",
+ tok2str(lldp_evb_mode_values, "unknown", tval >> 6), tval >> 6);
+ ND_PRINT("\n\t ROL: %u, RWD: %u, ", (tval >> 5) & 0x01, tval & 0x1f);
+ tval=GET_U_1(tptr + 8);
+ ND_PRINT("RES: %u, ROL: %u, RKA: %u", tval >> 6, (tval >> 5) & 0x01, tval & 0x1f);
+ break;
+
+ case LLDP_PRIVATE_8021_SUBTYPE_CDCP:
+ if(tlv_len<LLDP_PRIVATE_8021_SUBTYPE_CDCP_MIN_LENGTH){
+ return hexdump;
+ }
+ tval=GET_U_1(tptr + 4);
+ ND_PRINT("\n\t Role: %u, RES: %u, Scomp: %u ",
+ tval >> 7, (tval >> 4) & 0x07, (tval >> 3) & 0x01);
+ ND_PRINT("ChnCap: %u", GET_BE_U_2(tptr + 6) & 0x0fff);
+ sublen=tlv_len-8;
+ if(sublen%3!=0) {
+ return hexdump;
+ }
+ i=0;
+ while(i<sublen) {
+ tval=GET_BE_U_3(tptr + i + 8);
+ ND_PRINT("\n\t SCID: %u, SVID: %u",
+ tval >> 12, tval & 0x000fff);
+ i=i+3;
+ }
+ break;
+
+ default:
+ hexdump = TRUE;
+ break;
+ }
+
+ return hexdump;
+}
+
+/*
+ * Print IEEE 802.3 private extensions. (802.3bc)
+ */
+static int
+lldp_private_8023_print(netdissect_options *ndo,
+ const u_char *tptr, u_int tlv_len)
+{
+ int hexdump = FALSE;
+ u_int subtype;
+
+ if (tlv_len < 4) {
+ return hexdump;
+ }
+ subtype = GET_U_1(tptr + 3);
+
+ ND_PRINT("\n\t %s Subtype (%u)",
+ tok2str(lldp_8023_subtype_values, "unknown", subtype),
+ subtype);
+
+ switch (subtype) {
+ case LLDP_PRIVATE_8023_SUBTYPE_MACPHY:
+ if (tlv_len < 9) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t autonegotiation [%s] (0x%02x)",
+ bittok2str(lldp_8023_autonegotiation_values, "none", GET_U_1(tptr + 4)),
+ GET_U_1(tptr + 4));
+ ND_PRINT("\n\t PMD autoneg capability [%s] (0x%04x)",
+ bittok2str(lldp_pmd_capability_values,"unknown", GET_BE_U_2(tptr + 5)),
+ GET_BE_U_2(tptr + 5));
+ ND_PRINT("\n\t MAU type %s (0x%04x)",
+ tok2str(lldp_mau_types_values, "unknown", GET_BE_U_2(tptr + 7)),
+ GET_BE_U_2(tptr + 7));
+ break;
+
+ case LLDP_PRIVATE_8023_SUBTYPE_MDIPOWER:
+ if (tlv_len < 7) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t MDI power support [%s], power pair %s, power class %s",
+ bittok2str(lldp_mdi_values, "none", GET_U_1((tptr + 4))),
+ tok2str(lldp_mdi_power_pairs_values, "unknown", GET_U_1((tptr + 5))),
+ tok2str(lldp_mdi_power_class_values, "unknown", GET_U_1((tptr + 6))));
+ break;
+
+ case LLDP_PRIVATE_8023_SUBTYPE_LINKAGGR:
+ if (tlv_len < 9) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t aggregation status [%s], aggregation port ID %u",
+ bittok2str(lldp_aggregation_values, "none", GET_U_1((tptr + 4))),
+ GET_BE_U_4(tptr + 5));
+ break;
+
+ case LLDP_PRIVATE_8023_SUBTYPE_MTU:
+ if (tlv_len < 6) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t MTU size %u", GET_BE_U_2(tptr + 4));
+ break;
+
+ default:
+ hexdump = TRUE;
+ break;
+ }
+
+ return hexdump;
+}
+
+/*
+ * Extract 34bits of latitude/longitude coordinates.
+ */
+static uint64_t
+lldp_extract_latlon(netdissect_options *ndo, const u_char *tptr)
+{
+ uint64_t latlon;
+
+ latlon = GET_U_1(tptr) & 0x3;
+ latlon = (latlon << 32) | GET_BE_U_4(tptr + 1);
+
+ return latlon;
+}
+
+/* objects defined in IANA subtype 00 00 5e
+ * (right now there is only one)
+ */
+
+
+static int
+lldp_private_iana_print(netdissect_options *ndo,
+ const u_char *tptr, u_int tlv_len)
+{
+ int hexdump = FALSE;
+ u_int subtype;
+
+ if (tlv_len < 8) {
+ return hexdump;
+ }
+ subtype = GET_U_1(tptr + 3);
+
+ ND_PRINT("\n\t %s Subtype (%u)",
+ tok2str(lldp_iana_subtype_values, "unknown", subtype),
+ subtype);
+
+ switch (subtype) {
+ case LLDP_IANA_SUBTYPE_MUDURL:
+ ND_PRINT("\n\t MUD-URL=");
+ (void)nd_printn(ndo, tptr+4, tlv_len-4, NULL);
+ break;
+ default:
+ hexdump=TRUE;
+ }
+
+ return hexdump;
+}
+
+
+
+/*
+ * Print private TIA extensions.
+ */
+static int
+lldp_private_tia_print(netdissect_options *ndo,
+ const u_char *tptr, u_int tlv_len)
+{
+ int hexdump = FALSE;
+ u_int subtype;
+ uint8_t location_format;
+ uint16_t power_val;
+ u_int lci_len;
+ uint8_t ca_type, ca_len;
+
+ if (tlv_len < 4) {
+ return hexdump;
+ }
+ subtype = GET_U_1(tptr + 3);
+
+ ND_PRINT("\n\t %s Subtype (%u)",
+ tok2str(lldp_tia_subtype_values, "unknown", subtype),
+ subtype);
+
+ switch (subtype) {
+ case LLDP_PRIVATE_TIA_SUBTYPE_CAPABILITIES:
+ if (tlv_len < 7) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t Media capabilities [%s] (0x%04x)",
+ bittok2str(lldp_tia_capabilities_values, "none",
+ GET_BE_U_2(tptr + 4)), GET_BE_U_2(tptr + 4));
+ ND_PRINT("\n\t Device type [%s] (0x%02x)",
+ tok2str(lldp_tia_device_type_values, "unknown", GET_U_1(tptr + 6)),
+ GET_U_1(tptr + 6));
+ break;
+
+ case LLDP_PRIVATE_TIA_SUBTYPE_NETWORK_POLICY:
+ if (tlv_len < 8) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t Application type [%s] (0x%02x)",
+ tok2str(lldp_tia_application_type_values, "none", GET_U_1(tptr + 4)),
+ GET_U_1(tptr + 4));
+ ND_PRINT(", Flags [%s]", bittok2str(
+ lldp_tia_network_policy_bits_values, "none", GET_U_1((tptr + 5))));
+ ND_PRINT("\n\t Vlan id %u",
+ LLDP_EXTRACT_NETWORK_POLICY_VLAN(GET_BE_U_2(tptr + 5)));
+ ND_PRINT(", L2 priority %u",
+ LLDP_EXTRACT_NETWORK_POLICY_L2_PRIORITY(GET_BE_U_2(tptr + 6)));
+ ND_PRINT(", DSCP value %u",
+ LLDP_EXTRACT_NETWORK_POLICY_DSCP(GET_BE_U_2(tptr + 6)));
+ break;
+
+ case LLDP_PRIVATE_TIA_SUBTYPE_LOCAL_ID:
+ if (tlv_len < 5) {
+ return hexdump;
+ }
+ location_format = GET_U_1(tptr + 4);
+ ND_PRINT("\n\t Location data format %s (0x%02x)",
+ tok2str(lldp_tia_location_data_format_values, "unknown", location_format),
+ location_format);
+
+ switch (location_format) {
+ case LLDP_TIA_LOCATION_DATA_FORMAT_COORDINATE_BASED:
+ if (tlv_len < 21) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t Latitude resolution %u, latitude value %" PRIu64,
+ (GET_U_1(tptr + 5) >> 2),
+ lldp_extract_latlon(ndo, tptr + 5));
+ ND_PRINT("\n\t Longitude resolution %u, longitude value %" PRIu64,
+ (GET_U_1(tptr + 10) >> 2),
+ lldp_extract_latlon(ndo, tptr + 10));
+ ND_PRINT("\n\t Altitude type %s (%u)",
+ tok2str(lldp_tia_location_altitude_type_values, "unknown",GET_U_1(tptr + 15) >> 4),
+ (GET_U_1(tptr + 15) >> 4));
+ ND_PRINT("\n\t Altitude resolution %u, altitude value 0x%x",
+ (GET_BE_U_2(tptr + 15)>>6)&0x3f,
+ (GET_BE_U_4(tptr + 16) & 0x3fffffff));
+ ND_PRINT("\n\t Datum %s (0x%02x)",
+ tok2str(lldp_tia_location_datum_type_values, "unknown", GET_U_1(tptr + 20)),
+ GET_U_1(tptr + 20));
+ break;
+
+ case LLDP_TIA_LOCATION_DATA_FORMAT_CIVIC_ADDRESS:
+ if (tlv_len < 6) {
+ return hexdump;
+ }
+ lci_len = GET_U_1(tptr + 5);
+ if (lci_len < 3) {
+ return hexdump;
+ }
+ if (tlv_len < 7+lci_len) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t LCI length %u, LCI what %s (0x%02x), Country-code ",
+ lci_len,
+ tok2str(lldp_tia_location_lci_what_values, "unknown", GET_U_1(tptr + 6)),
+ GET_U_1(tptr + 6));
+
+ /* Country code */
+ nd_printjnp(ndo, tptr + 7, 2);
+
+ lci_len = lci_len-3;
+ tptr = tptr + 9;
+
+ /* Decode each civic address element */
+ while (lci_len > 0) {
+ if (lci_len < 2) {
+ return hexdump;
+ }
+ ca_type = GET_U_1(tptr);
+ ca_len = GET_U_1(tptr + 1);
+
+ tptr += 2;
+ lci_len -= 2;
+
+ ND_PRINT("\n\t CA type \'%s\' (%u), length %u: ",
+ tok2str(lldp_tia_location_lci_catype_values, "unknown", ca_type),
+ ca_type, ca_len);
+
+ /* basic sanity check */
+ if ( ca_type == 0 || ca_len == 0) {
+ return hexdump;
+ }
+ if (lci_len < ca_len) {
+ return hexdump;
+ }
+
+ nd_printjnp(ndo, tptr, ca_len);
+ tptr += ca_len;
+ lci_len -= ca_len;
+ }
+ break;
+
+ case LLDP_TIA_LOCATION_DATA_FORMAT_ECS_ELIN:
+ ND_PRINT("\n\t ECS ELIN id ");
+ nd_printjnp(ndo, tptr + 5, tlv_len - 5);
+ break;
+
+ default:
+ ND_PRINT("\n\t Location ID ");
+ print_unknown_data(ndo, tptr + 5, "\n\t ", tlv_len - 5);
+ }
+ break;
+
+ case LLDP_PRIVATE_TIA_SUBTYPE_EXTENDED_POWER_MDI:
+ if (tlv_len < 7) {
+ return hexdump;
+ }
+ ND_PRINT("\n\t Power type [%s]",
+ (GET_U_1(tptr + 4) & 0xC0 >> 6) ? "PD device" : "PSE device");
+ ND_PRINT(", Power source [%s]",
+ tok2str(lldp_tia_power_source_values, "none", (GET_U_1((tptr + 4)) & 0x30) >> 4));
+ ND_PRINT("\n\t Power priority [%s] (0x%02x)",
+ tok2str(lldp_tia_power_priority_values, "none", GET_U_1(tptr + 4) & 0x0f),
+ GET_U_1(tptr + 4) & 0x0f);
+ power_val = GET_BE_U_2(tptr + 5);
+ if (power_val < LLDP_TIA_POWER_VAL_MAX) {
+ ND_PRINT(", Power %.1f Watts", ((float)power_val) / 10);
+ } else {
+ ND_PRINT(", Power %u (Reserved)", power_val);
+ }
+ break;
+
+ case LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_HARDWARE_REV:
+ case LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_FIRMWARE_REV:
+ case LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SOFTWARE_REV:
+ case LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_SERIAL_NUMBER:
+ case LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MANUFACTURER_NAME:
+ case LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_MODEL_NAME:
+ case LLDP_PRIVATE_TIA_SUBTYPE_INVENTORY_ASSET_ID:
+ ND_PRINT("\n\t %s ",
+ tok2str(lldp_tia_inventory_values, "unknown", subtype));
+ nd_printjnp(ndo, tptr + 4, tlv_len - 4);
+ break;
+
+ default:
+ hexdump = TRUE;
+ break;
+ }
+
+ return hexdump;
+}
+
+/*
+ * Print DCBX Protocol fields (V 1.01).
+ */
+static int
+lldp_private_dcbx_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len)
+{
+ int hexdump = FALSE;
+ u_int subtype;
+ uint16_t tval;
+ uint16_t tlv;
+ uint32_t i, pgval, uval;
+ u_int tlen, tlv_type;
+ uint16_t tlv_len;
+ const u_char *tptr, *mptr;
+
+ if (len < 4) {
+ return hexdump;
+ }
+ subtype = GET_U_1(pptr + 3);
+
+ ND_PRINT("\n\t %s Subtype (%u)",
+ tok2str(lldp_dcbx_subtype_values, "unknown", subtype),
+ subtype);
+
+ /* by passing old version */
+ if (subtype == LLDP_DCBX_SUBTYPE_1)
+ return TRUE;
+
+ tptr = pptr + 4;
+ tlen = len - 4;
+
+ while (tlen >= sizeof(tlv)) {
+
+ ND_TCHECK_LEN(tptr, sizeof(tlv));
+
+ tlv = GET_BE_U_2(tptr);
+
+ tlv_type = LLDP_EXTRACT_TYPE(tlv);
+ tlv_len = LLDP_EXTRACT_LEN(tlv);
+ hexdump = FALSE;
+
+ tlen -= sizeof(tlv);
+ tptr += sizeof(tlv);
+
+ /* loop check */
+ if (!tlv_type || !tlv_len) {
+ break;
+ }
+
+ ND_TCHECK_LEN(tptr, tlv_len);
+ if (tlen < tlv_len) {
+ goto trunc;
+ }
+
+ /* decode every tlv */
+ switch (tlv_type) {
+ case LLDP_DCBX_CONTROL_TLV:
+ if (tlv_len < 10) {
+ goto trunc;
+ }
+ ND_PRINT("\n\t Control - Protocol Control (type 0x%x, length %u)",
+ LLDP_DCBX_CONTROL_TLV, tlv_len);
+ ND_PRINT("\n\t Oper_Version: %u", GET_U_1(tptr));
+ ND_PRINT("\n\t Max_Version: %u", GET_U_1(tptr + 1));
+ ND_PRINT("\n\t Sequence Number: %u", GET_BE_U_4(tptr + 2));
+ ND_PRINT("\n\t Acknowledgement Number: %u",
+ GET_BE_U_4(tptr + 6));
+ break;
+ case LLDP_DCBX_PRIORITY_GROUPS_TLV:
+ if (tlv_len < 17) {
+ goto trunc;
+ }
+ ND_PRINT("\n\t Feature - Priority Group (type 0x%x, length %u)",
+ LLDP_DCBX_PRIORITY_GROUPS_TLV, tlv_len);
+ ND_PRINT("\n\t Oper_Version: %u", GET_U_1(tptr));
+ ND_PRINT("\n\t Max_Version: %u", GET_U_1(tptr + 1));
+ ND_PRINT("\n\t Info block(0x%02X): ", GET_U_1(tptr + 2));
+ tval = GET_U_1(tptr + 2);
+ ND_PRINT("Enable bit: %u, Willing bit: %u, Error Bit: %u",
+ (tval & 0x80) ? 1 : 0, (tval & 0x40) ? 1 : 0,
+ (tval & 0x20) ? 1 : 0);
+ ND_PRINT("\n\t SubType: %u", GET_U_1(tptr + 3));
+ ND_PRINT("\n\t Priority Allocation");
+
+ /*
+ * Array of 8 4-bit priority group ID values; we fetch all
+ * 32 bits and extract each nibble.
+ */
+ pgval = GET_BE_U_4(tptr + 4);
+ for (i = 0; i <= 7; i++) {
+ ND_PRINT("\n\t PgId_%u: %u",
+ i, (pgval >> (28 - 4 * i)) & 0xF);
+ }
+ ND_PRINT("\n\t Priority Group Allocation");
+ for (i = 0; i <= 7; i++)
+ ND_PRINT("\n\t Pg percentage[%u]: %u", i,
+ GET_U_1(tptr + 8 + i));
+ ND_PRINT("\n\t NumTCsSupported: %u", GET_U_1(tptr + 8 + 8));
+ break;
+ case LLDP_DCBX_PRIORITY_FLOW_CONTROL_TLV:
+ if (tlv_len < 6) {
+ goto trunc;
+ }
+ ND_PRINT("\n\t Feature - Priority Flow Control");
+ ND_PRINT(" (type 0x%x, length %u)",
+ LLDP_DCBX_PRIORITY_FLOW_CONTROL_TLV, tlv_len);
+ ND_PRINT("\n\t Oper_Version: %u", GET_U_1(tptr));
+ ND_PRINT("\n\t Max_Version: %u", GET_U_1(tptr + 1));
+ ND_PRINT("\n\t Info block(0x%02X): ", GET_U_1(tptr + 2));
+ tval = GET_U_1(tptr + 2);
+ ND_PRINT("Enable bit: %u, Willing bit: %u, Error Bit: %u",
+ (tval & 0x80) ? 1 : 0, (tval & 0x40) ? 1 : 0,
+ (tval & 0x20) ? 1 : 0);
+ ND_PRINT("\n\t SubType: %u", GET_U_1(tptr + 3));
+ tval = GET_U_1(tptr + 4);
+ ND_PRINT("\n\t PFC Config (0x%02X)", GET_U_1(tptr + 4));
+ for (i = 0; i <= 7; i++)
+ ND_PRINT("\n\t Priority Bit %u: %s",
+ i, (tval & (1 << i)) ? "Enabled" : "Disabled");
+ ND_PRINT("\n\t NumTCPFCSupported: %u", GET_U_1(tptr + 5));
+ break;
+ case LLDP_DCBX_APPLICATION_TLV:
+ if (tlv_len < 4) {
+ goto trunc;
+ }
+ ND_PRINT("\n\t Feature - Application (type 0x%x, length %u)",
+ LLDP_DCBX_APPLICATION_TLV, tlv_len);
+ ND_PRINT("\n\t Oper_Version: %u", GET_U_1(tptr));
+ ND_PRINT("\n\t Max_Version: %u", GET_U_1(tptr + 1));
+ ND_PRINT("\n\t Info block(0x%02X): ", GET_U_1(tptr + 2));
+ tval = GET_U_1(tptr + 2);
+ ND_PRINT("Enable bit: %u, Willing bit: %u, Error Bit: %u",
+ (tval & 0x80) ? 1 : 0, (tval & 0x40) ? 1 : 0,
+ (tval & 0x20) ? 1 : 0);
+ ND_PRINT("\n\t SubType: %u", GET_U_1(tptr + 3));
+ tval = tlv_len - 4;
+ mptr = tptr + 4;
+ while (tval >= 6) {
+ ND_PRINT("\n\t Application Value");
+ ND_PRINT("\n\t Application Protocol ID: 0x%04x",
+ GET_BE_U_2(mptr));
+ uval = GET_BE_U_3(mptr + 2);
+ ND_PRINT("\n\t SF (0x%x) Application Protocol ID is %s",
+ (uval >> 22),
+ (uval >> 22) ? "Socket Number" : "L2 EtherType");
+ ND_PRINT("\n\t OUI: 0x%06x", uval & 0x3fffff);
+ ND_PRINT("\n\t User Priority Map: 0x%02x",
+ GET_U_1(mptr + 5));
+ tval = tval - 6;
+ mptr = mptr + 6;
+ }
+ break;
+ default:
+ hexdump = TRUE;
+ break;
+ }
+
+ /* do we also want to see a hex dump ? */
+ if (ndo->ndo_vflag > 1 || (ndo->ndo_vflag && hexdump)) {
+ print_unknown_data(ndo, tptr, "\n\t ", tlv_len);
+ }
+
+ tlen -= tlv_len;
+ tptr += tlv_len;
+ }
+
+ trunc:
+ return hexdump;
+}
+
+static char *
+lldp_network_addr_print(netdissect_options *ndo, const u_char *tptr, u_int len)
+{
+ uint8_t af;
+ static char buf[BUFSIZE];
+ const char * (*pfunc)(netdissect_options *, const u_char *);
+
+ if (len < 1)
+ return NULL;
+ len--;
+ af = GET_U_1(tptr);
+ switch (af) {
+ case AFNUM_INET:
+ if (len < sizeof(nd_ipv4))
+ return NULL;
+ pfunc = ipaddr_string;
+ break;
+ case AFNUM_INET6:
+ if (len < sizeof(nd_ipv6))
+ return NULL;
+ pfunc = ip6addr_string;
+ break;
+ case AFNUM_802:
+ if (len < MAC_ADDR_LEN)
+ return NULL;
+ pfunc = etheraddr_string;
+ break;
+ default:
+ pfunc = NULL;
+ break;
+ }
+
+ if (!pfunc) {
+ snprintf(buf, sizeof(buf), "AFI %s (%u), no AF printer !",
+ tok2str(af_values, "Unknown", af), af);
+ } else {
+ snprintf(buf, sizeof(buf), "AFI %s (%u): %s",
+ tok2str(af_values, "Unknown", af), af, (*pfunc)(ndo, tptr+1));
+ }
+
+ return buf;
+}
+
+static int
+lldp_mgmt_addr_tlv_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len)
+{
+ uint8_t mgmt_addr_len, intf_num_subtype, oid_len;
+ const u_char *tptr;
+ u_int tlen;
+ char *mgmt_addr;
+
+ tlen = len;
+ tptr = pptr;
+
+ if (tlen < 1) {
+ return 0;
+ }
+ mgmt_addr_len = GET_U_1(tptr);
+ tptr++;
+ tlen--;
+
+ if (tlen < mgmt_addr_len) {
+ return 0;
+ }
+
+ mgmt_addr = lldp_network_addr_print(ndo, tptr, mgmt_addr_len);
+ if (mgmt_addr == NULL) {
+ return 0;
+ }
+ ND_PRINT("\n\t Management Address length %u, %s",
+ mgmt_addr_len, mgmt_addr);
+ tptr += mgmt_addr_len;
+ tlen -= mgmt_addr_len;
+
+ if (tlen < LLDP_INTF_NUM_LEN) {
+ return 0;
+ }
+
+ intf_num_subtype = GET_U_1(tptr);
+ ND_PRINT("\n\t %s Interface Numbering (%u): %u",
+ tok2str(lldp_intf_numb_subtype_values, "Unknown", intf_num_subtype),
+ intf_num_subtype,
+ GET_BE_U_4(tptr + 1));
+
+ tptr += LLDP_INTF_NUM_LEN;
+ tlen -= LLDP_INTF_NUM_LEN;
+
+ /*
+ * The OID is optional.
+ */
+ if (tlen) {
+ oid_len = GET_U_1(tptr);
+
+ if (tlen < 1U + oid_len) {
+ return 0;
+ }
+ if (oid_len) {
+ ND_PRINT("\n\t OID length %u", oid_len);
+ nd_printjnp(ndo, tptr + 1, oid_len);
+ }
+ }
+
+ return 1;
+}
+
+void
+lldp_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len)
+{
+ uint8_t subtype;
+ uint16_t tlv, cap, ena_cap;
+ u_int oui, tlen, hexdump, tlv_type, tlv_len;
+ const u_char *tptr;
+ char *network_addr;
+
+ ndo->ndo_protocol = "lldp";
+ tptr = pptr;
+ tlen = len;
+
+ ND_PRINT("LLDP, length %u", len);
+
+ while (tlen >= sizeof(tlv)) {
+
+ ND_TCHECK_LEN(tptr, sizeof(tlv));
+
+ tlv = GET_BE_U_2(tptr);
+
+ tlv_type = LLDP_EXTRACT_TYPE(tlv);
+ tlv_len = LLDP_EXTRACT_LEN(tlv);
+ hexdump = FALSE;
+
+ tlen -= sizeof(tlv);
+ tptr += sizeof(tlv);
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT("\n\t%s TLV (%u), length %u",
+ tok2str(lldp_tlv_values, "Unknown", tlv_type),
+ tlv_type, tlv_len);
+ }
+
+ /* infinite loop check */
+ if (!tlv_type || !tlv_len) {
+ break;
+ }
+
+ ND_TCHECK_LEN(tptr, tlv_len);
+ if (tlen < tlv_len) {
+ goto trunc;
+ }
+
+ switch (tlv_type) {
+
+ case LLDP_CHASSIS_ID_TLV:
+ if (ndo->ndo_vflag) {
+ if (tlv_len < 2) {
+ goto trunc;
+ }
+ subtype = GET_U_1(tptr);
+ ND_PRINT("\n\t Subtype %s (%u): ",
+ tok2str(lldp_chassis_subtype_values, "Unknown", subtype),
+ subtype);
+
+ switch (subtype) {
+ case LLDP_CHASSIS_MAC_ADDR_SUBTYPE:
+ if (tlv_len < 1+6) {
+ goto trunc;
+ }
+ ND_PRINT("%s", GET_ETHERADDR_STRING(tptr + 1));
+ break;
+
+ case LLDP_CHASSIS_INTF_NAME_SUBTYPE: /* fall through */
+ case LLDP_CHASSIS_LOCAL_SUBTYPE:
+ case LLDP_CHASSIS_CHASSIS_COMP_SUBTYPE:
+ case LLDP_CHASSIS_INTF_ALIAS_SUBTYPE:
+ case LLDP_CHASSIS_PORT_COMP_SUBTYPE:
+ nd_printjnp(ndo, tptr + 1, tlv_len - 1);
+ break;
+
+ case LLDP_CHASSIS_NETWORK_ADDR_SUBTYPE:
+ network_addr = lldp_network_addr_print(ndo, tptr+1, tlv_len-1);
+ if (network_addr == NULL) {
+ goto trunc;
+ }
+ ND_PRINT("%s", network_addr);
+ break;
+
+ default:
+ hexdump = TRUE;
+ break;
+ }
+ }
+ break;
+
+ case LLDP_PORT_ID_TLV:
+ if (ndo->ndo_vflag) {
+ if (tlv_len < 2) {
+ goto trunc;
+ }
+ subtype = GET_U_1(tptr);
+ ND_PRINT("\n\t Subtype %s (%u): ",
+ tok2str(lldp_port_subtype_values, "Unknown", subtype),
+ subtype);
+
+ switch (subtype) {
+ case LLDP_PORT_MAC_ADDR_SUBTYPE:
+ if (tlv_len < 1+6) {
+ goto trunc;
+ }
+ ND_PRINT("%s", GET_ETHERADDR_STRING(tptr + 1));
+ break;
+
+ case LLDP_PORT_INTF_NAME_SUBTYPE: /* fall through */
+ case LLDP_PORT_LOCAL_SUBTYPE:
+ case LLDP_PORT_AGENT_CIRC_ID_SUBTYPE:
+ case LLDP_PORT_INTF_ALIAS_SUBTYPE:
+ case LLDP_PORT_PORT_COMP_SUBTYPE:
+ nd_printjnp(ndo, tptr + 1, tlv_len - 1);
+ break;
+
+ case LLDP_PORT_NETWORK_ADDR_SUBTYPE:
+ network_addr = lldp_network_addr_print(ndo, tptr+1, tlv_len-1);
+ if (network_addr == NULL) {
+ goto trunc;
+ }
+ ND_PRINT("%s", network_addr);
+ break;
+
+ default:
+ hexdump = TRUE;
+ break;
+ }
+ }
+ break;
+
+ case LLDP_TTL_TLV:
+ if (ndo->ndo_vflag) {
+ if (tlv_len < 2) {
+ goto trunc;
+ }
+ ND_PRINT(": TTL %us", GET_BE_U_2(tptr));
+ }
+ break;
+
+ case LLDP_PORT_DESCR_TLV:
+ if (ndo->ndo_vflag) {
+ ND_PRINT(": ");
+ nd_printjnp(ndo, tptr, tlv_len);
+ }
+ break;
+
+ case LLDP_SYSTEM_NAME_TLV:
+ /*
+ * The system name is also print in non-verbose mode
+ * similar to the CDP printer.
+ */
+ ND_PRINT(": ");
+ nd_printjnp(ndo, tptr, tlv_len);
+ break;
+
+ case LLDP_SYSTEM_DESCR_TLV:
+ if (ndo->ndo_vflag) {
+ ND_PRINT("\n\t ");
+ nd_printjnp(ndo, tptr, tlv_len);
+ }
+ break;
+
+ case LLDP_SYSTEM_CAP_TLV:
+ if (ndo->ndo_vflag) {
+ /*
+ * XXX - IEEE Std 802.1AB-2009 says the first octet
+ * if a chassis ID subtype, with the system
+ * capabilities and enabled capabilities following
+ * it.
+ */
+ if (tlv_len < 4) {
+ goto trunc;
+ }
+ cap = GET_BE_U_2(tptr);
+ ena_cap = GET_BE_U_2(tptr + 2);
+ ND_PRINT("\n\t System Capabilities [%s] (0x%04x)",
+ bittok2str(lldp_cap_values, "none", cap), cap);
+ ND_PRINT("\n\t Enabled Capabilities [%s] (0x%04x)",
+ bittok2str(lldp_cap_values, "none", ena_cap), ena_cap);
+ }
+ break;
+
+ case LLDP_MGMT_ADDR_TLV:
+ if (ndo->ndo_vflag) {
+ if (!lldp_mgmt_addr_tlv_print(ndo, tptr, tlv_len)) {
+ goto trunc;
+ }
+ }
+ break;
+
+ case LLDP_PRIVATE_TLV:
+ if (ndo->ndo_vflag) {
+ if (tlv_len < 3) {
+ goto trunc;
+ }
+ oui = GET_BE_U_3(tptr);
+ ND_PRINT(": OUI %s (0x%06x)", tok2str(oui_values, "Unknown", oui), oui);
+
+ switch (oui) {
+ case OUI_IEEE_8021_PRIVATE:
+ hexdump = lldp_private_8021_print(ndo, tptr, tlv_len);
+ break;
+ case OUI_IEEE_8023_PRIVATE:
+ hexdump = lldp_private_8023_print(ndo, tptr, tlv_len);
+ break;
+ case OUI_IANA:
+ hexdump = lldp_private_iana_print(ndo, tptr, tlv_len);
+ break;
+ case OUI_TIA:
+ hexdump = lldp_private_tia_print(ndo, tptr, tlv_len);
+ break;
+ case OUI_DCBX:
+ hexdump = lldp_private_dcbx_print(ndo, tptr, tlv_len);
+ break;
+ default:
+ hexdump = TRUE;
+ break;
+ }
+ }
+ break;
+
+ default:
+ hexdump = TRUE;
+ break;
+ }
+
+ /* do we also want to see a hex dump ? */
+ if (ndo->ndo_vflag > 1 || (ndo->ndo_vflag && hexdump)) {
+ print_unknown_data(ndo, tptr, "\n\t ", tlv_len);
+ }
+
+ tlen -= tlv_len;
+ tptr += tlv_len;
+ }
+ return;
+ trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-lmp.c b/print-lmp.c
new file mode 100644
index 0000000..925f3b0
--- /dev/null
+++ b/print-lmp.c
@@ -0,0 +1,1137 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ * Support for LMP service discovery extensions (defined by OIF UNI 1.0)
+ * added by Manu Pathak (mapathak@cisco.com), May 2005
+ */
+
+/* \summary: Link Management Protocol (LMP) printer */
+
+/* specification: RFC 4204 */
+/* OIF UNI 1.0: https://web.archive.org/web/20160401194747/http://www.oiforum.com/public/documents/OIF-UNI-01.0.pdf */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "gmpls.h"
+
+
+/*
+ * LMP common header
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Vers | (Reserved) | Flags | Msg Type |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | LMP Length | (Reserved) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+struct lmp_common_header {
+ nd_uint16_t version_res;
+ nd_uint8_t flags;
+ nd_uint8_t msg_type;
+ nd_uint16_t length;
+ nd_byte reserved[2];
+};
+
+#define LMP_VERSION 1
+#define LMP_EXTRACT_VERSION(x) (((x)&0xf000)>>12)
+
+static const struct tok lmp_header_flag_values[] = {
+ { 0x01, "Control Channel Down"},
+ { 0x02, "LMP restart"},
+ { 0, NULL}
+};
+
+static const struct tok lmp_obj_te_link_flag_values[] = {
+ { 0x01, "Fault Management Supported"},
+ { 0x02, "Link Verification Supported"},
+ { 0, NULL}
+};
+
+static const struct tok lmp_obj_data_link_flag_values[] = {
+ { 0x01, "Data Link Port"},
+ { 0x02, "Allocated for user traffic"},
+ { 0x04, "Failed link"},
+ { 0, NULL}
+};
+
+static const struct tok lmp_obj_channel_status_values[] = {
+ { 1, "Signal Okay"},
+ { 2, "Signal Degraded"},
+ { 3, "Signal Fail"},
+ { 0, NULL}
+};
+
+static const struct tok lmp_obj_begin_verify_flag_values[] = {
+ { 0x0001, "Verify all links"},
+ { 0x0002, "Data link type"},
+ { 0, NULL}
+};
+
+static const struct tok lmp_obj_begin_verify_error_values[] = {
+ { 0x01, "Link Verification Procedure Not supported"},
+ { 0x02, "Unwilling to verify"},
+ { 0x04, "Unsupported verification transport mechanism"},
+ { 0x08, "Link-Id configuration error"},
+ { 0x10, "Unknown object c-type"},
+ { 0, NULL}
+};
+
+static const struct tok lmp_obj_link_summary_error_values[] = {
+ { 0x01, "Unacceptable non-negotiable LINK-SUMMARY parameters"},
+ { 0x02, "Renegotiate LINK-SUMMARY parameters"},
+ { 0x04, "Invalid TE-LINK Object"},
+ { 0x08, "Invalid DATA-LINK Object"},
+ { 0x10, "Unknown TE-LINK Object c-type"},
+ { 0x20, "Unknown DATA-LINK Object c-type"},
+ { 0, NULL}
+};
+
+/* Service Config Supported Protocols Flags */
+static const struct tok lmp_obj_service_config_sp_flag_values[] = {
+ { 0x01, "RSVP Supported"},
+ { 0x02, "LDP Supported"},
+ { 0, NULL}
+};
+
+/* Service Config Client Port Service Attribute Transparency Flags */
+static const struct tok lmp_obj_service_config_cpsa_tp_flag_values[] = {
+ { 0x01, "Path/VC Overhead Transparency Supported"},
+ { 0x02, "Line/MS Overhead Transparency Supported"},
+ { 0x04, "Section/RS Overhead Transparency Supported"},
+ { 0, NULL}
+};
+
+/* Service Config Client Port Service Attribute Contiguous Concatenation Types Flags */
+static const struct tok lmp_obj_service_config_cpsa_cct_flag_values[] = {
+ { 0x01, "Contiguous Concatenation Types Supported"},
+ { 0, NULL}
+};
+
+/* Service Config Network Service Attributes Transparency Flags */
+static const struct tok lmp_obj_service_config_nsa_transparency_flag_values[] = {
+ { 0x01, "Standard SOH/RSOH Transparency Supported"},
+ { 0x02, "Standard LOH/MSOH Transparency Supported"},
+ { 0, NULL}
+};
+
+/* Service Config Network Service Attributes TCM Monitoring Flags */
+static const struct tok lmp_obj_service_config_nsa_tcm_flag_values[] = {
+ { 0x01, "Transparent Tandem Connection Monitoring Supported"},
+ { 0, NULL}
+};
+
+/* Network Service Attributes Network Diversity Flags */
+static const struct tok lmp_obj_service_config_nsa_network_diversity_flag_values[] = {
+ { 0x01, "Node Diversity Supported"},
+ { 0x02, "Link Diversity Supported"},
+ { 0x04, "SRLG Diversity Supported"},
+ { 0, NULL}
+};
+
+#define LMP_MSGTYPE_CONFIG 1
+#define LMP_MSGTYPE_CONFIG_ACK 2
+#define LMP_MSGTYPE_CONFIG_NACK 3
+#define LMP_MSGTYPE_HELLO 4
+#define LMP_MSGTYPE_VERIFY_BEGIN 5
+#define LMP_MSGTYPE_VERIFY_BEGIN_ACK 6
+#define LMP_MSGTYPE_VERIFY_BEGIN_NACK 7
+#define LMP_MSGTYPE_VERIFY_END 8
+#define LMP_MSGTYPE_VERIFY_END_ACK 9
+#define LMP_MSGTYPE_TEST 10
+#define LMP_MSGTYPE_TEST_STATUS_SUCCESS 11
+#define LMP_MSGTYPE_TEST_STATUS_FAILURE 12
+#define LMP_MSGTYPE_TEST_STATUS_ACK 13
+#define LMP_MSGTYPE_LINK_SUMMARY 14
+#define LMP_MSGTYPE_LINK_SUMMARY_ACK 15
+#define LMP_MSGTYPE_LINK_SUMMARY_NACK 16
+#define LMP_MSGTYPE_CHANNEL_STATUS 17
+#define LMP_MSGTYPE_CHANNEL_STATUS_ACK 18
+#define LMP_MSGTYPE_CHANNEL_STATUS_REQ 19
+#define LMP_MSGTYPE_CHANNEL_STATUS_RESP 20
+/* LMP Service Discovery message types defined by UNI 1.0 */
+#define LMP_MSGTYPE_SERVICE_CONFIG 50
+#define LMP_MSGTYPE_SERVICE_CONFIG_ACK 51
+#define LMP_MSGTYPE_SERVICE_CONFIG_NACK 52
+
+static const struct tok lmp_msg_type_values[] = {
+ { LMP_MSGTYPE_CONFIG, "Config"},
+ { LMP_MSGTYPE_CONFIG_ACK, "Config ACK"},
+ { LMP_MSGTYPE_CONFIG_NACK, "Config NACK"},
+ { LMP_MSGTYPE_HELLO, "Hello"},
+ { LMP_MSGTYPE_VERIFY_BEGIN, "Begin Verify"},
+ { LMP_MSGTYPE_VERIFY_BEGIN_ACK, "Begin Verify ACK"},
+ { LMP_MSGTYPE_VERIFY_BEGIN_NACK, "Begin Verify NACK"},
+ { LMP_MSGTYPE_VERIFY_END, "End Verify"},
+ { LMP_MSGTYPE_VERIFY_END_ACK, "End Verify ACK"},
+ { LMP_MSGTYPE_TEST, "Test"},
+ { LMP_MSGTYPE_TEST_STATUS_SUCCESS, "Test Status Success"},
+ { LMP_MSGTYPE_TEST_STATUS_FAILURE, "Test Status Failure"},
+ { LMP_MSGTYPE_TEST_STATUS_ACK, "Test Status ACK"},
+ { LMP_MSGTYPE_LINK_SUMMARY, "Link Summary"},
+ { LMP_MSGTYPE_LINK_SUMMARY_ACK, "Link Summary ACK"},
+ { LMP_MSGTYPE_LINK_SUMMARY_NACK, "Link Summary NACK"},
+ { LMP_MSGTYPE_CHANNEL_STATUS, "Channel Status"},
+ { LMP_MSGTYPE_CHANNEL_STATUS_ACK, "Channel Status ACK"},
+ { LMP_MSGTYPE_CHANNEL_STATUS_REQ, "Channel Status Request"},
+ { LMP_MSGTYPE_CHANNEL_STATUS_RESP, "Channel Status Response"},
+ { LMP_MSGTYPE_SERVICE_CONFIG, "Service Config"},
+ { LMP_MSGTYPE_SERVICE_CONFIG_ACK, "Service Config ACK"},
+ { LMP_MSGTYPE_SERVICE_CONFIG_NACK, "Service Config NACK"},
+ { 0, NULL}
+};
+
+/*
+ * LMP object header
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |N| C-Type | Class | Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * // (object contents) //
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+struct lmp_object_header {
+ nd_uint8_t ctype;
+ nd_uint8_t class_num;
+ nd_uint16_t length;
+};
+
+#define LMP_OBJ_CC_ID 1
+#define LMP_OBJ_NODE_ID 2
+#define LMP_OBJ_LINK_ID 3
+#define LMP_OBJ_INTERFACE_ID 4
+#define LMP_OBJ_MESSAGE_ID 5
+#define LMP_OBJ_CONFIG 6
+#define LMP_OBJ_HELLO 7
+#define LMP_OBJ_VERIFY_BEGIN 8
+#define LMP_OBJ_VERIFY_BEGIN_ACK 9
+#define LMP_OBJ_VERIFY_ID 10
+#define LMP_OBJ_TE_LINK 11
+#define LMP_OBJ_DATA_LINK 12
+#define LMP_OBJ_CHANNEL_STATUS 13
+#define LMP_OBJ_CHANNEL_STATUS_REQ 14
+#define LMP_OBJ_ERROR_CODE 20
+
+#define LMP_OBJ_SERVICE_CONFIG 51 /* defined in UNI 1.0 */
+
+static const struct tok lmp_obj_values[] = {
+ { LMP_OBJ_CC_ID, "Control Channel ID" },
+ { LMP_OBJ_NODE_ID, "Node ID" },
+ { LMP_OBJ_LINK_ID, "Link ID" },
+ { LMP_OBJ_INTERFACE_ID, "Interface ID" },
+ { LMP_OBJ_MESSAGE_ID, "Message ID" },
+ { LMP_OBJ_CONFIG, "Configuration" },
+ { LMP_OBJ_HELLO, "Hello" },
+ { LMP_OBJ_VERIFY_BEGIN, "Verify Begin" },
+ { LMP_OBJ_VERIFY_BEGIN_ACK, "Verify Begin ACK" },
+ { LMP_OBJ_VERIFY_ID, "Verify ID" },
+ { LMP_OBJ_TE_LINK, "TE Link" },
+ { LMP_OBJ_DATA_LINK, "Data Link" },
+ { LMP_OBJ_CHANNEL_STATUS, "Channel Status" },
+ { LMP_OBJ_CHANNEL_STATUS_REQ, "Channel Status Request" },
+ { LMP_OBJ_ERROR_CODE, "Error Code" },
+ { LMP_OBJ_SERVICE_CONFIG, "Service Config" },
+
+ { 0, NULL}
+};
+
+#define INT_SWITCHING_TYPE_SUBOBJ 1
+#define WAVELENGTH_SUBOBJ 2
+
+static const struct tok lmp_data_link_subobj[] = {
+ { INT_SWITCHING_TYPE_SUBOBJ, "Interface Switching Type" },
+ { WAVELENGTH_SUBOBJ , "Wavelength" },
+ { 0, NULL}
+};
+
+#define LMP_CTYPE_IPV4 1
+#define LMP_CTYPE_IPV6 2
+
+#define LMP_CTYPE_LOC 1
+#define LMP_CTYPE_RMT 2
+#define LMP_CTYPE_UNMD 3
+
+#define LMP_CTYPE_IPV4_LOC 1
+#define LMP_CTYPE_IPV4_RMT 2
+#define LMP_CTYPE_IPV6_LOC 3
+#define LMP_CTYPE_IPV6_RMT 4
+#define LMP_CTYPE_UNMD_LOC 5
+#define LMP_CTYPE_UNMD_RMT 6
+
+#define LMP_CTYPE_1 1
+#define LMP_CTYPE_2 2
+
+#define LMP_CTYPE_HELLO_CONFIG 1
+#define LMP_CTYPE_HELLO 1
+
+#define LMP_CTYPE_BEGIN_VERIFY_ERROR 1
+#define LMP_CTYPE_LINK_SUMMARY_ERROR 2
+
+/* C-Types for Service Config Object */
+#define LMP_CTYPE_SERVICE_CONFIG_SP 1
+#define LMP_CTYPE_SERVICE_CONFIG_CPSA 2
+#define LMP_CTYPE_SERVICE_CONFIG_TRANSPARENCY_TCM 3
+#define LMP_CTYPE_SERVICE_CONFIG_NETWORK_DIVERSITY 4
+
+/*
+ * Different link types allowed in the Client Port Service Attributes
+ * subobject defined for LMP Service Discovery in the UNI 1.0 spec
+ */
+#define LMP_SD_SERVICE_CONFIG_CPSA_LINK_TYPE_SDH 5 /* UNI 1.0 Sec 9.4.2 */
+#define LMP_SD_SERVICE_CONFIG_CPSA_LINK_TYPE_SONET 6 /* UNI 1.0 Sec 9.4.2 */
+
+/*
+ * the ctypes are not globally unique so for
+ * translating it to strings we build a table based
+ * on objects offsetted by the ctype
+ */
+
+static const struct tok lmp_ctype_values[] = {
+ { 256*LMP_OBJ_CC_ID+LMP_CTYPE_LOC, "Local" },
+ { 256*LMP_OBJ_CC_ID+LMP_CTYPE_RMT, "Remote" },
+ { 256*LMP_OBJ_NODE_ID+LMP_CTYPE_LOC, "Local" },
+ { 256*LMP_OBJ_NODE_ID+LMP_CTYPE_RMT, "Remote" },
+ { 256*LMP_OBJ_LINK_ID+LMP_CTYPE_IPV4_LOC, "IPv4 Local" },
+ { 256*LMP_OBJ_LINK_ID+LMP_CTYPE_IPV4_RMT, "IPv4 Remote" },
+ { 256*LMP_OBJ_LINK_ID+LMP_CTYPE_IPV6_LOC, "IPv6 Local" },
+ { 256*LMP_OBJ_LINK_ID+LMP_CTYPE_IPV6_RMT, "IPv6 Remote" },
+ { 256*LMP_OBJ_LINK_ID+LMP_CTYPE_UNMD_LOC, "Unnumbered Local" },
+ { 256*LMP_OBJ_LINK_ID+LMP_CTYPE_UNMD_RMT, "Unnumbered Remote" },
+ { 256*LMP_OBJ_INTERFACE_ID+LMP_CTYPE_IPV4_LOC, "IPv4 Local" },
+ { 256*LMP_OBJ_INTERFACE_ID+LMP_CTYPE_IPV4_RMT, "IPv4 Remote" },
+ { 256*LMP_OBJ_INTERFACE_ID+LMP_CTYPE_IPV6_LOC, "IPv6 Local" },
+ { 256*LMP_OBJ_INTERFACE_ID+LMP_CTYPE_IPV6_RMT, "IPv6 Remote" },
+ { 256*LMP_OBJ_INTERFACE_ID+LMP_CTYPE_UNMD_LOC, "Unnumbered Local" },
+ { 256*LMP_OBJ_INTERFACE_ID+LMP_CTYPE_UNMD_RMT, "Unnumbered Remote" },
+ { 256*LMP_OBJ_MESSAGE_ID+LMP_CTYPE_1, "1" },
+ { 256*LMP_OBJ_MESSAGE_ID+LMP_CTYPE_2, "2" },
+ { 256*LMP_OBJ_CONFIG+LMP_CTYPE_1, "1" },
+ { 256*LMP_OBJ_HELLO+LMP_CTYPE_1, "1" },
+ { 256*LMP_OBJ_VERIFY_BEGIN+LMP_CTYPE_1, "1" },
+ { 256*LMP_OBJ_VERIFY_BEGIN_ACK+LMP_CTYPE_1, "1" },
+ { 256*LMP_OBJ_VERIFY_ID+LMP_CTYPE_1, "1" },
+ { 256*LMP_OBJ_TE_LINK+LMP_CTYPE_IPV4, "IPv4" },
+ { 256*LMP_OBJ_TE_LINK+LMP_CTYPE_IPV6, "IPv6" },
+ { 256*LMP_OBJ_TE_LINK+LMP_CTYPE_UNMD, "Unnumbered" },
+ { 256*LMP_OBJ_DATA_LINK+LMP_CTYPE_IPV4, "IPv4" },
+ { 256*LMP_OBJ_DATA_LINK+LMP_CTYPE_IPV6, "IPv6" },
+ { 256*LMP_OBJ_DATA_LINK+LMP_CTYPE_UNMD, "Unnumbered" },
+ { 256*LMP_OBJ_CHANNEL_STATUS+LMP_CTYPE_IPV4, "IPv4" },
+ { 256*LMP_OBJ_CHANNEL_STATUS+LMP_CTYPE_IPV6, "IPv6" },
+ { 256*LMP_OBJ_CHANNEL_STATUS+LMP_CTYPE_UNMD, "Unnumbered" },
+ { 256*LMP_OBJ_CHANNEL_STATUS_REQ+LMP_CTYPE_IPV4, "IPv4" },
+ { 256*LMP_OBJ_CHANNEL_STATUS_REQ+LMP_CTYPE_IPV6, "IPv6" },
+ { 256*LMP_OBJ_CHANNEL_STATUS_REQ+LMP_CTYPE_UNMD, "Unnumbered" },
+ { 256*LMP_OBJ_ERROR_CODE+LMP_CTYPE_1, "1" },
+ { 256*LMP_OBJ_ERROR_CODE+LMP_CTYPE_2, "2" },
+ { 256*LMP_OBJ_SERVICE_CONFIG+LMP_CTYPE_SERVICE_CONFIG_SP, "1" },
+ { 256*LMP_OBJ_SERVICE_CONFIG+LMP_CTYPE_SERVICE_CONFIG_CPSA, "2" },
+ { 256*LMP_OBJ_SERVICE_CONFIG+LMP_CTYPE_SERVICE_CONFIG_TRANSPARENCY_TCM, "3" },
+ { 256*LMP_OBJ_SERVICE_CONFIG+LMP_CTYPE_SERVICE_CONFIG_NETWORK_DIVERSITY, "4" },
+ { 0, NULL}
+};
+
+static int
+lmp_print_data_link_subobjs(netdissect_options *ndo, const u_char *obj_tptr,
+ int total_subobj_len, int offset)
+{
+ int hexdump = FALSE;
+ int subobj_type, subobj_len;
+
+ union { /* int to float conversion buffer */
+ float f;
+ uint32_t i;
+ } bw;
+
+ while (total_subobj_len > 0 && hexdump == FALSE ) {
+ subobj_type = GET_U_1(obj_tptr + offset);
+ subobj_len = GET_U_1(obj_tptr + offset + 1);
+ ND_PRINT("\n\t Subobject, Type: %s (%u), Length: %u",
+ tok2str(lmp_data_link_subobj,
+ "Unknown",
+ subobj_type),
+ subobj_type,
+ subobj_len);
+ if (subobj_len < 4) {
+ ND_PRINT(" (too short)");
+ break;
+ }
+ if ((subobj_len % 4) != 0) {
+ ND_PRINT(" (not a multiple of 4)");
+ break;
+ }
+ if (total_subobj_len < subobj_len) {
+ ND_PRINT(" (goes past the end of the object)");
+ break;
+ }
+ switch(subobj_type) {
+ case INT_SWITCHING_TYPE_SUBOBJ:
+ ND_PRINT("\n\t Switching Type: %s (%u)",
+ tok2str(gmpls_switch_cap_values,
+ "Unknown",
+ GET_U_1(obj_tptr + offset + 2)),
+ GET_U_1(obj_tptr + offset + 2));
+ ND_PRINT("\n\t Encoding Type: %s (%u)",
+ tok2str(gmpls_encoding_values,
+ "Unknown",
+ GET_U_1(obj_tptr + offset + 3)),
+ GET_U_1(obj_tptr + offset + 3));
+ bw.i = GET_BE_U_4(obj_tptr + offset + 4);
+ ND_PRINT("\n\t Min Reservable Bandwidth: %.3f Mbps",
+ bw.f*8/1000000);
+ bw.i = GET_BE_U_4(obj_tptr + offset + 8);
+ ND_PRINT("\n\t Max Reservable Bandwidth: %.3f Mbps",
+ bw.f*8/1000000);
+ break;
+ case WAVELENGTH_SUBOBJ:
+ ND_PRINT("\n\t Wavelength: %u",
+ GET_BE_U_4(obj_tptr + offset + 4));
+ break;
+ default:
+ /* Any Unknown Subobject ==> Exit loop */
+ hexdump=TRUE;
+ break;
+ }
+ total_subobj_len-=subobj_len;
+ offset+=subobj_len;
+ }
+ return (hexdump);
+}
+
+void
+lmp_print(netdissect_options *ndo,
+ const u_char *pptr, u_int length)
+{
+ const struct lmp_common_header *lmp_com_header;
+ const u_char *tptr,*obj_tptr;
+ u_int version_res, tlen, lmp_obj_len, lmp_obj_ctype, obj_tlen;
+ int hexdump;
+ u_int offset;
+ u_int link_type;
+
+ union { /* int to float conversion buffer */
+ float f;
+ uint32_t i;
+ } bw;
+
+ ndo->ndo_protocol = "lmp";
+ tptr=pptr;
+ lmp_com_header = (const struct lmp_common_header *)pptr;
+ ND_TCHECK_SIZE(lmp_com_header);
+
+ version_res = GET_BE_U_2(lmp_com_header->version_res);
+
+ /*
+ * Sanity checking of the header.
+ */
+ if (LMP_EXTRACT_VERSION(version_res) != LMP_VERSION) {
+ ND_PRINT("LMP version %u packet not supported",
+ LMP_EXTRACT_VERSION(version_res));
+ return;
+ }
+
+ /* in non-verbose mode just lets print the basic Message Type*/
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT("LMPv%u %s Message, length: %u",
+ LMP_EXTRACT_VERSION(version_res),
+ tok2str(lmp_msg_type_values, "unknown (%u)",GET_U_1(lmp_com_header->msg_type)),
+ length);
+ return;
+ }
+
+ /* ok they seem to want to know everything - lets fully decode it */
+
+ tlen=GET_BE_U_2(lmp_com_header->length);
+
+ ND_PRINT("\n\tLMPv%u, msg-type: %s, Flags: [%s], length: %u",
+ LMP_EXTRACT_VERSION(version_res),
+ tok2str(lmp_msg_type_values, "unknown, type: %u",GET_U_1(lmp_com_header->msg_type)),
+ bittok2str(lmp_header_flag_values,"none",GET_U_1(lmp_com_header->flags)),
+ tlen);
+ if (tlen < sizeof(struct lmp_common_header)) {
+ ND_PRINT(" (too short)");
+ return;
+ }
+ if (tlen > length) {
+ ND_PRINT(" (too long)");
+ tlen = length;
+ }
+
+ tptr+=sizeof(struct lmp_common_header);
+ tlen-=sizeof(struct lmp_common_header);
+
+ while(tlen>0) {
+ const struct lmp_object_header *lmp_obj_header =
+ (const struct lmp_object_header *)tptr;
+ lmp_obj_len=GET_BE_U_2(lmp_obj_header->length);
+ lmp_obj_ctype=GET_U_1(lmp_obj_header->ctype)&0x7f;
+
+ ND_PRINT("\n\t %s Object (%u), Class-Type: %s (%u) Flags: [%snegotiable], length: %u",
+ tok2str(lmp_obj_values,
+ "Unknown",
+ GET_U_1(lmp_obj_header->class_num)),
+ GET_U_1(lmp_obj_header->class_num),
+ tok2str(lmp_ctype_values,
+ "Unknown",
+ (GET_U_1(lmp_obj_header->class_num)<<8)+lmp_obj_ctype),
+ lmp_obj_ctype,
+ GET_U_1(lmp_obj_header->ctype)&0x80 ? "" : "non-",
+ lmp_obj_len);
+
+ if (lmp_obj_len < 4) {
+ ND_PRINT(" (too short)");
+ return;
+ }
+ if ((lmp_obj_len % 4) != 0) {
+ ND_PRINT(" (not a multiple of 4)");
+ return;
+ }
+
+ obj_tptr=tptr+sizeof(struct lmp_object_header);
+ obj_tlen=lmp_obj_len-sizeof(struct lmp_object_header);
+
+ /* did we capture enough for fully decoding the object ? */
+ ND_TCHECK_LEN(tptr, lmp_obj_len);
+ hexdump=FALSE;
+
+ switch(GET_U_1(lmp_obj_header->class_num)) {
+
+ case LMP_OBJ_CC_ID:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_LOC:
+ case LMP_CTYPE_RMT:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Control Channel ID: %u (0x%08x)",
+ GET_BE_U_4(obj_tptr),
+ GET_BE_U_4(obj_tptr));
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_LINK_ID:
+ case LMP_OBJ_INTERFACE_ID:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_IPV4_LOC:
+ case LMP_CTYPE_IPV4_RMT:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t IPv4 Link ID: %s (0x%08x)",
+ GET_IPADDR_STRING(obj_tptr),
+ GET_BE_U_4(obj_tptr));
+ break;
+ case LMP_CTYPE_IPV6_LOC:
+ case LMP_CTYPE_IPV6_RMT:
+ if (obj_tlen != 16) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t IPv6 Link ID: %s (0x%08x)",
+ GET_IP6ADDR_STRING(obj_tptr),
+ GET_BE_U_4(obj_tptr));
+ break;
+ case LMP_CTYPE_UNMD_LOC:
+ case LMP_CTYPE_UNMD_RMT:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Link ID: %u (0x%08x)",
+ GET_BE_U_4(obj_tptr),
+ GET_BE_U_4(obj_tptr));
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_MESSAGE_ID:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_1:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Message ID: %u (0x%08x)",
+ GET_BE_U_4(obj_tptr),
+ GET_BE_U_4(obj_tptr));
+ break;
+ case LMP_CTYPE_2:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Message ID Ack: %u (0x%08x)",
+ GET_BE_U_4(obj_tptr),
+ GET_BE_U_4(obj_tptr));
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_NODE_ID:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_LOC:
+ case LMP_CTYPE_RMT:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Node ID: %s (0x%08x)",
+ GET_IPADDR_STRING(obj_tptr),
+ GET_BE_U_4(obj_tptr));
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_CONFIG:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_HELLO_CONFIG:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Hello Interval: %u\n\t Hello Dead Interval: %u",
+ GET_BE_U_2(obj_tptr),
+ GET_BE_U_2(obj_tptr + 2));
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_HELLO:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_HELLO:
+ if (obj_tlen != 8) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Tx Seq: %u, Rx Seq: %u",
+ GET_BE_U_4(obj_tptr),
+ GET_BE_U_4(obj_tptr + 4));
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_TE_LINK:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_IPV4:
+ if (obj_tlen != 12) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Flags: [%s]",
+ bittok2str(lmp_obj_te_link_flag_values,
+ "none",
+ GET_U_1(obj_tptr)));
+
+ ND_PRINT("\n\t Local Link-ID: %s (0x%08x)"
+ "\n\t Remote Link-ID: %s (0x%08x)",
+ GET_IPADDR_STRING(obj_tptr+4),
+ GET_BE_U_4(obj_tptr + 4),
+ GET_IPADDR_STRING(obj_tptr+8),
+ GET_BE_U_4(obj_tptr + 8));
+ break;
+
+ case LMP_CTYPE_IPV6:
+ if (obj_tlen != 36) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Flags: [%s]",
+ bittok2str(lmp_obj_te_link_flag_values,
+ "none",
+ GET_U_1(obj_tptr)));
+
+ ND_PRINT("\n\t Local Link-ID: %s (0x%08x)"
+ "\n\t Remote Link-ID: %s (0x%08x)",
+ GET_IP6ADDR_STRING(obj_tptr+4),
+ GET_BE_U_4(obj_tptr + 4),
+ GET_IP6ADDR_STRING(obj_tptr+20),
+ GET_BE_U_4(obj_tptr + 20));
+ break;
+
+ case LMP_CTYPE_UNMD:
+ if (obj_tlen != 12) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Flags: [%s]",
+ bittok2str(lmp_obj_te_link_flag_values,
+ "none",
+ GET_U_1(obj_tptr)));
+
+ ND_PRINT("\n\t Local Link-ID: %u (0x%08x)"
+ "\n\t Remote Link-ID: %u (0x%08x)",
+ GET_BE_U_4(obj_tptr + 4),
+ GET_BE_U_4(obj_tptr + 4),
+ GET_BE_U_4(obj_tptr + 8),
+ GET_BE_U_4(obj_tptr + 8));
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_DATA_LINK:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_IPV4:
+ if (obj_tlen < 12) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Flags: [%s]",
+ bittok2str(lmp_obj_data_link_flag_values,
+ "none",
+ GET_U_1(obj_tptr)));
+ ND_PRINT("\n\t Local Interface ID: %s (0x%08x)"
+ "\n\t Remote Interface ID: %s (0x%08x)",
+ GET_IPADDR_STRING(obj_tptr+4),
+ GET_BE_U_4(obj_tptr + 4),
+ GET_IPADDR_STRING(obj_tptr+8),
+ GET_BE_U_4(obj_tptr + 8));
+
+ if (lmp_print_data_link_subobjs(ndo, obj_tptr, obj_tlen - 12, 12))
+ hexdump=TRUE;
+ break;
+
+ case LMP_CTYPE_IPV6:
+ if (obj_tlen < 36) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Flags: [%s]",
+ bittok2str(lmp_obj_data_link_flag_values,
+ "none",
+ GET_U_1(obj_tptr)));
+ ND_PRINT("\n\t Local Interface ID: %s (0x%08x)"
+ "\n\t Remote Interface ID: %s (0x%08x)",
+ GET_IP6ADDR_STRING(obj_tptr+4),
+ GET_BE_U_4(obj_tptr + 4),
+ GET_IP6ADDR_STRING(obj_tptr+20),
+ GET_BE_U_4(obj_tptr + 20));
+
+ if (lmp_print_data_link_subobjs(ndo, obj_tptr, obj_tlen - 36, 36))
+ hexdump=TRUE;
+ break;
+
+ case LMP_CTYPE_UNMD:
+ if (obj_tlen < 12) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Flags: [%s]",
+ bittok2str(lmp_obj_data_link_flag_values,
+ "none",
+ GET_U_1(obj_tptr)));
+ ND_PRINT("\n\t Local Interface ID: %u (0x%08x)"
+ "\n\t Remote Interface ID: %u (0x%08x)",
+ GET_BE_U_4(obj_tptr + 4),
+ GET_BE_U_4(obj_tptr + 4),
+ GET_BE_U_4(obj_tptr + 8),
+ GET_BE_U_4(obj_tptr + 8));
+
+ if (lmp_print_data_link_subobjs(ndo, obj_tptr, obj_tlen - 12, 12))
+ hexdump=TRUE;
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_VERIFY_BEGIN:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_1:
+ if (obj_tlen != 20) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Flags: %s",
+ bittok2str(lmp_obj_begin_verify_flag_values,
+ "none",
+ GET_BE_U_2(obj_tptr)));
+ ND_PRINT("\n\t Verify Interval: %u",
+ GET_BE_U_2(obj_tptr + 2));
+ ND_PRINT("\n\t Data links: %u",
+ GET_BE_U_4(obj_tptr + 4));
+ ND_PRINT("\n\t Encoding type: %s",
+ tok2str(gmpls_encoding_values, "Unknown", GET_U_1((obj_tptr + 8))));
+ ND_PRINT("\n\t Verify Transport Mechanism: %u (0x%x)%s",
+ GET_BE_U_2(obj_tptr + 10),
+ GET_BE_U_2(obj_tptr + 10),
+ GET_BE_U_2(obj_tptr + 10)&8000 ? " (Payload test messages capable)" : "");
+ bw.i = GET_BE_U_4(obj_tptr + 12);
+ ND_PRINT("\n\t Transmission Rate: %.3f Mbps",bw.f*8/1000000);
+ ND_PRINT("\n\t Wavelength: %u",
+ GET_BE_U_4(obj_tptr + 16));
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_VERIFY_BEGIN_ACK:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_1:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Verify Dead Interval: %u"
+ "\n\t Verify Transport Response: %u",
+ GET_BE_U_2(obj_tptr),
+ GET_BE_U_2(obj_tptr + 2));
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_VERIFY_ID:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_1:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Verify ID: %u",
+ GET_BE_U_4(obj_tptr));
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_CHANNEL_STATUS:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_IPV4:
+ offset = 0;
+ /* Decode pairs: <Interface_ID (4 bytes), Channel_status (4 bytes)> */
+ while (offset+8 <= obj_tlen) {
+ ND_PRINT("\n\t Interface ID: %s (0x%08x)",
+ GET_IPADDR_STRING(obj_tptr+offset),
+ GET_BE_U_4(obj_tptr + offset));
+
+ ND_PRINT("\n\t\t Active: %s (%u)",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>31) ?
+ "Allocated" : "Non-allocated",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>31));
+
+ ND_PRINT("\n\t\t Direction: %s (%u)",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>30)&0x1 ?
+ "Transmit" : "Receive",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>30)&0x1);
+
+ ND_PRINT("\n\t\t Channel Status: %s (%u)",
+ tok2str(lmp_obj_channel_status_values,
+ "Unknown",
+ GET_BE_U_4(obj_tptr + offset + 4)&0x3FFFFFF),
+ GET_BE_U_4(obj_tptr + offset + 4)&0x3FFFFFF);
+ offset+=8;
+ }
+ break;
+
+ case LMP_CTYPE_IPV6:
+ offset = 0;
+ /* Decode pairs: <Interface_ID (16 bytes), Channel_status (4 bytes)> */
+ while (offset+20 <= obj_tlen) {
+ ND_PRINT("\n\t Interface ID: %s (0x%08x)",
+ GET_IP6ADDR_STRING(obj_tptr+offset),
+ GET_BE_U_4(obj_tptr + offset));
+
+ ND_PRINT("\n\t\t Active: %s (%u)",
+ (GET_BE_U_4(obj_tptr + offset + 16)>>31) ?
+ "Allocated" : "Non-allocated",
+ (GET_BE_U_4(obj_tptr + offset + 16)>>31));
+
+ ND_PRINT("\n\t\t Direction: %s (%u)",
+ (GET_BE_U_4(obj_tptr + offset + 16)>>30)&0x1 ?
+ "Transmit" : "Receive",
+ (GET_BE_U_4(obj_tptr + offset + 16)>>30)&0x1);
+
+ ND_PRINT("\n\t\t Channel Status: %s (%u)",
+ tok2str(lmp_obj_channel_status_values,
+ "Unknown",
+ GET_BE_U_4(obj_tptr + offset + 16)&0x3FFFFFF),
+ GET_BE_U_4(obj_tptr + offset + 16)&0x3FFFFFF);
+ offset+=20;
+ }
+ break;
+
+ case LMP_CTYPE_UNMD:
+ offset = 0;
+ /* Decode pairs: <Interface_ID (4 bytes), Channel_status (4 bytes)> */
+ while (offset+8 <= obj_tlen) {
+ ND_PRINT("\n\t Interface ID: %u (0x%08x)",
+ GET_BE_U_4(obj_tptr + offset),
+ GET_BE_U_4(obj_tptr + offset));
+
+ ND_PRINT("\n\t\t Active: %s (%u)",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>31) ?
+ "Allocated" : "Non-allocated",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>31));
+
+ ND_PRINT("\n\t\t Direction: %s (%u)",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>30)&0x1 ?
+ "Transmit" : "Receive",
+ (GET_BE_U_4(obj_tptr + offset + 4)>>30)&0x1);
+
+ ND_PRINT("\n\t\t Channel Status: %s (%u)",
+ tok2str(lmp_obj_channel_status_values,
+ "Unknown",
+ GET_BE_U_4(obj_tptr + offset + 4)&0x3FFFFFF),
+ GET_BE_U_4(obj_tptr + offset + 4)&0x3FFFFFF);
+ offset+=8;
+ }
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_CHANNEL_STATUS_REQ:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_IPV4:
+ offset = 0;
+ while (offset+4 <= obj_tlen) {
+ ND_PRINT("\n\t Interface ID: %s (0x%08x)",
+ GET_IPADDR_STRING(obj_tptr+offset),
+ GET_BE_U_4(obj_tptr + offset));
+ offset+=4;
+ }
+ break;
+
+ case LMP_CTYPE_IPV6:
+ offset = 0;
+ while (offset+16 <= obj_tlen) {
+ ND_PRINT("\n\t Interface ID: %s (0x%08x)",
+ GET_IP6ADDR_STRING(obj_tptr+offset),
+ GET_BE_U_4(obj_tptr + offset));
+ offset+=16;
+ }
+ break;
+
+ case LMP_CTYPE_UNMD:
+ offset = 0;
+ while (offset+4 <= obj_tlen) {
+ ND_PRINT("\n\t Interface ID: %u (0x%08x)",
+ GET_BE_U_4(obj_tptr + offset),
+ GET_BE_U_4(obj_tptr + offset));
+ offset+=4;
+ }
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_ERROR_CODE:
+ switch(lmp_obj_ctype) {
+ case LMP_CTYPE_BEGIN_VERIFY_ERROR:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Error Code: %s",
+ bittok2str(lmp_obj_begin_verify_error_values,
+ "none",
+ GET_BE_U_4(obj_tptr)));
+ break;
+
+ case LMP_CTYPE_LINK_SUMMARY_ERROR:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Error Code: %s",
+ bittok2str(lmp_obj_link_summary_error_values,
+ "none",
+ GET_BE_U_4(obj_tptr)));
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case LMP_OBJ_SERVICE_CONFIG:
+ switch (lmp_obj_ctype) {
+ case LMP_CTYPE_SERVICE_CONFIG_SP:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+ ND_PRINT("\n\t Flags: %s",
+ bittok2str(lmp_obj_service_config_sp_flag_values,
+ "none",
+ GET_U_1(obj_tptr)));
+
+ ND_PRINT("\n\t UNI Version: %u",
+ GET_U_1(obj_tptr + 1));
+
+ break;
+
+ case LMP_CTYPE_SERVICE_CONFIG_CPSA:
+ if (obj_tlen != 16) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+
+ link_type = GET_U_1(obj_tptr);
+
+ ND_PRINT("\n\t Link Type: %s (%u)",
+ tok2str(lmp_sd_service_config_cpsa_link_type_values,
+ "Unknown", link_type),
+ link_type);
+
+ switch (link_type) {
+ case LMP_SD_SERVICE_CONFIG_CPSA_LINK_TYPE_SDH:
+ ND_PRINT("\n\t Signal Type: %s (%u)",
+ tok2str(lmp_sd_service_config_cpsa_signal_type_sdh_values,
+ "Unknown",
+ GET_U_1(obj_tptr + 1)),
+ GET_U_1(obj_tptr + 1));
+ break;
+
+ case LMP_SD_SERVICE_CONFIG_CPSA_LINK_TYPE_SONET:
+ ND_PRINT("\n\t Signal Type: %s (%u)",
+ tok2str(lmp_sd_service_config_cpsa_signal_type_sonet_values,
+ "Unknown",
+ GET_U_1(obj_tptr + 1)),
+ GET_U_1(obj_tptr + 1));
+ break;
+ }
+
+ ND_PRINT("\n\t Transparency: %s",
+ bittok2str(lmp_obj_service_config_cpsa_tp_flag_values,
+ "none",
+ GET_U_1(obj_tptr + 2)));
+
+ ND_PRINT("\n\t Contiguous Concatenation Types: %s",
+ bittok2str(lmp_obj_service_config_cpsa_cct_flag_values,
+ "none",
+ GET_U_1(obj_tptr + 3)));
+
+ ND_PRINT("\n\t Minimum NCC: %u",
+ GET_BE_U_2(obj_tptr + 4));
+
+ ND_PRINT("\n\t Maximum NCC: %u",
+ GET_BE_U_2(obj_tptr + 6));
+
+ ND_PRINT("\n\t Minimum NVC:%u",
+ GET_BE_U_2(obj_tptr + 8));
+
+ ND_PRINT("\n\t Maximum NVC:%u",
+ GET_BE_U_2(obj_tptr + 10));
+
+ ND_PRINT("\n\t Local Interface ID: %s (0x%08x)",
+ GET_IPADDR_STRING(obj_tptr+12),
+ GET_BE_U_4(obj_tptr + 12));
+
+ break;
+
+ case LMP_CTYPE_SERVICE_CONFIG_TRANSPARENCY_TCM:
+ if (obj_tlen != 8) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+
+ ND_PRINT("\n\t Transparency Flags: %s",
+ bittok2str(
+ lmp_obj_service_config_nsa_transparency_flag_values,
+ "none",
+ GET_BE_U_4(obj_tptr)));
+
+ ND_PRINT("\n\t TCM Monitoring Flags: %s",
+ bittok2str(
+ lmp_obj_service_config_nsa_tcm_flag_values,
+ "none",
+ GET_U_1(obj_tptr + 7)));
+
+ break;
+
+ case LMP_CTYPE_SERVICE_CONFIG_NETWORK_DIVERSITY:
+ if (obj_tlen != 4) {
+ ND_PRINT(" (not correct for object)");
+ break;
+ }
+
+ ND_PRINT("\n\t Diversity: Flags: %s",
+ bittok2str(
+ lmp_obj_service_config_nsa_network_diversity_flag_values,
+ "none",
+ GET_U_1(obj_tptr + 3)));
+ break;
+
+ default:
+ hexdump = TRUE;
+ }
+
+ break;
+
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo,obj_tptr,"\n\t ",obj_tlen);
+ break;
+ }
+ /* do we want to see an additionally hexdump ? */
+ if (ndo->ndo_vflag > 1 || hexdump==TRUE)
+ print_unknown_data(ndo,tptr+sizeof(struct lmp_object_header),"\n\t ",
+ lmp_obj_len-sizeof(struct lmp_object_header));
+
+ if (tlen < lmp_obj_len) {
+ ND_PRINT(" [remaining objects length %u < %u]", tlen, lmp_obj_len);
+ nd_print_invalid(ndo);
+ break;
+ }
+ tptr+=lmp_obj_len;
+ tlen-=lmp_obj_len;
+ }
+}
diff --git a/print-loopback.c b/print-loopback.c
new file mode 100644
index 0000000..ee0caf3
--- /dev/null
+++ b/print-loopback.c
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2014 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: Loopback Protocol printer */
+
+/*
+ * originally defined as the Ethernet Configuration Testing Protocol.
+ * specification: https://www.mit.edu/people/jhawk/ctp.pdf
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+
+#define LOOPBACK_REPLY 1
+#define LOOPBACK_FWDDATA 2
+
+static const struct tok fcode_str[] = {
+ { LOOPBACK_REPLY, "Reply" },
+ { LOOPBACK_FWDDATA, "Forward Data" },
+ { 0, NULL }
+};
+
+static void
+loopback_message_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint16_t function;
+
+ if (len < 2)
+ goto invalid;
+ /* function */
+ function = GET_LE_U_2(cp);
+ cp += 2;
+ len -= 2;
+ ND_PRINT(", %s", tok2str(fcode_str, " invalid (%u)", function));
+
+ switch (function) {
+ case LOOPBACK_REPLY:
+ if (len < 2)
+ goto invalid;
+ /* receipt number */
+ ND_PRINT(", receipt number %u", GET_LE_U_2(cp));
+ cp += 2;
+ len -= 2;
+ /* data */
+ ND_PRINT(", data (%u octets)", len);
+ ND_TCHECK_LEN(cp, len);
+ break;
+ case LOOPBACK_FWDDATA:
+ if (len < MAC_ADDR_LEN)
+ goto invalid;
+ /* forwarding address */
+ ND_PRINT(", forwarding address %s", GET_ETHERADDR_STRING(cp));
+ cp += MAC_ADDR_LEN;
+ len -= MAC_ADDR_LEN;
+ /* data */
+ ND_PRINT(", data (%u octets)", len);
+ ND_TCHECK_LEN(cp, len);
+ break;
+ default:
+ ND_TCHECK_LEN(cp, len);
+ break;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+void
+loopback_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint16_t skipCount;
+
+ ndo->ndo_protocol = "loopback";
+ ND_PRINT("Loopback");
+ if (len < 2)
+ goto invalid;
+ /* skipCount */
+ skipCount = GET_LE_U_2(cp);
+ cp += 2;
+ len -= 2;
+ ND_PRINT(", skipCount %u", skipCount);
+ if (skipCount % 8)
+ ND_PRINT(" (bogus)");
+ if (skipCount > len)
+ goto invalid;
+ /* the octets to skip */
+ ND_TCHECK_LEN(cp, skipCount);
+ cp += skipCount;
+ len -= skipCount;
+ /* the first message to decode */
+ loopback_message_print(ndo, cp, len);
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
diff --git a/print-lspping.c b/print-lspping.c
new file mode 100644
index 0000000..f3183cb
--- /dev/null
+++ b/print-lspping.c
@@ -0,0 +1,1077 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+/* \summary: MPLS LSP PING printer */
+
+/* specification: RFC 4379 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "ntp.h"
+
+#include "l2vpn.h"
+#include "oui.h"
+
+
+/*
+ * LSPPING common header
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Version Number | Must Be Zero |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Message Type | Reply mode | Return Code | Return Subcode|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Sender's Handle |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Sequence Number |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | TimeStamp Sent (seconds) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | TimeStamp Sent (microseconds) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | TimeStamp Received (seconds) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | TimeStamp Received (microseconds) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | TLVs ... |
+ * . .
+ * . .
+ * . .
+ */
+
+struct lspping_common_header {
+ nd_uint16_t version;
+ nd_uint16_t global_flags;
+ nd_uint8_t msg_type;
+ nd_uint8_t reply_mode;
+ nd_uint8_t return_code;
+ nd_uint8_t return_subcode;
+ nd_uint32_t sender_handle;
+ nd_uint32_t seq_number;
+ struct l_fixedpt ts_sent;
+ struct l_fixedpt ts_rcvd;
+};
+
+#define LSPPING_VERSION 1
+
+static const struct tok lspping_msg_type_values[] = {
+ { 1, "MPLS Echo Request"},
+ { 2, "MPLS Echo Reply"},
+ { 0, NULL}
+};
+
+static const struct tok lspping_reply_mode_values[] = {
+ { 1, "Do not reply"},
+ { 2, "Reply via an IPv4/IPv6 UDP packet"},
+ { 3, "Reply via an IPv4/IPv6 UDP packet with Router Alert"},
+ { 4, "Reply via application level control channel"},
+ { 0, NULL}
+};
+
+static const struct tok lspping_return_code_values[] = {
+ { 0, "No return code or return code contained in the Error Code TLV"},
+ { 1, "Malformed echo request received"},
+ { 2, "One or more of the TLVs was not understood"},
+ { 3, "Replying router is an egress for the FEC at stack depth"},
+ { 4, "Replying router has no mapping for the FEC at stack depth"},
+ { 5, "Reserved"},
+ { 6, "Reserved"},
+ { 7, "Reserved"},
+ { 8, "Label switched at stack-depth"},
+ { 9, "Label switched but no MPLS forwarding at stack-depth"},
+ { 10, "Mapping for this FEC is not the given label at stack depth"},
+ { 11, "No label entry at stack-depth"},
+ { 12, "Protocol not associated with interface at FEC stack depth"},
+ { 13, "Premature termination of ping due to label stack shrinking to a single label"},
+ { 0, NULL},
+};
+
+
+/*
+ * LSPPING TLV header
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Type | Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Value |
+ * . .
+ * . .
+ * . .
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+struct lspping_tlv_header {
+ nd_uint16_t type;
+ nd_uint16_t length;
+};
+
+#define LSPPING_TLV_TARGET_FEC_STACK 1
+#define LSPPING_TLV_DOWNSTREAM_MAPPING 2
+#define LSPPING_TLV_PAD 3
+/* not assigned 4 */
+#define LSPPING_TLV_VENDOR_ENTERPRISE 5
+#define LSPPING_TLV_VENDOR_ENTERPRISE_LEN 4
+/* not assigned 6 */
+#define LSPPING_TLV_INTERFACE_LABEL_STACK 7
+/* not assigned 8 */
+#define LSPPING_TLV_ERROR_CODE 9
+#define LSPPING_TLV_REPLY_TOS_BYTE 10
+#define LSPPING_TLV_BFD_DISCRIMINATOR 15 /* draft-ietf-bfd-mpls-02 */
+#define LSPPING_TLV_BFD_DISCRIMINATOR_LEN 4
+#define LSPPING_TLV_VENDOR_PRIVATE 0xfc00
+
+static const struct tok lspping_tlv_values[] = {
+ { LSPPING_TLV_TARGET_FEC_STACK, "Target FEC Stack" },
+ { LSPPING_TLV_DOWNSTREAM_MAPPING, "Downstream Mapping" },
+ { LSPPING_TLV_PAD, "Pad" },
+ { LSPPING_TLV_ERROR_CODE, "Error Code" },
+ { LSPPING_TLV_VENDOR_ENTERPRISE, "Vendor Enterprise Code" },
+ { LSPPING_TLV_INTERFACE_LABEL_STACK, "Interface Label Stack" },
+ { LSPPING_TLV_REPLY_TOS_BYTE, "Reply TOS Byte" },
+ { LSPPING_TLV_BFD_DISCRIMINATOR, "BFD Discriminator" },
+ { LSPPING_TLV_VENDOR_PRIVATE, "Vendor Private Code" },
+ { 0, NULL}
+};
+
+#define LSPPING_TLV_TARGETFEC_SUBTLV_LDP_IPV4 1
+#define LSPPING_TLV_TARGETFEC_SUBTLV_LDP_IPV6 2
+#define LSPPING_TLV_TARGETFEC_SUBTLV_RSVP_IPV4 3
+#define LSPPING_TLV_TARGETFEC_SUBTLV_RSVP_IPV6 4
+/* not assigned 5 */
+#define LSPPING_TLV_TARGETFEC_SUBTLV_L3VPN_IPV4 6
+#define LSPPING_TLV_TARGETFEC_SUBTLV_L3VPN_IPV6 7
+#define LSPPING_TLV_TARGETFEC_SUBTLV_L2VPN_ENDPT 8
+#define LSPPING_TLV_TARGETFEC_SUBTLV_FEC_128_PW_OLD 9
+#define LSPPING_TLV_TARGETFEC_SUBTLV_FEC_128_PW 10
+#define LSPPING_TLV_TARGETFEC_SUBTLV_FEC_129_PW 11
+#define LSPPING_TLV_TARGETFEC_SUBTLV_BGP_IPV4 12
+#define LSPPING_TLV_TARGETFEC_SUBTLV_BGP_IPV6 13
+#define LSPPING_TLV_TARGETFEC_SUBTLV_GENERIC_IPV4 14
+#define LSPPING_TLV_TARGETFEC_SUBTLV_GENERIC_IPV6 15
+#define LSPPING_TLV_TARGETFEC_SUBTLV_NIL_FEC 16
+
+static const struct tok lspping_tlvtargetfec_subtlv_values[] = {
+ { LSPPING_TLV_TARGETFEC_SUBTLV_LDP_IPV4, "LDP IPv4 prefix"},
+ { LSPPING_TLV_TARGETFEC_SUBTLV_LDP_IPV6, "LDP IPv6 prefix"},
+ { LSPPING_TLV_TARGETFEC_SUBTLV_RSVP_IPV4, "RSVP IPv4 Session Query"},
+ { LSPPING_TLV_TARGETFEC_SUBTLV_RSVP_IPV6, "RSVP IPv6 Session Query"},
+ { 5, "Reserved"},
+ { LSPPING_TLV_TARGETFEC_SUBTLV_L3VPN_IPV4, "VPN IPv4 prefix"},
+ { LSPPING_TLV_TARGETFEC_SUBTLV_L3VPN_IPV6, "VPN IPv6 prefix"},
+ { LSPPING_TLV_TARGETFEC_SUBTLV_L2VPN_ENDPT, "L2 VPN endpoint"},
+ { LSPPING_TLV_TARGETFEC_SUBTLV_FEC_128_PW_OLD, "FEC 128 pseudowire (old)"},
+ { LSPPING_TLV_TARGETFEC_SUBTLV_FEC_128_PW, "FEC 128 pseudowire"},
+ { LSPPING_TLV_TARGETFEC_SUBTLV_BGP_IPV4, "BGP labeled IPv4 prefix"},
+ { LSPPING_TLV_TARGETFEC_SUBTLV_BGP_IPV6, "BGP labeled IPv6 prefix"},
+ { 0, NULL}
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IPv4 prefix |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Prefix Length | Must Be Zero |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+struct lspping_tlv_targetfec_subtlv_ldp_ipv4_t {
+ nd_ipv4 prefix;
+ nd_uint8_t prefix_len;
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IPv6 prefix |
+ * | (16 octets) |
+ * | |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Prefix Length | Must Be Zero |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+struct lspping_tlv_targetfec_subtlv_ldp_ipv6_t {
+ nd_ipv6 prefix;
+ nd_uint8_t prefix_len;
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IPv4 tunnel end point address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Must Be Zero | Tunnel ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Extended Tunnel ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IPv4 tunnel sender address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Must Be Zero | LSP ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+struct lspping_tlv_targetfec_subtlv_rsvp_ipv4_t {
+ nd_ipv4 tunnel_endpoint;
+ nd_byte res[2];
+ nd_uint16_t tunnel_id;
+ nd_ipv4 extended_tunnel_id;
+ nd_ipv4 tunnel_sender;
+ nd_byte res2[2];
+ nd_uint16_t lsp_id;
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IPv6 tunnel end point address |
+ * | |
+ * | |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Must Be Zero | Tunnel ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Extended Tunnel ID |
+ * | |
+ * | |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IPv6 tunnel sender address |
+ * | |
+ * | |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Must Be Zero | LSP ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+struct lspping_tlv_targetfec_subtlv_rsvp_ipv6_t {
+ nd_ipv6 tunnel_endpoint;
+ nd_byte res[2];
+ nd_uint16_t tunnel_id;
+ nd_ipv6 extended_tunnel_id;
+ nd_ipv6 tunnel_sender;
+ nd_byte res2[2];
+ nd_uint16_t lsp_id;
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Route Distinguisher |
+ * | (8 octets) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IPv4 prefix |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Prefix Length | Must Be Zero |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+struct lspping_tlv_targetfec_subtlv_l3vpn_ipv4_t {
+ nd_byte rd[8];
+ nd_ipv4 prefix;
+ nd_uint8_t prefix_len;
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Route Distinguisher |
+ * | (8 octets) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IPv6 prefix |
+ * | (16 octets) |
+ * | |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Prefix Length | Must Be Zero |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+struct lspping_tlv_targetfec_subtlv_l3vpn_ipv6_t {
+ nd_byte rd[8];
+ nd_ipv6 prefix;
+ nd_uint8_t prefix_len;
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Route Distinguisher |
+ * | (8 octets) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Sender's VE ID | Receiver's VE ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Encapsulation Type | Must Be Zero |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 0 1 2 3
+ */
+struct lspping_tlv_targetfec_subtlv_l2vpn_endpt_t {
+ nd_byte rd[8];
+ nd_uint16_t sender_ve_id;
+ nd_uint16_t receiver_ve_id;
+ nd_uint16_t encapsulation;
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Remote PE Address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | PW ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | PW Type | Must Be Zero |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+struct lspping_tlv_targetfec_subtlv_fec_128_pw_old {
+ nd_ipv4 remote_pe_address;
+ nd_uint32_t pw_id;
+ nd_uint16_t pw_type;
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Sender's PE Address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Remote PE Address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | PW ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | PW Type | Must Be Zero |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+struct lspping_tlv_targetfec_subtlv_fec_128_pw {
+ nd_ipv4 sender_pe_address;
+ nd_ipv4 remote_pe_address;
+ nd_uint32_t pw_id;
+ nd_uint16_t pw_type;
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IPv4 prefix |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Prefix Length | Must Be Zero |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+struct lspping_tlv_targetfec_subtlv_bgp_ipv4_t {
+ nd_ipv4 prefix;
+ nd_uint8_t prefix_len;
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IPv6 prefix |
+ * | (16 octets) |
+ * | |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Prefix Length | Must Be Zero |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+struct lspping_tlv_targetfec_subtlv_bgp_ipv6_t {
+ nd_ipv6 prefix;
+ nd_uint8_t prefix_len;
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | MTU | Address Type | Resvd (SBZ) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Downstream IP Address (4 or 16 octets) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Downstream Interface Address (4 or 16 octets) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Multipath Type| Depth Limit | Multipath Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * . .
+ * . (Multipath Information) .
+ * . .
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Downstream Label | Protocol |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * . .
+ * . .
+ * . .
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Downstream Label | Protocol |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+/* Enough to get the address type */
+struct lspping_tlv_downstream_map_t {
+ nd_uint16_t mtu;
+ nd_uint8_t address_type;
+ nd_uint8_t ds_flags;
+};
+
+struct lspping_tlv_downstream_map_ipv4_t {
+ nd_uint16_t mtu;
+ nd_uint8_t address_type;
+ nd_uint8_t ds_flags;
+ nd_ipv4 downstream_ip;
+ nd_ipv4 downstream_interface;
+};
+
+struct lspping_tlv_downstream_map_ipv4_unmb_t {
+ nd_uint16_t mtu;
+ nd_uint8_t address_type;
+ nd_uint8_t ds_flags;
+ nd_ipv4 downstream_ip;
+ nd_uint32_t downstream_interface;
+};
+
+struct lspping_tlv_downstream_map_ipv6_t {
+ nd_uint16_t mtu;
+ nd_uint8_t address_type;
+ nd_uint8_t ds_flags;
+ nd_ipv6 downstream_ip;
+ nd_ipv6 downstream_interface;
+};
+
+struct lspping_tlv_downstream_map_ipv6_unmb_t {
+ nd_uint16_t mtu;
+ nd_uint8_t address_type;
+ nd_uint8_t ds_flags;
+ nd_ipv6 downstream_ip;
+ nd_uint32_t downstream_interface;
+};
+
+struct lspping_tlv_downstream_map_info_t {
+ nd_uint8_t multipath_type;
+ nd_uint8_t depth_limit;
+ nd_uint16_t multipath_length;
+};
+
+#define LSPPING_AFI_IPV4 1
+#define LSPPING_AFI_IPV4_UNMB 2
+#define LSPPING_AFI_IPV6 3
+#define LSPPING_AFI_IPV6_UNMB 4
+
+static const struct tok lspping_tlv_downstream_addr_values[] = {
+ { LSPPING_AFI_IPV4, "IPv4"},
+ { LSPPING_AFI_IPV4_UNMB, "Unnumbered IPv4"},
+ { LSPPING_AFI_IPV6, "IPv6"},
+ { LSPPING_AFI_IPV6_UNMB, "IPv6"},
+ { 0, NULL}
+};
+
+void
+lspping_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len)
+{
+ const struct lspping_common_header *lspping_com_header;
+ const struct lspping_tlv_header *lspping_tlv_header;
+ const struct lspping_tlv_header *lspping_subtlv_header;
+ const u_char *tptr,*tlv_tptr,*subtlv_tptr;
+ u_int return_code, return_subcode;
+ u_int tlen,lspping_tlv_len,lspping_tlv_type,tlv_tlen;
+ int tlv_hexdump,subtlv_hexdump;
+ u_int lspping_subtlv_len,lspping_subtlv_type;
+ uint32_t int_part, fraction;
+ u_int address_type;
+
+ union {
+ const struct lspping_tlv_downstream_map_t *lspping_tlv_downstream_map;
+ const struct lspping_tlv_downstream_map_ipv4_t *lspping_tlv_downstream_map_ipv4;
+ const struct lspping_tlv_downstream_map_ipv4_unmb_t *lspping_tlv_downstream_map_ipv4_unmb;
+ const struct lspping_tlv_downstream_map_ipv6_t *lspping_tlv_downstream_map_ipv6;
+ const struct lspping_tlv_downstream_map_ipv6_unmb_t *lspping_tlv_downstream_map_ipv6_unmb;
+ const struct lspping_tlv_downstream_map_info_t *lspping_tlv_downstream_map_info;
+ } tlv_ptr;
+
+ union {
+ const struct lspping_tlv_targetfec_subtlv_ldp_ipv4_t *lspping_tlv_targetfec_subtlv_ldp_ipv4;
+ const struct lspping_tlv_targetfec_subtlv_ldp_ipv6_t *lspping_tlv_targetfec_subtlv_ldp_ipv6;
+ const struct lspping_tlv_targetfec_subtlv_rsvp_ipv4_t *lspping_tlv_targetfec_subtlv_rsvp_ipv4;
+ const struct lspping_tlv_targetfec_subtlv_rsvp_ipv6_t *lspping_tlv_targetfec_subtlv_rsvp_ipv6;
+ const struct lspping_tlv_targetfec_subtlv_l3vpn_ipv4_t *lspping_tlv_targetfec_subtlv_l3vpn_ipv4;
+ const struct lspping_tlv_targetfec_subtlv_l3vpn_ipv6_t *lspping_tlv_targetfec_subtlv_l3vpn_ipv6;
+ const struct lspping_tlv_targetfec_subtlv_l2vpn_endpt_t *lspping_tlv_targetfec_subtlv_l2vpn_endpt;
+ const struct lspping_tlv_targetfec_subtlv_fec_128_pw_old *lspping_tlv_targetfec_subtlv_l2vpn_vcid_old;
+ const struct lspping_tlv_targetfec_subtlv_fec_128_pw *lspping_tlv_targetfec_subtlv_l2vpn_vcid;
+ const struct lspping_tlv_targetfec_subtlv_bgp_ipv4_t *lspping_tlv_targetfec_subtlv_bgp_ipv4;
+ const struct lspping_tlv_targetfec_subtlv_bgp_ipv6_t *lspping_tlv_targetfec_subtlv_bgp_ipv6;
+ } subtlv_ptr;
+
+ ndo->ndo_protocol = "lspping";
+ tptr=pptr;
+ lspping_com_header = (const struct lspping_common_header *)pptr;
+ if (len < sizeof(struct lspping_common_header))
+ goto tooshort;
+ ND_TCHECK_SIZE(lspping_com_header);
+
+ /*
+ * Sanity checking of the header.
+ */
+ if (GET_BE_U_2(lspping_com_header->version) != LSPPING_VERSION) {
+ ND_PRINT("LSP-PING version %u packet not supported",
+ GET_BE_U_2(lspping_com_header->version));
+ return;
+ }
+
+ /* in non-verbose mode just lets print the basic Message Type*/
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT("LSP-PINGv%u, %s, seq %u, length: %u",
+ GET_BE_U_2(lspping_com_header->version),
+ tok2str(lspping_msg_type_values, "unknown (%u)",GET_U_1(lspping_com_header->msg_type)),
+ GET_BE_U_4(lspping_com_header->seq_number),
+ len);
+ return;
+ }
+
+ /* ok they seem to want to know everything - lets fully decode it */
+
+ tlen=len;
+
+ ND_PRINT("\n\tLSP-PINGv%u, msg-type: %s (%u), length: %u\n\t reply-mode: %s (%u)",
+ GET_BE_U_2(lspping_com_header->version),
+ tok2str(lspping_msg_type_values, "unknown",GET_U_1(lspping_com_header->msg_type)),
+ GET_U_1(lspping_com_header->msg_type),
+ len,
+ tok2str(lspping_reply_mode_values, "unknown",GET_U_1(lspping_com_header->reply_mode)),
+ GET_U_1(lspping_com_header->reply_mode));
+
+ /*
+ * the following return codes require that the subcode is attached
+ * at the end of the translated token output
+ */
+ return_code = GET_U_1(lspping_com_header->return_code);
+ return_subcode = GET_U_1(lspping_com_header->return_subcode);
+ if (return_code == 3 ||
+ return_code == 4 ||
+ return_code == 8 ||
+ return_code == 10 ||
+ return_code == 11 ||
+ return_code == 12 )
+ ND_PRINT("\n\t Return Code: %s %u (%u)\n\t Return Subcode: (%u)",
+ tok2str(lspping_return_code_values, "unknown",return_code),
+ return_subcode,
+ return_code,
+ return_subcode);
+ else
+ ND_PRINT("\n\t Return Code: %s (%u)\n\t Return Subcode: (%u)",
+ tok2str(lspping_return_code_values, "unknown",return_code),
+ return_code,
+ return_subcode);
+
+ ND_PRINT("\n\t Sender Handle: 0x%08x, Sequence: %u",
+ GET_BE_U_4(lspping_com_header->sender_handle),
+ GET_BE_U_4(lspping_com_header->seq_number));
+
+ ND_PRINT("\n\t Sender Timestamp: ");
+ p_ntp_time(ndo, &lspping_com_header->ts_sent);
+ ND_PRINT(" ");
+
+ int_part=GET_BE_U_4(lspping_com_header->ts_rcvd.int_part);
+ fraction=GET_BE_U_4(lspping_com_header->ts_rcvd.fraction);
+ ND_PRINT("Receiver Timestamp: ");
+ if (! (int_part == 0 && fraction == 0))
+ p_ntp_time(ndo, &lspping_com_header->ts_rcvd);
+ else
+ ND_PRINT("no timestamp");
+
+ tptr+=sizeof(struct lspping_common_header);
+ tlen-=sizeof(struct lspping_common_header);
+
+ while (tlen != 0) {
+ /* Does the TLV go past the end of the packet? */
+ if (tlen < sizeof(struct lspping_tlv_header))
+ goto tooshort;
+
+ lspping_tlv_header = (const struct lspping_tlv_header *)tptr;
+ lspping_tlv_type=GET_BE_U_2(lspping_tlv_header->type);
+ lspping_tlv_len=GET_BE_U_2(lspping_tlv_header->length);
+
+ ND_PRINT("\n\t %s TLV (%u), length: %u",
+ tok2str(lspping_tlv_values,
+ "Unknown",
+ lspping_tlv_type),
+ lspping_tlv_type,
+ lspping_tlv_len);
+
+ /* some little sanity checking */
+ if (lspping_tlv_len == 0) {
+ tptr+=sizeof(struct lspping_tlv_header);
+ tlen-=sizeof(struct lspping_tlv_header);
+ continue; /* no value to dissect */
+ }
+
+ tlv_tptr=tptr+sizeof(struct lspping_tlv_header);
+ tlv_tlen=lspping_tlv_len; /* header not included -> no adjustment */
+
+ /* Does the TLV go past the end of the packet? */
+ if (tlen < lspping_tlv_len+sizeof(struct lspping_tlv_header))
+ goto tooshort;
+ /* did we capture enough for fully decoding the tlv ? */
+ ND_TCHECK_LEN(tlv_tptr, lspping_tlv_len);
+ tlv_hexdump=FALSE;
+
+ switch(lspping_tlv_type) {
+ case LSPPING_TLV_TARGET_FEC_STACK:
+ while (tlv_tlen != 0) {
+ /* Does the subTLV header go past the end of the TLV? */
+ if (tlv_tlen < sizeof(struct lspping_tlv_header)) {
+ ND_PRINT("\n\t TLV is too short");
+ tlv_hexdump = TRUE;
+ goto tlv_tooshort;
+ }
+ subtlv_hexdump=FALSE;
+
+ lspping_subtlv_header = (const struct lspping_tlv_header *)tlv_tptr;
+ lspping_subtlv_type=GET_BE_U_2(lspping_subtlv_header->type);
+ lspping_subtlv_len=GET_BE_U_2(lspping_subtlv_header->length);
+ subtlv_tptr=tlv_tptr+sizeof(struct lspping_tlv_header);
+
+ /* Does the subTLV go past the end of the TLV? */
+ if (tlv_tlen < lspping_subtlv_len+sizeof(struct lspping_tlv_header)) {
+ ND_PRINT("\n\t TLV is too short");
+ tlv_hexdump = TRUE;
+ goto tlv_tooshort;
+ }
+
+ /* Did we capture enough for fully decoding the subTLV? */
+ ND_TCHECK_LEN(subtlv_tptr, lspping_subtlv_len);
+
+ ND_PRINT("\n\t %s subTLV (%u), length: %u",
+ tok2str(lspping_tlvtargetfec_subtlv_values,
+ "Unknown",
+ lspping_subtlv_type),
+ lspping_subtlv_type,
+ lspping_subtlv_len);
+
+ switch(lspping_subtlv_type) {
+
+ case LSPPING_TLV_TARGETFEC_SUBTLV_LDP_IPV4:
+ /* Is the subTLV length correct? */
+ if (lspping_subtlv_len != 5) {
+ ND_PRINT("\n\t invalid subTLV length, should be 5");
+ subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
+ } else {
+ subtlv_ptr.lspping_tlv_targetfec_subtlv_ldp_ipv4 =
+ (const struct lspping_tlv_targetfec_subtlv_ldp_ipv4_t *)subtlv_tptr;
+ ND_PRINT("\n\t %s/%u",
+ GET_IPADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_ldp_ipv4->prefix),
+ GET_U_1(subtlv_ptr.lspping_tlv_targetfec_subtlv_ldp_ipv4->prefix_len));
+ }
+ break;
+
+ case LSPPING_TLV_TARGETFEC_SUBTLV_LDP_IPV6:
+ /* Is the subTLV length correct? */
+ if (lspping_subtlv_len != 17) {
+ ND_PRINT("\n\t invalid subTLV length, should be 17");
+ subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
+ } else {
+ subtlv_ptr.lspping_tlv_targetfec_subtlv_ldp_ipv6 =
+ (const struct lspping_tlv_targetfec_subtlv_ldp_ipv6_t *)subtlv_tptr;
+ ND_PRINT("\n\t %s/%u",
+ GET_IP6ADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_ldp_ipv6->prefix),
+ GET_U_1(subtlv_ptr.lspping_tlv_targetfec_subtlv_ldp_ipv6->prefix_len));
+ }
+ break;
+
+ case LSPPING_TLV_TARGETFEC_SUBTLV_BGP_IPV4:
+ /* Is the subTLV length correct? */
+ if (lspping_subtlv_len != 5) {
+ ND_PRINT("\n\t invalid subTLV length, should be 5");
+ subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
+ } else {
+ subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv4 =
+ (const struct lspping_tlv_targetfec_subtlv_bgp_ipv4_t *)subtlv_tptr;
+ ND_PRINT("\n\t %s/%u",
+ GET_IPADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv4->prefix),
+ GET_U_1(subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv4->prefix_len));
+ }
+ break;
+
+ case LSPPING_TLV_TARGETFEC_SUBTLV_BGP_IPV6:
+ /* Is the subTLV length correct? */
+ if (lspping_subtlv_len != 17) {
+ ND_PRINT("\n\t invalid subTLV length, should be 17");
+ subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
+ } else {
+ subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv6 =
+ (const struct lspping_tlv_targetfec_subtlv_bgp_ipv6_t *)subtlv_tptr;
+ ND_PRINT("\n\t %s/%u",
+ GET_IP6ADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv6->prefix),
+ GET_U_1(subtlv_ptr.lspping_tlv_targetfec_subtlv_bgp_ipv6->prefix_len));
+ }
+ break;
+
+ case LSPPING_TLV_TARGETFEC_SUBTLV_RSVP_IPV4:
+ /* Is the subTLV length correct? */
+ if (lspping_subtlv_len != 20) {
+ ND_PRINT("\n\t invalid subTLV length, should be 20");
+ subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
+ } else {
+ subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv4 =
+ (const struct lspping_tlv_targetfec_subtlv_rsvp_ipv4_t *)subtlv_tptr;
+ ND_PRINT("\n\t tunnel end-point %s, tunnel sender %s, lsp-id 0x%04x"
+ "\n\t tunnel-id 0x%04x, extended tunnel-id %s",
+ GET_IPADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv4->tunnel_endpoint),
+ GET_IPADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv4->tunnel_sender),
+ GET_BE_U_2(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv4->lsp_id),
+ GET_BE_U_2(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv4->tunnel_id),
+ GET_IPADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv4->extended_tunnel_id));
+ }
+ break;
+
+ case LSPPING_TLV_TARGETFEC_SUBTLV_RSVP_IPV6:
+ /* Is the subTLV length correct? */
+ if (lspping_subtlv_len != 56) {
+ ND_PRINT("\n\t invalid subTLV length, should be 56");
+ subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
+ } else {
+ subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv6 =
+ (const struct lspping_tlv_targetfec_subtlv_rsvp_ipv6_t *)subtlv_tptr;
+ ND_PRINT("\n\t tunnel end-point %s, tunnel sender %s, lsp-id 0x%04x"
+ "\n\t tunnel-id 0x%04x, extended tunnel-id %s",
+ GET_IP6ADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv6->tunnel_endpoint),
+ GET_IP6ADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv6->tunnel_sender),
+ GET_BE_U_2(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv6->lsp_id),
+ GET_BE_U_2(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv6->tunnel_id),
+ GET_IP6ADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_rsvp_ipv6->extended_tunnel_id));
+ }
+ break;
+
+ case LSPPING_TLV_TARGETFEC_SUBTLV_L3VPN_IPV4:
+ /* Is the subTLV length correct? */
+ if (lspping_subtlv_len != 13) {
+ ND_PRINT("\n\t invalid subTLV length, should be 13");
+ subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
+ } else {
+ subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv4 =
+ (const struct lspping_tlv_targetfec_subtlv_l3vpn_ipv4_t *)subtlv_tptr;
+ ND_PRINT("\n\t RD: %s, %s/%u",
+ bgp_vpn_rd_print(ndo, subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv4->rd),
+ GET_IPADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv4->prefix),
+ GET_U_1(subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv4->prefix_len));
+ }
+ break;
+
+ case LSPPING_TLV_TARGETFEC_SUBTLV_L3VPN_IPV6:
+ /* Is the subTLV length correct? */
+ if (lspping_subtlv_len != 25) {
+ ND_PRINT("\n\t invalid subTLV length, should be 25");
+ subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
+ } else {
+ subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv6 =
+ (const struct lspping_tlv_targetfec_subtlv_l3vpn_ipv6_t *)subtlv_tptr;
+ ND_PRINT("\n\t RD: %s, %s/%u",
+ bgp_vpn_rd_print(ndo, subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv6->rd),
+ GET_IP6ADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv6->prefix),
+ GET_U_1(subtlv_ptr.lspping_tlv_targetfec_subtlv_l3vpn_ipv6->prefix_len));
+ }
+ break;
+
+ case LSPPING_TLV_TARGETFEC_SUBTLV_L2VPN_ENDPT:
+ /* Is the subTLV length correct? */
+ if (lspping_subtlv_len != 14) {
+ ND_PRINT("\n\t invalid subTLV length, should be 14");
+ subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
+ } else {
+ subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_endpt =
+ (const struct lspping_tlv_targetfec_subtlv_l2vpn_endpt_t *)subtlv_tptr;
+ ND_PRINT("\n\t RD: %s, Sender VE ID: %u, Receiver VE ID: %u"
+ "\n\t Encapsulation Type: %s (%u)",
+ bgp_vpn_rd_print(ndo, subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_endpt->rd),
+ GET_BE_U_2(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_endpt->sender_ve_id),
+ GET_BE_U_2(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_endpt->receiver_ve_id),
+ tok2str(mpls_pw_types_values,
+ "unknown",
+ GET_BE_U_2(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_endpt->encapsulation)),
+ GET_BE_U_2(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_endpt->encapsulation));
+ }
+ break;
+
+ /* the old L2VPN VCID subTLV does not have support for the sender field */
+ case LSPPING_TLV_TARGETFEC_SUBTLV_FEC_128_PW_OLD:
+ /* Is the subTLV length correct? */
+ if (lspping_subtlv_len != 10) {
+ ND_PRINT("\n\t invalid subTLV length, should be 10");
+ subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
+ } else {
+ subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid_old =
+ (const struct lspping_tlv_targetfec_subtlv_fec_128_pw_old *)subtlv_tptr;
+ ND_PRINT("\n\t Remote PE: %s"
+ "\n\t PW ID: 0x%08x, PW Type: %s (%u)",
+ GET_IPADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid_old->remote_pe_address),
+ GET_BE_U_4(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid_old->pw_id),
+ tok2str(mpls_pw_types_values,
+ "unknown",
+ GET_BE_U_2(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid_old->pw_type)),
+ GET_BE_U_2(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid_old->pw_type));
+ }
+ break;
+
+ case LSPPING_TLV_TARGETFEC_SUBTLV_FEC_128_PW:
+ /* Is the subTLV length correct? */
+ if (lspping_subtlv_len != 14) {
+ ND_PRINT("\n\t invalid subTLV length, should be 14");
+ subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
+ } else {
+ subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid =
+ (const struct lspping_tlv_targetfec_subtlv_fec_128_pw *)subtlv_tptr;
+ ND_PRINT("\n\t Sender PE: %s, Remote PE: %s"
+ "\n\t PW ID: 0x%08x, PW Type: %s (%u)",
+ GET_IPADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid->sender_pe_address),
+ GET_IPADDR_STRING(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid->remote_pe_address),
+ GET_BE_U_4(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid->pw_id),
+ tok2str(mpls_pw_types_values,
+ "unknown",
+ GET_BE_U_2(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid->pw_type)),
+ GET_BE_U_2(subtlv_ptr.lspping_tlv_targetfec_subtlv_l2vpn_vcid->pw_type));
+ }
+ break;
+
+ default:
+ subtlv_hexdump=TRUE; /* unknown subTLV just hexdump it */
+ break;
+ }
+ /* do we want to see an additionally subtlv hexdump ? */
+ if (ndo->ndo_vflag > 1 || subtlv_hexdump==TRUE)
+ print_unknown_data(ndo, tlv_tptr+sizeof(struct lspping_tlv_header),
+ "\n\t ",
+ lspping_subtlv_len);
+
+ /* All subTLVs are aligned to four octet boundary */
+ if (lspping_subtlv_len % 4) {
+ lspping_subtlv_len += 4 - (lspping_subtlv_len % 4);
+ /* Does the subTLV, including padding, go past the end of the TLV? */
+ if (tlv_tlen < lspping_subtlv_len+sizeof(struct lspping_tlv_header)) {
+ ND_PRINT("\n\t\t TLV is too short");
+ return;
+ }
+ }
+ tlv_tptr+=lspping_subtlv_len;
+ tlv_tlen-=lspping_subtlv_len+sizeof(struct lspping_tlv_header);
+ }
+ break;
+
+ case LSPPING_TLV_DOWNSTREAM_MAPPING:
+ /* Does the header go past the end of the TLV? */
+ if (tlv_tlen < sizeof(struct lspping_tlv_downstream_map_t)) {
+ ND_PRINT("\n\t TLV is too short");
+ tlv_hexdump = TRUE;
+ goto tlv_tooshort;
+ }
+ /* Did we capture enough to get the address family? */
+ ND_TCHECK_LEN(tlv_tptr,
+ sizeof(struct lspping_tlv_downstream_map_t));
+
+ tlv_ptr.lspping_tlv_downstream_map=
+ (const struct lspping_tlv_downstream_map_t *)tlv_tptr;
+
+ /* that strange thing with the downstream map TLV is that until now
+ * we do not know if its IPv4 or IPv6 or is unnumbered; after
+ * we find the address-type, we recast the tlv_tptr and move on. */
+
+ address_type = GET_U_1(tlv_ptr.lspping_tlv_downstream_map->address_type);
+ ND_PRINT("\n\t MTU: %u, Address-Type: %s (%u)",
+ GET_BE_U_2(tlv_ptr.lspping_tlv_downstream_map->mtu),
+ tok2str(lspping_tlv_downstream_addr_values,
+ "unknown",
+ address_type),
+ address_type);
+
+ switch(address_type) {
+
+ case LSPPING_AFI_IPV4:
+ /* Does the data go past the end of the TLV? */
+ if (tlv_tlen < sizeof(struct lspping_tlv_downstream_map_ipv4_t)) {
+ ND_PRINT("\n\t TLV is too short");
+ tlv_hexdump = TRUE;
+ goto tlv_tooshort;
+ }
+ /* Did we capture enough for this part of the TLV? */
+ ND_TCHECK_LEN(tlv_tptr,
+ sizeof(struct lspping_tlv_downstream_map_ipv4_t));
+
+ tlv_ptr.lspping_tlv_downstream_map_ipv4=
+ (const struct lspping_tlv_downstream_map_ipv4_t *)tlv_tptr;
+ ND_PRINT("\n\t Downstream IP: %s"
+ "\n\t Downstream Interface IP: %s",
+ GET_IPADDR_STRING(tlv_ptr.lspping_tlv_downstream_map_ipv4->downstream_ip),
+ GET_IPADDR_STRING(tlv_ptr.lspping_tlv_downstream_map_ipv4->downstream_interface));
+ tlv_tptr+=sizeof(struct lspping_tlv_downstream_map_ipv4_t);
+ tlv_tlen-=sizeof(struct lspping_tlv_downstream_map_ipv4_t);
+ break;
+ case LSPPING_AFI_IPV4_UNMB:
+ /* Does the data go past the end of the TLV? */
+ if (tlv_tlen < sizeof(struct lspping_tlv_downstream_map_ipv4_unmb_t)) {
+ ND_PRINT("\n\t TLV is too short");
+ tlv_hexdump = TRUE;
+ goto tlv_tooshort;
+ }
+ /* Did we capture enough for this part of the TLV? */
+ ND_TCHECK_LEN(tlv_tptr,
+ sizeof(struct lspping_tlv_downstream_map_ipv4_unmb_t));
+
+ tlv_ptr.lspping_tlv_downstream_map_ipv4_unmb=
+ (const struct lspping_tlv_downstream_map_ipv4_unmb_t *)tlv_tptr;
+ ND_PRINT("\n\t Downstream IP: %s"
+ "\n\t Downstream Interface Index: 0x%08x",
+ GET_IPADDR_STRING(tlv_ptr.lspping_tlv_downstream_map_ipv4_unmb->downstream_ip),
+ GET_BE_U_4(tlv_ptr.lspping_tlv_downstream_map_ipv4_unmb->downstream_interface));
+ tlv_tptr+=sizeof(struct lspping_tlv_downstream_map_ipv4_unmb_t);
+ tlv_tlen-=sizeof(struct lspping_tlv_downstream_map_ipv4_unmb_t);
+ break;
+ case LSPPING_AFI_IPV6:
+ /* Does the data go past the end of the TLV? */
+ if (tlv_tlen < sizeof(struct lspping_tlv_downstream_map_ipv6_t)) {
+ ND_PRINT("\n\t TLV is too short");
+ tlv_hexdump = TRUE;
+ goto tlv_tooshort;
+ }
+ /* Did we capture enough for this part of the TLV? */
+ ND_TCHECK_LEN(tlv_tptr,
+ sizeof(struct lspping_tlv_downstream_map_ipv6_t));
+
+ tlv_ptr.lspping_tlv_downstream_map_ipv6=
+ (const struct lspping_tlv_downstream_map_ipv6_t *)tlv_tptr;
+ ND_PRINT("\n\t Downstream IP: %s"
+ "\n\t Downstream Interface IP: %s",
+ GET_IP6ADDR_STRING(tlv_ptr.lspping_tlv_downstream_map_ipv6->downstream_ip),
+ GET_IP6ADDR_STRING(tlv_ptr.lspping_tlv_downstream_map_ipv6->downstream_interface));
+ tlv_tptr+=sizeof(struct lspping_tlv_downstream_map_ipv6_t);
+ tlv_tlen-=sizeof(struct lspping_tlv_downstream_map_ipv6_t);
+ break;
+ case LSPPING_AFI_IPV6_UNMB:
+ /* Does the data go past the end of the TLV? */
+ if (tlv_tlen < sizeof(struct lspping_tlv_downstream_map_ipv6_unmb_t)) {
+ ND_PRINT("\n\t TLV is too short");
+ tlv_hexdump = TRUE;
+ goto tlv_tooshort;
+ }
+ /* Did we capture enough for this part of the TLV? */
+ ND_TCHECK_LEN(tlv_tptr,
+ sizeof(struct lspping_tlv_downstream_map_ipv6_unmb_t));
+
+ tlv_ptr.lspping_tlv_downstream_map_ipv6_unmb=
+ (const struct lspping_tlv_downstream_map_ipv6_unmb_t *)tlv_tptr;
+ ND_PRINT("\n\t Downstream IP: %s"
+ "\n\t Downstream Interface Index: 0x%08x",
+ GET_IP6ADDR_STRING(tlv_ptr.lspping_tlv_downstream_map_ipv6_unmb->downstream_ip),
+ GET_BE_U_4(tlv_ptr.lspping_tlv_downstream_map_ipv6_unmb->downstream_interface));
+ tlv_tptr+=sizeof(struct lspping_tlv_downstream_map_ipv6_unmb_t);
+ tlv_tlen-=sizeof(struct lspping_tlv_downstream_map_ipv6_unmb_t);
+ break;
+
+ default:
+ /* should not happen ! - no error message - tok2str() has barked already */
+ break;
+ }
+
+ /* Does the data go past the end of the TLV? */
+ if (tlv_tlen < sizeof(struct lspping_tlv_downstream_map_info_t)) {
+ ND_PRINT("\n\t TLV is too short");
+ tlv_hexdump = TRUE;
+ goto tlv_tooshort;
+ }
+ /* Did we capture enough for this part of the TLV? */
+ ND_TCHECK_LEN(tlv_tptr,
+ sizeof(struct lspping_tlv_downstream_map_info_t));
+
+ tlv_ptr.lspping_tlv_downstream_map_info=
+ (const struct lspping_tlv_downstream_map_info_t *)tlv_tptr;
+
+ /* FIXME add hash-key type, depth limit, multipath processing */
+
+ /* FIXME print downstream labels */
+
+ tlv_hexdump=TRUE; /* dump the TLV until code complete */
+
+ break;
+
+ case LSPPING_TLV_BFD_DISCRIMINATOR:
+ if (tlv_tlen < LSPPING_TLV_BFD_DISCRIMINATOR_LEN) {
+ ND_PRINT("\n\t TLV is too short");
+ tlv_hexdump = TRUE;
+ goto tlv_tooshort;
+ } else {
+ ND_PRINT("\n\t BFD Discriminator 0x%08x", GET_BE_U_4(tlv_tptr));
+ }
+ break;
+
+ case LSPPING_TLV_VENDOR_ENTERPRISE:
+ {
+ uint32_t vendor_id;
+
+ if (tlv_tlen < LSPPING_TLV_VENDOR_ENTERPRISE_LEN) {
+ ND_PRINT("\n\t TLV is too short");
+ tlv_hexdump = TRUE;
+ goto tlv_tooshort;
+ } else {
+ vendor_id = GET_BE_U_4(tlv_tptr);
+ ND_PRINT("\n\t Vendor: %s (0x%04x)",
+ tok2str(smi_values, "Unknown", vendor_id),
+ vendor_id);
+ }
+ }
+ break;
+
+ /*
+ * FIXME those are the defined TLVs that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+ case LSPPING_TLV_PAD:
+ case LSPPING_TLV_ERROR_CODE:
+ case LSPPING_TLV_VENDOR_PRIVATE:
+
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, tlv_tptr, "\n\t ", tlv_tlen);
+ break;
+ }
+ /* do we want to see an additionally tlv hexdump ? */
+ tlv_tooshort:
+ if (ndo->ndo_vflag > 1 || tlv_hexdump==TRUE)
+ print_unknown_data(ndo, tptr+sizeof(struct lspping_tlv_header), "\n\t ",
+ lspping_tlv_len);
+
+
+ /* All TLVs are aligned to four octet boundary */
+ if (lspping_tlv_len % 4) {
+ lspping_tlv_len += (4 - lspping_tlv_len % 4);
+ /* Does the TLV, including padding, go past the end of the packet? */
+ if (tlen < lspping_tlv_len+sizeof(struct lspping_tlv_header))
+ goto tooshort;
+ }
+
+ tptr+=lspping_tlv_len+sizeof(struct lspping_tlv_header);
+ tlen-=lspping_tlv_len+sizeof(struct lspping_tlv_header);
+ }
+ return;
+tooshort:
+ ND_PRINT("\n\t\t packet is too short");
+}
diff --git a/print-lwapp.c b/print-lwapp.c
new file mode 100644
index 0000000..10a2e0b
--- /dev/null
+++ b/print-lwapp.c
@@ -0,0 +1,367 @@
+/*
+ * Copyright (c) 1998-2007 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Carles Kishimoto <carles.kishimoto@gmail.com>
+ */
+
+/* \summary: Light Weight Access Point Protocol (LWAPP) printer */
+
+/* specification: RFC 5412 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+
+/*
+ * LWAPP transport (common) header
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |VER| RID |C|F|L| Frag ID | Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Status/WLANs | Payload... |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ */
+
+struct lwapp_transport_header {
+ nd_uint8_t version;
+ nd_uint8_t frag_id;
+ nd_uint16_t length;
+ nd_uint16_t status;
+};
+
+/*
+ * LWAPP control header
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Message Type | Seq Num | Msg Element Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Session ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Msg Element [0..N] |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+struct lwapp_control_header {
+ nd_uint8_t msg_type;
+ nd_uint8_t seq_num;
+ nd_uint16_t len;
+ nd_uint32_t session_id;
+};
+
+#define LWAPP_VERSION 0
+#define LWAPP_EXTRACT_VERSION(x) (((x)&0xC0)>>6)
+#define LWAPP_EXTRACT_RID(x) (((x)&0x38)>>3)
+#define LWAPP_EXTRACT_CONTROL_BIT(x) (((x)&0x04)>>2)
+
+static const struct tok lwapp_header_bits_values[] = {
+ { 0x01, "Last Fragment Bit"},
+ { 0x02, "Fragment Bit"},
+ { 0x04, "Control Bit"},
+ { 0, NULL}
+};
+
+#define LWAPP_MSGTYPE_DISCOVERY_REQUEST 1
+#define LWAPP_MSGTYPE_DISCOVERY_RESPONSE 2
+#define LWAPP_MSGTYPE_JOIN_REQUEST 3
+#define LWAPP_MSGTYPE_JOIN_RESPONSE 4
+#define LWAPP_MSGTYPE_JOIN_ACK 5
+#define LWAPP_MSGTYPE_JOIN_CONFIRM 6
+#define LWAPP_MSGTYPE_CONFIGURE_REQUEST 10
+#define LWAPP_MSGTYPE_CONFIGURE_RESPONSE 11
+#define LWAPP_MSGTYPE_CONF_UPDATE_REQUEST 12
+#define LWAPP_MSGTYPE_CONF_UPDATE_RESPONSE 13
+#define LWAPP_MSGTYPE_WTP_EVENT_REQUEST 14
+#define LWAPP_MSGTYPE_WTP_EVENT_RESPONSE 15
+#define LWAPP_MSGTYPE_CHANGE_STATE_EVENT_REQUEST 16
+#define LWAPP_MSGTYPE_CHANGE_STATE_EVENT_RESPONSE 17
+#define LWAPP_MSGTYPE_ECHO_REQUEST 22
+#define LWAPP_MSGTYPE_ECHO_RESPONSE 23
+#define LWAPP_MSGTYPE_IMAGE_DATA_REQUEST 24
+#define LWAPP_MSGTYPE_IMAGE_DATA_RESPONSE 25
+#define LWAPP_MSGTYPE_RESET_REQUEST 26
+#define LWAPP_MSGTYPE_RESET_RESPONSE 27
+#define LWAPP_MSGTYPE_KEY_UPDATE_REQUEST 30
+#define LWAPP_MSGTYPE_KEY_UPDATE_RESPONSE 31
+#define LWAPP_MSGTYPE_PRIMARY_DISCOVERY_REQUEST 32
+#define LWAPP_MSGTYPE_PRIMARY_DISCOVERY_RESPONSE 33
+#define LWAPP_MSGTYPE_DATA_TRANSFER_REQUEST 34
+#define LWAPP_MSGTYPE_DATA_TRANSFER_RESPONSE 35
+#define LWAPP_MSGTYPE_CLEAR_CONFIG_INDICATION 36
+#define LWAPP_MSGTYPE_WLAN_CONFIG_REQUEST 37
+#define LWAPP_MSGTYPE_WLAN_CONFIG_RESPONSE 38
+#define LWAPP_MSGTYPE_MOBILE_CONFIG_REQUEST 39
+#define LWAPP_MSGTYPE_MOBILE_CONFIG_RESPONSE 40
+
+static const struct tok lwapp_msg_type_values[] = {
+ { LWAPP_MSGTYPE_DISCOVERY_REQUEST, "Discovery req"},
+ { LWAPP_MSGTYPE_DISCOVERY_RESPONSE, "Discovery resp"},
+ { LWAPP_MSGTYPE_JOIN_REQUEST, "Join req"},
+ { LWAPP_MSGTYPE_JOIN_RESPONSE, "Join resp"},
+ { LWAPP_MSGTYPE_JOIN_ACK, "Join ack"},
+ { LWAPP_MSGTYPE_JOIN_CONFIRM, "Join confirm"},
+ { LWAPP_MSGTYPE_CONFIGURE_REQUEST, "Configure req"},
+ { LWAPP_MSGTYPE_CONFIGURE_RESPONSE, "Configure resp"},
+ { LWAPP_MSGTYPE_CONF_UPDATE_REQUEST, "Update req"},
+ { LWAPP_MSGTYPE_CONF_UPDATE_RESPONSE, "Update resp"},
+ { LWAPP_MSGTYPE_WTP_EVENT_REQUEST, "WTP event req"},
+ { LWAPP_MSGTYPE_WTP_EVENT_RESPONSE, "WTP event resp"},
+ { LWAPP_MSGTYPE_CHANGE_STATE_EVENT_REQUEST, "Change state event req"},
+ { LWAPP_MSGTYPE_CHANGE_STATE_EVENT_RESPONSE, "Change state event resp"},
+ { LWAPP_MSGTYPE_ECHO_REQUEST, "Echo req"},
+ { LWAPP_MSGTYPE_ECHO_RESPONSE, "Echo resp"},
+ { LWAPP_MSGTYPE_IMAGE_DATA_REQUEST, "Image data req"},
+ { LWAPP_MSGTYPE_IMAGE_DATA_RESPONSE, "Image data resp"},
+ { LWAPP_MSGTYPE_RESET_REQUEST, "Channel status req"},
+ { LWAPP_MSGTYPE_RESET_RESPONSE, "Channel status resp"},
+ { LWAPP_MSGTYPE_KEY_UPDATE_REQUEST, "Key update req"},
+ { LWAPP_MSGTYPE_KEY_UPDATE_RESPONSE, "Key update resp"},
+ { LWAPP_MSGTYPE_PRIMARY_DISCOVERY_REQUEST, "Primary discovery req"},
+ { LWAPP_MSGTYPE_PRIMARY_DISCOVERY_RESPONSE, "Primary discovery resp"},
+ { LWAPP_MSGTYPE_DATA_TRANSFER_REQUEST, "Data transfer req"},
+ { LWAPP_MSGTYPE_DATA_TRANSFER_RESPONSE, "Data transfer resp"},
+ { LWAPP_MSGTYPE_CLEAR_CONFIG_INDICATION, "Clear config ind"},
+ { LWAPP_MSGTYPE_WLAN_CONFIG_REQUEST, "Wlan config req"},
+ { LWAPP_MSGTYPE_WLAN_CONFIG_RESPONSE, "Wlan config resp"},
+ { LWAPP_MSGTYPE_MOBILE_CONFIG_REQUEST, "Mobile config req"},
+ { LWAPP_MSGTYPE_MOBILE_CONFIG_RESPONSE, "Mobile config resp"},
+ { 0, NULL}
+};
+
+/*
+ * LWAPP message elements
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Type | Length | Value ... |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+struct lwapp_message_header {
+ nd_uint8_t type;
+ nd_uint16_t length;
+};
+
+void
+lwapp_control_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len, int has_ap_ident)
+{
+ const struct lwapp_transport_header *lwapp_trans_header;
+ const struct lwapp_control_header *lwapp_control_header;
+ const u_char *tptr;
+ uint8_t version;
+ u_int tlen;
+ u_int msg_type, msg_tlen;
+
+ ndo->ndo_protocol = "lwapp_control";
+ tptr=pptr;
+
+ if (has_ap_ident) {
+ /* check if enough bytes for AP identity */
+ ND_TCHECK_6(tptr);
+ lwapp_trans_header = (const struct lwapp_transport_header *)(pptr+6);
+ } else {
+ lwapp_trans_header = (const struct lwapp_transport_header *)pptr;
+ }
+ ND_TCHECK_SIZE(lwapp_trans_header);
+ version = GET_U_1(lwapp_trans_header->version);
+
+ /*
+ * Sanity checking of the header.
+ */
+ if (LWAPP_EXTRACT_VERSION(version) != LWAPP_VERSION) {
+ ND_PRINT("LWAPP version %u packet not supported",
+ LWAPP_EXTRACT_VERSION(version));
+ return;
+ }
+
+ /* non-verbose */
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT("LWAPPv%u, %s frame, Flags [%s], length %u",
+ LWAPP_EXTRACT_VERSION(version),
+ LWAPP_EXTRACT_CONTROL_BIT(version) ? "Control" : "Data",
+ bittok2str(lwapp_header_bits_values,"none",version&0x07),
+ len);
+ return;
+ }
+
+ /* ok they seem to want to know everything - lets fully decode it */
+ tlen=GET_BE_U_2(lwapp_trans_header->length);
+
+ ND_PRINT("LWAPPv%u, %s frame, Radio-id %u, Flags [%s], Frag-id %u, length %u",
+ LWAPP_EXTRACT_VERSION(version),
+ LWAPP_EXTRACT_CONTROL_BIT(version) ? "Control" : "Data",
+ LWAPP_EXTRACT_RID(version),
+ bittok2str(lwapp_header_bits_values,"none",version&0x07),
+ GET_U_1(lwapp_trans_header->frag_id),
+ tlen);
+
+ if (has_ap_ident) {
+ ND_PRINT("\n\tAP identity: %s", GET_ETHERADDR_STRING(tptr));
+ tptr+=sizeof(struct lwapp_transport_header)+6;
+ } else {
+ tptr+=sizeof(struct lwapp_transport_header);
+ }
+
+ while(tlen!=0) {
+
+ /* did we capture enough for fully decoding the object header ? */
+ ND_TCHECK_LEN(tptr, sizeof(struct lwapp_control_header));
+ if (tlen < sizeof(struct lwapp_control_header)) {
+ ND_PRINT("\n\t Msg goes past end of PDU");
+ break;
+ }
+
+ lwapp_control_header = (const struct lwapp_control_header *)tptr;
+ msg_tlen = GET_BE_U_2(lwapp_control_header->len);
+ if (tlen < sizeof(struct lwapp_control_header) + msg_tlen) {
+ ND_PRINT("\n\t Msg goes past end of PDU");
+ break;
+ }
+
+ /* print message header */
+ msg_type = GET_U_1(lwapp_control_header->msg_type);
+ ND_PRINT("\n\t Msg type: %s (%u), Seqnum: %u, Msg len: %u, Session: 0x%08x",
+ tok2str(lwapp_msg_type_values,"Unknown",msg_type),
+ msg_type,
+ GET_U_1(lwapp_control_header->seq_num),
+ msg_tlen,
+ GET_BE_U_4(lwapp_control_header->session_id));
+
+ /* did we capture enough for fully decoding the message */
+ ND_TCHECK_LEN(tptr, msg_tlen);
+
+ /* XXX - Decode sub messages for each message */
+ switch(msg_type) {
+ case LWAPP_MSGTYPE_DISCOVERY_REQUEST:
+ case LWAPP_MSGTYPE_DISCOVERY_RESPONSE:
+ case LWAPP_MSGTYPE_JOIN_REQUEST:
+ case LWAPP_MSGTYPE_JOIN_RESPONSE:
+ case LWAPP_MSGTYPE_JOIN_ACK:
+ case LWAPP_MSGTYPE_JOIN_CONFIRM:
+ case LWAPP_MSGTYPE_CONFIGURE_REQUEST:
+ case LWAPP_MSGTYPE_CONFIGURE_RESPONSE:
+ case LWAPP_MSGTYPE_CONF_UPDATE_REQUEST:
+ case LWAPP_MSGTYPE_CONF_UPDATE_RESPONSE:
+ case LWAPP_MSGTYPE_WTP_EVENT_REQUEST:
+ case LWAPP_MSGTYPE_WTP_EVENT_RESPONSE:
+ case LWAPP_MSGTYPE_CHANGE_STATE_EVENT_REQUEST:
+ case LWAPP_MSGTYPE_CHANGE_STATE_EVENT_RESPONSE:
+ case LWAPP_MSGTYPE_ECHO_REQUEST:
+ case LWAPP_MSGTYPE_ECHO_RESPONSE:
+ case LWAPP_MSGTYPE_IMAGE_DATA_REQUEST:
+ case LWAPP_MSGTYPE_IMAGE_DATA_RESPONSE:
+ case LWAPP_MSGTYPE_RESET_REQUEST:
+ case LWAPP_MSGTYPE_RESET_RESPONSE:
+ case LWAPP_MSGTYPE_KEY_UPDATE_REQUEST:
+ case LWAPP_MSGTYPE_KEY_UPDATE_RESPONSE:
+ case LWAPP_MSGTYPE_PRIMARY_DISCOVERY_REQUEST:
+ case LWAPP_MSGTYPE_PRIMARY_DISCOVERY_RESPONSE:
+ case LWAPP_MSGTYPE_DATA_TRANSFER_REQUEST:
+ case LWAPP_MSGTYPE_DATA_TRANSFER_RESPONSE:
+ case LWAPP_MSGTYPE_CLEAR_CONFIG_INDICATION:
+ case LWAPP_MSGTYPE_WLAN_CONFIG_REQUEST:
+ case LWAPP_MSGTYPE_WLAN_CONFIG_RESPONSE:
+ case LWAPP_MSGTYPE_MOBILE_CONFIG_REQUEST:
+ case LWAPP_MSGTYPE_MOBILE_CONFIG_RESPONSE:
+ default:
+ break;
+ }
+
+ tptr += sizeof(struct lwapp_control_header) + msg_tlen;
+ tlen -= sizeof(struct lwapp_control_header) + msg_tlen;
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+void
+lwapp_data_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len)
+{
+ const struct lwapp_transport_header *lwapp_trans_header;
+ const u_char *tptr;
+ u_int tlen;
+ u_int version;
+
+ ndo->ndo_protocol = "lwapp_data";
+ tptr=pptr;
+
+ /* check if enough bytes for AP identity */
+ ND_TCHECK_6(tptr);
+ lwapp_trans_header = (const struct lwapp_transport_header *)pptr;
+ ND_TCHECK_SIZE(lwapp_trans_header);
+ version = GET_U_1(lwapp_trans_header->version);
+
+ /*
+ * Sanity checking of the header.
+ */
+ if (LWAPP_EXTRACT_VERSION(version) != LWAPP_VERSION) {
+ ND_PRINT("LWAPP version %u packet not supported",
+ LWAPP_EXTRACT_VERSION(version));
+ return;
+ }
+
+ /* non-verbose */
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT("LWAPPv%u, %s frame, Flags [%s], length %u",
+ LWAPP_EXTRACT_VERSION(version),
+ LWAPP_EXTRACT_CONTROL_BIT(version) ? "Control" : "Data",
+ bittok2str(lwapp_header_bits_values,"none",version&0x07),
+ len);
+ return;
+ }
+
+ /* ok they seem to want to know everything - lets fully decode it */
+ tlen=GET_BE_U_2(lwapp_trans_header->length);
+ if (tlen < sizeof(struct lwapp_transport_header)) {
+ ND_PRINT("LWAPPv%u, %s frame, Radio-id %u, Flags [%s], length %u < transport header length",
+ LWAPP_EXTRACT_VERSION(version),
+ LWAPP_EXTRACT_CONTROL_BIT(version) ? "Control" : "Data",
+ LWAPP_EXTRACT_RID(version),
+ bittok2str(lwapp_header_bits_values,"none",version&0x07),
+ tlen);
+ return;
+ }
+
+ ND_PRINT("LWAPPv%u, %s frame, Radio-id %u, Flags [%s], Frag-id %u, length %u",
+ LWAPP_EXTRACT_VERSION(version),
+ LWAPP_EXTRACT_CONTROL_BIT(version) ? "Control" : "Data",
+ LWAPP_EXTRACT_RID(version),
+ bittok2str(lwapp_header_bits_values,"none",version&0x07),
+ GET_U_1(lwapp_trans_header->frag_id),
+ tlen);
+
+ tptr+=sizeof(struct lwapp_transport_header);
+ tlen-=sizeof(struct lwapp_transport_header);
+
+ /* FIX - An IEEE 802.11 frame follows - hexdump for now */
+ print_unknown_data(ndo, tptr, "\n\t", tlen);
+
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-lwres.c b/print-lwres.c
new file mode 100644
index 0000000..97f176c
--- /dev/null
+++ b/print-lwres.c
@@ -0,0 +1,555 @@
+/*
+ * Copyright (C) 2001 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* \summary: BIND9 Lightweight Resolver protocol printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "nameser.h"
+
+/* BIND9 lib/lwres/include/lwres */
+/*
+ * Use nd_uint16_t for lwres_uint16_t
+ * Use nd_uint32_t for lwres_uint32_t
+*/
+
+struct lwres_lwpacket {
+ nd_uint32_t length;
+ nd_uint16_t version;
+ nd_uint16_t pktflags;
+ nd_uint32_t serial;
+ nd_uint32_t opcode;
+ nd_uint32_t result;
+ nd_uint32_t recvlength;
+ nd_uint16_t authtype;
+ nd_uint16_t authlength;
+};
+
+#define LWRES_LWPACKETFLAG_RESPONSE 0x0001U /* if set, pkt is a response */
+
+#define LWRES_LWPACKETVERSION_0 0
+
+#define LWRES_FLAG_TRUSTNOTREQUIRED 0x00000001U
+#define LWRES_FLAG_SECUREDATA 0x00000002U
+
+/*
+ * no-op
+ */
+#define LWRES_OPCODE_NOOP 0x00000000U
+
+typedef struct {
+ /* public */
+ nd_uint16_t datalength;
+ /* data follows */
+} lwres_nooprequest_t;
+
+typedef struct {
+ /* public */
+ nd_uint16_t datalength;
+ /* data follows */
+} lwres_noopresponse_t;
+
+/*
+ * get addresses by name
+ */
+#define LWRES_OPCODE_GETADDRSBYNAME 0x00010001U
+
+typedef struct lwres_addr lwres_addr_t;
+
+struct lwres_addr {
+ nd_uint32_t family;
+ nd_uint16_t length;
+ /* address follows */
+};
+#define LWRES_ADDR_LEN 6
+
+typedef struct {
+ /* public */
+ nd_uint32_t flags;
+ nd_uint32_t addrtypes;
+ nd_uint16_t namelen;
+ /* name follows */
+} lwres_gabnrequest_t;
+#define LWRES_GABNREQUEST_LEN 10
+
+typedef struct {
+ /* public */
+ nd_uint32_t flags;
+ nd_uint16_t naliases;
+ nd_uint16_t naddrs;
+ nd_uint16_t realnamelen;
+ /* aliases follows */
+ /* addrs follows */
+ /* realname follows */
+} lwres_gabnresponse_t;
+#define LWRES_GABNRESPONSE_LEN 10
+
+/*
+ * get name by address
+ */
+#define LWRES_OPCODE_GETNAMEBYADDR 0x00010002U
+typedef struct {
+ /* public */
+ nd_uint32_t flags;
+ /* addr follows */
+} lwres_gnbarequest_t;
+#define LWRES_GNBAREQUEST_LEN 4
+
+typedef struct {
+ /* public */
+ nd_uint32_t flags;
+ nd_uint16_t naliases;
+ nd_uint16_t realnamelen;
+ /* aliases follows */
+ /* realname follows */
+} lwres_gnbaresponse_t;
+#define LWRES_GNBARESPONSE_LEN 8
+
+/*
+ * get rdata by name
+ */
+#define LWRES_OPCODE_GETRDATABYNAME 0x00010003U
+
+typedef struct {
+ /* public */
+ nd_uint32_t flags;
+ nd_uint16_t rdclass;
+ nd_uint16_t rdtype;
+ nd_uint16_t namelen;
+ /* name follows */
+} lwres_grbnrequest_t;
+#define LWRES_GRBNREQUEST_LEN 10
+
+typedef struct {
+ /* public */
+ nd_uint32_t flags;
+ nd_uint16_t rdclass;
+ nd_uint16_t rdtype;
+ nd_uint32_t ttl;
+ nd_uint16_t nrdatas;
+ nd_uint16_t nsigs;
+ /* realname here (len + name) */
+ /* rdata here (len + name) */
+ /* signatures here (len + name) */
+} lwres_grbnresponse_t;
+#define LWRES_GRBNRESPONSE_LEN 16
+
+#define LWRDATA_VALIDATED 0x00000001
+
+#define LWRES_ADDRTYPE_V4 0x00000001U /* ipv4 */
+#define LWRES_ADDRTYPE_V6 0x00000002U /* ipv6 */
+
+#define LWRES_MAX_ALIASES 16 /* max # of aliases */
+#define LWRES_MAX_ADDRS 64 /* max # of addrs */
+
+static const struct tok opcode[] = {
+ { LWRES_OPCODE_NOOP, "noop", },
+ { LWRES_OPCODE_GETADDRSBYNAME, "getaddrsbyname", },
+ { LWRES_OPCODE_GETNAMEBYADDR, "getnamebyaddr", },
+ { LWRES_OPCODE_GETRDATABYNAME, "getrdatabyname", },
+ { 0, NULL, },
+};
+
+/* print-domain.c */
+extern const struct tok ns_type2str[];
+extern const struct tok ns_class2str[];
+
+static unsigned
+lwres_printname(netdissect_options *ndo,
+ u_int l, const u_char *p0)
+{
+ ND_PRINT(" ");
+ (void)nd_printn(ndo, p0, l, NULL);
+ p0 += l;
+ if (GET_U_1(p0))
+ ND_PRINT(" (not NUL-terminated!)");
+ return l + 1;
+}
+
+static unsigned
+lwres_printnamelen(netdissect_options *ndo,
+ const u_char *p)
+{
+ uint16_t l;
+ int advance;
+
+ l = GET_BE_U_2(p);
+ advance = lwres_printname(ndo, l, p + 2);
+ return 2 + advance;
+}
+
+static unsigned
+lwres_printbinlen(netdissect_options *ndo,
+ const u_char *p0)
+{
+ const u_char *p;
+ uint16_t l;
+ int i;
+
+ p = p0;
+ l = GET_BE_U_2(p);
+ p += 2;
+ for (i = 0; i < l; i++) {
+ ND_PRINT("%02x", GET_U_1(p));
+ p++;
+ }
+ return 2 + l;
+}
+
+static int
+lwres_printaddr(netdissect_options *ndo,
+ const u_char *p0)
+{
+ const u_char *p;
+ const lwres_addr_t *ap;
+ uint16_t l;
+ int i;
+
+ p = p0;
+ ap = (const lwres_addr_t *)p;
+ l = GET_BE_U_2(ap->length);
+ p += LWRES_ADDR_LEN;
+ ND_TCHECK_LEN(p, l);
+
+ switch (GET_BE_U_4(ap->family)) {
+ case 1: /* IPv4 */
+ if (l < 4)
+ return -1;
+ ND_PRINT(" %s", GET_IPADDR_STRING(p));
+ p += sizeof(nd_ipv4);
+ break;
+ case 2: /* IPv6 */
+ if (l < 16)
+ return -1;
+ ND_PRINT(" %s", GET_IP6ADDR_STRING(p));
+ p += sizeof(nd_ipv6);
+ break;
+ default:
+ ND_PRINT(" %u/", GET_BE_U_4(ap->family));
+ for (i = 0; i < l; i++) {
+ ND_PRINT("%02x", GET_U_1(p));
+ p++;
+ }
+ }
+
+ return ND_BYTES_BETWEEN(p, p0);
+}
+
+void
+lwres_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ const u_char *p;
+ const struct lwres_lwpacket *np;
+ uint32_t v;
+ const u_char *s;
+ int response;
+ int advance;
+ int unsupported = 0;
+
+ ndo->ndo_protocol = "lwres";
+ np = (const struct lwres_lwpacket *)bp;
+ ND_TCHECK_2(np->authlength);
+
+ ND_PRINT(" lwres");
+ v = GET_BE_U_2(np->version);
+ if (ndo->ndo_vflag || v != LWRES_LWPACKETVERSION_0)
+ ND_PRINT(" v%u", v);
+ if (v != LWRES_LWPACKETVERSION_0) {
+ s = bp + GET_BE_U_4(np->length);
+ goto tail;
+ }
+
+ response = GET_BE_U_2(np->pktflags) & LWRES_LWPACKETFLAG_RESPONSE;
+
+ /* opcode and pktflags */
+ v = GET_BE_U_4(np->opcode);
+ ND_PRINT(" %s%s", tok2str(opcode, "#0x%x", v), response ? "" : "?");
+
+ /* pktflags */
+ v = GET_BE_U_2(np->pktflags);
+ if (v & ~LWRES_LWPACKETFLAG_RESPONSE)
+ ND_PRINT("[0x%x]", v);
+
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT(" ("); /*)*/
+ ND_PRINT("serial:0x%x", GET_BE_U_4(np->serial));
+ ND_PRINT(" result:0x%x", GET_BE_U_4(np->result));
+ ND_PRINT(" recvlen:%u", GET_BE_U_4(np->recvlength));
+ /* BIND910: not used */
+ if (ndo->ndo_vflag > 2) {
+ ND_PRINT(" authtype:0x%x", GET_BE_U_2(np->authtype));
+ ND_PRINT(" authlen:%u", GET_BE_U_2(np->authlength));
+ }
+ /*(*/
+ ND_PRINT(")");
+ }
+
+ /* per-opcode content */
+ if (!response) {
+ /*
+ * queries
+ */
+ const lwres_gabnrequest_t *gabn;
+ const lwres_gnbarequest_t *gnba;
+ const lwres_grbnrequest_t *grbn;
+ uint32_t l;
+
+ gabn = NULL;
+ gnba = NULL;
+ grbn = NULL;
+
+ p = (const u_char *)(np + 1);
+ switch (GET_BE_U_4(np->opcode)) {
+ case LWRES_OPCODE_NOOP:
+ s = p;
+ break;
+ case LWRES_OPCODE_GETADDRSBYNAME:
+ gabn = (const lwres_gabnrequest_t *)p;
+ ND_TCHECK_2(gabn->namelen);
+
+ /* BIND910: not used */
+ if (ndo->ndo_vflag > 2) {
+ ND_PRINT(" flags:0x%x",
+ GET_BE_U_4(gabn->flags));
+ }
+
+ v = GET_BE_U_4(gabn->addrtypes);
+ switch (v & (LWRES_ADDRTYPE_V4 | LWRES_ADDRTYPE_V6)) {
+ case LWRES_ADDRTYPE_V4:
+ ND_PRINT(" IPv4");
+ break;
+ case LWRES_ADDRTYPE_V6:
+ ND_PRINT(" IPv6");
+ break;
+ case LWRES_ADDRTYPE_V4 | LWRES_ADDRTYPE_V6:
+ ND_PRINT(" IPv4/6");
+ break;
+ }
+ if (v & ~(LWRES_ADDRTYPE_V4 | LWRES_ADDRTYPE_V6))
+ ND_PRINT("[0x%x]", v);
+
+ s = p + LWRES_GABNREQUEST_LEN;
+ l = GET_BE_U_2(gabn->namelen);
+ advance = lwres_printname(ndo, l, s);
+ s += advance;
+ break;
+ case LWRES_OPCODE_GETNAMEBYADDR:
+ gnba = (const lwres_gnbarequest_t *)p;
+ ND_TCHECK_4(gnba->flags);
+
+ /* BIND910: not used */
+ if (ndo->ndo_vflag > 2) {
+ ND_PRINT(" flags:0x%x",
+ GET_BE_U_4(gnba->flags));
+ }
+
+ s = p + LWRES_GNBAREQUEST_LEN;
+ advance = lwres_printaddr(ndo, s);
+ if (advance < 0)
+ goto invalid;
+ s += advance;
+ break;
+ case LWRES_OPCODE_GETRDATABYNAME:
+ /* XXX no trace, not tested */
+ grbn = (const lwres_grbnrequest_t *)p;
+ ND_TCHECK_2(grbn->namelen);
+
+ /* BIND910: not used */
+ if (ndo->ndo_vflag > 2) {
+ ND_PRINT(" flags:0x%x",
+ GET_BE_U_4(grbn->flags));
+ }
+
+ ND_PRINT(" %s", tok2str(ns_type2str, "Type%u",
+ GET_BE_U_2(grbn->rdtype)));
+ if (GET_BE_U_2(grbn->rdclass) != C_IN) {
+ ND_PRINT(" %s", tok2str(ns_class2str, "Class%u",
+ GET_BE_U_2(grbn->rdclass)));
+ }
+
+ s = p + LWRES_GRBNREQUEST_LEN;
+ l = GET_BE_U_2(grbn->namelen);
+ advance = lwres_printname(ndo, l, s);
+ s += advance;
+ break;
+ default:
+ s = p;
+ unsupported++;
+ break;
+ }
+ } else {
+ /*
+ * responses
+ */
+ const lwres_gabnresponse_t *gabn;
+ const lwres_gnbaresponse_t *gnba;
+ const lwres_grbnresponse_t *grbn;
+ uint32_t l, na;
+ uint32_t i;
+
+ gabn = NULL;
+ gnba = NULL;
+ grbn = NULL;
+
+ p = (const u_char *)(np + 1);
+ switch (GET_BE_U_4(np->opcode)) {
+ case LWRES_OPCODE_NOOP:
+ s = p;
+ break;
+ case LWRES_OPCODE_GETADDRSBYNAME:
+ gabn = (const lwres_gabnresponse_t *)p;
+ ND_TCHECK_2(gabn->realnamelen);
+
+ /* BIND910: not used */
+ if (ndo->ndo_vflag > 2) {
+ ND_PRINT(" flags:0x%x",
+ GET_BE_U_4(gabn->flags));
+ }
+
+ ND_PRINT(" %u/%u", GET_BE_U_2(gabn->naliases),
+ GET_BE_U_2(gabn->naddrs));
+
+ s = p + LWRES_GABNRESPONSE_LEN;
+ l = GET_BE_U_2(gabn->realnamelen);
+ advance = lwres_printname(ndo, l, s);
+ s += advance;
+
+ /* aliases */
+ na = GET_BE_U_2(gabn->naliases);
+ for (i = 0; i < na; i++) {
+ advance = lwres_printnamelen(ndo, s);
+ s += advance;
+ }
+
+ /* addrs */
+ na = GET_BE_U_2(gabn->naddrs);
+ for (i = 0; i < na; i++) {
+ advance = lwres_printaddr(ndo, s);
+ if (advance < 0)
+ goto invalid;
+ s += advance;
+ }
+ break;
+ case LWRES_OPCODE_GETNAMEBYADDR:
+ gnba = (const lwres_gnbaresponse_t *)p;
+ ND_TCHECK_2(gnba->realnamelen);
+
+ /* BIND910: not used */
+ if (ndo->ndo_vflag > 2) {
+ ND_PRINT(" flags:0x%x",
+ GET_BE_U_4(gnba->flags));
+ }
+
+ ND_PRINT(" %u", GET_BE_U_2(gnba->naliases));
+
+ s = p + LWRES_GNBARESPONSE_LEN;
+ l = GET_BE_U_2(gnba->realnamelen);
+ advance = lwres_printname(ndo, l, s);
+ s += advance;
+
+ /* aliases */
+ na = GET_BE_U_2(gnba->naliases);
+ for (i = 0; i < na; i++) {
+ advance = lwres_printnamelen(ndo, s);
+ s += advance;
+ }
+ break;
+ case LWRES_OPCODE_GETRDATABYNAME:
+ /* XXX no trace, not tested */
+ grbn = (const lwres_grbnresponse_t *)p;
+ ND_TCHECK_2(grbn->nsigs);
+
+ /* BIND910: not used */
+ if (ndo->ndo_vflag > 2) {
+ ND_PRINT(" flags:0x%x",
+ GET_BE_U_4(grbn->flags));
+ }
+
+ ND_PRINT(" %s", tok2str(ns_type2str, "Type%u",
+ GET_BE_U_2(grbn->rdtype)));
+ if (GET_BE_U_2(grbn->rdclass) != C_IN) {
+ ND_PRINT(" %s", tok2str(ns_class2str, "Class%u",
+ GET_BE_U_2(grbn->rdclass)));
+ }
+ ND_PRINT(" TTL ");
+ unsigned_relts_print(ndo,
+ GET_BE_U_4(grbn->ttl));
+ ND_PRINT(" %u/%u", GET_BE_U_2(grbn->nrdatas),
+ GET_BE_U_2(grbn->nsigs));
+
+ s = p + LWRES_GRBNRESPONSE_LEN;
+ advance = lwres_printnamelen(ndo, s);
+ s += advance;
+
+ /* rdatas */
+ na = GET_BE_U_2(grbn->nrdatas);
+ for (i = 0; i < na; i++) {
+ /* XXX should decode resource data */
+ advance = lwres_printbinlen(ndo, s);
+ s += advance;
+ }
+
+ /* sigs */
+ na = GET_BE_U_2(grbn->nsigs);
+ for (i = 0; i < na; i++) {
+ /* XXX how should we print it? */
+ advance = lwres_printbinlen(ndo, s);
+ s += advance;
+ }
+ break;
+ default:
+ s = p;
+ unsupported++;
+ break;
+ }
+ }
+
+ tail:
+ /* length mismatch */
+ if (GET_BE_U_4(np->length) != length) {
+ ND_PRINT(" [len: %u != %u]", GET_BE_U_4(np->length),
+ length);
+ }
+ if (!unsupported && ND_BYTES_BETWEEN(s, bp) < GET_BE_U_4(np->length))
+ ND_PRINT("[extra]");
+ return;
+
+ invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-m3ua.c b/print-m3ua.c
new file mode 100644
index 0000000..ecf7db8
--- /dev/null
+++ b/print-m3ua.c
@@ -0,0 +1,337 @@
+/* Copyright (c) 2013, The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: Message Transfer Part 3 (MTP3) User Adaptation Layer (M3UA) printer */
+
+/* RFC 4666 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+
+#define M3UA_REL_1_0 1
+
+struct m3ua_common_header {
+ nd_uint8_t v;
+ nd_uint8_t reserved;
+ nd_uint8_t msg_class;
+ nd_uint8_t msg_type;
+ nd_uint32_t len;
+};
+
+struct m3ua_param_header {
+ nd_uint16_t tag;
+ nd_uint16_t len;
+};
+
+/* message classes */
+#define M3UA_MSGC_MGMT 0
+#define M3UA_MSGC_TRANSFER 1
+#define M3UA_MSGC_SSNM 2
+#define M3UA_MSGC_ASPSM 3
+#define M3UA_MSGC_ASPTM 4
+/* reserved values */
+#define M3UA_MSGC_RKM 9
+
+static const struct tok MessageClasses[] = {
+ { M3UA_MSGC_MGMT, "Management" },
+ { M3UA_MSGC_TRANSFER, "Transfer" },
+ { M3UA_MSGC_SSNM, "SS7" },
+ { M3UA_MSGC_ASPSM, "ASP" },
+ { M3UA_MSGC_ASPTM, "ASP" },
+ { M3UA_MSGC_RKM, "Routing Key Management"},
+ { 0, NULL }
+};
+
+/* management messages */
+#define M3UA_MGMT_ERROR 0
+#define M3UA_MGMT_NOTIFY 1
+
+static const struct tok MgmtMessages[] = {
+ { M3UA_MGMT_ERROR, "Error" },
+ { M3UA_MGMT_NOTIFY, "Notify" },
+ { 0, NULL }
+};
+
+/* transfer messages */
+#define M3UA_TRANSFER_DATA 1
+
+static const struct tok TransferMessages[] = {
+ { M3UA_TRANSFER_DATA, "Data" },
+ { 0, NULL }
+};
+
+/* SS7 Signaling Network Management messages */
+#define M3UA_SSNM_DUNA 1
+#define M3UA_SSNM_DAVA 2
+#define M3UA_SSNM_DAUD 3
+#define M3UA_SSNM_SCON 4
+#define M3UA_SSNM_DUPU 5
+#define M3UA_SSNM_DRST 6
+
+static const struct tok SS7Messages[] = {
+ { M3UA_SSNM_DUNA, "Destination Unavailable" },
+ { M3UA_SSNM_DAVA, "Destination Available" },
+ { M3UA_SSNM_DAUD, "Destination State Audit" },
+ { M3UA_SSNM_SCON, "Signalling Congestion" },
+ { M3UA_SSNM_DUPU, "Destination User Part Unavailable" },
+ { M3UA_SSNM_DRST, "Destination Restricted" },
+ { 0, NULL }
+};
+
+/* ASP State Maintenance messages */
+#define M3UA_ASP_UP 1
+#define M3UA_ASP_DN 2
+#define M3UA_ASP_BEAT 3
+#define M3UA_ASP_UP_ACK 4
+#define M3UA_ASP_DN_ACK 5
+#define M3UA_ASP_BEAT_ACK 6
+
+static const struct tok ASPStateMessages[] = {
+ { M3UA_ASP_UP, "Up" },
+ { M3UA_ASP_DN, "Down" },
+ { M3UA_ASP_BEAT, "Heartbeat" },
+ { M3UA_ASP_UP_ACK, "Up Acknowledgement" },
+ { M3UA_ASP_DN_ACK, "Down Acknowledgement" },
+ { M3UA_ASP_BEAT_ACK, "Heartbeat Acknowledgement" },
+ { 0, NULL }
+};
+
+/* ASP Traffic Maintenance messages */
+#define M3UA_ASP_AC 1
+#define M3UA_ASP_IA 2
+#define M3UA_ASP_AC_ACK 3
+#define M3UA_ASP_IA_ACK 4
+
+static const struct tok ASPTrafficMessages[] = {
+ { M3UA_ASP_AC, "Active" },
+ { M3UA_ASP_IA, "Inactive" },
+ { M3UA_ASP_AC_ACK, "Active Acknowledgement" },
+ { M3UA_ASP_IA_ACK, "Inactive Acknowledgement" },
+ { 0, NULL }
+};
+
+/* Routing Key Management messages */
+#define M3UA_RKM_REQ 1
+#define M3UA_RKM_RSP 2
+#define M3UA_RKM_DEREQ 3
+#define M3UA_RKM_DERSP 4
+
+static const struct tok RoutingKeyMgmtMessages[] = {
+ { M3UA_RKM_REQ, "Registration Request" },
+ { M3UA_RKM_RSP, "Registration Response" },
+ { M3UA_RKM_DEREQ, "Deregistration Request" },
+ { M3UA_RKM_DERSP, "Deregistration Response" },
+ { 0, NULL }
+};
+
+static const struct uint_tokary m3ua_msgc2tokary[] = {
+ { M3UA_MSGC_MGMT, MgmtMessages },
+ { M3UA_MSGC_TRANSFER, TransferMessages },
+ { M3UA_MSGC_SSNM, SS7Messages },
+ { M3UA_MSGC_ASPSM, ASPStateMessages },
+ { M3UA_MSGC_ASPTM, ASPTrafficMessages },
+ { M3UA_MSGC_RKM, RoutingKeyMgmtMessages },
+ /* uint2tokary() does not use array termination. */
+};
+
+/* M3UA Parameters */
+#define M3UA_PARAM_INFO 0x0004
+#define M3UA_PARAM_ROUTING_CTX 0x0006
+#define M3UA_PARAM_DIAGNOSTIC 0x0007
+#define M3UA_PARAM_HB_DATA 0x0009
+#define M3UA_PARAM_TRAFFIC_MODE_TYPE 0x000b
+#define M3UA_PARAM_ERROR_CODE 0x000c
+#define M3UA_PARAM_STATUS 0x000d
+#define M3UA_PARAM_ASP_ID 0x0011
+#define M3UA_PARAM_AFFECTED_POINT_CODE 0x0012
+#define M3UA_PARAM_CORR_ID 0x0013
+
+#define M3UA_PARAM_NETWORK_APPEARANCE 0x0200
+#define M3UA_PARAM_USER 0x0204
+#define M3UA_PARAM_CONGESTION_INDICATION 0x0205
+#define M3UA_PARAM_CONCERNED_DST 0x0206
+#define M3UA_PARAM_ROUTING_KEY 0x0207
+#define M3UA_PARAM_REG_RESULT 0x0208
+#define M3UA_PARAM_DEREG_RESULT 0x0209
+#define M3UA_PARAM_LOCAL_ROUTING_KEY_ID 0x020a
+#define M3UA_PARAM_DST_POINT_CODE 0x020b
+#define M3UA_PARAM_SI 0x020c
+#define M3UA_PARAM_ORIGIN_POINT_CODE_LIST 0x020e
+#define M3UA_PARAM_PROTO_DATA 0x0210
+#define M3UA_PARAM_REG_STATUS 0x0212
+#define M3UA_PARAM_DEREG_STATUS 0x0213
+
+static const struct tok ParamName[] = {
+ { M3UA_PARAM_INFO, "INFO String" },
+ { M3UA_PARAM_ROUTING_CTX, "Routing Context" },
+ { M3UA_PARAM_DIAGNOSTIC, "Diagnostic Info" },
+ { M3UA_PARAM_HB_DATA, "Heartbeat Data" },
+ { M3UA_PARAM_TRAFFIC_MODE_TYPE, "Traffic Mode Type" },
+ { M3UA_PARAM_ERROR_CODE, "Error Code" },
+ { M3UA_PARAM_STATUS, "Status" },
+ { M3UA_PARAM_ASP_ID, "ASP Identifier" },
+ { M3UA_PARAM_AFFECTED_POINT_CODE, "Affected Point Code" },
+ { M3UA_PARAM_CORR_ID, "Correlation ID" },
+ { M3UA_PARAM_NETWORK_APPEARANCE, "Network Appearance" },
+ { M3UA_PARAM_USER, "User/Cause" },
+ { M3UA_PARAM_CONGESTION_INDICATION, "Congestion Indications" },
+ { M3UA_PARAM_CONCERNED_DST, "Concerned Destination" },
+ { M3UA_PARAM_ROUTING_KEY, "Routing Key" },
+ { M3UA_PARAM_REG_RESULT, "Registration Result" },
+ { M3UA_PARAM_DEREG_RESULT, "Deregistration Result" },
+ { M3UA_PARAM_LOCAL_ROUTING_KEY_ID, "Local Routing Key Identifier" },
+ { M3UA_PARAM_DST_POINT_CODE, "Destination Point Code" },
+ { M3UA_PARAM_SI, "Service Indicators" },
+ { M3UA_PARAM_ORIGIN_POINT_CODE_LIST, "Originating Point Code List" },
+ { M3UA_PARAM_PROTO_DATA, "Protocol Data" },
+ { M3UA_PARAM_REG_STATUS, "Registration Status" },
+ { M3UA_PARAM_DEREG_STATUS, "Deregistration Status" },
+ { 0, NULL }
+};
+
+static void
+tag_value_print(netdissect_options *ndo,
+ const u_char *buf, const uint16_t tag, const uint16_t size)
+{
+ switch (tag) {
+ case M3UA_PARAM_NETWORK_APPEARANCE:
+ case M3UA_PARAM_ROUTING_CTX:
+ case M3UA_PARAM_CORR_ID:
+ /* buf and size don't include the header */
+ if (size < 4)
+ goto invalid;
+ ND_PRINT("0x%08x", GET_BE_U_4(buf));
+ break;
+ /* ... */
+ default:
+ ND_PRINT("(length %zu)", size + sizeof(struct m3ua_param_header));
+ }
+ ND_TCHECK_LEN(buf, size);
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(buf, size);
+}
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Parameter Tag | Parameter Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * \ \
+ * / Parameter Value /
+ * \ \
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+static void
+m3ua_tags_print(netdissect_options *ndo,
+ const u_char *buf, const u_int size)
+{
+ const u_char *p = buf;
+ int align;
+ uint16_t hdr_tag;
+ uint16_t hdr_len;
+
+ while (p < buf + size) {
+ if (p + sizeof(struct m3ua_param_header) > buf + size)
+ goto invalid;
+ /* Parameter Tag */
+ hdr_tag = GET_BE_U_2(p);
+ ND_PRINT("\n\t\t\t%s: ", tok2str(ParamName, "Unknown Parameter (0x%04x)", hdr_tag));
+ /* Parameter Length */
+ hdr_len = GET_BE_U_2(p + 2);
+ if (hdr_len < sizeof(struct m3ua_param_header))
+ goto invalid;
+ /* Parameter Value */
+ align = (p + hdr_len - buf) % 4;
+ align = align ? 4 - align : 0;
+ ND_TCHECK_LEN(p, hdr_len + align);
+ tag_value_print(ndo, p, hdr_tag, hdr_len - sizeof(struct m3ua_param_header));
+ p += hdr_len + align;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(buf, size);
+}
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Version | Reserved | Message Class | Message Type |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Message Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * \ \
+ * / /
+ */
+void
+m3ua_print(netdissect_options *ndo,
+ const u_char *buf, const u_int size)
+{
+ const struct m3ua_common_header *hdr = (const struct m3ua_common_header *) buf;
+ const struct tok *dict;
+ uint8_t msg_class;
+
+ ndo->ndo_protocol = "m3ua";
+ /* size includes the header */
+ if (size < sizeof(struct m3ua_common_header))
+ goto invalid;
+ ND_TCHECK_SIZE(hdr);
+ if (GET_U_1(hdr->v) != M3UA_REL_1_0)
+ return;
+
+ msg_class = GET_U_1(hdr->msg_class);
+ dict = uint2tokary(m3ua_msgc2tokary, msg_class);
+
+ ND_PRINT("\n\t\t%s", tok2str(MessageClasses, "Unknown message class %i", msg_class));
+ if (dict != NULL)
+ ND_PRINT(" %s Message",
+ tok2str(dict, "Unknown (0x%02x)", GET_U_1(hdr->msg_type)));
+
+ if (size != GET_BE_U_4(hdr->len))
+ ND_PRINT("\n\t\t\t@@@@@@ Corrupted length %u of message @@@@@@",
+ GET_BE_U_4(hdr->len));
+ else
+ m3ua_tags_print(ndo, buf + sizeof(struct m3ua_common_header),
+ GET_BE_U_4(hdr->len) - sizeof(struct m3ua_common_header));
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(buf, size);
+}
+
diff --git a/print-macsec.c b/print-macsec.c
new file mode 100644
index 0000000..607f696
--- /dev/null
+++ b/print-macsec.c
@@ -0,0 +1,256 @@
+/* Copyright (c) 2017, Sabrina Dubroca <sd@queasysnail.net>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. The names of the authors may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: MACsec printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "ethertype.h"
+#include "extract.h"
+
+#define MACSEC_DEFAULT_ICV_LEN 16
+
+/* Header format (SecTAG), following an Ethernet header
+ * IEEE 802.1AE-2006 9.3
+ *
+ * +---------------------------------+----------------+----------------+
+ * | (MACsec ethertype) | TCI_AN | SL |
+ * +---------------------------------+----------------+----------------+
+ * | Packet Number |
+ * +-------------------------------------------------------------------+
+ * | Secure Channel Identifier |
+ * | (optional) |
+ * +-------------------------------------------------------------------+
+ *
+ * MACsec ethertype = 0x88e5
+ * TCI: Tag Control Information, set of flags
+ * AN: association number, 2 bits
+ * SL (short length): 6-bit length of the protected payload, if < 48
+ * Packet Number: 32-bits packet identifier
+ * Secure Channel Identifier: 64-bit unique identifier, usually
+ * composed of a MAC address + 16-bit port number
+ */
+struct macsec_sectag {
+ nd_uint8_t tci_an;
+ nd_uint8_t short_length;
+ nd_uint32_t packet_number;
+ nd_uint8_t secure_channel_id[8]; /* optional */
+};
+
+/* IEEE 802.1AE-2006 9.5 */
+#define MACSEC_TCI_VERSION 0x80
+#define MACSEC_TCI_ES 0x40 /* end station */
+#define MACSEC_TCI_SC 0x20 /* SCI present */
+#define MACSEC_TCI_SCB 0x10 /* epon */
+#define MACSEC_TCI_E 0x08 /* encryption */
+#define MACSEC_TCI_C 0x04 /* changed text */
+#define MACSEC_AN_MASK 0x03 /* association number */
+#define MACSEC_TCI_FLAGS (MACSEC_TCI_ES | MACSEC_TCI_SC | MACSEC_TCI_SCB | MACSEC_TCI_E | MACSEC_TCI_C)
+#define MACSEC_TCI_CONFID (MACSEC_TCI_E | MACSEC_TCI_C)
+#define MACSEC_SL_MASK 0x3F /* short length */
+
+#define MACSEC_SECTAG_LEN_NOSCI 6 /* length of MACsec header without SCI */
+#define MACSEC_SECTAG_LEN_SCI 14 /* length of MACsec header with SCI */
+
+#define SCI_FMT "%016" PRIx64
+
+static const struct tok macsec_flag_values[] = {
+ { MACSEC_TCI_E, "E" },
+ { MACSEC_TCI_C, "C" },
+ { MACSEC_TCI_ES, "S" },
+ { MACSEC_TCI_SCB, "B" },
+ { MACSEC_TCI_SC, "I" },
+ { 0, NULL }
+};
+
+static void macsec_print_header(netdissect_options *ndo,
+ const struct macsec_sectag *sectag,
+ u_int short_length)
+{
+ ND_PRINT("an %u, pn %u, flags %s",
+ GET_U_1(sectag->tci_an) & MACSEC_AN_MASK,
+ GET_BE_U_4(sectag->packet_number),
+ bittok2str_nosep(macsec_flag_values, "none",
+ GET_U_1(sectag->tci_an) & MACSEC_TCI_FLAGS));
+
+ if (short_length != 0)
+ ND_PRINT(", sl %u", short_length);
+
+ if (GET_U_1(sectag->tci_an) & MACSEC_TCI_SC)
+ ND_PRINT(", sci " SCI_FMT, GET_BE_U_8(sectag->secure_channel_id));
+
+ ND_PRINT(", ");
+}
+
+/* returns < 0 iff the packet can be decoded completely */
+int macsec_print(netdissect_options *ndo, const u_char **bp,
+ u_int *lengthp, u_int *caplenp, u_int *hdrlenp,
+ const struct lladdr_info *src, const struct lladdr_info *dst)
+{
+ const char *save_protocol;
+ const u_char *p = *bp;
+ u_int length = *lengthp;
+ u_int caplen = *caplenp;
+ u_int hdrlen = *hdrlenp;
+ const struct macsec_sectag *sectag = (const struct macsec_sectag *)p;
+ u_int sectag_len;
+ u_int short_length;
+
+ save_protocol = ndo->ndo_protocol;
+ ndo->ndo_protocol = "macsec";
+
+ /* we need the full MACsec header in the capture */
+ if (caplen < MACSEC_SECTAG_LEN_NOSCI) {
+ nd_print_trunc(ndo);
+ ndo->ndo_protocol = save_protocol;
+ return hdrlen + caplen;
+ }
+ if (length < MACSEC_SECTAG_LEN_NOSCI) {
+ nd_print_trunc(ndo);
+ ndo->ndo_protocol = save_protocol;
+ return hdrlen + caplen;
+ }
+
+ if (GET_U_1(sectag->tci_an) & MACSEC_TCI_SC) {
+ sectag_len = MACSEC_SECTAG_LEN_SCI;
+ if (caplen < MACSEC_SECTAG_LEN_SCI) {
+ nd_print_trunc(ndo);
+ ndo->ndo_protocol = save_protocol;
+ return hdrlen + caplen;
+ }
+ if (length < MACSEC_SECTAG_LEN_SCI) {
+ nd_print_trunc(ndo);
+ ndo->ndo_protocol = save_protocol;
+ return hdrlen + caplen;
+ }
+ } else
+ sectag_len = MACSEC_SECTAG_LEN_NOSCI;
+
+ if ((GET_U_1(sectag->short_length) & ~MACSEC_SL_MASK) != 0 ||
+ GET_U_1(sectag->tci_an) & MACSEC_TCI_VERSION) {
+ nd_print_invalid(ndo);
+ ndo->ndo_protocol = save_protocol;
+ return hdrlen + caplen;
+ }
+
+ short_length = GET_U_1(sectag->short_length) & MACSEC_SL_MASK;
+ if (ndo->ndo_eflag)
+ macsec_print_header(ndo, sectag, short_length);
+
+ /* Skip the MACsec header. */
+ *bp += sectag_len;
+ *hdrlenp += sectag_len;
+
+ /* Remove it from the lengths, as it's been processed. */
+ *lengthp -= sectag_len;
+ *caplenp -= sectag_len;
+
+ if ((GET_U_1(sectag->tci_an) & MACSEC_TCI_CONFID)) {
+ /*
+ * The payload is encrypted. Print link-layer
+ * information, if it hasn't already been printed.
+ */
+ if (!ndo->ndo_eflag) {
+ /*
+ * Nobody printed the link-layer addresses,
+ * so print them, if we have any.
+ */
+ if (src != NULL && dst != NULL) {
+ ND_PRINT("%s > %s ",
+ (src->addr_string)(ndo, src->addr),
+ (dst->addr_string)(ndo, dst->addr));
+ }
+
+ ND_PRINT("802.1AE MACsec, ");
+
+ /*
+ * Print the MACsec header.
+ */
+ macsec_print_header(ndo, sectag, short_length);
+ }
+
+ /*
+ * Tell our caller it can't be dissected.
+ */
+ ndo->ndo_protocol = save_protocol;
+ return 0;
+ }
+
+ /*
+ * The payload isn't encrypted; remove the
+ * ICV length from the lengths, so our caller
+ * doesn't treat it as payload.
+ */
+ if (*lengthp < MACSEC_DEFAULT_ICV_LEN) {
+ nd_print_trunc(ndo);
+ ndo->ndo_protocol = save_protocol;
+ return hdrlen + caplen;
+ }
+ if (*caplenp < MACSEC_DEFAULT_ICV_LEN) {
+ nd_print_trunc(ndo);
+ ndo->ndo_protocol = save_protocol;
+ return hdrlen + caplen;
+ }
+ *lengthp -= MACSEC_DEFAULT_ICV_LEN;
+ *caplenp -= MACSEC_DEFAULT_ICV_LEN;
+ /*
+ * Update the snapend thus the ICV field is not in the payload for
+ * the caller.
+ * The ICV (Integrity Check Value) is at the end of the frame, after
+ * the secure data.
+ */
+ ndo->ndo_snapend -= MACSEC_DEFAULT_ICV_LEN;
+
+ /*
+ * If the SL field is non-zero, then it's the length of the
+ * Secure Data; otherwise, the Secure Data is what's left
+ * ver after the MACsec header and ICV are removed.
+ */
+ if (short_length != 0) {
+ /*
+ * If the short length is more than we *have*,
+ * that's an error.
+ */
+ if (short_length > *lengthp) {
+ nd_print_trunc(ndo);
+ ndo->ndo_protocol = save_protocol;
+ return hdrlen + caplen;
+ }
+ if (short_length > *caplenp) {
+ nd_print_trunc(ndo);
+ ndo->ndo_protocol = save_protocol;
+ return hdrlen + caplen;
+ }
+ if (*lengthp > short_length)
+ *lengthp = short_length;
+ if (*caplenp > short_length)
+ *caplenp = short_length;
+ }
+
+ ndo->ndo_protocol = save_protocol;
+ return -1;
+}
diff --git a/print-mobile.c b/print-mobile.c
new file mode 100644
index 0000000..528da79
--- /dev/null
+++ b/print-mobile.c
@@ -0,0 +1,104 @@
+/* $NetBSD: print-mobile.c,v 1.2 1998/09/30 08:57:01 hwr Exp $ */
+
+/*
+ * (c) 1998 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Heiko W.Rupp <hwr@pilhuhn.de>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: IPv4 mobility printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#define MOBILE_SIZE (8)
+
+struct mobile_ip {
+ nd_uint16_t proto;
+ nd_uint16_t hcheck;
+ nd_uint32_t odst;
+ nd_uint32_t osrc;
+};
+
+#define OSRC_PRES 0x0080 /* old source is present */
+
+/*
+ * Deencapsulate and print a mobile-tunneled IP datagram
+ */
+void
+mobile_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const struct mobile_ip *mob;
+ struct cksum_vec vec[1];
+ u_short proto,crc;
+ u_char osp =0; /* old source address present */
+
+ ndo->ndo_protocol = "mobile";
+ mob = (const struct mobile_ip *)bp;
+
+ if (length < MOBILE_SIZE || !ND_TTEST_SIZE(mob)) {
+ nd_print_trunc(ndo);
+ return;
+ }
+ ND_PRINT("mobile: ");
+
+ proto = GET_BE_U_2(mob->proto);
+ crc = GET_BE_U_2(mob->hcheck);
+ if (proto & OSRC_PRES) {
+ osp=1;
+ }
+
+ if (osp) {
+ ND_PRINT("[S] ");
+ if (ndo->ndo_vflag)
+ ND_PRINT("%s ", GET_IPADDR_STRING(mob->osrc));
+ } else {
+ ND_PRINT("[] ");
+ }
+ if (ndo->ndo_vflag) {
+ ND_PRINT("> %s ", GET_IPADDR_STRING(mob->odst));
+ ND_PRINT("(oproto=%u)", proto>>8);
+ }
+ vec[0].ptr = (const uint8_t *)(const void *)mob;
+ vec[0].len = osp ? 12 : 8;
+ if (in_cksum(vec, 1)!=0) {
+ ND_PRINT(" (bad checksum %u)", crc);
+ }
+}
diff --git a/print-mobility.c b/print-mobility.c
new file mode 100644
index 0000000..55340ca
--- /dev/null
+++ b/print-mobility.c
@@ -0,0 +1,334 @@
+/*
+ * Copyright (C) 2002 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* \summary: IPv6 mobility printer */
+/* RFC 3775 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip6.h"
+
+
+/* Mobility header */
+struct ip6_mobility {
+ nd_uint8_t ip6m_pproto; /* following payload protocol (for PG) */
+ nd_uint8_t ip6m_len; /* length in units of 8 octets */
+ nd_uint8_t ip6m_type; /* message type */
+ nd_uint8_t reserved; /* reserved */
+ nd_uint16_t ip6m_cksum; /* sum of IPv6 pseudo-header and MH */
+ union {
+ nd_uint16_t ip6m_un_data16[1]; /* type-specific field */
+ nd_uint8_t ip6m_un_data8[2]; /* type-specific field */
+ } ip6m_dataun;
+};
+
+#define ip6m_data16 ip6m_dataun.ip6m_un_data16
+#define ip6m_data8 ip6m_dataun.ip6m_un_data8
+
+#define IP6M_MINLEN 8
+
+/* https://www.iana.org/assignments/mobility-parameters/mobility-parameters.xhtml */
+
+/* message type */
+#define IP6M_BINDING_REQUEST 0 /* Binding Refresh Request */
+#define IP6M_HOME_TEST_INIT 1 /* Home Test Init */
+#define IP6M_CAREOF_TEST_INIT 2 /* Care-of Test Init */
+#define IP6M_HOME_TEST 3 /* Home Test */
+#define IP6M_CAREOF_TEST 4 /* Care-of Test */
+#define IP6M_BINDING_UPDATE 5 /* Binding Update */
+#define IP6M_BINDING_ACK 6 /* Binding Acknowledgement */
+#define IP6M_BINDING_ERROR 7 /* Binding Error */
+#define IP6M_MAX 7
+
+static const struct tok ip6m_str[] = {
+ { IP6M_BINDING_REQUEST, "BRR" },
+ { IP6M_HOME_TEST_INIT, "HoTI" },
+ { IP6M_CAREOF_TEST_INIT, "CoTI" },
+ { IP6M_HOME_TEST, "HoT" },
+ { IP6M_CAREOF_TEST, "CoT" },
+ { IP6M_BINDING_UPDATE, "BU" },
+ { IP6M_BINDING_ACK, "BA" },
+ { IP6M_BINDING_ERROR, "BE" },
+ { 0, NULL }
+};
+
+static const unsigned ip6m_hdrlen[IP6M_MAX + 1] = {
+ IP6M_MINLEN, /* IP6M_BINDING_REQUEST */
+ IP6M_MINLEN + 8, /* IP6M_HOME_TEST_INIT */
+ IP6M_MINLEN + 8, /* IP6M_CAREOF_TEST_INIT */
+ IP6M_MINLEN + 16, /* IP6M_HOME_TEST */
+ IP6M_MINLEN + 16, /* IP6M_CAREOF_TEST */
+ IP6M_MINLEN + 4, /* IP6M_BINDING_UPDATE */
+ IP6M_MINLEN + 4, /* IP6M_BINDING_ACK */
+ IP6M_MINLEN + 16, /* IP6M_BINDING_ERROR */
+};
+
+/* Mobility Header Options */
+#define IP6MOPT_MINLEN 2
+#define IP6MOPT_PAD1 0x0 /* Pad1 */
+#define IP6MOPT_PADN 0x1 /* PadN */
+#define IP6MOPT_REFRESH 0x2 /* Binding Refresh Advice */
+#define IP6MOPT_REFRESH_MINLEN 4
+#define IP6MOPT_ALTCOA 0x3 /* Alternate Care-of Address */
+#define IP6MOPT_ALTCOA_MINLEN 18
+#define IP6MOPT_NONCEID 0x4 /* Nonce Indices */
+#define IP6MOPT_NONCEID_MINLEN 6
+#define IP6MOPT_AUTH 0x5 /* Binding Authorization Data */
+#define IP6MOPT_AUTH_MINLEN 12
+
+static const struct tok ip6m_binding_update_bits [] = {
+ { 0x08, "A" },
+ { 0x04, "H" },
+ { 0x02, "L" },
+ { 0x01, "K" },
+ { 0, NULL }
+};
+
+static int
+mobility_opt_print(netdissect_options *ndo,
+ const u_char *bp, const unsigned len)
+{
+ unsigned i, optlen;
+
+ for (i = 0; i < len; i += optlen) {
+ if (GET_U_1(bp + i) == IP6MOPT_PAD1)
+ optlen = 1;
+ else {
+ if (i + 1 < len) {
+ optlen = GET_U_1(bp + i + 1) + 2;
+ }
+ else
+ goto trunc;
+ }
+ if (i + optlen > len)
+ goto trunc;
+ ND_TCHECK_1(bp + i + optlen);
+
+ switch (GET_U_1(bp + i)) {
+ case IP6MOPT_PAD1:
+ ND_PRINT("(pad1)");
+ break;
+ case IP6MOPT_PADN:
+ if (len - i < IP6MOPT_MINLEN) {
+ ND_PRINT("(padn: trunc)");
+ goto trunc;
+ }
+ ND_PRINT("(padn)");
+ break;
+ case IP6MOPT_REFRESH:
+ if (len - i < IP6MOPT_REFRESH_MINLEN) {
+ ND_PRINT("(refresh: trunc)");
+ goto trunc;
+ }
+ /* units of 4 secs */
+ ND_PRINT("(refresh: %u)",
+ GET_BE_U_2(bp + i + 2) << 2);
+ break;
+ case IP6MOPT_ALTCOA:
+ if (len - i < IP6MOPT_ALTCOA_MINLEN) {
+ ND_PRINT("(altcoa: trunc)");
+ goto trunc;
+ }
+ ND_PRINT("(alt-CoA: %s)", GET_IP6ADDR_STRING(bp + i + 2));
+ break;
+ case IP6MOPT_NONCEID:
+ if (len - i < IP6MOPT_NONCEID_MINLEN) {
+ ND_PRINT("(ni: trunc)");
+ goto trunc;
+ }
+ ND_PRINT("(ni: ho=0x%04x co=0x%04x)",
+ GET_BE_U_2(bp + i + 2),
+ GET_BE_U_2(bp + i + 4));
+ break;
+ case IP6MOPT_AUTH:
+ if (len - i < IP6MOPT_AUTH_MINLEN) {
+ ND_PRINT("(auth: trunc)");
+ goto trunc;
+ }
+ ND_PRINT("(auth)");
+ break;
+ default:
+ if (len - i < IP6MOPT_MINLEN) {
+ ND_PRINT("(sopt_type %u: trunc)",
+ GET_U_1(bp + i));
+ goto trunc;
+ }
+ ND_PRINT("(type-0x%02x: len=%u)", GET_U_1(bp + i),
+ GET_U_1(bp + i + 1));
+ break;
+ }
+ }
+ return 0;
+
+trunc:
+ return 1;
+}
+
+/*
+ * Mobility Header
+ */
+int
+mobility_print(netdissect_options *ndo,
+ const u_char *bp, const u_char *bp2 _U_)
+{
+ const struct ip6_mobility *mh;
+ const u_char *ep;
+ unsigned mhlen, hlen;
+ uint8_t type;
+
+ ndo->ndo_protocol = "mobility";
+ mh = (const struct ip6_mobility *)bp;
+
+ /* 'ep' points to the end of available data. */
+ ep = ndo->ndo_snapend;
+
+ if (!ND_TTEST_1(mh->ip6m_len)) {
+ /*
+ * There's not enough captured data to include the
+ * mobility header length.
+ *
+ * Our caller expects us to return the length, however,
+ * so return a value that will run to the end of the
+ * captured data.
+ *
+ * XXX - "ip6_print()" doesn't do anything with the
+ * returned length, however, as it breaks out of the
+ * header-processing loop.
+ */
+ mhlen = (unsigned)(ep - bp);
+ goto trunc;
+ }
+ mhlen = (GET_U_1(mh->ip6m_len) + 1) << 3;
+
+ /* XXX ip6m_cksum */
+
+ type = GET_U_1(mh->ip6m_type);
+ if (type <= IP6M_MAX && mhlen < ip6m_hdrlen[type]) {
+ ND_PRINT("(header length %u is too small for type %u)", mhlen, type);
+ goto trunc;
+ }
+ ND_PRINT("mobility: %s", tok2str(ip6m_str, "type-#%u", type));
+ switch (type) {
+ case IP6M_BINDING_REQUEST:
+ hlen = IP6M_MINLEN;
+ break;
+ case IP6M_HOME_TEST_INIT:
+ case IP6M_CAREOF_TEST_INIT:
+ hlen = IP6M_MINLEN;
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" %s Init Cookie=%08x:%08x",
+ type == IP6M_HOME_TEST_INIT ? "Home" : "Care-of",
+ GET_BE_U_4(bp + hlen),
+ GET_BE_U_4(bp + hlen + 4));
+ }
+ hlen += 8;
+ break;
+ case IP6M_HOME_TEST:
+ case IP6M_CAREOF_TEST:
+ ND_PRINT(" nonce id=0x%x", GET_BE_U_2(mh->ip6m_data16[0]));
+ hlen = IP6M_MINLEN;
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" %s Init Cookie=%08x:%08x",
+ type == IP6M_HOME_TEST ? "Home" : "Care-of",
+ GET_BE_U_4(bp + hlen),
+ GET_BE_U_4(bp + hlen + 4));
+ }
+ hlen += 8;
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" %s Keygen Token=%08x:%08x",
+ type == IP6M_HOME_TEST ? "Home" : "Care-of",
+ GET_BE_U_4(bp + hlen),
+ GET_BE_U_4(bp + hlen + 4));
+ }
+ hlen += 8;
+ break;
+ case IP6M_BINDING_UPDATE:
+ {
+ int bits;
+ ND_PRINT(" seq#=%u", GET_BE_U_2(mh->ip6m_data16[0]));
+ hlen = IP6M_MINLEN;
+ ND_TCHECK_2(bp + hlen);
+ bits = (GET_U_1(bp + hlen) & 0xf0) >> 4;
+ if (bits) {
+ ND_PRINT(" ");
+ ND_PRINT("%s",
+ bittok2str_nosep(ip6m_binding_update_bits,
+ "bits-#0x%x", bits));
+ }
+ /* Reserved (4bits) */
+ hlen += 1;
+ /* Reserved (8bits) */
+ hlen += 1;
+ /* units of 4 secs */
+ ND_PRINT(" lifetime=%u", GET_BE_U_2(bp + hlen) << 2);
+ hlen += 2;
+ break;
+ }
+ case IP6M_BINDING_ACK:
+ ND_PRINT(" status=%u", GET_U_1(mh->ip6m_data8[0]));
+ if (GET_U_1(mh->ip6m_data8[1]) & 0x80)
+ ND_PRINT(" K");
+ /* Reserved (7bits) */
+ hlen = IP6M_MINLEN;
+ ND_PRINT(" seq#=%u", GET_BE_U_2(bp + hlen));
+ hlen += 2;
+ /* units of 4 secs */
+ ND_PRINT(" lifetime=%u", GET_BE_U_2(bp + hlen) << 2);
+ hlen += 2;
+ break;
+ case IP6M_BINDING_ERROR:
+ ND_PRINT(" status=%u", GET_U_1(mh->ip6m_data8[0]));
+ /* Reserved */
+ hlen = IP6M_MINLEN;
+ ND_PRINT(" homeaddr %s", GET_IP6ADDR_STRING(bp + hlen));
+ hlen += 16;
+ break;
+ default:
+ ND_PRINT(" len=%u", GET_U_1(mh->ip6m_len));
+ return(mhlen);
+ break;
+ }
+ if (ndo->ndo_vflag)
+ if (mobility_opt_print(ndo, bp + hlen, mhlen - hlen))
+ goto trunc;
+
+ return(mhlen);
+
+ trunc:
+ nd_print_trunc(ndo);
+ return(-1);
+}
diff --git a/print-mpcp.c b/print-mpcp.c
new file mode 100644
index 0000000..4ba873b
--- /dev/null
+++ b/print-mpcp.c
@@ -0,0 +1,235 @@
+/*
+ * Copyright (c) 1998-2006 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+/* \summary: IEEE 802.3ah Multi-Point Control Protocol (MPCP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+struct mpcp_common_header_t {
+ nd_uint16_t opcode;
+ nd_uint32_t timestamp;
+};
+
+#define MPCP_OPCODE_PAUSE 0x0001
+#define MPCP_OPCODE_GATE 0x0002
+#define MPCP_OPCODE_REPORT 0x0003
+#define MPCP_OPCODE_REG_REQ 0x0004
+#define MPCP_OPCODE_REG 0x0005
+#define MPCP_OPCODE_REG_ACK 0x0006
+
+static const struct tok mpcp_opcode_values[] = {
+ { MPCP_OPCODE_PAUSE, "Pause" },
+ { MPCP_OPCODE_GATE, "Gate" },
+ { MPCP_OPCODE_REPORT, "Report" },
+ { MPCP_OPCODE_REG_REQ, "Register Request" },
+ { MPCP_OPCODE_REG, "Register" },
+ { MPCP_OPCODE_REG_ACK, "Register ACK" },
+ { 0, NULL}
+};
+
+#define MPCP_GRANT_NUMBER_LEN 1
+#define MPCP_GRANT_NUMBER_MASK 0x7
+static const struct tok mpcp_grant_flag_values[] = {
+ { 0x08, "Discovery" },
+ { 0x10, "Force Grant #1" },
+ { 0x20, "Force Grant #2" },
+ { 0x40, "Force Grant #3" },
+ { 0x80, "Force Grant #4" },
+ { 0, NULL}
+};
+
+struct mpcp_grant_t {
+ nd_uint32_t starttime;
+ nd_uint16_t duration;
+};
+
+struct mpcp_reg_req_t {
+ nd_uint8_t flags;
+ nd_uint8_t pending_grants;
+};
+
+
+static const struct tok mpcp_reg_req_flag_values[] = {
+ { 1, "Register" },
+ { 3, "De-Register" },
+ { 0, NULL}
+};
+
+struct mpcp_reg_t {
+ nd_uint16_t assigned_port;
+ nd_uint8_t flags;
+ nd_uint16_t sync_time;
+ nd_uint8_t echoed_pending_grants;
+};
+
+static const struct tok mpcp_reg_flag_values[] = {
+ { 1, "Re-Register" },
+ { 2, "De-Register" },
+ { 3, "ACK" },
+ { 4, "NACK" },
+ { 0, NULL}
+};
+
+#define MPCP_REPORT_QUEUESETS_LEN 1
+#define MPCP_REPORT_REPORTBITMAP_LEN 1
+static const struct tok mpcp_report_bitmap_values[] = {
+ { 0x01, "Q0" },
+ { 0x02, "Q1" },
+ { 0x04, "Q2" },
+ { 0x08, "Q3" },
+ { 0x10, "Q4" },
+ { 0x20, "Q5" },
+ { 0x40, "Q6" },
+ { 0x80, "Q7" },
+ { 0, NULL}
+};
+
+struct mpcp_reg_ack_t {
+ nd_uint8_t flags;
+ nd_uint16_t echoed_assigned_port;
+ nd_uint16_t echoed_sync_time;
+};
+
+static const struct tok mpcp_reg_ack_flag_values[] = {
+ { 0, "NACK" },
+ { 1, "ACK" },
+ { 0, NULL}
+};
+
+void
+mpcp_print(netdissect_options *ndo, const u_char *pptr, u_int length)
+{
+ const struct mpcp_common_header_t *mpcp_common_header;
+ const struct mpcp_reg_req_t *mpcp_reg_req;
+ const struct mpcp_reg_t *mpcp_reg;
+ const struct mpcp_reg_ack_t *mpcp_reg_ack;
+
+
+ const u_char *tptr;
+ uint16_t opcode;
+ uint32_t timestamp;
+ uint8_t grant_numbers, grant;
+ uint8_t queue_sets, queue_set, report_bitmap, report;
+
+ ndo->ndo_protocol = "mpcp";
+ tptr=pptr;
+ mpcp_common_header = (const struct mpcp_common_header_t *)pptr;
+
+ opcode = GET_BE_U_2(mpcp_common_header->opcode);
+ timestamp = GET_BE_U_4(mpcp_common_header->timestamp);
+ ND_PRINT("MPCP, Opcode %s", tok2str(mpcp_opcode_values, "Unknown (%u)", opcode));
+ if (opcode != MPCP_OPCODE_PAUSE) {
+ ND_PRINT(", Timestamp %u ticks", timestamp);
+ }
+ ND_PRINT(", length %u", length);
+
+ if (!ndo->ndo_vflag)
+ return;
+
+ tptr += sizeof(struct mpcp_common_header_t);
+
+ switch (opcode) {
+ case MPCP_OPCODE_PAUSE:
+ break;
+
+ case MPCP_OPCODE_GATE:
+ grant_numbers = GET_U_1(tptr) & MPCP_GRANT_NUMBER_MASK;
+ ND_PRINT("\n\tGrant Numbers %u, Flags [ %s ]",
+ grant_numbers,
+ bittok2str(mpcp_grant_flag_values,
+ "?",
+ GET_U_1(tptr) & ~MPCP_GRANT_NUMBER_MASK));
+ tptr++;
+
+ for (grant = 1; grant <= grant_numbers; grant++) {
+ const struct mpcp_grant_t *mpcp_grant = (const struct mpcp_grant_t *)tptr;
+ ND_PRINT("\n\tGrant #%u, Start-Time %u ticks, duration %u ticks",
+ grant,
+ GET_BE_U_4(mpcp_grant->starttime),
+ GET_BE_U_2(mpcp_grant->duration));
+ tptr += sizeof(struct mpcp_grant_t);
+ }
+
+ ND_PRINT("\n\tSync-Time %u ticks", GET_BE_U_2(tptr));
+ break;
+
+
+ case MPCP_OPCODE_REPORT:
+ queue_sets = GET_U_1(tptr);
+ tptr+=MPCP_REPORT_QUEUESETS_LEN;
+ ND_PRINT("\n\tTotal Queue-Sets %u", queue_sets);
+
+ for (queue_set = 1; queue_set < queue_sets; queue_set++) {
+ report_bitmap = GET_U_1(tptr);
+ ND_PRINT("\n\t Queue-Set #%u, Report-Bitmap [ %s ]",
+ queue_sets,
+ bittok2str(mpcp_report_bitmap_values, "Unknown", report_bitmap));
+ tptr++;
+
+ report=1;
+ while (report_bitmap != 0) {
+ if (report_bitmap & 1) {
+ ND_PRINT("\n\t Q%u Report, Duration %u ticks",
+ report,
+ GET_BE_U_2(tptr));
+ tptr += 2;
+ }
+ report++;
+ report_bitmap = report_bitmap >> 1;
+ }
+ }
+ break;
+
+ case MPCP_OPCODE_REG_REQ:
+ mpcp_reg_req = (const struct mpcp_reg_req_t *)tptr;
+ ND_PRINT("\n\tFlags [ %s ], Pending-Grants %u",
+ bittok2str(mpcp_reg_req_flag_values, "Reserved", GET_U_1(mpcp_reg_req->flags)),
+ GET_U_1(mpcp_reg_req->pending_grants));
+ break;
+
+ case MPCP_OPCODE_REG:
+ mpcp_reg = (const struct mpcp_reg_t *)tptr;
+ ND_PRINT("\n\tAssigned-Port %u, Flags [ %s ]"
+ "\n\tSync-Time %u ticks, Echoed-Pending-Grants %u",
+ GET_BE_U_2(mpcp_reg->assigned_port),
+ bittok2str(mpcp_reg_flag_values, "Reserved", GET_U_1(mpcp_reg->flags)),
+ GET_BE_U_2(mpcp_reg->sync_time),
+ GET_U_1(mpcp_reg->echoed_pending_grants));
+ break;
+
+ case MPCP_OPCODE_REG_ACK:
+ mpcp_reg_ack = (const struct mpcp_reg_ack_t *)tptr;
+ ND_PRINT("\n\tEchoed-Assigned-Port %u, Flags [ %s ]"
+ "\n\tEchoed-Sync-Time %u ticks",
+ GET_BE_U_2(mpcp_reg_ack->echoed_assigned_port),
+ bittok2str(mpcp_reg_ack_flag_values, "Reserved", GET_U_1(mpcp_reg_ack->flags)),
+ GET_BE_U_2(mpcp_reg_ack->echoed_sync_time));
+ break;
+
+ default:
+ /* unknown opcode - hexdump for now */
+ print_unknown_data(ndo,pptr, "\n\t", length);
+ break;
+ }
+}
diff --git a/print-mpls.c b/print-mpls.c
new file mode 100644
index 0000000..c9be496
--- /dev/null
+++ b/print-mpls.c
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2001 WIDE Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* \summary: Multi-Protocol Label Switching (MPLS) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "mpls.h"
+
+static const char *mpls_labelname[] = {
+/*0*/ "IPv4 explicit NULL", "router alert", "IPv6 explicit NULL",
+ "implicit NULL", "rsvd",
+/*5*/ "rsvd", "rsvd", "rsvd", "rsvd", "rsvd",
+/*10*/ "rsvd", "rsvd", "rsvd", "rsvd", "rsvd",
+/*15*/ "rsvd",
+};
+
+enum mpls_packet_type {
+ PT_UNKNOWN,
+ PT_IPV4,
+ PT_IPV6,
+ PT_OSI
+};
+
+/*
+ * RFC3032: MPLS label stack encoding
+ */
+void
+mpls_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const u_char *p;
+ uint32_t label_entry;
+ uint16_t label_stack_depth = 0;
+ uint8_t first;
+ enum mpls_packet_type pt = PT_UNKNOWN;
+
+ ndo->ndo_protocol = "mpls";
+ p = bp;
+ nd_print_protocol_caps(ndo);
+ do {
+ if (length < sizeof(label_entry))
+ goto invalid;
+ label_entry = GET_BE_U_4(p);
+ ND_PRINT("%s(label %u",
+ (label_stack_depth && ndo->ndo_vflag) ? "\n\t" : " ",
+ MPLS_LABEL(label_entry));
+ label_stack_depth++;
+ if (ndo->ndo_vflag &&
+ MPLS_LABEL(label_entry) < sizeof(mpls_labelname) / sizeof(mpls_labelname[0]))
+ ND_PRINT(" (%s)", mpls_labelname[MPLS_LABEL(label_entry)]);
+ ND_PRINT(", tc %u", MPLS_TC(label_entry));
+ if (MPLS_STACK(label_entry))
+ ND_PRINT(", [S]");
+ ND_PRINT(", ttl %u)", MPLS_TTL(label_entry));
+
+ p += sizeof(label_entry);
+ length -= sizeof(label_entry);
+ } while (!MPLS_STACK(label_entry));
+
+ /*
+ * Try to figure out the packet type.
+ */
+ switch (MPLS_LABEL(label_entry)) {
+
+ case 0: /* IPv4 explicit NULL label */
+ case 3: /* IPv4 implicit NULL label */
+ pt = PT_IPV4;
+ break;
+
+ case 2: /* IPv6 explicit NULL label */
+ pt = PT_IPV6;
+ break;
+
+ default:
+ /*
+ * Generally there's no indication of protocol in MPLS label
+ * encoding.
+ *
+ * However, draft-hsmit-isis-aal5mux-00.txt describes a
+ * technique for encapsulating IS-IS and IP traffic on the
+ * same ATM virtual circuit; you look at the first payload
+ * byte to determine the network layer protocol, based on
+ * the fact that
+ *
+ * 1) the first byte of an IP header is 0x45-0x4f
+ * for IPv4 and 0x60-0x6f for IPv6;
+ *
+ * 2) the first byte of an OSI CLNP packet is 0x81,
+ * the first byte of an OSI ES-IS packet is 0x82,
+ * and the first byte of an OSI IS-IS packet is
+ * 0x83;
+ *
+ * so the network layer protocol can be inferred from the
+ * first byte of the packet, if the protocol is one of the
+ * ones listed above.
+ *
+ * Cisco sends control-plane traffic MPLS-encapsulated in
+ * this fashion.
+ */
+ if (length < 1) {
+ /* nothing to print */
+ return;
+ }
+ first = GET_U_1(p);
+ pt =
+ (first >= 0x45 && first <= 0x4f) ? PT_IPV4 :
+ (first >= 0x60 && first <= 0x6f) ? PT_IPV6 :
+ (first >= 0x81 && first <= 0x83) ? PT_OSI :
+ /* ok bail out - we did not figure out what it is*/
+ PT_UNKNOWN;
+ }
+
+ /*
+ * Print the payload.
+ */
+ switch (pt) {
+ case PT_UNKNOWN:
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, length);
+ break;
+
+ case PT_IPV4:
+ ND_PRINT(ndo->ndo_vflag ? "\n\t" : " ");
+ ip_print(ndo, p, length);
+ break;
+
+ case PT_IPV6:
+ ND_PRINT(ndo->ndo_vflag ? "\n\t" : " ");
+ ip6_print(ndo, p, length);
+ break;
+
+ case PT_OSI:
+ ND_PRINT(ndo->ndo_vflag ? "\n\t" : " ");
+ isoclns_print(ndo, p, length);
+ break;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(p, length);
+}
diff --git a/print-mptcp.c b/print-mptcp.c
new file mode 100644
index 0000000..7ffb1f5
--- /dev/null
+++ b/print-mptcp.c
@@ -0,0 +1,485 @@
+/**
+ * Copyright (c) 2012
+ *
+ * Gregory Detal <gregory.detal@uclouvain.be>
+ * Christoph Paasch <christoph.paasch@uclouvain.be>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the University nor of the Laboratory may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* \summary: Multipath TCP (MPTCP) printer */
+
+/* specification: RFC 6824 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+#include "tcp.h"
+
+#define MPTCP_SUB_CAPABLE 0x0
+#define MPTCP_SUB_JOIN 0x1
+#define MPTCP_SUB_DSS 0x2
+#define MPTCP_SUB_ADD_ADDR 0x3
+#define MPTCP_SUB_REMOVE_ADDR 0x4
+#define MPTCP_SUB_PRIO 0x5
+#define MPTCP_SUB_FAIL 0x6
+#define MPTCP_SUB_FCLOSE 0x7
+
+struct mptcp_option {
+ nd_uint8_t kind;
+ nd_uint8_t len;
+ nd_uint8_t sub_etc; /* subtype upper 4 bits, other stuff lower 4 bits */
+};
+
+#define MPTCP_OPT_SUBTYPE(sub_etc) (((sub_etc) >> 4) & 0xF)
+
+struct mp_capable {
+ nd_uint8_t kind;
+ nd_uint8_t len;
+ nd_uint8_t sub_ver;
+ nd_uint8_t flags;
+ nd_uint64_t sender_key;
+ nd_uint64_t receiver_key;
+};
+
+#define MP_CAPABLE_OPT_VERSION(sub_ver) (((sub_ver) >> 0) & 0xF)
+#define MP_CAPABLE_C 0x80
+#define MP_CAPABLE_S 0x01
+
+struct mp_join {
+ nd_uint8_t kind;
+ nd_uint8_t len;
+ nd_uint8_t sub_b;
+ nd_uint8_t addr_id;
+ union {
+ struct {
+ nd_uint32_t token;
+ nd_uint32_t nonce;
+ } syn;
+ struct {
+ nd_uint64_t mac;
+ nd_uint32_t nonce;
+ } synack;
+ struct {
+ nd_byte mac[20];
+ } ack;
+ } u;
+};
+
+#define MP_JOIN_B 0x01
+
+struct mp_dss {
+ nd_uint8_t kind;
+ nd_uint8_t len;
+ nd_uint8_t sub;
+ nd_uint8_t flags;
+};
+
+#define MP_DSS_F 0x10
+#define MP_DSS_m 0x08
+#define MP_DSS_M 0x04
+#define MP_DSS_a 0x02
+#define MP_DSS_A 0x01
+
+static const struct tok mptcp_addr_subecho_bits[] = {
+ { 0x6, "v0-ip6" },
+ { 0x4, "v0-ip4" },
+ { 0x1, "v1-echo" },
+ { 0x0, "v1" },
+ { 0, NULL }
+};
+
+struct mp_add_addr {
+ nd_uint8_t kind;
+ nd_uint8_t len;
+ nd_uint8_t sub_echo;
+ nd_uint8_t addr_id;
+ union {
+ struct {
+ nd_ipv4 addr;
+ nd_uint16_t port;
+ nd_uint64_t mac;
+ } v4;
+ struct {
+ nd_ipv4 addr;
+ nd_uint64_t mac;
+ } v4np;
+ struct {
+ nd_ipv6 addr;
+ nd_uint16_t port;
+ nd_uint64_t mac;
+ } v6;
+ struct {
+ nd_ipv6 addr;
+ nd_uint64_t mac;
+ } v6np;
+ } u;
+};
+
+struct mp_remove_addr {
+ nd_uint8_t kind;
+ nd_uint8_t len;
+ nd_uint8_t sub;
+ /* list of addr_id */
+ nd_uint8_t addrs_id[1];
+};
+
+struct mp_fail {
+ nd_uint8_t kind;
+ nd_uint8_t len;
+ nd_uint8_t sub;
+ nd_uint8_t resv;
+ nd_uint64_t data_seq;
+};
+
+struct mp_close {
+ nd_uint8_t kind;
+ nd_uint8_t len;
+ nd_uint8_t sub;
+ nd_uint8_t rsv;
+ nd_byte key[8];
+};
+
+struct mp_prio {
+ nd_uint8_t kind;
+ nd_uint8_t len;
+ nd_uint8_t sub_b;
+ nd_uint8_t addr_id;
+};
+
+#define MP_PRIO_B 0x01
+
+static int
+dummy_print(netdissect_options *ndo _U_,
+ const u_char *opt _U_, u_int opt_len _U_, u_char flags _U_)
+{
+ return 1;
+}
+
+static int
+mp_capable_print(netdissect_options *ndo,
+ const u_char *opt, u_int opt_len, u_char flags)
+{
+ const struct mp_capable *mpc = (const struct mp_capable *) opt;
+ uint8_t version;
+
+ if (!((opt_len == 12 || opt_len == 4) && flags & TH_SYN) &&
+ !((opt_len == 20 || opt_len == 22) && (flags & (TH_SYN | TH_ACK)) ==
+ TH_ACK))
+ return 0;
+
+ version = MP_CAPABLE_OPT_VERSION(GET_U_1(mpc->sub_ver));
+ switch (version) {
+ case 0: /* fall through */
+ case 1:
+ ND_PRINT(" v%u", version);
+ break;
+ default:
+ ND_PRINT(" Unknown Version (%u)", version);
+ return 1;
+ }
+
+ if (GET_U_1(mpc->flags) & MP_CAPABLE_C)
+ ND_PRINT(" csum");
+ if (opt_len == 12 || opt_len >= 20) {
+ ND_PRINT(" {0x%" PRIx64, GET_BE_U_8(mpc->sender_key));
+ if (opt_len >= 20)
+ ND_PRINT(",0x%" PRIx64, GET_BE_U_8(mpc->receiver_key));
+ ND_PRINT("}");
+ }
+ return 1;
+}
+
+static int
+mp_join_print(netdissect_options *ndo,
+ const u_char *opt, u_int opt_len, u_char flags)
+{
+ const struct mp_join *mpj = (const struct mp_join *) opt;
+
+ if (!(opt_len == 12 && (flags & TH_SYN)) &&
+ !(opt_len == 16 && (flags & (TH_SYN | TH_ACK)) == (TH_SYN | TH_ACK)) &&
+ !(opt_len == 24 && (flags & TH_ACK)))
+ return 0;
+
+ if (opt_len != 24) {
+ if (GET_U_1(mpj->sub_b) & MP_JOIN_B)
+ ND_PRINT(" backup");
+ ND_PRINT(" id %u", GET_U_1(mpj->addr_id));
+ }
+
+ switch (opt_len) {
+ case 12: /* SYN */
+ ND_PRINT(" token 0x%x" " nonce 0x%x",
+ GET_BE_U_4(mpj->u.syn.token),
+ GET_BE_U_4(mpj->u.syn.nonce));
+ break;
+ case 16: /* SYN/ACK */
+ ND_PRINT(" hmac 0x%" PRIx64 " nonce 0x%x",
+ GET_BE_U_8(mpj->u.synack.mac),
+ GET_BE_U_4(mpj->u.synack.nonce));
+ break;
+ case 24: {/* ACK */
+ size_t i;
+ ND_PRINT(" hmac 0x");
+ for (i = 0; i < sizeof(mpj->u.ack.mac); ++i)
+ ND_PRINT("%02x", mpj->u.ack.mac[i]);
+ }
+ default:
+ break;
+ }
+ return 1;
+}
+
+static int
+mp_dss_print(netdissect_options *ndo,
+ const u_char *opt, u_int opt_len, u_char flags)
+{
+ const struct mp_dss *mdss = (const struct mp_dss *) opt;
+ uint8_t mdss_flags;
+
+ /* We need the flags, at a minimum. */
+ if (opt_len < 4)
+ return 0;
+
+ if (flags & TH_SYN)
+ return 0;
+
+ mdss_flags = GET_U_1(mdss->flags);
+ if (mdss_flags & MP_DSS_F)
+ ND_PRINT(" fin");
+
+ opt += 4;
+ opt_len -= 4;
+ if (mdss_flags & MP_DSS_A) {
+ /* Ack present */
+ ND_PRINT(" ack ");
+ /*
+ * If the a flag is set, we have an 8-byte ack; if it's
+ * clear, we have a 4-byte ack.
+ */
+ if (mdss_flags & MP_DSS_a) {
+ if (opt_len < 8)
+ return 0;
+ ND_PRINT("%" PRIu64, GET_BE_U_8(opt));
+ opt += 8;
+ opt_len -= 8;
+ } else {
+ if (opt_len < 4)
+ return 0;
+ ND_PRINT("%u", GET_BE_U_4(opt));
+ opt += 4;
+ opt_len -= 4;
+ }
+ }
+
+ if (mdss_flags & MP_DSS_M) {
+ /*
+ * Data Sequence Number (DSN), Subflow Sequence Number (SSN),
+ * Data-Level Length present, and Checksum possibly present.
+ */
+ ND_PRINT(" seq ");
+ /*
+ * If the m flag is set, we have an 8-byte NDS; if it's clear,
+ * we have a 4-byte DSN.
+ */
+ if (mdss_flags & MP_DSS_m) {
+ if (opt_len < 8)
+ return 0;
+ ND_PRINT("%" PRIu64, GET_BE_U_8(opt));
+ opt += 8;
+ opt_len -= 8;
+ } else {
+ if (opt_len < 4)
+ return 0;
+ ND_PRINT("%u", GET_BE_U_4(opt));
+ opt += 4;
+ opt_len -= 4;
+ }
+ if (opt_len < 4)
+ return 0;
+ ND_PRINT(" subseq %u", GET_BE_U_4(opt));
+ opt += 4;
+ opt_len -= 4;
+ if (opt_len < 2)
+ return 0;
+ ND_PRINT(" len %u", GET_BE_U_2(opt));
+ opt += 2;
+ opt_len -= 2;
+
+ /*
+ * The Checksum is present only if negotiated.
+ * If there are at least 2 bytes left, process the next 2
+ * bytes as the Checksum.
+ */
+ if (opt_len >= 2) {
+ ND_PRINT(" csum 0x%x", GET_BE_U_2(opt));
+ opt_len -= 2;
+ }
+ }
+ if (opt_len != 0)
+ return 0;
+ return 1;
+}
+
+static int
+add_addr_print(netdissect_options *ndo,
+ const u_char *opt, u_int opt_len, u_char flags _U_)
+{
+ const struct mp_add_addr *add_addr = (const struct mp_add_addr *) opt;
+
+ if (!(opt_len == 8 || opt_len == 10 || opt_len == 16 || opt_len == 18 ||
+ opt_len == 20 || opt_len == 22 || opt_len == 28 || opt_len == 30))
+ return 0;
+
+ ND_PRINT(" %s",
+ tok2str(mptcp_addr_subecho_bits, "[bad version/echo]",
+ GET_U_1(add_addr->sub_echo) & 0xF));
+ ND_PRINT(" id %u", GET_U_1(add_addr->addr_id));
+ if (opt_len == 8 || opt_len == 10 || opt_len == 16 || opt_len == 18) {
+ ND_PRINT(" %s", GET_IPADDR_STRING(add_addr->u.v4.addr));
+ if (opt_len == 10 || opt_len == 18)
+ ND_PRINT(":%u", GET_BE_U_2(add_addr->u.v4.port));
+ if (opt_len == 16)
+ ND_PRINT(" hmac 0x%" PRIx64, GET_BE_U_8(add_addr->u.v4np.mac));
+ if (opt_len == 18)
+ ND_PRINT(" hmac 0x%" PRIx64, GET_BE_U_8(add_addr->u.v4.mac));
+ }
+
+ if (opt_len == 20 || opt_len == 22 || opt_len == 28 || opt_len == 30) {
+ ND_PRINT(" %s", GET_IP6ADDR_STRING(add_addr->u.v6.addr));
+ if (opt_len == 22 || opt_len == 30)
+ ND_PRINT(":%u", GET_BE_U_2(add_addr->u.v6.port));
+ if (opt_len == 28)
+ ND_PRINT(" hmac 0x%" PRIx64, GET_BE_U_8(add_addr->u.v6np.mac));
+ if (opt_len == 30)
+ ND_PRINT(" hmac 0x%" PRIx64, GET_BE_U_8(add_addr->u.v6.mac));
+ }
+
+ return 1;
+}
+
+static int
+remove_addr_print(netdissect_options *ndo,
+ const u_char *opt, u_int opt_len, u_char flags _U_)
+{
+ const struct mp_remove_addr *remove_addr = (const struct mp_remove_addr *) opt;
+ u_int i;
+
+ if (opt_len < 4)
+ return 0;
+
+ opt_len -= 3;
+ ND_PRINT(" id");
+ for (i = 0; i < opt_len; i++)
+ ND_PRINT(" %u", GET_U_1(remove_addr->addrs_id[i]));
+ return 1;
+}
+
+static int
+mp_prio_print(netdissect_options *ndo,
+ const u_char *opt, u_int opt_len, u_char flags _U_)
+{
+ const struct mp_prio *mpp = (const struct mp_prio *) opt;
+
+ if (opt_len != 3 && opt_len != 4)
+ return 0;
+
+ if (GET_U_1(mpp->sub_b) & MP_PRIO_B)
+ ND_PRINT(" backup");
+ else
+ ND_PRINT(" non-backup");
+ if (opt_len == 4)
+ ND_PRINT(" id %u", GET_U_1(mpp->addr_id));
+
+ return 1;
+}
+
+static int
+mp_fail_print(netdissect_options *ndo,
+ const u_char *opt, u_int opt_len, u_char flags _U_)
+{
+ if (opt_len != 12)
+ return 0;
+
+ ND_PRINT(" seq %" PRIu64, GET_BE_U_8(opt + 4));
+ return 1;
+}
+
+static int
+mp_fast_close_print(netdissect_options *ndo,
+ const u_char *opt, u_int opt_len, u_char flags _U_)
+{
+ if (opt_len != 12)
+ return 0;
+
+ ND_PRINT(" key 0x%" PRIx64, GET_BE_U_8(opt + 4));
+ return 1;
+}
+
+static const struct {
+ const char *name;
+ int (*print)(netdissect_options *, const u_char *, u_int, u_char);
+} mptcp_options[] = {
+ { "capable", mp_capable_print },
+ { "join", mp_join_print },
+ { "dss", mp_dss_print },
+ { "add-addr", add_addr_print },
+ { "rem-addr", remove_addr_print },
+ { "prio", mp_prio_print },
+ { "fail", mp_fail_print },
+ { "fast-close", mp_fast_close_print },
+ { "unknown", dummy_print },
+};
+
+int
+mptcp_print(netdissect_options *ndo,
+ const u_char *cp, u_int len, u_char flags)
+{
+ const struct mptcp_option *opt;
+ u_int subtype;
+
+ ndo->ndo_protocol = "mptcp";
+ if (len < 3)
+ return 0;
+
+ opt = (const struct mptcp_option *) cp;
+ subtype = MPTCP_OPT_SUBTYPE(GET_U_1(opt->sub_etc));
+ subtype = ND_MIN(subtype, MPTCP_SUB_FCLOSE + 1);
+
+ ND_PRINT(" %u", len);
+
+ ND_PRINT(" %s", mptcp_options[subtype].name);
+ return mptcp_options[subtype].print(ndo, cp, len, flags);
+}
diff --git a/print-msdp.c b/print-msdp.c
new file mode 100644
index 0000000..7845116
--- /dev/null
+++ b/print-msdp.c
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2001 William C. Fenner.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * The name of William C. Fenner may not be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Multicast Source Discovery Protocol (MSDP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#define MSDP_TYPE_MAX 7
+
+void
+msdp_print(netdissect_options *ndo, const u_char *sp, u_int length)
+{
+ unsigned int type, len;
+
+ ndo->ndo_protocol = "msdp";
+ ND_PRINT(": ");
+ nd_print_protocol(ndo);
+ /* See if we think we're at the beginning of a compound packet */
+ type = GET_U_1(sp);
+ len = GET_BE_U_2(sp + 1);
+ if (len > 1500 || len < 3 || type == 0 || type > MSDP_TYPE_MAX)
+ goto trunc; /* not really truncated, but still not decodable */
+ while (length != 0) {
+ type = GET_U_1(sp);
+ len = GET_BE_U_2(sp + 1);
+ if (len > 1400 || ndo->ndo_vflag)
+ ND_PRINT(" [len %u]", len);
+ if (len < 3)
+ goto trunc;
+ if (length < len)
+ goto trunc;
+ sp += 3;
+ length -= 3;
+ switch (type) {
+ case 1: /* IPv4 Source-Active */
+ case 3: /* IPv4 Source-Active Response */
+ if (type == 1)
+ ND_PRINT(" SA");
+ else
+ ND_PRINT(" SA-Response");
+ ND_PRINT(" %u entries", GET_U_1(sp));
+ if ((u_int)((GET_U_1(sp) * 12) + 8) < len) {
+ ND_PRINT(" [w/data]");
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT(" ");
+ ip_print(ndo, sp +
+ GET_U_1(sp) * 12 + 8 - 3,
+ len - (GET_U_1(sp) * 12 + 8));
+ }
+ }
+ break;
+ case 2:
+ ND_PRINT(" SA-Request");
+ ND_PRINT(" for %s", GET_IPADDR_STRING(sp + 1));
+ break;
+ case 4:
+ ND_PRINT(" Keepalive");
+ if (len != 3)
+ ND_PRINT("[len=%u] ", len);
+ break;
+ case 5:
+ ND_PRINT(" Notification");
+ break;
+ default:
+ ND_PRINT(" [type=%u len=%u]", type, len);
+ break;
+ }
+ sp += (len - 3);
+ length -= (len - 3);
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-msnlb.c b/print-msnlb.c
new file mode 100644
index 0000000..8afaa7f
--- /dev/null
+++ b/print-msnlb.c
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2013 Romain Francoise <romain@orebokech.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* \summary: MS Network Load Balancing's (NLB) heartbeat printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+struct msnlb_heartbeat_pkt {
+ nd_byte unknown1[4];
+ nd_byte unknown2[4];
+ nd_uint32_t host_prio; /* little-endian */
+ nd_ipv4 virtual_ip;
+ nd_ipv4 host_ip;
+ /* the protocol is undocumented so we ignore the rest */
+};
+
+void
+msnlb_print(netdissect_options *ndo, const u_char *bp)
+{
+ const struct msnlb_heartbeat_pkt *hb;
+
+ ndo->ndo_protocol = "msnlb";
+ hb = (const struct msnlb_heartbeat_pkt *)bp;
+
+ ND_PRINT("MS NLB heartbeat");
+ ND_PRINT(", host priority: %u", GET_LE_U_4((hb->host_prio)));
+ ND_PRINT(", cluster IP: %s", GET_IPADDR_STRING(hb->virtual_ip));
+ ND_PRINT(", host IP: %s", GET_IPADDR_STRING(hb->host_ip));
+}
diff --git a/print-nflog.c b/print-nflog.c
new file mode 100644
index 0000000..1e75561
--- /dev/null
+++ b/print-nflog.c
@@ -0,0 +1,231 @@
+/*
+ * Copyright (c) 2013, Petar Alilovic,
+ * Faculty of Electrical Engineering and Computing, University of Zagreb
+ * All rights reserved
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+
+/* \summary: DLT_NFLOG printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+#ifdef DLT_NFLOG
+
+/*
+ * Structure of an NFLOG header and TLV parts, as described at
+ * https://www.tcpdump.org/linktypes/LINKTYPE_NFLOG.html
+ *
+ * The NFLOG header is big-endian.
+ *
+ * The TLV length and type are in host byte order. The value is either
+ * big-endian or is an array of bytes in some externally-specified byte
+ * order (text string, link-layer address, link-layer header, packet
+ * data, etc.).
+ */
+typedef struct nflog_hdr {
+ nd_uint8_t nflog_family; /* address family */
+ nd_uint8_t nflog_version; /* version */
+ nd_uint16_t nflog_rid; /* resource ID */
+} nflog_hdr_t;
+
+#define NFLOG_HDR_LEN sizeof(nflog_hdr_t)
+
+typedef struct nflog_tlv {
+ nd_uint16_t tlv_length; /* tlv length */
+ nd_uint16_t tlv_type; /* tlv type */
+ /* value follows this */
+} nflog_tlv_t;
+
+#define NFLOG_TLV_LEN sizeof(nflog_tlv_t)
+
+typedef struct nflog_packet_hdr {
+ nd_uint16_t hw_protocol; /* hw protocol */
+ nd_uint8_t hook; /* netfilter hook */
+ nd_byte pad[1]; /* padding to 32 bits */
+} nflog_packet_hdr_t;
+
+typedef struct nflog_hwaddr {
+ nd_uint16_t hw_addrlen; /* address length */
+ nd_byte pad[2]; /* padding to 32-bit boundary */
+ nd_byte hw_addr[8]; /* address, up to 8 bytes */
+} nflog_hwaddr_t;
+
+typedef struct nflog_timestamp {
+ nd_uint64_t sec;
+ nd_uint64_t usec;
+} nflog_timestamp_t;
+
+/*
+ * TLV types.
+ */
+#define NFULA_PACKET_HDR 1 /* nflog_packet_hdr_t */
+#define NFULA_MARK 2 /* packet mark from skbuff */
+#define NFULA_TIMESTAMP 3 /* nflog_timestamp_t for skbuff's time stamp */
+#define NFULA_IFINDEX_INDEV 4 /* ifindex of device on which packet received (possibly bridge group) */
+#define NFULA_IFINDEX_OUTDEV 5 /* ifindex of device on which packet transmitted (possibly bridge group) */
+#define NFULA_IFINDEX_PHYSINDEV 6 /* ifindex of physical device on which packet received (not bridge group) */
+#define NFULA_IFINDEX_PHYSOUTDEV 7 /* ifindex of physical device on which packet transmitted (not bridge group) */
+#define NFULA_HWADDR 8 /* nflog_hwaddr_t for hardware address */
+#define NFULA_PAYLOAD 9 /* packet payload */
+#define NFULA_PREFIX 10 /* text string - null-terminated, count includes NUL */
+#define NFULA_UID 11 /* UID owning socket on which packet was sent/received */
+#define NFULA_SEQ 12 /* sequence number of packets on this NFLOG socket */
+#define NFULA_SEQ_GLOBAL 13 /* sequence number of pakets on all NFLOG sockets */
+#define NFULA_GID 14 /* GID owning socket on which packet was sent/received */
+#define NFULA_HWTYPE 15 /* ARPHRD_ type of skbuff's device */
+#define NFULA_HWHEADER 16 /* skbuff's MAC-layer header */
+#define NFULA_HWLEN 17 /* length of skbuff's MAC-layer header */
+
+static const struct tok nflog_values[] = {
+ { AF_INET, "IPv4" },
+ { AF_INET6, "IPv6" },
+ { 0, NULL }
+};
+
+static void
+nflog_hdr_print(netdissect_options *ndo, const nflog_hdr_t *hdr, u_int length)
+{
+ ND_PRINT("version %u, resource ID %u",
+ GET_U_1(hdr->nflog_version), GET_BE_U_2(hdr->nflog_rid));
+
+ if (!ndo->ndo_qflag) {
+ ND_PRINT(", family %s (%u)",
+ tok2str(nflog_values, "Unknown",
+ GET_U_1(hdr->nflog_family)),
+ GET_U_1(hdr->nflog_family));
+ } else {
+ ND_PRINT(", %s",
+ tok2str(nflog_values,
+ "Unknown NFLOG (0x%02x)",
+ GET_U_1(hdr->nflog_family)));
+ }
+
+ ND_PRINT(", length %u: ", length);
+}
+
+void
+nflog_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ const nflog_hdr_t *hdr = (const nflog_hdr_t *)p;
+ uint16_t size;
+ uint16_t h_size = NFLOG_HDR_LEN;
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+
+ ndo->ndo_protocol = "nflog";
+ if (caplen < NFLOG_HDR_LEN) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+ ndo->ndo_ll_hdr_len += NFLOG_HDR_LEN;
+
+ ND_TCHECK_SIZE(hdr);
+ if (GET_U_1(hdr->nflog_version) != 0) {
+ ND_PRINT("version %u (unknown)", GET_U_1(hdr->nflog_version));
+ return;
+ }
+
+ if (ndo->ndo_eflag)
+ nflog_hdr_print(ndo, hdr, length);
+
+ p += NFLOG_HDR_LEN;
+ length -= NFLOG_HDR_LEN;
+ caplen -= NFLOG_HDR_LEN;
+
+ while (length > 0) {
+ const nflog_tlv_t *tlv;
+
+ /* We have some data. Do we have enough for the TLV header? */
+ if (caplen < NFLOG_TLV_LEN)
+ goto trunc; /* No. */
+
+ tlv = (const nflog_tlv_t *) p;
+ ND_TCHECK_SIZE(tlv);
+ size = GET_HE_U_2(tlv->tlv_length);
+ if (size % 4 != 0)
+ size += 4 - size % 4;
+
+ /* Is the TLV's length less than the minimum? */
+ if (size < NFLOG_TLV_LEN)
+ goto trunc; /* Yes. Give up now. */
+
+ /* Do we have enough data for the full TLV? */
+ if (caplen < size)
+ goto trunc; /* No. */
+
+ if (GET_HE_U_2(tlv->tlv_type) == NFULA_PAYLOAD) {
+ /*
+ * This TLV's data is the packet payload.
+ * Skip past the TLV header, and break out
+ * of the loop so we print the packet data.
+ */
+ p += NFLOG_TLV_LEN;
+ h_size += NFLOG_TLV_LEN;
+ length -= NFLOG_TLV_LEN;
+ caplen -= NFLOG_TLV_LEN;
+ break;
+ }
+
+ p += size;
+ h_size += size;
+ length -= size;
+ caplen -= size;
+ }
+
+ switch (GET_U_1(hdr->nflog_family)) {
+
+ case AF_INET:
+ ip_print(ndo, p, length);
+ break;
+
+ case AF_INET6:
+ ip6_print(ndo, p, length);
+ break;
+
+ default:
+ if (!ndo->ndo_eflag)
+ nflog_hdr_print(ndo, hdr,
+ length + NFLOG_HDR_LEN);
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ break;
+ }
+
+ ndo->ndo_ll_hdr_len += h_size - NFLOG_HDR_LEN;
+ return;
+trunc:
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += h_size - NFLOG_HDR_LEN;
+}
+
+#endif /* DLT_NFLOG */
diff --git a/print-nfs.c b/print-nfs.c
new file mode 100644
index 0000000..af1b274
--- /dev/null
+++ b/print-nfs.c
@@ -0,0 +1,1850 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Network File System (NFS) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <limits.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "nfs.h"
+#include "nfsfh.h"
+
+#include "ip.h"
+#include "ip6.h"
+#include "rpc_auth.h"
+#include "rpc_msg.h"
+
+
+static void nfs_printfh(netdissect_options *, const uint32_t *, const u_int);
+static int xid_map_enter(netdissect_options *, const struct sunrpc_msg *, const u_char *);
+static int xid_map_find(netdissect_options *, const struct sunrpc_msg *, const u_char *, uint32_t *, uint32_t *);
+static void interp_reply(netdissect_options *, const struct sunrpc_msg *, uint32_t, uint32_t, int);
+static const uint32_t *parse_post_op_attr(netdissect_options *, const uint32_t *, int);
+
+/*
+ * Mapping of old NFS Version 2 RPC numbers to generic numbers.
+ */
+static uint32_t nfsv3_procid[NFS_NPROCS] = {
+ NFSPROC_NULL,
+ NFSPROC_GETATTR,
+ NFSPROC_SETATTR,
+ NFSPROC_NOOP,
+ NFSPROC_LOOKUP,
+ NFSPROC_READLINK,
+ NFSPROC_READ,
+ NFSPROC_NOOP,
+ NFSPROC_WRITE,
+ NFSPROC_CREATE,
+ NFSPROC_REMOVE,
+ NFSPROC_RENAME,
+ NFSPROC_LINK,
+ NFSPROC_SYMLINK,
+ NFSPROC_MKDIR,
+ NFSPROC_RMDIR,
+ NFSPROC_READDIR,
+ NFSPROC_FSSTAT,
+ NFSPROC_NOOP,
+ NFSPROC_NOOP,
+ NFSPROC_NOOP,
+ NFSPROC_NOOP,
+ NFSPROC_NOOP,
+ NFSPROC_NOOP,
+ NFSPROC_NOOP,
+ NFSPROC_NOOP
+};
+
+static const struct tok nfsproc_str[] = {
+ { NFSPROC_NOOP, "nop" },
+ { NFSPROC_NULL, "null" },
+ { NFSPROC_GETATTR, "getattr" },
+ { NFSPROC_SETATTR, "setattr" },
+ { NFSPROC_LOOKUP, "lookup" },
+ { NFSPROC_ACCESS, "access" },
+ { NFSPROC_READLINK, "readlink" },
+ { NFSPROC_READ, "read" },
+ { NFSPROC_WRITE, "write" },
+ { NFSPROC_CREATE, "create" },
+ { NFSPROC_MKDIR, "mkdir" },
+ { NFSPROC_SYMLINK, "symlink" },
+ { NFSPROC_MKNOD, "mknod" },
+ { NFSPROC_REMOVE, "remove" },
+ { NFSPROC_RMDIR, "rmdir" },
+ { NFSPROC_RENAME, "rename" },
+ { NFSPROC_LINK, "link" },
+ { NFSPROC_READDIR, "readdir" },
+ { NFSPROC_READDIRPLUS, "readdirplus" },
+ { NFSPROC_FSSTAT, "fsstat" },
+ { NFSPROC_FSINFO, "fsinfo" },
+ { NFSPROC_PATHCONF, "pathconf" },
+ { NFSPROC_COMMIT, "commit" },
+ { 0, NULL }
+};
+
+/*
+ * NFS V2 and V3 status values.
+ *
+ * Some of these come from the RFCs for NFS V2 and V3, with the message
+ * strings taken from the FreeBSD C library "errlst.c".
+ *
+ * Others are errors that are not in the RFC but that I suspect some
+ * NFS servers could return; the values are FreeBSD errno values, as
+ * the first NFS server was the SunOS 2.0 one, and until 5.0 SunOS
+ * was primarily BSD-derived.
+ */
+static const struct tok status2str[] = {
+ { 1, "Operation not permitted" }, /* EPERM */
+ { 2, "No such file or directory" }, /* ENOENT */
+ { 5, "Input/output error" }, /* EIO */
+ { 6, "Device not configured" }, /* ENXIO */
+ { 11, "Resource deadlock avoided" }, /* EDEADLK */
+ { 12, "Cannot allocate memory" }, /* ENOMEM */
+ { 13, "Permission denied" }, /* EACCES */
+ { 17, "File exists" }, /* EEXIST */
+ { 18, "Cross-device link" }, /* EXDEV */
+ { 19, "Operation not supported by device" }, /* ENODEV */
+ { 20, "Not a directory" }, /* ENOTDIR */
+ { 21, "Is a directory" }, /* EISDIR */
+ { 22, "Invalid argument" }, /* EINVAL */
+ { 26, "Text file busy" }, /* ETXTBSY */
+ { 27, "File too large" }, /* EFBIG */
+ { 28, "No space left on device" }, /* ENOSPC */
+ { 30, "Read-only file system" }, /* EROFS */
+ { 31, "Too many links" }, /* EMLINK */
+ { 45, "Operation not supported" }, /* EOPNOTSUPP */
+ { 62, "Too many levels of symbolic links" }, /* ELOOP */
+ { 63, "File name too long" }, /* ENAMETOOLONG */
+ { 66, "Directory not empty" }, /* ENOTEMPTY */
+ { 69, "Disc quota exceeded" }, /* EDQUOT */
+ { 70, "Stale NFS file handle" }, /* ESTALE */
+ { 71, "Too many levels of remote in path" }, /* EREMOTE */
+ { 99, "Write cache flushed to disk" }, /* NFSERR_WFLUSH (not used) */
+ { 10001, "Illegal NFS file handle" }, /* NFS3ERR_BADHANDLE */
+ { 10002, "Update synchronization mismatch" }, /* NFS3ERR_NOT_SYNC */
+ { 10003, "READDIR/READDIRPLUS cookie is stale" }, /* NFS3ERR_BAD_COOKIE */
+ { 10004, "Operation not supported" }, /* NFS3ERR_NOTSUPP */
+ { 10005, "Buffer or request is too small" }, /* NFS3ERR_TOOSMALL */
+ { 10006, "Unspecified error on server" }, /* NFS3ERR_SERVERFAULT */
+ { 10007, "Object of that type not supported" }, /* NFS3ERR_BADTYPE */
+ { 10008, "Request couldn't be completed in time" }, /* NFS3ERR_JUKEBOX */
+ { 0, NULL }
+};
+
+static const struct tok nfsv3_writemodes[] = {
+ { 0, "unstable" },
+ { 1, "datasync" },
+ { 2, "filesync" },
+ { 0, NULL }
+};
+
+static const struct tok type2str[] = {
+ { NFNON, "NON" },
+ { NFREG, "REG" },
+ { NFDIR, "DIR" },
+ { NFBLK, "BLK" },
+ { NFCHR, "CHR" },
+ { NFLNK, "LNK" },
+ { NFFIFO, "FIFO" },
+ { 0, NULL }
+};
+
+static const struct tok sunrpc_auth_str[] = {
+ { SUNRPC_AUTH_OK, "OK" },
+ { SUNRPC_AUTH_BADCRED, "Bogus Credentials (seal broken)" },
+ { SUNRPC_AUTH_REJECTEDCRED, "Rejected Credentials (client should begin new session)" },
+ { SUNRPC_AUTH_BADVERF, "Bogus Verifier (seal broken)" },
+ { SUNRPC_AUTH_REJECTEDVERF, "Verifier expired or was replayed" },
+ { SUNRPC_AUTH_TOOWEAK, "Credentials are too weak" },
+ { SUNRPC_AUTH_INVALIDRESP, "Bogus response verifier" },
+ { SUNRPC_AUTH_FAILED, "Unknown failure" },
+ { 0, NULL }
+};
+
+static const struct tok sunrpc_str[] = {
+ { SUNRPC_PROG_UNAVAIL, "PROG_UNAVAIL" },
+ { SUNRPC_PROG_MISMATCH, "PROG_MISMATCH" },
+ { SUNRPC_PROC_UNAVAIL, "PROC_UNAVAIL" },
+ { SUNRPC_GARBAGE_ARGS, "GARBAGE_ARGS" },
+ { SUNRPC_SYSTEM_ERR, "SYSTEM_ERR" },
+ { 0, NULL }
+};
+
+static void
+print_nfsaddr(netdissect_options *ndo,
+ const u_char *bp, const char *s, const char *d)
+{
+ const struct ip *ip;
+ const struct ip6_hdr *ip6;
+ char srcaddr[INET6_ADDRSTRLEN], dstaddr[INET6_ADDRSTRLEN];
+
+ srcaddr[0] = dstaddr[0] = '\0';
+ switch (IP_V((const struct ip *)bp)) {
+ case 4:
+ ip = (const struct ip *)bp;
+ strlcpy(srcaddr, GET_IPADDR_STRING(ip->ip_src), sizeof(srcaddr));
+ strlcpy(dstaddr, GET_IPADDR_STRING(ip->ip_dst), sizeof(dstaddr));
+ break;
+ case 6:
+ ip6 = (const struct ip6_hdr *)bp;
+ strlcpy(srcaddr, GET_IP6ADDR_STRING(ip6->ip6_src),
+ sizeof(srcaddr));
+ strlcpy(dstaddr, GET_IP6ADDR_STRING(ip6->ip6_dst),
+ sizeof(dstaddr));
+ break;
+ default:
+ strlcpy(srcaddr, "?", sizeof(srcaddr));
+ strlcpy(dstaddr, "?", sizeof(dstaddr));
+ break;
+ }
+
+ ND_PRINT("%s.%s > %s.%s: ", srcaddr, s, dstaddr, d);
+}
+
+/*
+ * NFS Version 3 sattr3 structure for the new node creation case.
+ * This does not have a fixed layout on the network, so this
+ * structure does not correspond to the layout of the data on
+ * the network; it's used to store the data when the sattr3
+ * is parsed for use when it's later printed.
+ */
+struct nfsv3_sattr {
+ uint32_t sa_modeset;
+ uint32_t sa_mode;
+ uint32_t sa_uidset;
+ uint32_t sa_uid;
+ uint32_t sa_gidset;
+ uint32_t sa_gid;
+ uint32_t sa_sizeset;
+ uint32_t sa_size;
+ uint32_t sa_atimetype;
+ struct {
+ uint32_t nfsv3_sec;
+ uint32_t nfsv3_nsec;
+ } sa_atime;
+ uint32_t sa_mtimetype;
+ struct {
+ uint32_t nfsv3_sec;
+ uint32_t nfsv3_nsec;
+ } sa_mtime;
+};
+
+static const uint32_t *
+parse_sattr3(netdissect_options *ndo,
+ const uint32_t *dp, struct nfsv3_sattr *sa3)
+{
+ sa3->sa_modeset = GET_BE_U_4(dp);
+ dp++;
+ if (sa3->sa_modeset) {
+ sa3->sa_mode = GET_BE_U_4(dp);
+ dp++;
+ }
+
+ sa3->sa_uidset = GET_BE_U_4(dp);
+ dp++;
+ if (sa3->sa_uidset) {
+ sa3->sa_uid = GET_BE_U_4(dp);
+ dp++;
+ }
+
+ sa3->sa_gidset = GET_BE_U_4(dp);
+ dp++;
+ if (sa3->sa_gidset) {
+ sa3->sa_gid = GET_BE_U_4(dp);
+ dp++;
+ }
+
+ sa3->sa_sizeset = GET_BE_U_4(dp);
+ dp++;
+ if (sa3->sa_sizeset) {
+ sa3->sa_size = GET_BE_U_4(dp);
+ dp++;
+ }
+
+ sa3->sa_atimetype = GET_BE_U_4(dp);
+ dp++;
+ if (sa3->sa_atimetype == NFSV3SATTRTIME_TOCLIENT) {
+ sa3->sa_atime.nfsv3_sec = GET_BE_U_4(dp);
+ dp++;
+ sa3->sa_atime.nfsv3_nsec = GET_BE_U_4(dp);
+ dp++;
+ }
+
+ sa3->sa_mtimetype = GET_BE_U_4(dp);
+ dp++;
+ if (sa3->sa_mtimetype == NFSV3SATTRTIME_TOCLIENT) {
+ sa3->sa_mtime.nfsv3_sec = GET_BE_U_4(dp);
+ dp++;
+ sa3->sa_mtime.nfsv3_nsec = GET_BE_U_4(dp);
+ dp++;
+ }
+
+ return dp;
+}
+
+static void
+print_sattr3(netdissect_options *ndo,
+ const struct nfsv3_sattr *sa3, int verbose)
+{
+ if (sa3->sa_modeset)
+ ND_PRINT(" mode %o", sa3->sa_mode);
+ if (sa3->sa_uidset)
+ ND_PRINT(" uid %u", sa3->sa_uid);
+ if (sa3->sa_gidset)
+ ND_PRINT(" gid %u", sa3->sa_gid);
+ if (verbose > 1) {
+ if (sa3->sa_atimetype == NFSV3SATTRTIME_TOCLIENT)
+ ND_PRINT(" atime %u.%06u", sa3->sa_atime.nfsv3_sec,
+ sa3->sa_atime.nfsv3_nsec);
+ if (sa3->sa_mtimetype == NFSV3SATTRTIME_TOCLIENT)
+ ND_PRINT(" mtime %u.%06u", sa3->sa_mtime.nfsv3_sec,
+ sa3->sa_mtime.nfsv3_nsec);
+ }
+}
+
+void
+nfsreply_print(netdissect_options *ndo,
+ const u_char *bp, u_int length,
+ const u_char *bp2)
+{
+ const struct sunrpc_msg *rp;
+ char srcid[20], dstid[20]; /*fits 32bit*/
+
+ ndo->ndo_protocol = "nfs";
+ rp = (const struct sunrpc_msg *)bp;
+
+ if (!ndo->ndo_nflag) {
+ strlcpy(srcid, "nfs", sizeof(srcid));
+ snprintf(dstid, sizeof(dstid), "%u",
+ GET_BE_U_4(rp->rm_xid));
+ } else {
+ snprintf(srcid, sizeof(srcid), "%u", NFS_PORT);
+ snprintf(dstid, sizeof(dstid), "%u",
+ GET_BE_U_4(rp->rm_xid));
+ }
+ print_nfsaddr(ndo, bp2, srcid, dstid);
+
+ nfsreply_noaddr_print(ndo, bp, length, bp2);
+}
+
+void
+nfsreply_noaddr_print(netdissect_options *ndo,
+ const u_char *bp, u_int length,
+ const u_char *bp2)
+{
+ const struct sunrpc_msg *rp;
+ uint32_t proc, vers, reply_stat;
+ enum sunrpc_reject_stat rstat;
+ uint32_t rlow;
+ uint32_t rhigh;
+ enum sunrpc_auth_stat rwhy;
+
+ ndo->ndo_protocol = "nfs";
+ rp = (const struct sunrpc_msg *)bp;
+
+ ND_TCHECK_4(rp->rm_reply.rp_stat);
+ reply_stat = GET_BE_U_4(&rp->rm_reply.rp_stat);
+ switch (reply_stat) {
+
+ case SUNRPC_MSG_ACCEPTED:
+ ND_PRINT("reply ok %u", length);
+ if (xid_map_find(ndo, rp, bp2, &proc, &vers) >= 0)
+ interp_reply(ndo, rp, proc, vers, length);
+ break;
+
+ case SUNRPC_MSG_DENIED:
+ ND_PRINT("reply ERR %u: ", length);
+ ND_TCHECK_4(rp->rm_reply.rp_reject.rj_stat);
+ rstat = GET_BE_U_4(&rp->rm_reply.rp_reject.rj_stat);
+ switch (rstat) {
+
+ case SUNRPC_RPC_MISMATCH:
+ ND_TCHECK_4(rp->rm_reply.rp_reject.rj_vers.high);
+ rlow = GET_BE_U_4(&rp->rm_reply.rp_reject.rj_vers.low);
+ rhigh = GET_BE_U_4(&rp->rm_reply.rp_reject.rj_vers.high);
+ ND_PRINT("RPC Version mismatch (%u-%u)", rlow, rhigh);
+ break;
+
+ case SUNRPC_AUTH_ERROR:
+ ND_TCHECK_4(rp->rm_reply.rp_reject.rj_why);
+ rwhy = GET_BE_U_4(&rp->rm_reply.rp_reject.rj_why);
+ ND_PRINT("Auth %s", tok2str(sunrpc_auth_str, "Invalid failure code %u", rwhy));
+ break;
+
+ default:
+ ND_PRINT("Unknown reason for rejecting rpc message %u", (unsigned int)rstat);
+ break;
+ }
+ break;
+
+ default:
+ ND_PRINT("reply Unknown rpc response code=%u %u", reply_stat, length);
+ break;
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+/*
+ * Return a pointer to the first file handle in the packet.
+ * If the packet was truncated, return 0.
+ */
+static const uint32_t *
+parsereq(netdissect_options *ndo,
+ const struct sunrpc_msg *rp, u_int length)
+{
+ const uint32_t *dp;
+ u_int len, rounded_len;
+
+ /*
+ * Find the start of the req data (if we captured it).
+ * First, get the length of the credentials, and make sure
+ * we have all of the opaque part of the credentials.
+ */
+ dp = (const uint32_t *)&rp->rm_call.cb_cred;
+ if (length < 2 * sizeof(*dp))
+ goto trunc;
+ len = GET_BE_U_4(dp + 1);
+ rounded_len = roundup2(len, 4);
+ ND_TCHECK_LEN(dp + 2, rounded_len);
+ if (2 * sizeof(*dp) + rounded_len <= length) {
+ /*
+ * We have all of the credentials. Skip past them; they
+ * consist of 4 bytes of flavor, 4 bytes of length,
+ * and len-rounded-up-to-a-multiple-of-4 bytes of
+ * data.
+ */
+ dp += (len + (2 * sizeof(*dp) + 3)) / sizeof(*dp);
+ length -= 2 * sizeof(*dp) + rounded_len;
+
+ /*
+ * Now get the length of the verifier, and make sure
+ * we have all of the opaque part of the verifier.
+ */
+ if (length < 2 * sizeof(*dp))
+ goto trunc;
+ len = GET_BE_U_4(dp + 1);
+ rounded_len = roundup2(len, 4);
+ ND_TCHECK_LEN(dp + 2, rounded_len);
+ if (2 * sizeof(*dp) + rounded_len < length) {
+ /*
+ * We have all of the verifier. Skip past it;
+ * it consists of 4 bytes of flavor, 4 bytes of
+ * length, and len-rounded-up-to-a-multiple-of-4
+ * bytes of data.
+ */
+ dp += (len + (2 * sizeof(*dp) + 3)) / sizeof(*dp);
+ return (dp);
+ }
+ }
+trunc:
+ return (NULL);
+}
+
+/*
+ * Print out an NFS file handle and return a pointer to following word.
+ * If packet was truncated, return 0.
+ */
+static const uint32_t *
+parsefh(netdissect_options *ndo,
+ const uint32_t *dp, int v3)
+{
+ u_int len;
+
+ if (v3) {
+ len = GET_BE_U_4(dp) / 4;
+ dp++;
+ } else
+ len = NFSX_V2FH / 4;
+
+ if (ND_TTEST_LEN(dp, len * sizeof(*dp))) {
+ nfs_printfh(ndo, dp, len);
+ return (dp + len);
+ } else
+ return NULL;
+}
+
+/*
+ * Print out a file name and return pointer to 32-bit word past it.
+ * If packet was truncated, return 0.
+ */
+static const uint32_t *
+parsefn(netdissect_options *ndo,
+ const uint32_t *dp)
+{
+ uint32_t len, rounded_len;
+ const u_char *cp;
+
+ /* Fetch big-endian string length */
+ len = GET_BE_U_4(dp);
+ dp++;
+
+ if (UINT_MAX - len < 3) {
+ ND_PRINT("[cannot pad to 32-bit boundaries]");
+ nd_print_invalid(ndo);
+ return NULL;
+ }
+
+ rounded_len = roundup2(len, 4);
+ ND_TCHECK_LEN(dp, rounded_len);
+
+ cp = (const u_char *)dp;
+ /* Update 32-bit pointer (NFS filenames padded to 32-bit boundaries) */
+ dp += rounded_len / sizeof(*dp);
+ ND_PRINT("\"");
+ if (nd_printn(ndo, cp, len, ndo->ndo_snapend)) {
+ ND_PRINT("\"");
+ goto trunc;
+ }
+ ND_PRINT("\"");
+
+ return (dp);
+trunc:
+ return NULL;
+}
+
+/*
+ * Print out file handle and file name.
+ * Return pointer to 32-bit word past file name.
+ * If packet was truncated (or there was some other error), return 0.
+ */
+static const uint32_t *
+parsefhn(netdissect_options *ndo,
+ const uint32_t *dp, int v3)
+{
+ dp = parsefh(ndo, dp, v3);
+ if (dp == NULL)
+ return (NULL);
+ ND_PRINT(" ");
+ return (parsefn(ndo, dp));
+}
+
+void
+nfsreq_noaddr_print(netdissect_options *ndo,
+ const u_char *bp, u_int length,
+ const u_char *bp2)
+{
+ const struct sunrpc_msg *rp;
+ const uint32_t *dp;
+ nfs_type type;
+ int v3;
+ uint32_t proc;
+ uint32_t access_flags;
+ struct nfsv3_sattr sa3;
+
+ ndo->ndo_protocol = "nfs";
+ ND_PRINT("%u", length);
+ rp = (const struct sunrpc_msg *)bp;
+
+ if (!xid_map_enter(ndo, rp, bp2)) /* record proc number for later on */
+ goto trunc;
+
+ v3 = (GET_BE_U_4(&rp->rm_call.cb_vers) == NFS_VER3);
+ proc = GET_BE_U_4(&rp->rm_call.cb_proc);
+
+ if (!v3 && proc < NFS_NPROCS)
+ proc = nfsv3_procid[proc];
+
+ ND_PRINT(" %s", tok2str(nfsproc_str, "proc-%u", proc));
+ switch (proc) {
+
+ case NFSPROC_GETATTR:
+ case NFSPROC_SETATTR:
+ case NFSPROC_READLINK:
+ case NFSPROC_FSSTAT:
+ case NFSPROC_FSINFO:
+ case NFSPROC_PATHCONF:
+ dp = parsereq(ndo, rp, length);
+ if (dp == NULL)
+ goto trunc;
+ if (parsefh(ndo, dp, v3) == NULL)
+ goto trunc;
+ break;
+
+ case NFSPROC_LOOKUP:
+ case NFSPROC_CREATE:
+ case NFSPROC_MKDIR:
+ case NFSPROC_REMOVE:
+ case NFSPROC_RMDIR:
+ dp = parsereq(ndo, rp, length);
+ if (dp == NULL)
+ goto trunc;
+ if (parsefhn(ndo, dp, v3) == NULL)
+ goto trunc;
+ break;
+
+ case NFSPROC_ACCESS:
+ dp = parsereq(ndo, rp, length);
+ if (dp == NULL)
+ goto trunc;
+ dp = parsefh(ndo, dp, v3);
+ if (dp == NULL)
+ goto trunc;
+ access_flags = GET_BE_U_4(dp);
+ if (access_flags & ~NFSV3ACCESS_FULL) {
+ /* NFSV3ACCESS definitions aren't up to date */
+ ND_PRINT(" %04x", access_flags);
+ } else if ((access_flags & NFSV3ACCESS_FULL) == NFSV3ACCESS_FULL) {
+ ND_PRINT(" NFS_ACCESS_FULL");
+ } else {
+ char separator = ' ';
+ if (access_flags & NFSV3ACCESS_READ) {
+ ND_PRINT(" NFS_ACCESS_READ");
+ separator = '|';
+ }
+ if (access_flags & NFSV3ACCESS_LOOKUP) {
+ ND_PRINT("%cNFS_ACCESS_LOOKUP", separator);
+ separator = '|';
+ }
+ if (access_flags & NFSV3ACCESS_MODIFY) {
+ ND_PRINT("%cNFS_ACCESS_MODIFY", separator);
+ separator = '|';
+ }
+ if (access_flags & NFSV3ACCESS_EXTEND) {
+ ND_PRINT("%cNFS_ACCESS_EXTEND", separator);
+ separator = '|';
+ }
+ if (access_flags & NFSV3ACCESS_DELETE) {
+ ND_PRINT("%cNFS_ACCESS_DELETE", separator);
+ separator = '|';
+ }
+ if (access_flags & NFSV3ACCESS_EXECUTE)
+ ND_PRINT("%cNFS_ACCESS_EXECUTE", separator);
+ }
+ break;
+
+ case NFSPROC_READ:
+ dp = parsereq(ndo, rp, length);
+ if (dp == NULL)
+ goto trunc;
+ dp = parsefh(ndo, dp, v3);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ ND_PRINT(" %u bytes @ %" PRIu64,
+ GET_BE_U_4(dp + 2),
+ GET_BE_U_8(dp));
+ } else {
+ ND_PRINT(" %u bytes @ %u",
+ GET_BE_U_4(dp + 1),
+ GET_BE_U_4(dp));
+ }
+ break;
+
+ case NFSPROC_WRITE:
+ dp = parsereq(ndo, rp, length);
+ if (dp == NULL)
+ goto trunc;
+ dp = parsefh(ndo, dp, v3);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ ND_PRINT(" %u (%u) bytes @ %" PRIu64,
+ GET_BE_U_4(dp + 4),
+ GET_BE_U_4(dp + 2),
+ GET_BE_U_8(dp));
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" <%s>",
+ tok2str(nfsv3_writemodes,
+ NULL, GET_BE_U_4(dp + 3)));
+ }
+ } else {
+ ND_PRINT(" %u (%u) bytes @ %u (%u)",
+ GET_BE_U_4(dp + 3),
+ GET_BE_U_4(dp + 2),
+ GET_BE_U_4(dp + 1),
+ GET_BE_U_4(dp));
+ }
+ break;
+
+ case NFSPROC_SYMLINK:
+ dp = parsereq(ndo, rp, length);
+ if (dp == NULL)
+ goto trunc;
+ dp = parsefhn(ndo, dp, v3);
+ if (dp == NULL)
+ goto trunc;
+ ND_PRINT(" ->");
+ if (v3 && (dp = parse_sattr3(ndo, dp, &sa3)) == NULL)
+ goto trunc;
+ if (parsefn(ndo, dp) == NULL)
+ goto trunc;
+ if (v3 && ndo->ndo_vflag)
+ print_sattr3(ndo, &sa3, ndo->ndo_vflag);
+ break;
+
+ case NFSPROC_MKNOD:
+ dp = parsereq(ndo, rp, length);
+ if (dp == NULL)
+ goto trunc;
+ dp = parsefhn(ndo, dp, v3);
+ if (dp == NULL)
+ goto trunc;
+ type = (nfs_type) GET_BE_U_4(dp);
+ dp++;
+ dp = parse_sattr3(ndo, dp, &sa3);
+ if (dp == NULL)
+ goto trunc;
+ ND_PRINT(" %s", tok2str(type2str, "unk-ft %u", type));
+ if (ndo->ndo_vflag && (type == NFCHR || type == NFBLK)) {
+ ND_PRINT(" %u/%u",
+ GET_BE_U_4(dp),
+ GET_BE_U_4(dp + 1));
+ dp += 2;
+ }
+ if (ndo->ndo_vflag)
+ print_sattr3(ndo, &sa3, ndo->ndo_vflag);
+ break;
+
+ case NFSPROC_RENAME:
+ dp = parsereq(ndo, rp, length);
+ if (dp == NULL)
+ goto trunc;
+ dp = parsefhn(ndo, dp, v3);
+ if (dp == NULL)
+ goto trunc;
+ ND_PRINT(" ->");
+ if (parsefhn(ndo, dp, v3) == NULL)
+ goto trunc;
+ break;
+
+ case NFSPROC_LINK:
+ dp = parsereq(ndo, rp, length);
+ if (dp == NULL)
+ goto trunc;
+ dp = parsefh(ndo, dp, v3);
+ if (dp == NULL)
+ goto trunc;
+ ND_PRINT(" ->");
+ if (parsefhn(ndo, dp, v3) == NULL)
+ goto trunc;
+ break;
+
+ case NFSPROC_READDIR:
+ dp = parsereq(ndo, rp, length);
+ if (dp == NULL)
+ goto trunc;
+ dp = parsefh(ndo, dp, v3);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ /*
+ * We shouldn't really try to interpret the
+ * offset cookie here.
+ */
+ ND_PRINT(" %u bytes @ %" PRId64,
+ GET_BE_U_4(dp + 4),
+ GET_BE_U_8(dp));
+ if (ndo->ndo_vflag) {
+ /*
+ * This displays the 8 bytes
+ * of the verifier in order,
+ * from the low-order byte
+ * to the high-order byte.
+ */
+ ND_PRINT(" verf %08x%08x",
+ GET_BE_U_4(dp + 2),
+ GET_BE_U_4(dp + 3));
+ }
+ } else {
+ /*
+ * Print the offset as signed, since -1 is
+ * common, but offsets > 2^31 aren't.
+ */
+ ND_PRINT(" %u bytes @ %u",
+ GET_BE_U_4(dp + 1),
+ GET_BE_U_4(dp));
+ }
+ break;
+
+ case NFSPROC_READDIRPLUS:
+ dp = parsereq(ndo, rp, length);
+ if (dp == NULL)
+ goto trunc;
+ dp = parsefh(ndo, dp, v3);
+ if (dp == NULL)
+ goto trunc;
+ /*
+ * We don't try to interpret the offset
+ * cookie here.
+ */
+ ND_PRINT(" %u bytes @ %" PRId64,
+ GET_BE_U_4(dp + 4),
+ GET_BE_U_8(dp));
+ if (ndo->ndo_vflag) {
+ /*
+ * This displays the 8 bytes
+ * of the verifier in order,
+ * from the low-order byte
+ * to the high-order byte.
+ */
+ ND_PRINT(" max %u verf %08x%08x",
+ GET_BE_U_4(dp + 5),
+ GET_BE_U_4(dp + 2),
+ GET_BE_U_4(dp + 3));
+ }
+ break;
+
+ case NFSPROC_COMMIT:
+ dp = parsereq(ndo, rp, length);
+ if (dp == NULL)
+ goto trunc;
+ dp = parsefh(ndo, dp, v3);
+ if (dp == NULL)
+ goto trunc;
+ ND_PRINT(" %u bytes @ %" PRIu64,
+ GET_BE_U_4(dp + 2),
+ GET_BE_U_8(dp));
+ break;
+
+ default:
+ break;
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+/*
+ * Print out an NFS file handle.
+ * We assume packet was not truncated before the end of the
+ * file handle pointed to by dp.
+ *
+ * Note: new version (using portable file-handle parser) doesn't produce
+ * generation number. It probably could be made to do that, with some
+ * additional hacking on the parser code.
+ */
+static void
+nfs_printfh(netdissect_options *ndo,
+ const uint32_t *dp, const u_int len)
+{
+ my_fsid fsid;
+ uint32_t ino;
+ const char *sfsname = NULL;
+ char *spacep;
+
+ if (ndo->ndo_uflag) {
+ u_int i;
+ char const *sep = "";
+
+ ND_PRINT(" fh[");
+ for (i=0; i<len; i++) {
+ /*
+ * This displays 4 bytes in big-endian byte
+ * order. That's as good a choice as little-
+ * endian, as there's no guarantee that the
+ * server is big-endian or little-endian or
+ * that the file handle contains 4-byte
+ * integral fields, and is better than "the
+ * byte order of the host running tcpdump", as
+ * the latter means that different hosts
+ * running tcpdump may show the same file
+ * handle in different ways.
+ */
+ ND_PRINT("%s%x", sep, GET_BE_U_4(dp + i));
+ sep = ":";
+ }
+ ND_PRINT("]");
+ return;
+ }
+
+ Parse_fh(ndo, (const u_char *)dp, len, &fsid, &ino, NULL, &sfsname, 0);
+
+ if (sfsname) {
+ /* file system ID is ASCII, not numeric, for this server OS */
+ char temp[NFSX_V3FHMAX+1];
+ u_int stringlen;
+
+ /* Make sure string is null-terminated */
+ stringlen = len;
+ if (stringlen > NFSX_V3FHMAX)
+ stringlen = NFSX_V3FHMAX;
+ strncpy(temp, sfsname, stringlen);
+ temp[stringlen] = '\0';
+ /* Remove trailing spaces */
+ spacep = strchr(temp, ' ');
+ if (spacep)
+ *spacep = '\0';
+
+ ND_PRINT(" fh %s/", temp);
+ } else {
+ ND_PRINT(" fh %u,%u/",
+ fsid.Fsid_dev.Major, fsid.Fsid_dev.Minor);
+ }
+
+ if(fsid.Fsid_dev.Minor == 257)
+ /* Print the undecoded handle */
+ ND_PRINT("%s", fsid.Opaque_Handle);
+ else
+ ND_PRINT("%u", ino);
+}
+
+/*
+ * Maintain a small cache of recent client.XID.server/proc pairs, to allow
+ * us to match up replies with requests and thus to know how to parse
+ * the reply.
+ */
+
+struct xid_map_entry {
+ uint32_t xid; /* transaction ID (net order) */
+ int ipver; /* IP version (4 or 6) */
+ nd_ipv6 client; /* client IP address (net order) */
+ nd_ipv6 server; /* server IP address (net order) */
+ uint32_t proc; /* call proc number (host order) */
+ uint32_t vers; /* program version (host order) */
+};
+
+/*
+ * Map entries are kept in an array that we manage as a ring;
+ * new entries are always added at the tail of the ring. Initially,
+ * all the entries are zero and hence don't match anything.
+ */
+
+#define XIDMAPSIZE 64
+
+static struct xid_map_entry xid_map[XIDMAPSIZE];
+
+static int xid_map_next = 0;
+static int xid_map_hint = 0;
+
+static int
+xid_map_enter(netdissect_options *ndo,
+ const struct sunrpc_msg *rp, const u_char *bp)
+{
+ const struct ip *ip = NULL;
+ const struct ip6_hdr *ip6 = NULL;
+ struct xid_map_entry *xmep;
+
+ if (!ND_TTEST_4(rp->rm_call.cb_proc))
+ return (0);
+ switch (IP_V((const struct ip *)bp)) {
+ case 4:
+ ip = (const struct ip *)bp;
+ break;
+ case 6:
+ ip6 = (const struct ip6_hdr *)bp;
+ break;
+ default:
+ return (1);
+ }
+
+ xmep = &xid_map[xid_map_next];
+
+ if (++xid_map_next >= XIDMAPSIZE)
+ xid_map_next = 0;
+
+ UNALIGNED_MEMCPY(&xmep->xid, &rp->rm_xid, sizeof(xmep->xid));
+ if (ip) {
+ xmep->ipver = 4;
+ UNALIGNED_MEMCPY(&xmep->client, ip->ip_src,
+ sizeof(ip->ip_src));
+ UNALIGNED_MEMCPY(&xmep->server, ip->ip_dst,
+ sizeof(ip->ip_dst));
+ }
+ else if (ip6) {
+ xmep->ipver = 6;
+ UNALIGNED_MEMCPY(&xmep->client, ip6->ip6_src,
+ sizeof(ip6->ip6_src));
+ UNALIGNED_MEMCPY(&xmep->server, ip6->ip6_dst,
+ sizeof(ip6->ip6_dst));
+ }
+ xmep->proc = GET_BE_U_4(&rp->rm_call.cb_proc);
+ xmep->vers = GET_BE_U_4(&rp->rm_call.cb_vers);
+ return (1);
+}
+
+/*
+ * Returns 0 and puts NFSPROC_xxx in proc return and
+ * version in vers return, or returns -1 on failure
+ */
+static int
+xid_map_find(netdissect_options *ndo, const struct sunrpc_msg *rp,
+ const u_char *bp, uint32_t *proc, uint32_t *vers)
+{
+ int i;
+ struct xid_map_entry *xmep;
+ uint32_t xid;
+ const struct ip *ip = (const struct ip *)bp;
+ const struct ip6_hdr *ip6 = (const struct ip6_hdr *)bp;
+ int cmp;
+
+ UNALIGNED_MEMCPY(&xid, &rp->rm_xid, sizeof(xmep->xid));
+ /* Start searching from where we last left off */
+ i = xid_map_hint;
+ do {
+ xmep = &xid_map[i];
+ cmp = 1;
+ if (xmep->ipver != IP_V(ip) || xmep->xid != xid)
+ goto nextitem;
+ switch (xmep->ipver) {
+ case 4:
+ if (UNALIGNED_MEMCMP(ip->ip_src, &xmep->server,
+ sizeof(ip->ip_src)) != 0 ||
+ UNALIGNED_MEMCMP(ip->ip_dst, &xmep->client,
+ sizeof(ip->ip_dst)) != 0) {
+ cmp = 0;
+ }
+ break;
+ case 6:
+ if (UNALIGNED_MEMCMP(ip6->ip6_src, &xmep->server,
+ sizeof(ip6->ip6_src)) != 0 ||
+ UNALIGNED_MEMCMP(ip6->ip6_dst, &xmep->client,
+ sizeof(ip6->ip6_dst)) != 0) {
+ cmp = 0;
+ }
+ break;
+ default:
+ cmp = 0;
+ break;
+ }
+ if (cmp) {
+ /* match */
+ xid_map_hint = i;
+ *proc = xmep->proc;
+ *vers = xmep->vers;
+ return 0;
+ }
+ nextitem:
+ if (++i >= XIDMAPSIZE)
+ i = 0;
+ } while (i != xid_map_hint);
+
+ /* search failed */
+ return (-1);
+}
+
+/*
+ * Routines for parsing reply packets
+ */
+
+/*
+ * Return a pointer to the beginning of the actual results.
+ * If the packet was truncated, return 0.
+ */
+static const uint32_t *
+parserep(netdissect_options *ndo,
+ const struct sunrpc_msg *rp, u_int length, int *nfserrp)
+{
+ const uint32_t *dp;
+ u_int len;
+ enum sunrpc_accept_stat astat;
+
+ /*
+ * Portability note:
+ * Here we find the address of the ar_verf credentials.
+ * Originally, this calculation was
+ * dp = (uint32_t *)&rp->rm_reply.rp_acpt.ar_verf
+ * On the wire, the rp_acpt field starts immediately after
+ * the (32 bit) rp_stat field. However, rp_acpt (which is a
+ * "struct accepted_reply") contains a "struct opaque_auth",
+ * whose internal representation contains a pointer, so on a
+ * 64-bit machine the compiler inserts 32 bits of padding
+ * before rp->rm_reply.rp_acpt.ar_verf. So, we cannot use
+ * the internal representation to parse the on-the-wire
+ * representation. Instead, we skip past the rp_stat field,
+ * which is an "enum" and so occupies one 32-bit word.
+ */
+ dp = ((const uint32_t *)&rp->rm_reply) + 1;
+ len = GET_BE_U_4(dp + 1);
+ if (len >= length)
+ return (NULL);
+ /*
+ * skip past the ar_verf credentials.
+ */
+ dp += (len + (2*sizeof(uint32_t) + 3)) / sizeof(uint32_t);
+
+ /*
+ * now we can check the ar_stat field
+ */
+ astat = (enum sunrpc_accept_stat) GET_BE_U_4(dp);
+ if (astat != SUNRPC_SUCCESS) {
+ ND_PRINT(" %s", tok2str(sunrpc_str, "ar_stat %u", astat));
+ *nfserrp = 1; /* suppress trunc string */
+ return (NULL);
+ }
+ /* successful return */
+ ND_TCHECK_LEN(dp, sizeof(astat));
+ return ((const uint32_t *) (sizeof(astat) + ((const char *)dp)));
+trunc:
+ return (0);
+}
+
+static const uint32_t *
+parsestatus(netdissect_options *ndo,
+ const uint32_t *dp, u_int *er, int *nfserrp)
+{
+ u_int errnum;
+
+ errnum = GET_BE_U_4(dp);
+ if (er)
+ *er = errnum;
+ if (errnum != 0) {
+ if (!ndo->ndo_qflag)
+ ND_PRINT(" ERROR: %s",
+ tok2str(status2str, "unk %u", errnum));
+ *nfserrp = 1;
+ }
+ return (dp + 1);
+}
+
+static const uint32_t *
+parsefattr(netdissect_options *ndo,
+ const uint32_t *dp, int verbose, int v3)
+{
+ const struct nfs_fattr *fap;
+
+ fap = (const struct nfs_fattr *)dp;
+ ND_TCHECK_4(fap->fa_gid);
+ if (verbose) {
+ /*
+ * XXX - UIDs and GIDs are unsigned in NFS and in
+ * at least some UN*Xes, but we'll show them as
+ * signed because -2 has traditionally been the
+ * UID for "nobody", rather than 4294967294.
+ */
+ ND_PRINT(" %s %o ids %d/%d",
+ tok2str(type2str, "unk-ft %u ",
+ GET_BE_U_4(fap->fa_type)),
+ GET_BE_U_4(fap->fa_mode),
+ GET_BE_S_4(fap->fa_uid),
+ GET_BE_S_4(fap->fa_gid));
+ if (v3) {
+ ND_PRINT(" sz %" PRIu64,
+ GET_BE_U_8(fap->fa3_size));
+ } else {
+ ND_PRINT(" sz %u", GET_BE_U_4(fap->fa2_size));
+ }
+ }
+ /* print lots more stuff */
+ if (verbose > 1) {
+ if (v3) {
+ ND_TCHECK_8(&fap->fa3_ctime);
+ ND_PRINT(" nlink %u rdev %u/%u",
+ GET_BE_U_4(fap->fa_nlink),
+ GET_BE_U_4(fap->fa3_rdev.specdata1),
+ GET_BE_U_4(fap->fa3_rdev.specdata2));
+ ND_PRINT(" fsid %" PRIx64,
+ GET_BE_U_8(fap->fa3_fsid));
+ ND_PRINT(" fileid %" PRIx64,
+ GET_BE_U_8(fap->fa3_fileid));
+ ND_PRINT(" a/m/ctime %u.%06u",
+ GET_BE_U_4(fap->fa3_atime.nfsv3_sec),
+ GET_BE_U_4(fap->fa3_atime.nfsv3_nsec));
+ ND_PRINT(" %u.%06u",
+ GET_BE_U_4(fap->fa3_mtime.nfsv3_sec),
+ GET_BE_U_4(fap->fa3_mtime.nfsv3_nsec));
+ ND_PRINT(" %u.%06u",
+ GET_BE_U_4(fap->fa3_ctime.nfsv3_sec),
+ GET_BE_U_4(fap->fa3_ctime.nfsv3_nsec));
+ } else {
+ ND_TCHECK_8(&fap->fa2_ctime);
+ ND_PRINT(" nlink %u rdev 0x%x fsid 0x%x nodeid 0x%x a/m/ctime",
+ GET_BE_U_4(fap->fa_nlink),
+ GET_BE_U_4(fap->fa2_rdev),
+ GET_BE_U_4(fap->fa2_fsid),
+ GET_BE_U_4(fap->fa2_fileid));
+ ND_PRINT(" %u.%06u",
+ GET_BE_U_4(fap->fa2_atime.nfsv2_sec),
+ GET_BE_U_4(fap->fa2_atime.nfsv2_usec));
+ ND_PRINT(" %u.%06u",
+ GET_BE_U_4(fap->fa2_mtime.nfsv2_sec),
+ GET_BE_U_4(fap->fa2_mtime.nfsv2_usec));
+ ND_PRINT(" %u.%06u",
+ GET_BE_U_4(fap->fa2_ctime.nfsv2_sec),
+ GET_BE_U_4(fap->fa2_ctime.nfsv2_usec));
+ }
+ }
+ return ((const uint32_t *)((const unsigned char *)dp +
+ (v3 ? NFSX_V3FATTR : NFSX_V2FATTR)));
+trunc:
+ return (NULL);
+}
+
+static int
+parseattrstat(netdissect_options *ndo,
+ const uint32_t *dp, int verbose, int v3, int *nfserrp)
+{
+ u_int er;
+
+ dp = parsestatus(ndo, dp, &er, nfserrp);
+ if (dp == NULL)
+ return (0);
+ if (er)
+ return (1);
+
+ return (parsefattr(ndo, dp, verbose, v3) != NULL);
+}
+
+static int
+parsediropres(netdissect_options *ndo,
+ const uint32_t *dp, int *nfserrp)
+{
+ u_int er;
+
+ dp = parsestatus(ndo, dp, &er, nfserrp);
+ if (dp == NULL)
+ return (0);
+ if (er)
+ return (1);
+
+ dp = parsefh(ndo, dp, 0);
+ if (dp == NULL)
+ return (0);
+
+ return (parsefattr(ndo, dp, ndo->ndo_vflag, 0) != NULL);
+}
+
+static int
+parselinkres(netdissect_options *ndo,
+ const uint32_t *dp, int v3, int *nfserrp)
+{
+ u_int er;
+
+ dp = parsestatus(ndo, dp, &er, nfserrp);
+ if (dp == NULL)
+ return(0);
+ if (er)
+ return(1);
+ if (v3) {
+ dp = parse_post_op_attr(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ return (0);
+ }
+ ND_PRINT(" ");
+ return (parsefn(ndo, dp) != NULL);
+}
+
+static int
+parsestatfs(netdissect_options *ndo,
+ const uint32_t *dp, int v3, int *nfserrp)
+{
+ const struct nfs_statfs *sfsp;
+ u_int er;
+
+ dp = parsestatus(ndo, dp, &er, nfserrp);
+ if (dp == NULL)
+ return (0);
+ if (!v3 && er)
+ return (1);
+
+ if (ndo->ndo_qflag)
+ return(1);
+
+ if (v3) {
+ if (ndo->ndo_vflag)
+ ND_PRINT(" POST:");
+ dp = parse_post_op_attr(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ return (0);
+ }
+
+ ND_TCHECK_LEN(dp, (v3 ? NFSX_V3STATFS : NFSX_V2STATFS));
+
+ sfsp = (const struct nfs_statfs *)dp;
+
+ if (v3) {
+ ND_PRINT(" tbytes %" PRIu64 " fbytes %" PRIu64 " abytes %" PRIu64,
+ GET_BE_U_8(sfsp->sf_tbytes),
+ GET_BE_U_8(sfsp->sf_fbytes),
+ GET_BE_U_8(sfsp->sf_abytes));
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" tfiles %" PRIu64 " ffiles %" PRIu64 " afiles %" PRIu64 " invar %u",
+ GET_BE_U_8(sfsp->sf_tfiles),
+ GET_BE_U_8(sfsp->sf_ffiles),
+ GET_BE_U_8(sfsp->sf_afiles),
+ GET_BE_U_4(sfsp->sf_invarsec));
+ }
+ } else {
+ ND_PRINT(" tsize %u bsize %u blocks %u bfree %u bavail %u",
+ GET_BE_U_4(sfsp->sf_tsize),
+ GET_BE_U_4(sfsp->sf_bsize),
+ GET_BE_U_4(sfsp->sf_blocks),
+ GET_BE_U_4(sfsp->sf_bfree),
+ GET_BE_U_4(sfsp->sf_bavail));
+ }
+
+ return (1);
+trunc:
+ return (0);
+}
+
+static int
+parserddires(netdissect_options *ndo,
+ const uint32_t *dp, int *nfserrp)
+{
+ u_int er;
+
+ dp = parsestatus(ndo, dp, &er, nfserrp);
+ if (dp == NULL)
+ return (0);
+ if (er)
+ return (1);
+ if (ndo->ndo_qflag)
+ return (1);
+
+ ND_PRINT(" offset 0x%x size %u ",
+ GET_BE_U_4(dp), GET_BE_U_4(dp + 1));
+ if (GET_BE_U_4(dp + 2) != 0)
+ ND_PRINT(" eof");
+
+ return (1);
+}
+
+static const uint32_t *
+parse_wcc_attr(netdissect_options *ndo,
+ const uint32_t *dp)
+{
+ /* Our caller has already checked this */
+ ND_PRINT(" sz %" PRIu64, GET_BE_U_8(dp));
+ ND_PRINT(" mtime %u.%06u ctime %u.%06u",
+ GET_BE_U_4(dp + 2), GET_BE_U_4(dp + 3),
+ GET_BE_U_4(dp + 4), GET_BE_U_4(dp + 5));
+ return (dp + 6);
+}
+
+/*
+ * Pre operation attributes. Print only if vflag > 1.
+ */
+static const uint32_t *
+parse_pre_op_attr(netdissect_options *ndo,
+ const uint32_t *dp, int verbose)
+{
+ if (!GET_BE_U_4(dp))
+ return (dp + 1);
+ dp++;
+ ND_TCHECK_LEN(dp, 24);
+ if (verbose > 1) {
+ return parse_wcc_attr(ndo, dp);
+ } else {
+ /* If not verbose enough, just skip over wcc_attr */
+ return (dp + 6);
+ }
+trunc:
+ return (NULL);
+}
+
+/*
+ * Post operation attributes are printed if vflag >= 1
+ */
+static const uint32_t *
+parse_post_op_attr(netdissect_options *ndo,
+ const uint32_t *dp, int verbose)
+{
+ if (!GET_BE_U_4(dp))
+ return (dp + 1);
+ dp++;
+ if (verbose) {
+ return parsefattr(ndo, dp, verbose, 1);
+ } else
+ return (dp + (NFSX_V3FATTR / sizeof (uint32_t)));
+}
+
+static const uint32_t *
+parse_wcc_data(netdissect_options *ndo,
+ const uint32_t *dp, int verbose)
+{
+ if (verbose > 1)
+ ND_PRINT(" PRE:");
+ dp = parse_pre_op_attr(ndo, dp, verbose);
+ if (dp == NULL)
+ return (0);
+
+ if (verbose)
+ ND_PRINT(" POST:");
+ return parse_post_op_attr(ndo, dp, verbose);
+}
+
+static const uint32_t *
+parsecreateopres(netdissect_options *ndo,
+ const uint32_t *dp, int verbose, int *nfserrp)
+{
+ u_int er;
+
+ dp = parsestatus(ndo, dp, &er, nfserrp);
+ if (dp == NULL)
+ return (0);
+ if (er)
+ dp = parse_wcc_data(ndo, dp, verbose);
+ else {
+ if (!GET_BE_U_4(dp))
+ return (dp + 1);
+ dp++;
+ dp = parsefh(ndo, dp, 1);
+ if (dp == NULL)
+ return (0);
+ if (verbose) {
+ dp = parse_post_op_attr(ndo, dp, verbose);
+ if (dp == NULL)
+ return (0);
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT(" dir attr:");
+ dp = parse_wcc_data(ndo, dp, verbose);
+ }
+ }
+ }
+ return (dp);
+}
+
+static const uint32_t *
+parsewccres(netdissect_options *ndo,
+ const uint32_t *dp, int verbose, int *nfserrp)
+{
+ u_int er;
+
+ dp = parsestatus(ndo, dp, &er, nfserrp);
+ if (dp == NULL)
+ return (0);
+ return parse_wcc_data(ndo, dp, verbose);
+}
+
+static const uint32_t *
+parsev3rddirres(netdissect_options *ndo,
+ const uint32_t *dp, int verbose, int *nfserrp)
+{
+ u_int er;
+
+ dp = parsestatus(ndo, dp, &er, nfserrp);
+ if (dp == NULL)
+ return (0);
+ if (ndo->ndo_vflag)
+ ND_PRINT(" POST:");
+ dp = parse_post_op_attr(ndo, dp, verbose);
+ if (dp == NULL)
+ return (0);
+ if (er)
+ return dp;
+ if (ndo->ndo_vflag) {
+ /*
+ * This displays the 8 bytes of the verifier in order,
+ * from the low-order byte to the high-order byte.
+ */
+ ND_PRINT(" verf %08x%08x",
+ GET_BE_U_4(dp), GET_BE_U_4(dp + 1));
+ dp += 2;
+ }
+ return dp;
+}
+
+static int
+parsefsinfo(netdissect_options *ndo,
+ const uint32_t *dp, int *nfserrp)
+{
+ const struct nfsv3_fsinfo *sfp;
+ u_int er;
+
+ dp = parsestatus(ndo, dp, &er, nfserrp);
+ if (dp == NULL)
+ return (0);
+ if (ndo->ndo_vflag)
+ ND_PRINT(" POST:");
+ dp = parse_post_op_attr(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ return (0);
+ if (er)
+ return (1);
+
+ sfp = (const struct nfsv3_fsinfo *)dp;
+ ND_TCHECK_SIZE(sfp);
+ ND_PRINT(" rtmax %u rtpref %u wtmax %u wtpref %u dtpref %u",
+ GET_BE_U_4(sfp->fs_rtmax),
+ GET_BE_U_4(sfp->fs_rtpref),
+ GET_BE_U_4(sfp->fs_wtmax),
+ GET_BE_U_4(sfp->fs_wtpref),
+ GET_BE_U_4(sfp->fs_dtpref));
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" rtmult %u wtmult %u maxfsz %" PRIu64,
+ GET_BE_U_4(sfp->fs_rtmult),
+ GET_BE_U_4(sfp->fs_wtmult),
+ GET_BE_U_8(sfp->fs_maxfilesize));
+ ND_PRINT(" delta %u.%06u ",
+ GET_BE_U_4(sfp->fs_timedelta.nfsv3_sec),
+ GET_BE_U_4(sfp->fs_timedelta.nfsv3_nsec));
+ }
+ return (1);
+trunc:
+ return (0);
+}
+
+static int
+parsepathconf(netdissect_options *ndo,
+ const uint32_t *dp, int *nfserrp)
+{
+ u_int er;
+ const struct nfsv3_pathconf *spp;
+
+ dp = parsestatus(ndo, dp, &er, nfserrp);
+ if (dp == NULL)
+ return (0);
+ if (ndo->ndo_vflag)
+ ND_PRINT(" POST:");
+ dp = parse_post_op_attr(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ return (0);
+ if (er)
+ return (1);
+
+ spp = (const struct nfsv3_pathconf *)dp;
+ ND_TCHECK_SIZE(spp);
+
+ ND_PRINT(" linkmax %u namemax %u %s %s %s %s",
+ GET_BE_U_4(spp->pc_linkmax),
+ GET_BE_U_4(spp->pc_namemax),
+ GET_BE_U_4(spp->pc_notrunc) ? "notrunc" : "",
+ GET_BE_U_4(spp->pc_chownrestricted) ? "chownres" : "",
+ GET_BE_U_4(spp->pc_caseinsensitive) ? "igncase" : "",
+ GET_BE_U_4(spp->pc_casepreserving) ? "keepcase" : "");
+ return (1);
+trunc:
+ return (0);
+}
+
+static void
+interp_reply(netdissect_options *ndo,
+ const struct sunrpc_msg *rp, uint32_t proc, uint32_t vers,
+ int length)
+{
+ const uint32_t *dp;
+ int v3;
+ u_int er;
+ int nfserr = 0;
+
+ v3 = (vers == NFS_VER3);
+
+ if (!v3 && proc < NFS_NPROCS)
+ proc = nfsv3_procid[proc];
+
+ ND_PRINT(" %s", tok2str(nfsproc_str, "proc-%u", proc));
+ switch (proc) {
+
+ case NFSPROC_GETATTR:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (parseattrstat(ndo, dp, !ndo->ndo_qflag, v3, &nfserr) == 0)
+ goto trunc;
+ break;
+
+ case NFSPROC_SETATTR:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ if (parsewccres(ndo, dp, ndo->ndo_vflag, &nfserr) == 0)
+ goto trunc;
+ } else {
+ if (parseattrstat(ndo, dp, !ndo->ndo_qflag, 0, &nfserr) == 0)
+ goto trunc;
+ }
+ break;
+
+ case NFSPROC_LOOKUP:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ dp = parsestatus(ndo, dp, &er, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (er) {
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT(" post dattr:");
+ dp = parse_post_op_attr(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ goto trunc;
+ }
+ } else {
+ dp = parsefh(ndo, dp, v3);
+ if (dp == NULL)
+ goto trunc;
+ dp = parse_post_op_attr(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ goto trunc;
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT(" post dattr:");
+ dp = parse_post_op_attr(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ goto trunc;
+ }
+ }
+ } else {
+ if (parsediropres(ndo, dp, &nfserr) == 0)
+ goto trunc;
+ }
+ break;
+
+ case NFSPROC_ACCESS:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ dp = parsestatus(ndo, dp, &er, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (ndo->ndo_vflag)
+ ND_PRINT(" attr:");
+ dp = parse_post_op_attr(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ goto trunc;
+ if (!er) {
+ ND_PRINT(" c %04x", GET_BE_U_4(dp));
+ }
+ break;
+
+ case NFSPROC_READLINK:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (parselinkres(ndo, dp, v3, &nfserr) == 0)
+ goto trunc;
+ break;
+
+ case NFSPROC_READ:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ dp = parsestatus(ndo, dp, &er, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ dp = parse_post_op_attr(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ goto trunc;
+ if (!er) {
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" %u bytes", GET_BE_U_4(dp));
+ if (GET_BE_U_4(dp + 1))
+ ND_PRINT(" EOF");
+ }
+ }
+ } else {
+ if (parseattrstat(ndo, dp, ndo->ndo_vflag, 0, &nfserr) == 0)
+ goto trunc;
+ }
+ break;
+
+ case NFSPROC_WRITE:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ dp = parsestatus(ndo, dp, &er, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ dp = parse_wcc_data(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ goto trunc;
+ if (!er) {
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" %u bytes", GET_BE_U_4(dp));
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT(" <%s>",
+ tok2str(nfsv3_writemodes,
+ NULL, GET_BE_U_4(dp + 1)));
+
+ /* write-verf-cookie */
+ ND_PRINT(" verf %" PRIx64,
+ GET_BE_U_8(dp + 2));
+ }
+ }
+ }
+ return;
+ } else {
+ if (parseattrstat(ndo, dp, ndo->ndo_vflag, v3, &nfserr) == 0)
+ goto trunc;
+ }
+ break;
+
+ case NFSPROC_CREATE:
+ case NFSPROC_MKDIR:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ if (parsecreateopres(ndo, dp, ndo->ndo_vflag, &nfserr) == NULL)
+ goto trunc;
+ } else {
+ if (parsediropres(ndo, dp, &nfserr) == 0)
+ goto trunc;
+ }
+ break;
+
+ case NFSPROC_SYMLINK:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ if (parsecreateopres(ndo, dp, ndo->ndo_vflag, &nfserr) == NULL)
+ goto trunc;
+ } else {
+ if (parsestatus(ndo, dp, &er, &nfserr) == NULL)
+ goto trunc;
+ }
+ break;
+
+ case NFSPROC_MKNOD:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (parsecreateopres(ndo, dp, ndo->ndo_vflag, &nfserr) == NULL)
+ goto trunc;
+ break;
+
+ case NFSPROC_REMOVE:
+ case NFSPROC_RMDIR:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ if (parsewccres(ndo, dp, ndo->ndo_vflag, &nfserr) == NULL)
+ goto trunc;
+ } else {
+ if (parsestatus(ndo, dp, &er, &nfserr) == NULL)
+ goto trunc;
+ }
+ break;
+
+ case NFSPROC_RENAME:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ dp = parsestatus(ndo, dp, &er, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" from:");
+ dp = parse_wcc_data(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ goto trunc;
+ ND_PRINT(" to:");
+ dp = parse_wcc_data(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ goto trunc;
+ }
+ } else {
+ if (parsestatus(ndo, dp, &er, &nfserr) == NULL)
+ goto trunc;
+ }
+ break;
+
+ case NFSPROC_LINK:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ dp = parsestatus(ndo, dp, &er, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" file POST:");
+ dp = parse_post_op_attr(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ goto trunc;
+ ND_PRINT(" dir:");
+ dp = parse_wcc_data(ndo, dp, ndo->ndo_vflag);
+ if (dp == NULL)
+ goto trunc;
+ }
+ return;
+ } else {
+ if (parsestatus(ndo, dp, &er, &nfserr) == NULL)
+ goto trunc;
+ }
+ break;
+
+ case NFSPROC_READDIR:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (v3) {
+ if (parsev3rddirres(ndo, dp, ndo->ndo_vflag, &nfserr) == NULL)
+ goto trunc;
+ } else {
+ if (parserddires(ndo, dp, &nfserr) == 0)
+ goto trunc;
+ }
+ break;
+
+ case NFSPROC_READDIRPLUS:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (parsev3rddirres(ndo, dp, ndo->ndo_vflag, &nfserr) == NULL)
+ goto trunc;
+ break;
+
+ case NFSPROC_FSSTAT:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (parsestatfs(ndo, dp, v3, &nfserr) == 0)
+ goto trunc;
+ break;
+
+ case NFSPROC_FSINFO:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (parsefsinfo(ndo, dp, &nfserr) == 0)
+ goto trunc;
+ break;
+
+ case NFSPROC_PATHCONF:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (parsepathconf(ndo, dp, &nfserr) == 0)
+ goto trunc;
+ break;
+
+ case NFSPROC_COMMIT:
+ dp = parserep(ndo, rp, length, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ dp = parsewccres(ndo, dp, ndo->ndo_vflag, &nfserr);
+ if (dp == NULL)
+ goto trunc;
+ if (ndo->ndo_vflag > 1) {
+ /* write-verf-cookie */
+ ND_PRINT(" verf %" PRIx64, GET_BE_U_8(dp));
+ }
+ break;
+
+ default:
+ break;
+ }
+ return;
+
+trunc:
+ if (!nfserr)
+ nd_print_trunc(ndo);
+}
diff --git a/print-nsh.c b/print-nsh.c
new file mode 100644
index 0000000..12a63cd
--- /dev/null
+++ b/print-nsh.c
@@ -0,0 +1,264 @@
+/* Copyright (c) 2015, bugyo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: Network Service Header (NSH) printer */
+
+/* specification: RFC 8300 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+static const struct tok nsh_flags [] = {
+ { 0x2, "O" },
+ { 0, NULL }
+};
+
+/*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Ver|O|U| TTL | Length |U|U|U|U|MD Type| Next Protocol |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+#define NSH_BASE_HDR_LEN 4
+#define NSH_VER(x) (((x) & 0xc0000000) >> 30)
+#define NSH_FLAGS(x) (((x) & 0x30000000) >> 28)
+#define NSH_TTL(x) (((x) & 0x0fc00000) >> 22)
+#define NSH_LENGTH(x) (((x) & 0x003f0000) >> 16)
+#define NSH_MD_TYPE(x) (((x) & 0x00000f00) >> 8)
+#define NSH_NEXT_PROT(x) (((x) & 0x000000ff) >> 0)
+
+#define NSH_SERVICE_PATH_HDR_LEN 4
+#define NSH_HDR_WORD_SIZE 4U
+
+#define MD_RSV 0x00
+#define MD_TYPE1 0x01
+#define MD_TYPE2 0x02
+#define MD_EXP 0x0F
+static const struct tok md_str[] = {
+ { MD_RSV, "reserved" },
+ { MD_TYPE1, "1" },
+ { MD_TYPE2, "2" },
+ { MD_EXP, "experimental" },
+ { 0, NULL }
+};
+
+#define NP_IPV4 0x01
+#define NP_IPV6 0x02
+#define NP_ETH 0x03
+#define NP_NSH 0x04
+#define NP_MPLS 0x05
+#define NP_EXP1 0xFE
+#define NP_EXP2 0xFF
+static const struct tok np_str[] = {
+ { NP_IPV4, "IPv4" },
+ { NP_IPV6, "IPv6" },
+ { NP_ETH, "Ethernet" },
+ { NP_NSH, "NSH" },
+ { NP_MPLS, "MPLS" },
+ { NP_EXP1, "Experiment 1" },
+ { NP_EXP2, "Experiment 2" },
+ { 0, NULL }
+};
+
+void
+nsh_print(netdissect_options *ndo, const u_char *bp, u_int len)
+{
+ uint32_t basehdr;
+ u_int ver, length, md_type;
+ uint8_t next_protocol;
+ u_char past_headers = 0;
+ u_int next_len;
+
+ ndo->ndo_protocol = "nsh";
+ /*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Base Header |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Service Path Header |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * ~ Context Header(s) ~
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+ /* print Base Header and Service Path Header */
+ if (len < NSH_BASE_HDR_LEN + NSH_SERVICE_PATH_HDR_LEN) {
+ ND_PRINT(" (packet length %u < %u)",
+ len, NSH_BASE_HDR_LEN + NSH_SERVICE_PATH_HDR_LEN);
+ goto invalid;
+ }
+
+ basehdr = GET_BE_U_4(bp);
+ bp += 4;
+ ver = NSH_VER(basehdr);
+ length = NSH_LENGTH(basehdr);
+ md_type = NSH_MD_TYPE(basehdr);
+ next_protocol = NSH_NEXT_PROT(basehdr);
+
+ ND_PRINT("NSH, ");
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT("ver %u, ", ver);
+ }
+ if (ver != 0)
+ return;
+ ND_PRINT("flags [%s], ",
+ bittok2str_nosep(nsh_flags, "none", NSH_FLAGS(basehdr)));
+ if (ndo->ndo_vflag > 2) {
+ ND_PRINT("TTL %u, ", NSH_TTL(basehdr));
+ ND_PRINT("length %u, ", length);
+ ND_PRINT("md type %s, ", tok2str(md_str, "unknown (0x%02x)", md_type));
+ }
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT("next-protocol %s, ",
+ tok2str(np_str, "unknown (0x%02x)", next_protocol));
+ }
+
+ /* Make sure we have all the headers */
+ if (len < length * NSH_HDR_WORD_SIZE) {
+ ND_PRINT(" (too many headers for packet length %u)", len);
+ goto invalid;
+ }
+
+ /*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Service Path Identifier (SPI) | Service Index |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ */
+ ND_PRINT("service-path-id 0x%06x, ", GET_BE_U_3(bp));
+ bp += 3;
+ ND_PRINT("service-index 0x%x", GET_U_1(bp));
+ bp += 1;
+
+ /*
+ * length includes the lengths of the Base and Service Path headers.
+ * That means it must be at least 2.
+ */
+ if (length < 2) {
+ ND_PRINT(" (less than two headers)");
+ goto invalid;
+ }
+
+ /*
+ * Print, or skip, the Context Headers.
+ * (length - 2) is the length of those headers.
+ */
+ if (ndo->ndo_vflag > 2) {
+ u_int n;
+
+ if (md_type == MD_TYPE1) {
+ if (length != 6) {
+ ND_PRINT(" (invalid length for the MD type)");
+ goto invalid;
+ }
+ for (n = 0; n < length - 2; n++) {
+ ND_PRINT("\n Context[%02u]: 0x%08x", n, GET_BE_U_4(bp));
+ bp += NSH_HDR_WORD_SIZE;
+ }
+ past_headers = 1;
+ }
+ else if (md_type == MD_TYPE2) {
+ n = 0;
+ while (n < length - 2) {
+ uint16_t tlv_class;
+ uint8_t tlv_type, tlv_len, tlv_len_padded;
+
+ tlv_class = GET_BE_U_2(bp);
+ bp += 2;
+ tlv_type = GET_U_1(bp);
+ bp += 1;
+ tlv_len = GET_U_1(bp) & 0x7f;
+ bp += 1;
+ tlv_len_padded = roundup2(tlv_len, NSH_HDR_WORD_SIZE);
+
+ ND_PRINT("\n TLV Class %u, Type %u, Len %u",
+ tlv_class, tlv_type, tlv_len);
+
+ n += 1;
+
+ if (length - 2 < n + tlv_len_padded / NSH_HDR_WORD_SIZE) {
+ ND_PRINT(" (length too big)");
+ goto invalid;
+ }
+
+ if (tlv_len) {
+ const char *sep = "0x";
+ u_int vn;
+
+ ND_PRINT("\n Value: ");
+ for (vn = 0; vn < tlv_len; vn++) {
+ ND_PRINT("%s%02x", sep, GET_U_1(bp));
+ bp += 1;
+ sep = ":";
+ }
+ /* Cover any TLV padding. */
+ ND_TCHECK_LEN(bp, tlv_len_padded - tlv_len);
+ bp += tlv_len_padded - tlv_len;
+ n += tlv_len_padded / NSH_HDR_WORD_SIZE;
+ }
+ }
+ past_headers = 1;
+ }
+ }
+ if (! past_headers) {
+ ND_TCHECK_LEN(bp, (length - 2) * NSH_HDR_WORD_SIZE);
+ bp += (length - 2) * NSH_HDR_WORD_SIZE;
+ }
+ ND_PRINT(ndo->ndo_vflag ? "\n " : ": ");
+
+ /* print Next Protocol */
+ next_len = len - length * NSH_HDR_WORD_SIZE;
+ switch (next_protocol) {
+ case NP_IPV4:
+ ip_print(ndo, bp, next_len);
+ break;
+ case NP_IPV6:
+ ip6_print(ndo, bp, next_len);
+ break;
+ case NP_ETH:
+ ether_print(ndo, bp, next_len, ND_BYTES_AVAILABLE_AFTER(bp), NULL, NULL);
+ break;
+ default:
+ ND_PRINT("ERROR: unknown-next-protocol");
+ return;
+ }
+
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
+
diff --git a/print-ntp.c b/print-ntp.c
new file mode 100644
index 0000000..537975c
--- /dev/null
+++ b/print-ntp.c
@@ -0,0 +1,536 @@
+/*
+ * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * By Jeffrey Mogul/DECWRL
+ * loosely based on print-bootp.c
+ */
+
+/* \summary: Network Time Protocol (NTP) printer */
+
+/*
+ * specification:
+ *
+ * RFC 1119 - NTPv2
+ * RFC 1305 - NTPv3
+ * RFC 5905 - NTPv4
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <time.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ntp.h"
+
+/*
+ * Based on ntp.h from the U of MD implementation
+ * This file is based on Version 2 of the NTP spec (RFC1119).
+ */
+
+/* rfc2030
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |LI | VN |Mode | Stratum | Poll | Precision |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Root Delay |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Root Dispersion |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Reference Identifier |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | Reference Timestamp (64) |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | Originate Timestamp (64) |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | Receive Timestamp (64) |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | Transmit Timestamp (64) |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Key Identifier (optional) (32) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | |
+ * | Message Digest (optional) (128) |
+ * | |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+/* Length of the NTP data message with the mandatory fields ("the header")
+ * and without any optional fields (extension, Key Identifier,
+ * Message Digest).
+ */
+#define NTP_TIMEMSG_MINLEN 48U
+
+struct ntp_time_data {
+ nd_uint8_t status; /* status of local clock and leap info */
+ nd_uint8_t stratum; /* Stratum level */
+ nd_int8_t ppoll; /* poll value */
+ nd_int8_t precision;
+ struct s_fixedpt root_delay;
+ struct s_fixedpt root_dispersion;
+ nd_uint32_t refid;
+ struct l_fixedpt ref_timestamp;
+ struct l_fixedpt org_timestamp;
+ struct l_fixedpt rec_timestamp;
+ struct l_fixedpt xmt_timestamp;
+ nd_uint32_t key_id;
+ nd_uint8_t message_digest[20];
+};
+/*
+ * Leap Second Codes (high order two bits)
+ */
+#define NO_WARNING 0x00 /* no warning */
+#define PLUS_SEC 0x40 /* add a second (61 seconds) */
+#define MINUS_SEC 0x80 /* minus a second (59 seconds) */
+#define ALARM 0xc0 /* alarm condition (clock unsynchronized) */
+
+/*
+ * Clock Status Bits that Encode Version
+ */
+#define NTPVERSION_1 0x08
+#define VERSIONMASK 0x38
+#define VERSIONSHIFT 3
+#define LEAPMASK 0xc0
+#define LEAPSHIFT 6
+#ifdef MODEMASK
+#undef MODEMASK /* Solaris sucks */
+#endif
+#define MODEMASK 0x07
+#define MODESHIFT 0
+
+/*
+ * Code values
+ */
+#define MODE_UNSPEC 0 /* unspecified */
+#define MODE_SYM_ACT 1 /* symmetric active */
+#define MODE_SYM_PAS 2 /* symmetric passive */
+#define MODE_CLIENT 3 /* client */
+#define MODE_SERVER 4 /* server */
+#define MODE_BROADCAST 5 /* broadcast */
+#define MODE_CONTROL 6 /* control message */
+#define MODE_RES2 7 /* reserved */
+
+/*
+ * Stratum Definitions
+ */
+#define UNSPECIFIED 0
+#define PRIM_REF 1 /* radio clock */
+#define INFO_QUERY 62 /* **** THIS implementation dependent **** */
+#define INFO_REPLY 63 /* **** THIS implementation dependent **** */
+
+static void p_sfix(netdissect_options *ndo, const struct s_fixedpt *);
+static void p_ntp_delta(netdissect_options *, const struct l_fixedpt *, const struct l_fixedpt *);
+static void p_poll(netdissect_options *, const int);
+
+static const struct tok ntp_mode_values[] = {
+ { MODE_UNSPEC, "unspecified" },
+ { MODE_SYM_ACT, "symmetric active" },
+ { MODE_SYM_PAS, "symmetric passive" },
+ { MODE_CLIENT, "Client" },
+ { MODE_SERVER, "Server" },
+ { MODE_BROADCAST, "Broadcast" },
+ { MODE_CONTROL, "Control Message" },
+ { MODE_RES2, "Reserved" },
+ { 0, NULL }
+};
+
+static const struct tok ntp_leapind_values[] = {
+ { NO_WARNING, "" },
+ { PLUS_SEC, "+1s" },
+ { MINUS_SEC, "-1s" },
+ { ALARM, "clock unsynchronized" },
+ { 0, NULL }
+};
+
+static const struct tok ntp_stratum_values[] = {
+ { UNSPECIFIED, "unspecified" },
+ { PRIM_REF, "primary reference" },
+ { 0, NULL }
+};
+
+/* draft-ietf-ntp-mode-6-cmds-02
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |LI | VN |Mode |R|E|M| OpCode | Sequence Number |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Status | Association ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Offset | Count |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * / Data (up to 468 bytes) /
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Padding (optional) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * / Authenticator (optional, 96 bytes) /
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * Figure 1: NTP Control Message Header
+ */
+
+/* Length of the NTP control message with the mandatory fields ("the header")
+ * and without any optional fields (Data, Padding, Authenticator).
+ */
+#define NTP_CTRLMSG_MINLEN 12U
+
+struct ntp_control_data {
+ nd_uint8_t magic; /* LI, VN, Mode */
+ nd_uint8_t control; /* R, E, M, OpCode */
+ nd_uint16_t sequence; /* Sequence Number */
+ nd_uint16_t status; /* Status */
+ nd_uint16_t assoc; /* Association ID */
+ nd_uint16_t offset; /* Offset */
+ nd_uint16_t count; /* Count */
+ nd_uint8_t data[564]; /* Data, [Padding, [Authenticator]] */
+};
+
+/*
+ * Print NTP time requests and responses
+ */
+static void
+ntp_time_print(netdissect_options *ndo,
+ const struct ntp_time_data *bp, u_int length)
+{
+ uint8_t stratum;
+
+ if (length < NTP_TIMEMSG_MINLEN)
+ goto invalid;
+
+ stratum = GET_U_1(bp->stratum);
+ ND_PRINT(", Stratum %u (%s)",
+ stratum,
+ tok2str(ntp_stratum_values, (stratum >=2 && stratum<=15) ? "secondary reference" : "reserved", stratum));
+
+ ND_PRINT(", poll %d", GET_S_1(bp->ppoll));
+ p_poll(ndo, GET_S_1(bp->ppoll));
+
+ ND_PRINT(", precision %d", GET_S_1(bp->precision));
+
+ ND_TCHECK_SIZE(&bp->root_delay);
+ ND_PRINT("\n\tRoot Delay: ");
+ p_sfix(ndo, &bp->root_delay);
+
+ ND_TCHECK_SIZE(&bp->root_dispersion);
+ ND_PRINT(", Root dispersion: ");
+ p_sfix(ndo, &bp->root_dispersion);
+
+ ND_TCHECK_4(bp->refid);
+ ND_PRINT(", Reference-ID: ");
+ /* Interpretation depends on stratum */
+ switch (stratum) {
+
+ case UNSPECIFIED:
+ ND_PRINT("(unspec)");
+ break;
+
+ case PRIM_REF:
+ if (nd_printn(ndo, (const u_char *)&(bp->refid), 4, ndo->ndo_snapend))
+ goto trunc;
+ break;
+
+ case INFO_QUERY:
+ ND_PRINT("%s INFO_QUERY", GET_IPADDR_STRING(bp->refid));
+ /* this doesn't have more content */
+ return;
+
+ case INFO_REPLY:
+ ND_PRINT("%s INFO_REPLY", GET_IPADDR_STRING(bp->refid));
+ /* this is too complex to be worth printing */
+ return;
+
+ default:
+ /* In NTPv4 (RFC 5905) refid is an IPv4 address or first 32 bits of
+ MD5 sum of IPv6 address */
+ ND_PRINT("0x%08x", GET_BE_U_4(bp->refid));
+ break;
+ }
+
+ ND_TCHECK_SIZE(&bp->ref_timestamp);
+ ND_PRINT("\n\t Reference Timestamp: ");
+ p_ntp_time(ndo, &(bp->ref_timestamp));
+
+ ND_TCHECK_SIZE(&bp->org_timestamp);
+ ND_PRINT("\n\t Originator Timestamp: ");
+ p_ntp_time(ndo, &(bp->org_timestamp));
+
+ ND_TCHECK_SIZE(&bp->rec_timestamp);
+ ND_PRINT("\n\t Receive Timestamp: ");
+ p_ntp_time(ndo, &(bp->rec_timestamp));
+
+ ND_TCHECK_SIZE(&bp->xmt_timestamp);
+ ND_PRINT("\n\t Transmit Timestamp: ");
+ p_ntp_time(ndo, &(bp->xmt_timestamp));
+
+ ND_PRINT("\n\t Originator - Receive Timestamp: ");
+ p_ntp_delta(ndo, &(bp->org_timestamp), &(bp->rec_timestamp));
+
+ ND_PRINT("\n\t Originator - Transmit Timestamp: ");
+ p_ntp_delta(ndo, &(bp->org_timestamp), &(bp->xmt_timestamp));
+
+ /* FIXME: this code is not aware of any extension fields */
+ if (length == NTP_TIMEMSG_MINLEN + 4) { /* Optional: key-id (crypto-NAK) */
+ ND_PRINT("\n\tKey id: %u", GET_BE_U_4(bp->key_id));
+ } else if (length == NTP_TIMEMSG_MINLEN + 4 + 16) { /* Optional: key-id + 128-bit digest */
+ ND_PRINT("\n\tKey id: %u", GET_BE_U_4(bp->key_id));
+ ND_TCHECK_LEN(bp->message_digest, 16);
+ ND_PRINT("\n\tAuthentication: %08x%08x%08x%08x",
+ GET_BE_U_4(bp->message_digest),
+ GET_BE_U_4(bp->message_digest + 4),
+ GET_BE_U_4(bp->message_digest + 8),
+ GET_BE_U_4(bp->message_digest + 12));
+ } else if (length == NTP_TIMEMSG_MINLEN + 4 + 20) { /* Optional: key-id + 160-bit digest */
+ ND_PRINT("\n\tKey id: %u", GET_BE_U_4(bp->key_id));
+ ND_TCHECK_LEN(bp->message_digest, 20);
+ ND_PRINT("\n\tAuthentication: %08x%08x%08x%08x%08x",
+ GET_BE_U_4(bp->message_digest),
+ GET_BE_U_4(bp->message_digest + 4),
+ GET_BE_U_4(bp->message_digest + 8),
+ GET_BE_U_4(bp->message_digest + 12),
+ GET_BE_U_4(bp->message_digest + 16));
+ } else if (length > NTP_TIMEMSG_MINLEN) {
+ ND_PRINT("\n\t(%u more bytes after the header)", length - NTP_TIMEMSG_MINLEN);
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(bp, length);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+/*
+ * Print NTP control message requests and responses
+ */
+static void
+ntp_control_print(netdissect_options *ndo,
+ const struct ntp_control_data *cd, u_int length)
+{
+ uint8_t control, R, E, M, opcode;
+ uint16_t sequence, status, assoc, offset, count;
+
+ if (length < NTP_CTRLMSG_MINLEN)
+ goto invalid;
+
+ control = GET_U_1(cd->control);
+ R = (control & 0x80) != 0;
+ E = (control & 0x40) != 0;
+ M = (control & 0x20) != 0;
+ opcode = control & 0x1f;
+ ND_PRINT(", %s, %s, %s, OpCode=%u\n",
+ R ? "Response" : "Request", E ? "Error" : "OK",
+ M ? "More" : "Last", opcode);
+
+ sequence = GET_BE_U_2(cd->sequence);
+ ND_PRINT("\tSequence=%hu", sequence);
+
+ status = GET_BE_U_2(cd->status);
+ ND_PRINT(", Status=%#hx", status);
+
+ assoc = GET_BE_U_2(cd->assoc);
+ ND_PRINT(", Assoc.=%hu", assoc);
+
+ offset = GET_BE_U_2(cd->offset);
+ ND_PRINT(", Offset=%hu", offset);
+
+ count = GET_BE_U_2(cd->count);
+ ND_PRINT(", Count=%hu", count);
+
+ if (NTP_CTRLMSG_MINLEN + count > length)
+ goto invalid;
+ if (count != 0) {
+ ND_TCHECK_LEN(cd->data, count);
+ ND_PRINT("\n\tTO-BE-DONE: data not interpreted");
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cd, length);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+union ntpdata {
+ struct ntp_time_data td;
+ struct ntp_control_data cd;
+};
+
+/*
+ * Print NTP requests, handling the common VN, LI, and Mode
+ */
+void
+ntp_print(netdissect_options *ndo,
+ const u_char *cp, u_int length)
+{
+ const union ntpdata *bp = (const union ntpdata *)cp;
+ u_int mode, version, leapind;
+ uint8_t status;
+
+ ndo->ndo_protocol = "ntp";
+ status = GET_U_1(bp->td.status);
+
+ version = (status & VERSIONMASK) >> VERSIONSHIFT;
+ ND_PRINT("NTPv%u", version);
+
+ mode = (status & MODEMASK) >> MODESHIFT;
+ if (!ndo->ndo_vflag) {
+ ND_PRINT(", %s, length %u",
+ tok2str(ntp_mode_values, "Unknown mode", mode),
+ length);
+ return;
+ }
+
+ ND_PRINT(", %s, length %u\n",
+ tok2str(ntp_mode_values, "Unknown mode", mode), length);
+
+ /* leapind = (status & LEAPMASK) >> LEAPSHIFT; */
+ leapind = (status & LEAPMASK);
+ ND_PRINT("\tLeap indicator: %s (%u)",
+ tok2str(ntp_leapind_values, "Unknown", leapind),
+ leapind);
+
+ switch (mode) {
+
+ case MODE_UNSPEC:
+ case MODE_SYM_ACT:
+ case MODE_SYM_PAS:
+ case MODE_CLIENT:
+ case MODE_SERVER:
+ case MODE_BROADCAST:
+ ntp_time_print(ndo, &bp->td, length);
+ break;
+
+ case MODE_CONTROL:
+ ntp_control_print(ndo, &bp->cd, length);
+ break;
+
+ default:
+ break; /* XXX: not implemented! */
+ }
+}
+
+static void
+p_sfix(netdissect_options *ndo,
+ const struct s_fixedpt *sfp)
+{
+ int i;
+ int f;
+ double ff;
+
+ i = GET_BE_U_2(sfp->int_part);
+ f = GET_BE_U_2(sfp->fraction);
+ ff = f / 65536.0; /* shift radix point by 16 bits */
+ f = (int)(ff * 1000000.0); /* Treat fraction as parts per million */
+ ND_PRINT("%d.%06d", i, f);
+}
+
+/* Prints time difference between *lfp and *olfp */
+static void
+p_ntp_delta(netdissect_options *ndo,
+ const struct l_fixedpt *olfp,
+ const struct l_fixedpt *lfp)
+{
+ uint32_t u, uf;
+ uint32_t ou, ouf;
+ uint32_t i;
+ uint32_t f;
+ double ff;
+ int signbit;
+
+ u = GET_BE_U_4(lfp->int_part);
+ ou = GET_BE_U_4(olfp->int_part);
+ uf = GET_BE_U_4(lfp->fraction);
+ ouf = GET_BE_U_4(olfp->fraction);
+ if (ou == 0 && ouf == 0) {
+ p_ntp_time(ndo, lfp);
+ return;
+ }
+
+ if (u > ou) { /* new is definitely greater than old */
+ signbit = 0;
+ i = u - ou;
+ f = uf - ouf;
+ if (ouf > uf) /* must borrow from high-order bits */
+ i -= 1;
+ } else if (u < ou) { /* new is definitely less than old */
+ signbit = 1;
+ i = ou - u;
+ f = ouf - uf;
+ if (uf > ouf) /* must borrow from the high-order bits */
+ i -= 1;
+ } else { /* int_part is zero */
+ i = 0;
+ if (uf > ouf) {
+ signbit = 0;
+ f = uf - ouf;
+ } else {
+ signbit = 1;
+ f = ouf - uf;
+ }
+ }
+
+ ff = f;
+ if (ff < 0.0) /* some compilers are buggy */
+ ff += FMAXINT;
+ ff = ff / FMAXINT; /* shift radix point by 32 bits */
+ f = (uint32_t)(ff * 1000000000.0); /* treat fraction as parts per billion */
+ ND_PRINT("%s%u.%09u", signbit ? "-" : "+", i, f);
+}
+
+/* Prints polling interval in log2 as seconds or fraction of second */
+static void
+p_poll(netdissect_options *ndo,
+ const int poll_interval)
+{
+ if (poll_interval <= -32 || poll_interval >= 32)
+ return;
+
+ if (poll_interval >= 0)
+ ND_PRINT(" (%us)", 1U << poll_interval);
+ else
+ ND_PRINT(" (1/%us)", 1U << -poll_interval);
+}
+
diff --git a/print-null.c b/print-null.c
new file mode 100644
index 0000000..a1b03f8
--- /dev/null
+++ b/print-null.c
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: BSD loopback device printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "af.h"
+
+
+/*
+ * The DLT_NULL packet header is 4 bytes long. It contains a host-byte-order
+ * 32-bit integer that specifies the family, e.g. AF_INET.
+ *
+ * Note here that "host" refers to the host on which the packets were
+ * captured; that isn't necessarily *this* host.
+ *
+ * The OpenBSD DLT_LOOP packet header is the same, except that the integer
+ * is in network byte order.
+ */
+#define NULL_HDRLEN 4
+
+/*
+ * Byte-swap a 32-bit number.
+ * ("htonl()" or "ntohl()" won't work - we want to byte-swap even on
+ * big-endian platforms.)
+ */
+#define SWAPLONG(y) \
+((((y)&0xff)<<24) | (((y)&0xff00)<<8) | (((y)&0xff0000)>>8) | (((y)>>24)&0xff))
+
+static void
+null_hdr_print(netdissect_options *ndo, uint32_t family, u_int length)
+{
+ if (!ndo->ndo_qflag) {
+ ND_PRINT("AF %s (%u)",
+ tok2str(bsd_af_values,"Unknown",family),family);
+ } else {
+ ND_PRINT("%s",
+ tok2str(bsd_af_values,"Unknown AF %u",family));
+ }
+
+ ND_PRINT(", length %u: ", length);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+null_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int length = h->len;
+ u_int caplen = h->caplen;
+ uint32_t family;
+
+ ndo->ndo_protocol = "null";
+ ND_TCHECK_LEN(p, NULL_HDRLEN);
+ ndo->ndo_ll_hdr_len += NULL_HDRLEN;
+
+ family = GET_HE_U_4(p);
+
+ /*
+ * This isn't necessarily in our host byte order; if this is
+ * a DLT_LOOP capture, it's in network byte order, and if
+ * this is a DLT_NULL capture from a machine with the opposite
+ * byte-order, it's in the opposite byte order from ours.
+ *
+ * If the upper 16 bits aren't all zero, assume it's byte-swapped.
+ */
+ if ((family & 0xFFFF0000) != 0)
+ family = SWAPLONG(family);
+
+ if (ndo->ndo_eflag)
+ null_hdr_print(ndo, family, length);
+
+ length -= NULL_HDRLEN;
+ caplen -= NULL_HDRLEN;
+ p += NULL_HDRLEN;
+
+ switch (family) {
+
+ case BSD_AFNUM_INET:
+ ip_print(ndo, p, length);
+ break;
+
+ case BSD_AFNUM_INET6_BSD:
+ case BSD_AFNUM_INET6_FREEBSD:
+ case BSD_AFNUM_INET6_DARWIN:
+ ip6_print(ndo, p, length);
+ break;
+
+ case BSD_AFNUM_ISO:
+ isoclns_print(ndo, p, length);
+ break;
+
+ case BSD_AFNUM_APPLETALK:
+ atalk_print(ndo, p, length);
+ break;
+
+ case BSD_AFNUM_IPX:
+ ipx_print(ndo, p, length);
+ break;
+
+ default:
+ /* unknown AF_ value */
+ if (!ndo->ndo_eflag)
+ null_hdr_print(ndo, family, length + NULL_HDRLEN);
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ }
+}
diff --git a/print-olsr.c b/print-olsr.c
new file mode 100644
index 0000000..8f04923
--- /dev/null
+++ b/print-olsr.c
@@ -0,0 +1,714 @@
+/*
+ * Copyright (c) 1998-2007 The TCPDUMP project
+ * Copyright (c) 2009 Florian Forster
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler <hannes@gredler.at>
+ * IPv6 additions by Florian Forster <octo at verplant.org>
+ */
+
+/* \summary: Optimized Link State Routing Protocol (OLSR) printer */
+
+/* specification: RFC 3626 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+/*
+ * RFC 3626 common header
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Packet Length | Packet Sequence Number |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Message Type | Vtime | Message Size |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Originator Address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Time To Live | Hop Count | Message Sequence Number |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * : MESSAGE :
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Message Type | Vtime | Message Size |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Originator Address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Time To Live | Hop Count | Message Sequence Number |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * : MESSAGE :
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * : :
+ */
+
+struct olsr_common {
+ nd_uint16_t packet_len;
+ nd_uint16_t packet_seq;
+};
+
+#define OLSR_HELLO_MSG 1 /* rfc3626 */
+#define OLSR_TC_MSG 2 /* rfc3626 */
+#define OLSR_MID_MSG 3 /* rfc3626 */
+#define OLSR_HNA_MSG 4 /* rfc3626 */
+#define OLSR_POWERINFO_MSG 128
+#define OLSR_NAMESERVICE_MSG 130
+#define OLSR_HELLO_LQ_MSG 201 /* LQ extensions olsr.org */
+#define OLSR_TC_LQ_MSG 202 /* LQ extensions olsr.org */
+
+static const struct tok olsr_msg_values[] = {
+ { OLSR_HELLO_MSG, "Hello" },
+ { OLSR_TC_MSG, "TC" },
+ { OLSR_MID_MSG, "MID" },
+ { OLSR_HNA_MSG, "HNA" },
+ { OLSR_POWERINFO_MSG, "Powerinfo" },
+ { OLSR_NAMESERVICE_MSG, "Nameservice" },
+ { OLSR_HELLO_LQ_MSG, "Hello-LQ" },
+ { OLSR_TC_LQ_MSG, "TC-LQ" },
+ { 0, NULL}
+};
+
+struct olsr_msg4 {
+ nd_uint8_t msg_type;
+ nd_uint8_t vtime;
+ nd_uint16_t msg_len;
+ nd_ipv4 originator;
+ nd_uint8_t ttl;
+ nd_uint8_t hopcount;
+ nd_uint16_t msg_seq;
+};
+
+struct olsr_msg6 {
+ nd_uint8_t msg_type;
+ nd_uint8_t vtime;
+ nd_uint16_t msg_len;
+ nd_ipv6 originator;
+ nd_uint8_t ttl;
+ nd_uint8_t hopcount;
+ nd_uint16_t msg_seq;
+};
+
+struct olsr_hello {
+ nd_byte res[2];
+ nd_uint8_t htime;
+ nd_uint8_t will;
+};
+
+struct olsr_hello_link {
+ nd_uint8_t link_code;
+ nd_byte res;
+ nd_uint16_t len;
+};
+
+struct olsr_tc {
+ nd_uint16_t ans_seq;
+ nd_byte res[2];
+};
+
+struct olsr_hna4 {
+ nd_ipv4 network;
+ nd_ipv4 mask;
+};
+
+struct olsr_hna6 {
+ nd_ipv6 network;
+ nd_ipv6 mask;
+};
+
+
+/** gateway HNA flags */
+enum gateway_hna_flags {
+ GW_HNA_FLAG_LINKSPEED = 1 << 0,
+ GW_HNA_FLAG_IPV4 = 1 << 1,
+ GW_HNA_FLAG_IPV4_NAT = 1 << 2,
+ GW_HNA_FLAG_IPV6 = 1 << 3,
+ GW_HNA_FLAG_IPV6PREFIX = 1 << 4
+};
+
+/** gateway HNA field byte offsets in the netmask field of the HNA */
+enum gateway_hna_fields {
+ GW_HNA_PAD = 0,
+ GW_HNA_FLAGS = 1,
+ GW_HNA_UPLINK = 2,
+ GW_HNA_DOWNLINK = 3,
+ GW_HNA_V6PREFIXLEN = 4,
+ GW_HNA_V6PREFIX = 5
+};
+
+
+#define OLSR_EXTRACT_LINK_TYPE(link_code) (link_code & 0x3)
+#define OLSR_EXTRACT_NEIGHBOR_TYPE(link_code) (link_code >> 2)
+
+static const struct tok olsr_link_type_values[] = {
+ { 0, "Unspecified" },
+ { 1, "Asymmetric" },
+ { 2, "Symmetric" },
+ { 3, "Lost" },
+ { 0, NULL}
+};
+
+static const struct tok olsr_neighbor_type_values[] = {
+ { 0, "Not-Neighbor" },
+ { 1, "Symmetric" },
+ { 2, "Symmetric-MPR" },
+ { 0, NULL}
+};
+
+struct olsr_lq_neighbor4 {
+ nd_ipv4 neighbor;
+ nd_uint8_t link_quality;
+ nd_uint8_t neighbor_link_quality;
+ nd_byte res[2];
+};
+
+struct olsr_lq_neighbor6 {
+ nd_ipv6 neighbor;
+ nd_uint8_t link_quality;
+ nd_uint8_t neighbor_link_quality;
+ nd_byte res[2];
+};
+
+#define MAX_SMARTGW_SPEED 320000000
+
+/**
+ * Convert an encoded 1 byte transport value (5 bits mantissa, 3 bits exponent)
+ * to an uplink/downlink speed value
+ *
+ * @param value the encoded 1 byte transport value
+ * @return the uplink/downlink speed value (in kbit/s)
+ */
+static uint32_t deserialize_gw_speed(uint8_t value) {
+ uint32_t speed;
+ uint32_t exp;
+
+ if (!value) {
+ return 0;
+ }
+
+ if (value == UINT8_MAX) {
+ /* maximum value: also return maximum value */
+ return MAX_SMARTGW_SPEED;
+ }
+
+ speed = (value >> 3) + 1;
+ exp = value & 7;
+
+ while (exp != 0) {
+ speed *= 10;
+ exp--;
+ }
+ return speed;
+}
+
+/*
+ * macro to convert the 8-bit mantissa/exponent to a double float
+ * taken from olsr.org.
+ */
+#define VTIME_SCALE_FACTOR 0.0625
+#define ME_TO_DOUBLE(me) \
+ (double)(VTIME_SCALE_FACTOR*(1+(double)(me>>4)/16)*(double)(1<<(me&0x0F)))
+
+/*
+ * print a neighbor list with LQ extensions.
+ */
+static int
+olsr_print_lq_neighbor4(netdissect_options *ndo,
+ const u_char *msg_data, u_int hello_len)
+{
+ const struct olsr_lq_neighbor4 *lq_neighbor;
+
+ while (hello_len >= sizeof(struct olsr_lq_neighbor4)) {
+
+ lq_neighbor = (const struct olsr_lq_neighbor4 *)msg_data;
+ ND_TCHECK_SIZE(lq_neighbor);
+
+ ND_PRINT("\n\t neighbor %s, link-quality %.2f%%"
+ ", neighbor-link-quality %.2f%%",
+ GET_IPADDR_STRING(lq_neighbor->neighbor),
+ ((double) GET_U_1(lq_neighbor->link_quality)/2.55),
+ ((double) GET_U_1(lq_neighbor->neighbor_link_quality)/2.55));
+
+ msg_data += sizeof(struct olsr_lq_neighbor4);
+ hello_len -= sizeof(struct olsr_lq_neighbor4);
+ }
+ return (0);
+trunc:
+ return -1;
+}
+
+static int
+olsr_print_lq_neighbor6(netdissect_options *ndo,
+ const u_char *msg_data, u_int hello_len)
+{
+ const struct olsr_lq_neighbor6 *lq_neighbor;
+
+ while (hello_len >= sizeof(struct olsr_lq_neighbor6)) {
+
+ lq_neighbor = (const struct olsr_lq_neighbor6 *)msg_data;
+ ND_TCHECK_SIZE(lq_neighbor);
+
+ ND_PRINT("\n\t neighbor %s, link-quality %.2f%%"
+ ", neighbor-link-quality %.2f%%",
+ GET_IP6ADDR_STRING(lq_neighbor->neighbor),
+ ((double) GET_U_1(lq_neighbor->link_quality)/2.55),
+ ((double) GET_U_1(lq_neighbor->neighbor_link_quality)/2.55));
+
+ msg_data += sizeof(struct olsr_lq_neighbor6);
+ hello_len -= sizeof(struct olsr_lq_neighbor6);
+ }
+ return (0);
+trunc:
+ return -1;
+}
+
+/*
+ * print a neighbor list.
+ */
+static int
+olsr_print_neighbor(netdissect_options *ndo,
+ const u_char *msg_data, u_int hello_len)
+{
+ int neighbor;
+
+ ND_PRINT("\n\t neighbor\n\t\t");
+ neighbor = 1;
+
+ while (hello_len >= sizeof(nd_ipv4)) {
+ /* print 4 neighbors per line */
+ ND_PRINT("%s%s", GET_IPADDR_STRING(msg_data),
+ neighbor % 4 == 0 ? "\n\t\t" : " ");
+
+ msg_data += sizeof(nd_ipv4);
+ hello_len -= sizeof(nd_ipv4);
+ }
+ return (0);
+}
+
+
+void
+olsr_print(netdissect_options *ndo,
+ const u_char *pptr, u_int length, int is_ipv6)
+{
+ union {
+ const struct olsr_common *common;
+ const struct olsr_msg4 *msg4;
+ const struct olsr_msg6 *msg6;
+ const struct olsr_hello *hello;
+ const struct olsr_hello_link *hello_link;
+ const struct olsr_tc *tc;
+ const struct olsr_hna4 *hna;
+ } ptr;
+
+ u_int msg_type, msg_len, msg_tlen, hello_len;
+ uint16_t name_entry_type, name_entry_len;
+ u_int name_entry_padding;
+ uint8_t link_type, neighbor_type;
+ const u_char *tptr, *msg_data;
+
+ ndo->ndo_protocol = "olsr";
+ tptr = pptr;
+
+ nd_print_protocol_caps(ndo);
+ ND_PRINT("v%u", (is_ipv6) ? 6 : 4);
+
+ if (length < sizeof(struct olsr_common)) {
+ goto trunc;
+ }
+
+ ND_TCHECK_LEN(tptr, sizeof(struct olsr_common));
+
+ ptr.common = (const struct olsr_common *)tptr;
+ length = ND_MIN(length, GET_BE_U_2(ptr.common->packet_len));
+
+ ND_PRINT(", seq 0x%04x, length %u",
+ GET_BE_U_2(ptr.common->packet_seq),
+ length);
+
+ tptr += sizeof(struct olsr_common);
+
+ /*
+ * In non-verbose mode, just print version.
+ */
+ if (ndo->ndo_vflag < 1) {
+ return;
+ }
+
+ while (tptr < (pptr+length)) {
+ union
+ {
+ const struct olsr_msg4 *v4;
+ const struct olsr_msg6 *v6;
+ } msgptr;
+ int msg_len_valid = 0;
+
+ if (is_ipv6)
+ {
+ ND_TCHECK_LEN(tptr, sizeof(struct olsr_msg6));
+ msgptr.v6 = (const struct olsr_msg6 *) tptr;
+ msg_type = GET_U_1(msgptr.v6->msg_type);
+ msg_len = GET_BE_U_2(msgptr.v6->msg_len);
+ if ((msg_len >= sizeof (struct olsr_msg6))
+ && (msg_len <= length))
+ msg_len_valid = 1;
+
+ /* infinite loop check */
+ if (msg_type == 0 || msg_len == 0) {
+ return;
+ }
+
+ ND_PRINT("\n\t%s Message (%#04x), originator %s, ttl %u, hop %u"
+ "\n\t vtime %.3fs, msg-seq 0x%04x, length %u%s",
+ tok2str(olsr_msg_values, "Unknown", msg_type),
+ msg_type, GET_IP6ADDR_STRING(msgptr.v6->originator),
+ GET_U_1(msgptr.v6->ttl),
+ GET_U_1(msgptr.v6->hopcount),
+ ME_TO_DOUBLE(GET_U_1(msgptr.v6->vtime)),
+ GET_BE_U_2(msgptr.v6->msg_seq),
+ msg_len, (msg_len_valid == 0) ? " (invalid)" : "");
+ if (!msg_len_valid) {
+ return;
+ }
+
+ msg_tlen = msg_len - sizeof(struct olsr_msg6);
+ msg_data = tptr + sizeof(struct olsr_msg6);
+ }
+ else /* (!is_ipv6) */
+ {
+ ND_TCHECK_LEN(tptr, sizeof(struct olsr_msg4));
+ msgptr.v4 = (const struct olsr_msg4 *) tptr;
+ msg_type = GET_U_1(msgptr.v4->msg_type);
+ msg_len = GET_BE_U_2(msgptr.v4->msg_len);
+ if ((msg_len >= sizeof (struct olsr_msg4))
+ && (msg_len <= length))
+ msg_len_valid = 1;
+
+ /* infinite loop check */
+ if (msg_type == 0 || msg_len == 0) {
+ return;
+ }
+
+ ND_PRINT("\n\t%s Message (%#04x), originator %s, ttl %u, hop %u"
+ "\n\t vtime %.3fs, msg-seq 0x%04x, length %u%s",
+ tok2str(olsr_msg_values, "Unknown", msg_type),
+ msg_type, GET_IPADDR_STRING(msgptr.v4->originator),
+ GET_U_1(msgptr.v4->ttl),
+ GET_U_1(msgptr.v4->hopcount),
+ ME_TO_DOUBLE(GET_U_1(msgptr.v4->vtime)),
+ GET_BE_U_2(msgptr.v4->msg_seq),
+ msg_len, (msg_len_valid == 0) ? " (invalid)" : "");
+ if (!msg_len_valid) {
+ return;
+ }
+
+ msg_tlen = msg_len - sizeof(struct olsr_msg4);
+ msg_data = tptr + sizeof(struct olsr_msg4);
+ }
+
+ switch (msg_type) {
+ case OLSR_HELLO_MSG:
+ case OLSR_HELLO_LQ_MSG:
+ if (msg_tlen < sizeof(struct olsr_hello))
+ goto trunc;
+ ND_TCHECK_LEN(msg_data, sizeof(struct olsr_hello));
+
+ ptr.hello = (const struct olsr_hello *)msg_data;
+ ND_PRINT("\n\t hello-time %.3fs, MPR willingness %u",
+ ME_TO_DOUBLE(GET_U_1(ptr.hello->htime)),
+ GET_U_1(ptr.hello->will));
+ msg_data += sizeof(struct olsr_hello);
+ msg_tlen -= sizeof(struct olsr_hello);
+
+ while (msg_tlen >= sizeof(struct olsr_hello_link)) {
+ int hello_len_valid = 0;
+
+ /*
+ * link-type.
+ */
+ ND_TCHECK_LEN(msg_data, sizeof(struct olsr_hello_link));
+
+ ptr.hello_link = (const struct olsr_hello_link *)msg_data;
+
+ hello_len = GET_BE_U_2(ptr.hello_link->len);
+ link_type = OLSR_EXTRACT_LINK_TYPE(GET_U_1(ptr.hello_link->link_code));
+ neighbor_type = OLSR_EXTRACT_NEIGHBOR_TYPE(GET_U_1(ptr.hello_link->link_code));
+
+ if ((hello_len <= msg_tlen)
+ && (hello_len >= sizeof(struct olsr_hello_link)))
+ hello_len_valid = 1;
+
+ ND_PRINT("\n\t link-type %s, neighbor-type %s, len %u%s",
+ tok2str(olsr_link_type_values, "Unknown", link_type),
+ tok2str(olsr_neighbor_type_values, "Unknown", neighbor_type),
+ hello_len,
+ (hello_len_valid == 0) ? " (invalid)" : "");
+
+ if (hello_len_valid == 0)
+ break;
+
+ msg_data += sizeof(struct olsr_hello_link);
+ msg_tlen -= sizeof(struct olsr_hello_link);
+ hello_len -= sizeof(struct olsr_hello_link);
+
+ ND_TCHECK_LEN(msg_data, hello_len);
+ if (msg_type == OLSR_HELLO_MSG) {
+ if (olsr_print_neighbor(ndo, msg_data, hello_len) == -1)
+ goto trunc;
+ } else {
+ if (is_ipv6) {
+ if (olsr_print_lq_neighbor6(ndo, msg_data, hello_len) == -1)
+ goto trunc;
+ } else {
+ if (olsr_print_lq_neighbor4(ndo, msg_data, hello_len) == -1)
+ goto trunc;
+ }
+ }
+
+ msg_data += hello_len;
+ msg_tlen -= hello_len;
+ }
+ break;
+
+ case OLSR_TC_MSG:
+ case OLSR_TC_LQ_MSG:
+ if (msg_tlen < sizeof(struct olsr_tc))
+ goto trunc;
+ ND_TCHECK_LEN(msg_data, sizeof(struct olsr_tc));
+
+ ptr.tc = (const struct olsr_tc *)msg_data;
+ ND_PRINT("\n\t advertised neighbor seq 0x%04x",
+ GET_BE_U_2(ptr.tc->ans_seq));
+ msg_data += sizeof(struct olsr_tc);
+ msg_tlen -= sizeof(struct olsr_tc);
+
+ if (msg_type == OLSR_TC_MSG) {
+ if (olsr_print_neighbor(ndo, msg_data, msg_tlen) == -1)
+ goto trunc;
+ } else {
+ if (is_ipv6) {
+ if (olsr_print_lq_neighbor6(ndo, msg_data, msg_tlen) == -1)
+ goto trunc;
+ } else {
+ if (olsr_print_lq_neighbor4(ndo, msg_data, msg_tlen) == -1)
+ goto trunc;
+ }
+ }
+ break;
+
+ case OLSR_MID_MSG:
+ {
+ u_int addr_size = (u_int)sizeof(nd_ipv4);
+
+ if (is_ipv6)
+ addr_size = (u_int)sizeof(nd_ipv6);
+
+ while (msg_tlen >= addr_size) {
+ ND_TCHECK_LEN(msg_data, addr_size);
+ ND_PRINT("\n\t interface address %s",
+ is_ipv6 ? GET_IP6ADDR_STRING(msg_data) :
+ GET_IPADDR_STRING(msg_data));
+
+ msg_data += addr_size;
+ msg_tlen -= addr_size;
+ }
+ break;
+ }
+
+ case OLSR_HNA_MSG:
+ if (is_ipv6)
+ {
+ int i = 0;
+
+ ND_PRINT("\n\t Advertised networks (total %u)",
+ (unsigned int) (msg_tlen / sizeof(struct olsr_hna6)));
+
+ while (msg_tlen >= sizeof(struct olsr_hna6)) {
+ const struct olsr_hna6 *hna6;
+
+ ND_TCHECK_LEN(msg_data, sizeof(struct olsr_hna6));
+
+ hna6 = (const struct olsr_hna6 *)msg_data;
+
+ ND_PRINT("\n\t #%i: %s/%u",
+ i, GET_IP6ADDR_STRING(hna6->network),
+ mask62plen (hna6->mask));
+
+ msg_data += sizeof(struct olsr_hna6);
+ msg_tlen -= sizeof(struct olsr_hna6);
+ }
+ }
+ else
+ {
+ int col = 0;
+
+ ND_PRINT("\n\t Advertised networks (total %u)",
+ (unsigned int) (msg_tlen / sizeof(struct olsr_hna4)));
+
+ while (msg_tlen >= sizeof(struct olsr_hna4)) {
+ ND_TCHECK_LEN(msg_data, sizeof(struct olsr_hna4));
+
+ ptr.hna = (const struct olsr_hna4 *)msg_data;
+
+ /* print 4 prefixes per line */
+ if (!ptr.hna->network[0] && !ptr.hna->network[1] &&
+ !ptr.hna->network[2] && !ptr.hna->network[3] &&
+ !ptr.hna->mask[GW_HNA_PAD] &&
+ ptr.hna->mask[GW_HNA_FLAGS]) {
+ /* smart gateway */
+ ND_PRINT("%sSmart-Gateway:%s%s%s%s%s %u/%u",
+ col == 0 ? "\n\t " : ", ", /* indent */
+ /* sgw */
+ /* LINKSPEED */
+ (ptr.hna->mask[GW_HNA_FLAGS] &
+ GW_HNA_FLAG_LINKSPEED) ? " LINKSPEED" : "",
+ /* IPV4 */
+ (ptr.hna->mask[GW_HNA_FLAGS] &
+ GW_HNA_FLAG_IPV4) ? " IPV4" : "",
+ /* IPV4-NAT */
+ (ptr.hna->mask[GW_HNA_FLAGS] &
+ GW_HNA_FLAG_IPV4_NAT) ? " IPV4-NAT" : "",
+ /* IPV6 */
+ (ptr.hna->mask[GW_HNA_FLAGS] &
+ GW_HNA_FLAG_IPV6) ? " IPV6" : "",
+ /* IPv6PREFIX */
+ (ptr.hna->mask[GW_HNA_FLAGS] &
+ GW_HNA_FLAG_IPV6PREFIX) ? " IPv6-PREFIX" : "",
+ /* uplink */
+ (ptr.hna->mask[GW_HNA_FLAGS] &
+ GW_HNA_FLAG_LINKSPEED) ?
+ deserialize_gw_speed(ptr.hna->mask[GW_HNA_UPLINK]) : 0,
+ /* downlink */
+ (ptr.hna->mask[GW_HNA_FLAGS] &
+ GW_HNA_FLAG_LINKSPEED) ?
+ deserialize_gw_speed(ptr.hna->mask[GW_HNA_DOWNLINK]) : 0
+ );
+ } else {
+ /* normal route */
+ ND_PRINT("%s%s/%u",
+ col == 0 ? "\n\t " : ", ",
+ GET_IPADDR_STRING(ptr.hna->network),
+ mask2plen(GET_BE_U_4(ptr.hna->mask)));
+ }
+
+ msg_data += sizeof(struct olsr_hna4);
+ msg_tlen -= sizeof(struct olsr_hna4);
+
+ col = (col + 1) % 4;
+ }
+ }
+ break;
+
+ case OLSR_NAMESERVICE_MSG:
+ {
+ u_int name_entries;
+ u_int addr_size;
+ int name_entries_valid;
+ u_int i;
+
+ if (msg_tlen < 4)
+ goto trunc;
+
+ name_entries = GET_BE_U_2(msg_data + 2);
+ addr_size = 4;
+ if (is_ipv6)
+ addr_size = 16;
+
+ name_entries_valid = 0;
+ if ((name_entries > 0)
+ && ((name_entries * (4 + addr_size)) <= msg_tlen))
+ name_entries_valid = 1;
+
+ ND_PRINT("\n\t Version %u, Entries %u%s",
+ GET_BE_U_2(msg_data),
+ name_entries, (name_entries_valid == 0) ? " (invalid)" : "");
+
+ if (name_entries_valid == 0)
+ break;
+
+ msg_data += 4;
+ msg_tlen -= 4;
+
+ for (i = 0; i < name_entries; i++) {
+ int name_entry_len_valid = 0;
+
+ if (msg_tlen < 4)
+ break;
+
+ name_entry_type = GET_BE_U_2(msg_data);
+ name_entry_len = GET_BE_U_2(msg_data + 2);
+
+ msg_data += 4;
+ msg_tlen -= 4;
+
+ if ((name_entry_len > 0) && ((addr_size + name_entry_len) <= msg_tlen))
+ name_entry_len_valid = 1;
+
+ ND_PRINT("\n\t #%u: type %#06x, length %u%s",
+ (unsigned int) i, name_entry_type,
+ name_entry_len, (name_entry_len_valid == 0) ? " (invalid)" : "");
+
+ if (name_entry_len_valid == 0)
+ break;
+
+ /* 32-bit alignment */
+ name_entry_padding = 0;
+ if (name_entry_len%4 != 0)
+ name_entry_padding = 4-(name_entry_len%4);
+
+ if (msg_tlen < addr_size + name_entry_len + name_entry_padding)
+ goto trunc;
+
+ ND_TCHECK_LEN(msg_data,
+ addr_size + name_entry_len + name_entry_padding);
+
+ if (is_ipv6)
+ ND_PRINT(", address %s, name \"",
+ GET_IP6ADDR_STRING(msg_data));
+ else
+ ND_PRINT(", address %s, name \"",
+ GET_IPADDR_STRING(msg_data));
+ (void)nd_printn(ndo, msg_data + addr_size, name_entry_len, NULL);
+ ND_PRINT("\"");
+
+ msg_data += addr_size + name_entry_len + name_entry_padding;
+ msg_tlen -= addr_size + name_entry_len + name_entry_padding;
+ } /* for (i = 0; i < name_entries; i++) */
+ break;
+ } /* case OLSR_NAMESERVICE_MSG */
+
+ /*
+ * FIXME those are the defined messages that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+ case OLSR_POWERINFO_MSG:
+ default:
+ print_unknown_data(ndo, msg_data, "\n\t ", msg_tlen);
+ break;
+ } /* switch (msg_type) */
+ tptr += msg_len;
+ } /* while (tptr < (pptr+length)) */
+
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-openflow-1.0.c b/print-openflow-1.0.c
new file mode 100644
index 0000000..1d7f247
--- /dev/null
+++ b/print-openflow-1.0.c
@@ -0,0 +1,2298 @@
+/*
+ * This module implements decoding of OpenFlow protocol version 1.0 (wire
+ * protocol 0x01). The decoder implements terse (default), detailed (-v) and
+ * full (-vv) output formats and, as much as each format implies, detects and
+ * tries to work around sizing anomalies inside the messages. The decoder marks
+ * up bogus values of selected message fields and decodes partially captured
+ * messages up to the snapshot end. It is based on the specification below:
+ *
+ * [OF10] https://www.opennetworking.org/wp-content/uploads/2013/04/openflow-spec-v1.0.0.pdf
+ *
+ * Most functions in this file take the following arguments:
+ * * cp -- the pointer to the first octet to decode
+ * * len -- the declared length of the structure to decode
+ * The convention is that a printer function returns iff the given structure is
+ * completely within the packet buffer; otherwise it processes the part that is
+ * within the buffer, sooner of later takes the "truncated packet" shortcut via
+ * longjmp() and never returns. With that in mind, the function may return
+ * without printing the structure completely if it is invalid or the ndo_vflag
+ * value is not high enough. This way the calling function can try to decode
+ * the next data item.
+ *
+ * Decoding of Ethernet frames nested in OFPT_PACKET_IN and OFPT_PACKET_OUT
+ * messages is done only when the verbosity level set by command-line argument
+ * is "-vvv" or higher. In that case the verbosity level is temporarily
+ * decremented by 3 during the nested frame decoding. For example, running
+ * tcpdump with "-vvvv" will do full decoding of OpenFlow and "-v" decoding of
+ * the nested frames.
+ *
+ * Partial decoding of Big Switch Networks vendor extensions is done after the
+ * oftest (OpenFlow Testing Framework) and Loxigen (library generator) source
+ * code.
+ *
+ *
+ * Copyright (c) 2013 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: OpenFlow protocol version 1.0 printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "ethertype.h"
+#include "ipproto.h"
+#include "oui.h"
+#include "openflow.h"
+
+
+#define OFPT_HELLO 0x00
+#define OFPT_ERROR 0x01
+#define OFPT_ECHO_REQUEST 0x02
+#define OFPT_ECHO_REPLY 0x03
+#define OFPT_VENDOR 0x04
+#define OFPT_FEATURES_REQUEST 0x05
+#define OFPT_FEATURES_REPLY 0x06
+#define OFPT_GET_CONFIG_REQUEST 0x07
+#define OFPT_GET_CONFIG_REPLY 0x08
+#define OFPT_SET_CONFIG 0x09
+#define OFPT_PACKET_IN 0x0a
+#define OFPT_FLOW_REMOVED 0x0b
+#define OFPT_PORT_STATUS 0x0c
+#define OFPT_PACKET_OUT 0x0d
+#define OFPT_FLOW_MOD 0x0e
+#define OFPT_PORT_MOD 0x0f
+#define OFPT_STATS_REQUEST 0x10
+#define OFPT_STATS_REPLY 0x11
+#define OFPT_BARRIER_REQUEST 0x12
+#define OFPT_BARRIER_REPLY 0x13
+#define OFPT_QUEUE_GET_CONFIG_REQUEST 0x14
+#define OFPT_QUEUE_GET_CONFIG_REPLY 0x15
+#define OFPT_MAX OFPT_QUEUE_GET_CONFIG_REPLY
+
+#define OFPPC_PORT_DOWN (1U <<0)
+#define OFPPC_NO_STP (1U <<1)
+#define OFPPC_NO_RECV (1U <<2)
+#define OFPPC_NO_RECV_STP (1U <<3)
+#define OFPPC_NO_FLOOD (1U <<4)
+#define OFPPC_NO_FWD (1U <<5)
+#define OFPPC_NO_PACKET_IN (1U <<6)
+static const struct tok ofppc_bm[] = {
+ { OFPPC_PORT_DOWN, "PORT_DOWN" },
+ { OFPPC_NO_STP, "NO_STP" },
+ { OFPPC_NO_RECV, "NO_RECV" },
+ { OFPPC_NO_RECV_STP, "NO_RECV_STP" },
+ { OFPPC_NO_FLOOD, "NO_FLOOD" },
+ { OFPPC_NO_FWD, "NO_FWD" },
+ { OFPPC_NO_PACKET_IN, "NO_PACKET_IN" },
+ { 0, NULL }
+};
+#define OFPPC_U (~(OFPPC_PORT_DOWN | OFPPC_NO_STP | OFPPC_NO_RECV | \
+ OFPPC_NO_RECV_STP | OFPPC_NO_FLOOD | OFPPC_NO_FWD | \
+ OFPPC_NO_PACKET_IN))
+
+/*
+ * [OF10] lists all FPPS_ constants in one enum, but they mean a 1-bit bitmap
+ * in the least significant octet and a 2-bit code point in the next octet.
+ * Remember to mix or to separate these two parts as the context requires.
+ */
+#define OFPPS_LINK_DOWN (1U << 0) /* bitmap */
+#define OFPPS_STP_LISTEN (0U << 8) /* code point */
+#define OFPPS_STP_LEARN (1U << 8) /* code point */
+#define OFPPS_STP_FORWARD (2U << 8) /* code point */
+#define OFPPS_STP_BLOCK (3U << 8) /* code point */
+#define OFPPS_STP_MASK (3U << 8) /* code point bitmask */
+static const struct tok ofpps_stp_str[] = {
+ { OFPPS_STP_LISTEN, "STP_LISTEN" },
+ { OFPPS_STP_LEARN, "STP_LEARN" },
+ { OFPPS_STP_FORWARD, "STP_FORWARD" },
+ { OFPPS_STP_BLOCK, "STP_BLOCK" },
+ { 0, NULL }
+};
+#define OFPPS_U (~(OFPPS_LINK_DOWN | OFPPS_STP_LISTEN | OFPPS_STP_LEARN | \
+ OFPPS_STP_FORWARD | OFPPS_STP_BLOCK))
+
+#define OFPP_MAX 0xff00U
+#define OFPP_IN_PORT 0xfff8U
+#define OFPP_TABLE 0xfff9U
+#define OFPP_NORMAL 0xfffaU
+#define OFPP_FLOOD 0xfffbU
+#define OFPP_ALL 0xfffcU
+#define OFPP_CONTROLLER 0xfffdU
+#define OFPP_LOCAL 0xfffeU
+#define OFPP_NONE 0xffffU
+static const struct tok ofpp_str[] = {
+ { OFPP_MAX, "MAX" },
+ { OFPP_IN_PORT, "IN_PORT" },
+ { OFPP_TABLE, "TABLE" },
+ { OFPP_NORMAL, "NORMAL" },
+ { OFPP_FLOOD, "FLOOD" },
+ { OFPP_ALL, "ALL" },
+ { OFPP_CONTROLLER, "CONTROLLER" },
+ { OFPP_LOCAL, "LOCAL" },
+ { OFPP_NONE, "NONE" },
+ { 0, NULL }
+};
+
+#define OFPPF_10MB_HD (1U << 0)
+#define OFPPF_10MB_FD (1U << 1)
+#define OFPPF_100MB_HD (1U << 2)
+#define OFPPF_100MB_FD (1U << 3)
+#define OFPPF_1GB_HD (1U << 4)
+#define OFPPF_1GB_FD (1U << 5)
+#define OFPPF_10GB_FD (1U << 6)
+#define OFPPF_COPPER (1U << 7)
+#define OFPPF_FIBER (1U << 8)
+#define OFPPF_AUTONEG (1U << 9)
+#define OFPPF_PAUSE (1U <<10)
+#define OFPPF_PAUSE_ASYM (1U <<11)
+static const struct tok ofppf_bm[] = {
+ { OFPPF_10MB_HD, "10MB_HD" },
+ { OFPPF_10MB_FD, "10MB_FD" },
+ { OFPPF_100MB_HD, "100MB_HD" },
+ { OFPPF_100MB_FD, "100MB_FD" },
+ { OFPPF_1GB_HD, "1GB_HD" },
+ { OFPPF_1GB_FD, "1GB_FD" },
+ { OFPPF_10GB_FD, "10GB_FD" },
+ { OFPPF_COPPER, "COPPER" },
+ { OFPPF_FIBER, "FIBER" },
+ { OFPPF_AUTONEG, "AUTONEG" },
+ { OFPPF_PAUSE, "PAUSE" },
+ { OFPPF_PAUSE_ASYM, "PAUSE_ASYM" },
+ { 0, NULL }
+};
+#define OFPPF_U (~(OFPPF_10MB_HD | OFPPF_10MB_FD | OFPPF_100MB_HD | \
+ OFPPF_100MB_FD | OFPPF_1GB_HD | OFPPF_1GB_FD | \
+ OFPPF_10GB_FD | OFPPF_COPPER | OFPPF_FIBER | \
+ OFPPF_AUTONEG | OFPPF_PAUSE | OFPPF_PAUSE_ASYM))
+
+#define OFPQT_NONE 0x0000
+#define OFPQT_MIN_RATE 0x0001
+static const struct tok ofpqt_str[] = {
+ { OFPQT_NONE, "NONE" },
+ { OFPQT_MIN_RATE, "MIN_RATE" },
+ { 0, NULL }
+};
+
+#define OFPFW_IN_PORT (1U <<0)
+#define OFPFW_DL_VLAN (1U <<1)
+#define OFPFW_DL_SRC (1U <<2)
+#define OFPFW_DL_DST (1U <<3)
+#define OFPFW_DL_TYPE (1U <<4)
+#define OFPFW_NW_PROTO (1U <<5)
+#define OFPFW_TP_SRC (1U <<6)
+#define OFPFW_TP_DST (1U <<7)
+#define OFPFW_NW_SRC_SHIFT 8
+#define OFPFW_NW_SRC_BITS 6
+#define OFPFW_NW_SRC_MASK (((1U <<OFPFW_NW_SRC_BITS) - 1) << OFPFW_NW_SRC_SHIFT)
+#define OFPFW_NW_DST_SHIFT 14
+#define OFPFW_NW_DST_BITS 6
+#define OFPFW_NW_DST_MASK (((1U <<OFPFW_NW_DST_BITS) - 1) << OFPFW_NW_DST_SHIFT)
+#define OFPFW_DL_VLAN_PCP (1U <<20)
+#define OFPFW_NW_TOS (1U <<21)
+#define OFPFW_ALL ((1U <<22) - 1)
+static const struct tok ofpfw_bm[] = {
+ { OFPFW_IN_PORT, "IN_PORT" },
+ { OFPFW_DL_VLAN, "DL_VLAN" },
+ { OFPFW_DL_SRC, "DL_SRC" },
+ { OFPFW_DL_DST, "DL_DST" },
+ { OFPFW_DL_TYPE, "DL_TYPE" },
+ { OFPFW_NW_PROTO, "NW_PROTO" },
+ { OFPFW_TP_SRC, "TP_SRC" },
+ { OFPFW_TP_DST, "TP_DST" },
+ { OFPFW_DL_VLAN_PCP, "DL_VLAN_PCP" },
+ { OFPFW_NW_TOS, "NW_TOS" },
+ { 0, NULL }
+};
+/* The above array does not include bits 8~13 (OFPFW_NW_SRC_*) and 14~19
+ * (OFPFW_NW_DST_*), which are not a part of the bitmap and require decoding
+ * other than that of tok2str(). The macro below includes these bits such that
+ * they are not reported as bogus in the decoding. */
+#define OFPFW_U (~(OFPFW_ALL))
+
+#define OFPAT_OUTPUT 0x0000U
+#define OFPAT_SET_VLAN_VID 0x0001U
+#define OFPAT_SET_VLAN_PCP 0x0002U
+#define OFPAT_STRIP_VLAN 0x0003U
+#define OFPAT_SET_DL_SRC 0x0004U
+#define OFPAT_SET_DL_DST 0x0005U
+#define OFPAT_SET_NW_SRC 0x0006U
+#define OFPAT_SET_NW_DST 0x0007U
+#define OFPAT_SET_NW_TOS 0x0008U
+#define OFPAT_SET_TP_SRC 0x0009U
+#define OFPAT_SET_TP_DST 0x000aU
+#define OFPAT_ENQUEUE 0x000bU
+#define OFPAT_VENDOR 0xffffU
+static const struct tok ofpat_str[] = {
+ { OFPAT_OUTPUT, "OUTPUT" },
+ { OFPAT_SET_VLAN_VID, "SET_VLAN_VID" },
+ { OFPAT_SET_VLAN_PCP, "SET_VLAN_PCP" },
+ { OFPAT_STRIP_VLAN, "STRIP_VLAN" },
+ { OFPAT_SET_DL_SRC, "SET_DL_SRC" },
+ { OFPAT_SET_DL_DST, "SET_DL_DST" },
+ { OFPAT_SET_NW_SRC, "SET_NW_SRC" },
+ { OFPAT_SET_NW_DST, "SET_NW_DST" },
+ { OFPAT_SET_NW_TOS, "SET_NW_TOS" },
+ { OFPAT_SET_TP_SRC, "SET_TP_SRC" },
+ { OFPAT_SET_TP_DST, "SET_TP_DST" },
+ { OFPAT_ENQUEUE, "ENQUEUE" },
+ { OFPAT_VENDOR, "VENDOR" },
+ { 0, NULL }
+};
+
+/* bit-shifted, w/o vendor action */
+static const struct tok ofpat_bm[] = {
+ { 1U <<OFPAT_OUTPUT, "OUTPUT" },
+ { 1U <<OFPAT_SET_VLAN_VID, "SET_VLAN_VID" },
+ { 1U <<OFPAT_SET_VLAN_PCP, "SET_VLAN_PCP" },
+ { 1U <<OFPAT_STRIP_VLAN, "STRIP_VLAN" },
+ { 1U <<OFPAT_SET_DL_SRC, "SET_DL_SRC" },
+ { 1U <<OFPAT_SET_DL_DST, "SET_DL_DST" },
+ { 1U <<OFPAT_SET_NW_SRC, "SET_NW_SRC" },
+ { 1U <<OFPAT_SET_NW_DST, "SET_NW_DST" },
+ { 1U <<OFPAT_SET_NW_TOS, "SET_NW_TOS" },
+ { 1U <<OFPAT_SET_TP_SRC, "SET_TP_SRC" },
+ { 1U <<OFPAT_SET_TP_DST, "SET_TP_DST" },
+ { 1U <<OFPAT_ENQUEUE, "ENQUEUE" },
+ { 0, NULL }
+};
+#define OFPAT_U (~(1U <<OFPAT_OUTPUT | 1U <<OFPAT_SET_VLAN_VID | \
+ 1U <<OFPAT_SET_VLAN_PCP | 1U <<OFPAT_STRIP_VLAN | \
+ 1U <<OFPAT_SET_DL_SRC | 1U <<OFPAT_SET_DL_DST | \
+ 1U <<OFPAT_SET_NW_SRC | 1U <<OFPAT_SET_NW_DST | \
+ 1U <<OFPAT_SET_NW_TOS | 1U <<OFPAT_SET_TP_SRC | \
+ 1U <<OFPAT_SET_TP_DST | 1U <<OFPAT_ENQUEUE))
+
+#define OFPC_FLOW_STATS (1U <<0)
+#define OFPC_TABLE_STATS (1U <<1)
+#define OFPC_PORT_STATS (1U <<2)
+#define OFPC_STP (1U <<3)
+#define OFPC_RESERVED (1U <<4)
+#define OFPC_IP_REASM (1U <<5)
+#define OFPC_QUEUE_STATS (1U <<6)
+#define OFPC_ARP_MATCH_IP (1U <<7)
+static const struct tok ofp_capabilities_bm[] = {
+ { OFPC_FLOW_STATS, "FLOW_STATS" },
+ { OFPC_TABLE_STATS, "TABLE_STATS" },
+ { OFPC_PORT_STATS, "PORT_STATS" },
+ { OFPC_STP, "STP" },
+ { OFPC_RESERVED, "RESERVED" }, /* not in the mask below */
+ { OFPC_IP_REASM, "IP_REASM" },
+ { OFPC_QUEUE_STATS, "QUEUE_STATS" },
+ { OFPC_ARP_MATCH_IP, "ARP_MATCH_IP" },
+ { 0, NULL }
+};
+#define OFPCAP_U (~(OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
+ OFPC_STP | OFPC_IP_REASM | OFPC_QUEUE_STATS | \
+ OFPC_ARP_MATCH_IP))
+
+#define OFPC_FRAG_NORMAL 0x0000U
+#define OFPC_FRAG_DROP 0x0001U
+#define OFPC_FRAG_REASM 0x0002U
+#define OFPC_FRAG_MASK 0x0003U
+static const struct tok ofp_config_str[] = {
+ { OFPC_FRAG_NORMAL, "FRAG_NORMAL" },
+ { OFPC_FRAG_DROP, "FRAG_DROP" },
+ { OFPC_FRAG_REASM, "FRAG_REASM" },
+ { 0, NULL }
+};
+
+#define OFPFC_ADD 0x0000U
+#define OFPFC_MODIFY 0x0001U
+#define OFPFC_MODIFY_STRICT 0x0002U
+#define OFPFC_DELETE 0x0003U
+#define OFPFC_DELETE_STRICT 0x0004U
+static const struct tok ofpfc_str[] = {
+ { OFPFC_ADD, "ADD" },
+ { OFPFC_MODIFY, "MODIFY" },
+ { OFPFC_MODIFY_STRICT, "MODIFY_STRICT" },
+ { OFPFC_DELETE, "DELETE" },
+ { OFPFC_DELETE_STRICT, "DELETE_STRICT" },
+ { 0, NULL }
+};
+
+static const struct tok bufferid_str[] = {
+ { 0xffffffff, "NONE" },
+ { 0, NULL }
+};
+
+#define OFPFF_SEND_FLOW_REM (1U <<0)
+#define OFPFF_CHECK_OVERLAP (1U <<1)
+#define OFPFF_EMERG (1U <<2)
+static const struct tok ofpff_bm[] = {
+ { OFPFF_SEND_FLOW_REM, "SEND_FLOW_REM" },
+ { OFPFF_CHECK_OVERLAP, "CHECK_OVERLAP" },
+ { OFPFF_EMERG, "EMERG" },
+ { 0, NULL }
+};
+#define OFPFF_U (~(OFPFF_SEND_FLOW_REM | OFPFF_CHECK_OVERLAP | OFPFF_EMERG))
+
+#define OFPST_DESC 0x0000U
+#define OFPST_FLOW 0x0001U
+#define OFPST_AGGREGATE 0x0002U
+#define OFPST_TABLE 0x0003U
+#define OFPST_PORT 0x0004U
+#define OFPST_QUEUE 0x0005U
+#define OFPST_VENDOR 0xffffU
+static const struct tok ofpst_str[] = {
+ { OFPST_DESC, "DESC" },
+ { OFPST_FLOW, "FLOW" },
+ { OFPST_AGGREGATE, "AGGREGATE" },
+ { OFPST_TABLE, "TABLE" },
+ { OFPST_PORT, "PORT" },
+ { OFPST_QUEUE, "QUEUE" },
+ { OFPST_VENDOR, "VENDOR" },
+ { 0, NULL }
+};
+
+static const struct tok tableid_str[] = {
+ { 0xfeU, "EMERG" },
+ { 0xffU, "ALL" },
+ { 0, NULL }
+};
+
+#define OFPQ_ALL 0xffffffffU
+static const struct tok ofpq_str[] = {
+ { OFPQ_ALL, "ALL" },
+ { 0, NULL }
+};
+
+#define OFPSF_REPLY_MORE 0x0001U
+static const struct tok ofpsf_reply_bm[] = {
+ { OFPSF_REPLY_MORE, "MORE" },
+ { 0, NULL }
+};
+#define OFPSF_REPLY_U (~(OFPSF_REPLY_MORE))
+
+#define OFPR_NO_MATCH 0x00U
+#define OFPR_ACTION 0x01U
+static const struct tok ofpr_str[] = {
+ { OFPR_NO_MATCH, "NO_MATCH" },
+ { OFPR_ACTION, "ACTION" },
+ { 0, NULL }
+};
+
+#define OFPRR_IDLE_TIMEOUT 0x00U
+#define OFPRR_HARD_TIMEOUT 0x01U
+#define OFPRR_DELETE 0x02U
+static const struct tok ofprr_str[] = {
+ { OFPRR_IDLE_TIMEOUT, "IDLE_TIMEOUT" },
+ { OFPRR_HARD_TIMEOUT, "HARD_TIMEOUT" },
+ { OFPRR_DELETE, "DELETE" },
+ { 0, NULL }
+};
+
+#define OFPPR_ADD 0x00U
+#define OFPPR_DELETE 0x01U
+#define OFPPR_MODIFY 0x02U
+static const struct tok ofppr_str[] = {
+ { OFPPR_ADD, "ADD" },
+ { OFPPR_DELETE, "DELETE" },
+ { OFPPR_MODIFY, "MODIFY" },
+ { 0, NULL }
+};
+
+#define OFPET_HELLO_FAILED 0x0000U
+#define OFPET_BAD_REQUEST 0x0001U
+#define OFPET_BAD_ACTION 0x0002U
+#define OFPET_FLOW_MOD_FAILED 0x0003U
+#define OFPET_PORT_MOD_FAILED 0x0004U
+#define OFPET_QUEUE_OP_FAILED 0x0005U
+static const struct tok ofpet_str[] = {
+ { OFPET_HELLO_FAILED, "HELLO_FAILED" },
+ { OFPET_BAD_REQUEST, "BAD_REQUEST" },
+ { OFPET_BAD_ACTION, "BAD_ACTION" },
+ { OFPET_FLOW_MOD_FAILED, "FLOW_MOD_FAILED" },
+ { OFPET_PORT_MOD_FAILED, "PORT_MOD_FAILED" },
+ { OFPET_QUEUE_OP_FAILED, "QUEUE_OP_FAILED" },
+ { 0, NULL }
+};
+
+#define OFPHFC_INCOMPATIBLE 0x0000U
+#define OFPHFC_EPERM 0x0001U
+static const struct tok ofphfc_str[] = {
+ { OFPHFC_INCOMPATIBLE, "INCOMPATIBLE" },
+ { OFPHFC_EPERM, "EPERM" },
+ { 0, NULL }
+};
+
+#define OFPBRC_BAD_VERSION 0x0000U
+#define OFPBRC_BAD_TYPE 0x0001U
+#define OFPBRC_BAD_STAT 0x0002U
+#define OFPBRC_BAD_VENDOR 0x0003U
+#define OFPBRC_BAD_SUBTYPE 0x0004U
+#define OFPBRC_EPERM 0x0005U
+#define OFPBRC_BAD_LEN 0x0006U
+#define OFPBRC_BUFFER_EMPTY 0x0007U
+#define OFPBRC_BUFFER_UNKNOWN 0x0008U
+static const struct tok ofpbrc_str[] = {
+ { OFPBRC_BAD_VERSION, "BAD_VERSION" },
+ { OFPBRC_BAD_TYPE, "BAD_TYPE" },
+ { OFPBRC_BAD_STAT, "BAD_STAT" },
+ { OFPBRC_BAD_VENDOR, "BAD_VENDOR" },
+ { OFPBRC_BAD_SUBTYPE, "BAD_SUBTYPE" },
+ { OFPBRC_EPERM, "EPERM" },
+ { OFPBRC_BAD_LEN, "BAD_LEN" },
+ { OFPBRC_BUFFER_EMPTY, "BUFFER_EMPTY" },
+ { OFPBRC_BUFFER_UNKNOWN, "BUFFER_UNKNOWN" },
+ { 0, NULL }
+};
+
+#define OFPBAC_BAD_TYPE 0x0000U
+#define OFPBAC_BAD_LEN 0x0001U
+#define OFPBAC_BAD_VENDOR 0x0002U
+#define OFPBAC_BAD_VENDOR_TYPE 0x0003U
+#define OFPBAC_BAD_OUT_PORT 0x0004U
+#define OFPBAC_BAD_ARGUMENT 0x0005U
+#define OFPBAC_EPERM 0x0006U
+#define OFPBAC_TOO_MANY 0x0007U
+#define OFPBAC_BAD_QUEUE 0x0008U
+static const struct tok ofpbac_str[] = {
+ { OFPBAC_BAD_TYPE, "BAD_TYPE" },
+ { OFPBAC_BAD_LEN, "BAD_LEN" },
+ { OFPBAC_BAD_VENDOR, "BAD_VENDOR" },
+ { OFPBAC_BAD_VENDOR_TYPE, "BAD_VENDOR_TYPE" },
+ { OFPBAC_BAD_OUT_PORT, "BAD_OUT_PORT" },
+ { OFPBAC_BAD_ARGUMENT, "BAD_ARGUMENT" },
+ { OFPBAC_EPERM, "EPERM" },
+ { OFPBAC_TOO_MANY, "TOO_MANY" },
+ { OFPBAC_BAD_QUEUE, "BAD_QUEUE" },
+ { 0, NULL }
+};
+
+#define OFPFMFC_ALL_TABLES_FULL 0x0000U
+#define OFPFMFC_OVERLAP 0x0001U
+#define OFPFMFC_EPERM 0x0002U
+#define OFPFMFC_BAD_EMERG_TIMEOUT 0x0003U
+#define OFPFMFC_BAD_COMMAND 0x0004U
+#define OFPFMFC_UNSUPPORTED 0x0005U
+static const struct tok ofpfmfc_str[] = {
+ { OFPFMFC_ALL_TABLES_FULL, "ALL_TABLES_FULL" },
+ { OFPFMFC_OVERLAP, "OVERLAP" },
+ { OFPFMFC_EPERM, "EPERM" },
+ { OFPFMFC_BAD_EMERG_TIMEOUT, "BAD_EMERG_TIMEOUT" },
+ { OFPFMFC_BAD_COMMAND, "BAD_COMMAND" },
+ { OFPFMFC_UNSUPPORTED, "UNSUPPORTED" },
+ { 0, NULL }
+};
+
+#define OFPPMFC_BAD_PORT 0x0000U
+#define OFPPMFC_BAD_HW_ADDR 0x0001U
+static const struct tok ofppmfc_str[] = {
+ { OFPPMFC_BAD_PORT, "BAD_PORT" },
+ { OFPPMFC_BAD_HW_ADDR, "BAD_HW_ADDR" },
+ { 0, NULL }
+};
+
+#define OFPQOFC_BAD_PORT 0x0000U
+#define OFPQOFC_BAD_QUEUE 0x0001U
+#define OFPQOFC_EPERM 0x0002U
+static const struct tok ofpqofc_str[] = {
+ { OFPQOFC_BAD_PORT, "BAD_PORT" },
+ { OFPQOFC_BAD_QUEUE, "BAD_QUEUE" },
+ { OFPQOFC_EPERM, "EPERM" },
+ { 0, NULL }
+};
+
+static const struct uint_tokary of10_ofpet2tokary[] = {
+ { OFPET_HELLO_FAILED, ofphfc_str },
+ { OFPET_BAD_REQUEST, ofpbrc_str },
+ { OFPET_BAD_ACTION, ofpbac_str },
+ { OFPET_FLOW_MOD_FAILED, ofpfmfc_str },
+ { OFPET_PORT_MOD_FAILED, ofppmfc_str },
+ { OFPET_QUEUE_OP_FAILED, ofpqofc_str },
+ /* uint2tokary() does not use array termination. */
+};
+
+/* lengths (fixed or minimal) of particular message types, where not 0 */
+#define OF_SWITCH_CONFIG_FIXLEN (12U - OF_HEADER_FIXLEN)
+#define OF_FEATURES_REPLY_MINLEN (32U - OF_HEADER_FIXLEN)
+#define OF_PORT_STATUS_FIXLEN (64U - OF_HEADER_FIXLEN)
+#define OF_PORT_MOD_FIXLEN (32U - OF_HEADER_FIXLEN)
+#define OF_PACKET_IN_MINLEN (20U - OF_HEADER_FIXLEN) /* with 2 mock octets */
+#define OF_PACKET_OUT_MINLEN (16U - OF_HEADER_FIXLEN)
+#define OF_FLOW_MOD_MINLEN (72U - OF_HEADER_FIXLEN)
+#define OF_FLOW_REMOVED_FIXLEN (88U - OF_HEADER_FIXLEN)
+#define OF_ERROR_MSG_MINLEN (12U - OF_HEADER_FIXLEN)
+#define OF_STATS_REQUEST_MINLEN (12U - OF_HEADER_FIXLEN)
+#define OF_STATS_REPLY_MINLEN (12U - OF_HEADER_FIXLEN)
+#define OF_VENDOR_MINLEN (12U - OF_HEADER_FIXLEN)
+#define OF_QUEUE_GET_CONFIG_REQUEST_FIXLEN (12U - OF_HEADER_FIXLEN)
+#define OF_QUEUE_GET_CONFIG_REPLY_MINLEN (16U - OF_HEADER_FIXLEN)
+
+/* lengths (fixed or minimal) of particular protocol structures */
+#define OF_PHY_PORT_FIXLEN 48
+#define OF_ACTION_MINLEN 8
+#define OF_MATCH_FIXLEN 40
+#define OF_DESC_STATS_REPLY_FIXLEN 1056
+#define OF_FLOW_STATS_REQUEST_FIXLEN 44
+#define OF_FLOW_STATS_REPLY_MINLEN 88
+#define OF_AGGREGATE_STATS_REPLY_FIXLEN 24
+#define OF_TABLE_STATS_REPLY_FIXLEN 64
+#define OF_PORT_STATS_REQUEST_FIXLEN 8
+#define OF_PORT_STATS_REPLY_FIXLEN 104
+#define OF_QUEUE_PROP_MINLEN 8
+#define OF_QUEUE_PROP_MIN_RATE_FIXLEN 16
+#define OF_PACKET_QUEUE_MINLEN 8
+#define OF_QUEUE_STATS_REQUEST_FIXLEN 8
+#define OF_QUEUE_STATS_REPLY_FIXLEN 32
+
+/* miscellaneous constants from [OF10] */
+#define OFP_MAX_TABLE_NAME_LEN 32
+#define OFP_MAX_PORT_NAME_LEN 16
+#define DESC_STR_LEN 256
+#define SERIAL_NUM_LEN 32
+#define OFP_VLAN_NONE 0xffffU
+
+/* vendor extensions */
+#define BSN_SET_IP_MASK 0
+#define BSN_GET_IP_MASK_REQUEST 1
+#define BSN_GET_IP_MASK_REPLY 2
+#define BSN_SET_MIRRORING 3
+#define BSN_GET_MIRRORING_REQUEST 4
+#define BSN_GET_MIRRORING_REPLY 5
+#define BSN_SHELL_COMMAND 6
+#define BSN_SHELL_OUTPUT 7
+#define BSN_SHELL_STATUS 8
+#define BSN_GET_INTERFACES_REQUEST 9
+#define BSN_GET_INTERFACES_REPLY 10
+#define BSN_SET_PKTIN_SUPPRESSION_REQUEST 11
+#define BSN_SET_L2_TABLE_REQUEST 12
+#define BSN_GET_L2_TABLE_REQUEST 13
+#define BSN_GET_L2_TABLE_REPLY 14
+#define BSN_VIRTUAL_PORT_CREATE_REQUEST 15
+#define BSN_VIRTUAL_PORT_CREATE_REPLY 16
+#define BSN_VIRTUAL_PORT_REMOVE_REQUEST 17
+#define BSN_BW_ENABLE_SET_REQUEST 18
+#define BSN_BW_ENABLE_GET_REQUEST 19
+#define BSN_BW_ENABLE_GET_REPLY 20
+#define BSN_BW_CLEAR_DATA_REQUEST 21
+#define BSN_BW_CLEAR_DATA_REPLY 22
+#define BSN_BW_ENABLE_SET_REPLY 23
+#define BSN_SET_L2_TABLE_REPLY 24
+#define BSN_SET_PKTIN_SUPPRESSION_REPLY 25
+#define BSN_VIRTUAL_PORT_REMOVE_REPLY 26
+#define BSN_HYBRID_GET_REQUEST 27
+#define BSN_HYBRID_GET_REPLY 28
+ /* 29 */
+ /* 30 */
+#define BSN_PDU_TX_REQUEST 31
+#define BSN_PDU_TX_REPLY 32
+#define BSN_PDU_RX_REQUEST 33
+#define BSN_PDU_RX_REPLY 34
+#define BSN_PDU_RX_TIMEOUT 35
+
+static const struct tok bsn_subtype_str[] = {
+ { BSN_SET_IP_MASK, "SET_IP_MASK" },
+ { BSN_GET_IP_MASK_REQUEST, "GET_IP_MASK_REQUEST" },
+ { BSN_GET_IP_MASK_REPLY, "GET_IP_MASK_REPLY" },
+ { BSN_SET_MIRRORING, "SET_MIRRORING" },
+ { BSN_GET_MIRRORING_REQUEST, "GET_MIRRORING_REQUEST" },
+ { BSN_GET_MIRRORING_REPLY, "GET_MIRRORING_REPLY" },
+ { BSN_SHELL_COMMAND, "SHELL_COMMAND" },
+ { BSN_SHELL_OUTPUT, "SHELL_OUTPUT" },
+ { BSN_SHELL_STATUS, "SHELL_STATUS" },
+ { BSN_GET_INTERFACES_REQUEST, "GET_INTERFACES_REQUEST" },
+ { BSN_GET_INTERFACES_REPLY, "GET_INTERFACES_REPLY" },
+ { BSN_SET_PKTIN_SUPPRESSION_REQUEST, "SET_PKTIN_SUPPRESSION_REQUEST" },
+ { BSN_SET_L2_TABLE_REQUEST, "SET_L2_TABLE_REQUEST" },
+ { BSN_GET_L2_TABLE_REQUEST, "GET_L2_TABLE_REQUEST" },
+ { BSN_GET_L2_TABLE_REPLY, "GET_L2_TABLE_REPLY" },
+ { BSN_VIRTUAL_PORT_CREATE_REQUEST, "VIRTUAL_PORT_CREATE_REQUEST" },
+ { BSN_VIRTUAL_PORT_CREATE_REPLY, "VIRTUAL_PORT_CREATE_REPLY" },
+ { BSN_VIRTUAL_PORT_REMOVE_REQUEST, "VIRTUAL_PORT_REMOVE_REQUEST" },
+ { BSN_BW_ENABLE_SET_REQUEST, "BW_ENABLE_SET_REQUEST" },
+ { BSN_BW_ENABLE_GET_REQUEST, "BW_ENABLE_GET_REQUEST" },
+ { BSN_BW_ENABLE_GET_REPLY, "BW_ENABLE_GET_REPLY" },
+ { BSN_BW_CLEAR_DATA_REQUEST, "BW_CLEAR_DATA_REQUEST" },
+ { BSN_BW_CLEAR_DATA_REPLY, "BW_CLEAR_DATA_REPLY" },
+ { BSN_BW_ENABLE_SET_REPLY, "BW_ENABLE_SET_REPLY" },
+ { BSN_SET_L2_TABLE_REPLY, "SET_L2_TABLE_REPLY" },
+ { BSN_SET_PKTIN_SUPPRESSION_REPLY, "SET_PKTIN_SUPPRESSION_REPLY" },
+ { BSN_VIRTUAL_PORT_REMOVE_REPLY, "VIRTUAL_PORT_REMOVE_REPLY" },
+ { BSN_HYBRID_GET_REQUEST, "HYBRID_GET_REQUEST" },
+ { BSN_HYBRID_GET_REPLY, "HYBRID_GET_REPLY" },
+ { BSN_PDU_TX_REQUEST, "PDU_TX_REQUEST" },
+ { BSN_PDU_TX_REPLY, "PDU_TX_REPLY" },
+ { BSN_PDU_RX_REQUEST, "PDU_RX_REQUEST" },
+ { BSN_PDU_RX_REPLY, "PDU_RX_REPLY" },
+ { BSN_PDU_RX_TIMEOUT, "PDU_RX_TIMEOUT" },
+ { 0, NULL }
+};
+
+#define BSN_ACTION_MIRROR 1
+#define BSN_ACTION_SET_TUNNEL_DST 2
+ /* 3 */
+#define BSN_ACTION_CHECKSUM 4
+
+static const struct tok bsn_action_subtype_str[] = {
+ { BSN_ACTION_MIRROR, "MIRROR" },
+ { BSN_ACTION_SET_TUNNEL_DST, "SET_TUNNEL_DST" },
+ { BSN_ACTION_CHECKSUM, "CHECKSUM" },
+ { 0, NULL }
+};
+
+static const struct tok bsn_mirror_copy_stage_str[] = {
+ { 0, "INGRESS" },
+ { 1, "EGRESS" },
+ { 0, NULL },
+};
+
+static const struct tok bsn_onoff_str[] = {
+ { 0, "OFF" },
+ { 1, "ON" },
+ { 0, NULL },
+};
+
+static const char *
+vlan_str(const uint16_t vid)
+{
+ static char buf[sizeof("65535 (bogus)")];
+
+ if (vid == OFP_VLAN_NONE)
+ return "NONE";
+ snprintf(buf, sizeof(buf), "%u%s", vid,
+ (vid > 0 && vid < 0x0fff) ? "" : " (bogus)");
+ return buf;
+}
+
+static const char *
+pcp_str(const uint8_t pcp)
+{
+ static char buf[sizeof("255 (bogus)")];
+ snprintf(buf, sizeof(buf), "%u%s", pcp,
+ pcp <= 7 ? "" : " (bogus)");
+ return buf;
+}
+
+static void
+of10_bsn_message_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint32_t subtype;
+
+ if (len < 4)
+ goto invalid;
+ /* subtype */
+ subtype = GET_BE_U_4(cp);
+ OF_FWD(4);
+ ND_PRINT("\n\t subtype %s", tok2str(bsn_subtype_str, "unknown (0x%08x)", subtype));
+ switch (subtype) {
+ case BSN_GET_IP_MASK_REQUEST:
+ /*
+ * 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
+ * +---------------+---------------+---------------+---------------+
+ * | subtype |
+ * +---------------+---------------+---------------+---------------+
+ * | index | pad |
+ * +---------------+---------------+---------------+---------------+
+ * | pad |
+ * +---------------+---------------+---------------+---------------+
+ *
+ */
+ if (len != 8)
+ goto invalid;
+ /* index */
+ ND_PRINT(", index %u", GET_U_1(cp));
+ OF_FWD(1);
+ /* pad */
+ /* Always the last field, check bounds. */
+ ND_TCHECK_7(cp);
+ break;
+ case BSN_SET_IP_MASK:
+ case BSN_GET_IP_MASK_REPLY:
+ /*
+ * 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
+ * +---------------+---------------+---------------+---------------+
+ * | subtype |
+ * +---------------+---------------+---------------+---------------+
+ * | index | pad |
+ * +---------------+---------------+---------------+---------------+
+ * | mask |
+ * +---------------+---------------+---------------+---------------+
+ *
+ */
+ if (len != 8)
+ goto invalid;
+ /* index */
+ ND_PRINT(", index %u", GET_U_1(cp));
+ OF_FWD(1);
+ /* pad */
+ OF_FWD(3);
+ /* mask */
+ ND_PRINT(", mask %s", GET_IPADDR_STRING(cp));
+ break;
+ case BSN_SET_MIRRORING:
+ case BSN_GET_MIRRORING_REQUEST:
+ case BSN_GET_MIRRORING_REPLY:
+ /*
+ * 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
+ * +---------------+---------------+---------------+---------------+
+ * | subtype |
+ * +---------------+---------------+---------------+---------------+
+ * | report m. p. | pad |
+ * +---------------+---------------+---------------+---------------+
+ *
+ */
+ if (len != 4)
+ goto invalid;
+ /* report_mirror_ports */
+ ND_PRINT(", report_mirror_ports %s",
+ tok2str(bsn_onoff_str, "bogus (%u)", GET_U_1(cp)));
+ OF_FWD(1);
+ /* pad */
+ /* Always the last field, check bounds. */
+ ND_TCHECK_3(cp);
+ break;
+ case BSN_GET_INTERFACES_REQUEST:
+ case BSN_GET_L2_TABLE_REQUEST:
+ case BSN_BW_ENABLE_GET_REQUEST:
+ case BSN_BW_CLEAR_DATA_REQUEST:
+ case BSN_HYBRID_GET_REQUEST:
+ /*
+ * 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
+ * +---------------+---------------+---------------+---------------+
+ * | subtype |
+ * +---------------+---------------+---------------+---------------+
+ *
+ */
+ if (len)
+ goto invalid;
+ break;
+ case BSN_VIRTUAL_PORT_REMOVE_REQUEST:
+ /*
+ * 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
+ * +---------------+---------------+---------------+---------------+
+ * | subtype |
+ * +---------------+---------------+---------------+---------------+
+ * | vport_no |
+ * +---------------+---------------+---------------+---------------+
+ *
+ */
+ if (len != 4)
+ goto invalid;
+ /* vport_no */
+ ND_PRINT(", vport_no %u", GET_BE_U_4(cp));
+ break;
+ case BSN_SHELL_COMMAND:
+ /*
+ * 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
+ * +---------------+---------------+---------------+---------------+
+ * | subtype |
+ * +---------------+---------------+---------------+---------------+
+ * | service |
+ * +---------------+---------------+---------------+---------------+
+ * | data ...
+ * +---------------+---------------+--------
+ *
+ */
+ if (len < 4)
+ goto invalid;
+ /* service */
+ ND_PRINT(", service %u", GET_BE_U_4(cp));
+ OF_FWD(4);
+ /* data */
+ ND_PRINT(", data '");
+ (void)nd_printn(ndo, cp, len, NULL);
+ ND_PRINT("'");
+ break;
+ case BSN_SHELL_OUTPUT:
+ /*
+ * 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
+ * +---------------+---------------+---------------+---------------+
+ * | subtype |
+ * +---------------+---------------+---------------+---------------+
+ * | data ...
+ * +---------------+---------------+--------
+ *
+ */
+ /* already checked that len >= 4 */
+ /* data */
+ ND_PRINT(", data '");
+ (void)nd_printn(ndo, cp, len, NULL);
+ ND_PRINT("'");
+ break;
+ case BSN_SHELL_STATUS:
+ /*
+ * 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
+ * +---------------+---------------+---------------+---------------+
+ * | subtype |
+ * +---------------+---------------+---------------+---------------+
+ * | status |
+ * +---------------+---------------+---------------+---------------+
+ *
+ */
+ if (len != 4)
+ goto invalid;
+ /* status */
+ ND_PRINT(", status 0x%08x", GET_BE_U_4(cp));
+ break;
+ default:
+ ND_TCHECK_LEN(cp, len);
+ }
+ return;
+
+invalid: /* skip the undersized data */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+of10_bsn_actions_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint32_t subtype, vlan_tag;
+
+ if (len < 4)
+ goto invalid;
+ /* subtype */
+ subtype = GET_BE_U_4(cp);
+ OF_FWD(4);
+ ND_PRINT("\n\t subtype %s", tok2str(bsn_action_subtype_str, "unknown (0x%08x)", subtype));
+ switch (subtype) {
+ case BSN_ACTION_MIRROR:
+ /*
+ * 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
+ * +---------------+---------------+---------------+---------------+
+ * | subtype |
+ * +---------------+---------------+---------------+---------------+
+ * | dest_port |
+ * +---------------+---------------+---------------+---------------+
+ * | vlan_tag |
+ * +---------------+---------------+---------------+---------------+
+ * | copy_stage | pad |
+ * +---------------+---------------+---------------+---------------+
+ *
+ */
+ if (len != 12)
+ goto invalid;
+ /* dest_port */
+ ND_PRINT(", dest_port %u", GET_BE_U_4(cp));
+ OF_FWD(4);
+ /* vlan_tag */
+ vlan_tag = GET_BE_U_4(cp);
+ OF_FWD(4);
+ switch (vlan_tag >> 16) {
+ case 0:
+ ND_PRINT(", vlan_tag none");
+ break;
+ case ETHERTYPE_8021Q:
+ ND_PRINT(", vlan_tag 802.1Q (%s)", ieee8021q_tci_string(vlan_tag & 0xffff));
+ break;
+ default:
+ ND_PRINT(", vlan_tag unknown (0x%04x)", vlan_tag >> 16);
+ }
+ /* copy_stage */
+ ND_PRINT(", copy_stage %s",
+ tok2str(bsn_mirror_copy_stage_str, "unknown (%u)", GET_U_1(cp)));
+ OF_FWD(1);
+ /* pad */
+ /* Always the last field, check bounds. */
+ ND_TCHECK_3(cp);
+ break;
+ default:
+ ND_TCHECK_LEN(cp, len);
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+of10_vendor_action_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint32_t vendor;
+ void (*decoder)(netdissect_options *, const u_char *, u_int);
+
+ if (len < 4)
+ goto invalid;
+ /* vendor */
+ vendor = GET_BE_U_4(cp);
+ OF_FWD(4);
+ ND_PRINT(", vendor 0x%08x (%s)", vendor, of_vendor_name(vendor));
+ /* data */
+ decoder =
+ vendor == OUI_BSN ? of10_bsn_actions_print :
+ of_data_print;
+ decoder(ndo, cp, len);
+ return;
+
+invalid: /* skip the undersized data */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* [OF10] Section 5.5.4 */
+static void
+of10_vendor_message_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint32_t vendor;
+ void (*decoder)(netdissect_options *, const u_char *, u_int);
+
+ /* vendor */
+ vendor = GET_BE_U_4(cp);
+ OF_FWD(4);
+ ND_PRINT(", vendor 0x%08x (%s)", vendor, of_vendor_name(vendor));
+ /* data */
+ decoder =
+ vendor == OUI_BSN ? of10_bsn_message_print :
+ of_data_print;
+ decoder(ndo, cp, len);
+}
+
+/* Vendor ID is mandatory, data is optional. */
+static void
+of10_vendor_data_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint32_t vendor;
+
+ if (len < 4)
+ goto invalid;
+ /* vendor */
+ vendor = GET_BE_U_4(cp);
+ OF_FWD(4);
+ ND_PRINT(", vendor 0x%08x (%s)", vendor, of_vendor_name(vendor));
+ /* data */
+ of_data_print(ndo, cp, len);
+ return;
+
+invalid: /* skip the undersized data */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+of10_packet_data_print(netdissect_options *ndo,
+ const u_char *cp, const u_int len)
+{
+ if (len == 0)
+ return;
+ /* data */
+ ND_PRINT("\n\t data (%u octets)", len);
+ if (ndo->ndo_vflag < 3) {
+ ND_TCHECK_LEN(cp, len);
+ return;
+ }
+ ndo->ndo_vflag -= 3;
+ ND_PRINT(", frame decoding below\n");
+ /*
+ * The encapsulated Ethernet frame is not necessarily the last
+ * data of this packet (i.e. there may be more OpenFlow messages
+ * after the current OFPT_PACKET_IN/OFPT_PACKET_OUT message, in
+ * which case the current (outer) packet's snapshot end is not
+ * what ether_print() needs to decode an Ethernet frame nested in
+ * the middle of a TCP payload.
+ */
+ const u_char *snapend_save = ndo->ndo_snapend;
+ ndo->ndo_snapend = ND_MIN(cp + len, ndo->ndo_snapend);
+ ether_print(ndo, cp, len, ND_BYTES_AVAILABLE_AFTER(cp), NULL, NULL);
+ ndo->ndo_snapend = snapend_save;
+ ndo->ndo_vflag += 3;
+}
+
+/* [OF10] Section 5.2.1 */
+static void
+of10_phy_port_print(netdissect_options *ndo,
+ const u_char *cp)
+{
+ uint32_t state;
+
+ /* port_no */
+ ND_PRINT("\n\t port_no %s",
+ tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ cp += 2;
+ /* hw_addr */
+ ND_PRINT(", hw_addr %s", GET_ETHERADDR_STRING(cp));
+ cp += MAC_ADDR_LEN;
+ /* name */
+ ND_PRINT(", name '");
+ nd_printjnp(ndo, cp, OFP_MAX_PORT_NAME_LEN);
+ ND_PRINT("'");
+ cp += OFP_MAX_PORT_NAME_LEN;
+
+ if (ndo->ndo_vflag < 2) {
+ ND_TCHECK_LEN(cp, 24);
+ return;
+ }
+ /* config */
+ ND_PRINT("\n\t config 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppc_bm, GET_BE_U_4(cp), OFPPC_U);
+ cp += 4;
+ /* state */
+ state = GET_BE_U_4(cp);
+ /*
+ * Decode the code point and the single bit separately, but
+ * format the result as a single sequence of comma-separated
+ * strings (see the comments at the OFPPS_ props).
+ */
+ ND_PRINT("\n\t state 0x%08x (%s%s)%s", state,
+ tok2str(ofpps_stp_str, "", state & OFPPS_STP_MASK),
+ state & OFPPS_LINK_DOWN ? ", LINK_DOWN" : "",
+ state & OFPPS_U ? " (bogus)" : "");
+ cp += 4;
+ /* curr */
+ ND_PRINT("\n\t curr 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppf_bm, GET_BE_U_4(cp), OFPPF_U);
+ cp += 4;
+ /* advertised */
+ ND_PRINT("\n\t advertised 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppf_bm, GET_BE_U_4(cp), OFPPF_U);
+ cp += 4;
+ /* supported */
+ ND_PRINT("\n\t supported 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppf_bm, GET_BE_U_4(cp), OFPPF_U);
+ cp += 4;
+ /* peer */
+ ND_PRINT("\n\t peer 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppf_bm, GET_BE_U_4(cp), OFPPF_U);
+}
+
+/* [OF10] Section 5.2.2 */
+static void
+of10_queue_props_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ while (len) {
+ uint16_t property, plen;
+ u_char plen_bogus = 0, skip = 0;
+
+ if (len < OF_QUEUE_PROP_MINLEN)
+ goto invalid;
+ /* property */
+ property = GET_BE_U_2(cp);
+ OF_FWD(2);
+ ND_PRINT("\n\t property %s", tok2str(ofpqt_str, "invalid (0x%04x)", property));
+ /* len */
+ plen = GET_BE_U_2(cp);
+ OF_FWD(2);
+ ND_PRINT(", len %u", plen);
+ if (plen < OF_QUEUE_PROP_MINLEN || plen > len + 4)
+ goto invalid;
+ /* pad */
+ /* Sometimes the last field, check bounds. */
+ OF_CHK_FWD(4);
+ /* property-specific constraints and decoding */
+ switch (property) {
+ case OFPQT_NONE:
+ plen_bogus = plen != OF_QUEUE_PROP_MINLEN;
+ break;
+ case OFPQT_MIN_RATE:
+ plen_bogus = plen != OF_QUEUE_PROP_MIN_RATE_FIXLEN;
+ break;
+ default:
+ skip = 1;
+ }
+ if (plen_bogus) {
+ ND_PRINT(" (bogus)");
+ skip = 1;
+ }
+ if (skip) {
+ /*
+ * plen >= OF_QUEUE_PROP_MINLEN
+ * cp is OF_QUEUE_PROP_MINLEN bytes in
+ */
+ OF_CHK_FWD(plen - OF_QUEUE_PROP_MINLEN);
+ continue;
+ }
+ if (property == OFPQT_MIN_RATE) { /* the only case of property decoding */
+ /* rate */
+ uint16_t rate = GET_BE_U_2(cp);
+ OF_FWD(2);
+ if (rate > 1000)
+ ND_PRINT(", rate disabled");
+ else
+ ND_PRINT(", rate %u.%u%%", rate / 10, rate % 10);
+ /* pad */
+ /* Sometimes the last field, check bounds. */
+ OF_CHK_FWD(6);
+ }
+ } /* while */
+ return;
+
+invalid: /* skip the rest of queue properties */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* ibid */
+static void
+of10_queues_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ while (len) {
+ uint16_t desclen;
+
+ if (len < OF_PACKET_QUEUE_MINLEN)
+ goto invalid;
+ /* queue_id */
+ ND_PRINT("\n\t queue_id %u", GET_BE_U_4(cp));
+ OF_FWD(4);
+ /* len */
+ desclen = GET_BE_U_2(cp);
+ OF_FWD(2);
+ ND_PRINT(", len %u", desclen);
+ if (desclen < OF_PACKET_QUEUE_MINLEN || desclen > len + 6)
+ goto invalid;
+ /* pad */
+ /* Sometimes the last field, check bounds. */
+ OF_CHK_FWD(2);
+ /* properties */
+ if (ndo->ndo_vflag >= 2)
+ of10_queue_props_print(ndo, cp, desclen - OF_PACKET_QUEUE_MINLEN);
+ else
+ ND_TCHECK_LEN(cp, desclen - OF_PACKET_QUEUE_MINLEN);
+ OF_FWD(desclen - OF_PACKET_QUEUE_MINLEN);
+ } /* while */
+ return;
+
+invalid: /* skip the rest of queues */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* [OF10] Section 5.2.3 */
+static void
+of10_match_print(netdissect_options *ndo,
+ const char *pfx, const u_char *cp)
+{
+ uint32_t wildcards;
+ uint16_t dl_type;
+ uint8_t nw_proto;
+ u_int nw_bits;
+ const char *field_name;
+
+ /* wildcards */
+ wildcards = GET_BE_U_4(cp);
+ if (wildcards & OFPFW_U)
+ ND_PRINT("%swildcards 0x%08x (bogus)", pfx, wildcards);
+ cp += 4;
+ /* in_port */
+ if (! (wildcards & OFPFW_IN_PORT))
+ ND_PRINT("%smatch in_port %s", pfx,
+ tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ cp += 2;
+ /* dl_src */
+ if (! (wildcards & OFPFW_DL_SRC))
+ ND_PRINT("%smatch dl_src %s", pfx, GET_ETHERADDR_STRING(cp));
+ cp += MAC_ADDR_LEN;
+ /* dl_dst */
+ if (! (wildcards & OFPFW_DL_DST))
+ ND_PRINT("%smatch dl_dst %s", pfx, GET_ETHERADDR_STRING(cp));
+ cp += MAC_ADDR_LEN;
+ /* dl_vlan */
+ if (! (wildcards & OFPFW_DL_VLAN))
+ ND_PRINT("%smatch dl_vlan %s", pfx, vlan_str(GET_BE_U_2(cp)));
+ cp += 2;
+ /* dl_vlan_pcp */
+ if (! (wildcards & OFPFW_DL_VLAN_PCP))
+ ND_PRINT("%smatch dl_vlan_pcp %s", pfx, pcp_str(GET_U_1(cp)));
+ cp += 1;
+ /* pad1 */
+ cp += 1;
+ /* dl_type */
+ dl_type = GET_BE_U_2(cp);
+ cp += 2;
+ if (! (wildcards & OFPFW_DL_TYPE))
+ ND_PRINT("%smatch dl_type 0x%04x", pfx, dl_type);
+ /* nw_tos */
+ if (! (wildcards & OFPFW_NW_TOS))
+ ND_PRINT("%smatch nw_tos 0x%02x", pfx, GET_U_1(cp));
+ cp += 1;
+ /* nw_proto */
+ nw_proto = GET_U_1(cp);
+ cp += 1;
+ if (! (wildcards & OFPFW_NW_PROTO)) {
+ field_name = ! (wildcards & OFPFW_DL_TYPE) && dl_type == ETHERTYPE_ARP
+ ? "arp_opcode" : "nw_proto";
+ ND_PRINT("%smatch %s %u", pfx, field_name, nw_proto);
+ }
+ /* pad2 */
+ cp += 2;
+ /* nw_src */
+ nw_bits = (wildcards & OFPFW_NW_SRC_MASK) >> OFPFW_NW_SRC_SHIFT;
+ if (nw_bits < 32)
+ ND_PRINT("%smatch nw_src %s/%u", pfx, GET_IPADDR_STRING(cp), 32 - nw_bits);
+ cp += 4;
+ /* nw_dst */
+ nw_bits = (wildcards & OFPFW_NW_DST_MASK) >> OFPFW_NW_DST_SHIFT;
+ if (nw_bits < 32)
+ ND_PRINT("%smatch nw_dst %s/%u", pfx, GET_IPADDR_STRING(cp), 32 - nw_bits);
+ cp += 4;
+ /* tp_src */
+ if (! (wildcards & OFPFW_TP_SRC)) {
+ field_name = ! (wildcards & OFPFW_DL_TYPE) && dl_type == ETHERTYPE_IP
+ && ! (wildcards & OFPFW_NW_PROTO) && nw_proto == IPPROTO_ICMP
+ ? "icmp_type" : "tp_src";
+ ND_PRINT("%smatch %s %u", pfx, field_name, GET_BE_U_2(cp));
+ }
+ cp += 2;
+ /* tp_dst */
+ /* The last unconditional check was at nw_proto, so have an "else" here. */
+ if (! (wildcards & OFPFW_TP_DST)) {
+ field_name = ! (wildcards & OFPFW_DL_TYPE) && dl_type == ETHERTYPE_IP
+ && ! (wildcards & OFPFW_NW_PROTO) && nw_proto == IPPROTO_ICMP
+ ? "icmp_code" : "tp_dst";
+ ND_PRINT("%smatch %s %u", pfx, field_name, GET_BE_U_2(cp));
+ }
+ else
+ ND_TCHECK_2(cp);
+}
+
+/* [OF10] Section 5.2.4 */
+static void
+of10_actions_print(netdissect_options *ndo,
+ const char *pfx, const u_char *cp, u_int len)
+{
+ while (len) {
+ uint16_t type, alen, output_port;
+ u_char alen_bogus = 0, skip = 0;
+
+ if (len < OF_ACTION_MINLEN)
+ goto invalid;
+ /* type */
+ type = GET_BE_U_2(cp);
+ OF_FWD(2);
+ ND_PRINT("%saction type %s", pfx, tok2str(ofpat_str, "invalid (0x%04x)", type));
+ /* length */
+ alen = GET_BE_U_2(cp);
+ OF_FWD(2);
+ ND_PRINT(", len %u", alen);
+ /*
+ * The 4-byte "pad" in the specification is not a field of the
+ * action header, but a placeholder to illustrate the 64-bit
+ * alignment requirement. Action type specific case blocks
+ * below fetch these 4 bytes.
+ */
+
+ /* On action size underrun/overrun skip the rest of the action list. */
+ if (alen < OF_ACTION_MINLEN || alen > len + 4)
+ goto invalid;
+ /*
+ * After validating the basic length constraint it will be safe
+ * to skip the current action if the action size is not valid
+ * for the type or the type is invalid.
+ */
+ switch (type) {
+ case OFPAT_OUTPUT:
+ case OFPAT_SET_VLAN_VID:
+ case OFPAT_SET_VLAN_PCP:
+ case OFPAT_STRIP_VLAN:
+ case OFPAT_SET_NW_SRC:
+ case OFPAT_SET_NW_DST:
+ case OFPAT_SET_NW_TOS:
+ case OFPAT_SET_TP_SRC:
+ case OFPAT_SET_TP_DST:
+ alen_bogus = alen != 8;
+ break;
+ case OFPAT_SET_DL_SRC:
+ case OFPAT_SET_DL_DST:
+ case OFPAT_ENQUEUE:
+ alen_bogus = alen != 16;
+ break;
+ case OFPAT_VENDOR:
+ alen_bogus = alen % 8 != 0; /* already >= 8 so far */
+ break;
+ default:
+ skip = 1;
+ }
+ if (alen_bogus) {
+ ND_PRINT(" (bogus)");
+ skip = 1;
+ }
+ if (skip) {
+ /*
+ * alen >= OF_ACTION_MINLEN
+ * cp is 4 bytes in
+ */
+ OF_CHK_FWD(alen - 4);
+ continue;
+ }
+ /* OK to decode the rest of the action structure */
+ switch (type) {
+ case OFPAT_OUTPUT:
+ /* port */
+ output_port = GET_BE_U_2(cp);
+ OF_FWD(2);
+ ND_PRINT(", port %s", tok2str(ofpp_str, "%u", output_port));
+ /* max_len */
+ if (output_port == OFPP_CONTROLLER)
+ ND_PRINT(", max_len %u", GET_BE_U_2(cp));
+ else
+ ND_TCHECK_2(cp);
+ OF_FWD(2);
+ break;
+ case OFPAT_SET_VLAN_VID:
+ /* vlan_vid */
+ ND_PRINT(", vlan_vid %s", vlan_str(GET_BE_U_2(cp)));
+ OF_FWD(2);
+ /* pad */
+ /* Sometimes the last field, check bounds. */
+ OF_CHK_FWD(2);
+ break;
+ case OFPAT_SET_VLAN_PCP:
+ /* vlan_pcp */
+ ND_PRINT(", vlan_pcp %s", pcp_str(GET_U_1(cp)));
+ OF_FWD(1);
+ /* pad */
+ /* Sometimes the last field, check bounds. */
+ OF_CHK_FWD(3);
+ break;
+ case OFPAT_SET_DL_SRC:
+ case OFPAT_SET_DL_DST:
+ /* dl_addr */
+ ND_PRINT(", dl_addr %s", GET_ETHERADDR_STRING(cp));
+ OF_FWD(MAC_ADDR_LEN);
+ /* pad */
+ /* Sometimes the last field, check bounds. */
+ OF_CHK_FWD(6);
+ break;
+ case OFPAT_SET_NW_SRC:
+ case OFPAT_SET_NW_DST:
+ /* nw_addr */
+ ND_PRINT(", nw_addr %s", GET_IPADDR_STRING(cp));
+ OF_FWD(4);
+ break;
+ case OFPAT_SET_NW_TOS:
+ /* nw_tos */
+ ND_PRINT(", nw_tos 0x%02x", GET_U_1(cp));
+ OF_FWD(1);
+ /* pad */
+ /* Sometimes the last field, check bounds. */
+ OF_CHK_FWD(3);
+ break;
+ case OFPAT_SET_TP_SRC:
+ case OFPAT_SET_TP_DST:
+ /* nw_tos */
+ ND_PRINT(", tp_port %u", GET_BE_U_2(cp));
+ OF_FWD(2);
+ /* pad */
+ /* Sometimes the last field, check bounds. */
+ OF_CHK_FWD(2);
+ break;
+ case OFPAT_ENQUEUE:
+ /* port */
+ ND_PRINT(", port %s",
+ tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ OF_FWD(2);
+ /* pad */
+ OF_FWD(6);
+ /* queue_id */
+ ND_PRINT(", queue_id %s",
+ tok2str(ofpq_str, "%u", GET_BE_U_4(cp)));
+ OF_FWD(4);
+ break;
+ case OFPAT_VENDOR:
+ of10_vendor_action_print(ndo, cp, alen - 4);
+ OF_FWD(alen - 4);
+ break;
+ case OFPAT_STRIP_VLAN:
+ /* pad */
+ /* Sometimes the last field, check bounds. */
+ OF_CHK_FWD(4);
+ break;
+ } /* switch */
+ } /* while */
+ return;
+
+invalid: /* skip the rest of actions */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* [OF10] Section 5.3.1 */
+static void
+of10_features_reply_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ /* datapath_id */
+ ND_PRINT("\n\t dpid 0x%016" PRIx64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* n_buffers */
+ ND_PRINT(", n_buffers %u", GET_BE_U_4(cp));
+ OF_FWD(4);
+ /* n_tables */
+ ND_PRINT(", n_tables %u", GET_U_1(cp));
+ OF_FWD(1);
+ /* pad */
+ OF_FWD(3);
+ /* capabilities */
+ ND_PRINT("\n\t capabilities 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofp_capabilities_bm, GET_BE_U_4(cp), OFPCAP_U);
+ OF_FWD(4);
+ /* actions */
+ ND_PRINT("\n\t actions 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofpat_bm, GET_BE_U_4(cp), OFPAT_U);
+ OF_FWD(4);
+ /* ports */
+ while (len) {
+ if (len < OF_PHY_PORT_FIXLEN)
+ goto invalid;
+ of10_phy_port_print(ndo, cp);
+ OF_FWD(OF_PHY_PORT_FIXLEN);
+ }
+ return;
+
+invalid: /* skip the undersized trailing data */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* [OF10] Section 5.3.2 */
+static void
+of10_switch_config_msg_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* flags */
+ ND_PRINT("\n\t flags %s",
+ tok2str(ofp_config_str, "invalid (0x%04x)", GET_BE_U_2(cp)));
+ cp += 2;
+ /* miss_send_len */
+ ND_PRINT(", miss_send_len %u", GET_BE_U_2(cp));
+}
+
+/* [OF10] Section 5.3.3 */
+static void
+of10_flow_mod_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint16_t command;
+
+ /* match */
+ of10_match_print(ndo, "\n\t ", cp);
+ OF_FWD(OF_MATCH_FIXLEN);
+ /* cookie */
+ ND_PRINT("\n\t cookie 0x%016" PRIx64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* command */
+ command = GET_BE_U_2(cp);
+ ND_PRINT(", command %s", tok2str(ofpfc_str, "invalid (0x%04x)", command));
+ OF_FWD(2);
+ /* idle_timeout */
+ if (GET_BE_U_2(cp))
+ ND_PRINT(", idle_timeout %u", GET_BE_U_2(cp));
+ OF_FWD(2);
+ /* hard_timeout */
+ if (GET_BE_U_2(cp))
+ ND_PRINT(", hard_timeout %u", GET_BE_U_2(cp));
+ OF_FWD(2);
+ /* priority */
+ if (GET_BE_U_2(cp))
+ ND_PRINT(", priority %u", GET_BE_U_2(cp));
+ OF_FWD(2);
+ /* buffer_id */
+ if (command == OFPFC_ADD || command == OFPFC_MODIFY ||
+ command == OFPFC_MODIFY_STRICT)
+ ND_PRINT(", buffer_id %s",
+ tok2str(bufferid_str, "0x%08x", GET_BE_U_4(cp)));
+ OF_FWD(4);
+ /* out_port */
+ if (command == OFPFC_DELETE || command == OFPFC_DELETE_STRICT)
+ ND_PRINT(", out_port %s",
+ tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ OF_FWD(2);
+ /* flags */
+ ND_PRINT(", flags 0x%04x", GET_BE_U_2(cp));
+ of_bitmap_print(ndo, ofpff_bm, GET_BE_U_2(cp), OFPFF_U);
+ OF_FWD(2);
+ /* actions */
+ of10_actions_print(ndo, "\n\t ", cp, len);
+}
+
+/* ibid */
+static void
+of10_port_mod_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* port_no */
+ ND_PRINT("\n\t port_no %s", tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ cp += 2;
+ /* hw_addr */
+ ND_PRINT(", hw_addr %s", GET_ETHERADDR_STRING(cp));
+ cp += MAC_ADDR_LEN;
+ /* config */
+ ND_PRINT("\n\t config 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppc_bm, GET_BE_U_4(cp), OFPPC_U);
+ cp += 4;
+ /* mask */
+ ND_PRINT("\n\t mask 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppc_bm, GET_BE_U_4(cp), OFPPC_U);
+ cp += 4;
+ /* advertise */
+ ND_PRINT("\n\t advertise 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppf_bm, GET_BE_U_4(cp), OFPPF_U);
+ cp += 4;
+ /* pad */
+ /* Always the last field, check bounds. */
+ ND_TCHECK_4(cp);
+}
+
+/* [OF10] Section 5.3.4 */
+static void
+of10_queue_get_config_request_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* port */
+ ND_PRINT("\n\t port %s", tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ cp += 2;
+ /* pad */
+ /* Always the last field, check bounds. */
+ ND_TCHECK_2(cp);
+}
+
+/* ibid */
+static void
+of10_queue_get_config_reply_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ /* port */
+ ND_PRINT("\n\t port %s", tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ OF_FWD(2);
+ /* pad */
+ /* Sometimes the last field, check bounds. */
+ OF_CHK_FWD(6);
+ /* queues */
+ of10_queues_print(ndo, cp, len);
+}
+
+/* [OF10] Section 5.3.5 */
+static void
+of10_stats_request_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint16_t type;
+
+ /* type */
+ type = GET_BE_U_2(cp);
+ OF_FWD(2);
+ ND_PRINT("\n\t type %s", tok2str(ofpst_str, "invalid (0x%04x)", type));
+ /* flags */
+ ND_PRINT(", flags 0x%04x", GET_BE_U_2(cp));
+ if (GET_BE_U_2(cp))
+ ND_PRINT(" (bogus)");
+ OF_FWD(2);
+ /* type-specific body of one of fixed lengths */
+ switch(type) {
+ case OFPST_DESC:
+ case OFPST_TABLE:
+ if (len)
+ goto invalid;
+ return;
+ case OFPST_FLOW:
+ case OFPST_AGGREGATE:
+ if (len != OF_FLOW_STATS_REQUEST_FIXLEN)
+ goto invalid;
+ /* match */
+ of10_match_print(ndo, "\n\t ", cp);
+ OF_FWD(OF_MATCH_FIXLEN);
+ /* table_id */
+ ND_PRINT("\n\t table_id %s",
+ tok2str(tableid_str, "%u", GET_U_1(cp)));
+ OF_FWD(1);
+ /* pad */
+ OF_FWD(1);
+ /* out_port */
+ ND_PRINT(", out_port %s",
+ tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ return;
+ case OFPST_PORT:
+ if (len != OF_PORT_STATS_REQUEST_FIXLEN)
+ goto invalid;
+ /* port_no */
+ ND_PRINT("\n\t port_no %s",
+ tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ OF_FWD(2);
+ /* pad */
+ /* Always the last field, check bounds. */
+ OF_CHK_FWD(6);
+ return;
+ case OFPST_QUEUE:
+ if (len != OF_QUEUE_STATS_REQUEST_FIXLEN)
+ goto invalid;
+ /* port_no */
+ ND_PRINT("\n\t port_no %s",
+ tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ OF_FWD(2);
+ /* pad */
+ OF_FWD(2);
+ /* queue_id */
+ ND_PRINT(", queue_id %s",
+ tok2str(ofpq_str, "%u", GET_BE_U_4(cp)));
+ return;
+ case OFPST_VENDOR:
+ of10_vendor_data_print(ndo, cp, len);
+ return;
+ }
+ return;
+
+invalid: /* skip the message body */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* ibid */
+static void
+of10_desc_stats_reply_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ if (len != OF_DESC_STATS_REPLY_FIXLEN)
+ goto invalid;
+ /* mfr_desc */
+ ND_PRINT("\n\t mfr_desc '");
+ nd_printjnp(ndo, cp, DESC_STR_LEN);
+ ND_PRINT("'");
+ OF_FWD(DESC_STR_LEN);
+ /* hw_desc */
+ ND_PRINT("\n\t hw_desc '");
+ nd_printjnp(ndo, cp, DESC_STR_LEN);
+ ND_PRINT("'");
+ OF_FWD(DESC_STR_LEN);
+ /* sw_desc */
+ ND_PRINT("\n\t sw_desc '");
+ nd_printjnp(ndo, cp, DESC_STR_LEN);
+ ND_PRINT("'");
+ OF_FWD(DESC_STR_LEN);
+ /* serial_num */
+ ND_PRINT("\n\t serial_num '");
+ nd_printjnp(ndo, cp, SERIAL_NUM_LEN);
+ ND_PRINT("'");
+ OF_FWD(SERIAL_NUM_LEN);
+ /* dp_desc */
+ ND_PRINT("\n\t dp_desc '");
+ nd_printjnp(ndo, cp, DESC_STR_LEN);
+ ND_PRINT("'");
+ return;
+
+invalid: /* skip the message body */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* ibid */
+static void
+of10_flow_stats_reply_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ while (len) {
+ uint16_t entry_len;
+
+ if (len < OF_FLOW_STATS_REPLY_MINLEN)
+ goto invalid;
+ /* length */
+ entry_len = GET_BE_U_2(cp);
+ ND_PRINT("\n\t length %u", entry_len);
+ if (entry_len < OF_FLOW_STATS_REPLY_MINLEN || entry_len > len)
+ goto invalid;
+ OF_FWD(2);
+ /* table_id */
+ ND_PRINT(", table_id %s",
+ tok2str(tableid_str, "%u", GET_U_1(cp)));
+ OF_FWD(1);
+ /* pad */
+ OF_FWD(1);
+ /* match */
+ of10_match_print(ndo, "\n\t ", cp);
+ OF_FWD(OF_MATCH_FIXLEN);
+ /* duration_sec */
+ ND_PRINT("\n\t duration_sec %u", GET_BE_U_4(cp));
+ OF_FWD(4);
+ /* duration_nsec */
+ ND_PRINT(", duration_nsec %u", GET_BE_U_4(cp));
+ OF_FWD(4);
+ /* priority */
+ ND_PRINT(", priority %u", GET_BE_U_2(cp));
+ OF_FWD(2);
+ /* idle_timeout */
+ ND_PRINT(", idle_timeout %u", GET_BE_U_2(cp));
+ OF_FWD(2);
+ /* hard_timeout */
+ ND_PRINT(", hard_timeout %u", GET_BE_U_2(cp));
+ OF_FWD(2);
+ /* pad2 */
+ OF_FWD(6);
+ /* cookie */
+ ND_PRINT(", cookie 0x%016" PRIx64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* packet_count */
+ ND_PRINT(", packet_count %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* byte_count */
+ ND_PRINT(", byte_count %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* actions */
+ of10_actions_print(ndo, "\n\t ", cp, entry_len - OF_FLOW_STATS_REPLY_MINLEN);
+ OF_FWD(entry_len - OF_FLOW_STATS_REPLY_MINLEN);
+ } /* while */
+ return;
+
+invalid: /* skip the rest of flow statistics entries */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* ibid */
+static void
+of10_aggregate_stats_reply_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ if (len != OF_AGGREGATE_STATS_REPLY_FIXLEN)
+ goto invalid;
+ /* packet_count */
+ ND_PRINT("\n\t packet_count %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* byte_count */
+ ND_PRINT(", byte_count %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* flow_count */
+ ND_PRINT(", flow_count %u", GET_BE_U_4(cp));
+ OF_FWD(4);
+ /* pad */
+ /* Always the last field, check bounds. */
+ ND_TCHECK_4(cp);
+ return;
+
+invalid: /* skip the message body */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* ibid */
+static void
+of10_table_stats_reply_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ while (len) {
+ if (len < OF_TABLE_STATS_REPLY_FIXLEN)
+ goto invalid;
+ /* table_id */
+ ND_PRINT("\n\t table_id %s",
+ tok2str(tableid_str, "%u", GET_U_1(cp)));
+ OF_FWD(1);
+ /* pad */
+ OF_FWD(3);
+ /* name */
+ ND_PRINT(", name '");
+ nd_printjnp(ndo, cp, OFP_MAX_TABLE_NAME_LEN);
+ ND_PRINT("'");
+ OF_FWD(OFP_MAX_TABLE_NAME_LEN);
+ /* wildcards */
+ ND_PRINT("\n\t wildcards 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofpfw_bm, GET_BE_U_4(cp), OFPFW_U);
+ OF_FWD(4);
+ /* max_entries */
+ ND_PRINT("\n\t max_entries %u", GET_BE_U_4(cp));
+ OF_FWD(4);
+ /* active_count */
+ ND_PRINT(", active_count %u", GET_BE_U_4(cp));
+ OF_FWD(4);
+ /* lookup_count */
+ ND_PRINT(", lookup_count %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* matched_count */
+ ND_PRINT(", matched_count %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ } /* while */
+ return;
+
+invalid: /* skip the undersized trailing data */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* ibid */
+static void
+of10_port_stats_reply_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ while (len) {
+ if (len < OF_PORT_STATS_REPLY_FIXLEN)
+ goto invalid;
+ /* port_no */
+ ND_PRINT("\n\t port_no %s",
+ tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ OF_FWD(2);
+ if (ndo->ndo_vflag < 2) {
+ OF_CHK_FWD(OF_PORT_STATS_REPLY_FIXLEN - 2);
+ continue;
+ }
+ /* pad */
+ OF_FWD(6);
+ /* rx_packets */
+ ND_PRINT(", rx_packets %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* tx_packets */
+ ND_PRINT(", tx_packets %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* rx_bytes */
+ ND_PRINT(", rx_bytes %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* tx_bytes */
+ ND_PRINT(", tx_bytes %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* rx_dropped */
+ ND_PRINT(", rx_dropped %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* tx_dropped */
+ ND_PRINT(", tx_dropped %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* rx_errors */
+ ND_PRINT(", rx_errors %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* tx_errors */
+ ND_PRINT(", tx_errors %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* rx_frame_err */
+ ND_PRINT(", rx_frame_err %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* rx_over_err */
+ ND_PRINT(", rx_over_err %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* rx_crc_err */
+ ND_PRINT(", rx_crc_err %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* collisions */
+ ND_PRINT(", collisions %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ } /* while */
+ return;
+
+invalid: /* skip the undersized trailing data */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* ibid */
+static void
+of10_queue_stats_reply_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ while (len) {
+ if (len < OF_QUEUE_STATS_REPLY_FIXLEN)
+ goto invalid;
+ /* port_no */
+ ND_PRINT("\n\t port_no %s",
+ tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ OF_FWD(2);
+ /* pad */
+ OF_FWD(2);
+ /* queue_id */
+ ND_PRINT(", queue_id %u", GET_BE_U_4(cp));
+ OF_FWD(4);
+ /* tx_bytes */
+ ND_PRINT(", tx_bytes %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* tx_packets */
+ ND_PRINT(", tx_packets %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ /* tx_errors */
+ ND_PRINT(", tx_errors %" PRIu64, GET_BE_U_8(cp));
+ OF_FWD(8);
+ } /* while */
+ return;
+
+invalid: /* skip the undersized trailing data */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* ibid */
+static void
+of10_stats_reply_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint16_t type;
+
+ /* type */
+ type = GET_BE_U_2(cp);
+ ND_PRINT("\n\t type %s", tok2str(ofpst_str, "invalid (0x%04x)", type));
+ OF_FWD(2);
+ /* flags */
+ ND_PRINT(", flags 0x%04x", GET_BE_U_2(cp));
+ of_bitmap_print(ndo, ofpsf_reply_bm, GET_BE_U_2(cp), OFPSF_REPLY_U);
+ OF_FWD(2);
+
+ if (ndo->ndo_vflag > 0) {
+ void (*decoder)(netdissect_options *, const u_char *, u_int) =
+ type == OFPST_DESC ? of10_desc_stats_reply_print :
+ type == OFPST_FLOW ? of10_flow_stats_reply_print :
+ type == OFPST_AGGREGATE ? of10_aggregate_stats_reply_print :
+ type == OFPST_TABLE ? of10_table_stats_reply_print :
+ type == OFPST_PORT ? of10_port_stats_reply_print :
+ type == OFPST_QUEUE ? of10_queue_stats_reply_print :
+ type == OFPST_VENDOR ? of10_vendor_data_print :
+ NULL;
+ if (decoder != NULL) {
+ decoder(ndo, cp, len);
+ return;
+ }
+ }
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* [OF10] Section 5.3.6 */
+static void
+of10_packet_out_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint16_t actions_len;
+
+ /* buffer_id */
+ ND_PRINT("\n\t buffer_id 0x%08x", GET_BE_U_4(cp));
+ OF_FWD(4);
+ /* in_port */
+ ND_PRINT(", in_port %s", tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ OF_FWD(2);
+ /* actions_len */
+ actions_len = GET_BE_U_2(cp);
+ OF_FWD(2);
+ if (actions_len > len)
+ goto invalid;
+ /* actions */
+ of10_actions_print(ndo, "\n\t ", cp, actions_len);
+ OF_FWD(actions_len);
+ /* data */
+ of10_packet_data_print(ndo, cp, len);
+ return;
+
+invalid: /* skip the rest of the message body */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* [OF10] Section 5.4.1 */
+static void
+of10_packet_in_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ /* buffer_id */
+ ND_PRINT("\n\t buffer_id %s",
+ tok2str(bufferid_str, "0x%08x", GET_BE_U_4(cp)));
+ OF_FWD(4);
+ /* total_len */
+ ND_PRINT(", total_len %u", GET_BE_U_2(cp));
+ OF_FWD(2);
+ /* in_port */
+ ND_PRINT(", in_port %s", tok2str(ofpp_str, "%u", GET_BE_U_2(cp)));
+ OF_FWD(2);
+ /* reason */
+ ND_PRINT(", reason %s",
+ tok2str(ofpr_str, "invalid (0x%02x)", GET_U_1(cp)));
+ OF_FWD(1);
+ /* pad */
+ /* Sometimes the last field, check bounds. */
+ OF_CHK_FWD(1);
+ /* data */
+ of10_packet_data_print(ndo, cp, len);
+}
+
+/* [OF10] Section 5.4.2 */
+static void
+of10_flow_removed_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* match */
+ of10_match_print(ndo, "\n\t ", cp);
+ cp += OF_MATCH_FIXLEN;
+ /* cookie */
+ ND_PRINT("\n\t cookie 0x%016" PRIx64, GET_BE_U_8(cp));
+ cp += 8;
+ /* priority */
+ if (GET_BE_U_2(cp))
+ ND_PRINT(", priority %u", GET_BE_U_2(cp));
+ cp += 2;
+ /* reason */
+ ND_PRINT(", reason %s",
+ tok2str(ofprr_str, "unknown (0x%02x)", GET_U_1(cp)));
+ cp += 1;
+ /* pad */
+ cp += 1;
+ /* duration_sec */
+ ND_PRINT(", duration_sec %u", GET_BE_U_4(cp));
+ cp += 4;
+ /* duration_nsec */
+ ND_PRINT(", duration_nsec %u", GET_BE_U_4(cp));
+ cp += 4;
+ /* idle_timeout */
+ if (GET_BE_U_2(cp))
+ ND_PRINT(", idle_timeout %u", GET_BE_U_2(cp));
+ cp += 2;
+ /* pad2 */
+ cp += 2;
+ /* packet_count */
+ ND_PRINT(", packet_count %" PRIu64, GET_BE_U_8(cp));
+ cp += 8;
+ /* byte_count */
+ ND_PRINT(", byte_count %" PRIu64, GET_BE_U_8(cp));
+}
+
+/* [OF10] Section 5.4.3 */
+static void
+of10_port_status_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* reason */
+ ND_PRINT("\n\t reason %s",
+ tok2str(ofppr_str, "invalid (0x%02x)", GET_U_1(cp)));
+ cp += 1;
+ /* pad */
+ /* No need to check bounds, more data follows. */
+ cp += 7;
+ /* desc */
+ of10_phy_port_print(ndo, cp);
+}
+
+/* [OF10] Section 5.4.4 */
+static void
+of10_error_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint16_t type, code;
+ const struct tok *code_str;
+
+ /* type */
+ type = GET_BE_U_2(cp);
+ OF_FWD(2);
+ ND_PRINT("\n\t type %s", tok2str(ofpet_str, "invalid (0x%04x)", type));
+ /* code */
+ code = GET_BE_U_2(cp);
+ OF_FWD(2);
+ code_str = uint2tokary(of10_ofpet2tokary, type);
+ if (code_str != NULL)
+ ND_PRINT(", code %s",
+ tok2str(code_str, "invalid (0x%04x)", code));
+ else
+ ND_PRINT(", code invalid (0x%04x)", code);
+ /* data */
+ of_data_print(ndo, cp, len);
+}
+
+static const struct of_msgtypeinfo of10_msgtypeinfo[OFPT_MAX + 1] = {
+ /*
+ * [OF10] Section 5.5.1
+ * Variable-size data.
+ */
+ {
+ "HELLO", of_data_print,
+ REQ_MINLEN, 0
+ },
+ /*
+ * [OF10] Section 5.4.4
+ * A fixed-size message body and variable-size data.
+ */
+ {
+ "ERROR", of10_error_print,
+ REQ_MINLEN, OF_ERROR_MSG_MINLEN
+ },
+ /*
+ * [OF10] Section 5.5.2
+ * Variable-size data.
+ */
+ {
+ "ECHO_REQUEST", of_data_print,
+ REQ_MINLEN, 0
+ },
+ /*
+ * [OF10] Section 5.5.3
+ * Variable-size data.
+ */
+ {
+ "ECHO_REPLY", of_data_print,
+ REQ_MINLEN, 0
+ },
+ /*
+ * [OF10] Section 5.5.4
+ * A fixed-size message body and variable-size data.
+ */
+ {
+ "VENDOR", of10_vendor_message_print,
+ REQ_MINLEN, OF_VENDOR_MINLEN
+ },
+ /*
+ * [OF10] Section 5.3.1
+ * No message body.
+ */
+ {
+ "FEATURES_REQUEST", NULL,
+ REQ_FIXLEN, 0
+ },
+ /*
+ * [OF10] Section 5.3.1
+ * A fixed-size message body and n * fixed-size data units.
+ */
+ {
+ "FEATURES_REPLY", of10_features_reply_print,
+ REQ_MINLEN, OF_FEATURES_REPLY_MINLEN
+ },
+ /*
+ * [OF10] Section 5.3.2
+ * No message body.
+ */
+ {
+ "GET_CONFIG_REQUEST", NULL,
+ REQ_FIXLEN, 0
+ },
+ /*
+ * [OF10] Section 5.3.2
+ * A fixed-size message body.
+ */
+ {
+ "GET_CONFIG_REPLY", of10_switch_config_msg_print,
+ REQ_FIXLEN, OF_SWITCH_CONFIG_FIXLEN
+ },
+ /*
+ * [OF10] Section 5.3.2
+ * A fixed-size message body.
+ */
+ {
+ "SET_CONFIG", of10_switch_config_msg_print,
+ REQ_FIXLEN, OF_SWITCH_CONFIG_FIXLEN
+ },
+ /*
+ * [OF10] Section 5.4.1
+ * A fixed-size message body and variable-size data.
+ * (The 2 mock octets count in OF_PACKET_IN_MINLEN only.)
+ */
+ {
+ "PACKET_IN", of10_packet_in_print,
+ REQ_MINLEN, OF_PACKET_IN_MINLEN - 2
+ },
+ /*
+ * [OF10] Section 5.4.2
+ * A fixed-size message body.
+ */
+ {
+ "FLOW_REMOVED", of10_flow_removed_print,
+ REQ_FIXLEN, OF_FLOW_REMOVED_FIXLEN
+ },
+ /*
+ * [OF10] Section 5.4.3
+ * A fixed-size message body.
+ */
+ {
+ "PORT_STATUS", of10_port_status_print,
+ REQ_FIXLEN, OF_PORT_STATUS_FIXLEN
+ },
+ /*
+ * [OF10] Section 5.3.6
+ * A fixed-size message body, n * variable-size data units and
+ * variable-size data.
+ */
+ {
+ "PACKET_OUT", of10_packet_out_print,
+ REQ_MINLEN, OF_PACKET_OUT_MINLEN
+ },
+ /*
+ * [OF10] Section 5.3.3
+ * A fixed-size message body and n * variable-size data units.
+ */
+ {
+ "FLOW_MOD", of10_flow_mod_print,
+ REQ_MINLEN, OF_FLOW_MOD_MINLEN
+ },
+ /*
+ * [OF10] Section 5.3.3
+ * A fixed-size message body.
+ */
+ {
+ "PORT_MOD", of10_port_mod_print,
+ REQ_FIXLEN, OF_PORT_MOD_FIXLEN
+ },
+ /*
+ * [OF10] Section 5.3.5
+ * A fixed-size message body and possibly more data of varying size
+ * and structure.
+ */
+ {
+ "STATS_REQUEST", of10_stats_request_print,
+ REQ_MINLEN, OF_STATS_REQUEST_MINLEN
+ },
+ /*
+ * [OF10] Section 5.3.5
+ * A fixed-size message body and possibly more data of varying size
+ * and structure.
+ */
+ {
+ "STATS_REPLY", of10_stats_reply_print,
+ REQ_MINLEN, OF_STATS_REPLY_MINLEN
+ },
+ /*
+ * [OF10] Section 5.3.7
+ * No message body.
+ */
+ {
+ "BARRIER_REQUEST", NULL,
+ REQ_FIXLEN, 0
+ },
+ /*
+ * [OF10] Section 5.3.7
+ * No message body.
+ */
+ {
+ "BARRIER_REPLY", NULL,
+ REQ_FIXLEN, 0
+ },
+ /*
+ * [OF10] Section 5.3.4
+ * A fixed-size message body.
+ */
+ {
+ "QUEUE_GET_CONFIG_REQUEST", of10_queue_get_config_request_print,
+ REQ_FIXLEN, OF_QUEUE_GET_CONFIG_REQUEST_FIXLEN
+ },
+ /*
+ * [OF10] Section 5.3.4
+ * A fixed-size message body and n * variable-size data units.
+ */
+ {
+ "QUEUE_GET_CONFIG_REPLY", of10_queue_get_config_reply_print,
+ REQ_MINLEN, OF_QUEUE_GET_CONFIG_REPLY_MINLEN
+ },
+};
+
+const struct of_msgtypeinfo *
+of10_identify_msgtype(const uint8_t type)
+{
+ return type <= OFPT_MAX ? &of10_msgtypeinfo[type] : NULL;
+}
diff --git a/print-openflow-1.3.c b/print-openflow-1.3.c
new file mode 100644
index 0000000..9e76ba1
--- /dev/null
+++ b/print-openflow-1.3.c
@@ -0,0 +1,1209 @@
+/*
+ * This module implements decoding of OpenFlow protocol version 1.3 (wire
+ * protocol 0x04). It is based on the implementation conventions explained in
+ * print-openflow-1.0.c.
+ *
+ * [OF13] https://www.opennetworking.org/wp-content/uploads/2014/10/openflow-switch-v1.3.5.pdf
+ *
+ * Copyright (c) 2020 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: OpenFlow protocol version 1.3 printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "openflow.h"
+
+#define OFPT_HELLO 0U
+#define OFPT_ERROR 1U
+#define OFPT_ECHO_REQUEST 2U
+#define OFPT_ECHO_REPLY 3U
+#define OFPT_EXPERIMENTER 4U
+#define OFPT_FEATURES_REQUEST 5U
+#define OFPT_FEATURES_REPLY 6U
+#define OFPT_GET_CONFIG_REQUEST 7U
+#define OFPT_GET_CONFIG_REPLY 8U
+#define OFPT_SET_CONFIG 9U
+#define OFPT_PACKET_IN 10U
+#define OFPT_FLOW_REMOVED 11U
+#define OFPT_PORT_STATUS 12U
+#define OFPT_PACKET_OUT 13U
+#define OFPT_FLOW_MOD 14U
+#define OFPT_GROUP_MOD 15U
+#define OFPT_PORT_MOD 16U
+#define OFPT_TABLE_MOD 17U
+#define OFPT_MULTIPART_REQUEST 18U
+#define OFPT_MULTIPART_REPLY 19U
+#define OFPT_BARRIER_REQUEST 20U
+#define OFPT_BARRIER_REPLY 21U
+#define OFPT_QUEUE_GET_CONFIG_REQUEST 22U
+#define OFPT_QUEUE_GET_CONFIG_REPLY 23U
+#define OFPT_ROLE_REQUEST 24U
+#define OFPT_ROLE_REPLY 25U
+#define OFPT_GET_ASYNC_REQUEST 26U
+#define OFPT_GET_ASYNC_REPLY 27U
+#define OFPT_SET_ASYNC 28U
+#define OFPT_METER_MOD 29U
+#define OFPT_MAX OFPT_METER_MOD
+
+#define OFPC_FLOW_STATS (1U <<0)
+#define OFPC_TABLE_STATS (1U <<1)
+#define OFPC_PORT_STATS (1U <<2)
+#define OFPC_GROUP_STATS (1U <<3)
+#define OFPC_IP_REASM (1U <<5)
+#define OFPC_QUEUE_STATS (1U <<6)
+#define OFPC_PORT_BLOCKED (1U <<8)
+static const struct tok ofp_capabilities_bm[] = {
+ { OFPC_FLOW_STATS, "FLOW_STATS" },
+ { OFPC_TABLE_STATS, "TABLE_STATS" },
+ { OFPC_PORT_STATS, "PORT_STATS" },
+ { OFPC_GROUP_STATS, "GROUP_STATS" },
+ { OFPC_IP_REASM, "IP_REASM" },
+ { OFPC_QUEUE_STATS, "QUEUE_STATS" },
+ { OFPC_PORT_BLOCKED, "PORT_BLOCKED" },
+ { 0, NULL }
+};
+#define OFPCAP_U (~(OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
+ OFPC_GROUP_STATS | OFPC_IP_REASM | OFPC_QUEUE_STATS | \
+ OFPC_PORT_BLOCKED))
+
+#define OFPC_FRAG_NORMAL 0U
+#define OFPC_FRAG_DROP 1U
+#define OFPC_FRAG_REASM 2U
+static const struct tok ofp_config_str[] = {
+ { OFPC_FRAG_NORMAL, "FRAG_NORMAL" },
+ { OFPC_FRAG_DROP, "FRAG_DROP" },
+ { OFPC_FRAG_REASM, "FRAG_REASM" },
+ { 0, NULL }
+};
+
+#define OFPTT_MAX 0xfeU
+#define OFPTT_ALL 0xffU
+static const struct tok ofptt_str[] = {
+ { OFPTT_MAX, "MAX" },
+ { OFPTT_ALL, "ALL" },
+ { 0, NULL },
+};
+
+#define OFPCML_MAX 0xffe5U
+#define OFPCML_NO_BUFFER 0xffffU
+static const struct tok ofpcml_str[] = {
+ { OFPCML_MAX, "MAX" },
+ { OFPCML_NO_BUFFER, "NO_BUFFER" },
+ { 0, NULL }
+};
+
+#define OFPPC_PORT_DOWN (1U <<0)
+#define OFPPC_NO_RECV (1U <<2)
+#define OFPPC_NO_FWD (1U <<5)
+#define OFPPC_NO_PACKET_IN (1U <<6)
+static const struct tok ofppc_bm[] = {
+ { OFPPC_PORT_DOWN, "PORT_DOWN" },
+ { OFPPC_NO_RECV, "NO_RECV" },
+ { OFPPC_NO_FWD, "NO_FWD" },
+ { OFPPC_NO_PACKET_IN, "NO_PACKET_IN" },
+ { 0, NULL }
+};
+#define OFPPC_U (~(OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | \
+ OFPPC_NO_PACKET_IN))
+
+#define OFPPS_LINK_DOWN (1U << 0)
+#define OFPPS_BLOCKED (1U << 1)
+#define OFPPS_LIVE (1U << 2)
+static const struct tok ofpps_bm[] = {
+ { OFPPS_LINK_DOWN, "LINK_DOWN" },
+ { OFPPS_BLOCKED, "BLOCKED" },
+ { OFPPS_LIVE, "LIVE" },
+ { 0, NULL }
+};
+#define OFPPS_U (~(OFPPS_LINK_DOWN | OFPPS_BLOCKED | OFPPS_LIVE))
+
+#define OFPPF_10MB_HD (1U << 0)
+#define OFPPF_10MB_FD (1U << 1)
+#define OFPPF_100MB_HD (1U << 2)
+#define OFPPF_100MB_FD (1U << 3)
+#define OFPPF_1GB_HD (1U << 4)
+#define OFPPF_1GB_FD (1U << 5)
+#define OFPPF_10GB_FD (1U << 6)
+#define OFPPF_40GB_FD (1U << 7)
+#define OFPPF_100GB_FD (1U << 8)
+#define OFPPF_1TB_FD (1U << 9)
+#define OFPPF_OTHER (1U << 10)
+#define OFPPF_COPPER (1U << 11)
+#define OFPPF_FIBER (1U << 12)
+#define OFPPF_AUTONEG (1U << 13)
+#define OFPPF_PAUSE (1U << 14)
+#define OFPPF_PAUSE_ASYM (1U << 15)
+static const struct tok ofppf_bm[] = {
+ { OFPPF_10MB_HD, "10MB_HD" },
+ { OFPPF_10MB_FD, "10MB_FD" },
+ { OFPPF_100MB_HD, "100MB_HD" },
+ { OFPPF_100MB_FD, "100MB_FD" },
+ { OFPPF_1GB_HD, "1GB_HD" },
+ { OFPPF_1GB_FD, "1GB_FD" },
+ { OFPPF_10GB_FD, "10GB_FD" },
+ { OFPPF_40GB_FD, "40GB_FD" },
+ { OFPPF_100GB_FD, "100GB_FD" },
+ { OFPPF_1TB_FD, "1TB_FD" },
+ { OFPPF_OTHER, "OTHER" },
+ { OFPPF_COPPER, "COPPER" },
+ { OFPPF_FIBER, "FIBER" },
+ { OFPPF_AUTONEG, "AUTONEG" },
+ { OFPPF_PAUSE, "PAUSE" },
+ { OFPPF_PAUSE_ASYM, "PAUSE_ASYM" },
+ { 0, NULL }
+};
+#define OFPPF_U (~(OFPPF_10MB_HD | OFPPF_10MB_FD | OFPPF_100MB_HD | \
+ OFPPF_100MB_FD | OFPPF_1GB_HD | OFPPF_1GB_FD | \
+ OFPPF_10GB_FD | OFPPF_40GB_FD | OFPPF_100GB_FD | \
+ OFPPF_1TB_FD | OFPPF_OTHER | OFPPF_COPPER | OFPPF_FIBER | \
+ OFPPF_AUTONEG | OFPPF_PAUSE | OFPPF_PAUSE_ASYM))
+
+#define OFPHET_VERSIONBITMAP 1U
+static const struct tok ofphet_str[] = {
+ { OFPHET_VERSIONBITMAP, "VERSIONBITMAP" },
+ { 0, NULL }
+};
+
+#define OFPP_MAX 0xffffff00U
+#define OFPP_IN_PORT 0xfffffff8U
+#define OFPP_TABLE 0xfffffff9U
+#define OFPP_NORMAL 0xfffffffaU
+#define OFPP_FLOOD 0xfffffffbU
+#define OFPP_ALL 0xfffffffcU
+#define OFPP_CONTROLLER 0xfffffffdU
+#define OFPP_LOCAL 0xfffffffeU
+#define OFPP_ANY 0xffffffffU
+static const struct tok ofpp_str[] = {
+ { OFPP_MAX, "MAX" },
+ { OFPP_IN_PORT, "IN_PORT" },
+ { OFPP_TABLE, "TABLE" },
+ { OFPP_NORMAL, "NORMAL" },
+ { OFPP_FLOOD, "FLOOD" },
+ { OFPP_ALL, "ALL" },
+ { OFPP_CONTROLLER, "CONTROLLER" },
+ { OFPP_LOCAL, "LOCAL" },
+ { OFPP_ANY, "ANY" },
+ { 0, NULL }
+};
+
+#define OFPCR_ROLE_NOCHANGE 0U
+#define OFPCR_ROLE_EQUAL 1U
+#define OFPCR_ROLE_MASTER 2U
+#define OFPCR_ROLE_SLAVE 3U
+static const struct tok ofpcr_str[] = {
+ { OFPCR_ROLE_NOCHANGE, "NOCHANGE" },
+ { OFPCR_ROLE_EQUAL, "EQUAL" },
+ { OFPCR_ROLE_MASTER, "MASTER" },
+ { OFPCR_ROLE_SLAVE, "SLAVE" },
+ { 0, NULL }
+};
+
+#define OF_BIT_VER_1_0 (1U << (OF_VER_1_0 - 1))
+#define OF_BIT_VER_1_1 (1U << (OF_VER_1_1 - 1))
+#define OF_BIT_VER_1_2 (1U << (OF_VER_1_2 - 1))
+#define OF_BIT_VER_1_3 (1U << (OF_VER_1_3 - 1))
+#define OF_BIT_VER_1_4 (1U << (OF_VER_1_4 - 1))
+#define OF_BIT_VER_1_5 (1U << (OF_VER_1_5 - 1))
+static const struct tok ofverbm_str[] = {
+ { OF_BIT_VER_1_0, "1.0" },
+ { OF_BIT_VER_1_1, "1.1" },
+ { OF_BIT_VER_1_2, "1.2" },
+ { OF_BIT_VER_1_3, "1.3" },
+ { OF_BIT_VER_1_4, "1.4" },
+ { OF_BIT_VER_1_5, "1.5" },
+ { 0, NULL }
+};
+#define OF_BIT_VER_U (~(OF_BIT_VER_1_0 | OF_BIT_VER_1_1 | OF_BIT_VER_1_2 | \
+ OF_BIT_VER_1_3 | OF_BIT_VER_1_4 | OF_BIT_VER_1_5))
+
+#define OFPR_NO_MATCH 0U
+#define OFPR_ACTION 1U
+#define OFPR_INVALID_TTL 2U
+#if 0 /* for OFPT_PACKET_IN */
+static const struct tok ofpr_str[] = {
+ { OFPR_NO_MATCH, "NO_MATCH" },
+ { OFPR_ACTION, "ACTION" },
+ { OFPR_INVALID_TTL, "OFPR_INVALID_TTL" },
+ { 0, NULL }
+};
+#endif
+
+#define ASYNC_OFPR_NO_MATCH (1U << OFPR_NO_MATCH )
+#define ASYNC_OFPR_ACTION (1U << OFPR_ACTION )
+#define ASYNC_OFPR_INVALID_TTL (1U << OFPR_INVALID_TTL)
+static const struct tok async_ofpr_bm[] = {
+ { ASYNC_OFPR_NO_MATCH, "NO_MATCH" },
+ { ASYNC_OFPR_ACTION, "ACTION" },
+ { ASYNC_OFPR_INVALID_TTL, "INVALID_TTL" },
+ { 0, NULL }
+};
+#define ASYNC_OFPR_U (~(ASYNC_OFPR_NO_MATCH | ASYNC_OFPR_ACTION | \
+ ASYNC_OFPR_INVALID_TTL))
+
+#define OFPPR_ADD 0U
+#define OFPPR_DELETE 1U
+#define OFPPR_MODIFY 2U
+static const struct tok ofppr_str[] = {
+ { OFPPR_ADD, "ADD" },
+ { OFPPR_DELETE, "DELETE" },
+ { OFPPR_MODIFY, "MODIFY" },
+ { 0, NULL }
+};
+
+#define ASYNC_OFPPR_ADD (1U << OFPPR_ADD )
+#define ASYNC_OFPPR_DELETE (1U << OFPPR_DELETE)
+#define ASYNC_OFPPR_MODIFY (1U << OFPPR_MODIFY)
+static const struct tok async_ofppr_bm[] = {
+ { ASYNC_OFPPR_ADD, "ADD" },
+ { ASYNC_OFPPR_DELETE, "DELETE" },
+ { ASYNC_OFPPR_MODIFY, "MODIFY" },
+ { 0, NULL }
+};
+#define ASYNC_OFPPR_U (~(ASYNC_OFPPR_ADD | ASYNC_OFPPR_DELETE | \
+ ASYNC_OFPPR_MODIFY))
+
+#define OFPET_HELLO_FAILED 0U
+#define OFPET_BAD_REQUEST 1U
+#define OFPET_BAD_ACTION 2U
+#define OFPET_BAD_INSTRUCTION 3U
+#define OFPET_BAD_MATCH 4U
+#define OFPET_FLOW_MOD_FAILED 5U
+#define OFPET_GROUP_MOD_FAILED 6U
+#define OFPET_PORT_MOD_FAILED 7U
+#define OFPET_TABLE_MOD_FAILED 8U
+#define OFPET_QUEUE_OP_FAILED 9U
+#define OFPET_SWITCH_CONFIG_FAILED 10U
+#define OFPET_ROLE_REQUEST_FAILED 11U
+#define OFPET_METER_MOD_FAILED 12U
+#define OFPET_TABLE_FEATURES_FAILED 13U
+#define OFPET_EXPERIMENTER 0xffffU /* a special case */
+static const struct tok ofpet_str[] = {
+ { OFPET_HELLO_FAILED, "HELLO_FAILED" },
+ { OFPET_BAD_REQUEST, "BAD_REQUEST" },
+ { OFPET_BAD_ACTION, "BAD_ACTION" },
+ { OFPET_BAD_INSTRUCTION, "BAD_INSTRUCTION" },
+ { OFPET_BAD_MATCH, "BAD_MATCH" },
+ { OFPET_FLOW_MOD_FAILED, "FLOW_MOD_FAILED" },
+ { OFPET_GROUP_MOD_FAILED, "GROUP_MOD_FAILED" },
+ { OFPET_PORT_MOD_FAILED, "PORT_MOD_FAILED" },
+ { OFPET_TABLE_MOD_FAILED, "TABLE_MOD_FAILED" },
+ { OFPET_QUEUE_OP_FAILED, "QUEUE_OP_FAILED" },
+ { OFPET_SWITCH_CONFIG_FAILED, "SWITCH_CONFIG_FAILED" },
+ { OFPET_ROLE_REQUEST_FAILED, "ROLE_REQUEST_FAILED" },
+ { OFPET_METER_MOD_FAILED, "METER_MOD_FAILED" },
+ { OFPET_TABLE_FEATURES_FAILED, "TABLE_FEATURES_FAILED" },
+ { OFPET_EXPERIMENTER, "EXPERIMENTER" },
+ { 0, NULL }
+};
+
+#define OFPHFC_INCOMPATIBLE 0U
+#define OFPHFC_EPERM 1U
+static const struct tok ofphfc_str[] = {
+ { OFPHFC_INCOMPATIBLE, "INCOMPATIBLE" },
+ { OFPHFC_EPERM, "EPERM" },
+ { 0, NULL }
+};
+
+#define OFPBRC_BAD_VERSION 0U
+#define OFPBRC_BAD_TYPE 1U
+#define OFPBRC_BAD_MULTIPART 2U
+#define OFPBRC_BAD_EXPERIMENTER 3U
+#define OFPBRC_BAD_EXP_TYPE 4U
+#define OFPBRC_EPERM 5U
+#define OFPBRC_BAD_LEN 6U
+#define OFPBRC_BUFFER_EMPTY 7U
+#define OFPBRC_BUFFER_UNKNOWN 8U
+#define OFPBRC_BAD_TABLE_ID 9U
+#define OFPBRC_IS_SLAVE 10U
+#define OFPBRC_BAD_PORT 11U
+#define OFPBRC_BAD_PACKET 12U
+#define OFPBRC_MULTIPART_BUFFER_OVERFLOW 13U
+static const struct tok ofpbrc_str[] = {
+ { OFPBRC_BAD_VERSION, "BAD_VERSION" },
+ { OFPBRC_BAD_TYPE, "BAD_TYPE" },
+ { OFPBRC_BAD_MULTIPART, "BAD_MULTIPART" },
+ { OFPBRC_BAD_EXPERIMENTER, "BAD_EXPERIMENTER" },
+ { OFPBRC_BAD_EXP_TYPE, "BAD_EXP_TYPE" },
+ { OFPBRC_EPERM, "EPERM" },
+ { OFPBRC_BAD_LEN, "BAD_LEN" },
+ { OFPBRC_BUFFER_EMPTY, "BUFFER_EMPTY" },
+ { OFPBRC_BUFFER_UNKNOWN, "BUFFER_UNKNOWN" },
+ { OFPBRC_BAD_TABLE_ID, "BAD_TABLE_ID" },
+ { OFPBRC_IS_SLAVE, "IS_SLAVE" },
+ { OFPBRC_BAD_PORT, "BAD_PORT" },
+ { OFPBRC_BAD_PACKET, "BAD_PACKET" },
+ { OFPBRC_MULTIPART_BUFFER_OVERFLOW, "MULTIPART_BUFFER_OVERFLOW" },
+ { 0, NULL }
+};
+
+#define OFPBAC_BAD_TYPE 0U
+#define OFPBAC_BAD_LEN 1U
+#define OFPBAC_BAD_EXPERIMENTER 2U
+#define OFPBAC_BAD_EXP_TYPE 3U
+#define OFPBAC_BAD_OUT_PORT 4U
+#define OFPBAC_BAD_ARGUMENT 5U
+#define OFPBAC_EPERM 6U
+#define OFPBAC_TOO_MANY 7U
+#define OFPBAC_BAD_QUEUE 8U
+#define OFPBAC_BAD_OUT_GROUP 9U
+#define OFPBAC_MATCH_INCONSISTENT 10U
+#define OFPBAC_UNSUPPORTED_ORDER 11U
+#define OFPBAC_BAD_TAG 12U
+#define OFPBAC_BAD_SET_TYPE 13U
+#define OFPBAC_BAD_SET_LEN 14U
+#define OFPBAC_BAD_SET_ARGUMENT 15U
+static const struct tok ofpbac_str[] = {
+ { OFPBAC_BAD_TYPE, "BAD_TYPE" },
+ { OFPBAC_BAD_LEN, "BAD_LEN" },
+ { OFPBAC_BAD_EXPERIMENTER, "BAD_EXPERIMENTER" },
+ { OFPBAC_BAD_EXP_TYPE, "BAD_EXP_TYPE" },
+ { OFPBAC_BAD_OUT_PORT, "BAD_OUT_PORT" },
+ { OFPBAC_BAD_ARGUMENT, "BAD_ARGUMENT" },
+ { OFPBAC_EPERM, "EPERM" },
+ { OFPBAC_TOO_MANY, "TOO_MANY" },
+ { OFPBAC_BAD_QUEUE, "BAD_QUEUE" },
+ { OFPBAC_BAD_OUT_GROUP, "BAD_OUT_GROUP" },
+ { OFPBAC_MATCH_INCONSISTENT, "MATCH_INCONSISTENT" },
+ { OFPBAC_UNSUPPORTED_ORDER, "UNSUPPORTED_ORDER" },
+ { OFPBAC_BAD_TAG, "BAD_TAG" },
+ { OFPBAC_BAD_SET_TYPE, "BAD_SET_TYPE" },
+ { OFPBAC_BAD_SET_LEN, "BAD_SET_LEN" },
+ { OFPBAC_BAD_SET_ARGUMENT, "BAD_SET_ARGUMENT" },
+ { 0, NULL }
+};
+
+#define OFPBIC_UNKNOWN_INST 0U
+#define OFPBIC_UNSUP_INST 1U
+#define OFPBIC_BAD_TABLE_ID 2U
+#define OFPBIC_UNSUP_METADATA 3U
+#define OFPBIC_UNSUP_METADATA_MASK 4U
+#define OFPBIC_BAD_EXPERIMENTER 5U
+#define OFPBIC_BAD_EXP_TYPE 6U
+#define OFPBIC_BAD_LEN 7U
+#define OFPBIC_EPERM 8U
+static const struct tok ofpbic_str[] = {
+ { OFPBIC_UNKNOWN_INST, "UNKNOWN_INST" },
+ { OFPBIC_UNSUP_INST, "UNSUP_INST" },
+ { OFPBIC_BAD_TABLE_ID, "BAD_TABLE_ID" },
+ { OFPBIC_UNSUP_METADATA, "UNSUP_METADATA" },
+ { OFPBIC_UNSUP_METADATA_MASK, "UNSUP_METADATA_MASK" },
+ { OFPBIC_BAD_EXPERIMENTER, "BAD_EXPERIMENTER" },
+ { OFPBIC_BAD_EXP_TYPE, "BAD_EXP_TYPE" },
+ { OFPBIC_BAD_LEN, "BAD_LEN" },
+ { OFPBIC_EPERM, "EPERM" },
+ { 0, NULL }
+};
+
+#define OFPBMC_BAD_TYPE 0U
+#define OFPBMC_BAD_LEN 1U
+#define OFPBMC_BAD_TAG 2U
+#define OFPBMC_BAD_DL_ADDR_MASK 3U
+#define OFPBMC_BAD_NW_ADDR_MASK 4U
+#define OFPBMC_BAD_WILDCARDS 5U
+#define OFPBMC_BAD_FIELD 6U
+#define OFPBMC_BAD_VALUE 7U
+#define OFPBMC_BAD_MASK 8U
+#define OFPBMC_BAD_PREREQ 9U
+#define OFPBMC_DUP_FIELD 10U
+#define OFPBMC_EPERM 11U
+static const struct tok ofpbmc_str[] = {
+ { OFPBMC_BAD_TYPE, "BAD_TYPE" },
+ { OFPBMC_BAD_LEN, "BAD_LEN" },
+ { OFPBMC_BAD_TAG, "BAD_TAG" },
+ { OFPBMC_BAD_DL_ADDR_MASK, "BAD_DL_ADDR_MASK" },
+ { OFPBMC_BAD_NW_ADDR_MASK, "BAD_NW_ADDR_MASK" },
+ { OFPBMC_BAD_WILDCARDS, "BAD_WILDCARDS" },
+ { OFPBMC_BAD_FIELD, "BAD_FIELD" },
+ { OFPBMC_BAD_VALUE, "BAD_VALUE" },
+ { OFPBMC_BAD_MASK, "BAD_MASK" },
+ { OFPBMC_BAD_PREREQ, "BAD_PREREQ" },
+ { OFPBMC_DUP_FIELD, "DUP_FIELD" },
+ { OFPBMC_EPERM, "EPERM" },
+ { 0, NULL }
+};
+
+#define OFPFMFC_UNKNOWN 0U
+#define OFPFMFC_TABLE_FULL 1U
+#define OFPFMFC_BAD_TABLE_ID 2U
+#define OFPFMFC_OVERLAP 3U
+#define OFPFMFC_EPERM 4U
+#define OFPFMFC_BAD_TIMEOUT 5U
+#define OFPFMFC_BAD_COMMAND 6U
+#define OFPFMFC_BAD_FLAGS 7U
+static const struct tok ofpfmfc_str[] = {
+ { OFPFMFC_UNKNOWN, "UNKNOWN" },
+ { OFPFMFC_TABLE_FULL, "TABLE_FULL" },
+ { OFPFMFC_BAD_TABLE_ID, "BAD_TABLE_ID" },
+ { OFPFMFC_OVERLAP, "OVERLAP" },
+ { OFPFMFC_EPERM, "EPERM" },
+ { OFPFMFC_BAD_TIMEOUT, "BAD_TIMEOUT" },
+ { OFPFMFC_BAD_COMMAND, "BAD_COMMAND" },
+ { OFPFMFC_BAD_FLAGS, "BAD_FLAGS" },
+ { 0, NULL }
+};
+
+#define OFPGMFC_GROUP_EXISTS 0U
+#define OFPGMFC_INVALID_GROUP 1U
+#define OFPGMFC_WEIGHT_UNSUPPORTED 2U
+#define OFPGMFC_OUT_OF_GROUPS 3U
+#define OFPGMFC_OUT_OF_BUCKETS 4U
+#define OFPGMFC_CHAINING_UNSUPPORTED 5U
+#define OFPGMFC_WATCH_UNSUPPORTED 6U
+#define OFPGMFC_LOOP 7U
+#define OFPGMFC_UNKNOWN_GROUP 8U
+#define OFPGMFC_CHAINED_GROUP 9U
+#define OFPGMFC_BAD_TYPE 10U
+#define OFPGMFC_BAD_COMMAND 11U
+#define OFPGMFC_BAD_BUCKET 12U
+#define OFPGMFC_BAD_MATCH 13U
+#define OFPGMFC_EPERM 14U
+static const struct tok ofpgmfc_str[] = {
+ { OFPGMFC_GROUP_EXISTS, "GROUP_EXISTS" },
+ { OFPGMFC_INVALID_GROUP, "INVALID_GROUP" },
+ { OFPGMFC_WEIGHT_UNSUPPORTED, "WEIGHT_UNSUPPORTED" },
+ { OFPGMFC_OUT_OF_GROUPS, "OUT_OF_GROUPS" },
+ { OFPGMFC_OUT_OF_BUCKETS, "OUT_OF_BUCKETS" },
+ { OFPGMFC_CHAINING_UNSUPPORTED, "CHAINING_UNSUPPORTED" },
+ { OFPGMFC_WATCH_UNSUPPORTED, "WATCH_UNSUPPORTED" },
+ { OFPGMFC_LOOP, "LOOP" },
+ { OFPGMFC_UNKNOWN_GROUP, "UNKNOWN_GROUP" },
+ { OFPGMFC_CHAINED_GROUP, "CHAINED_GROUP" },
+ { OFPGMFC_BAD_TYPE, "BAD_TYPE" },
+ { OFPGMFC_BAD_COMMAND, "BAD_COMMAND" },
+ { OFPGMFC_BAD_BUCKET, "BAD_BUCKET" },
+ { OFPGMFC_BAD_MATCH, "BAD_MATCH" },
+ { OFPGMFC_EPERM, "EPERM" },
+ { 0, NULL }
+};
+
+#define OFPPMFC_BAD_PORT 0U
+#define OFPPMFC_BAD_HW_ADDR 1U
+#define OFPPMFC_BAD_CONFIG 2U
+#define OFPPMFC_BAD_ADVERTISE 3U
+#define OFPPMFC_EPERM 4U
+static const struct tok ofppmfc_str[] = {
+ { OFPPMFC_BAD_PORT, "BAD_PORT" },
+ { OFPPMFC_BAD_HW_ADDR, "BAD_HW_ADDR" },
+ { OFPPMFC_BAD_CONFIG, "BAD_CONFIG" },
+ { OFPPMFC_BAD_ADVERTISE, "BAD_ADVERTISE" },
+ { OFPPMFC_EPERM, "EPERM" },
+ { 0, NULL }
+};
+
+#define OFPTMFC_BAD_TABLE 0U
+#define OFPTMFC_BAD_CONFIG 1U
+#define OFPTMFC_EPERM 2U
+static const struct tok ofptmfc_str[] = {
+ { OFPTMFC_BAD_TABLE, "BAD_TABLE" },
+ { OFPTMFC_BAD_CONFIG, "BAD_CONFIG" },
+ { OFPTMFC_EPERM, "EPERM" },
+ { 0, NULL }
+};
+
+#define OFPQOFC_BAD_PORT 0U
+#define OFPQOFC_BAD_QUEUE 1U
+#define OFPQOFC_EPERM 2U
+static const struct tok ofpqofc_str[] = {
+ { OFPQOFC_BAD_PORT, "BAD_PORT" },
+ { OFPQOFC_BAD_QUEUE, "BAD_QUEUE" },
+ { OFPQOFC_EPERM, "EPERM" },
+ { 0, NULL }
+};
+
+#define OFPSCFC_BAD_FLAGS 0U
+#define OFPSCFC_BAD_LEN 1U
+#define OFPSCFC_EPERM 2U
+static const struct tok ofpscfc_str[] = {
+ { OFPSCFC_BAD_FLAGS, "BAD_FLAGS" },
+ { OFPSCFC_BAD_LEN, "BAD_LEN" },
+ { OFPSCFC_EPERM, "EPERM" },
+ { 0, NULL }
+};
+
+#define OFPRRFC_STALE 0U
+#define OFPRRFC_UNSUP 1U
+#define OFPRRFC_BAD_ROLE 2U
+static const struct tok ofprrfc_str[] = {
+ { OFPRRFC_STALE, "STALE" },
+ { OFPRRFC_UNSUP, "UNSUP" },
+ { OFPRRFC_BAD_ROLE, "BAD_ROLE" },
+ { 0, NULL }
+};
+
+#define OFPMMFC_UNKNOWN 0U
+#define OFPMMFC_METER_EXISTS 1U
+#define OFPMMFC_INVALID_METER 2U
+#define OFPMMFC_UNKNOWN_METER 3U
+#define OFPMMFC_BAD_COMMAND 4U
+#define OFPMMFC_BAD_FLAGS 5U
+#define OFPMMFC_BAD_RATE 6U
+#define OFPMMFC_BAD_BURST 7U
+#define OFPMMFC_BAD_BAND 8U
+#define OFPMMFC_BAD_BAND_VALUE 9U
+#define OFPMMFC_OUT_OF_METERS 10U
+#define OFPMMFC_OUT_OF_BANDS 11U
+static const struct tok ofpmmfc_str[] = {
+ { OFPMMFC_UNKNOWN, "UNKNOWN" },
+ { OFPMMFC_METER_EXISTS, "METER_EXISTS" },
+ { OFPMMFC_INVALID_METER, "INVALID_METER" },
+ { OFPMMFC_UNKNOWN_METER, "UNKNOWN_METER" },
+ { OFPMMFC_BAD_COMMAND, "BAD_COMMAND" },
+ { OFPMMFC_BAD_FLAGS, "BAD_FLAGS" },
+ { OFPMMFC_BAD_RATE, "BAD_RATE" },
+ { OFPMMFC_BAD_BURST, "BAD_BURST" },
+ { OFPMMFC_BAD_BAND, "BAD_BAND" },
+ { OFPMMFC_BAD_BAND_VALUE, "BAD_BAND_VALUE" },
+ { OFPMMFC_OUT_OF_METERS, "OUT_OF_METERS" },
+ { OFPMMFC_OUT_OF_BANDS, "OUT_OF_BANDS" },
+ { 0, NULL }
+};
+
+#define OFPTFFC_BAD_TABLE 0U
+#define OFPTFFC_BAD_METADATA 1U
+#define OFPTFFC_BAD_TYPE 2U
+#define OFPTFFC_BAD_LEN 3U
+#define OFPTFFC_BAD_ARGUMENT 4U
+#define OFPTFFC_EPERM 5U
+static const struct tok ofptffc_str[] = {
+ { OFPTFFC_BAD_TABLE, "BAD_TABLE" },
+ { OFPTFFC_BAD_METADATA, "BAD_METADATA" },
+ { OFPTFFC_BAD_TYPE, "BAD_TYPE" },
+ { OFPTFFC_BAD_LEN, "BAD_LEN" },
+ { OFPTFFC_BAD_ARGUMENT, "BAD_ARGUMENT" },
+ { OFPTFFC_EPERM, "EPERM" },
+ { 0, NULL }
+};
+
+static const struct uint_tokary of13_ofpet2tokary[] = {
+ { OFPET_HELLO_FAILED, ofphfc_str },
+ { OFPET_BAD_REQUEST, ofpbrc_str },
+ { OFPET_BAD_ACTION, ofpbac_str },
+ { OFPET_BAD_INSTRUCTION, ofpbic_str },
+ { OFPET_BAD_MATCH, ofpbmc_str },
+ { OFPET_FLOW_MOD_FAILED, ofpfmfc_str },
+ { OFPET_GROUP_MOD_FAILED, ofpgmfc_str },
+ { OFPET_PORT_MOD_FAILED, ofppmfc_str },
+ { OFPET_TABLE_MOD_FAILED, ofptmfc_str },
+ { OFPET_QUEUE_OP_FAILED, ofpqofc_str },
+ { OFPET_SWITCH_CONFIG_FAILED, ofpscfc_str },
+ { OFPET_ROLE_REQUEST_FAILED, ofprrfc_str },
+ { OFPET_METER_MOD_FAILED, ofpmmfc_str },
+ { OFPET_TABLE_FEATURES_FAILED, ofptffc_str },
+ { OFPET_EXPERIMENTER, NULL }, /* defines no codes */
+ /* uint2tokary() does not use array termination. */
+};
+
+/* lengths (fixed or minimal) of particular message types, where not 0 */
+#define OF_ERROR_MSG_MINLEN (12U - OF_HEADER_FIXLEN)
+#define OF_FEATURES_REPLY_FIXLEN (32U - OF_HEADER_FIXLEN)
+#define OF_PORT_MOD_FIXLEN (40U - OF_HEADER_FIXLEN)
+#define OF_SWITCH_CONFIG_MSG_FIXLEN (12U - OF_HEADER_FIXLEN)
+#define OF_TABLE_MOD_FIXLEN (16U - OF_HEADER_FIXLEN)
+#define OF_QUEUE_GET_CONFIG_REQUEST_FIXLEN (16U - OF_HEADER_FIXLEN)
+#define OF_ROLE_MSG_FIXLEN (24U - OF_HEADER_FIXLEN)
+#define OF_ASYNC_MSG_FIXLEN (32U - OF_HEADER_FIXLEN)
+#define OF_PORT_STATUS_FIXLEN (80U - OF_HEADER_FIXLEN)
+#define OF_EXPERIMENTER_MSG_MINLEN (16U - OF_HEADER_FIXLEN)
+
+/* lengths (fixed or minimal) of particular protocol structures */
+#define OF_HELLO_ELEM_MINSIZE 4U
+
+/* miscellaneous constants from [OF13] */
+#define OFP_MAX_PORT_NAME_LEN 16U
+
+/* [OF13] Section 7.2.1 */
+static void
+of13_port_print(netdissect_options *ndo,
+ const u_char *cp)
+{
+ /* port_no */
+ ND_PRINT("\n\t port_no %s",
+ tok2str(ofpp_str, "%u", GET_BE_U_4(cp)));
+ cp += 4;
+ /* pad */
+ cp += 4;
+ /* hw_addr */
+ ND_PRINT(", hw_addr %s", GET_ETHERADDR_STRING(cp));
+ cp += MAC_ADDR_LEN;
+ /* pad2 */
+ cp += 2;
+ /* name */
+ ND_PRINT(", name '");
+ nd_printjnp(ndo, cp, OFP_MAX_PORT_NAME_LEN);
+ ND_PRINT("'");
+ cp += OFP_MAX_PORT_NAME_LEN;
+
+ if (ndo->ndo_vflag < 2) {
+ ND_TCHECK_LEN(cp, 32);
+ return;
+ }
+
+ /* config */
+ ND_PRINT("\n\t config 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppc_bm, GET_BE_U_4(cp), OFPPC_U);
+ cp += 4;
+ /* state */
+ ND_PRINT("\n\t state 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofpps_bm, GET_BE_U_4(cp), OFPPS_U);;
+ cp += 4;
+ /* curr */
+ ND_PRINT("\n\t curr 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppf_bm, GET_BE_U_4(cp), OFPPF_U);
+ cp += 4;
+ /* advertised */
+ ND_PRINT("\n\t advertised 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppf_bm, GET_BE_U_4(cp), OFPPF_U);
+ cp += 4;
+ /* supported */
+ ND_PRINT("\n\t supported 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppf_bm, GET_BE_U_4(cp), OFPPF_U);
+ cp += 4;
+ /* peer */
+ ND_PRINT("\n\t peer 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppf_bm, GET_BE_U_4(cp), OFPPF_U);
+ cp += 4;
+ /* curr_speed */
+ ND_PRINT("\n\t curr_speed %ukbps", GET_BE_U_4(cp));
+ cp += 4;
+ /* max_speed */
+ ND_PRINT("\n\t max_speed %ukbps", GET_BE_U_4(cp));
+}
+
+/* [OF13] Section 7.3.1 */
+static void
+of13_features_reply_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* datapath_id */
+ ND_PRINT("\n\t dpid 0x%016" PRIx64, GET_BE_U_8(cp));
+ cp += 8;
+ /* n_buffers */
+ ND_PRINT(", n_buffers %u", GET_BE_U_4(cp));
+ cp += 4;
+ /* n_tables */
+ ND_PRINT(", n_tables %u", GET_U_1(cp));
+ cp += 1;
+ /* auxiliary_id */
+ ND_PRINT(", auxiliary_id %u", GET_U_1(cp));
+ cp += 1;
+ /* pad */
+ cp += 2;
+ /* capabilities */
+ ND_PRINT("\n\t capabilities 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofp_capabilities_bm, GET_BE_U_4(cp), OFPCAP_U);
+ cp += 4;
+ /* reserved */
+ ND_TCHECK_4(cp);
+}
+
+/* [OF13] Section 7.3.2 */
+static void
+of13_switch_config_msg_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* flags */
+ ND_PRINT("\n\t flags %s",
+ tok2str(ofp_config_str, "invalid (0x%04x)", GET_BE_U_2(cp)));
+ cp += 2;
+ /* miss_send_len */
+ ND_PRINT(", miss_send_len %s",
+ tok2str(ofpcml_str, "%u", GET_BE_U_2(cp)));
+}
+
+/* [OF13] Section 7.3.3 */
+static void
+of13_table_mod_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* table_id */
+ ND_PRINT("\n\t table_id %s", tok2str(ofptt_str, "%u", GET_U_1(cp)));
+ cp += 1;
+ /* pad */
+ cp += 3;
+ /* config */
+ ND_PRINT(", config 0x%08x", GET_BE_U_4(cp));
+}
+
+/* [OF13] Section 7.3.9 */
+static void
+of13_role_msg_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* role */
+ ND_PRINT("\n\t role %s",
+ tok2str(ofpcr_str, "invalid (0x%08x)", GET_BE_U_4(cp)));
+ cp += 4;
+ /* pad */
+ cp += 4;
+ /* generation_id */
+ ND_PRINT(", generation_id 0x%016" PRIx64, GET_BE_U_8(cp));
+}
+
+/* [OF13] Section 7.3.10 */
+static void
+of13_async_msg_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* packet_in_mask[0] */
+ ND_PRINT("\n\t packet_in_mask[EM] 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, async_ofpr_bm, GET_BE_U_4(cp), ASYNC_OFPR_U);
+ cp += 4;
+ /* packet_in_mask[1] */
+ ND_PRINT("\n\t packet_in_mask[S] 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, async_ofpr_bm, GET_BE_U_4(cp), ASYNC_OFPR_U);
+ cp += 4;
+ /* port_status_mask[0] */
+ ND_PRINT("\n\t port_status_mask[EM] 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, async_ofppr_bm, GET_BE_U_4(cp), ASYNC_OFPPR_U);
+ cp += 4;
+ /* port_status_mask[1] */
+ ND_PRINT("\n\t port_status_mask[S] 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, async_ofppr_bm, GET_BE_U_4(cp), ASYNC_OFPPR_U);
+ cp += 4;
+ /* flow_removed_mask[0] */
+ ND_PRINT("\n\t flow_removed_mask[EM] 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, async_ofppr_bm, GET_BE_U_4(cp), ASYNC_OFPPR_U);
+ cp += 4;
+ /* flow_removed_mask[1] */
+ ND_PRINT("\n\t flow_removed_mask[S] 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, async_ofppr_bm, GET_BE_U_4(cp), ASYNC_OFPPR_U);
+}
+
+/* [OF13] Section 7.3.4.3 */
+static void
+of13_port_mod_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* port_no */
+ ND_PRINT("\n\t port_no %s", tok2str(ofpp_str, "%u", GET_BE_U_4(cp)));
+ cp += 4;
+ /* pad */
+ cp += 4;
+ /* hw_addr */
+ ND_PRINT(", hw_addr %s", GET_ETHERADDR_STRING(cp));
+ cp += MAC_ADDR_LEN;
+ /* pad2 */
+ cp += 2;
+ /* config */
+ ND_PRINT("\n\t config 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppc_bm, GET_BE_U_4(cp), OFPPC_U);
+ cp += 4;
+ /* mask */
+ ND_PRINT("\n\t mask 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppc_bm, GET_BE_U_4(cp), OFPPC_U);
+ cp += 4;
+ /* advertise */
+ ND_PRINT("\n\t advertise 0x%08x", GET_BE_U_4(cp));
+ of_bitmap_print(ndo, ofppf_bm, GET_BE_U_4(cp), OFPPF_U);
+ cp += 4;
+ /* pad3 */
+ /* Always the last field, check bounds. */
+ ND_TCHECK_4(cp);
+}
+
+/* [OF13] Section 7.4.3 */
+static void
+of13_port_status_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* reason */
+ ND_PRINT("\n\t reason %s",
+ tok2str(ofppr_str, "invalid (0x02x)", GET_U_1(cp)));
+ cp += 1;
+ /* pad */
+ cp += 7;
+ /* desc */
+ of13_port_print(ndo, cp);
+}
+
+/* [OF13] Section 7.5.1 */
+static void
+of13_hello_elements_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ while (len) {
+ uint16_t type, bmlen;
+
+ if (len < OF_HELLO_ELEM_MINSIZE)
+ goto invalid;
+ /* type */
+ type = GET_BE_U_2(cp);
+ OF_FWD(2);
+ ND_PRINT("\n\t type %s",
+ tok2str(ofphet_str, "unknown (0x%04x)", type));
+ /* length */
+ bmlen = GET_BE_U_2(cp);
+ OF_FWD(2);
+ ND_PRINT(", length %u", bmlen);
+ /* cp is OF_HELLO_ELEM_MINSIZE bytes in */
+ if (bmlen < OF_HELLO_ELEM_MINSIZE ||
+ bmlen > OF_HELLO_ELEM_MINSIZE + len)
+ goto invalid;
+ switch (type) {
+ case OFPHET_VERSIONBITMAP:
+ /*
+ * The specification obviously overprovisions the space
+ * for version bitmaps in this element ("ofp versions
+ * 32 to 63 are encoded in the second bitmap and so
+ * on"). Keep this code simple for now and recognize
+ * only a single bitmap with no padding.
+ */
+ if (bmlen == OF_HELLO_ELEM_MINSIZE + 4) {
+ uint32_t bitmap = GET_BE_U_4(cp);
+ ND_PRINT(", bitmap 0x%08x", bitmap);
+ of_bitmap_print(ndo, ofverbm_str, bitmap,
+ OF_BIT_VER_U);
+ } else {
+ ND_PRINT(" (bogus)");
+ ND_TCHECK_LEN(cp, bmlen - OF_HELLO_ELEM_MINSIZE);
+ }
+ break;
+ default:
+ ND_TCHECK_LEN(cp, bmlen - OF_HELLO_ELEM_MINSIZE);
+ }
+ OF_FWD(bmlen - OF_HELLO_ELEM_MINSIZE);
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* [OF13] Section 7.5.4 */
+static void
+of13_experimenter_message_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint32_t experimenter;
+
+ /* experimenter */
+ experimenter = GET_BE_U_4(cp);
+ OF_FWD(4);
+ ND_PRINT("\n\t experimenter 0x%08x (%s)", experimenter,
+ of_vendor_name(experimenter));
+ /* exp_type */
+ ND_PRINT(", exp_type 0x%08x", GET_BE_U_4(cp));
+ OF_FWD(4);
+ /* data */
+ of_data_print(ndo, cp, len);
+}
+
+/* [OF13] Section 7.3.6 */
+static void
+of13_queue_get_config_request_print(netdissect_options *ndo,
+ const u_char *cp, u_int len _U_)
+{
+ /* port */
+ ND_PRINT("\n\t port %s", tok2str(ofpp_str, "%u", GET_BE_U_4(cp)));
+ cp += 4;
+ /* pad */
+ /* Always the last field, check bounds. */
+ ND_TCHECK_4(cp);
+}
+
+/* [OF13] Section 7.4.4 */
+static void
+of13_error_print(netdissect_options *ndo,
+ const u_char *cp, u_int len)
+{
+ uint16_t type, code;
+ const struct tok *code_str;
+
+ /* type */
+ type = GET_BE_U_2(cp);
+ OF_FWD(2);
+ ND_PRINT("\n\t type %s", tok2str(ofpet_str, "invalid (0x%04x)", type));
+ /* code */
+ code = GET_BE_U_2(cp);
+ OF_FWD(2);
+ code_str = uint2tokary(of13_ofpet2tokary, type);
+ if (code_str != NULL)
+ ND_PRINT(", code %s",
+ tok2str(code_str, "invalid (0x%04x)", code));
+ else
+ ND_PRINT(", code invalid (0x%04x)", code);
+ /* data */
+ of_data_print(ndo, cp, len);
+}
+
+static const struct of_msgtypeinfo of13_msgtypeinfo[OFPT_MAX + 1] = {
+ /*
+ * [OF13] Section 7.5.1
+ * n * variable-size data units.
+ */
+ {
+ "HELLO", of13_hello_elements_print,
+ REQ_MINLEN, 0
+ },
+ /*
+ * [OF13] Section 7.4.4
+ * A fixed-size message body and variable-size data.
+ */
+ {
+ "ERROR", of13_error_print,
+ REQ_MINLEN, OF_ERROR_MSG_MINLEN
+ },
+ /*
+ * [OF13] Section 7.5.2
+ * Variable-size data.
+ */
+ {
+ "ECHO_REQUEST", of_data_print,
+ REQ_MINLEN, 0
+ },
+ /*
+ * [OF13] Section 7.5.3
+ * Variable-size data.
+ */
+ {
+ "ECHO_REPLY", of_data_print,
+ REQ_MINLEN, 0
+ },
+ /*
+ * [OF13] Section 7.5.4
+ * A fixed-size message body and variable-size data.
+ */
+ {
+ "EXPERIMENTER", of13_experimenter_message_print,
+ REQ_MINLEN, OF_EXPERIMENTER_MSG_MINLEN
+ },
+ /*
+ * [OF13] Section 7.3.1
+ * No message body.
+ */
+ {
+ "FEATURES_REQUEST", NULL,
+ REQ_FIXLEN, 0
+ },
+ /*
+ * [OF13] Section 7.3.1
+ * A fixed-size message body.
+ */
+ {
+ "FEATURES_REPLY", of13_features_reply_print,
+ REQ_FIXLEN, OF_FEATURES_REPLY_FIXLEN
+ },
+ /*
+ * [OF13] Section 7.3.2
+ * No message body.
+ */
+ {
+ "GET_CONFIG_REQUEST", NULL,
+ REQ_FIXLEN, 0
+ },
+ /*
+ * [OF13] Section 7.3.2
+ * A fixed-size message body.
+ */
+ {
+ "GET_CONFIG_REPLY", of13_switch_config_msg_print,
+ REQ_FIXLEN, OF_SWITCH_CONFIG_MSG_FIXLEN
+ },
+ /*
+ * [OF13] Section 7.3.2
+ * A fixed-size message body.
+ */
+ {
+ "SET_CONFIG", of13_switch_config_msg_print,
+ REQ_FIXLEN, OF_SWITCH_CONFIG_MSG_FIXLEN
+ },
+ /*
+ * [OF13] Section 7.4.1
+ * (to be done)
+ */
+ {
+ "PACKET_IN", NULL,
+ REQ_NONE, 0
+ },
+ /*
+ * [OF13] Section 7.4.2
+ * (to be done)
+ */
+ {
+ "FLOW_REMOVED", NULL,
+ REQ_NONE, 0
+ },
+ /*
+ * [OF13] Section 7.4.3
+ * A fixed-size message body.
+ */
+ {
+ "PORT_STATUS", of13_port_status_print,
+ REQ_FIXLEN, OF_PORT_STATUS_FIXLEN
+ },
+ /*
+ * [OF13] Section 7.3.7
+ * (to be done)
+ */
+ {
+ "PACKET_OUT", NULL,
+ REQ_NONE, 0
+ },
+ /*
+ * [OF13] Section 7.3.4.1
+ * (to be done)
+ */
+ {
+ "FLOW_MOD", NULL,
+ REQ_NONE, 0
+ },
+ /*
+ * [OF13] Section 7.3.4.2
+ * (to be done)
+ */
+ {
+ "GROUP_MOD", NULL,
+ REQ_NONE, 0
+ },
+ /*
+ * [OF13] Section 7.3.4.3
+ * A fixed-size message body.
+ */
+ {
+ "PORT_MOD", of13_port_mod_print,
+ REQ_FIXLEN, OF_PORT_MOD_FIXLEN
+ },
+ /*
+ * [OF13] Section 7.3.3
+ * A fixed-size message body.
+ */
+ {
+ "TABLE_MOD", of13_table_mod_print,
+ REQ_FIXLEN, OF_TABLE_MOD_FIXLEN
+ },
+ /*
+ * [OF13] Section 7.3.5
+ * (to be done)
+ */
+ {
+ "MULTIPART_REQUEST", NULL,
+ REQ_NONE, 0
+ },
+ /*
+ * [OF13] Section 7.3.5
+ * (to be done)
+ */
+ {
+ "MULTIPART_REPLY", NULL,
+ REQ_NONE, 0
+ },
+ /*
+ * [OF13] Section 7.3.8
+ * No message body.
+ */
+ {
+ "BARRIER_REQUEST", NULL,
+ REQ_FIXLEN, 0
+ },
+ /*
+ * [OF13] Section 7.3.8
+ * No message body.
+ */
+ {
+ "BARRIER_REPLY", NULL,
+ REQ_FIXLEN, 0
+ },
+ /*
+ * [OF13] Section 7.3.6
+ * A fixed-size message body.
+ */
+ {
+ "QUEUE_GET_CONFIG_REQUEST", of13_queue_get_config_request_print,
+ REQ_FIXLEN, OF_QUEUE_GET_CONFIG_REQUEST_FIXLEN
+ },
+ /*
+ * [OF13] Section 7.3.6
+ * (to be done)
+ */
+ {
+ "QUEUE_GET_CONFIG_REPLY", NULL,
+ REQ_NONE, 0
+ },
+ /*
+ * [OF13] Section 7.3.9
+ * A fixed-size message body.
+ */
+ {
+ "ROLE_REQUEST", of13_role_msg_print,
+ REQ_FIXLEN, OF_ROLE_MSG_FIXLEN
+ },
+ /*
+ * [OF13] Section 7.3.9
+ * A fixed-size message body.
+ */
+ {
+ "ROLE_REPLY", of13_role_msg_print,
+ REQ_FIXLEN, OF_ROLE_MSG_FIXLEN
+ },
+ /*
+ * [OF13] Section 7.3.10
+ * No message body.
+ */
+ {
+ "GET_ASYNC_REQUEST", NULL,
+ REQ_FIXLEN, 0
+ },
+ /*
+ * [OF13] Section 7.3.10
+ * A fixed-size message body.
+ */
+ {
+ "GET_ASYNC_REPLY", of13_async_msg_print,
+ REQ_FIXLEN, OF_ASYNC_MSG_FIXLEN
+ },
+ /*
+ * [OF13] Section 7.3.10
+ * A fixed-size message body.
+ */
+ {
+ "SET_ASYNC", of13_async_msg_print,
+ REQ_FIXLEN, OF_ASYNC_MSG_FIXLEN
+ },
+ /*
+ * [OF13] Section 7.3.4.4
+ * (to be done)
+ */
+ {
+ "METER_MOD", NULL,
+ REQ_NONE, 0
+ },
+};
+
+const struct of_msgtypeinfo *
+of13_identify_msgtype(const uint8_t type)
+{
+ return type <= OFPT_MAX ? &of13_msgtypeinfo[type] : NULL;
+}
diff --git a/print-openflow.c b/print-openflow.c
new file mode 100644
index 0000000..6024a21
--- /dev/null
+++ b/print-openflow.c
@@ -0,0 +1,228 @@
+/*
+ * This module implements printing of the very basic (version-independent)
+ * OpenFlow header and iteration over OpenFlow messages. It is intended for
+ * dispatching of version-specific OpenFlow message decoding.
+ *
+ *
+ * Copyright (c) 2013 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: version-independent OpenFlow printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "openflow.h"
+#include "oui.h"
+
+
+static const struct tok ofver_str[] = {
+ { OF_VER_1_0, "1.0" },
+ { OF_VER_1_1, "1.1" },
+ { OF_VER_1_2, "1.2" },
+ { OF_VER_1_3, "1.3" },
+ { OF_VER_1_4, "1.4" },
+ { OF_VER_1_5, "1.5" },
+ { 0, NULL }
+};
+
+const struct tok onf_exp_str[] = {
+ { ONF_EXP_ONF, "ONF Extensions" },
+ { ONF_EXP_BUTE, "Budapest University of Technology and Economics" },
+ { ONF_EXP_NOVIFLOW, "NoviFlow" },
+ { ONF_EXP_L3, "L3+ Extensions, Vendor Neutral" },
+ { ONF_EXP_L4L7, "L4-L7 Extensions" },
+ { ONF_EXP_WMOB, "Wireless and Mobility Extensions" },
+ { ONF_EXP_FABS, "Forwarding Abstractions Extensions" },
+ { ONF_EXP_OTRANS, "Optical Transport Extensions" },
+ { ONF_EXP_NBLNCTU, "Network Benchmarking Lab, NCTU" },
+ { ONF_EXP_MPCE, "Mobile Packet Core Extensions" },
+ { ONF_EXP_MPLSTPSPTN, "MPLS-TP OpenFlow Extensions for SPTN" },
+ { 0, NULL }
+};
+
+const char *
+of_vendor_name(const uint32_t vendor)
+{
+ const struct tok *table = (vendor & 0xff000000) == 0 ? oui_values : onf_exp_str;
+ return tok2str(table, "unknown", vendor);
+}
+
+void
+of_bitmap_print(netdissect_options *ndo,
+ const struct tok *t, const uint32_t v, const uint32_t u)
+{
+ /* Assigned bits? */
+ if (v & ~u)
+ ND_PRINT(" (%s)", bittok2str(t, "", v));
+ /* Unassigned bits? */
+ if (v & u)
+ ND_PRINT(" (bogus)");
+}
+
+void
+of_data_print(netdissect_options *ndo,
+ const u_char *cp, const u_int len)
+{
+ if (len == 0)
+ return;
+ /* data */
+ ND_PRINT("\n\t data (%u octets)", len);
+ if (ndo->ndo_vflag >= 2)
+ hex_and_ascii_print(ndo, "\n\t ", cp, len);
+ else
+ ND_TCHECK_LEN(cp, len);
+}
+
+static void
+of_message_print(netdissect_options *ndo,
+ const u_char *cp, uint16_t len,
+ const struct of_msgtypeinfo *mti)
+{
+ /*
+ * Here "cp" and "len" stand for the message part beyond the common
+ * OpenFlow 1.0 header, if any.
+ *
+ * Most message types are longer than just the header, and the length
+ * constraints may be complex. When possible, validate the constraint
+ * completely here (REQ_FIXLEN), otherwise check that the message is
+ * long enough to begin the decoding (REQ_MINLEN) and have the
+ * type-specific function do any remaining validation.
+ */
+
+ if (!mti)
+ goto tcheck_remainder;
+
+ if ((mti->req_what == REQ_FIXLEN && len != mti->req_value) ||
+ (mti->req_what == REQ_MINLEN && len < mti->req_value))
+ goto invalid;
+
+ if (!ndo->ndo_vflag || !mti->decoder)
+ goto tcheck_remainder;
+
+ mti->decoder(ndo, cp, len);
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+tcheck_remainder:
+ ND_TCHECK_LEN(cp, len);
+}
+
+/* Print a TCP segment worth of OpenFlow messages presuming the segment begins
+ * on a message boundary. */
+void
+openflow_print(netdissect_options *ndo, const u_char *cp, u_int len)
+{
+ ndo->ndo_protocol = "openflow";
+ ND_PRINT(": OpenFlow");
+ while (len) {
+ /* Print a single OpenFlow message. */
+ uint8_t version, type;
+ uint16_t length;
+ const struct of_msgtypeinfo *mti;
+
+ /* version */
+ version = GET_U_1(cp);
+ OF_FWD(1);
+ ND_PRINT("\n\tversion %s",
+ tok2str(ofver_str, "unknown (0x%02x)", version));
+ /* type */
+ if (len < 1)
+ goto partial_header;
+ type = GET_U_1(cp);
+ OF_FWD(1);
+ mti =
+ version == OF_VER_1_0 ? of10_identify_msgtype(type) :
+ version == OF_VER_1_3 ? of13_identify_msgtype(type) :
+ NULL;
+ if (mti && mti->name)
+ ND_PRINT(", type %s", mti->name);
+ else
+ ND_PRINT(", type unknown (0x%02x)", type);
+ /* length */
+ if (len < 2)
+ goto partial_header;
+ length = GET_BE_U_2(cp);
+ OF_FWD(2);
+ ND_PRINT(", length %u%s", length,
+ length < OF_HEADER_FIXLEN ? " (too short!)" : "");
+ /* xid */
+ if (len < 4)
+ goto partial_header;
+ ND_PRINT(", xid 0x%08x", GET_BE_U_4(cp));
+ OF_FWD(4);
+
+ /*
+ * When a TCP packet can contain several protocol messages,
+ * and at the same time a protocol message can span several
+ * TCP packets, decoding an incomplete message at the end of
+ * a TCP packet requires attention to detail in this loop.
+ *
+ * Message length includes the header length and a message
+ * always includes the basic header. A message length underrun
+ * fails decoding of the rest of the current packet. At the
+ * same time, try decoding as much of the current message as
+ * possible even when it does not end within the current TCP
+ * segment.
+ *
+ * Specifically, to try to process the message body in this
+ * iteration do NOT require the header "length" to be small
+ * enough for the full declared OpenFlow message to fit into
+ * the remainder of the declared TCP segment, same as the full
+ * declared TCP segment is not required to fit into the
+ * captured packet buffer.
+ *
+ * But DO require the same at the end of this iteration to
+ * decrement "len" and to proceed to the next iteration.
+ * (Ideally the declared TCP payload end will be at or after
+ * the captured packet buffer end, but stay safe even when
+ * that's somehow not the case.)
+ */
+ if (length < OF_HEADER_FIXLEN)
+ goto invalid;
+
+ of_message_print(ndo, cp, length - OF_HEADER_FIXLEN, mti);
+ if (length - OF_HEADER_FIXLEN > len)
+ break;
+ OF_FWD(length - OF_HEADER_FIXLEN);
+ } /* while (len) */
+ return;
+
+partial_header:
+ ND_PRINT(" (end of TCP payload)");
+ ND_TCHECK_LEN(cp, len);
+ return;
+invalid: /* fail the current packet */
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(cp, len);
+}
diff --git a/print-ospf.c b/print-ospf.c
new file mode 100644
index 0000000..e6bebed
--- /dev/null
+++ b/print-ospf.c
@@ -0,0 +1,1178 @@
+/*
+ * Copyright (c) 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * OSPF support contributed by Jeffrey Honig (jch@mitchell.cit.cornell.edu)
+ */
+
+/* \summary: Open Shortest Path First (OSPF) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+#include "gmpls.h"
+
+#include "ospf.h"
+
+
+static const struct tok ospf_option_values[] = {
+ { OSPF_OPTION_MT, "MultiTopology" }, /* draft-ietf-ospf-mt-09 */
+ { OSPF_OPTION_E, "External" },
+ { OSPF_OPTION_MC, "Multicast" },
+ { OSPF_OPTION_NP, "NSSA" },
+ { OSPF_OPTION_L, "LLS" },
+ { OSPF_OPTION_DC, "Demand Circuit" },
+ { OSPF_OPTION_O, "Opaque" },
+ { OSPF_OPTION_DN, "Up/Down" },
+ { 0, NULL }
+};
+
+static const struct tok ospf_authtype_values[] = {
+ { OSPF_AUTH_NONE, "none" },
+ { OSPF_AUTH_SIMPLE, "simple" },
+ { OSPF_AUTH_MD5, "MD5" },
+ { 0, NULL }
+};
+
+static const struct tok ospf_rla_flag_values[] = {
+ { RLA_FLAG_B, "ABR" },
+ { RLA_FLAG_E, "ASBR" },
+ { RLA_FLAG_V, "Virtual" },
+ { RLA_FLAG_W, "Wildcard" },
+ { RLA_FLAG_NT, "Nt" },
+ { RLA_FLAG_H, "Host" },
+ { 0, NULL }
+};
+
+static const struct tok type2str[] = {
+ { OSPF_TYPE_HELLO, "Hello" },
+ { OSPF_TYPE_DD, "Database Description" },
+ { OSPF_TYPE_LS_REQ, "LS-Request" },
+ { OSPF_TYPE_LS_UPDATE, "LS-Update" },
+ { OSPF_TYPE_LS_ACK, "LS-Ack" },
+ { 0, NULL }
+};
+
+static const struct tok lsa_values[] = {
+ { LS_TYPE_ROUTER, "Router" },
+ { LS_TYPE_NETWORK, "Network" },
+ { LS_TYPE_SUM_IP, "Summary" },
+ { LS_TYPE_SUM_ABR, "ASBR Summary" },
+ { LS_TYPE_ASE, "External" },
+ { LS_TYPE_GROUP, "Multicast Group" },
+ { LS_TYPE_NSSA, "NSSA" },
+ { LS_TYPE_OPAQUE_LL, "Link Local Opaque" },
+ { LS_TYPE_OPAQUE_AL, "Area Local Opaque" },
+ { LS_TYPE_OPAQUE_DW, "Domain Wide Opaque" },
+ { 0, NULL }
+};
+
+static const struct tok ospf_dd_flag_values[] = {
+ { OSPF_DB_INIT, "Init" },
+ { OSPF_DB_MORE, "More" },
+ { OSPF_DB_MASTER, "Master" },
+ { OSPF_DB_RESYNC, "OOBResync" },
+ { 0, NULL }
+};
+
+static const struct tok lsa_opaque_values[] = {
+ { LS_OPAQUE_TYPE_TE, "Traffic Engineering" },
+ { LS_OPAQUE_TYPE_GRACE, "Graceful restart" },
+ { LS_OPAQUE_TYPE_RI, "Router Information" },
+ { 0, NULL }
+};
+
+static const struct tok lsa_opaque_te_tlv_values[] = {
+ { LS_OPAQUE_TE_TLV_ROUTER, "Router Address" },
+ { LS_OPAQUE_TE_TLV_LINK, "Link" },
+ { 0, NULL }
+};
+
+static const struct tok lsa_opaque_te_link_tlv_subtlv_values[] = {
+ { LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE, "Link Type" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_LINK_ID, "Link ID" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_LOCAL_IP, "Local Interface IP address" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_REMOTE_IP, "Remote Interface IP address" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_TE_METRIC, "Traffic Engineering Metric" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_MAX_BW, "Maximum Bandwidth" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_MAX_RES_BW, "Maximum Reservable Bandwidth" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_UNRES_BW, "Unreserved Bandwidth" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_ADMIN_GROUP, "Administrative Group" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_LINK_LOCAL_REMOTE_ID, "Link Local/Remote Identifier" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_LINK_PROTECTION_TYPE, "Link Protection Type" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_INTF_SW_CAP_DESCR, "Interface Switching Capability" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_SHARED_RISK_GROUP, "Shared Risk Link Group" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_BW_CONSTRAINTS, "Bandwidth Constraints" },
+ { 0, NULL }
+};
+
+static const struct tok lsa_opaque_grace_tlv_values[] = {
+ { LS_OPAQUE_GRACE_TLV_PERIOD, "Grace Period" },
+ { LS_OPAQUE_GRACE_TLV_REASON, "Graceful restart Reason" },
+ { LS_OPAQUE_GRACE_TLV_INT_ADDRESS, "IPv4 interface address" },
+ { 0, NULL }
+};
+
+static const struct tok lsa_opaque_grace_tlv_reason_values[] = {
+ { LS_OPAQUE_GRACE_TLV_REASON_UNKNOWN, "Unknown" },
+ { LS_OPAQUE_GRACE_TLV_REASON_SW_RESTART, "Software Restart" },
+ { LS_OPAQUE_GRACE_TLV_REASON_SW_UPGRADE, "Software Reload/Upgrade" },
+ { LS_OPAQUE_GRACE_TLV_REASON_CP_SWITCH, "Control Processor Switch" },
+ { 0, NULL }
+};
+
+static const struct tok lsa_opaque_te_tlv_link_type_sub_tlv_values[] = {
+ { LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE_PTP, "Point-to-point" },
+ { LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE_MA, "Multi-Access" },
+ { 0, NULL }
+};
+
+static const struct tok lsa_opaque_ri_tlv_values[] = {
+ { LS_OPAQUE_RI_TLV_CAP, "Router Capabilities" },
+ { 0, NULL }
+};
+
+static const struct tok lsa_opaque_ri_tlv_cap_values[] = {
+ { 1, "Reserved" },
+ { 2, "Reserved" },
+ { 4, "Reserved" },
+ { 8, "Reserved" },
+ { 16, "graceful restart capable" },
+ { 32, "graceful restart helper" },
+ { 64, "Stub router support" },
+ { 128, "Traffic engineering" },
+ { 256, "p2p over LAN" },
+ { 512, "path computation server" },
+ { 0, NULL }
+};
+
+static const struct tok ospf_lls_tlv_values[] = {
+ { OSPF_LLS_EO, "Extended Options" },
+ { OSPF_LLS_MD5, "MD5 Authentication" },
+ { 0, NULL }
+};
+
+static const struct tok ospf_lls_eo_options[] = {
+ { OSPF_LLS_EO_LR, "LSDB resync" },
+ { OSPF_LLS_EO_RS, "Restart" },
+ { 0, NULL }
+};
+
+int
+ospf_grace_lsa_print(netdissect_options *ndo,
+ const u_char *tptr, u_int ls_length)
+{
+ u_int tlv_type, tlv_length;
+
+
+ while (ls_length > 0) {
+ ND_TCHECK_4(tptr);
+ if (ls_length < 4) {
+ ND_PRINT("\n\t Remaining LS length %u < 4", ls_length);
+ return -1;
+ }
+ tlv_type = GET_BE_U_2(tptr);
+ tlv_length = GET_BE_U_2(tptr + 2);
+ tptr+=4;
+ ls_length-=4;
+
+ ND_PRINT("\n\t %s TLV (%u), length %u, value: ",
+ tok2str(lsa_opaque_grace_tlv_values,"unknown",tlv_type),
+ tlv_type,
+ tlv_length);
+
+ if (tlv_length > ls_length) {
+ ND_PRINT("\n\t Bogus length %u > %u", tlv_length,
+ ls_length);
+ return -1;
+ }
+
+ /* Infinite loop protection. */
+ if (tlv_type == 0 || tlv_length ==0) {
+ return -1;
+ }
+
+ ND_TCHECK_LEN(tptr, tlv_length);
+ switch(tlv_type) {
+
+ case LS_OPAQUE_GRACE_TLV_PERIOD:
+ if (tlv_length != 4) {
+ ND_PRINT("\n\t Bogus length %u != 4", tlv_length);
+ return -1;
+ }
+ ND_PRINT("%us", GET_BE_U_4(tptr));
+ break;
+
+ case LS_OPAQUE_GRACE_TLV_REASON:
+ if (tlv_length != 1) {
+ ND_PRINT("\n\t Bogus length %u != 1", tlv_length);
+ return -1;
+ }
+ ND_PRINT("%s (%u)",
+ tok2str(lsa_opaque_grace_tlv_reason_values, "Unknown", GET_U_1(tptr)),
+ GET_U_1(tptr));
+ break;
+
+ case LS_OPAQUE_GRACE_TLV_INT_ADDRESS:
+ if (tlv_length != 4) {
+ ND_PRINT("\n\t Bogus length %u != 4", tlv_length);
+ return -1;
+ }
+ ND_PRINT("%s", GET_IPADDR_STRING(tptr));
+ break;
+
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ if (!print_unknown_data(ndo, tptr, "\n\t ", tlv_length))
+ return -1;
+ }
+ break;
+
+ }
+ /* in OSPF everything has to be 32-bit aligned, including TLVs */
+ if (tlv_length%4 != 0)
+ tlv_length+=4-(tlv_length%4);
+ ls_length-=tlv_length;
+ tptr+=tlv_length;
+ }
+
+ return 0;
+trunc:
+ return -1;
+}
+
+int
+ospf_te_lsa_print(netdissect_options *ndo,
+ const u_char *tptr, u_int ls_length)
+{
+ u_int tlv_type, tlv_length, subtlv_type, subtlv_length;
+ u_int priority_level, te_class, count_srlg;
+ union { /* int to float conversion buffer for several subTLVs */
+ float f;
+ uint32_t i;
+ } bw;
+
+ while (ls_length != 0) {
+ ND_TCHECK_4(tptr);
+ if (ls_length < 4) {
+ ND_PRINT("\n\t Remaining LS length %u < 4", ls_length);
+ return -1;
+ }
+ tlv_type = GET_BE_U_2(tptr);
+ tlv_length = GET_BE_U_2(tptr + 2);
+ tptr+=4;
+ ls_length-=4;
+
+ ND_PRINT("\n\t %s TLV (%u), length: %u",
+ tok2str(lsa_opaque_te_tlv_values,"unknown",tlv_type),
+ tlv_type,
+ tlv_length);
+
+ if (tlv_length > ls_length) {
+ ND_PRINT("\n\t Bogus length %u > %u", tlv_length,
+ ls_length);
+ return -1;
+ }
+
+ /* Infinite loop protection. */
+ if (tlv_type == 0 || tlv_length ==0) {
+ return -1;
+ }
+
+ switch(tlv_type) {
+ case LS_OPAQUE_TE_TLV_LINK:
+ while (tlv_length != 0) {
+ if (tlv_length < 4) {
+ ND_PRINT("\n\t Remaining TLV length %u < 4",
+ tlv_length);
+ return -1;
+ }
+ subtlv_type = GET_BE_U_2(tptr);
+ subtlv_length = GET_BE_U_2(tptr + 2);
+ tptr+=4;
+ tlv_length-=4;
+
+ /* Infinite loop protection */
+ if (subtlv_type == 0 || subtlv_length == 0)
+ goto invalid;
+
+ ND_PRINT("\n\t %s subTLV (%u), length: %u",
+ tok2str(lsa_opaque_te_link_tlv_subtlv_values,"unknown",subtlv_type),
+ subtlv_type,
+ subtlv_length);
+
+ if (tlv_length < subtlv_length) {
+ ND_PRINT("\n\t Remaining TLV length %u < %u",
+ tlv_length + 4, subtlv_length + 4);
+ return -1;
+ }
+ ND_TCHECK_LEN(tptr, subtlv_length);
+ switch(subtlv_type) {
+ case LS_OPAQUE_TE_LINK_SUBTLV_ADMIN_GROUP:
+ if (subtlv_length != 4) {
+ ND_PRINT(" != 4");
+ goto invalid;
+ }
+ ND_PRINT(", 0x%08x", GET_BE_U_4(tptr));
+ break;
+ case LS_OPAQUE_TE_LINK_SUBTLV_LINK_ID:
+ case LS_OPAQUE_TE_LINK_SUBTLV_LINK_LOCAL_REMOTE_ID:
+ if (subtlv_length != 4 && subtlv_length != 8) {
+ ND_PRINT(" != 4 && != 8");
+ goto invalid;
+ }
+ ND_PRINT(", %s (0x%08x)",
+ GET_IPADDR_STRING(tptr),
+ GET_BE_U_4(tptr));
+ if (subtlv_length == 8) /* rfc4203 */
+ ND_PRINT(", %s (0x%08x)",
+ GET_IPADDR_STRING(tptr+4),
+ GET_BE_U_4(tptr + 4));
+ break;
+ case LS_OPAQUE_TE_LINK_SUBTLV_LOCAL_IP:
+ case LS_OPAQUE_TE_LINK_SUBTLV_REMOTE_IP:
+ if (subtlv_length != 4) {
+ ND_PRINT(" != 4");
+ goto invalid;
+ }
+ ND_PRINT(", %s", GET_IPADDR_STRING(tptr));
+ break;
+ case LS_OPAQUE_TE_LINK_SUBTLV_MAX_BW:
+ case LS_OPAQUE_TE_LINK_SUBTLV_MAX_RES_BW:
+ if (subtlv_length != 4) {
+ ND_PRINT(" != 4");
+ goto invalid;
+ }
+ bw.i = GET_BE_U_4(tptr);
+ ND_PRINT(", %.3f Mbps", bw.f * 8 / 1000000);
+ break;
+ case LS_OPAQUE_TE_LINK_SUBTLV_UNRES_BW:
+ if (subtlv_length != 32) {
+ ND_PRINT(" != 32");
+ goto invalid;
+ }
+ for (te_class = 0; te_class < 8; te_class++) {
+ bw.i = GET_BE_U_4(tptr + te_class * 4);
+ ND_PRINT("\n\t\tTE-Class %u: %.3f Mbps",
+ te_class,
+ bw.f * 8 / 1000000);
+ }
+ break;
+ case LS_OPAQUE_TE_LINK_SUBTLV_BW_CONSTRAINTS:
+ if (subtlv_length < 4) {
+ ND_PRINT(" < 4");
+ goto invalid;
+ }
+ /* BC Model Id (1 octet) + Reserved (3 octets) */
+ ND_PRINT("\n\t\tBandwidth Constraints Model ID: %s (%u)",
+ tok2str(diffserv_te_bc_values, "unknown", GET_U_1(tptr)),
+ GET_U_1(tptr));
+ if (subtlv_length % 4 != 0) {
+ ND_PRINT("\n\t\tlength %u != N x 4", subtlv_length);
+ goto invalid;
+ }
+ if (subtlv_length > 36) {
+ ND_PRINT("\n\t\tlength %u > 36", subtlv_length);
+ goto invalid;
+ }
+ /* decode BCs until the subTLV ends */
+ for (te_class = 0; te_class < (subtlv_length-4)/4; te_class++) {
+ bw.i = GET_BE_U_4(tptr + 4 + te_class * 4);
+ ND_PRINT("\n\t\t Bandwidth constraint CT%u: %.3f Mbps",
+ te_class,
+ bw.f * 8 / 1000000);
+ }
+ break;
+ case LS_OPAQUE_TE_LINK_SUBTLV_TE_METRIC:
+ if (subtlv_length != 4) {
+ ND_PRINT(" != 4");
+ goto invalid;
+ }
+ ND_PRINT(", Metric %u", GET_BE_U_4(tptr));
+ break;
+ case LS_OPAQUE_TE_LINK_SUBTLV_LINK_PROTECTION_TYPE:
+ /* Protection Cap (1 octet) + Reserved ((3 octets) */
+ if (subtlv_length != 4) {
+ ND_PRINT(" != 4");
+ goto invalid;
+ }
+ ND_PRINT(", %s",
+ bittok2str(gmpls_link_prot_values, "none", GET_U_1(tptr)));
+ break;
+ case LS_OPAQUE_TE_LINK_SUBTLV_INTF_SW_CAP_DESCR:
+ if (subtlv_length < 36) {
+ ND_PRINT(" < 36");
+ goto invalid;
+ }
+ /* Switching Cap (1 octet) + Encoding (1) + Reserved (2) */
+ ND_PRINT("\n\t\tInterface Switching Capability: %s",
+ tok2str(gmpls_switch_cap_values, "Unknown", GET_U_1((tptr))));
+ ND_PRINT("\n\t\tLSP Encoding: %s\n\t\tMax LSP Bandwidth:",
+ tok2str(gmpls_encoding_values, "Unknown", GET_U_1((tptr + 1))));
+ for (priority_level = 0; priority_level < 8; priority_level++) {
+ bw.i = GET_BE_U_4(tptr + 4 + (priority_level * 4));
+ ND_PRINT("\n\t\t priority level %u: %.3f Mbps",
+ priority_level,
+ bw.f * 8 / 1000000);
+ }
+ break;
+ case LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE:
+ if (subtlv_length != 1) {
+ ND_PRINT(" != 1");
+ goto invalid;
+ }
+ ND_PRINT(", %s (%u)",
+ tok2str(lsa_opaque_te_tlv_link_type_sub_tlv_values,"unknown",GET_U_1(tptr)),
+ GET_U_1(tptr));
+ break;
+
+ case LS_OPAQUE_TE_LINK_SUBTLV_SHARED_RISK_GROUP:
+ if (subtlv_length % 4 != 0) {
+ ND_PRINT(" != N x 4");
+ goto invalid;
+ }
+ count_srlg = subtlv_length / 4;
+ if (count_srlg != 0)
+ ND_PRINT("\n\t\t Shared risk group: ");
+ while (count_srlg > 0) {
+ bw.i = GET_BE_U_4(tptr);
+ ND_PRINT("%u", bw.i);
+ tptr+=4;
+ count_srlg--;
+ if (count_srlg > 0)
+ ND_PRINT(", ");
+ }
+ break;
+
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ if (!print_unknown_data(ndo, tptr, "\n\t\t", subtlv_length))
+ return -1;
+ }
+ break;
+ }
+ /* in OSPF everything has to be 32-bit aligned, including subTLVs */
+ if (subtlv_length%4 != 0)
+ subtlv_length+=4-(subtlv_length%4);
+
+ if (tlv_length < subtlv_length) {
+ ND_PRINT("\n\t Remaining TLV length %u < %u",
+ tlv_length + 4, subtlv_length + 4);
+ return -1;
+ }
+ tlv_length-=subtlv_length;
+ tptr+=subtlv_length;
+
+ }
+ break;
+
+ case LS_OPAQUE_TE_TLV_ROUTER:
+ if (tlv_length < 4) {
+ ND_PRINT("\n\t TLV length %u < 4", tlv_length);
+ return -1;
+ }
+ ND_PRINT(", %s", GET_IPADDR_STRING(tptr));
+ break;
+
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ if (!print_unknown_data(ndo, tptr, "\n\t ", tlv_length))
+ return -1;
+ }
+ break;
+ }
+ /* in OSPF everything has to be 32-bit aligned, including TLVs */
+ if (tlv_length%4 != 0)
+ tlv_length+=4-(tlv_length%4);
+ if (tlv_length > ls_length) {
+ ND_PRINT("\n\t Bogus padded length %u > %u", tlv_length,
+ ls_length);
+ return -1;
+ }
+ ls_length-=tlv_length;
+ tptr+=tlv_length;
+ }
+ return 0;
+trunc:
+ return -1;
+invalid:
+ nd_print_invalid(ndo);
+ return -1;
+}
+
+static int
+ospf_print_lshdr(netdissect_options *ndo,
+ const struct lsa_hdr *lshp)
+{
+ u_int ls_type;
+ u_int ls_length;
+
+ ls_length = GET_BE_U_2(lshp->ls_length);
+ if (ls_length < sizeof(struct lsa_hdr)) {
+ ND_PRINT("\n\t Bogus length %u < header (%zu)", ls_length,
+ sizeof(struct lsa_hdr));
+ return(-1);
+ }
+ ND_PRINT("\n\t Advertising Router %s, seq 0x%08x, age %us, length %zu",
+ GET_IPADDR_STRING(lshp->ls_router),
+ GET_BE_U_4(lshp->ls_seq),
+ GET_BE_U_2(lshp->ls_age),
+ ls_length - sizeof(struct lsa_hdr));
+ ls_type = GET_U_1(lshp->ls_type);
+ switch (ls_type) {
+ /* the LSA header for opaque LSAs was slightly changed */
+ case LS_TYPE_OPAQUE_LL:
+ case LS_TYPE_OPAQUE_AL:
+ case LS_TYPE_OPAQUE_DW:
+ ND_PRINT("\n\t %s LSA (%u), Opaque-Type %s LSA (%u), Opaque-ID %u",
+ tok2str(lsa_values,"unknown",ls_type),
+ ls_type,
+
+ tok2str(lsa_opaque_values,
+ "unknown",
+ GET_U_1(lshp->un_lsa_id.opaque_field.opaque_type)),
+ GET_U_1(lshp->un_lsa_id.opaque_field.opaque_type),
+ GET_BE_U_3(lshp->un_lsa_id.opaque_field.opaque_id)
+
+ );
+ break;
+
+ /* all other LSA types use regular style LSA headers */
+ default:
+ ND_PRINT("\n\t %s LSA (%u), LSA-ID: %s",
+ tok2str(lsa_values,"unknown",ls_type),
+ ls_type,
+ GET_IPADDR_STRING(lshp->un_lsa_id.lsa_id));
+ break;
+ }
+ ND_PRINT("\n\t Options: [%s]",
+ bittok2str(ospf_option_values, "none", GET_U_1(lshp->ls_options)));
+
+ return (ls_length);
+}
+
+/* draft-ietf-ospf-mt-09 */
+static const struct tok ospf_topology_values[] = {
+ { 0, "default" },
+ { 1, "multicast" },
+ { 2, "management" },
+ { 0, NULL }
+};
+
+/*
+ * Print all the per-topology metrics.
+ */
+static void
+ospf_print_tos_metrics(netdissect_options *ndo,
+ const union un_tos *tos)
+{
+ u_int metric_count;
+ u_int toscount;
+ u_int tos_type;
+
+ toscount = GET_U_1(tos->link.link_tos_count)+1;
+ metric_count = 0;
+
+ /*
+ * All but the first metric contain a valid topology id.
+ */
+ while (toscount != 0) {
+ tos_type = GET_U_1(tos->metrics.tos_type);
+ ND_PRINT("\n\t\ttopology %s (%u), metric %u",
+ tok2str(ospf_topology_values, "Unknown",
+ metric_count ? tos_type : 0),
+ metric_count ? tos_type : 0,
+ GET_BE_U_2(tos->metrics.tos_metric));
+ metric_count++;
+ tos++;
+ toscount--;
+ }
+}
+
+/*
+ * Print a single link state advertisement. If truncated or if LSA length
+ * field is less than the length of the LSA header, return NULl, else
+ * return pointer to data past end of LSA.
+ */
+static const uint8_t *
+ospf_print_lsa(netdissect_options *ndo,
+ const struct lsa *lsap)
+{
+ const uint8_t *ls_end;
+ const struct rlalink *rlp;
+ const nd_ipv4 *ap;
+ const struct aslametric *almp;
+ const struct mcla *mcp;
+ const uint8_t *lp;
+ u_int tlv_type, tlv_length, rla_count, topology;
+ int ospf_print_lshdr_ret;
+ u_int ls_length;
+ const uint8_t *tptr;
+
+ tptr = (const uint8_t *)lsap->lsa_un.un_unknown; /* squelch compiler warnings */
+ ospf_print_lshdr_ret = ospf_print_lshdr(ndo, &lsap->ls_hdr);
+ if (ospf_print_lshdr_ret < 0)
+ return(NULL);
+ ls_length = (u_int)ospf_print_lshdr_ret;
+ ls_end = (const uint8_t *)lsap + ls_length;
+ /*
+ * ospf_print_lshdr() returns -1 if the length is too short,
+ * so we know ls_length is >= sizeof(struct lsa_hdr).
+ */
+ ls_length -= sizeof(struct lsa_hdr);
+
+ switch (GET_U_1(lsap->ls_hdr.ls_type)) {
+
+ case LS_TYPE_ROUTER:
+ ND_PRINT("\n\t Router LSA Options: [%s]",
+ bittok2str(ospf_rla_flag_values, "none", GET_U_1(lsap->lsa_un.un_rla.rla_flags)));
+
+ rla_count = GET_BE_U_2(lsap->lsa_un.un_rla.rla_count);
+ ND_TCHECK_SIZE(lsap->lsa_un.un_rla.rla_link);
+ rlp = lsap->lsa_un.un_rla.rla_link;
+ for (u_int i = rla_count; i != 0; i--) {
+ ND_TCHECK_SIZE(rlp);
+ switch (GET_U_1(rlp->un_tos.link.link_type)) {
+
+ case RLA_TYPE_VIRTUAL:
+ ND_PRINT("\n\t Virtual Link: Neighbor Router-ID: %s, Interface Address: %s",
+ GET_IPADDR_STRING(rlp->link_id),
+ GET_IPADDR_STRING(rlp->link_data));
+ break;
+
+ case RLA_TYPE_ROUTER:
+ ND_PRINT("\n\t Neighbor Router-ID: %s, Interface Address: %s",
+ GET_IPADDR_STRING(rlp->link_id),
+ GET_IPADDR_STRING(rlp->link_data));
+ break;
+
+ case RLA_TYPE_TRANSIT:
+ ND_PRINT("\n\t Neighbor Network-ID: %s, Interface Address: %s",
+ GET_IPADDR_STRING(rlp->link_id),
+ GET_IPADDR_STRING(rlp->link_data));
+ break;
+
+ case RLA_TYPE_STUB:
+ ND_PRINT("\n\t Stub Network: %s, Mask: %s",
+ GET_IPADDR_STRING(rlp->link_id),
+ GET_IPADDR_STRING(rlp->link_data));
+ break;
+
+ default:
+ ND_PRINT("\n\t Unknown Router Link Type (%u)",
+ GET_U_1(rlp->un_tos.link.link_type));
+ return (ls_end);
+ }
+
+ ospf_print_tos_metrics(ndo, &rlp->un_tos);
+
+ rlp = (const struct rlalink *)((const u_char *)(rlp + 1) +
+ (GET_U_1(rlp->un_tos.link.link_tos_count) * sizeof(union un_tos)));
+ }
+ break;
+
+ case LS_TYPE_NETWORK:
+ ND_PRINT("\n\t Mask %s\n\t Connected Routers:",
+ GET_IPADDR_STRING(lsap->lsa_un.un_nla.nla_mask));
+ ap = lsap->lsa_un.un_nla.nla_router;
+ while ((const u_char *)ap < ls_end) {
+ ND_PRINT("\n\t %s", GET_IPADDR_STRING(ap));
+ ++ap;
+ }
+ break;
+
+ case LS_TYPE_SUM_IP:
+ ND_TCHECK_4(lsap->lsa_un.un_nla.nla_mask);
+ ND_PRINT("\n\t Mask %s",
+ GET_IPADDR_STRING(lsap->lsa_un.un_sla.sla_mask));
+ ND_TCHECK_SIZE(lsap->lsa_un.un_sla.sla_tosmetric);
+ lp = (const uint8_t *)lsap->lsa_un.un_sla.sla_tosmetric;
+ while (lp < ls_end) {
+ uint32_t ul;
+
+ ul = GET_BE_U_4(lp);
+ topology = (ul & SLA_MASK_TOS) >> SLA_SHIFT_TOS;
+ ND_PRINT("\n\t\ttopology %s (%u) metric %u",
+ tok2str(ospf_topology_values, "Unknown", topology),
+ topology,
+ ul & SLA_MASK_METRIC);
+ lp += 4;
+ }
+ break;
+
+ case LS_TYPE_SUM_ABR:
+ ND_TCHECK_SIZE(lsap->lsa_un.un_sla.sla_tosmetric);
+ lp = (const uint8_t *)lsap->lsa_un.un_sla.sla_tosmetric;
+ while (lp < ls_end) {
+ uint32_t ul;
+
+ ul = GET_BE_U_4(lp);
+ topology = (ul & SLA_MASK_TOS) >> SLA_SHIFT_TOS;
+ ND_PRINT("\n\t\ttopology %s (%u) metric %u",
+ tok2str(ospf_topology_values, "Unknown", topology),
+ topology,
+ ul & SLA_MASK_METRIC);
+ lp += 4;
+ }
+ break;
+
+ case LS_TYPE_ASE:
+ case LS_TYPE_NSSA: /* fall through - those LSAs share the same format */
+ ND_TCHECK_4(lsap->lsa_un.un_nla.nla_mask);
+ ND_PRINT("\n\t Mask %s",
+ GET_IPADDR_STRING(lsap->lsa_un.un_asla.asla_mask));
+
+ ND_TCHECK_SIZE(lsap->lsa_un.un_sla.sla_tosmetric);
+ almp = lsap->lsa_un.un_asla.asla_metric;
+ while ((const u_char *)almp < ls_end) {
+ uint32_t ul;
+
+ ul = GET_BE_U_4(almp->asla_tosmetric);
+ topology = ((ul & ASLA_MASK_TOS) >> ASLA_SHIFT_TOS);
+ ND_PRINT("\n\t\ttopology %s (%u), type %u, metric",
+ tok2str(ospf_topology_values, "Unknown", topology),
+ topology,
+ (ul & ASLA_FLAG_EXTERNAL) ? 2 : 1);
+ if ((ul & ASLA_MASK_METRIC) == 0xffffff)
+ ND_PRINT(" infinite");
+ else
+ ND_PRINT(" %u", (ul & ASLA_MASK_METRIC));
+
+ if (GET_IPV4_TO_NETWORK_ORDER(almp->asla_forward) != 0) {
+ ND_PRINT(", forward %s", GET_IPADDR_STRING(almp->asla_forward));
+ }
+ if (GET_IPV4_TO_NETWORK_ORDER(almp->asla_tag) != 0) {
+ ND_PRINT(", tag %s", GET_IPADDR_STRING(almp->asla_tag));
+ }
+ ++almp;
+ }
+ break;
+
+ case LS_TYPE_GROUP:
+ /* Multicast extensions as of 23 July 1991 */
+ mcp = lsap->lsa_un.un_mcla;
+ while ((const u_char *)mcp < ls_end) {
+ switch (GET_BE_U_4(mcp->mcla_vtype)) {
+
+ case MCLA_VERTEX_ROUTER:
+ ND_PRINT("\n\t Router Router-ID %s",
+ GET_IPADDR_STRING(mcp->mcla_vid));
+ break;
+
+ case MCLA_VERTEX_NETWORK:
+ ND_PRINT("\n\t Network Designated Router %s",
+ GET_IPADDR_STRING(mcp->mcla_vid));
+ break;
+
+ default:
+ ND_PRINT("\n\t unknown VertexType (%u)",
+ GET_BE_U_4(mcp->mcla_vtype));
+ break;
+ }
+ ++mcp;
+ }
+ break;
+
+ case LS_TYPE_OPAQUE_LL: /* fall through */
+ case LS_TYPE_OPAQUE_AL:
+ case LS_TYPE_OPAQUE_DW:
+
+ switch (GET_U_1(lsap->ls_hdr.un_lsa_id.opaque_field.opaque_type)) {
+ case LS_OPAQUE_TYPE_RI:
+ tptr = (const uint8_t *)(lsap->lsa_un.un_ri_tlv);
+
+ u_int ls_length_remaining = ls_length;
+ while (ls_length_remaining != 0) {
+ ND_TCHECK_4(tptr);
+ if (ls_length_remaining < 4) {
+ ND_PRINT("\n\t Remaining LS length %u < 4", ls_length_remaining);
+ return(ls_end);
+ }
+ tlv_type = GET_BE_U_2(tptr);
+ tlv_length = GET_BE_U_2(tptr + 2);
+ tptr+=4;
+ ls_length_remaining-=4;
+
+ ND_PRINT("\n\t %s TLV (%u), length: %u, value: ",
+ tok2str(lsa_opaque_ri_tlv_values,"unknown",tlv_type),
+ tlv_type,
+ tlv_length);
+
+ if (tlv_length > ls_length_remaining) {
+ ND_PRINT("\n\t Bogus length %u > remaining LS length %u", tlv_length,
+ ls_length_remaining);
+ return(ls_end);
+ }
+ ND_TCHECK_LEN(tptr, tlv_length);
+ switch(tlv_type) {
+
+ case LS_OPAQUE_RI_TLV_CAP:
+ if (tlv_length != 4) {
+ ND_PRINT("\n\t Bogus length %u != 4", tlv_length);
+ return(ls_end);
+ }
+ ND_PRINT("Capabilities: %s",
+ bittok2str(lsa_opaque_ri_tlv_cap_values, "Unknown", GET_BE_U_4(tptr)));
+ break;
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ if (!print_unknown_data(ndo, tptr, "\n\t ", tlv_length))
+ return(ls_end);
+ }
+ break;
+
+ }
+ tptr+=tlv_length;
+ ls_length_remaining-=tlv_length;
+ }
+ break;
+
+ case LS_OPAQUE_TYPE_GRACE:
+ if (ospf_grace_lsa_print(ndo, (const u_char *)(lsap->lsa_un.un_grace_tlv),
+ ls_length) == -1) {
+ return(ls_end);
+ }
+ break;
+
+ case LS_OPAQUE_TYPE_TE:
+ if (ospf_te_lsa_print(ndo, (const u_char *)(lsap->lsa_un.un_te_lsa_tlv),
+ ls_length) == -1) {
+ return(ls_end);
+ }
+ break;
+
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ if (!print_unknown_data(ndo, (const uint8_t *)lsap->lsa_un.un_unknown,
+ "\n\t ", ls_length))
+ return(ls_end);
+ }
+ break;
+ }
+ }
+
+ /* do we want to see an additionally hexdump ? */
+ if (ndo->ndo_vflag> 1)
+ if (!print_unknown_data(ndo, (const uint8_t *)lsap->lsa_un.un_unknown,
+ "\n\t ", ls_length)) {
+ return(ls_end);
+ }
+
+ return (ls_end);
+trunc:
+ return (NULL);
+}
+
+static void
+ospf_decode_lls(netdissect_options *ndo,
+ const struct ospfhdr *op, u_int length)
+{
+ const u_char *dptr;
+ const u_char *dataend;
+ u_int length2;
+ uint16_t lls_type, lls_len;
+ uint32_t lls_flags;
+
+ switch (GET_U_1(op->ospf_type)) {
+
+ case OSPF_TYPE_HELLO:
+ if (!(GET_U_1(op->ospf_hello.hello_options) & OSPF_OPTION_L))
+ return;
+ break;
+
+ case OSPF_TYPE_DD:
+ if (!(GET_U_1(op->ospf_db.db_options) & OSPF_OPTION_L))
+ return;
+ break;
+
+ default:
+ return;
+ }
+
+ /* dig deeper if LLS data is available; see RFC4813 */
+ length2 = GET_BE_U_2(op->ospf_len);
+ dptr = (const u_char *)op + length2;
+ dataend = (const u_char *)op + length;
+
+ if (GET_BE_U_2(op->ospf_authtype) == OSPF_AUTH_MD5) {
+ dptr = dptr + GET_U_1(op->ospf_authdata + 3);
+ length2 += GET_U_1(op->ospf_authdata + 3);
+ }
+ if (length2 >= length) {
+ ND_PRINT("\n\t[LLS truncated]");
+ return;
+ }
+ ND_PRINT("\n\t LLS: checksum: 0x%04x", (u_int) GET_BE_U_2(dptr));
+
+ dptr += 2;
+ length2 = GET_BE_U_2(dptr);
+ ND_PRINT(", length: %u", length2);
+
+ dptr += 2;
+ while (dptr < dataend) {
+ lls_type = GET_BE_U_2(dptr);
+ ND_PRINT("\n\t %s (%u)",
+ tok2str(ospf_lls_tlv_values,"Unknown TLV",lls_type),
+ lls_type);
+ dptr += 2;
+ lls_len = GET_BE_U_2(dptr);
+ ND_PRINT(", length: %u", lls_len);
+ dptr += 2;
+ switch (lls_type) {
+
+ case OSPF_LLS_EO:
+ if (lls_len != 4) {
+ ND_PRINT(" [should be 4]");
+ lls_len = 4;
+ }
+ lls_flags = GET_BE_U_4(dptr);
+ ND_PRINT("\n\t Options: 0x%08x [%s]", lls_flags,
+ bittok2str(ospf_lls_eo_options, "?", lls_flags));
+
+ break;
+
+ case OSPF_LLS_MD5:
+ if (lls_len != 20) {
+ ND_PRINT(" [should be 20]");
+ lls_len = 20;
+ }
+ ND_PRINT("\n\t Sequence number: 0x%08x", GET_BE_U_4(dptr));
+ break;
+ }
+
+ dptr += lls_len;
+ }
+}
+
+static int
+ospf_decode_v2(netdissect_options *ndo,
+ const struct ospfhdr *op, const u_char *dataend)
+{
+ const nd_ipv4 *ap;
+ const struct lsr *lsrp;
+ const struct lsa_hdr *lshp;
+ const struct lsa *lsap;
+ uint32_t lsa_count,lsa_count_max;
+
+ switch (GET_U_1(op->ospf_type)) {
+
+ case OSPF_TYPE_HELLO:
+ ND_PRINT("\n\tOptions [%s]",
+ bittok2str(ospf_option_values,"none",GET_U_1(op->ospf_hello.hello_options)));
+
+ ND_PRINT("\n\t Hello Timer %us, Dead Timer %us, Mask %s, Priority %u",
+ GET_BE_U_2(op->ospf_hello.hello_helloint),
+ GET_BE_U_4(op->ospf_hello.hello_deadint),
+ GET_IPADDR_STRING(op->ospf_hello.hello_mask),
+ GET_U_1(op->ospf_hello.hello_priority));
+
+ if (GET_IPV4_TO_NETWORK_ORDER(op->ospf_hello.hello_dr) != 0)
+ ND_PRINT("\n\t Designated Router %s",
+ GET_IPADDR_STRING(op->ospf_hello.hello_dr));
+
+ if (GET_IPV4_TO_NETWORK_ORDER(op->ospf_hello.hello_bdr) != 0)
+ ND_PRINT(", Backup Designated Router %s",
+ GET_IPADDR_STRING(op->ospf_hello.hello_bdr));
+
+ ap = op->ospf_hello.hello_neighbor;
+ if ((const u_char *)ap < dataend)
+ ND_PRINT("\n\t Neighbor List:");
+ while ((const u_char *)ap < dataend) {
+ ND_PRINT("\n\t %s", GET_IPADDR_STRING(ap));
+ ++ap;
+ }
+ break; /* HELLO */
+
+ case OSPF_TYPE_DD:
+ ND_PRINT("\n\tOptions [%s]",
+ bittok2str(ospf_option_values, "none", GET_U_1(op->ospf_db.db_options)));
+ ND_PRINT(", DD Flags [%s]",
+ bittok2str(ospf_dd_flag_values, "none", GET_U_1(op->ospf_db.db_flags)));
+ if (GET_BE_U_2(op->ospf_db.db_ifmtu)) {
+ ND_PRINT(", MTU: %u",
+ GET_BE_U_2(op->ospf_db.db_ifmtu));
+ }
+ ND_PRINT(", Sequence: 0x%08x", GET_BE_U_4(op->ospf_db.db_seq));
+
+ /* Print all the LS adv's */
+ lshp = op->ospf_db.db_lshdr;
+ while (((const u_char *)lshp < dataend) && ospf_print_lshdr(ndo, lshp) != -1) {
+ ++lshp;
+ }
+ break;
+
+ case OSPF_TYPE_LS_REQ:
+ lsrp = op->ospf_lsr;
+ while ((const u_char *)lsrp < dataend) {
+ ND_TCHECK_SIZE(lsrp);
+
+ ND_PRINT("\n\t Advertising Router: %s, %s LSA (%u)",
+ GET_IPADDR_STRING(lsrp->ls_router),
+ tok2str(lsa_values,"unknown",GET_BE_U_4(lsrp->ls_type)),
+ GET_BE_U_4(lsrp->ls_type));
+
+ switch (GET_BE_U_4(lsrp->ls_type)) {
+ /* the LSA header for opaque LSAs was slightly changed */
+ case LS_TYPE_OPAQUE_LL:
+ case LS_TYPE_OPAQUE_AL:
+ case LS_TYPE_OPAQUE_DW:
+ ND_PRINT(", Opaque-Type: %s LSA (%u), Opaque-ID: %u",
+ tok2str(lsa_opaque_values, "unknown",GET_U_1(lsrp->un_ls_stateid.opaque_field.opaque_type)),
+ GET_U_1(lsrp->un_ls_stateid.opaque_field.opaque_type),
+ GET_BE_U_3(lsrp->un_ls_stateid.opaque_field.opaque_id));
+ break;
+ default:
+ ND_PRINT(", LSA-ID: %s",
+ GET_IPADDR_STRING(lsrp->un_ls_stateid.ls_stateid));
+ break;
+ }
+
+ ++lsrp;
+ }
+ break;
+
+ case OSPF_TYPE_LS_UPDATE:
+ lsap = op->ospf_lsu.lsu_lsa;
+ lsa_count_max = GET_BE_U_4(op->ospf_lsu.lsu_count);
+ ND_PRINT(", %u LSA%s", lsa_count_max, PLURAL_SUFFIX(lsa_count_max));
+ for (lsa_count=1;lsa_count <= lsa_count_max;lsa_count++) {
+ ND_PRINT("\n\t LSA #%u", lsa_count);
+ lsap = (const struct lsa *)ospf_print_lsa(ndo, lsap);
+ if (lsap == NULL)
+ goto trunc;
+ }
+ break;
+
+ case OSPF_TYPE_LS_ACK:
+ lshp = op->ospf_lsa.lsa_lshdr;
+ while (ospf_print_lshdr(ndo, lshp) != -1) {
+ ++lshp;
+ }
+ break;
+
+ default:
+ break;
+ }
+ return (0);
+trunc:
+ return (1);
+}
+
+void
+ospf_print(netdissect_options *ndo,
+ const u_char *bp, u_int length,
+ const u_char *bp2 _U_)
+{
+ const struct ospfhdr *op;
+ const u_char *dataend;
+ const char *cp;
+
+ ndo->ndo_protocol = "ospf2";
+ op = (const struct ospfhdr *)bp;
+
+ /* XXX Before we do anything else, strip off the MD5 trailer */
+ if (GET_BE_U_2(op->ospf_authtype) == OSPF_AUTH_MD5) {
+ length -= OSPF_AUTH_MD5_LEN;
+ ndo->ndo_snapend -= OSPF_AUTH_MD5_LEN;
+ }
+
+ /* If the type is valid translate it, or just print the type */
+ /* value. If it's not valid, say so and return */
+ cp = tok2str(type2str, "unknown LS-type %u", GET_U_1(op->ospf_type));
+ ND_PRINT("OSPFv%u, %s, length %u", GET_U_1(op->ospf_version), cp,
+ length);
+ if (*cp == 'u')
+ return;
+
+ if (!ndo->ndo_vflag) { /* non verbose - so lets bail out here */
+ return;
+ }
+
+ if (length != GET_BE_U_2(op->ospf_len)) {
+ ND_PRINT(" [len %u]", GET_BE_U_2(op->ospf_len));
+ }
+
+ if (length > GET_BE_U_2(op->ospf_len)) {
+ dataend = bp + GET_BE_U_2(op->ospf_len);
+ } else {
+ dataend = bp + length;
+ }
+
+ ND_PRINT("\n\tRouter-ID %s", GET_IPADDR_STRING(op->ospf_routerid));
+
+ if (GET_IPV4_TO_NETWORK_ORDER(op->ospf_areaid) != 0)
+ ND_PRINT(", Area %s", GET_IPADDR_STRING(op->ospf_areaid));
+ else
+ ND_PRINT(", Backbone Area");
+
+ if (ndo->ndo_vflag) {
+ /* Print authentication data (should we really do this?) */
+ ND_TCHECK_LEN(op->ospf_authdata, sizeof(op->ospf_authdata));
+
+ ND_PRINT(", Authentication Type: %s (%u)",
+ tok2str(ospf_authtype_values, "unknown", GET_BE_U_2(op->ospf_authtype)),
+ GET_BE_U_2(op->ospf_authtype));
+
+ switch (GET_BE_U_2(op->ospf_authtype)) {
+
+ case OSPF_AUTH_NONE:
+ break;
+
+ case OSPF_AUTH_SIMPLE:
+ ND_PRINT("\n\tSimple text password: ");
+ nd_printjnp(ndo, op->ospf_authdata, OSPF_AUTH_SIMPLE_LEN);
+ break;
+
+ case OSPF_AUTH_MD5:
+ ND_PRINT("\n\tKey-ID: %u, Auth-Length: %u, Crypto Sequence Number: 0x%08x",
+ GET_U_1(op->ospf_authdata + 2),
+ GET_U_1(op->ospf_authdata + 3),
+ GET_BE_U_4((op->ospf_authdata) + 4));
+ break;
+
+ default:
+ return;
+ }
+ }
+ /* Do rest according to version. */
+ switch (GET_U_1(op->ospf_version)) {
+
+ case 2:
+ /* ospf version 2 */
+ if (ospf_decode_v2(ndo, op, dataend))
+ goto trunc;
+ if (length > GET_BE_U_2(op->ospf_len))
+ ospf_decode_lls(ndo, op, length);
+ break;
+
+ default:
+ ND_PRINT(" ospf [version %u]", GET_U_1(op->ospf_version));
+ break;
+ } /* end switch on version */
+
+ return;
+trunc:
+ nd_trunc_longjmp(ndo);
+}
diff --git a/print-ospf6.c b/print-ospf6.c
new file mode 100644
index 0000000..4916795
--- /dev/null
+++ b/print-ospf6.c
@@ -0,0 +1,1002 @@
+/*
+ * Copyright (c) 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * OSPF support contributed by Jeffrey Honig (jch@mitchell.cit.cornell.edu)
+ */
+
+/* \summary: IPv6 Open Shortest Path First (OSPFv3) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ospf.h"
+
+#define OSPF_TYPE_HELLO 1 /* Hello */
+#define OSPF_TYPE_DD 2 /* Database Description */
+#define OSPF_TYPE_LS_REQ 3 /* Link State Request */
+#define OSPF_TYPE_LS_UPDATE 4 /* Link State Update */
+#define OSPF_TYPE_LS_ACK 5 /* Link State Ack */
+
+/* Options *_options */
+#define OSPF6_OPTION_V6 0x01 /* V6 bit: A bit for peeping tom */
+#define OSPF6_OPTION_E 0x02 /* E bit: External routes advertised */
+#define OSPF6_OPTION_MC 0x04 /* MC bit: Multicast capable */
+#define OSPF6_OPTION_N 0x08 /* N bit: For type-7 LSA */
+#define OSPF6_OPTION_R 0x10 /* R bit: Router bit */
+#define OSPF6_OPTION_DC 0x20 /* DC bit: Demand circuits */
+/* The field is actually 24-bit (RFC5340 Section A.2). */
+#define OSPF6_OPTION_AF 0x0100 /* AF bit: Multiple address families */
+#define OSPF6_OPTION_L 0x0200 /* L bit: Link-local signaling (LLS) */
+#define OSPF6_OPTION_AT 0x0400 /* AT bit: Authentication trailer */
+
+
+/* db_flags */
+#define OSPF6_DB_INIT 0x04 /* */
+#define OSPF6_DB_MORE 0x02
+#define OSPF6_DB_MASTER 0x01
+#define OSPF6_DB_M6 0x10 /* IPv6 MTU */
+
+/* ls_type */
+#define LS_TYPE_ROUTER 1 /* router link */
+#define LS_TYPE_NETWORK 2 /* network link */
+#define LS_TYPE_INTER_AP 3 /* Inter-Area-Prefix */
+#define LS_TYPE_INTER_AR 4 /* Inter-Area-Router */
+#define LS_TYPE_ASE 5 /* ASE */
+#define LS_TYPE_GROUP 6 /* Group membership */
+#define LS_TYPE_NSSA 7 /* NSSA */
+#define LS_TYPE_LINK 8 /* Link LSA */
+#define LS_TYPE_INTRA_AP 9 /* Intra-Area-Prefix */
+#define LS_TYPE_INTRA_ATE 10 /* Intra-Area-TE */
+#define LS_TYPE_GRACE 11 /* Grace LSA */
+#define LS_TYPE_RI 12 /* Router information */
+#define LS_TYPE_INTER_ASTE 13 /* Inter-AS-TE */
+#define LS_TYPE_L1VPN 14 /* L1VPN */
+#define LS_TYPE_MASK 0x1fff
+
+#define LS_SCOPE_LINKLOCAL 0x0000
+#define LS_SCOPE_AREA 0x2000
+#define LS_SCOPE_AS 0x4000
+#define LS_SCOPE_MASK 0x6000
+#define LS_SCOPE_U 0x8000
+
+/* rla_link.link_type */
+#define RLA_TYPE_ROUTER 1 /* point-to-point to another router */
+#define RLA_TYPE_TRANSIT 2 /* connection to transit network */
+#define RLA_TYPE_VIRTUAL 4 /* virtual link */
+
+/* rla_flags */
+#define RLA_FLAG_B 0x01
+#define RLA_FLAG_E 0x02
+#define RLA_FLAG_V 0x04
+#define RLA_FLAG_W 0x08
+#define RLA_FLAG_Nt 0x10
+
+/* lsa_prefix options */
+#define LSA_PREFIX_OPT_NU 0x01
+#define LSA_PREFIX_OPT_LA 0x02
+#define LSA_PREFIX_OPT_MC 0x04
+#define LSA_PREFIX_OPT_P 0x08
+#define LSA_PREFIX_OPT_DN 0x10
+#define LSA_PREFIX_OPT_N 0x20
+
+/* sla_tosmetric breakdown */
+#define SLA_MASK_TOS 0x7f000000
+#define SLA_MASK_METRIC 0x00ffffff
+#define SLA_SHIFT_TOS 24
+
+/* asla_metric */
+#define ASLA_FLAG_FWDADDR 0x02000000
+#define ASLA_FLAG_ROUTETAG 0x01000000
+#define ASLA_MASK_METRIC 0x00ffffff
+
+/* RFC6506 Section 4.1 */
+#define OSPF6_AT_HDRLEN 16U
+#define OSPF6_AUTH_TYPE_HMAC 0x0001
+
+typedef nd_uint32_t rtrid_t;
+
+/* link state advertisement header */
+struct lsa6_hdr {
+ nd_uint16_t ls_age;
+ nd_uint16_t ls_type;
+ rtrid_t ls_stateid;
+ rtrid_t ls_router;
+ nd_uint32_t ls_seq;
+ nd_uint16_t ls_chksum;
+ nd_uint16_t ls_length;
+};
+
+/* Length of an IPv6 address, in bytes. */
+#define IPV6_ADDR_LEN_BYTES (128/8)
+
+struct lsa6_prefix {
+ nd_uint8_t lsa_p_len;
+ nd_uint8_t lsa_p_opt;
+ nd_uint16_t lsa_p_metric;
+ nd_byte lsa_p_prefix[IPV6_ADDR_LEN_BYTES]; /* maximum length */
+};
+
+/* link state advertisement */
+struct lsa6 {
+ struct lsa6_hdr ls_hdr;
+
+ /* Link state types */
+ union {
+ /* Router links advertisements */
+ struct {
+ union {
+ nd_uint8_t flg;
+ nd_uint32_t opt;
+ } rla_flgandopt;
+#define rla_flags rla_flgandopt.flg
+#define rla_options rla_flgandopt.opt
+ struct rlalink6 {
+ nd_uint8_t link_type;
+ nd_byte link_zero;
+ nd_uint16_t link_metric;
+ nd_uint32_t link_ifid;
+ nd_uint32_t link_nifid;
+ rtrid_t link_nrtid;
+ } rla_link[1]; /* may repeat */
+ } un_rla;
+
+ /* Network links advertisements */
+ struct {
+ nd_uint32_t nla_options;
+ rtrid_t nla_router[1]; /* may repeat */
+ } un_nla;
+
+ /* Inter Area Prefix LSA */
+ struct {
+ nd_uint32_t inter_ap_metric;
+ struct lsa6_prefix inter_ap_prefix[1];
+ } un_inter_ap;
+
+ /* AS external links advertisements */
+ struct {
+ nd_uint32_t asla_metric;
+ struct lsa6_prefix asla_prefix[1];
+ /* some optional fields follow */
+ } un_asla;
+
+#if 0
+ /* Summary links advertisements */
+ struct {
+ nd_ipv4 sla_mask;
+ nd_uint32_t sla_tosmetric[1]; /* may repeat */
+ } un_sla;
+
+ /* Multicast group membership */
+ struct mcla {
+ nd_uint32_t mcla_vtype;
+ nd_ipv4 mcla_vid;
+ } un_mcla[1];
+#endif
+
+ /* Type 7 LSA */
+
+ /* Link LSA */
+ struct llsa {
+ union {
+ nd_uint8_t pri;
+ nd_uint32_t opt;
+ } llsa_priandopt;
+#define llsa_priority llsa_priandopt.pri
+#define llsa_options llsa_priandopt.opt
+ nd_ipv6 llsa_lladdr;
+ nd_uint32_t llsa_nprefix;
+ struct lsa6_prefix llsa_prefix[1];
+ } un_llsa;
+
+ /* Intra-Area-Prefix */
+ struct {
+ nd_uint16_t intra_ap_nprefix;
+ nd_uint16_t intra_ap_lstype;
+ rtrid_t intra_ap_lsid;
+ rtrid_t intra_ap_rtid;
+ struct lsa6_prefix intra_ap_prefix[1];
+ } un_intra_ap;
+ } lsa_un;
+};
+
+/*
+ * the main header
+ */
+struct ospf6hdr {
+ nd_uint8_t ospf6_version;
+ nd_uint8_t ospf6_type;
+ nd_uint16_t ospf6_len;
+ rtrid_t ospf6_routerid;
+ rtrid_t ospf6_areaid;
+ nd_uint16_t ospf6_chksum;
+ nd_uint8_t ospf6_instanceid;
+ nd_uint8_t ospf6_rsvd;
+};
+
+/*
+ * The OSPF6 header length is 16 bytes, regardless of how your compiler
+ * might choose to pad the above structure.
+ */
+#define OSPF6HDR_LEN 16
+
+/* Hello packet */
+struct hello6 {
+ nd_uint32_t hello_ifid;
+ union {
+ nd_uint8_t pri;
+ nd_uint32_t opt;
+ } hello_priandopt;
+#define hello_priority hello_priandopt.pri
+#define hello_options hello_priandopt.opt
+ nd_uint16_t hello_helloint;
+ nd_uint16_t hello_deadint;
+ rtrid_t hello_dr;
+ rtrid_t hello_bdr;
+ rtrid_t hello_neighbor[1]; /* may repeat */
+};
+
+/* Database Description packet */
+struct dd6 {
+ nd_uint32_t db_options;
+ nd_uint16_t db_mtu;
+ nd_uint8_t db_mbz;
+ nd_uint8_t db_flags;
+ nd_uint32_t db_seq;
+ struct lsa6_hdr db_lshdr[1]; /* may repeat */
+};
+
+/* Link State Request */
+struct lsr6 {
+ nd_uint16_t ls_mbz;
+ nd_uint16_t ls_type;
+ rtrid_t ls_stateid;
+ rtrid_t ls_router;
+};
+
+/* Link State Update */
+struct lsu6 {
+ nd_uint32_t lsu_count;
+ struct lsa6 lsu_lsa[1]; /* may repeat */
+};
+
+
+static const struct tok ospf6_option_values[] = {
+ { OSPF6_OPTION_V6, "V6" },
+ { OSPF6_OPTION_E, "External" },
+ { OSPF6_OPTION_MC, "Deprecated" },
+ { OSPF6_OPTION_N, "NSSA" },
+ { OSPF6_OPTION_R, "Router" },
+ { OSPF6_OPTION_DC, "Demand Circuit" },
+ { OSPF6_OPTION_AF, "AFs Support" },
+ { OSPF6_OPTION_L, "LLS" },
+ { OSPF6_OPTION_AT, "Authentication Trailer" },
+ { 0, NULL }
+};
+
+static const struct tok ospf6_rla_flag_values[] = {
+ { RLA_FLAG_B, "ABR" },
+ { RLA_FLAG_E, "External" },
+ { RLA_FLAG_V, "Virtual-Link Endpoint" },
+ { RLA_FLAG_W, "Deprecated" },
+ { RLA_FLAG_Nt, "NSSA Translator" },
+ { 0, NULL }
+};
+
+static const struct tok ospf6_asla_flag_values[] = {
+ { ASLA_FLAG_EXTERNAL, "External Type 2" },
+ { ASLA_FLAG_FWDADDR, "Forwarding" },
+ { ASLA_FLAG_ROUTETAG, "Tag" },
+ { 0, NULL }
+};
+
+static const struct tok ospf6_type_values[] = {
+ { OSPF_TYPE_HELLO, "Hello" },
+ { OSPF_TYPE_DD, "Database Description" },
+ { OSPF_TYPE_LS_REQ, "LS-Request" },
+ { OSPF_TYPE_LS_UPDATE, "LS-Update" },
+ { OSPF_TYPE_LS_ACK, "LS-Ack" },
+ { 0, NULL }
+};
+
+static const struct tok ospf6_lsa_values[] = {
+ { LS_TYPE_ROUTER, "Router" },
+ { LS_TYPE_NETWORK, "Network" },
+ { LS_TYPE_INTER_AP, "Inter-Area Prefix" },
+ { LS_TYPE_INTER_AR, "Inter-Area Router" },
+ { LS_TYPE_ASE, "External" },
+ { LS_TYPE_GROUP, "Deprecated" },
+ { LS_TYPE_NSSA, "NSSA" },
+ { LS_TYPE_LINK, "Link" },
+ { LS_TYPE_INTRA_AP, "Intra-Area Prefix" },
+ { LS_TYPE_INTRA_ATE, "Intra-Area TE" },
+ { LS_TYPE_GRACE, "Grace" },
+ { LS_TYPE_RI, "Router Information" },
+ { LS_TYPE_INTER_ASTE, "Inter-AS-TE" },
+ { LS_TYPE_L1VPN, "Layer 1 VPN" },
+ { 0, NULL }
+};
+
+static const struct tok ospf6_ls_scope_values[] = {
+ { LS_SCOPE_LINKLOCAL, "Link Local" },
+ { LS_SCOPE_AREA, "Area Local" },
+ { LS_SCOPE_AS, "Domain Wide" },
+ { 0, NULL }
+};
+
+static const struct tok ospf6_dd_flag_values[] = {
+ { OSPF6_DB_INIT, "Init" },
+ { OSPF6_DB_MORE, "More" },
+ { OSPF6_DB_MASTER, "Master" },
+ { OSPF6_DB_M6, "IPv6 MTU" },
+ { 0, NULL }
+};
+
+static const struct tok ospf6_lsa_prefix_option_values[] = {
+ { LSA_PREFIX_OPT_NU, "No Unicast" },
+ { LSA_PREFIX_OPT_LA, "Local address" },
+ { LSA_PREFIX_OPT_MC, "Deprecated" },
+ { LSA_PREFIX_OPT_P, "Propagate" },
+ { LSA_PREFIX_OPT_DN, "Down" },
+ { LSA_PREFIX_OPT_N, "N-bit" },
+ { 0, NULL }
+};
+
+static const struct tok ospf6_auth_type_str[] = {
+ { OSPF6_AUTH_TYPE_HMAC, "HMAC" },
+ { 0, NULL }
+};
+
+static void
+ospf6_print_ls_type(netdissect_options *ndo,
+ u_int ls_type, const rtrid_t *ls_stateid)
+{
+ ND_PRINT("\n\t %s LSA (%u), %s Scope%s, LSA-ID %s",
+ tok2str(ospf6_lsa_values, "Unknown", ls_type & LS_TYPE_MASK),
+ ls_type & LS_TYPE_MASK,
+ tok2str(ospf6_ls_scope_values, "Unknown", ls_type & LS_SCOPE_MASK),
+ ls_type &0x8000 ? ", transitive" : "", /* U-bit */
+ GET_IPADDR_STRING(ls_stateid));
+}
+
+static int
+ospf6_print_lshdr(netdissect_options *ndo,
+ const struct lsa6_hdr *lshp, const u_char *dataend)
+{
+ if ((const u_char *)(lshp + 1) > dataend)
+ goto trunc;
+
+ ND_PRINT("\n\t Advertising Router %s, seq 0x%08x, age %us, length %zu",
+ GET_IPADDR_STRING(lshp->ls_router),
+ GET_BE_U_4(lshp->ls_seq),
+ GET_BE_U_2(lshp->ls_age),
+ GET_BE_U_2(lshp->ls_length)-sizeof(struct lsa6_hdr));
+
+ ospf6_print_ls_type(ndo, GET_BE_U_2(lshp->ls_type),
+ &lshp->ls_stateid);
+
+ return (0);
+trunc:
+ return (1);
+}
+
+static int
+ospf6_print_lsaprefix(netdissect_options *ndo,
+ const uint8_t *tptr, u_int lsa_length)
+{
+ const struct lsa6_prefix *lsapp = (const struct lsa6_prefix *)tptr;
+ u_int wordlen;
+ nd_ipv6 prefix;
+
+ if (lsa_length < sizeof (*lsapp) - IPV6_ADDR_LEN_BYTES)
+ goto trunc;
+ lsa_length -= sizeof (*lsapp) - IPV6_ADDR_LEN_BYTES;
+ ND_TCHECK_LEN(lsapp, sizeof(*lsapp) - IPV6_ADDR_LEN_BYTES);
+ wordlen = (GET_U_1(lsapp->lsa_p_len) + 31) / 32;
+ if (wordlen * 4 > sizeof(nd_ipv6)) {
+ ND_PRINT(" bogus prefixlen /%u", GET_U_1(lsapp->lsa_p_len));
+ goto trunc;
+ }
+ if (lsa_length < wordlen * 4)
+ goto trunc;
+ lsa_length -= wordlen * 4;
+ memset(prefix, 0, sizeof(prefix));
+ GET_CPY_BYTES(prefix, lsapp->lsa_p_prefix, wordlen * 4);
+ ND_PRINT("\n\t\t%s/%u", ip6addr_string(ndo, prefix), /* local buffer, not packet data; don't use GET_IP6ADDR_STRING() */
+ GET_U_1(lsapp->lsa_p_len));
+ if (GET_U_1(lsapp->lsa_p_opt)) {
+ ND_PRINT(", Options [%s]",
+ bittok2str(ospf6_lsa_prefix_option_values,
+ "none", GET_U_1(lsapp->lsa_p_opt)));
+ }
+ ND_PRINT(", metric %u", GET_BE_U_2(lsapp->lsa_p_metric));
+ return sizeof(*lsapp) - IPV6_ADDR_LEN_BYTES + wordlen * 4;
+
+trunc:
+ return -1;
+}
+
+
+/*
+ * Print a single link state advertisement. If truncated return 1, else 0.
+ */
+static int
+ospf6_print_lsa(netdissect_options *ndo,
+ const struct lsa6 *lsap, const u_char *dataend)
+{
+ const struct rlalink6 *rlp;
+#if 0
+ const struct tos_metric *tosp;
+#endif
+ const rtrid_t *ap;
+#if 0
+ const struct aslametric *almp;
+ const struct mcla *mcp;
+#endif
+ const struct llsa *llsap;
+ const struct lsa6_prefix *lsapp;
+#if 0
+ const uint32_t *lp;
+#endif
+ u_int prefixes;
+ int bytelen;
+ u_int length, lsa_length;
+ uint32_t flags32;
+ const uint8_t *tptr;
+
+ if (ospf6_print_lshdr(ndo, &lsap->ls_hdr, dataend))
+ return (1);
+ length = GET_BE_U_2(lsap->ls_hdr.ls_length);
+
+ /*
+ * The LSA length includes the length of the header;
+ * it must have a value that's at least that length.
+ * If it does, find the length of what follows the
+ * header.
+ */
+ if (length < sizeof(struct lsa6_hdr) || (const u_char *)lsap + length > dataend)
+ return (1);
+ lsa_length = length - sizeof(struct lsa6_hdr);
+ tptr = (const uint8_t *)lsap+sizeof(struct lsa6_hdr);
+
+ switch (GET_BE_U_2(lsap->ls_hdr.ls_type)) {
+ case LS_TYPE_ROUTER | LS_SCOPE_AREA:
+ if (lsa_length < sizeof (lsap->lsa_un.un_rla.rla_options))
+ return (1);
+ lsa_length -= sizeof (lsap->lsa_un.un_rla.rla_options);
+ ND_PRINT("\n\t Options [%s]",
+ bittok2str(ospf6_option_values, "none",
+ GET_BE_U_4(lsap->lsa_un.un_rla.rla_options)));
+ ND_PRINT(", RLA-Flags [%s]",
+ bittok2str(ospf6_rla_flag_values, "none",
+ GET_U_1(lsap->lsa_un.un_rla.rla_flags)));
+
+ rlp = lsap->lsa_un.un_rla.rla_link;
+ while (lsa_length != 0) {
+ if (lsa_length < sizeof (*rlp))
+ return (1);
+ lsa_length -= sizeof (*rlp);
+ ND_TCHECK_SIZE(rlp);
+ switch (GET_U_1(rlp->link_type)) {
+
+ case RLA_TYPE_VIRTUAL:
+ ND_PRINT("\n\t Virtual Link: Neighbor Router-ID %s"
+ "\n\t Neighbor Interface-ID %s, Interface %s",
+ GET_IPADDR_STRING(rlp->link_nrtid),
+ GET_IPADDR_STRING(rlp->link_nifid),
+ GET_IPADDR_STRING(rlp->link_ifid));
+ break;
+
+ case RLA_TYPE_ROUTER:
+ ND_PRINT("\n\t Neighbor Router-ID %s"
+ "\n\t Neighbor Interface-ID %s, Interface %s",
+ GET_IPADDR_STRING(rlp->link_nrtid),
+ GET_IPADDR_STRING(rlp->link_nifid),
+ GET_IPADDR_STRING(rlp->link_ifid));
+ break;
+
+ case RLA_TYPE_TRANSIT:
+ ND_PRINT("\n\t Neighbor Network-ID %s"
+ "\n\t Neighbor Interface-ID %s, Interface %s",
+ GET_IPADDR_STRING(rlp->link_nrtid),
+ GET_IPADDR_STRING(rlp->link_nifid),
+ GET_IPADDR_STRING(rlp->link_ifid));
+ break;
+
+ default:
+ ND_PRINT("\n\t Unknown Router Links Type 0x%02x",
+ GET_U_1(rlp->link_type));
+ return (0);
+ }
+ ND_PRINT(", metric %u", GET_BE_U_2(rlp->link_metric));
+ rlp++;
+ }
+ break;
+
+ case LS_TYPE_NETWORK | LS_SCOPE_AREA:
+ if (lsa_length < sizeof (lsap->lsa_un.un_nla.nla_options))
+ return (1);
+ lsa_length -= sizeof (lsap->lsa_un.un_nla.nla_options);
+ ND_PRINT("\n\t Options [%s]",
+ bittok2str(ospf6_option_values, "none",
+ GET_BE_U_4(lsap->lsa_un.un_nla.nla_options)));
+
+ ND_PRINT("\n\t Connected Routers:");
+ ap = lsap->lsa_un.un_nla.nla_router;
+ while (lsa_length != 0) {
+ if (lsa_length < sizeof (*ap))
+ return (1);
+ lsa_length -= sizeof (*ap);
+ ND_PRINT("\n\t\t%s", GET_IPADDR_STRING(ap));
+ ++ap;
+ }
+ break;
+
+ case LS_TYPE_INTER_AP | LS_SCOPE_AREA:
+ if (lsa_length < sizeof (lsap->lsa_un.un_inter_ap.inter_ap_metric))
+ return (1);
+ lsa_length -= sizeof (lsap->lsa_un.un_inter_ap.inter_ap_metric);
+ ND_PRINT(", metric %u",
+ GET_BE_U_4(lsap->lsa_un.un_inter_ap.inter_ap_metric) & SLA_MASK_METRIC);
+
+ tptr = (const uint8_t *)lsap->lsa_un.un_inter_ap.inter_ap_prefix;
+ while (lsa_length != 0) {
+ bytelen = ospf6_print_lsaprefix(ndo, tptr, lsa_length);
+ if (bytelen < 0)
+ goto trunc;
+ /*
+ * ospf6_print_lsaprefix() will return -1 if
+ * the length is too high, so this will not
+ * underflow.
+ */
+ lsa_length -= bytelen;
+ tptr += bytelen;
+ }
+ break;
+
+ case LS_TYPE_ASE | LS_SCOPE_AS:
+ if (lsa_length < sizeof (lsap->lsa_un.un_asla.asla_metric))
+ return (1);
+ lsa_length -= sizeof (lsap->lsa_un.un_asla.asla_metric);
+ flags32 = GET_BE_U_4(lsap->lsa_un.un_asla.asla_metric);
+ ND_PRINT("\n\t Flags [%s]",
+ bittok2str(ospf6_asla_flag_values, "none", flags32));
+ ND_PRINT(" metric %u",
+ GET_BE_U_4(lsap->lsa_un.un_asla.asla_metric) &
+ ASLA_MASK_METRIC);
+
+ tptr = (const uint8_t *)lsap->lsa_un.un_asla.asla_prefix;
+ lsapp = (const struct lsa6_prefix *)tptr;
+ bytelen = ospf6_print_lsaprefix(ndo, tptr, lsa_length);
+ if (bytelen < 0)
+ goto trunc;
+ /*
+ * ospf6_print_lsaprefix() will return -1 if
+ * the length is too high, so this will not
+ * underflow.
+ */
+ lsa_length -= bytelen;
+ tptr += bytelen;
+
+ if ((flags32 & ASLA_FLAG_FWDADDR) != 0) {
+ if (lsa_length < sizeof (nd_ipv6))
+ return (1);
+ lsa_length -= sizeof (nd_ipv6);
+ ND_PRINT(" forward %s",
+ GET_IP6ADDR_STRING(tptr));
+ tptr += sizeof(nd_ipv6);
+ }
+
+ if ((flags32 & ASLA_FLAG_ROUTETAG) != 0) {
+ if (lsa_length < sizeof (uint32_t))
+ return (1);
+ lsa_length -= sizeof (uint32_t);
+ ND_PRINT(" tag %s",
+ GET_IPADDR_STRING(tptr));
+ tptr += sizeof(uint32_t);
+ }
+
+ if (GET_U_1(lsapp->lsa_p_metric)) {
+ if (lsa_length < sizeof (uint32_t))
+ return (1);
+ lsa_length -= sizeof (uint32_t);
+ ND_PRINT(" RefLSID: %s",
+ GET_IPADDR_STRING(tptr));
+ tptr += sizeof(uint32_t);
+ }
+ break;
+
+ case LS_TYPE_LINK:
+ /* Link LSA */
+ llsap = &lsap->lsa_un.un_llsa;
+ if (lsa_length < sizeof (llsap->llsa_priandopt))
+ return (1);
+ lsa_length -= sizeof (llsap->llsa_priandopt);
+ ND_TCHECK_SIZE(&llsap->llsa_priandopt);
+ ND_PRINT("\n\t Options [%s]",
+ bittok2str(ospf6_option_values, "none",
+ GET_BE_U_4(llsap->llsa_options)));
+
+ if (lsa_length < sizeof (llsap->llsa_lladdr) + sizeof (llsap->llsa_nprefix))
+ return (1);
+ lsa_length -= sizeof (llsap->llsa_lladdr) + sizeof (llsap->llsa_nprefix);
+ prefixes = GET_BE_U_4(llsap->llsa_nprefix);
+ ND_PRINT("\n\t Priority %u, Link-local address %s, Prefixes %u:",
+ GET_U_1(llsap->llsa_priority),
+ GET_IP6ADDR_STRING(llsap->llsa_lladdr),
+ prefixes);
+
+ tptr = (const uint8_t *)llsap->llsa_prefix;
+ while (prefixes > 0) {
+ bytelen = ospf6_print_lsaprefix(ndo, tptr, lsa_length);
+ if (bytelen < 0)
+ goto trunc;
+ prefixes--;
+ /*
+ * ospf6_print_lsaprefix() will return -1 if
+ * the length is too high, so this will not
+ * underflow.
+ */
+ lsa_length -= bytelen;
+ tptr += bytelen;
+ }
+ break;
+
+ case LS_TYPE_INTRA_AP | LS_SCOPE_AREA:
+ /* Intra-Area-Prefix LSA */
+ if (lsa_length < sizeof (lsap->lsa_un.un_intra_ap.intra_ap_rtid))
+ return (1);
+ lsa_length -= sizeof (lsap->lsa_un.un_intra_ap.intra_ap_rtid);
+ ND_TCHECK_4(lsap->lsa_un.un_intra_ap.intra_ap_rtid);
+ ospf6_print_ls_type(ndo,
+ GET_BE_U_2(lsap->lsa_un.un_intra_ap.intra_ap_lstype),
+ &lsap->lsa_un.un_intra_ap.intra_ap_lsid);
+
+ if (lsa_length < sizeof (lsap->lsa_un.un_intra_ap.intra_ap_nprefix))
+ return (1);
+ lsa_length -= sizeof (lsap->lsa_un.un_intra_ap.intra_ap_nprefix);
+ prefixes = GET_BE_U_2(lsap->lsa_un.un_intra_ap.intra_ap_nprefix);
+ ND_PRINT("\n\t Prefixes %u:", prefixes);
+
+ tptr = (const uint8_t *)lsap->lsa_un.un_intra_ap.intra_ap_prefix;
+ while (prefixes > 0) {
+ bytelen = ospf6_print_lsaprefix(ndo, tptr, lsa_length);
+ if (bytelen < 0)
+ goto trunc;
+ prefixes--;
+ /*
+ * ospf6_print_lsaprefix() will return -1 if
+ * the length is too high, so this will not
+ * underflow.
+ */
+ lsa_length -= bytelen;
+ tptr += bytelen;
+ }
+ break;
+
+ case LS_TYPE_GRACE | LS_SCOPE_LINKLOCAL:
+ if (ospf_grace_lsa_print(ndo, tptr, lsa_length) == -1) {
+ return 1;
+ }
+ break;
+
+ case LS_TYPE_INTRA_ATE | LS_SCOPE_LINKLOCAL:
+ if (ospf_te_lsa_print(ndo, tptr, lsa_length) == -1) {
+ return 1;
+ }
+ break;
+
+ default:
+ if(!print_unknown_data(ndo,tptr,
+ "\n\t ",
+ lsa_length)) {
+ return (1);
+ }
+ break;
+ }
+
+ return (0);
+trunc:
+ return (1);
+}
+
+static int
+ospf6_decode_v3(netdissect_options *ndo,
+ const struct ospf6hdr *op,
+ const u_char *dataend)
+{
+ const rtrid_t *ap;
+ const struct lsr6 *lsrp;
+ const struct lsa6_hdr *lshp;
+ const struct lsa6 *lsap;
+ int i;
+
+ switch (GET_U_1(op->ospf6_type)) {
+
+ case OSPF_TYPE_HELLO: {
+ const struct hello6 *hellop = (const struct hello6 *)((const uint8_t *)op + OSPF6HDR_LEN);
+
+ ND_PRINT("\n\tOptions [%s]",
+ bittok2str(ospf6_option_values, "none",
+ GET_BE_U_4(hellop->hello_options)));
+
+ ND_PRINT("\n\t Hello Timer %us, Dead Timer %us, Interface-ID %s, Priority %u",
+ GET_BE_U_2(hellop->hello_helloint),
+ GET_BE_U_2(hellop->hello_deadint),
+ GET_IPADDR_STRING(hellop->hello_ifid),
+ GET_U_1(hellop->hello_priority));
+
+ if (GET_BE_U_4(hellop->hello_dr) != 0)
+ ND_PRINT("\n\t Designated Router %s",
+ GET_IPADDR_STRING(hellop->hello_dr));
+ if (GET_BE_U_4(hellop->hello_bdr) != 0)
+ ND_PRINT(", Backup Designated Router %s",
+ GET_IPADDR_STRING(hellop->hello_bdr));
+ if (ndo->ndo_vflag > 1) {
+ ND_PRINT("\n\t Neighbor List:");
+ ap = hellop->hello_neighbor;
+ while ((const u_char *)ap < dataend) {
+ ND_PRINT("\n\t %s", GET_IPADDR_STRING(ap));
+ ++ap;
+ }
+ }
+ break; /* HELLO */
+ }
+
+ case OSPF_TYPE_DD: {
+ const struct dd6 *ddp = (const struct dd6 *)((const uint8_t *)op + OSPF6HDR_LEN);
+
+ ND_PRINT("\n\tOptions [%s]",
+ bittok2str(ospf6_option_values, "none",
+ GET_BE_U_4(ddp->db_options)));
+ ND_PRINT(", DD Flags [%s]",
+ bittok2str(ospf6_dd_flag_values,"none",GET_U_1(ddp->db_flags)));
+
+ ND_PRINT(", MTU %u, DD-Sequence 0x%08x",
+ GET_BE_U_2(ddp->db_mtu),
+ GET_BE_U_4(ddp->db_seq));
+ if (ndo->ndo_vflag > 1) {
+ /* Print all the LS adv's */
+ lshp = ddp->db_lshdr;
+ while ((const u_char *)lshp < dataend) {
+ if (ospf6_print_lshdr(ndo, lshp++, dataend))
+ goto trunc;
+ }
+ }
+ break;
+ }
+
+ case OSPF_TYPE_LS_REQ:
+ if (ndo->ndo_vflag > 1) {
+ lsrp = (const struct lsr6 *)((const uint8_t *)op + OSPF6HDR_LEN);
+ while ((const u_char *)lsrp < dataend) {
+ ND_TCHECK_SIZE(lsrp);
+ ND_PRINT("\n\t Advertising Router %s",
+ GET_IPADDR_STRING(lsrp->ls_router));
+ ospf6_print_ls_type(ndo,
+ GET_BE_U_2(lsrp->ls_type),
+ &lsrp->ls_stateid);
+ ++lsrp;
+ }
+ }
+ break;
+
+ case OSPF_TYPE_LS_UPDATE:
+ if (ndo->ndo_vflag > 1) {
+ const struct lsu6 *lsup = (const struct lsu6 *)((const uint8_t *)op + OSPF6HDR_LEN);
+
+ i = GET_BE_U_4(lsup->lsu_count);
+ lsap = lsup->lsu_lsa;
+ while ((const u_char *)lsap < dataend && i--) {
+ if (ospf6_print_lsa(ndo, lsap, dataend))
+ goto trunc;
+ lsap = (const struct lsa6 *)((const u_char *)lsap +
+ GET_BE_U_2(lsap->ls_hdr.ls_length));
+ }
+ }
+ break;
+
+ case OSPF_TYPE_LS_ACK:
+ if (ndo->ndo_vflag > 1) {
+ lshp = (const struct lsa6_hdr *)((const uint8_t *)op + OSPF6HDR_LEN);
+ while ((const u_char *)lshp < dataend) {
+ if (ospf6_print_lshdr(ndo, lshp++, dataend))
+ goto trunc;
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ return (0);
+trunc:
+ return (1);
+}
+
+/* RFC5613 Section 2.2 (w/o the TLVs) */
+static int
+ospf6_print_lls(netdissect_options *ndo,
+ const u_char *cp, const u_int len)
+{
+ uint16_t llsdatalen;
+
+ if (len == 0)
+ return 0;
+ if (len < OSPF_LLS_HDRLEN)
+ goto trunc;
+ /* Checksum */
+ ND_PRINT("\n\tLLS Checksum 0x%04x", GET_BE_U_2(cp));
+ cp += 2;
+ /* LLS Data Length */
+ llsdatalen = GET_BE_U_2(cp);
+ ND_PRINT(", Data Length %u", llsdatalen);
+ if (llsdatalen < OSPF_LLS_HDRLEN || llsdatalen > len)
+ goto trunc;
+ cp += 2;
+ /* LLS TLVs */
+ ND_TCHECK_LEN(cp, llsdatalen - OSPF_LLS_HDRLEN);
+ /* FIXME: code in print-ospf.c can be reused to decode the TLVs */
+
+ return llsdatalen;
+trunc:
+ return -1;
+}
+
+/* RFC6506 Section 4.1 */
+static int
+ospf6_decode_at(netdissect_options *ndo,
+ const u_char *cp, const u_int len)
+{
+ uint16_t authdatalen;
+
+ if (len == 0)
+ return 0;
+ if (len < OSPF6_AT_HDRLEN)
+ goto trunc;
+ /* Authentication Type */
+ ND_PRINT("\n\tAuthentication Type %s",
+ tok2str(ospf6_auth_type_str, "unknown (0x%04x)", GET_BE_U_2(cp)));
+ cp += 2;
+ /* Auth Data Len */
+ authdatalen = GET_BE_U_2(cp);
+ ND_PRINT(", Length %u", authdatalen);
+ if (authdatalen < OSPF6_AT_HDRLEN || authdatalen > len)
+ goto trunc;
+ cp += 2;
+ /* Reserved */
+ cp += 2;
+ /* Security Association ID */
+ ND_PRINT(", SAID %u", GET_BE_U_2(cp));
+ cp += 2;
+ /* Cryptographic Sequence Number (High-Order 32 Bits) */
+ ND_PRINT(", CSN 0x%08x", GET_BE_U_4(cp));
+ cp += 4;
+ /* Cryptographic Sequence Number (Low-Order 32 Bits) */
+ ND_PRINT(":%08x", GET_BE_U_4(cp));
+ cp += 4;
+ /* Authentication Data */
+ ND_TCHECK_LEN(cp, authdatalen - OSPF6_AT_HDRLEN);
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo,cp, "\n\tAuthentication Data ", authdatalen - OSPF6_AT_HDRLEN);
+ return 0;
+
+trunc:
+ return 1;
+}
+
+/* The trailing data may include LLS and/or AT data (in this specific order).
+ * LLS data may be present only in Hello and DBDesc packets with the L-bit set.
+ * AT data may be present in Hello and DBDesc packets with the AT-bit set or in
+ * any other packet type, thus decode the AT data regardless of the AT-bit.
+ */
+static int
+ospf6_decode_v3_trailer(netdissect_options *ndo,
+ const struct ospf6hdr *op, const u_char *cp, const unsigned len)
+{
+ uint8_t type;
+ int llslen = 0;
+ int lls_hello = 0;
+ int lls_dd = 0;
+
+ type = GET_U_1(op->ospf6_type);
+ if (type == OSPF_TYPE_HELLO) {
+ const struct hello6 *hellop = (const struct hello6 *)((const uint8_t *)op + OSPF6HDR_LEN);
+ if (GET_BE_U_4(hellop->hello_options) & OSPF6_OPTION_L)
+ lls_hello = 1;
+ } else if (type == OSPF_TYPE_DD) {
+ const struct dd6 *ddp = (const struct dd6 *)((const uint8_t *)op + OSPF6HDR_LEN);
+ if (GET_BE_U_4(ddp->db_options) & OSPF6_OPTION_L)
+ lls_dd = 1;
+ }
+ if ((lls_hello || lls_dd) && (llslen = ospf6_print_lls(ndo, cp, len)) < 0)
+ goto trunc;
+ return ospf6_decode_at(ndo, cp + llslen, len - llslen);
+
+trunc:
+ return 1;
+}
+
+void
+ospf6_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ const struct ospf6hdr *op;
+ const u_char *dataend;
+ const char *cp;
+ uint16_t datalen;
+
+ ndo->ndo_protocol = "ospf3";
+ op = (const struct ospf6hdr *)bp;
+
+ /* If the type is valid translate it, or just print the type */
+ /* value. If it's not valid, say so and return */
+ cp = tok2str(ospf6_type_values, "unknown packet type (%u)",
+ GET_U_1(op->ospf6_type));
+ ND_PRINT("OSPFv%u, %s, length %u", GET_U_1(op->ospf6_version), cp,
+ length);
+ if (*cp == 'u') {
+ return;
+ }
+
+ if(!ndo->ndo_vflag) { /* non verbose - so lets bail out here */
+ return;
+ }
+
+ /* OSPFv3 data always comes first and optional trailing data may follow. */
+ datalen = GET_BE_U_2(op->ospf6_len);
+ if (datalen > length) {
+ ND_PRINT(" [len %u]", datalen);
+ return;
+ }
+ dataend = bp + datalen;
+
+ ND_PRINT("\n\tRouter-ID %s", GET_IPADDR_STRING(op->ospf6_routerid));
+
+ if (GET_BE_U_4(op->ospf6_areaid) != 0)
+ ND_PRINT(", Area %s", GET_IPADDR_STRING(op->ospf6_areaid));
+ else
+ ND_PRINT(", Backbone Area");
+ if (GET_U_1(op->ospf6_instanceid))
+ ND_PRINT(", Instance %u", GET_U_1(op->ospf6_instanceid));
+
+ /* Do rest according to version. */
+ switch (GET_U_1(op->ospf6_version)) {
+
+ case 3:
+ /* ospf version 3 */
+ if (ospf6_decode_v3(ndo, op, dataend) ||
+ ospf6_decode_v3_trailer(ndo, op, dataend, length - datalen))
+ goto trunc;
+ break;
+ } /* end switch on version */
+
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-otv.c b/print-otv.c
new file mode 100644
index 0000000..a0fe9d0
--- /dev/null
+++ b/print-otv.c
@@ -0,0 +1,76 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Francesco Fondelli (francesco dot fondelli, gmail dot com)
+ */
+
+/* \summary: Overlay Transport Virtualization (OTV) printer */
+
+/* specification: draft-hasmit-otv-04 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+#define OTV_HDR_LEN 8
+
+/*
+ * OTV header, draft-hasmit-otv-04
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |R|R|R|R|I|R|R|R| Overlay ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Instance ID | Reserved |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+void
+otv_print(netdissect_options *ndo, const u_char *bp, u_int len)
+{
+ uint8_t flags;
+
+ ndo->ndo_protocol = "otv";
+ ND_PRINT("OTV, ");
+ if (len < OTV_HDR_LEN) {
+ ND_PRINT("[length %u < %u]", len, OTV_HDR_LEN);
+ goto invalid;
+ }
+
+ flags = GET_U_1(bp);
+ ND_PRINT("flags [%s] (0x%02x), ", flags & 0x08 ? "I" : ".", flags);
+ bp += 1;
+
+ ND_PRINT("overlay %u, ", GET_BE_U_3(bp));
+ bp += 3;
+
+ ND_PRINT("instance %u\n", GET_BE_U_3(bp));
+ bp += 3;
+
+ /* Reserved */
+ ND_TCHECK_1(bp);
+ bp += 1;
+
+ ether_print(ndo, bp, len - OTV_HDR_LEN, ND_BYTES_AVAILABLE_AFTER(bp), NULL, NULL);
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(bp, len);
+}
diff --git a/print-pflog.c b/print-pflog.c
new file mode 100644
index 0000000..1cffbf6
--- /dev/null
+++ b/print-pflog.c
@@ -0,0 +1,206 @@
+/*
+ * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: *BSD/Darwin packet filter log file printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "af.h"
+
+#include "pflog.h"
+
+static const struct tok pf_reasons[] = {
+ { PFRES_MATCH, "0(match)" },
+ { PFRES_BADOFF, "1(bad-offset)" },
+ { PFRES_FRAG, "2(fragment)" },
+ { PFRES_NORM, "3(short)" },
+ { PFRES_NORM, "4(normalize)" },
+ { PFRES_MEMORY, "5(memory)" },
+ { PFRES_TS, "6(bad-timestamp)" },
+ { PFRES_CONGEST, "7(congestion)" },
+ { PFRES_IPOPTIONS, "8(ip-option)" },
+ { PFRES_PROTCKSUM, "9(proto-cksum)" },
+ { PFRES_BADSTATE, "10(state-mismatch)" },
+ { PFRES_STATEINS, "11(state-insert)" },
+ { PFRES_MAXSTATES, "12(state-limit)" },
+ { PFRES_SRCLIMIT, "13(src-limit)" },
+ { PFRES_SYNPROXY, "14(synproxy)" },
+#if defined(__FreeBSD__)
+ { PFRES_MAPFAILED, "15(map-failed)" },
+#elif defined(__NetBSD__)
+ { PFRES_STATELOCKED, "15(state-locked)" },
+#elif defined(__OpenBSD__)
+ { PFRES_TRANSLATE, "15(translate)" },
+ { PFRES_NOROUTE, "16(no-route)" },
+#elif defined(__APPLE__)
+ { PFRES_DUMMYNET, "15(dummynet)" },
+#endif
+ { 0, NULL }
+};
+
+static const struct tok pf_actions[] = {
+ { PF_PASS, "pass" },
+ { PF_DROP, "block" },
+ { PF_SCRUB, "scrub" },
+ { PF_NAT, "nat" },
+ { PF_NONAT, "nonat" },
+ { PF_BINAT, "binat" },
+ { PF_NOBINAT, "nobinat" },
+ { PF_RDR, "rdr" },
+ { PF_NORDR, "nordr" },
+ { PF_SYNPROXY_DROP, "synproxy-drop" },
+#if defined(__FreeBSD__)
+ { PF_DEFER, "defer" },
+#elif defined(__OpenBSD__)
+ { PF_DEFER, "defer" },
+ { PF_MATCH, "match" },
+ { PF_DIVERT, "divert" },
+ { PF_RT, "rt" },
+ { PF_AFRT, "afrt" },
+#elif defined(__APPLE__)
+ { PF_DUMMYNET, "dummynet" },
+ { PF_NODUMMYNET, "nodummynet" },
+ { PF_NAT64, "nat64" },
+ { PF_NONAT64, "nonat64" },
+#endif
+ { 0, NULL }
+};
+
+static const struct tok pf_directions[] = {
+ { PF_INOUT, "in/out" },
+ { PF_IN, "in" },
+ { PF_OUT, "out" },
+#if defined(__OpenBSD__)
+ { PF_FWD, "fwd" },
+#endif
+ { 0, NULL }
+};
+
+static void
+pflog_print(netdissect_options *ndo, const struct pfloghdr *hdr)
+{
+ uint32_t rulenr, subrulenr;
+
+ ndo->ndo_protocol = "pflog";
+ rulenr = GET_BE_U_4(&hdr->rulenr);
+ subrulenr = GET_BE_U_4(&hdr->subrulenr);
+ if (subrulenr == (uint32_t)-1)
+ ND_PRINT("rule %u/", rulenr);
+ else {
+ ND_PRINT("rule %u.", rulenr);
+ nd_printjnp(ndo, (const u_char*)hdr->ruleset, PFLOG_RULESET_NAME_SIZE);
+ ND_PRINT(".%u/", subrulenr);
+ }
+
+ ND_PRINT("%s: %s %s on ",
+ tok2str(pf_reasons, "unkn(%u)", GET_U_1(&hdr->reason)),
+ tok2str(pf_actions, "unkn(%u)", GET_U_1(&hdr->action)),
+ tok2str(pf_directions, "unkn(%u)", GET_U_1(&hdr->dir)));
+ nd_printjnp(ndo, (const u_char*)hdr->ifname, PFLOG_IFNAMSIZ);
+ ND_PRINT(": ");
+}
+
+void
+pflog_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
+ const u_char *p)
+{
+ u_int length = h->len;
+ u_int hdrlen;
+ u_int caplen = h->caplen;
+ const struct pfloghdr *hdr;
+ uint8_t af;
+
+ ndo->ndo_protocol = "pflog";
+ /* check length */
+ if (caplen < sizeof(uint8_t)) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += h->caplen;
+ return;
+ }
+
+#define MIN_PFLOG_HDRLEN 45
+ hdr = (const struct pfloghdr *)p;
+ if (GET_U_1(&hdr->length) < MIN_PFLOG_HDRLEN) {
+ ND_PRINT("[pflog: invalid header length!]");
+ ndo->ndo_ll_hdr_len += GET_U_1(&hdr->length); /* XXX: not really */
+ return;
+ }
+ hdrlen = roundup2(hdr->length, 4);
+
+ if (caplen < hdrlen) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += hdrlen; /* XXX: true? */
+ return;
+ }
+
+ /* print what we know */
+ ND_TCHECK_SIZE(hdr);
+ if (ndo->ndo_eflag)
+ pflog_print(ndo, hdr);
+
+ /* skip to the real packet */
+ af = GET_U_1(&hdr->af);
+ length -= hdrlen;
+ caplen -= hdrlen;
+ p += hdrlen;
+ switch (af) {
+
+ /*
+ * If there's a system that doesn't use the AF_INET
+ * from 4.2BSD, feel free to add its value to af.h
+ * and use it here.
+ *
+ * Hopefully, there isn't.
+ */
+ case BSD_AFNUM_INET:
+ ip_print(ndo, p, length);
+ break;
+
+ /*
+ * Try all AF_INET6 values for all systems with pflog,
+ * including Darwin.
+ */
+ case BSD_AFNUM_INET6_BSD:
+ case BSD_AFNUM_INET6_FREEBSD:
+ case BSD_AFNUM_INET6_DARWIN:
+ ip6_print(ndo, p, length);
+ break;
+
+ default:
+ /* address family not handled, print raw packet */
+ if (!ndo->ndo_eflag)
+ pflog_print(ndo, hdr);
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ }
+
+ ndo->ndo_ll_hdr_len += hdrlen;
+ return;
+trunc:
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += hdrlen;
+}
diff --git a/print-pgm.c b/print-pgm.c
new file mode 100644
index 0000000..ccb0b46
--- /dev/null
+++ b/print-pgm.c
@@ -0,0 +1,829 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Andy Heffernan (ahh@juniper.net)
+ */
+
+/* \summary: Pragmatic General Multicast (PGM) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "addrtostr.h"
+
+#include "ip.h"
+#include "ip6.h"
+#include "ipproto.h"
+#include "af.h"
+
+/*
+ * PGM header (RFC 3208)
+ */
+struct pgm_header {
+ nd_uint16_t pgm_sport;
+ nd_uint16_t pgm_dport;
+ nd_uint8_t pgm_type;
+ nd_uint8_t pgm_options;
+ nd_uint16_t pgm_sum;
+ nd_byte pgm_gsid[6];
+ nd_uint16_t pgm_length;
+};
+
+struct pgm_spm {
+ nd_uint32_t pgms_seq;
+ nd_uint32_t pgms_trailseq;
+ nd_uint32_t pgms_leadseq;
+ nd_uint16_t pgms_nla_afi;
+ nd_uint16_t pgms_reserved;
+ /* ... uint8_t pgms_nla[0]; */
+ /* ... options */
+};
+
+struct pgm_nak {
+ nd_uint32_t pgmn_seq;
+ nd_uint16_t pgmn_source_afi;
+ nd_uint16_t pgmn_reserved;
+ /* ... uint8_t pgmn_source[0]; */
+ /* ... uint16_t pgmn_group_afi */
+ /* ... uint16_t pgmn_reserved2; */
+ /* ... uint8_t pgmn_group[0]; */
+ /* ... options */
+};
+
+struct pgm_ack {
+ nd_uint32_t pgma_rx_max_seq;
+ nd_uint32_t pgma_bitmap;
+ /* ... options */
+};
+
+struct pgm_poll {
+ nd_uint32_t pgmp_seq;
+ nd_uint16_t pgmp_round;
+ nd_uint16_t pgmp_subtype;
+ nd_uint16_t pgmp_nla_afi;
+ nd_uint16_t pgmp_reserved;
+ /* ... uint8_t pgmp_nla[0]; */
+ /* ... options */
+};
+
+struct pgm_polr {
+ nd_uint32_t pgmp_seq;
+ nd_uint16_t pgmp_round;
+ nd_uint16_t pgmp_reserved;
+ /* ... options */
+};
+
+struct pgm_data {
+ nd_uint32_t pgmd_seq;
+ nd_uint32_t pgmd_trailseq;
+ /* ... options */
+};
+
+typedef enum _pgm_type {
+ PGM_SPM = 0, /* source path message */
+ PGM_POLL = 1, /* POLL Request */
+ PGM_POLR = 2, /* POLL Response */
+ PGM_ODATA = 4, /* original data */
+ PGM_RDATA = 5, /* repair data */
+ PGM_NAK = 8, /* NAK */
+ PGM_NULLNAK = 9, /* Null NAK */
+ PGM_NCF = 10, /* NAK Confirmation */
+ PGM_ACK = 11, /* ACK for congestion control */
+ PGM_SPMR = 12, /* SPM request */
+ PGM_MAX = 255
+} pgm_type;
+
+#define PGM_OPT_BIT_PRESENT 0x01
+#define PGM_OPT_BIT_NETWORK 0x02
+#define PGM_OPT_BIT_VAR_PKTLEN 0x40
+#define PGM_OPT_BIT_PARITY 0x80
+
+#define PGM_OPT_LENGTH 0x00
+#define PGM_OPT_FRAGMENT 0x01
+#define PGM_OPT_NAK_LIST 0x02
+#define PGM_OPT_JOIN 0x03
+#define PGM_OPT_NAK_BO_IVL 0x04
+#define PGM_OPT_NAK_BO_RNG 0x05
+
+#define PGM_OPT_REDIRECT 0x07
+#define PGM_OPT_PARITY_PRM 0x08
+#define PGM_OPT_PARITY_GRP 0x09
+#define PGM_OPT_CURR_TGSIZE 0x0A
+#define PGM_OPT_NBR_UNREACH 0x0B
+#define PGM_OPT_PATH_NLA 0x0C
+
+#define PGM_OPT_SYN 0x0D
+#define PGM_OPT_FIN 0x0E
+#define PGM_OPT_RST 0x0F
+#define PGM_OPT_CR 0x10
+#define PGM_OPT_CRQST 0x11
+
+#define PGM_OPT_PGMCC_DATA 0x12
+#define PGM_OPT_PGMCC_FEEDBACK 0x13
+
+#define PGM_OPT_MASK 0x7f
+
+#define PGM_OPT_END 0x80 /* end of options marker */
+
+#define PGM_MIN_OPT_LEN 4
+
+void
+pgm_print(netdissect_options *ndo,
+ const u_char *bp, u_int length,
+ const u_char *bp2)
+{
+ const struct pgm_header *pgm;
+ const struct ip *ip;
+ uint8_t pgm_type_val;
+ uint16_t sport, dport;
+ u_int nla_afnum;
+ char nla_buf[INET6_ADDRSTRLEN];
+ const struct ip6_hdr *ip6;
+ uint8_t opt_type, opt_len;
+ uint32_t seq, opts_len, len, offset;
+
+ ndo->ndo_protocol = "pgm";
+ pgm = (const struct pgm_header *)bp;
+ ip = (const struct ip *)bp2;
+ if (IP_V(ip) == 6)
+ ip6 = (const struct ip6_hdr *)bp2;
+ else
+ ip6 = NULL;
+ if (!ND_TTEST_2(pgm->pgm_dport)) {
+ if (ip6) {
+ ND_PRINT("%s > %s:",
+ GET_IP6ADDR_STRING(ip6->ip6_src),
+ GET_IP6ADDR_STRING(ip6->ip6_dst));
+ } else {
+ ND_PRINT("%s > %s:",
+ GET_IPADDR_STRING(ip->ip_src),
+ GET_IPADDR_STRING(ip->ip_dst));
+ }
+ nd_print_trunc(ndo);
+ return;
+ }
+
+ sport = GET_BE_U_2(pgm->pgm_sport);
+ dport = GET_BE_U_2(pgm->pgm_dport);
+
+ if (ip6) {
+ if (GET_U_1(ip6->ip6_nxt) == IPPROTO_PGM) {
+ ND_PRINT("%s.%s > %s.%s: ",
+ GET_IP6ADDR_STRING(ip6->ip6_src),
+ tcpport_string(ndo, sport),
+ GET_IP6ADDR_STRING(ip6->ip6_dst),
+ tcpport_string(ndo, dport));
+ } else {
+ ND_PRINT("%s > %s: ",
+ tcpport_string(ndo, sport), tcpport_string(ndo, dport));
+ }
+ } else {
+ if (GET_U_1(ip->ip_p) == IPPROTO_PGM) {
+ ND_PRINT("%s.%s > %s.%s: ",
+ GET_IPADDR_STRING(ip->ip_src),
+ tcpport_string(ndo, sport),
+ GET_IPADDR_STRING(ip->ip_dst),
+ tcpport_string(ndo, dport));
+ } else {
+ ND_PRINT("%s > %s: ",
+ tcpport_string(ndo, sport), tcpport_string(ndo, dport));
+ }
+ }
+
+ ND_TCHECK_SIZE(pgm);
+
+ ND_PRINT("PGM, length %u", GET_BE_U_2(pgm->pgm_length));
+
+ if (!ndo->ndo_vflag)
+ return;
+
+ pgm_type_val = GET_U_1(pgm->pgm_type);
+ ND_PRINT(" 0x%02x%02x%02x%02x%02x%02x ",
+ pgm->pgm_gsid[0],
+ pgm->pgm_gsid[1],
+ pgm->pgm_gsid[2],
+ pgm->pgm_gsid[3],
+ pgm->pgm_gsid[4],
+ pgm->pgm_gsid[5]);
+ switch (pgm_type_val) {
+ case PGM_SPM: {
+ const struct pgm_spm *spm;
+
+ spm = (const struct pgm_spm *)(pgm + 1);
+ ND_TCHECK_SIZE(spm);
+ bp = (const u_char *) (spm + 1);
+
+ switch (GET_BE_U_2(spm->pgms_nla_afi)) {
+ case AFNUM_INET:
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv4));
+ addrtostr(bp, nla_buf, sizeof(nla_buf));
+ bp += sizeof(nd_ipv4);
+ break;
+ case AFNUM_INET6:
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv6));
+ addrtostr6(bp, nla_buf, sizeof(nla_buf));
+ bp += sizeof(nd_ipv6);
+ break;
+ default:
+ goto trunc;
+ break;
+ }
+
+ ND_PRINT("SPM seq %u trail %u lead %u nla %s",
+ GET_BE_U_4(spm->pgms_seq),
+ GET_BE_U_4(spm->pgms_trailseq),
+ GET_BE_U_4(spm->pgms_leadseq),
+ nla_buf);
+ break;
+ }
+
+ case PGM_POLL: {
+ const struct pgm_poll *pgm_poll;
+ uint32_t ivl, rnd, mask;
+
+ pgm_poll = (const struct pgm_poll *)(pgm + 1);
+ ND_TCHECK_SIZE(pgm_poll);
+ bp = (const u_char *) (pgm_poll + 1);
+
+ switch (GET_BE_U_2(pgm_poll->pgmp_nla_afi)) {
+ case AFNUM_INET:
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv4));
+ addrtostr(bp, nla_buf, sizeof(nla_buf));
+ bp += sizeof(nd_ipv4);
+ break;
+ case AFNUM_INET6:
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv6));
+ addrtostr6(bp, nla_buf, sizeof(nla_buf));
+ bp += sizeof(nd_ipv6);
+ break;
+ default:
+ goto trunc;
+ break;
+ }
+
+ ivl = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+
+ rnd = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+
+ mask = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+
+ ND_PRINT("POLL seq %u round %u nla %s ivl %u rnd 0x%08x "
+ "mask 0x%08x", GET_BE_U_4(pgm_poll->pgmp_seq),
+ GET_BE_U_2(pgm_poll->pgmp_round), nla_buf, ivl, rnd,
+ mask);
+ break;
+ }
+ case PGM_POLR: {
+ const struct pgm_polr *polr_msg;
+
+ polr_msg = (const struct pgm_polr *)(pgm + 1);
+ ND_TCHECK_SIZE(polr_msg);
+ ND_PRINT("POLR seq %u round %u",
+ GET_BE_U_4(polr_msg->pgmp_seq),
+ GET_BE_U_2(polr_msg->pgmp_round));
+ bp = (const u_char *) (polr_msg + 1);
+ break;
+ }
+ case PGM_ODATA: {
+ const struct pgm_data *odata;
+
+ odata = (const struct pgm_data *)(pgm + 1);
+ ND_TCHECK_SIZE(odata);
+ ND_PRINT("ODATA trail %u seq %u",
+ GET_BE_U_4(odata->pgmd_trailseq),
+ GET_BE_U_4(odata->pgmd_seq));
+ bp = (const u_char *) (odata + 1);
+ break;
+ }
+
+ case PGM_RDATA: {
+ const struct pgm_data *rdata;
+
+ rdata = (const struct pgm_data *)(pgm + 1);
+ ND_TCHECK_SIZE(rdata);
+ ND_PRINT("RDATA trail %u seq %u",
+ GET_BE_U_4(rdata->pgmd_trailseq),
+ GET_BE_U_4(rdata->pgmd_seq));
+ bp = (const u_char *) (rdata + 1);
+ break;
+ }
+
+ case PGM_NAK:
+ case PGM_NULLNAK:
+ case PGM_NCF: {
+ const struct pgm_nak *nak;
+ char source_buf[INET6_ADDRSTRLEN], group_buf[INET6_ADDRSTRLEN];
+
+ nak = (const struct pgm_nak *)(pgm + 1);
+ ND_TCHECK_SIZE(nak);
+ bp = (const u_char *) (nak + 1);
+
+ /*
+ * Skip past the source, saving info along the way
+ * and stopping if we don't have enough.
+ */
+ switch (GET_BE_U_2(nak->pgmn_source_afi)) {
+ case AFNUM_INET:
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv4));
+ addrtostr(bp, source_buf, sizeof(source_buf));
+ bp += sizeof(nd_ipv4);
+ break;
+ case AFNUM_INET6:
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv6));
+ addrtostr6(bp, source_buf, sizeof(source_buf));
+ bp += sizeof(nd_ipv6);
+ break;
+ default:
+ goto trunc;
+ break;
+ }
+
+ /*
+ * Skip past the group, saving info along the way
+ * and stopping if we don't have enough.
+ */
+ bp += (2 * sizeof(uint16_t));
+ switch (GET_BE_U_2(bp)) {
+ case AFNUM_INET:
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv4));
+ addrtostr(bp, group_buf, sizeof(group_buf));
+ bp += sizeof(nd_ipv4);
+ break;
+ case AFNUM_INET6:
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv6));
+ addrtostr6(bp, group_buf, sizeof(group_buf));
+ bp += sizeof(nd_ipv6);
+ break;
+ default:
+ goto trunc;
+ break;
+ }
+
+ /*
+ * Options decoding can go here.
+ */
+ switch (pgm_type_val) {
+ case PGM_NAK:
+ ND_PRINT("NAK ");
+ break;
+ case PGM_NULLNAK:
+ ND_PRINT("NNAK ");
+ break;
+ case PGM_NCF:
+ ND_PRINT("NCF ");
+ break;
+ default:
+ break;
+ }
+ ND_PRINT("(%s -> %s), seq %u",
+ source_buf, group_buf, GET_BE_U_4(nak->pgmn_seq));
+ break;
+ }
+
+ case PGM_ACK: {
+ const struct pgm_ack *ack;
+
+ ack = (const struct pgm_ack *)(pgm + 1);
+ ND_TCHECK_SIZE(ack);
+ ND_PRINT("ACK seq %u",
+ GET_BE_U_4(ack->pgma_rx_max_seq));
+ bp = (const u_char *) (ack + 1);
+ break;
+ }
+
+ case PGM_SPMR:
+ ND_PRINT("SPMR");
+ break;
+
+ default:
+ ND_PRINT("UNKNOWN type 0x%02x", pgm_type_val);
+ break;
+
+ }
+ if (GET_U_1(pgm->pgm_options) & PGM_OPT_BIT_PRESENT) {
+
+ /*
+ * make sure there's enough for the first option header
+ */
+ ND_TCHECK_LEN(bp, PGM_MIN_OPT_LEN);
+
+ /*
+ * That option header MUST be an OPT_LENGTH option
+ * (see the first paragraph of section 9.1 in RFC 3208).
+ */
+ opt_type = GET_U_1(bp);
+ bp++;
+ if ((opt_type & PGM_OPT_MASK) != PGM_OPT_LENGTH) {
+ ND_PRINT("[First option bad, should be PGM_OPT_LENGTH, is %u]", opt_type & PGM_OPT_MASK);
+ return;
+ }
+ opt_len = GET_U_1(bp);
+ bp++;
+ if (opt_len != 4) {
+ ND_PRINT("[Bad OPT_LENGTH option, length %u != 4]", opt_len);
+ return;
+ }
+ opts_len = GET_BE_U_2(bp);
+ bp += sizeof(uint16_t);
+ if (opts_len < 4) {
+ ND_PRINT("[Bad total option length %u < 4]", opts_len);
+ return;
+ }
+ ND_PRINT(" OPTS LEN %u", opts_len);
+ opts_len -= 4;
+
+ while (opts_len) {
+ if (opts_len < PGM_MIN_OPT_LEN) {
+ ND_PRINT("[Total option length leaves no room for final option]");
+ return;
+ }
+ opt_type = GET_U_1(bp);
+ bp++;
+ opt_len = GET_U_1(bp);
+ bp++;
+ if (opt_len < PGM_MIN_OPT_LEN) {
+ ND_PRINT("[Bad option, length %u < %u]", opt_len,
+ PGM_MIN_OPT_LEN);
+ break;
+ }
+ if (opts_len < opt_len) {
+ ND_PRINT("[Total option length leaves no room for final option]");
+ return;
+ }
+ ND_TCHECK_LEN(bp, opt_len - 2);
+
+ switch (opt_type & PGM_OPT_MASK) {
+ case PGM_OPT_LENGTH:
+#define PGM_OPT_LENGTH_LEN (2+2)
+ if (opt_len != PGM_OPT_LENGTH_LEN) {
+ ND_PRINT("[Bad OPT_LENGTH option, length %u != %u]",
+ opt_len, PGM_OPT_LENGTH_LEN);
+ return;
+ }
+ ND_PRINT(" OPTS LEN (extra?) %u", GET_BE_U_2(bp));
+ bp += 2;
+ opts_len -= PGM_OPT_LENGTH_LEN;
+ break;
+
+ case PGM_OPT_FRAGMENT:
+#define PGM_OPT_FRAGMENT_LEN (2+2+4+4+4)
+ if (opt_len != PGM_OPT_FRAGMENT_LEN) {
+ ND_PRINT("[Bad OPT_FRAGMENT option, length %u != %u]",
+ opt_len, PGM_OPT_FRAGMENT_LEN);
+ return;
+ }
+ bp += 2;
+ seq = GET_BE_U_4(bp);
+ bp += 4;
+ offset = GET_BE_U_4(bp);
+ bp += 4;
+ len = GET_BE_U_4(bp);
+ bp += 4;
+ ND_PRINT(" FRAG seq %u off %u len %u", seq, offset, len);
+ opts_len -= PGM_OPT_FRAGMENT_LEN;
+ break;
+
+ case PGM_OPT_NAK_LIST:
+ bp += 2;
+ opt_len -= 4; /* option header */
+ ND_PRINT(" NAK LIST");
+ while (opt_len) {
+ if (opt_len < 4) {
+ ND_PRINT("[Option length not a multiple of 4]");
+ return;
+ }
+ ND_PRINT(" %u", GET_BE_U_4(bp));
+ bp += 4;
+ opt_len -= 4;
+ opts_len -= 4;
+ }
+ break;
+
+ case PGM_OPT_JOIN:
+#define PGM_OPT_JOIN_LEN (2+2+4)
+ if (opt_len != PGM_OPT_JOIN_LEN) {
+ ND_PRINT("[Bad OPT_JOIN option, length %u != %u]",
+ opt_len, PGM_OPT_JOIN_LEN);
+ return;
+ }
+ bp += 2;
+ seq = GET_BE_U_4(bp);
+ bp += 4;
+ ND_PRINT(" JOIN %u", seq);
+ opts_len -= PGM_OPT_JOIN_LEN;
+ break;
+
+ case PGM_OPT_NAK_BO_IVL:
+#define PGM_OPT_NAK_BO_IVL_LEN (2+2+4+4)
+ if (opt_len != PGM_OPT_NAK_BO_IVL_LEN) {
+ ND_PRINT("[Bad OPT_NAK_BO_IVL option, length %u != %u]",
+ opt_len, PGM_OPT_NAK_BO_IVL_LEN);
+ return;
+ }
+ bp += 2;
+ offset = GET_BE_U_4(bp);
+ bp += 4;
+ seq = GET_BE_U_4(bp);
+ bp += 4;
+ ND_PRINT(" BACKOFF ivl %u ivlseq %u", offset, seq);
+ opts_len -= PGM_OPT_NAK_BO_IVL_LEN;
+ break;
+
+ case PGM_OPT_NAK_BO_RNG:
+#define PGM_OPT_NAK_BO_RNG_LEN (2+2+4+4)
+ if (opt_len != PGM_OPT_NAK_BO_RNG_LEN) {
+ ND_PRINT("[Bad OPT_NAK_BO_RNG option, length %u != %u]",
+ opt_len, PGM_OPT_NAK_BO_RNG_LEN);
+ return;
+ }
+ bp += 2;
+ offset = GET_BE_U_4(bp);
+ bp += 4;
+ seq = GET_BE_U_4(bp);
+ bp += 4;
+ ND_PRINT(" BACKOFF max %u min %u", offset, seq);
+ opts_len -= PGM_OPT_NAK_BO_RNG_LEN;
+ break;
+
+ case PGM_OPT_REDIRECT:
+#define PGM_OPT_REDIRECT_FIXED_LEN (2+2+2+2)
+ if (opt_len < PGM_OPT_REDIRECT_FIXED_LEN) {
+ ND_PRINT("[Bad OPT_REDIRECT option, length %u < %u]",
+ opt_len, PGM_OPT_REDIRECT_FIXED_LEN);
+ return;
+ }
+ bp += 2;
+ nla_afnum = GET_BE_U_2(bp);
+ bp += 2+2;
+ switch (nla_afnum) {
+ case AFNUM_INET:
+ if (opt_len != PGM_OPT_REDIRECT_FIXED_LEN + sizeof(nd_ipv4)) {
+ ND_PRINT("[Bad OPT_REDIRECT option, length %u != %u + address size]",
+ opt_len, PGM_OPT_REDIRECT_FIXED_LEN);
+ return;
+ }
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv4));
+ addrtostr(bp, nla_buf, sizeof(nla_buf));
+ bp += sizeof(nd_ipv4);
+ opts_len -= PGM_OPT_REDIRECT_FIXED_LEN + sizeof(nd_ipv4);
+ break;
+ case AFNUM_INET6:
+ if (opt_len != PGM_OPT_REDIRECT_FIXED_LEN + sizeof(nd_ipv6)) {
+ ND_PRINT("[Bad OPT_REDIRECT option, length %u != %u + address size]",
+ opt_len, PGM_OPT_REDIRECT_FIXED_LEN);
+ return;
+ }
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv6));
+ addrtostr6(bp, nla_buf, sizeof(nla_buf));
+ bp += sizeof(nd_ipv6);
+ opts_len -= PGM_OPT_REDIRECT_FIXED_LEN + sizeof(nd_ipv6);
+ break;
+ default:
+ goto trunc;
+ break;
+ }
+
+ ND_PRINT(" REDIRECT %s", nla_buf);
+ break;
+
+ case PGM_OPT_PARITY_PRM:
+#define PGM_OPT_PARITY_PRM_LEN (2+2+4)
+ if (opt_len != PGM_OPT_PARITY_PRM_LEN) {
+ ND_PRINT("[Bad OPT_PARITY_PRM option, length %u != %u]",
+ opt_len, PGM_OPT_PARITY_PRM_LEN);
+ return;
+ }
+ bp += 2;
+ len = GET_BE_U_4(bp);
+ bp += 4;
+ ND_PRINT(" PARITY MAXTGS %u", len);
+ opts_len -= PGM_OPT_PARITY_PRM_LEN;
+ break;
+
+ case PGM_OPT_PARITY_GRP:
+#define PGM_OPT_PARITY_GRP_LEN (2+2+4)
+ if (opt_len != PGM_OPT_PARITY_GRP_LEN) {
+ ND_PRINT("[Bad OPT_PARITY_GRP option, length %u != %u]",
+ opt_len, PGM_OPT_PARITY_GRP_LEN);
+ return;
+ }
+ bp += 2;
+ seq = GET_BE_U_4(bp);
+ bp += 4;
+ ND_PRINT(" PARITY GROUP %u", seq);
+ opts_len -= PGM_OPT_PARITY_GRP_LEN;
+ break;
+
+ case PGM_OPT_CURR_TGSIZE:
+#define PGM_OPT_CURR_TGSIZE_LEN (2+2+4)
+ if (opt_len != PGM_OPT_CURR_TGSIZE_LEN) {
+ ND_PRINT("[Bad OPT_CURR_TGSIZE option, length %u != %u]",
+ opt_len, PGM_OPT_CURR_TGSIZE_LEN);
+ return;
+ }
+ bp += 2;
+ len = GET_BE_U_4(bp);
+ bp += 4;
+ ND_PRINT(" PARITY ATGS %u", len);
+ opts_len -= PGM_OPT_CURR_TGSIZE_LEN;
+ break;
+
+ case PGM_OPT_NBR_UNREACH:
+#define PGM_OPT_NBR_UNREACH_LEN (2+2)
+ if (opt_len != PGM_OPT_NBR_UNREACH_LEN) {
+ ND_PRINT("[Bad OPT_NBR_UNREACH option, length %u != %u]",
+ opt_len, PGM_OPT_NBR_UNREACH_LEN);
+ return;
+ }
+ bp += 2;
+ ND_PRINT(" NBR_UNREACH");
+ opts_len -= PGM_OPT_NBR_UNREACH_LEN;
+ break;
+
+ case PGM_OPT_PATH_NLA:
+ ND_PRINT(" PATH_NLA [%u]", opt_len);
+ bp += opt_len;
+ opts_len -= opt_len;
+ break;
+
+ case PGM_OPT_SYN:
+#define PGM_OPT_SYN_LEN (2+2)
+ if (opt_len != PGM_OPT_SYN_LEN) {
+ ND_PRINT("[Bad OPT_SYN option, length %u != %u]",
+ opt_len, PGM_OPT_SYN_LEN);
+ return;
+ }
+ bp += 2;
+ ND_PRINT(" SYN");
+ opts_len -= PGM_OPT_SYN_LEN;
+ break;
+
+ case PGM_OPT_FIN:
+#define PGM_OPT_FIN_LEN (2+2)
+ if (opt_len != PGM_OPT_FIN_LEN) {
+ ND_PRINT("[Bad OPT_FIN option, length %u != %u]",
+ opt_len, PGM_OPT_FIN_LEN);
+ return;
+ }
+ bp += 2;
+ ND_PRINT(" FIN");
+ opts_len -= PGM_OPT_FIN_LEN;
+ break;
+
+ case PGM_OPT_RST:
+#define PGM_OPT_RST_LEN (2+2)
+ if (opt_len != PGM_OPT_RST_LEN) {
+ ND_PRINT("[Bad OPT_RST option, length %u != %u]",
+ opt_len, PGM_OPT_RST_LEN);
+ return;
+ }
+ bp += 2;
+ ND_PRINT(" RST");
+ opts_len -= PGM_OPT_RST_LEN;
+ break;
+
+ case PGM_OPT_CR:
+ ND_PRINT(" CR");
+ bp += opt_len;
+ opts_len -= opt_len;
+ break;
+
+ case PGM_OPT_CRQST:
+#define PGM_OPT_CRQST_LEN (2+2)
+ if (opt_len != PGM_OPT_CRQST_LEN) {
+ ND_PRINT("[Bad OPT_CRQST option, length %u != %u]",
+ opt_len, PGM_OPT_CRQST_LEN);
+ return;
+ }
+ bp += 2;
+ ND_PRINT(" CRQST");
+ opts_len -= PGM_OPT_CRQST_LEN;
+ break;
+
+ case PGM_OPT_PGMCC_DATA:
+#define PGM_OPT_PGMCC_DATA_FIXED_LEN (2+2+4+2+2)
+ if (opt_len < PGM_OPT_PGMCC_DATA_FIXED_LEN) {
+ ND_PRINT("[Bad OPT_PGMCC_DATA option, length %u < %u]",
+ opt_len, PGM_OPT_PGMCC_DATA_FIXED_LEN);
+ return;
+ }
+ bp += 2;
+ offset = GET_BE_U_4(bp);
+ bp += 4;
+ nla_afnum = GET_BE_U_2(bp);
+ bp += 2+2;
+ switch (nla_afnum) {
+ case AFNUM_INET:
+ if (opt_len != PGM_OPT_PGMCC_DATA_FIXED_LEN + sizeof(nd_ipv4)) {
+ ND_PRINT("[Bad OPT_PGMCC_DATA option, length %u != %u + address size]",
+ opt_len, PGM_OPT_PGMCC_DATA_FIXED_LEN);
+ return;
+ }
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv4));
+ addrtostr(bp, nla_buf, sizeof(nla_buf));
+ bp += sizeof(nd_ipv4);
+ opts_len -= PGM_OPT_PGMCC_DATA_FIXED_LEN + sizeof(nd_ipv4);
+ break;
+ case AFNUM_INET6:
+ if (opt_len != PGM_OPT_PGMCC_DATA_FIXED_LEN + sizeof(nd_ipv6)) {
+ ND_PRINT("[Bad OPT_PGMCC_DATA option, length %u != %u + address size]",
+ opt_len, PGM_OPT_PGMCC_DATA_FIXED_LEN);
+ return;
+ }
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv6));
+ addrtostr6(bp, nla_buf, sizeof(nla_buf));
+ bp += sizeof(nd_ipv6);
+ opts_len -= PGM_OPT_PGMCC_DATA_FIXED_LEN + sizeof(nd_ipv6);
+ break;
+ default:
+ goto trunc;
+ break;
+ }
+
+ ND_PRINT(" PGMCC DATA %u %s", offset, nla_buf);
+ break;
+
+ case PGM_OPT_PGMCC_FEEDBACK:
+#define PGM_OPT_PGMCC_FEEDBACK_FIXED_LEN (2+2+4+2+2)
+ if (opt_len < PGM_OPT_PGMCC_FEEDBACK_FIXED_LEN) {
+ ND_PRINT("[Bad PGM_OPT_PGMCC_FEEDBACK option, length %u < %u]",
+ opt_len, PGM_OPT_PGMCC_FEEDBACK_FIXED_LEN);
+ return;
+ }
+ bp += 2;
+ offset = GET_BE_U_4(bp);
+ bp += 4;
+ nla_afnum = GET_BE_U_2(bp);
+ bp += 2+2;
+ switch (nla_afnum) {
+ case AFNUM_INET:
+ if (opt_len != PGM_OPT_PGMCC_FEEDBACK_FIXED_LEN + sizeof(nd_ipv4)) {
+ ND_PRINT("[Bad OPT_PGMCC_FEEDBACK option, length %u != %u + address size]",
+ opt_len, PGM_OPT_PGMCC_FEEDBACK_FIXED_LEN);
+ return;
+ }
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv4));
+ addrtostr(bp, nla_buf, sizeof(nla_buf));
+ bp += sizeof(nd_ipv4);
+ opts_len -= PGM_OPT_PGMCC_FEEDBACK_FIXED_LEN + sizeof(nd_ipv4);
+ break;
+ case AFNUM_INET6:
+ if (opt_len != PGM_OPT_PGMCC_FEEDBACK_FIXED_LEN + sizeof(nd_ipv6)) {
+ ND_PRINT("[Bad OPT_PGMCC_FEEDBACK option, length %u != %u + address size]",
+ opt_len, PGM_OPT_PGMCC_FEEDBACK_FIXED_LEN);
+ return;
+ }
+ ND_TCHECK_LEN(bp, sizeof(nd_ipv6));
+ addrtostr6(bp, nla_buf, sizeof(nla_buf));
+ bp += sizeof(nd_ipv6);
+ opts_len -= PGM_OPT_PGMCC_FEEDBACK_FIXED_LEN + sizeof(nd_ipv6);
+ break;
+ default:
+ goto trunc;
+ break;
+ }
+
+ ND_PRINT(" PGMCC FEEDBACK %u %s", offset, nla_buf);
+ break;
+
+ default:
+ ND_PRINT(" OPT_%02X [%u] ", opt_type, opt_len);
+ bp += opt_len;
+ opts_len -= opt_len;
+ break;
+ }
+
+ if (opt_type & PGM_OPT_END)
+ break;
+ }
+ }
+
+ ND_PRINT(" [%u]", length);
+ if (ndo->ndo_packettype == PT_PGM_ZMTP1 &&
+ (pgm_type_val == PGM_ODATA || pgm_type_val == PGM_RDATA))
+ zmtp1_datagram_print(ndo, bp,
+ GET_BE_U_2(pgm->pgm_length));
+
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-pim.c b/print-pim.c
new file mode 100644
index 0000000..f2db8c7
--- /dev/null
+++ b/print-pim.c
@@ -0,0 +1,1234 @@
+/*
+ * Copyright (c) 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Protocol Independent Multicast (PIM) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip.h"
+#include "ip6.h"
+#include "ipproto.h"
+
+#define PIMV1_TYPE_QUERY 0
+#define PIMV1_TYPE_REGISTER 1
+#define PIMV1_TYPE_REGISTER_STOP 2
+#define PIMV1_TYPE_JOIN_PRUNE 3
+#define PIMV1_TYPE_RP_REACHABILITY 4
+#define PIMV1_TYPE_ASSERT 5
+#define PIMV1_TYPE_GRAFT 6
+#define PIMV1_TYPE_GRAFT_ACK 7
+
+static const struct tok pimv1_type_str[] = {
+ { PIMV1_TYPE_QUERY, "Query" },
+ { PIMV1_TYPE_REGISTER, "Register" },
+ { PIMV1_TYPE_REGISTER_STOP, "Register-Stop" },
+ { PIMV1_TYPE_JOIN_PRUNE, "Join/Prune" },
+ { PIMV1_TYPE_RP_REACHABILITY, "RP-reachable" },
+ { PIMV1_TYPE_ASSERT, "Assert" },
+ { PIMV1_TYPE_GRAFT, "Graft" },
+ { PIMV1_TYPE_GRAFT_ACK, "Graft-ACK" },
+ { 0, NULL }
+};
+
+#define PIMV2_TYPE_HELLO 0
+#define PIMV2_TYPE_REGISTER 1
+#define PIMV2_TYPE_REGISTER_STOP 2
+#define PIMV2_TYPE_JOIN_PRUNE 3
+#define PIMV2_TYPE_BOOTSTRAP 4
+#define PIMV2_TYPE_ASSERT 5
+#define PIMV2_TYPE_GRAFT 6
+#define PIMV2_TYPE_GRAFT_ACK 7
+#define PIMV2_TYPE_CANDIDATE_RP 8
+#define PIMV2_TYPE_PRUNE_REFRESH 9
+#define PIMV2_TYPE_DF_ELECTION 10
+#define PIMV2_TYPE_ECMP_REDIRECT 11
+
+static const struct tok pimv2_type_values[] = {
+ { PIMV2_TYPE_HELLO, "Hello" },
+ { PIMV2_TYPE_REGISTER, "Register" },
+ { PIMV2_TYPE_REGISTER_STOP, "Register Stop" },
+ { PIMV2_TYPE_JOIN_PRUNE, "Join / Prune" },
+ { PIMV2_TYPE_BOOTSTRAP, "Bootstrap" },
+ { PIMV2_TYPE_ASSERT, "Assert" },
+ { PIMV2_TYPE_GRAFT, "Graft" },
+ { PIMV2_TYPE_GRAFT_ACK, "Graft Acknowledgement" },
+ { PIMV2_TYPE_CANDIDATE_RP, "Candidate RP Advertisement" },
+ { PIMV2_TYPE_PRUNE_REFRESH, "Prune Refresh" },
+ { PIMV2_TYPE_DF_ELECTION, "DF Election" },
+ { PIMV2_TYPE_ECMP_REDIRECT, "ECMP Redirect" },
+ { 0, NULL}
+};
+
+#define PIMV2_HELLO_OPTION_HOLDTIME 1
+#define PIMV2_HELLO_OPTION_LANPRUNEDELAY 2
+#define PIMV2_HELLO_OPTION_DR_PRIORITY_OLD 18
+#define PIMV2_HELLO_OPTION_DR_PRIORITY 19
+#define PIMV2_HELLO_OPTION_GENID 20
+#define PIMV2_HELLO_OPTION_REFRESH_CAP 21
+#define PIMV2_HELLO_OPTION_BIDIR_CAP 22
+#define PIMV2_HELLO_OPTION_ADDRESS_LIST 24
+#define PIMV2_HELLO_OPTION_ADDRESS_LIST_OLD 65001
+
+static const struct tok pimv2_hello_option_values[] = {
+ { PIMV2_HELLO_OPTION_HOLDTIME, "Hold Time" },
+ { PIMV2_HELLO_OPTION_LANPRUNEDELAY, "LAN Prune Delay" },
+ { PIMV2_HELLO_OPTION_DR_PRIORITY_OLD, "DR Priority (Old)" },
+ { PIMV2_HELLO_OPTION_DR_PRIORITY, "DR Priority" },
+ { PIMV2_HELLO_OPTION_GENID, "Generation ID" },
+ { PIMV2_HELLO_OPTION_REFRESH_CAP, "State Refresh Capability" },
+ { PIMV2_HELLO_OPTION_BIDIR_CAP, "Bi-Directional Capability" },
+ { PIMV2_HELLO_OPTION_ADDRESS_LIST, "Address List" },
+ { PIMV2_HELLO_OPTION_ADDRESS_LIST_OLD, "Address List (Old)" },
+ { 0, NULL}
+};
+
+#define PIMV2_REGISTER_FLAG_LEN 4
+#define PIMV2_REGISTER_FLAG_BORDER 0x80000000
+#define PIMV2_REGISTER_FLAG_NULL 0x40000000
+
+static const struct tok pimv2_register_flag_values[] = {
+ { PIMV2_REGISTER_FLAG_BORDER, "Border" },
+ { PIMV2_REGISTER_FLAG_NULL, "Null" },
+ { 0, NULL}
+};
+
+#define PIMV2_DF_ELECTION_OFFER 1
+#define PIMV2_DF_ELECTION_WINNER 2
+#define PIMV2_DF_ELECTION_BACKOFF 3
+#define PIMV2_DF_ELECTION_PASS 4
+
+static const struct tok pimv2_df_election_flag_values[] = {
+ { PIMV2_DF_ELECTION_OFFER, "Offer" },
+ { PIMV2_DF_ELECTION_WINNER, "Winner" },
+ { PIMV2_DF_ELECTION_BACKOFF, "Backoff" },
+ { PIMV2_DF_ELECTION_PASS, "Pass" },
+ { 0, NULL}
+};
+
+#define PIMV2_DF_ELECTION_PASS_BACKOFF_STR(x) ( \
+ x == PIMV2_DF_ELECTION_BACKOFF ? "offer" : "new winner" )
+
+
+/*
+ * XXX: We consider a case where IPv6 is not ready yet for portability,
+ * but PIM dependent definitions should be independent of IPv6...
+ */
+
+struct pim {
+ nd_uint8_t pim_typever;
+ /* upper 4bit: PIM version number; 2 for PIMv2 */
+ /* lower 4bit: the PIM message type, currently they are:
+ * Hello, Register, Register-Stop, Join/Prune,
+ * Bootstrap, Assert, Graft (PIM-DM only),
+ * Graft-Ack (PIM-DM only), C-RP-Adv
+ */
+#define PIM_VER(x) (((x) & 0xf0) >> 4)
+#define PIM_TYPE(x) ((x) & 0x0f)
+ nd_uint8_t pim_rsv; /* Reserved in v1, subtype+address length in v2 */
+#define PIM_SUBTYPE(x) (((x) & 0xf0) >> 4)
+ nd_uint16_t pim_cksum; /* IP style check sum */
+};
+
+static void pimv2_print(netdissect_options *, const u_char *bp, u_int len, const u_char *);
+
+static void
+pimv1_join_prune_print(netdissect_options *ndo,
+ const u_char *bp, u_int len)
+{
+ u_int ngroups, njoin, nprune;
+ u_int njp;
+
+ /* If it's a single group and a single source, use 1-line output. */
+ if (ND_TTEST_LEN(bp, 30) && GET_U_1(bp + 11) == 1 &&
+ ((njoin = GET_BE_U_2(bp + 20)) + GET_BE_U_2(bp + 22)) == 1) {
+ u_int hold;
+
+ ND_PRINT(" RPF %s ", GET_IPADDR_STRING(bp));
+ hold = GET_BE_U_2(bp + 6);
+ if (hold != 180) {
+ ND_PRINT("Hold ");
+ unsigned_relts_print(ndo, hold);
+ }
+ ND_PRINT("%s (%s/%u, %s", njoin ? "Join" : "Prune",
+ GET_IPADDR_STRING(bp + 26), GET_U_1(bp + 25) & 0x3f,
+ GET_IPADDR_STRING(bp + 12));
+ if (GET_BE_U_4(bp + 16) != 0xffffffff)
+ ND_PRINT("/%s", GET_IPADDR_STRING(bp + 16));
+ ND_PRINT(") %s%s %s",
+ (GET_U_1(bp + 24) & 0x01) ? "Sparse" : "Dense",
+ (GET_U_1(bp + 25) & 0x80) ? " WC" : "",
+ (GET_U_1(bp + 25) & 0x40) ? "RP" : "SPT");
+ return;
+ }
+
+ if (len < sizeof(nd_ipv4))
+ goto trunc;
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("\n");
+ ND_PRINT(" Upstream Nbr: %s", GET_IPADDR_STRING(bp));
+ bp += 4;
+ len -= 4;
+ if (len < 4)
+ goto trunc;
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("\n");
+ ND_PRINT(" Hold time: ");
+ unsigned_relts_print(ndo, GET_BE_U_2(bp + 2));
+ if (ndo->ndo_vflag < 2)
+ return;
+ bp += 4;
+ len -= 4;
+
+ if (len < 4)
+ goto trunc;
+ ngroups = GET_U_1(bp + 3);
+ bp += 4;
+ len -= 4;
+ while (ngroups != 0) {
+ /*
+ * XXX - does the address have length "addrlen" and the
+ * mask length "maddrlen"?
+ */
+ if (len < 4)
+ goto trunc;
+ ND_PRINT("\n\tGroup: %s", GET_IPADDR_STRING(bp));
+ bp += 4;
+ len -= 4;
+ if (len < 4)
+ goto trunc;
+ if (GET_BE_U_4(bp) != 0xffffffff)
+ ND_PRINT("/%s", GET_IPADDR_STRING(bp));
+ bp += 4;
+ len -= 4;
+ if (len < 4)
+ goto trunc;
+ njoin = GET_BE_U_2(bp);
+ nprune = GET_BE_U_2(bp + 2);
+ ND_PRINT(" joined: %u pruned: %u", njoin, nprune);
+ bp += 4;
+ len -= 4;
+ for (njp = 0; njp < (njoin + nprune); njp++) {
+ const char *type;
+
+ if (njp < njoin)
+ type = "Join ";
+ else
+ type = "Prune";
+ if (len < 6)
+ goto trunc;
+ ND_PRINT("\n\t%s %s%s%s%s/%u", type,
+ (GET_U_1(bp) & 0x01) ? "Sparse " : "Dense ",
+ (GET_U_1(bp + 1) & 0x80) ? "WC " : "",
+ (GET_U_1(bp + 1) & 0x40) ? "RP " : "SPT ",
+ GET_IPADDR_STRING(bp + 2),
+ GET_U_1(bp + 1) & 0x3f);
+ bp += 6;
+ len -= 6;
+ }
+ ngroups--;
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+void
+pimv1_print(netdissect_options *ndo,
+ const u_char *bp, u_int len)
+{
+ u_char type;
+
+ ndo->ndo_protocol = "pimv1";
+ type = GET_U_1(bp + 1);
+
+ ND_PRINT(" %s", tok2str(pimv1_type_str, "[type %u]", type));
+ switch (type) {
+ case PIMV1_TYPE_QUERY:
+ if (ND_TTEST_1(bp + 8)) {
+ switch (GET_U_1(bp + 8) >> 4) {
+ case 0:
+ ND_PRINT(" Dense-mode");
+ break;
+ case 1:
+ ND_PRINT(" Sparse-mode");
+ break;
+ case 2:
+ ND_PRINT(" Sparse-Dense-mode");
+ break;
+ default:
+ ND_PRINT(" mode-%u", GET_U_1(bp + 8) >> 4);
+ break;
+ }
+ }
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" (Hold-time ");
+ unsigned_relts_print(ndo, GET_BE_U_2(bp + 10));
+ ND_PRINT(")");
+ }
+ break;
+
+ case PIMV1_TYPE_REGISTER:
+ ND_TCHECK_LEN(bp + 8, 20); /* ip header */
+ ND_PRINT(" for %s > %s", GET_IPADDR_STRING(bp + 20),
+ GET_IPADDR_STRING(bp + 24));
+ break;
+ case PIMV1_TYPE_REGISTER_STOP:
+ ND_PRINT(" for %s > %s", GET_IPADDR_STRING(bp + 8),
+ GET_IPADDR_STRING(bp + 12));
+ break;
+ case PIMV1_TYPE_RP_REACHABILITY:
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" group %s", GET_IPADDR_STRING(bp + 8));
+ if (GET_BE_U_4(bp + 12) != 0xffffffff)
+ ND_PRINT("/%s", GET_IPADDR_STRING(bp + 12));
+ ND_PRINT(" RP %s hold ", GET_IPADDR_STRING(bp + 16));
+ unsigned_relts_print(ndo, GET_BE_U_2(bp + 22));
+ }
+ break;
+ case PIMV1_TYPE_ASSERT:
+ ND_PRINT(" for %s > %s", GET_IPADDR_STRING(bp + 16),
+ GET_IPADDR_STRING(bp + 8));
+ if (GET_BE_U_4(bp + 12) != 0xffffffff)
+ ND_PRINT("/%s", GET_IPADDR_STRING(bp + 12));
+ ND_PRINT(" %s pref %u metric %u",
+ (GET_U_1(bp + 20) & 0x80) ? "RP-tree" : "SPT",
+ GET_BE_U_4(bp + 20) & 0x7fffffff,
+ GET_BE_U_4(bp + 24));
+ break;
+ case PIMV1_TYPE_JOIN_PRUNE:
+ case PIMV1_TYPE_GRAFT:
+ case PIMV1_TYPE_GRAFT_ACK:
+ if (ndo->ndo_vflag) {
+ if (len < 8)
+ goto trunc;
+ pimv1_join_prune_print(ndo, bp + 8, len - 8);
+ }
+ break;
+ }
+ if ((GET_U_1(bp + 4) >> 4) != 1)
+ ND_PRINT(" [v%u]", GET_U_1(bp + 4) >> 4);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+/*
+ * auto-RP is a cisco protocol, documented at
+ * ftp://ftpeng.cisco.com/ipmulticast/specs/pim-autorp-spec01.txt
+ *
+ * This implements version 1+, dated Sept 9, 1998.
+ */
+void
+cisco_autorp_print(netdissect_options *ndo,
+ const u_char *bp, u_int len)
+{
+ u_int type;
+ u_int numrps;
+ u_int hold;
+
+ ndo->ndo_protocol = "cisco_autorp";
+ if (len < 8)
+ goto trunc;
+ ND_PRINT(" auto-rp ");
+ type = GET_U_1(bp);
+ switch (type) {
+ case 0x11:
+ ND_PRINT("candidate-advert");
+ break;
+ case 0x12:
+ ND_PRINT("mapping");
+ break;
+ default:
+ ND_PRINT("type-0x%02x", type);
+ break;
+ }
+
+ numrps = GET_U_1(bp + 1);
+
+ ND_PRINT(" Hold ");
+ hold = GET_BE_U_2(bp + 2);
+ if (hold)
+ unsigned_relts_print(ndo, GET_BE_U_2(bp + 2));
+ else
+ ND_PRINT("FOREVER");
+
+ /* Next 4 bytes are reserved. */
+
+ bp += 8; len -= 8;
+
+ /*XXX skip unless -v? */
+
+ /*
+ * Rest of packet:
+ * numrps entries of the form:
+ * 32 bits: RP
+ * 6 bits: reserved
+ * 2 bits: PIM version supported, bit 0 is "supports v1", 1 is "v2".
+ * 8 bits: # of entries for this RP
+ * each entry: 7 bits: reserved, 1 bit: negative,
+ * 8 bits: mask 32 bits: source
+ * lather, rinse, repeat.
+ */
+ while (numrps != 0) {
+ u_int nentries;
+ char s;
+
+ if (len < 4)
+ goto trunc;
+ ND_PRINT(" RP %s", GET_IPADDR_STRING(bp));
+ bp += 4;
+ len -= 4;
+ if (len < 1)
+ goto trunc;
+ switch (GET_U_1(bp) & 0x3) {
+ case 0: ND_PRINT(" PIMv?");
+ break;
+ case 1: ND_PRINT(" PIMv1");
+ break;
+ case 2: ND_PRINT(" PIMv2");
+ break;
+ case 3: ND_PRINT(" PIMv1+2");
+ break;
+ }
+ if (GET_U_1(bp) & 0xfc)
+ ND_PRINT(" [rsvd=0x%02x]", GET_U_1(bp) & 0xfc);
+ bp += 1;
+ len -= 1;
+ if (len < 1)
+ goto trunc;
+ nentries = GET_U_1(bp);
+ bp += 1;
+ len -= 1;
+ s = ' ';
+ while (nentries != 0) {
+ if (len < 6)
+ goto trunc;
+ ND_PRINT("%c%s%s/%u", s, GET_U_1(bp) & 1 ? "!" : "",
+ GET_IPADDR_STRING(bp + 2), GET_U_1(bp + 1));
+ if (GET_U_1(bp) & 0x02) {
+ ND_PRINT(" bidir");
+ }
+ if (GET_U_1(bp) & 0xfc) {
+ ND_PRINT("[rsvd=0x%02x]", GET_U_1(bp) & 0xfc);
+ }
+ s = ',';
+ bp += 6; len -= 6;
+ nentries--;
+ }
+ numrps--;
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+void
+pim_print(netdissect_options *ndo,
+ const u_char *bp, u_int len, const u_char *bp2)
+{
+ const struct pim *pim = (const struct pim *)bp;
+ uint8_t pim_typever;
+
+ ndo->ndo_protocol = "pim";
+
+ pim_typever = GET_U_1(pim->pim_typever);
+ switch (PIM_VER(pim_typever)) {
+ case 2:
+ if (!ndo->ndo_vflag) {
+ ND_PRINT("PIMv%u, %s, length %u",
+ PIM_VER(pim_typever),
+ tok2str(pimv2_type_values,"Unknown Type",PIM_TYPE(pim_typever)),
+ len);
+ return;
+ } else {
+ ND_PRINT("PIMv%u, length %u\n\t%s",
+ PIM_VER(pim_typever),
+ len,
+ tok2str(pimv2_type_values,"Unknown Type",PIM_TYPE(pim_typever)));
+ pimv2_print(ndo, bp, len, bp2);
+ }
+ break;
+ default:
+ ND_PRINT("PIMv%u, length %u",
+ PIM_VER(pim_typever),
+ len);
+ break;
+ }
+}
+
+/*
+ * PIMv2 uses encoded address representations.
+ *
+ * The last PIM-SM I-D before RFC2117 was published specified the
+ * following representation for unicast addresses. However, RFC2117
+ * specified no encoding for unicast addresses with the unicast
+ * address length specified in the header. Therefore, we have to
+ * guess which encoding is being used (Cisco's PIMv2 implementation
+ * uses the non-RFC encoding). RFC2117 turns a previously "Reserved"
+ * field into a 'unicast-address-length-in-bytes' field. We guess
+ * that it's the draft encoding if this reserved field is zero.
+ *
+ * RFC2362 goes back to the encoded format, and calls the addr length
+ * field "reserved" again.
+ *
+ * The first byte is the address family, from:
+ *
+ * 0 Reserved
+ * 1 IP (IP version 4)
+ * 2 IP6 (IP version 6)
+ * 3 NSAP
+ * 4 HDLC (8-bit multidrop)
+ * 5 BBN 1822
+ * 6 802 (includes all 802 media plus Ethernet "canonical format")
+ * 7 E.163
+ * 8 E.164 (SMDS, Frame Relay, ATM)
+ * 9 F.69 (Telex)
+ * 10 X.121 (X.25, Frame Relay)
+ * 11 IPX
+ * 12 Appletalk
+ * 13 Decnet IV
+ * 14 Banyan Vines
+ * 15 E.164 with NSAP format subaddress
+ *
+ * In addition, the second byte is an "Encoding". 0 is the default
+ * encoding for the address family, and no other encodings are currently
+ * specified.
+ *
+ */
+
+enum pimv2_addrtype {
+ pimv2_unicast, pimv2_group, pimv2_source
+};
+
+/* 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Addr Family | Encoding Type | Unicast Address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+++++++
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Addr Family | Encoding Type | Reserved | Mask Len |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Group multicast Address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Addr Family | Encoding Type | Rsrvd |S|W|R| Mask Len |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Source Address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+static int
+pimv2_addr_print(netdissect_options *ndo,
+ const u_char *bp, u_int len, enum pimv2_addrtype at,
+ u_int addr_len, int silent)
+{
+ u_int af;
+ int hdrlen;
+
+ if (addr_len == 0) {
+ if (len < 2)
+ goto trunc;
+ switch (GET_U_1(bp)) {
+ case 1:
+ af = AF_INET;
+ addr_len = (u_int)sizeof(nd_ipv4);
+ break;
+ case 2:
+ af = AF_INET6;
+ addr_len = (u_int)sizeof(nd_ipv6);
+ break;
+ default:
+ return -1;
+ }
+ if (GET_U_1(bp + 1) != 0)
+ return -1;
+ hdrlen = 2;
+ } else {
+ switch (addr_len) {
+ case sizeof(nd_ipv4):
+ af = AF_INET;
+ break;
+ case sizeof(nd_ipv6):
+ af = AF_INET6;
+ break;
+ default:
+ return -1;
+ break;
+ }
+ hdrlen = 0;
+ }
+
+ bp += hdrlen;
+ len -= hdrlen;
+ switch (at) {
+ case pimv2_unicast:
+ if (len < addr_len)
+ goto trunc;
+ ND_TCHECK_LEN(bp, addr_len);
+ if (af == AF_INET) {
+ if (!silent)
+ ND_PRINT("%s", GET_IPADDR_STRING(bp));
+ }
+ else if (af == AF_INET6) {
+ if (!silent)
+ ND_PRINT("%s", GET_IP6ADDR_STRING(bp));
+ }
+ return hdrlen + addr_len;
+ case pimv2_group:
+ case pimv2_source:
+ if (len < addr_len + 2)
+ goto trunc;
+ ND_TCHECK_LEN(bp, addr_len + 2);
+ if (af == AF_INET) {
+ if (!silent) {
+ ND_PRINT("%s", GET_IPADDR_STRING(bp + 2));
+ if (GET_U_1(bp + 1) != 32)
+ ND_PRINT("/%u", GET_U_1(bp + 1));
+ }
+ }
+ else if (af == AF_INET6) {
+ if (!silent) {
+ ND_PRINT("%s", GET_IP6ADDR_STRING(bp + 2));
+ if (GET_U_1(bp + 1) != 128)
+ ND_PRINT("/%u", GET_U_1(bp + 1));
+ }
+ }
+ if (GET_U_1(bp) && !silent) {
+ if (at == pimv2_group) {
+ ND_PRINT("(0x%02x)", GET_U_1(bp));
+ } else {
+ ND_PRINT("(%s%s%s",
+ GET_U_1(bp) & 0x04 ? "S" : "",
+ GET_U_1(bp) & 0x02 ? "W" : "",
+ GET_U_1(bp) & 0x01 ? "R" : "");
+ if (GET_U_1(bp) & 0xf8) {
+ ND_PRINT("+0x%02x",
+ GET_U_1(bp) & 0xf8);
+ }
+ ND_PRINT(")");
+ }
+ }
+ return hdrlen + 2 + addr_len;
+ default:
+ return -1;
+ }
+trunc:
+ return -1;
+}
+
+enum checksum_status {
+ CORRECT,
+ INCORRECT,
+ UNVERIFIED
+};
+
+static enum checksum_status
+pimv2_check_checksum(netdissect_options *ndo, const u_char *bp,
+ const u_char *bp2, u_int len)
+{
+ const struct ip *ip;
+ u_int cksum;
+
+ if (!ND_TTEST_LEN(bp, len)) {
+ /* We don't have all the data. */
+ return (UNVERIFIED);
+ }
+ ip = (const struct ip *)bp2;
+ if (IP_V(ip) == 4) {
+ struct cksum_vec vec[1];
+
+ vec[0].ptr = bp;
+ vec[0].len = len;
+ cksum = in_cksum(vec, 1);
+ return (cksum ? INCORRECT : CORRECT);
+ } else if (IP_V(ip) == 6) {
+ const struct ip6_hdr *ip6;
+
+ ip6 = (const struct ip6_hdr *)bp2;
+ cksum = nextproto6_cksum(ndo, ip6, bp, len, len, IPPROTO_PIM);
+ return (cksum ? INCORRECT : CORRECT);
+ } else {
+ return (UNVERIFIED);
+ }
+}
+
+static void
+pimv2_print(netdissect_options *ndo,
+ const u_char *bp, u_int len, const u_char *bp2)
+{
+ const struct pim *pim = (const struct pim *)bp;
+ int advance;
+ int subtype;
+ enum checksum_status cksum_status;
+ u_int pim_typever;
+ u_int pimv2_addr_len;
+
+ ndo->ndo_protocol = "pimv2";
+ if (len < 2) {
+ ND_PRINT("[length %u < 2]", len);
+ nd_print_invalid(ndo);
+ return;
+ }
+ pim_typever = GET_U_1(pim->pim_typever);
+ /* RFC5015 allocates the high 4 bits of pim_rsv for "subtype". */
+ pimv2_addr_len = GET_U_1(pim->pim_rsv) & 0x0f;
+ if (pimv2_addr_len != 0)
+ ND_PRINT(", RFC2117-encoding");
+
+ if (len < 4) {
+ ND_PRINT("[length %u < 4]", len);
+ nd_print_invalid(ndo);
+ return;
+ }
+ ND_PRINT(", cksum 0x%04x ", GET_BE_U_2(pim->pim_cksum));
+ if (GET_BE_U_2(pim->pim_cksum) == 0) {
+ ND_PRINT("(unverified)");
+ } else {
+ if (PIM_TYPE(pim_typever) == PIMV2_TYPE_REGISTER) {
+ /*
+ * The checksum only covers the packet header,
+ * not the encapsulated packet.
+ */
+ cksum_status = pimv2_check_checksum(ndo, bp, bp2, 8);
+ if (cksum_status == INCORRECT) {
+ /*
+ * To quote RFC 4601, "For interoperability
+ * reasons, a message carrying a checksum
+ * calculated over the entire PIM Register
+ * message should also be accepted."
+ */
+ cksum_status = pimv2_check_checksum(ndo, bp, bp2, len);
+ }
+ } else {
+ /*
+ * The checksum covers the entire packet.
+ */
+ cksum_status = pimv2_check_checksum(ndo, bp, bp2, len);
+ }
+ switch (cksum_status) {
+
+ case CORRECT:
+ ND_PRINT("(correct)");
+ break;
+
+ case INCORRECT:
+ ND_PRINT("(incorrect)");
+ break;
+
+ case UNVERIFIED:
+ ND_PRINT("(unverified)");
+ break;
+ }
+ }
+ bp += 4;
+ len -= 4;
+
+ switch (PIM_TYPE(pim_typever)) {
+ case PIMV2_TYPE_HELLO:
+ {
+ uint16_t otype, olen;
+ while (len > 0) {
+ if (len < 4)
+ goto trunc;
+ otype = GET_BE_U_2(bp);
+ olen = GET_BE_U_2(bp + 2);
+ ND_PRINT("\n\t %s Option (%u), length %u, Value: ",
+ tok2str(pimv2_hello_option_values, "Unknown", otype),
+ otype,
+ olen);
+ bp += 4;
+ len -= 4;
+
+ if (len < olen)
+ goto trunc;
+ ND_TCHECK_LEN(bp, olen);
+ switch (otype) {
+ case PIMV2_HELLO_OPTION_HOLDTIME:
+ if (olen != 2) {
+ ND_PRINT("[option length %u != 2]", olen);
+ nd_print_invalid(ndo);
+ return;
+ } else {
+ unsigned_relts_print(ndo,
+ GET_BE_U_2(bp));
+ }
+ break;
+
+ case PIMV2_HELLO_OPTION_LANPRUNEDELAY:
+ if (olen != 4) {
+ ND_PRINT("[option length %u != 4]", olen);
+ nd_print_invalid(ndo);
+ return;
+ } else {
+ char t_bit;
+ uint16_t lan_delay, override_interval;
+ lan_delay = GET_BE_U_2(bp);
+ override_interval = GET_BE_U_2(bp + 2);
+ t_bit = (lan_delay & 0x8000)? 1 : 0;
+ lan_delay &= ~0x8000;
+ ND_PRINT("\n\t T-bit=%u, LAN delay %ums, Override interval %ums",
+ t_bit, lan_delay, override_interval);
+ }
+ break;
+
+ case PIMV2_HELLO_OPTION_DR_PRIORITY_OLD:
+ case PIMV2_HELLO_OPTION_DR_PRIORITY:
+ switch (olen) {
+ case 0:
+ ND_PRINT("Bi-Directional Capability (Old)");
+ break;
+ case 4:
+ ND_PRINT("%u", GET_BE_U_4(bp));
+ break;
+ default:
+ ND_PRINT("[option length %u != 4]", olen);
+ nd_print_invalid(ndo);
+ return;
+ break;
+ }
+ break;
+
+ case PIMV2_HELLO_OPTION_GENID:
+ if (olen != 4) {
+ ND_PRINT("[option length %u != 4]", olen);
+ nd_print_invalid(ndo);
+ return;
+ } else {
+ ND_PRINT("0x%08x", GET_BE_U_4(bp));
+ }
+ break;
+
+ case PIMV2_HELLO_OPTION_REFRESH_CAP:
+ if (olen != 4) {
+ ND_PRINT("[option length %u != 4]", olen);
+ nd_print_invalid(ndo);
+ return;
+ } else {
+ ND_PRINT("v%u", GET_U_1(bp));
+ if (GET_U_1(bp + 1) != 0) {
+ ND_PRINT(", interval ");
+ unsigned_relts_print(ndo,
+ GET_U_1(bp + 1));
+ }
+ if (GET_BE_U_2(bp + 2) != 0) {
+ ND_PRINT(" ?0x%04x?",
+ GET_BE_U_2(bp + 2));
+ }
+ }
+ break;
+
+ case PIMV2_HELLO_OPTION_BIDIR_CAP:
+ break;
+
+ case PIMV2_HELLO_OPTION_ADDRESS_LIST_OLD:
+ case PIMV2_HELLO_OPTION_ADDRESS_LIST:
+ if (ndo->ndo_vflag > 1) {
+ const u_char *ptr = bp;
+ u_int plen = len;
+ while (ptr < (bp+olen)) {
+ ND_PRINT("\n\t ");
+ advance = pimv2_addr_print(ndo, ptr, plen, pimv2_unicast, pimv2_addr_len, 0);
+ if (advance < 0)
+ goto trunc;
+ ptr += advance;
+ plen -= advance;
+ }
+ }
+ break;
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, bp, "\n\t ", olen);
+ break;
+ }
+ /* do we want to see an additionally hexdump ? */
+ if (ndo->ndo_vflag> 1)
+ print_unknown_data(ndo, bp, "\n\t ", olen);
+ bp += olen;
+ len -= olen;
+ }
+ break;
+ }
+
+ case PIMV2_TYPE_REGISTER:
+ {
+ const struct ip *ip;
+
+ if (len < 4)
+ goto trunc;
+ ND_TCHECK_LEN(bp, PIMV2_REGISTER_FLAG_LEN);
+
+ ND_PRINT(", Flags [ %s ]\n\t",
+ tok2str(pimv2_register_flag_values,
+ "none",
+ GET_BE_U_4(bp)));
+
+ bp += 4; len -= 4;
+ /* encapsulated multicast packet */
+ if (len == 0)
+ goto trunc;
+ ip = (const struct ip *)bp;
+ switch (IP_V(ip)) {
+ case 0: /* Null header */
+ ND_PRINT("IP-Null-header %s > %s",
+ GET_IPADDR_STRING(ip->ip_src),
+ GET_IPADDR_STRING(ip->ip_dst));
+ break;
+
+ case 4: /* IPv4 */
+ ip_print(ndo, bp, len);
+ break;
+
+ case 6: /* IPv6 */
+ ip6_print(ndo, bp, len);
+ break;
+
+ default:
+ ND_PRINT("IP ver %u", IP_V(ip));
+ break;
+ }
+ break;
+ }
+
+ case PIMV2_TYPE_REGISTER_STOP:
+ ND_PRINT(" group=");
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_group, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance; len -= advance;
+ ND_PRINT(" source=");
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_unicast, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance; len -= advance;
+ break;
+
+ case PIMV2_TYPE_JOIN_PRUNE:
+ case PIMV2_TYPE_GRAFT:
+ case PIMV2_TYPE_GRAFT_ACK:
+
+
+ /*
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |PIM Ver| Type | Addr length | Checksum |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Unicast-Upstream Neighbor Address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Reserved | Num groups | Holdtime |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Encoded-Multicast Group Address-1 |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Number of Joined Sources | Number of Pruned Sources |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Encoded-Joined Source Address-1 |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | . |
+ * | . |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Encoded-Joined Source Address-n |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Encoded-Pruned Source Address-1 |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | . |
+ * | . |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Encoded-Pruned Source Address-n |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | . |
+ * | . |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Encoded-Multicast Group Address-n |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+ {
+ uint8_t ngroup;
+ uint16_t holdtime;
+ uint16_t njoin;
+ uint16_t nprune;
+ u_int i, j;
+
+ if (PIM_TYPE(pim_typever) != 7) { /*not for Graft-ACK*/
+ ND_PRINT(", upstream-neighbor: ");
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_unicast, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance; len -= advance;
+ }
+ if (len < 4)
+ goto trunc;
+ ND_TCHECK_4(bp);
+ ngroup = GET_U_1(bp + 1);
+ holdtime = GET_BE_U_2(bp + 2);
+ ND_PRINT("\n\t %u group(s)", ngroup);
+ if (PIM_TYPE(pim_typever) != 7) { /*not for Graft-ACK*/
+ ND_PRINT(", holdtime: ");
+ if (holdtime == 0xffff)
+ ND_PRINT("infinite");
+ else
+ unsigned_relts_print(ndo, holdtime);
+ }
+ bp += 4; len -= 4;
+ for (i = 0; i < ngroup; i++) {
+ ND_PRINT("\n\t group #%u: ", i+1);
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_group, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance; len -= advance;
+ if (len < 4)
+ goto trunc;
+ ND_TCHECK_4(bp);
+ njoin = GET_BE_U_2(bp);
+ nprune = GET_BE_U_2(bp + 2);
+ ND_PRINT(", joined sources: %u, pruned sources: %u", njoin, nprune);
+ bp += 4; len -= 4;
+ for (j = 0; j < njoin; j++) {
+ ND_PRINT("\n\t joined source #%u: ", j+1);
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_source, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance; len -= advance;
+ }
+ for (j = 0; j < nprune; j++) {
+ ND_PRINT("\n\t pruned source #%u: ", j+1);
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_source, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance; len -= advance;
+ }
+ }
+ break;
+ }
+
+ case PIMV2_TYPE_BOOTSTRAP:
+ {
+ u_int i, j, frpcnt;
+
+ /* Fragment Tag, Hash Mask len, and BSR-priority */
+ if (len < 2)
+ goto trunc;
+ ND_PRINT(" tag=%x", GET_BE_U_2(bp));
+ bp += 2;
+ len -= 2;
+ if (len < 1)
+ goto trunc;
+ ND_PRINT(" hashmlen=%u", GET_U_1(bp));
+ if (len < 2)
+ goto trunc;
+ ND_TCHECK_1(bp + 2);
+ ND_PRINT(" BSRprio=%u", GET_U_1(bp + 1));
+ bp += 2;
+ len -= 2;
+
+ /* Encoded-Unicast-BSR-Address */
+ ND_PRINT(" BSR=");
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_unicast, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance;
+ len -= advance;
+
+ for (i = 0; len > 0; i++) {
+ /* Encoded-Group Address */
+ ND_PRINT(" (group%u: ", i);
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_group, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance;
+ len -= advance;
+
+ /* RP-Count, Frag RP-Cnt, and rsvd */
+ if (len < 1)
+ goto trunc;
+ ND_PRINT(" RPcnt=%u", GET_U_1(bp));
+ if (len < 2)
+ goto trunc;
+ frpcnt = GET_U_1(bp + 1);
+ ND_PRINT(" FRPcnt=%u", frpcnt);
+ if (len < 4)
+ goto trunc;
+ bp += 4;
+ len -= 4;
+
+ for (j = 0; j < frpcnt && len > 0; j++) {
+ /* each RP info */
+ ND_PRINT(" RP%u=", j);
+ if ((advance = pimv2_addr_print(ndo, bp, len,
+ pimv2_unicast,
+ pimv2_addr_len,
+ 0)) < 0)
+ goto trunc;
+ bp += advance;
+ len -= advance;
+
+ if (len < 2)
+ goto trunc;
+ ND_PRINT(",holdtime=");
+ unsigned_relts_print(ndo,
+ GET_BE_U_2(bp));
+ if (len < 3)
+ goto trunc;
+ ND_PRINT(",prio=%u", GET_U_1(bp + 2));
+ if (len < 4)
+ goto trunc;
+ bp += 4;
+ len -= 4;
+ }
+ ND_PRINT(")");
+ }
+ break;
+ }
+ case PIMV2_TYPE_ASSERT:
+ ND_PRINT(" group=");
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_group, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance; len -= advance;
+ ND_PRINT(" src=");
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_unicast, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance; len -= advance;
+ if (len < 8)
+ goto trunc;
+ ND_TCHECK_8(bp);
+ if (GET_U_1(bp) & 0x80)
+ ND_PRINT(" RPT");
+ ND_PRINT(" pref=%u", GET_BE_U_4(bp) & 0x7fffffff);
+ ND_PRINT(" metric=%u", GET_BE_U_4(bp + 4));
+ break;
+
+ case PIMV2_TYPE_CANDIDATE_RP:
+ {
+ u_int i, pfxcnt;
+
+ /* Prefix-Cnt, Priority, and Holdtime */
+ if (len < 1)
+ goto trunc;
+ ND_PRINT(" prefix-cnt=%u", GET_U_1(bp));
+ pfxcnt = GET_U_1(bp);
+ if (len < 2)
+ goto trunc;
+ ND_PRINT(" prio=%u", GET_U_1(bp + 1));
+ if (len < 4)
+ goto trunc;
+ ND_PRINT(" holdtime=");
+ unsigned_relts_print(ndo, GET_BE_U_2(bp + 2));
+ bp += 4;
+ len -= 4;
+
+ /* Encoded-Unicast-RP-Address */
+ ND_PRINT(" RP=");
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_unicast, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance;
+ len -= advance;
+
+ /* Encoded-Group Addresses */
+ for (i = 0; i < pfxcnt && len > 0; i++) {
+ ND_PRINT(" Group%u=", i);
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_group, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance;
+ len -= advance;
+ }
+ break;
+ }
+
+ case PIMV2_TYPE_PRUNE_REFRESH:
+ ND_PRINT(" src=");
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_unicast, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance;
+ len -= advance;
+ ND_PRINT(" grp=");
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_group, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance;
+ len -= advance;
+ ND_PRINT(" forwarder=");
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_unicast, pimv2_addr_len, 0)) < 0)
+ goto trunc;
+ bp += advance;
+ len -= advance;
+ if (len < 2)
+ goto trunc;
+ ND_PRINT(" TUNR ");
+ unsigned_relts_print(ndo, GET_BE_U_2(bp));
+ break;
+
+ case PIMV2_TYPE_DF_ELECTION:
+ subtype = PIM_SUBTYPE(GET_U_1(pim->pim_rsv));
+ ND_PRINT("\n\t %s,", tok2str( pimv2_df_election_flag_values,
+ "Unknown", subtype) );
+
+ ND_PRINT(" rpa=");
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_unicast, pimv2_addr_len, 0)) < 0) {
+ goto trunc;
+ }
+ bp += advance;
+ len -= advance;
+ ND_PRINT(" sender pref=%u", GET_BE_U_4(bp) );
+ ND_PRINT(" sender metric=%u", GET_BE_U_4(bp + 4));
+
+ bp += 8;
+ len -= 8;
+
+ switch (subtype) {
+ case PIMV2_DF_ELECTION_BACKOFF:
+ case PIMV2_DF_ELECTION_PASS:
+ ND_PRINT("\n\t %s addr=", PIMV2_DF_ELECTION_PASS_BACKOFF_STR(subtype));
+ if ((advance = pimv2_addr_print(ndo, bp, len, pimv2_unicast, pimv2_addr_len, 0)) < 0) {
+ goto trunc;
+ }
+ bp += advance;
+ len -= advance;
+
+ ND_PRINT(" %s pref=%u", PIMV2_DF_ELECTION_PASS_BACKOFF_STR(subtype), GET_BE_U_4(bp) );
+ ND_PRINT(" %s metric=%u", PIMV2_DF_ELECTION_PASS_BACKOFF_STR(subtype), GET_BE_U_4(bp + 4));
+
+ bp += 8;
+ len -= 8;
+
+ if (subtype == PIMV2_DF_ELECTION_BACKOFF) {
+ ND_PRINT(" interval %dms", GET_BE_U_2(bp));
+ }
+
+ break;
+ default:
+ break;
+ }
+ break;
+
+ default:
+ ND_PRINT(" [type %u]", PIM_TYPE(pim_typever));
+ break;
+ }
+
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-pktap.c b/print-pktap.c
new file mode 100644
index 0000000..05ce5f9
--- /dev/null
+++ b/print-pktap.c
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Apple's DLT_PKTAP printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+#ifdef DLT_PKTAP
+
+/*
+ * XXX - these are little-endian in the captures I've seen, but Apple
+ * no longer make any big-endian machines (Macs use x86, iOS machines
+ * use ARM and run it little-endian), so that might be by definition
+ * or they might be host-endian.
+ *
+ * If a big-endian PKTAP file ever shows up, and it comes from a
+ * big-endian machine, presumably these are host-endian, and we need
+ * to just fetch the fields directly in tcpdump but byte-swap them
+ * to host byte order in libpcap.
+ */
+typedef struct pktap_header {
+ nd_uint32_t pkt_len; /* length of pktap header */
+ nd_uint32_t pkt_rectype; /* type of record */
+ nd_uint32_t pkt_dlt; /* DLT type of this packet */
+ char pkt_ifname[24]; /* interface name */
+ nd_uint32_t pkt_flags;
+ nd_uint32_t pkt_pfamily; /* "protocol family" */
+ nd_uint32_t pkt_llhdrlen; /* link-layer header length? */
+ nd_uint32_t pkt_lltrlrlen; /* link-layer trailer length? */
+ nd_uint32_t pkt_pid; /* process ID */
+ char pkt_cmdname[20]; /* command name */
+ nd_uint32_t pkt_svc_class; /* "service class" */
+ nd_uint16_t pkt_iftype; /* "interface type" */
+ nd_uint16_t pkt_ifunit; /* unit number of interface? */
+ nd_uint32_t pkt_epid; /* "effective process ID" */
+ char pkt_ecmdname[20]; /* "effective command name" */
+} pktap_header_t;
+
+/*
+ * Record types.
+ */
+#define PKT_REC_NONE 0 /* nothing follows the header */
+#define PKT_REC_PACKET 1 /* a packet follows the header */
+
+static void
+pktap_header_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const pktap_header_t *hdr;
+ uint32_t dlt, hdrlen;
+ const char *dltname;
+
+ hdr = (const pktap_header_t *)bp;
+
+ dlt = GET_LE_U_4(hdr->pkt_dlt);
+ hdrlen = GET_LE_U_4(hdr->pkt_len);
+ dltname = pcap_datalink_val_to_name(dlt);
+ if (!ndo->ndo_qflag) {
+ ND_PRINT("DLT %s (%u) len %u",
+ (dltname != NULL ? dltname : "UNKNOWN"), dlt, hdrlen);
+ } else {
+ ND_PRINT("%s", (dltname != NULL ? dltname : "UNKNOWN"));
+ }
+
+ ND_PRINT(", length %u: ", length);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+pktap_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ uint32_t dlt, hdrlen, rectype;
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+ if_printer printer;
+ const pktap_header_t *hdr;
+ struct pcap_pkthdr nhdr;
+
+ ndo->ndo_protocol = "pktap";
+ if (length < sizeof(pktap_header_t)) {
+ ND_PRINT(" (packet too short, %u < %zu)",
+ length, sizeof(pktap_header_t));
+ goto invalid;
+ }
+ hdr = (const pktap_header_t *)p;
+ dlt = GET_LE_U_4(hdr->pkt_dlt);
+ hdrlen = GET_LE_U_4(hdr->pkt_len);
+ if (hdrlen < sizeof(pktap_header_t)) {
+ /*
+ * Claimed header length < structure length.
+ * XXX - does this just mean some fields aren't
+ * being supplied, or is it truly an error (i.e.,
+ * is the length supplied so that the header can
+ * be expanded in the future)?
+ */
+ ND_PRINT(" (pkt_len too small, %u < %zu)",
+ hdrlen, sizeof(pktap_header_t));
+ goto invalid;
+ }
+ if (hdrlen > length) {
+ ND_PRINT(" (pkt_len too big, %u > %u)",
+ hdrlen, length);
+ goto invalid;
+ }
+ ND_TCHECK_LEN(p, hdrlen);
+
+ if (ndo->ndo_eflag)
+ pktap_header_print(ndo, p, length);
+
+ length -= hdrlen;
+ caplen -= hdrlen;
+ p += hdrlen;
+
+ rectype = GET_LE_U_4(hdr->pkt_rectype);
+ switch (rectype) {
+
+ case PKT_REC_NONE:
+ ND_PRINT("no data");
+ break;
+
+ case PKT_REC_PACKET:
+ printer = lookup_printer(dlt);
+ if (printer != NULL) {
+ nhdr = *h;
+ nhdr.caplen = caplen;
+ nhdr.len = length;
+ printer(ndo, &nhdr, p);
+ hdrlen += ndo->ndo_ll_hdr_len;
+ } else {
+ if (!ndo->ndo_eflag)
+ pktap_header_print(ndo, (const u_char *)hdr,
+ length + hdrlen);
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ }
+ break;
+ }
+
+ ndo->ndo_ll_hdr_len += hdrlen;
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
+#endif /* DLT_PKTAP */
diff --git a/print-ppi.c b/print-ppi.c
new file mode 100644
index 0000000..774edfb
--- /dev/null
+++ b/print-ppi.c
@@ -0,0 +1,131 @@
+/*
+ * Oracle
+ */
+
+/* \summary: Per-Packet Information (DLT_PPI) printer */
+
+/* Specification:
+ * Per-Packet Information Header Specification - Version 1.0.7
+ * https://web.archive.org/web/20160328114748/http://www.cacetech.com/documents/PPI%20Header%20format%201.0.7.pdf
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+
+typedef struct ppi_header {
+ nd_uint8_t ppi_ver; /* Version. Currently 0 */
+ nd_uint8_t ppi_flags; /* Flags. */
+ nd_uint16_t ppi_len; /* Length of entire message, including
+ * this header and TLV payload. */
+ nd_uint32_t ppi_dlt; /* Data Link Type of the captured
+ * packet data. */
+} ppi_header_t;
+
+#define PPI_HDRLEN 8
+
+#ifdef DLT_PPI
+
+static void
+ppi_header_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const ppi_header_t *hdr;
+ uint16_t len;
+ uint32_t dlt;
+ const char *dltname;
+
+ hdr = (const ppi_header_t *)bp;
+
+ len = GET_LE_U_2(hdr->ppi_len);
+ dlt = GET_LE_U_4(hdr->ppi_dlt);
+ dltname = pcap_datalink_val_to_name(dlt);
+
+ if (!ndo->ndo_qflag) {
+ ND_PRINT("V.%u DLT %s (%u) len %u", GET_U_1(hdr->ppi_ver),
+ (dltname != NULL ? dltname : "UNKNOWN"), dlt,
+ len);
+ } else {
+ ND_PRINT("%s", (dltname != NULL ? dltname : "UNKNOWN"));
+ }
+
+ ND_PRINT(", length %u: ", length);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+ppi_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ if_printer printer;
+ const ppi_header_t *hdr;
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+ uint16_t len;
+ uint32_t dlt;
+ uint32_t hdrlen;
+ struct pcap_pkthdr nhdr;
+
+ ndo->ndo_protocol = "ppi";
+ if (caplen < sizeof(ppi_header_t)) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+
+ hdr = (const ppi_header_t *)p;
+ len = GET_LE_U_2(hdr->ppi_len);
+ if (len < sizeof(ppi_header_t) || len > 65532) {
+ /* It MUST be between 8 and 65,532 inclusive (spec 3.1.3) */
+ ND_PRINT(" [length %u < %zu or > 65532]", len,
+ sizeof(ppi_header_t));
+ nd_print_invalid(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+ if (caplen < len) {
+ /*
+ * If we don't have the entire PPI header, don't
+ * bother.
+ */
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+ dlt = GET_LE_U_4(hdr->ppi_dlt);
+
+ if (ndo->ndo_eflag)
+ ppi_header_print(ndo, p, length);
+
+ length -= len;
+ caplen -= len;
+ p += len;
+
+ printer = lookup_printer(dlt);
+ if (printer != NULL) {
+ nhdr = *h;
+ nhdr.caplen = caplen;
+ nhdr.len = length;
+ printer(ndo, &nhdr, p);
+ hdrlen = ndo->ndo_ll_hdr_len;
+ } else {
+ if (!ndo->ndo_eflag)
+ ppi_header_print(ndo, (const u_char *)hdr, length + len);
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ hdrlen = 0;
+ }
+ ndo->ndo_ll_hdr_len += len + hdrlen;
+}
+#endif /* DLT_PPI */
diff --git a/print-ppp.c b/print-ppp.c
new file mode 100644
index 0000000..aba243d
--- /dev/null
+++ b/print-ppp.c
@@ -0,0 +1,1897 @@
+/*
+ * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Extensively modified by Motonori Shindo (mshindo@mshindo.net) for more
+ * complete PPP support.
+ */
+
+/* \summary: Point to Point Protocol (PPP) printer */
+
+/*
+ * TODO:
+ * o resolve XXX as much as possible
+ * o MP support
+ * o BAP support
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#ifdef __bsdi__
+#include <net/slcompress.h>
+#include <net/if_ppp.h>
+#endif
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "ppp.h"
+#include "chdlc.h"
+#include "ethertype.h"
+#include "oui.h"
+#include "netdissect-alloc.h"
+
+/*
+ * The following constants are defined by IANA. Please refer to
+ * https://www.isi.edu/in-notes/iana/assignments/ppp-numbers
+ * for the up-to-date information.
+ */
+
+/* Protocol Codes defined in ppp.h */
+
+static const struct tok ppptype2str[] = {
+ { PPP_IP, "IP" },
+ { PPP_OSI, "OSI" },
+ { PPP_NS, "NS" },
+ { PPP_DECNET, "DECNET" },
+ { PPP_APPLE, "APPLE" },
+ { PPP_IPX, "IPX" },
+ { PPP_VJC, "VJC IP" },
+ { PPP_VJNC, "VJNC IP" },
+ { PPP_BRPDU, "BRPDU" },
+ { PPP_STII, "STII" },
+ { PPP_VINES, "VINES" },
+ { PPP_MPLS_UCAST, "MPLS" },
+ { PPP_MPLS_MCAST, "MPLS" },
+ { PPP_COMP, "Compressed"},
+ { PPP_ML, "MLPPP"},
+ { PPP_IPV6, "IP6"},
+
+ { PPP_HELLO, "HELLO" },
+ { PPP_LUXCOM, "LUXCOM" },
+ { PPP_SNS, "SNS" },
+ { PPP_IPCP, "IPCP" },
+ { PPP_OSICP, "OSICP" },
+ { PPP_NSCP, "NSCP" },
+ { PPP_DECNETCP, "DECNETCP" },
+ { PPP_APPLECP, "APPLECP" },
+ { PPP_IPXCP, "IPXCP" },
+ { PPP_STIICP, "STIICP" },
+ { PPP_VINESCP, "VINESCP" },
+ { PPP_IPV6CP, "IP6CP" },
+ { PPP_MPLSCP, "MPLSCP" },
+
+ { PPP_LCP, "LCP" },
+ { PPP_PAP, "PAP" },
+ { PPP_LQM, "LQM" },
+ { PPP_CHAP, "CHAP" },
+ { PPP_EAP, "EAP" },
+ { PPP_SPAP, "SPAP" },
+ { PPP_SPAP_OLD, "Old-SPAP" },
+ { PPP_BACP, "BACP" },
+ { PPP_BAP, "BAP" },
+ { PPP_MPCP, "MLPPP-CP" },
+ { PPP_CCP, "CCP" },
+ { 0, NULL }
+};
+
+/* Control Protocols (LCP/IPCP/CCP etc.) Codes defined in RFC 1661 */
+
+#define CPCODES_VEXT 0 /* Vendor-Specific (RFC2153) */
+#define CPCODES_CONF_REQ 1 /* Configure-Request */
+#define CPCODES_CONF_ACK 2 /* Configure-Ack */
+#define CPCODES_CONF_NAK 3 /* Configure-Nak */
+#define CPCODES_CONF_REJ 4 /* Configure-Reject */
+#define CPCODES_TERM_REQ 5 /* Terminate-Request */
+#define CPCODES_TERM_ACK 6 /* Terminate-Ack */
+#define CPCODES_CODE_REJ 7 /* Code-Reject */
+#define CPCODES_PROT_REJ 8 /* Protocol-Reject (LCP only) */
+#define CPCODES_ECHO_REQ 9 /* Echo-Request (LCP only) */
+#define CPCODES_ECHO_RPL 10 /* Echo-Reply (LCP only) */
+#define CPCODES_DISC_REQ 11 /* Discard-Request (LCP only) */
+#define CPCODES_ID 12 /* Identification (LCP only) RFC1570 */
+#define CPCODES_TIME_REM 13 /* Time-Remaining (LCP only) RFC1570 */
+#define CPCODES_RESET_REQ 14 /* Reset-Request (CCP only) RFC1962 */
+#define CPCODES_RESET_REP 15 /* Reset-Reply (CCP only) */
+
+static const struct tok cpcodes[] = {
+ {CPCODES_VEXT, "Vendor-Extension"}, /* RFC2153 */
+ {CPCODES_CONF_REQ, "Conf-Request"},
+ {CPCODES_CONF_ACK, "Conf-Ack"},
+ {CPCODES_CONF_NAK, "Conf-Nack"},
+ {CPCODES_CONF_REJ, "Conf-Reject"},
+ {CPCODES_TERM_REQ, "Term-Request"},
+ {CPCODES_TERM_ACK, "Term-Ack"},
+ {CPCODES_CODE_REJ, "Code-Reject"},
+ {CPCODES_PROT_REJ, "Prot-Reject"},
+ {CPCODES_ECHO_REQ, "Echo-Request"},
+ {CPCODES_ECHO_RPL, "Echo-Reply"},
+ {CPCODES_DISC_REQ, "Disc-Req"},
+ {CPCODES_ID, "Ident"}, /* RFC1570 */
+ {CPCODES_TIME_REM, "Time-Rem"}, /* RFC1570 */
+ {CPCODES_RESET_REQ, "Reset-Req"}, /* RFC1962 */
+ {CPCODES_RESET_REP, "Reset-Ack"}, /* RFC1962 */
+ {0, NULL}
+};
+
+/* LCP Config Options */
+
+#define LCPOPT_VEXT 0
+#define LCPOPT_MRU 1
+#define LCPOPT_ACCM 2
+#define LCPOPT_AP 3
+#define LCPOPT_QP 4
+#define LCPOPT_MN 5
+#define LCPOPT_DEP6 6
+#define LCPOPT_PFC 7
+#define LCPOPT_ACFC 8
+#define LCPOPT_FCSALT 9
+#define LCPOPT_SDP 10
+#define LCPOPT_NUMMODE 11
+#define LCPOPT_DEP12 12
+#define LCPOPT_CBACK 13
+#define LCPOPT_DEP14 14
+#define LCPOPT_DEP15 15
+#define LCPOPT_DEP16 16
+#define LCPOPT_MLMRRU 17
+#define LCPOPT_MLSSNHF 18
+#define LCPOPT_MLED 19
+#define LCPOPT_PROP 20
+#define LCPOPT_DCEID 21
+#define LCPOPT_MPP 22
+#define LCPOPT_LD 23
+#define LCPOPT_LCPAOPT 24
+#define LCPOPT_COBS 25
+#define LCPOPT_PE 26
+#define LCPOPT_MLHF 27
+#define LCPOPT_I18N 28
+#define LCPOPT_SDLOS 29
+#define LCPOPT_PPPMUX 30
+
+static const char *lcpconfopts[] = {
+ "Vend-Ext", /* (0) */
+ "MRU", /* (1) */
+ "ACCM", /* (2) */
+ "Auth-Prot", /* (3) */
+ "Qual-Prot", /* (4) */
+ "Magic-Num", /* (5) */
+ "deprecated(6)", /* used to be a Quality Protocol */
+ "PFC", /* (7) */
+ "ACFC", /* (8) */
+ "FCS-Alt", /* (9) */
+ "SDP", /* (10) */
+ "Num-Mode", /* (11) */
+ "deprecated(12)", /* used to be a Multi-Link-Procedure*/
+ "Call-Back", /* (13) */
+ "deprecated(14)", /* used to be a Connect-Time */
+ "deprecated(15)", /* used to be a Compund-Frames */
+ "deprecated(16)", /* used to be a Nominal-Data-Encap */
+ "MRRU", /* (17) */
+ "12-Bit seq #", /* (18) */
+ "End-Disc", /* (19) */
+ "Proprietary", /* (20) */
+ "DCE-Id", /* (21) */
+ "MP+", /* (22) */
+ "Link-Disc", /* (23) */
+ "LCP-Auth-Opt", /* (24) */
+ "COBS", /* (25) */
+ "Prefix-elision", /* (26) */
+ "Multilink-header-Form",/* (27) */
+ "I18N", /* (28) */
+ "SDL-over-SONET/SDH", /* (29) */
+ "PPP-Muxing", /* (30) */
+};
+
+#define NUM_LCPOPTS (sizeof(lcpconfopts) / sizeof(lcpconfopts[0]))
+
+/* ECP - to be supported */
+
+/* CCP Config Options */
+
+#define CCPOPT_OUI 0 /* RFC1962 */
+#define CCPOPT_PRED1 1 /* RFC1962 */
+#define CCPOPT_PRED2 2 /* RFC1962 */
+#define CCPOPT_PJUMP 3 /* RFC1962 */
+/* 4-15 unassigned */
+#define CCPOPT_HPPPC 16 /* RFC1962 */
+#define CCPOPT_STACLZS 17 /* RFC1974 */
+#define CCPOPT_MPPC 18 /* RFC2118 */
+#define CCPOPT_GFZA 19 /* RFC1962 */
+#define CCPOPT_V42BIS 20 /* RFC1962 */
+#define CCPOPT_BSDCOMP 21 /* RFC1977 */
+/* 22 unassigned */
+#define CCPOPT_LZSDCP 23 /* RFC1967 */
+#define CCPOPT_MVRCA 24 /* RFC1975 */
+#define CCPOPT_DEC 25 /* RFC1976 */
+#define CCPOPT_DEFLATE 26 /* RFC1979 */
+/* 27-254 unassigned */
+#define CCPOPT_RESV 255 /* RFC1962 */
+
+static const struct tok ccpconfopts_values[] = {
+ { CCPOPT_OUI, "OUI" },
+ { CCPOPT_PRED1, "Pred-1" },
+ { CCPOPT_PRED2, "Pred-2" },
+ { CCPOPT_PJUMP, "Puddle" },
+ { CCPOPT_HPPPC, "HP-PPC" },
+ { CCPOPT_STACLZS, "Stac-LZS" },
+ { CCPOPT_MPPC, "MPPC" },
+ { CCPOPT_GFZA, "Gand-FZA" },
+ { CCPOPT_V42BIS, "V.42bis" },
+ { CCPOPT_BSDCOMP, "BSD-Comp" },
+ { CCPOPT_LZSDCP, "LZS-DCP" },
+ { CCPOPT_MVRCA, "MVRCA" },
+ { CCPOPT_DEC, "DEC" },
+ { CCPOPT_DEFLATE, "Deflate" },
+ { CCPOPT_RESV, "Reserved"},
+ {0, NULL}
+};
+
+/* BACP Config Options */
+
+#define BACPOPT_FPEER 1 /* RFC2125 */
+
+static const struct tok bacconfopts_values[] = {
+ { BACPOPT_FPEER, "Favored-Peer" },
+ {0, NULL}
+};
+
+
+/* SDCP - to be supported */
+
+/* IPCP Config Options */
+#define IPCPOPT_2ADDR 1 /* RFC1172, RFC1332 (deprecated) */
+#define IPCPOPT_IPCOMP 2 /* RFC1332 */
+#define IPCPOPT_ADDR 3 /* RFC1332 */
+#define IPCPOPT_MOBILE4 4 /* RFC2290 */
+#define IPCPOPT_PRIDNS 129 /* RFC1877 */
+#define IPCPOPT_PRINBNS 130 /* RFC1877 */
+#define IPCPOPT_SECDNS 131 /* RFC1877 */
+#define IPCPOPT_SECNBNS 132 /* RFC1877 */
+
+static const struct tok ipcpopt_values[] = {
+ { IPCPOPT_2ADDR, "IP-Addrs" },
+ { IPCPOPT_IPCOMP, "IP-Comp" },
+ { IPCPOPT_ADDR, "IP-Addr" },
+ { IPCPOPT_MOBILE4, "Home-Addr" },
+ { IPCPOPT_PRIDNS, "Pri-DNS" },
+ { IPCPOPT_PRINBNS, "Pri-NBNS" },
+ { IPCPOPT_SECDNS, "Sec-DNS" },
+ { IPCPOPT_SECNBNS, "Sec-NBNS" },
+ { 0, NULL }
+};
+
+#define IPCPOPT_IPCOMP_HDRCOMP 0x61 /* rfc3544 */
+#define IPCPOPT_IPCOMP_MINLEN 14
+
+static const struct tok ipcpopt_compproto_values[] = {
+ { PPP_VJC, "VJ-Comp" },
+ { IPCPOPT_IPCOMP_HDRCOMP, "IP Header Compression" },
+ { 0, NULL }
+};
+
+static const struct tok ipcpopt_compproto_subopt_values[] = {
+ { 1, "RTP-Compression" },
+ { 2, "Enhanced RTP-Compression" },
+ { 0, NULL }
+};
+
+/* IP6CP Config Options */
+#define IP6CP_IFID 1
+
+static const struct tok ip6cpopt_values[] = {
+ { IP6CP_IFID, "Interface-ID" },
+ { 0, NULL }
+};
+
+/* ATCP - to be supported */
+/* OSINLCP - to be supported */
+/* BVCP - to be supported */
+/* BCP - to be supported */
+/* IPXCP - to be supported */
+/* MPLSCP - to be supported */
+
+/* Auth Algorithms */
+
+/* 0-4 Reserved (RFC1994) */
+#define AUTHALG_CHAPMD5 5 /* RFC1994 */
+#define AUTHALG_MSCHAP1 128 /* RFC2433 */
+#define AUTHALG_MSCHAP2 129 /* RFC2795 */
+
+static const struct tok authalg_values[] = {
+ { AUTHALG_CHAPMD5, "MD5" },
+ { AUTHALG_MSCHAP1, "MS-CHAPv1" },
+ { AUTHALG_MSCHAP2, "MS-CHAPv2" },
+ { 0, NULL }
+};
+
+/* FCS Alternatives - to be supported */
+
+/* Multilink Endpoint Discriminator (RFC1717) */
+#define MEDCLASS_NULL 0 /* Null Class */
+#define MEDCLASS_LOCAL 1 /* Locally Assigned */
+#define MEDCLASS_IPV4 2 /* Internet Protocol (IPv4) */
+#define MEDCLASS_MAC 3 /* IEEE 802.1 global MAC address */
+#define MEDCLASS_MNB 4 /* PPP Magic Number Block */
+#define MEDCLASS_PSNDN 5 /* Public Switched Network Director Number */
+
+/* PPP LCP Callback */
+#define CALLBACK_AUTH 0 /* Location determined by user auth */
+#define CALLBACK_DSTR 1 /* Dialing string */
+#define CALLBACK_LID 2 /* Location identifier */
+#define CALLBACK_E164 3 /* E.164 number */
+#define CALLBACK_X500 4 /* X.500 distinguished name */
+#define CALLBACK_CBCP 6 /* Location is determined during CBCP nego */
+
+static const struct tok ppp_callback_values[] = {
+ { CALLBACK_AUTH, "UserAuth" },
+ { CALLBACK_DSTR, "DialString" },
+ { CALLBACK_LID, "LocalID" },
+ { CALLBACK_E164, "E.164" },
+ { CALLBACK_X500, "X.500" },
+ { CALLBACK_CBCP, "CBCP" },
+ { 0, NULL }
+};
+
+/* CHAP */
+
+#define CHAP_CHAL 1
+#define CHAP_RESP 2
+#define CHAP_SUCC 3
+#define CHAP_FAIL 4
+
+static const struct tok chapcode_values[] = {
+ { CHAP_CHAL, "Challenge" },
+ { CHAP_RESP, "Response" },
+ { CHAP_SUCC, "Success" },
+ { CHAP_FAIL, "Fail" },
+ { 0, NULL}
+};
+
+/* PAP */
+
+#define PAP_AREQ 1
+#define PAP_AACK 2
+#define PAP_ANAK 3
+
+static const struct tok papcode_values[] = {
+ { PAP_AREQ, "Auth-Req" },
+ { PAP_AACK, "Auth-ACK" },
+ { PAP_ANAK, "Auth-NACK" },
+ { 0, NULL }
+};
+
+/* BAP */
+#define BAP_CALLREQ 1
+#define BAP_CALLRES 2
+#define BAP_CBREQ 3
+#define BAP_CBRES 4
+#define BAP_LDQREQ 5
+#define BAP_LDQRES 6
+#define BAP_CSIND 7
+#define BAP_CSRES 8
+
+static u_int print_lcp_config_options(netdissect_options *, const u_char *p, u_int);
+static u_int print_ipcp_config_options(netdissect_options *, const u_char *p, u_int);
+static u_int print_ip6cp_config_options(netdissect_options *, const u_char *p, u_int);
+static u_int print_ccp_config_options(netdissect_options *, const u_char *p, u_int);
+static u_int print_bacp_config_options(netdissect_options *, const u_char *p, u_int);
+static void handle_ppp(netdissect_options *, u_int proto, const u_char *p, u_int length);
+
+/* generic Control Protocol (e.g. LCP, IPCP, CCP, etc.) handler */
+static void
+handle_ctrl_proto(netdissect_options *ndo,
+ u_int proto, const u_char *pptr, u_int length)
+{
+ const char *typestr;
+ u_int code, len;
+ u_int (*pfunc)(netdissect_options *, const u_char *, u_int);
+ u_int tlen, advance;
+ const u_char *tptr;
+
+ tptr=pptr;
+
+ typestr = tok2str(ppptype2str, "unknown ctrl-proto (0x%04x)", proto);
+ ND_PRINT("%s, ", typestr);
+
+ if (length < 4) /* FIXME weak boundary checking */
+ goto trunc;
+ ND_TCHECK_2(tptr);
+
+ code = GET_U_1(tptr);
+ tptr++;
+
+ ND_PRINT("%s (0x%02x), id %u, length %u",
+ tok2str(cpcodes, "Unknown Opcode",code),
+ code,
+ GET_U_1(tptr), /* ID */
+ length + 2);
+ tptr++;
+
+ if (!ndo->ndo_vflag)
+ return;
+
+ len = GET_BE_U_2(tptr);
+ tptr += 2;
+
+ if (len < 4) {
+ ND_PRINT("\n\tencoded length %u (< 4))", len);
+ return;
+ }
+
+ if (len > length) {
+ ND_PRINT("\n\tencoded length %u (> packet length %u))", len, length);
+ return;
+ }
+ length = len;
+
+ ND_PRINT("\n\tencoded length %u (=Option(s) length %u)", len, len - 4);
+
+ if (length == 4)
+ return; /* there may be a NULL confreq etc. */
+
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo, pptr - 2, "\n\t", 6);
+
+
+ switch (code) {
+ case CPCODES_VEXT:
+ if (length < 11)
+ break;
+ ND_PRINT("\n\t Magic-Num 0x%08x", GET_BE_U_4(tptr));
+ tptr += 4;
+ ND_PRINT(" Vendor: %s (%u)",
+ tok2str(oui_values,"Unknown",GET_BE_U_3(tptr)),
+ GET_BE_U_3(tptr));
+ /* XXX: need to decode Kind and Value(s)? */
+ break;
+ case CPCODES_CONF_REQ:
+ case CPCODES_CONF_ACK:
+ case CPCODES_CONF_NAK:
+ case CPCODES_CONF_REJ:
+ tlen = len - 4; /* Code(1), Identifier(1) and Length(2) */
+ do {
+ switch (proto) {
+ case PPP_LCP:
+ pfunc = print_lcp_config_options;
+ break;
+ case PPP_IPCP:
+ pfunc = print_ipcp_config_options;
+ break;
+ case PPP_IPV6CP:
+ pfunc = print_ip6cp_config_options;
+ break;
+ case PPP_CCP:
+ pfunc = print_ccp_config_options;
+ break;
+ case PPP_BACP:
+ pfunc = print_bacp_config_options;
+ break;
+ default:
+ /*
+ * No print routine for the options for
+ * this protocol.
+ */
+ pfunc = NULL;
+ break;
+ }
+
+ if (pfunc == NULL) /* catch the above null pointer if unknown CP */
+ break;
+
+ if ((advance = (*pfunc)(ndo, tptr, len)) == 0)
+ break;
+ if (tlen < advance) {
+ ND_PRINT(" [remaining options length %u < %u]",
+ tlen, advance);
+ nd_print_invalid(ndo);
+ break;
+ }
+ tlen -= advance;
+ tptr += advance;
+ } while (tlen != 0);
+ break;
+
+ case CPCODES_TERM_REQ:
+ case CPCODES_TERM_ACK:
+ /* XXX: need to decode Data? */
+ break;
+ case CPCODES_CODE_REJ:
+ /* XXX: need to decode Rejected-Packet? */
+ break;
+ case CPCODES_PROT_REJ:
+ if (length < 6)
+ break;
+ ND_PRINT("\n\t Rejected %s Protocol (0x%04x)",
+ tok2str(ppptype2str,"unknown", GET_BE_U_2(tptr)),
+ GET_BE_U_2(tptr));
+ /* XXX: need to decode Rejected-Information? - hexdump for now */
+ if (len > 6) {
+ ND_PRINT("\n\t Rejected Packet");
+ print_unknown_data(ndo, tptr + 2, "\n\t ", len - 2);
+ }
+ break;
+ case CPCODES_ECHO_REQ:
+ case CPCODES_ECHO_RPL:
+ case CPCODES_DISC_REQ:
+ if (length < 8)
+ break;
+ ND_PRINT("\n\t Magic-Num 0x%08x", GET_BE_U_4(tptr));
+ /* XXX: need to decode Data? - hexdump for now */
+ if (len > 8) {
+ ND_PRINT("\n\t -----trailing data-----");
+ ND_TCHECK_LEN(tptr + 4, len - 8);
+ print_unknown_data(ndo, tptr + 4, "\n\t ", len - 8);
+ }
+ break;
+ case CPCODES_ID:
+ if (length < 8)
+ break;
+ ND_PRINT("\n\t Magic-Num 0x%08x", GET_BE_U_4(tptr));
+ /* RFC 1661 says this is intended to be human readable */
+ if (len > 8) {
+ ND_PRINT("\n\t Message\n\t ");
+ if (nd_printn(ndo, tptr + 4, len - 4, ndo->ndo_snapend))
+ goto trunc;
+ }
+ break;
+ case CPCODES_TIME_REM:
+ if (length < 12)
+ break;
+ ND_PRINT("\n\t Magic-Num 0x%08x", GET_BE_U_4(tptr));
+ ND_PRINT(", Seconds-Remaining %us", GET_BE_U_4(tptr + 4));
+ /* XXX: need to decode Message? */
+ break;
+ default:
+ /* XXX this is dirty but we do not get the
+ * original pointer passed to the begin
+ * the PPP packet */
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, pptr - 2, "\n\t ", length + 2);
+ break;
+ }
+ return;
+
+trunc:
+ ND_PRINT("[|%s]", typestr);
+}
+
+/* LCP config options */
+static u_int
+print_lcp_config_options(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ u_int opt, len;
+
+ if (length < 2)
+ return 0;
+ ND_TCHECK_2(p);
+ opt = GET_U_1(p);
+ len = GET_U_1(p + 1);
+ if (length < len)
+ return 0;
+ if (len < 2) {
+ if (opt < NUM_LCPOPTS)
+ ND_PRINT("\n\t %s Option (0x%02x), length %u (length bogus, should be >= 2)",
+ lcpconfopts[opt], opt, len);
+ else
+ ND_PRINT("\n\tunknown LCP option 0x%02x", opt);
+ return 0;
+ }
+ if (opt < NUM_LCPOPTS)
+ ND_PRINT("\n\t %s Option (0x%02x), length %u", lcpconfopts[opt], opt, len);
+ else {
+ ND_PRINT("\n\tunknown LCP option 0x%02x", opt);
+ return len;
+ }
+
+ switch (opt) {
+ case LCPOPT_VEXT:
+ if (len < 6) {
+ ND_PRINT(" (length bogus, should be >= 6)");
+ return len;
+ }
+ ND_PRINT(": Vendor: %s (%u)",
+ tok2str(oui_values,"Unknown",GET_BE_U_3(p + 2)),
+ GET_BE_U_3(p + 2));
+#if 0
+ ND_PRINT(", kind: 0x%02x", GET_U_1(p + 5));
+ ND_PRINT(", Value: 0x");
+ for (i = 0; i < len - 6; i++) {
+ ND_PRINT("%02x", GET_U_1(p + 6 + i));
+ }
+#endif
+ break;
+ case LCPOPT_MRU:
+ if (len != 4) {
+ ND_PRINT(" (length bogus, should be = 4)");
+ return len;
+ }
+ ND_PRINT(": %u", GET_BE_U_2(p + 2));
+ break;
+ case LCPOPT_ACCM:
+ if (len != 6) {
+ ND_PRINT(" (length bogus, should be = 6)");
+ return len;
+ }
+ ND_PRINT(": 0x%08x", GET_BE_U_4(p + 2));
+ break;
+ case LCPOPT_AP:
+ if (len < 4) {
+ ND_PRINT(" (length bogus, should be >= 4)");
+ return len;
+ }
+ ND_PRINT(": %s",
+ tok2str(ppptype2str, "Unknown Auth Proto (0x04x)", GET_BE_U_2(p + 2)));
+
+ switch (GET_BE_U_2(p + 2)) {
+ case PPP_CHAP:
+ ND_PRINT(", %s",
+ tok2str(authalg_values, "Unknown Auth Alg %u", GET_U_1(p + 4)));
+ break;
+ case PPP_PAP: /* fall through */
+ case PPP_EAP:
+ case PPP_SPAP:
+ case PPP_SPAP_OLD:
+ break;
+ default:
+ print_unknown_data(ndo, p, "\n\t", len);
+ }
+ break;
+ case LCPOPT_QP:
+ if (len < 4) {
+ ND_PRINT(" (length bogus, should be >= 4)");
+ return 0;
+ }
+ if (GET_BE_U_2(p + 2) == PPP_LQM)
+ ND_PRINT(": LQR");
+ else
+ ND_PRINT(": unknown");
+ break;
+ case LCPOPT_MN:
+ if (len != 6) {
+ ND_PRINT(" (length bogus, should be = 6)");
+ return 0;
+ }
+ ND_PRINT(": 0x%08x", GET_BE_U_4(p + 2));
+ break;
+ case LCPOPT_PFC:
+ break;
+ case LCPOPT_ACFC:
+ break;
+ case LCPOPT_LD:
+ if (len != 4) {
+ ND_PRINT(" (length bogus, should be = 4)");
+ return 0;
+ }
+ ND_PRINT(": 0x%04x", GET_BE_U_2(p + 2));
+ break;
+ case LCPOPT_CBACK:
+ if (len < 3) {
+ ND_PRINT(" (length bogus, should be >= 3)");
+ return 0;
+ }
+ ND_PRINT(": ");
+ ND_PRINT(": Callback Operation %s (%u)",
+ tok2str(ppp_callback_values, "Unknown", GET_U_1(p + 2)),
+ GET_U_1(p + 2));
+ break;
+ case LCPOPT_MLMRRU:
+ if (len != 4) {
+ ND_PRINT(" (length bogus, should be = 4)");
+ return 0;
+ }
+ ND_PRINT(": %u", GET_BE_U_2(p + 2));
+ break;
+ case LCPOPT_MLED:
+ if (len < 3) {
+ ND_PRINT(" (length bogus, should be >= 3)");
+ return 0;
+ }
+ switch (GET_U_1(p + 2)) { /* class */
+ case MEDCLASS_NULL:
+ ND_PRINT(": Null");
+ break;
+ case MEDCLASS_LOCAL:
+ ND_PRINT(": Local"); /* XXX */
+ break;
+ case MEDCLASS_IPV4:
+ if (len != 7) {
+ ND_PRINT(" (length bogus, should be = 7)");
+ return 0;
+ }
+ ND_PRINT(": IPv4 %s", GET_IPADDR_STRING(p + 3));
+ break;
+ case MEDCLASS_MAC:
+ if (len != 9) {
+ ND_PRINT(" (length bogus, should be = 9)");
+ return 0;
+ }
+ ND_PRINT(": MAC %s", GET_ETHERADDR_STRING(p + 3));
+ break;
+ case MEDCLASS_MNB:
+ ND_PRINT(": Magic-Num-Block"); /* XXX */
+ break;
+ case MEDCLASS_PSNDN:
+ ND_PRINT(": PSNDN"); /* XXX */
+ break;
+ default:
+ ND_PRINT(": Unknown class %u", GET_U_1(p + 2));
+ break;
+ }
+ break;
+
+/* XXX: to be supported */
+#if 0
+ case LCPOPT_DEP6:
+ case LCPOPT_FCSALT:
+ case LCPOPT_SDP:
+ case LCPOPT_NUMMODE:
+ case LCPOPT_DEP12:
+ case LCPOPT_DEP14:
+ case LCPOPT_DEP15:
+ case LCPOPT_DEP16:
+ case LCPOPT_MLSSNHF:
+ case LCPOPT_PROP:
+ case LCPOPT_DCEID:
+ case LCPOPT_MPP:
+ case LCPOPT_LCPAOPT:
+ case LCPOPT_COBS:
+ case LCPOPT_PE:
+ case LCPOPT_MLHF:
+ case LCPOPT_I18N:
+ case LCPOPT_SDLOS:
+ case LCPOPT_PPPMUX:
+ break;
+#endif
+ default:
+ /*
+ * Unknown option; dump it as raw bytes now if we're
+ * not going to do so below.
+ */
+ if (ndo->ndo_vflag < 2)
+ print_unknown_data(ndo, p + 2, "\n\t ", len - 2);
+ break;
+ }
+
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo, p + 2, "\n\t ", len - 2); /* exclude TLV header */
+
+ return len;
+
+trunc:
+ ND_PRINT("[|lcp]");
+ return 0;
+}
+
+/* ML-PPP*/
+static const struct tok ppp_ml_flag_values[] = {
+ { 0x80, "begin" },
+ { 0x40, "end" },
+ { 0, NULL }
+};
+
+static void
+handle_mlppp(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ if (!ndo->ndo_eflag)
+ ND_PRINT("MLPPP, ");
+
+ if (length < 2) {
+ ND_PRINT("[|mlppp]");
+ return;
+ }
+ if (!ND_TTEST_2(p)) {
+ ND_PRINT("[|mlppp]");
+ return;
+ }
+
+ ND_PRINT("seq 0x%03x, Flags [%s], length %u",
+ (GET_BE_U_2(p))&0x0fff,
+ /* only support 12-Bit sequence space for now */
+ bittok2str(ppp_ml_flag_values, "none", GET_U_1(p) & 0xc0),
+ length);
+}
+
+/* CHAP */
+static void
+handle_chap(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ u_int code, len;
+ u_int val_size, name_size, msg_size;
+ const u_char *p0;
+ u_int i;
+
+ p0 = p;
+ if (length < 1) {
+ ND_PRINT("[|chap]");
+ return;
+ } else if (length < 4) {
+ ND_PRINT("[|chap 0x%02x]", GET_U_1(p));
+ return;
+ }
+
+ code = GET_U_1(p);
+ ND_PRINT("CHAP, %s (0x%02x)",
+ tok2str(chapcode_values,"unknown",code),
+ code);
+ p++;
+
+ ND_PRINT(", id %u", GET_U_1(p)); /* ID */
+ p++;
+
+ len = GET_BE_U_2(p);
+ p += 2;
+
+ /*
+ * Note that this is a generic CHAP decoding routine. Since we
+ * don't know which flavor of CHAP (i.e. CHAP-MD5, MS-CHAPv1,
+ * MS-CHAPv2) is used at this point, we can't decode packet
+ * specifically to each algorithms. Instead, we simply decode
+ * the GCD (Gratest Common Denominator) for all algorithms.
+ */
+ switch (code) {
+ case CHAP_CHAL:
+ case CHAP_RESP:
+ if (length - (p - p0) < 1)
+ return;
+ val_size = GET_U_1(p); /* value size */
+ p++;
+ if (length - (p - p0) < val_size)
+ return;
+ ND_PRINT(", Value ");
+ for (i = 0; i < val_size; i++) {
+ ND_PRINT("%02x", GET_U_1(p));
+ p++;
+ }
+ name_size = len - (u_int)(p - p0);
+ ND_PRINT(", Name ");
+ for (i = 0; i < name_size; i++) {
+ fn_print_char(ndo, GET_U_1(p));
+ p++;
+ }
+ break;
+ case CHAP_SUCC:
+ case CHAP_FAIL:
+ msg_size = len - (u_int)(p - p0);
+ ND_PRINT(", Msg ");
+ for (i = 0; i< msg_size; i++) {
+ fn_print_char(ndo, GET_U_1(p));
+ p++;
+ }
+ break;
+ }
+}
+
+/* PAP (see RFC 1334) */
+static void
+handle_pap(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ u_int code, len;
+ u_int peerid_len, passwd_len, msg_len;
+ const u_char *p0;
+ u_int i;
+
+ p0 = p;
+ if (length < 1) {
+ ND_PRINT("[|pap]");
+ return;
+ } else if (length < 4) {
+ ND_PRINT("[|pap 0x%02x]", GET_U_1(p));
+ return;
+ }
+
+ code = GET_U_1(p);
+ ND_PRINT("PAP, %s (0x%02x)",
+ tok2str(papcode_values, "unknown", code),
+ code);
+ p++;
+
+ ND_PRINT(", id %u", GET_U_1(p)); /* ID */
+ p++;
+
+ len = GET_BE_U_2(p);
+ p += 2;
+
+ if (len > length) {
+ ND_PRINT(", length %u > packet size", len);
+ return;
+ }
+ length = len;
+ if (length < (size_t)(p - p0)) {
+ ND_PRINT(", length %u < PAP header length", length);
+ return;
+ }
+
+ switch (code) {
+ case PAP_AREQ:
+ /* A valid Authenticate-Request is 6 or more octets long. */
+ if (len < 6)
+ goto trunc;
+ if (length - (p - p0) < 1)
+ return;
+ peerid_len = GET_U_1(p); /* Peer-ID Length */
+ p++;
+ if (length - (p - p0) < peerid_len)
+ return;
+ ND_PRINT(", Peer ");
+ for (i = 0; i < peerid_len; i++) {
+ fn_print_char(ndo, GET_U_1(p));
+ p++;
+ }
+
+ if (length - (p - p0) < 1)
+ return;
+ passwd_len = GET_U_1(p); /* Password Length */
+ p++;
+ if (length - (p - p0) < passwd_len)
+ return;
+ ND_PRINT(", Name ");
+ for (i = 0; i < passwd_len; i++) {
+ fn_print_char(ndo, GET_U_1(p));
+ p++;
+ }
+ break;
+ case PAP_AACK:
+ case PAP_ANAK:
+ /* Although some implementations ignore truncation at
+ * this point and at least one generates a truncated
+ * packet, RFC 1334 section 2.2.2 clearly states that
+ * both AACK and ANAK are at least 5 bytes long.
+ */
+ if (len < 5)
+ goto trunc;
+ if (length - (p - p0) < 1)
+ return;
+ msg_len = GET_U_1(p); /* Msg-Length */
+ p++;
+ if (length - (p - p0) < msg_len)
+ return;
+ ND_PRINT(", Msg ");
+ for (i = 0; i< msg_len; i++) {
+ fn_print_char(ndo, GET_U_1(p));
+ p++;
+ }
+ break;
+ }
+ return;
+
+trunc:
+ ND_PRINT("[|pap]");
+}
+
+/* BAP */
+static void
+handle_bap(netdissect_options *ndo _U_,
+ const u_char *p _U_, u_int length _U_)
+{
+ /* XXX: to be supported!! */
+}
+
+
+/* IPCP config options */
+static u_int
+print_ipcp_config_options(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ u_int opt, len;
+ u_int compproto, ipcomp_subopttotallen, ipcomp_subopt, ipcomp_suboptlen;
+
+ if (length < 2)
+ return 0;
+ ND_TCHECK_2(p);
+ opt = GET_U_1(p);
+ len = GET_U_1(p + 1);
+ if (length < len)
+ return 0;
+ if (len < 2) {
+ ND_PRINT("\n\t %s Option (0x%02x), length %u (length bogus, should be >= 2)",
+ tok2str(ipcpopt_values,"unknown",opt),
+ opt,
+ len);
+ return 0;
+ }
+
+ ND_PRINT("\n\t %s Option (0x%02x), length %u",
+ tok2str(ipcpopt_values,"unknown",opt),
+ opt,
+ len);
+
+ switch (opt) {
+ case IPCPOPT_2ADDR: /* deprecated */
+ if (len != 10) {
+ ND_PRINT(" (length bogus, should be = 10)");
+ return len;
+ }
+ ND_PRINT(": src %s, dst %s",
+ GET_IPADDR_STRING(p + 2),
+ GET_IPADDR_STRING(p + 6));
+ break;
+ case IPCPOPT_IPCOMP:
+ if (len < 4) {
+ ND_PRINT(" (length bogus, should be >= 4)");
+ return 0;
+ }
+ compproto = GET_BE_U_2(p + 2);
+
+ ND_PRINT(": %s (0x%02x):",
+ tok2str(ipcpopt_compproto_values, "Unknown", compproto),
+ compproto);
+
+ switch (compproto) {
+ case PPP_VJC:
+ /* XXX: VJ-Comp parameters should be decoded */
+ break;
+ case IPCPOPT_IPCOMP_HDRCOMP:
+ if (len < IPCPOPT_IPCOMP_MINLEN) {
+ ND_PRINT(" (length bogus, should be >= %u)",
+ IPCPOPT_IPCOMP_MINLEN);
+ return 0;
+ }
+
+ ND_TCHECK_LEN(p + 2, IPCPOPT_IPCOMP_MINLEN);
+ ND_PRINT("\n\t TCP Space %u, non-TCP Space %u"
+ ", maxPeriod %u, maxTime %u, maxHdr %u",
+ GET_BE_U_2(p + 4),
+ GET_BE_U_2(p + 6),
+ GET_BE_U_2(p + 8),
+ GET_BE_U_2(p + 10),
+ GET_BE_U_2(p + 12));
+
+ /* suboptions present ? */
+ if (len > IPCPOPT_IPCOMP_MINLEN) {
+ ipcomp_subopttotallen = len - IPCPOPT_IPCOMP_MINLEN;
+ p += IPCPOPT_IPCOMP_MINLEN;
+
+ ND_PRINT("\n\t Suboptions, length %u", ipcomp_subopttotallen);
+
+ while (ipcomp_subopttotallen >= 2) {
+ ND_TCHECK_2(p);
+ ipcomp_subopt = GET_U_1(p);
+ ipcomp_suboptlen = GET_U_1(p + 1);
+
+ /* sanity check */
+ if (ipcomp_subopt == 0 ||
+ ipcomp_suboptlen == 0 )
+ break;
+
+ /* XXX: just display the suboptions for now */
+ ND_PRINT("\n\t\t%s Suboption #%u, length %u",
+ tok2str(ipcpopt_compproto_subopt_values,
+ "Unknown",
+ ipcomp_subopt),
+ ipcomp_subopt,
+ ipcomp_suboptlen);
+ if (ipcomp_subopttotallen < ipcomp_suboptlen) {
+ ND_PRINT(" [remaining suboptions length %u < %u]",
+ ipcomp_subopttotallen, ipcomp_suboptlen);
+ nd_print_invalid(ndo);
+ break;
+ }
+ ipcomp_subopttotallen -= ipcomp_suboptlen;
+ p += ipcomp_suboptlen;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ break;
+
+ case IPCPOPT_ADDR: /* those options share the same format - fall through */
+ case IPCPOPT_MOBILE4:
+ case IPCPOPT_PRIDNS:
+ case IPCPOPT_PRINBNS:
+ case IPCPOPT_SECDNS:
+ case IPCPOPT_SECNBNS:
+ if (len != 6) {
+ ND_PRINT(" (length bogus, should be = 6)");
+ return 0;
+ }
+ ND_PRINT(": %s", GET_IPADDR_STRING(p + 2));
+ break;
+ default:
+ /*
+ * Unknown option; dump it as raw bytes now if we're
+ * not going to do so below.
+ */
+ if (ndo->ndo_vflag < 2)
+ print_unknown_data(ndo, p + 2, "\n\t ", len - 2);
+ break;
+ }
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo, p + 2, "\n\t ", len - 2); /* exclude TLV header */
+ return len;
+
+trunc:
+ ND_PRINT("[|ipcp]");
+ return 0;
+}
+
+/* IP6CP config options */
+static u_int
+print_ip6cp_config_options(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ u_int opt, len;
+
+ if (length < 2)
+ return 0;
+ ND_TCHECK_2(p);
+ opt = GET_U_1(p);
+ len = GET_U_1(p + 1);
+ if (length < len)
+ return 0;
+ if (len < 2) {
+ ND_PRINT("\n\t %s Option (0x%02x), length %u (length bogus, should be >= 2)",
+ tok2str(ip6cpopt_values,"unknown",opt),
+ opt,
+ len);
+ return 0;
+ }
+
+ ND_PRINT("\n\t %s Option (0x%02x), length %u",
+ tok2str(ip6cpopt_values,"unknown",opt),
+ opt,
+ len);
+
+ switch (opt) {
+ case IP6CP_IFID:
+ if (len != 10) {
+ ND_PRINT(" (length bogus, should be = 10)");
+ return len;
+ }
+ ND_TCHECK_8(p + 2);
+ ND_PRINT(": %04x:%04x:%04x:%04x",
+ GET_BE_U_2(p + 2),
+ GET_BE_U_2(p + 4),
+ GET_BE_U_2(p + 6),
+ GET_BE_U_2(p + 8));
+ break;
+ default:
+ /*
+ * Unknown option; dump it as raw bytes now if we're
+ * not going to do so below.
+ */
+ if (ndo->ndo_vflag < 2)
+ print_unknown_data(ndo, p + 2, "\n\t ", len - 2);
+ break;
+ }
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo, p + 2, "\n\t ", len - 2); /* exclude TLV header */
+
+ return len;
+
+trunc:
+ ND_PRINT("[|ip6cp]");
+ return 0;
+}
+
+
+/* CCP config options */
+static u_int
+print_ccp_config_options(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ u_int opt, len;
+
+ if (length < 2)
+ return 0;
+ ND_TCHECK_2(p);
+ opt = GET_U_1(p);
+ len = GET_U_1(p + 1);
+ if (length < len)
+ return 0;
+ if (len < 2) {
+ ND_PRINT("\n\t %s Option (0x%02x), length %u (length bogus, should be >= 2)",
+ tok2str(ccpconfopts_values, "Unknown", opt),
+ opt,
+ len);
+ return 0;
+ }
+
+ ND_PRINT("\n\t %s Option (0x%02x), length %u",
+ tok2str(ccpconfopts_values, "Unknown", opt),
+ opt,
+ len);
+
+ switch (opt) {
+ case CCPOPT_BSDCOMP:
+ if (len < 3) {
+ ND_PRINT(" (length bogus, should be >= 3)");
+ return len;
+ }
+ ND_PRINT(": Version: %u, Dictionary Bits: %u",
+ GET_U_1(p + 2) >> 5,
+ GET_U_1(p + 2) & 0x1f);
+ break;
+ case CCPOPT_MVRCA:
+ if (len < 4) {
+ ND_PRINT(" (length bogus, should be >= 4)");
+ return len;
+ }
+ ND_PRINT(": Features: %u, PxP: %s, History: %u, #CTX-ID: %u",
+ (GET_U_1(p + 2) & 0xc0) >> 6,
+ (GET_U_1(p + 2) & 0x20) ? "Enabled" : "Disabled",
+ GET_U_1(p + 2) & 0x1f,
+ GET_U_1(p + 3));
+ break;
+ case CCPOPT_DEFLATE:
+ if (len < 4) {
+ ND_PRINT(" (length bogus, should be >= 4)");
+ return len;
+ }
+ ND_PRINT(": Window: %uK, Method: %s (0x%x), MBZ: %u, CHK: %u",
+ (GET_U_1(p + 2) & 0xf0) >> 4,
+ ((GET_U_1(p + 2) & 0x0f) == 8) ? "zlib" : "unknown",
+ GET_U_1(p + 2) & 0x0f,
+ (GET_U_1(p + 3) & 0xfc) >> 2,
+ GET_U_1(p + 3) & 0x03);
+ break;
+
+/* XXX: to be supported */
+#if 0
+ case CCPOPT_OUI:
+ case CCPOPT_PRED1:
+ case CCPOPT_PRED2:
+ case CCPOPT_PJUMP:
+ case CCPOPT_HPPPC:
+ case CCPOPT_STACLZS:
+ case CCPOPT_MPPC:
+ case CCPOPT_GFZA:
+ case CCPOPT_V42BIS:
+ case CCPOPT_LZSDCP:
+ case CCPOPT_DEC:
+ case CCPOPT_RESV:
+ break;
+#endif
+ default:
+ /*
+ * Unknown option; dump it as raw bytes now if we're
+ * not going to do so below.
+ */
+ if (ndo->ndo_vflag < 2)
+ print_unknown_data(ndo, p + 2, "\n\t ", len - 2);
+ break;
+ }
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo, p + 2, "\n\t ", len - 2); /* exclude TLV header */
+
+ return len;
+
+trunc:
+ ND_PRINT("[|ccp]");
+ return 0;
+}
+
+/* BACP config options */
+static u_int
+print_bacp_config_options(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ u_int opt, len;
+
+ if (length < 2)
+ return 0;
+ ND_TCHECK_2(p);
+ opt = GET_U_1(p);
+ len = GET_U_1(p + 1);
+ if (length < len)
+ return 0;
+ if (len < 2) {
+ ND_PRINT("\n\t %s Option (0x%02x), length %u (length bogus, should be >= 2)",
+ tok2str(bacconfopts_values, "Unknown", opt),
+ opt,
+ len);
+ return 0;
+ }
+
+ ND_PRINT("\n\t %s Option (0x%02x), length %u",
+ tok2str(bacconfopts_values, "Unknown", opt),
+ opt,
+ len);
+
+ switch (opt) {
+ case BACPOPT_FPEER:
+ if (len != 6) {
+ ND_PRINT(" (length bogus, should be = 6)");
+ return len;
+ }
+ ND_PRINT(": Magic-Num 0x%08x", GET_BE_U_4(p + 2));
+ break;
+ default:
+ /*
+ * Unknown option; dump it as raw bytes now if we're
+ * not going to do so below.
+ */
+ if (ndo->ndo_vflag < 2)
+ print_unknown_data(ndo, p + 2, "\n\t ", len - 2);
+ break;
+ }
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo, p + 2, "\n\t ", len - 2); /* exclude TLV header */
+
+ return len;
+
+trunc:
+ ND_PRINT("[|bacp]");
+ return 0;
+}
+
+/*
+ * Un-escape RFC 1662 PPP in HDLC-like framing, with octet escapes.
+ * The length argument is the on-the-wire length, not the captured
+ * length; we can only un-escape the captured part.
+ */
+static void
+ppp_hdlc(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ u_int caplen = ND_BYTES_AVAILABLE_AFTER(p);
+ u_char *b, *t, c;
+ const u_char *s;
+ u_int i, proto;
+ const void *sb, *se;
+
+ if (caplen == 0)
+ return;
+
+ if (length == 0)
+ return;
+
+ b = (u_char *)nd_malloc(ndo, caplen);
+ if (b == NULL)
+ return;
+
+ /*
+ * Unescape all the data into a temporary, private, buffer.
+ * Do this so that we don't overwrite the original packet
+ * contents.
+ */
+ for (s = p, t = b, i = caplen; i != 0; i--) {
+ c = GET_U_1(s);
+ s++;
+ if (c == 0x7d) {
+ if (i <= 1)
+ break;
+ i--;
+ c = GET_U_1(s) ^ 0x20;
+ s++;
+ }
+ *t++ = c;
+ }
+
+ /*
+ * Change the end pointer, so bounds checks work.
+ * Change the pointer to packet data to help debugging.
+ */
+ sb = ndo->ndo_packetp;
+ se = ndo->ndo_snapend;
+ ndo->ndo_packetp = b;
+ ndo->ndo_snapend = t;
+ length = ND_BYTES_AVAILABLE_AFTER(b);
+
+ /* now lets guess about the payload codepoint format */
+ if (length < 1)
+ goto trunc;
+ proto = GET_U_1(b); /* start with a one-octet codepoint guess */
+
+ switch (proto) {
+ case PPP_IP:
+ ip_print(ndo, b + 1, length - 1);
+ goto cleanup;
+ case PPP_IPV6:
+ ip6_print(ndo, b + 1, length - 1);
+ goto cleanup;
+ default: /* no luck - try next guess */
+ break;
+ }
+
+ if (length < 2)
+ goto trunc;
+ proto = GET_BE_U_2(b); /* next guess - load two octets */
+
+ switch (proto) {
+ case (PPP_ADDRESS << 8 | PPP_CONTROL): /* looks like a PPP frame */
+ if (length < 4)
+ goto trunc;
+ proto = GET_BE_U_2(b + 2); /* load the PPP proto-id */
+ if ((proto & 0xff00) == 0x7e00)
+ ND_PRINT("(protocol 0x%04x invalid)", proto);
+ else
+ handle_ppp(ndo, proto, b + 4, length - 4);
+ break;
+ default: /* last guess - proto must be a PPP proto-id */
+ if ((proto & 0xff00) == 0x7e00)
+ ND_PRINT("(protocol 0x%04x invalid)", proto);
+ else
+ handle_ppp(ndo, proto, b + 2, length - 2);
+ break;
+ }
+
+cleanup:
+ ndo->ndo_packetp = sb;
+ ndo->ndo_snapend = se;
+ return;
+
+trunc:
+ ndo->ndo_packetp = sb;
+ ndo->ndo_snapend = se;
+ nd_print_trunc(ndo);
+}
+
+
+/* PPP */
+static void
+handle_ppp(netdissect_options *ndo,
+ u_int proto, const u_char *p, u_int length)
+{
+ if ((proto & 0xff00) == 0x7e00) { /* is this an escape code ? */
+ ppp_hdlc(ndo, p - 1, length);
+ return;
+ }
+
+ switch (proto) {
+ case PPP_LCP: /* fall through */
+ case PPP_IPCP:
+ case PPP_OSICP:
+ case PPP_MPLSCP:
+ case PPP_IPV6CP:
+ case PPP_CCP:
+ case PPP_BACP:
+ handle_ctrl_proto(ndo, proto, p, length);
+ break;
+ case PPP_ML:
+ handle_mlppp(ndo, p, length);
+ break;
+ case PPP_CHAP:
+ handle_chap(ndo, p, length);
+ break;
+ case PPP_PAP:
+ handle_pap(ndo, p, length);
+ break;
+ case PPP_BAP: /* XXX: not yet completed */
+ handle_bap(ndo, p, length);
+ break;
+ case ETHERTYPE_IP: /*XXX*/
+ case PPP_VJNC:
+ case PPP_IP:
+ ip_print(ndo, p, length);
+ break;
+ case ETHERTYPE_IPV6: /*XXX*/
+ case PPP_IPV6:
+ ip6_print(ndo, p, length);
+ break;
+ case ETHERTYPE_IPX: /*XXX*/
+ case PPP_IPX:
+ ipx_print(ndo, p, length);
+ break;
+ case PPP_OSI:
+ isoclns_print(ndo, p, length);
+ break;
+ case PPP_MPLS_UCAST:
+ case PPP_MPLS_MCAST:
+ mpls_print(ndo, p, length);
+ break;
+ case PPP_COMP:
+ ND_PRINT("compressed PPP data");
+ break;
+ default:
+ ND_PRINT("%s ", tok2str(ppptype2str, "unknown PPP protocol (0x%04x)", proto));
+ print_unknown_data(ndo, p, "\n\t", length);
+ break;
+ }
+}
+
+/* Standard PPP printer */
+u_int
+ppp_print(netdissect_options *ndo,
+ const u_char *p, u_int length)
+{
+ u_int proto,ppp_header;
+ u_int olen = length; /* _o_riginal length */
+ u_int hdr_len = 0;
+
+ ndo->ndo_protocol = "ppp";
+ /*
+ * Here, we assume that p points to the Address and Control
+ * field (if they present).
+ */
+ if (length < 2)
+ goto trunc;
+ ppp_header = GET_BE_U_2(p);
+
+ switch(ppp_header) {
+ case (PPP_PPPD_IN << 8 | PPP_CONTROL):
+ if (ndo->ndo_eflag) ND_PRINT("In ");
+ p += 2;
+ length -= 2;
+ hdr_len += 2;
+ break;
+ case (PPP_PPPD_OUT << 8 | PPP_CONTROL):
+ if (ndo->ndo_eflag) ND_PRINT("Out ");
+ p += 2;
+ length -= 2;
+ hdr_len += 2;
+ break;
+ case (PPP_ADDRESS << 8 | PPP_CONTROL):
+ p += 2; /* ACFC not used */
+ length -= 2;
+ hdr_len += 2;
+ break;
+
+ default:
+ break;
+ }
+
+ if (length < 2)
+ goto trunc;
+ if (GET_U_1(p) % 2) {
+ proto = GET_U_1(p); /* PFC is used */
+ p++;
+ length--;
+ hdr_len++;
+ } else {
+ proto = GET_BE_U_2(p);
+ p += 2;
+ length -= 2;
+ hdr_len += 2;
+ }
+
+ if (ndo->ndo_eflag) {
+ const char *typestr;
+ typestr = tok2str(ppptype2str, "unknown", proto);
+ ND_PRINT("%s (0x%04x), length %u",
+ typestr,
+ proto,
+ olen);
+ if (*typestr == 'u') /* "unknown" */
+ return hdr_len;
+
+ ND_PRINT(": ");
+ }
+
+ handle_ppp(ndo, proto, p, length);
+ return (hdr_len);
+trunc:
+ nd_print_trunc(ndo);
+ return (0);
+}
+
+
+/* PPP I/F printer */
+void
+ppp_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int length = h->len;
+ u_int caplen = h->caplen;
+
+ ndo->ndo_protocol = "ppp";
+ if (caplen < PPP_HDRLEN) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+ ndo->ndo_ll_hdr_len += PPP_HDRLEN;
+
+#if 0
+ /*
+ * XXX: seems to assume that there are 2 octets prepended to an
+ * actual PPP frame. The 1st octet looks like Input/Output flag
+ * while 2nd octet is unknown, at least to me
+ * (mshindo@mshindo.net).
+ *
+ * That was what the original tcpdump code did.
+ *
+ * FreeBSD's "if_ppp.c" *does* set the first octet to 1 for outbound
+ * packets and 0 for inbound packets - but only if the
+ * protocol field has the 0x8000 bit set (i.e., it's a network
+ * control protocol); it does so before running the packet through
+ * "bpf_filter" to see if it should be discarded, and to see
+ * if we should update the time we sent the most recent packet...
+ *
+ * ...but it puts the original address field back after doing
+ * so.
+ *
+ * NetBSD's "if_ppp.c" doesn't set the first octet in that fashion.
+ *
+ * I don't know if any PPP implementation handed up to a BPF
+ * device packets with the first octet being 1 for outbound and
+ * 0 for inbound packets, so I (guy@alum.mit.edu) don't know
+ * whether that ever needs to be checked or not.
+ *
+ * Note that NetBSD has a DLT_PPP_SERIAL, which it uses for PPP,
+ * and its tcpdump appears to assume that the frame always
+ * begins with an address field and a control field, and that
+ * the address field might be 0x0f or 0x8f, for Cisco
+ * point-to-point with HDLC framing as per section 4.3.1 of RFC
+ * 1547, as well as 0xff, for PPP in HDLC-like framing as per
+ * RFC 1662.
+ *
+ * (Is the Cisco framing in question what DLT_C_HDLC, in
+ * BSD/OS, is?)
+ */
+ if (ndo->ndo_eflag)
+ ND_PRINT("%c %4d %02x ", GET_U_1(p) ? 'O' : 'I',
+ length, GET_U_1(p + 1));
+#endif
+
+ ppp_print(ndo, p, length);
+}
+
+/*
+ * PPP I/F printer to use if we know that RFC 1662-style PPP in HDLC-like
+ * framing, or Cisco PPP with HDLC framing as per section 4.3.1 of RFC 1547,
+ * is being used (i.e., we don't check for PPP_ADDRESS and PPP_CONTROL,
+ * discard them *if* those are the first two octets, and parse the remaining
+ * packet as a PPP packet, as "ppp_print()" does).
+ *
+ * This handles, for example, DLT_PPP_SERIAL in NetBSD.
+ */
+void
+ppp_hdlc_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int length = h->len;
+ u_int caplen = h->caplen;
+ u_int proto;
+ u_int hdrlen = 0;
+
+ ndo->ndo_protocol = "ppp_hdlc";
+ if (caplen < 2) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+
+ switch (GET_U_1(p)) {
+
+ case PPP_ADDRESS:
+ if (caplen < 4) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+
+ if (ndo->ndo_eflag)
+ ND_PRINT("%02x %02x %u ", GET_U_1(p),
+ GET_U_1(p + 1), length);
+ p += 2;
+ length -= 2;
+ hdrlen += 2;
+
+ proto = GET_BE_U_2(p);
+ p += 2;
+ length -= 2;
+ hdrlen += 2;
+ ND_PRINT("%s: ", tok2str(ppptype2str, "unknown PPP protocol (0x%04x)", proto));
+
+ handle_ppp(ndo, proto, p, length);
+ break;
+
+ case CHDLC_UNICAST:
+ case CHDLC_BCAST:
+ chdlc_if_print(ndo, h, p);
+ return;
+
+ default:
+ if (caplen < 4) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+
+ if (ndo->ndo_eflag)
+ ND_PRINT("%02x %02x %u ", GET_U_1(p),
+ GET_U_1(p + 1), length);
+ p += 2;
+ hdrlen += 2;
+
+ /*
+ * XXX - NetBSD's "ppp_netbsd_serial_if_print()" treats
+ * the next two octets as an Ethernet type; does that
+ * ever happen?
+ */
+ ND_PRINT("unknown addr %02x; ctrl %02x", GET_U_1(p),
+ GET_U_1(p + 1));
+ break;
+ }
+
+ ndo->ndo_ll_hdr_len += hdrlen;
+}
+
+#define PPP_BSDI_HDRLEN 24
+
+/* BSD/OS specific PPP printer */
+void
+ppp_bsdos_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h _U_, const u_char *p _U_)
+{
+ u_int hdrlength;
+#ifdef __bsdi__
+ u_int length = h->len;
+ u_int caplen = h->caplen;
+ uint16_t ptype;
+ uint8_t llhl;
+ const u_char *q;
+ u_int i;
+
+ ndo->ndo_protocol = "ppp_bsdos";
+ if (caplen < PPP_BSDI_HDRLEN) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+
+ hdrlength = 0;
+
+#if 0
+ if (GET_U_1(p) == PPP_ADDRESS &&
+ GET_U_1(p + 1) == PPP_CONTROL) {
+ if (ndo->ndo_eflag)
+ ND_PRINT("%02x %02x ", GET_U_1(p),
+ GET_U_1(p + 1));
+ p += 2;
+ hdrlength = 2;
+ }
+
+ if (ndo->ndo_eflag)
+ ND_PRINT("%u ", length);
+ /* Retrieve the protocol type */
+ if (GET_U_1(p) & 01) {
+ /* Compressed protocol field */
+ ptype = GET_U_1(p);
+ if (ndo->ndo_eflag)
+ ND_PRINT("%02x ", ptype);
+ p++;
+ hdrlength += 1;
+ } else {
+ /* Un-compressed protocol field */
+ ptype = GET_BE_U_2(p);
+ if (ndo->ndo_eflag)
+ ND_PRINT("%04x ", ptype);
+ p += 2;
+ hdrlength += 2;
+ }
+#else
+ ptype = 0; /*XXX*/
+ if (ndo->ndo_eflag)
+ ND_PRINT("%c ", GET_U_1(p + SLC_DIR) ? 'O' : 'I');
+ llhl = GET_U_1(p + SLC_LLHL);
+ if (llhl) {
+ /* link level header */
+ struct ppp_header *ph;
+
+ q = p + SLC_BPFHDRLEN;
+ ph = (struct ppp_header *)q;
+ if (ph->phdr_addr == PPP_ADDRESS
+ && ph->phdr_ctl == PPP_CONTROL) {
+ if (ndo->ndo_eflag)
+ ND_PRINT("%02x %02x ", GET_U_1(q),
+ GET_U_1(q + 1));
+ ptype = GET_BE_U_2(&ph->phdr_type);
+ if (ndo->ndo_eflag && (ptype == PPP_VJC || ptype == PPP_VJNC)) {
+ ND_PRINT("%s ", tok2str(ppptype2str,
+ "proto-#%u", ptype));
+ }
+ } else {
+ if (ndo->ndo_eflag) {
+ ND_PRINT("LLH=[");
+ for (i = 0; i < llhl; i++)
+ ND_PRINT("%02x", GET_U_1(q + i));
+ ND_PRINT("] ");
+ }
+ }
+ }
+ if (ndo->ndo_eflag)
+ ND_PRINT("%u ", length);
+ if (GET_U_1(p + SLC_CHL)) {
+ q = p + SLC_BPFHDRLEN + llhl;
+
+ switch (ptype) {
+ case PPP_VJC:
+ ptype = vjc_print(ndo, q, ptype);
+ hdrlength = PPP_BSDI_HDRLEN;
+ p += hdrlength;
+ switch (ptype) {
+ case PPP_IP:
+ ip_print(ndo, p, length);
+ break;
+ case PPP_IPV6:
+ ip6_print(ndo, p, length);
+ break;
+ case PPP_MPLS_UCAST:
+ case PPP_MPLS_MCAST:
+ mpls_print(ndo, p, length);
+ break;
+ }
+ goto printx;
+ case PPP_VJNC:
+ ptype = vjc_print(ndo, q, ptype);
+ hdrlength = PPP_BSDI_HDRLEN;
+ p += hdrlength;
+ switch (ptype) {
+ case PPP_IP:
+ ip_print(ndo, p, length);
+ break;
+ case PPP_IPV6:
+ ip6_print(ndo, p, length);
+ break;
+ case PPP_MPLS_UCAST:
+ case PPP_MPLS_MCAST:
+ mpls_print(ndo, p, length);
+ break;
+ }
+ goto printx;
+ default:
+ if (ndo->ndo_eflag) {
+ ND_PRINT("CH=[");
+ for (i = 0; i < llhl; i++)
+ ND_PRINT("%02x",
+ GET_U_1(q + i));
+ ND_PRINT("] ");
+ }
+ break;
+ }
+ }
+
+ hdrlength = PPP_BSDI_HDRLEN;
+#endif
+
+ length -= hdrlength;
+ p += hdrlength;
+
+ switch (ptype) {
+ case PPP_IP:
+ ip_print(p, length);
+ break;
+ case PPP_IPV6:
+ ip6_print(ndo, p, length);
+ break;
+ case PPP_MPLS_UCAST:
+ case PPP_MPLS_MCAST:
+ mpls_print(ndo, p, length);
+ break;
+ default:
+ ND_PRINT("%s ", tok2str(ppptype2str, "unknown PPP protocol (0x%04x)", ptype));
+ }
+
+printx:
+#else /* __bsdi */
+ hdrlength = 0;
+#endif /* __bsdi__ */
+ ndo->ndo_ll_hdr_len += hdrlength;
+}
diff --git a/print-pppoe.c b/print-pppoe.c
new file mode 100644
index 0000000..65518df
--- /dev/null
+++ b/print-pppoe.c
@@ -0,0 +1,206 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Greg Stark <gsstark@mit.edu>
+ */
+
+/* \summary: PPP-over-Ethernet (PPPoE) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect-ctype.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+/* Codes */
+enum {
+ PPPOE_PADI = 0x09,
+ PPPOE_PADO = 0x07,
+ PPPOE_PADR = 0x19,
+ PPPOE_PADS = 0x65,
+ PPPOE_PADT = 0xa7
+};
+
+static const struct tok pppoecode2str[] = {
+ { PPPOE_PADI, "PADI" },
+ { PPPOE_PADO, "PADO" },
+ { PPPOE_PADR, "PADR" },
+ { PPPOE_PADS, "PADS" },
+ { PPPOE_PADT, "PADT" },
+ { 0, "" }, /* PPP Data */
+ { 0, NULL }
+};
+
+/* Tags */
+enum {
+ PPPOE_EOL = 0,
+ PPPOE_SERVICE_NAME = 0x0101,
+ PPPOE_AC_NAME = 0x0102,
+ PPPOE_HOST_UNIQ = 0x0103,
+ PPPOE_AC_COOKIE = 0x0104,
+ PPPOE_VENDOR = 0x0105,
+ PPPOE_RELAY_SID = 0x0110,
+ PPPOE_MAX_PAYLOAD = 0x0120,
+ PPPOE_SERVICE_NAME_ERROR = 0x0201,
+ PPPOE_AC_SYSTEM_ERROR = 0x0202,
+ PPPOE_GENERIC_ERROR = 0x0203
+};
+
+static const struct tok pppoetag2str[] = {
+ { PPPOE_EOL, "EOL" },
+ { PPPOE_SERVICE_NAME, "Service-Name" },
+ { PPPOE_AC_NAME, "AC-Name" },
+ { PPPOE_HOST_UNIQ, "Host-Uniq" },
+ { PPPOE_AC_COOKIE, "AC-Cookie" },
+ { PPPOE_VENDOR, "Vendor-Specific" },
+ { PPPOE_RELAY_SID, "Relay-Session-ID" },
+ { PPPOE_MAX_PAYLOAD, "PPP-Max-Payload" },
+ { PPPOE_SERVICE_NAME_ERROR, "Service-Name-Error" },
+ { PPPOE_AC_SYSTEM_ERROR, "AC-System-Error" },
+ { PPPOE_GENERIC_ERROR, "Generic-Error" },
+ { 0, NULL }
+};
+
+#define PPPOE_HDRLEN 6
+#define MAXTAGPRINT 80
+
+void
+pppoe_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ ndo->ndo_protocol = "pppoe";
+ ndo->ndo_ll_hdr_len += pppoe_print(ndo, p, h->len);
+}
+
+u_int
+pppoe_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ uint16_t pppoe_ver, pppoe_type, pppoe_code, pppoe_sessionid;
+ u_int pppoe_length;
+ const u_char *pppoe_packet, *pppoe_payload;
+
+ ndo->ndo_protocol = "pppoe";
+ if (length < PPPOE_HDRLEN) {
+ ND_PRINT(" (length %u < %u)", length, PPPOE_HDRLEN);
+ goto invalid;
+ }
+ length -= PPPOE_HDRLEN;
+ pppoe_packet = bp;
+ ND_TCHECK_LEN(pppoe_packet, PPPOE_HDRLEN);
+ pppoe_ver = (GET_U_1(pppoe_packet) & 0xF0) >> 4;
+ pppoe_type = (GET_U_1(pppoe_packet) & 0x0F);
+ pppoe_code = GET_U_1(pppoe_packet + 1);
+ pppoe_sessionid = GET_BE_U_2(pppoe_packet + 2);
+ pppoe_length = GET_BE_U_2(pppoe_packet + 4);
+ pppoe_payload = pppoe_packet + PPPOE_HDRLEN;
+
+ if (pppoe_ver != 1) {
+ ND_PRINT(" [ver %u]",pppoe_ver);
+ }
+ if (pppoe_type != 1) {
+ ND_PRINT(" [type %u]",pppoe_type);
+ }
+
+ ND_PRINT("PPPoE %s", tok2str(pppoecode2str, "PAD-%x", pppoe_code));
+ if (pppoe_code == PPPOE_PADI && pppoe_length > 1484 - PPPOE_HDRLEN) {
+ ND_PRINT(" [len %u!]",pppoe_length);
+ }
+ if (pppoe_length > length) {
+ ND_PRINT(" [len %u > %u!]", pppoe_length, length);
+ pppoe_length = length;
+ }
+ if (pppoe_sessionid) {
+ ND_PRINT(" [ses 0x%x]", pppoe_sessionid);
+ }
+
+ if (pppoe_code) {
+ /* PPP session packets don't contain tags */
+ u_short tag_type = 0xffff, tag_len;
+ const u_char *p = pppoe_payload;
+
+ /*
+ * loop invariant:
+ * p points to current tag,
+ * tag_type is previous tag or 0xffff for first iteration
+ */
+ while (tag_type && p < pppoe_payload + pppoe_length) {
+ tag_type = GET_BE_U_2(p);
+ tag_len = GET_BE_U_2(p + 2);
+ p += 4;
+ /* p points to tag_value */
+
+ if (tag_len) {
+ unsigned ascii_count = 0, garbage_count = 0;
+ const u_char *v;
+ char tag_str[MAXTAGPRINT];
+ unsigned tag_str_len = 0;
+
+ /* TODO print UTF-8 decoded text */
+ ND_TCHECK_LEN(p, tag_len);
+ for (v = p; v < p + tag_len && tag_str_len < MAXTAGPRINT-1; v++)
+ if (ND_ASCII_ISPRINT(GET_U_1(v))) {
+ tag_str[tag_str_len++] = GET_U_1(v);
+ ascii_count++;
+ } else {
+ tag_str[tag_str_len++] = '.';
+ garbage_count++;
+ }
+ tag_str[tag_str_len] = 0;
+
+ if (ascii_count > garbage_count) {
+ ND_PRINT(" [%s \"%*.*s\"]",
+ tok2str(pppoetag2str, "TAG-0x%x", tag_type),
+ (int)tag_str_len,
+ (int)tag_str_len,
+ tag_str);
+ } else {
+ /* Print hex, not fast to abuse printf but this doesn't get used much */
+ ND_PRINT(" [%s 0x", tok2str(pppoetag2str, "TAG-0x%x", tag_type));
+ for (v=p; v<p+tag_len; v++) {
+ ND_PRINT("%02X", GET_U_1(v));
+ }
+ ND_PRINT("]");
+ }
+
+
+ } else
+ ND_PRINT(" [%s]", tok2str(pppoetag2str,
+ "TAG-0x%x", tag_type));
+
+ p += tag_len;
+ /* p points to next tag */
+ }
+ return PPPOE_HDRLEN;
+ } else {
+ /* PPPoE data */
+ ND_PRINT(" ");
+ return (PPPOE_HDRLEN + ppp_print(ndo, pppoe_payload, pppoe_length));
+ }
+ /* NOTREACHED */
+
+invalid:
+ nd_print_invalid(ndo);
+ return 0;
+}
diff --git a/print-pptp.c b/print-pptp.c
new file mode 100644
index 0000000..e8e328b
--- /dev/null
+++ b/print-pptp.c
@@ -0,0 +1,871 @@
+/*
+ * Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * PPTP support contributed by Motonori Shindo (mshindo@mshindo.net)
+ */
+
+/* \summary: Point-to-Point Tunnelling Protocol (PPTP) printer */
+
+/* specification: RFC 2637 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+
+#define PPTP_MSG_TYPE_CTRL 1 /* Control Message */
+#define PPTP_MSG_TYPE_MGMT 2 /* Management Message (currently not used */
+#define PPTP_MAGIC_COOKIE 0x1a2b3c4d /* for sanity check */
+
+#define PPTP_CTRL_MSG_TYPE_SCCRQ 1
+#define PPTP_CTRL_MSG_TYPE_SCCRP 2
+#define PPTP_CTRL_MSG_TYPE_StopCCRQ 3
+#define PPTP_CTRL_MSG_TYPE_StopCCRP 4
+#define PPTP_CTRL_MSG_TYPE_ECHORQ 5
+#define PPTP_CTRL_MSG_TYPE_ECHORP 6
+#define PPTP_CTRL_MSG_TYPE_OCRQ 7
+#define PPTP_CTRL_MSG_TYPE_OCRP 8
+#define PPTP_CTRL_MSG_TYPE_ICRQ 9
+#define PPTP_CTRL_MSG_TYPE_ICRP 10
+#define PPTP_CTRL_MSG_TYPE_ICCN 11
+#define PPTP_CTRL_MSG_TYPE_CCRQ 12
+#define PPTP_CTRL_MSG_TYPE_CDN 13
+#define PPTP_CTRL_MSG_TYPE_WEN 14
+#define PPTP_CTRL_MSG_TYPE_SLI 15
+
+#define PPTP_FRAMING_CAP_ASYNC_MASK 0x00000001 /* Asynchronous */
+#define PPTP_FRAMING_CAP_SYNC_MASK 0x00000002 /* Synchronous */
+
+#define PPTP_BEARER_CAP_ANALOG_MASK 0x00000001 /* Analog */
+#define PPTP_BEARER_CAP_DIGITAL_MASK 0x00000002 /* Digital */
+
+static const char *pptp_message_type_string[] = {
+ "NOT_DEFINED", /* 0 Not defined in the RFC2637 */
+ "SCCRQ", /* 1 Start-Control-Connection-Request */
+ "SCCRP", /* 2 Start-Control-Connection-Reply */
+ "StopCCRQ", /* 3 Stop-Control-Connection-Request */
+ "StopCCRP", /* 4 Stop-Control-Connection-Reply */
+ "ECHORQ", /* 5 Echo Request */
+ "ECHORP", /* 6 Echo Reply */
+
+ "OCRQ", /* 7 Outgoing-Call-Request */
+ "OCRP", /* 8 Outgoing-Call-Reply */
+ "ICRQ", /* 9 Incoming-Call-Request */
+ "ICRP", /* 10 Incoming-Call-Reply */
+ "ICCN", /* 11 Incoming-Call-Connected */
+ "CCRQ", /* 12 Call-Clear-Request */
+ "CDN", /* 13 Call-Disconnect-Notify */
+
+ "WEN", /* 14 WAN-Error-Notify */
+
+ "SLI" /* 15 Set-Link-Info */
+#define PPTP_MAX_MSGTYPE_INDEX 16
+};
+
+/* common for all PPTP control messages */
+struct pptp_hdr {
+ nd_uint16_t length;
+ nd_uint16_t msg_type;
+ nd_uint32_t magic_cookie;
+ nd_uint16_t ctrl_msg_type;
+ nd_uint16_t reserved0;
+};
+
+struct pptp_msg_sccrq {
+ nd_uint16_t proto_ver;
+ nd_uint16_t reserved1;
+ nd_uint32_t framing_cap;
+ nd_uint32_t bearer_cap;
+ nd_uint16_t max_channel;
+ nd_uint16_t firm_rev;
+ nd_byte hostname[64];
+ nd_byte vendor[64];
+};
+
+struct pptp_msg_sccrp {
+ nd_uint16_t proto_ver;
+ nd_uint8_t result_code;
+ nd_uint8_t err_code;
+ nd_uint32_t framing_cap;
+ nd_uint32_t bearer_cap;
+ nd_uint16_t max_channel;
+ nd_uint16_t firm_rev;
+ nd_byte hostname[64];
+ nd_byte vendor[64];
+};
+
+struct pptp_msg_stopccrq {
+ nd_uint8_t reason;
+ nd_uint8_t reserved1;
+ nd_uint16_t reserved2;
+};
+
+struct pptp_msg_stopccrp {
+ nd_uint8_t result_code;
+ nd_uint8_t err_code;
+ nd_uint16_t reserved1;
+};
+
+struct pptp_msg_echorq {
+ nd_uint32_t id;
+};
+
+struct pptp_msg_echorp {
+ nd_uint32_t id;
+ nd_uint8_t result_code;
+ nd_uint8_t err_code;
+ nd_uint16_t reserved1;
+};
+
+struct pptp_msg_ocrq {
+ nd_uint16_t call_id;
+ nd_uint16_t call_ser;
+ nd_uint32_t min_bps;
+ nd_uint32_t max_bps;
+ nd_uint32_t bearer_type;
+ nd_uint32_t framing_type;
+ nd_uint16_t recv_winsiz;
+ nd_uint16_t pkt_proc_delay;
+ nd_uint16_t phone_no_len;
+ nd_uint16_t reserved1;
+ nd_byte phone_no[64];
+ nd_byte subaddr[64];
+};
+
+struct pptp_msg_ocrp {
+ nd_uint16_t call_id;
+ nd_uint16_t peer_call_id;
+ nd_uint8_t result_code;
+ nd_uint8_t err_code;
+ nd_uint16_t cause_code;
+ nd_uint32_t conn_speed;
+ nd_uint16_t recv_winsiz;
+ nd_uint16_t pkt_proc_delay;
+ nd_uint32_t phy_chan_id;
+};
+
+struct pptp_msg_icrq {
+ nd_uint16_t call_id;
+ nd_uint16_t call_ser;
+ nd_uint32_t bearer_type;
+ nd_uint32_t phy_chan_id;
+ nd_uint16_t dialed_no_len;
+ nd_uint16_t dialing_no_len;
+ nd_byte dialed_no[64]; /* DNIS */
+ nd_byte dialing_no[64]; /* CLID */
+ nd_byte subaddr[64];
+};
+
+struct pptp_msg_icrp {
+ nd_uint16_t call_id;
+ nd_uint16_t peer_call_id;
+ nd_uint8_t result_code;
+ nd_uint8_t err_code;
+ nd_uint16_t recv_winsiz;
+ nd_uint16_t pkt_proc_delay;
+ nd_uint16_t reserved1;
+};
+
+struct pptp_msg_iccn {
+ nd_uint16_t peer_call_id;
+ nd_uint16_t reserved1;
+ nd_uint32_t conn_speed;
+ nd_uint16_t recv_winsiz;
+ nd_uint16_t pkt_proc_delay;
+ nd_uint32_t framing_type;
+};
+
+struct pptp_msg_ccrq {
+ nd_uint16_t call_id;
+ nd_uint16_t reserved1;
+};
+
+struct pptp_msg_cdn {
+ nd_uint16_t call_id;
+ nd_uint8_t result_code;
+ nd_uint8_t err_code;
+ nd_uint16_t cause_code;
+ nd_uint16_t reserved1;
+ nd_byte call_stats[128];
+};
+
+struct pptp_msg_wen {
+ nd_uint16_t peer_call_id;
+ nd_uint16_t reserved1;
+ nd_uint32_t crc_err;
+ nd_uint32_t framing_err;
+ nd_uint32_t hardware_overrun;
+ nd_uint32_t buffer_overrun;
+ nd_uint32_t timeout_err;
+ nd_uint32_t align_err;
+};
+
+struct pptp_msg_sli {
+ nd_uint16_t peer_call_id;
+ nd_uint16_t reserved1;
+ nd_uint32_t send_accm;
+ nd_uint32_t recv_accm;
+};
+
+/* attributes that appear more than once in above messages:
+
+ Number of
+ occurrence attributes
+ --------------------------------------
+ 2 uint32_t bearer_cap;
+ 2 uint32_t bearer_type;
+ 6 uint16_t call_id;
+ 2 uint16_t call_ser;
+ 2 uint16_t cause_code;
+ 2 uint32_t conn_speed;
+ 6 uint8_t err_code;
+ 2 uint16_t firm_rev;
+ 2 uint32_t framing_cap;
+ 2 uint32_t framing_type;
+ 2 u_char hostname[64];
+ 2 uint32_t id;
+ 2 uint16_t max_channel;
+ 5 uint16_t peer_call_id;
+ 2 uint32_t phy_chan_id;
+ 4 uint16_t pkt_proc_delay;
+ 2 uint16_t proto_ver;
+ 4 uint16_t recv_winsiz;
+ 2 uint8_t reserved1;
+ 9 uint16_t reserved1;
+ 6 uint8_t result_code;
+ 2 u_char subaddr[64];
+ 2 u_char vendor[64];
+
+ so I will prepare print out functions for these attributes (except for
+ reserved*).
+*/
+
+#define PRINT_RESERVED_IF_NOT_ZERO_1(reserved) \
+ if (GET_U_1(reserved)) \
+ ND_PRINT(" [ERROR: reserved=%u must be zero]", \
+ GET_U_1(reserved));
+
+#define PRINT_RESERVED_IF_NOT_ZERO_2(reserved) \
+ if (GET_BE_U_2(reserved)) \
+ ND_PRINT(" [ERROR: reserved=%u must be zero]", \
+ GET_BE_U_2(reserved));
+
+/******************************************/
+/* Attribute-specific print out functions */
+/******************************************/
+
+static void
+pptp_bearer_cap_print(netdissect_options *ndo,
+ const nd_uint32_t bearer_cap)
+{
+ ND_PRINT(" BEARER_CAP(%s%s)",
+ GET_BE_U_4(bearer_cap) & PPTP_BEARER_CAP_DIGITAL_MASK ? "D" : "",
+ GET_BE_U_4(bearer_cap) & PPTP_BEARER_CAP_ANALOG_MASK ? "A" : "");
+}
+
+static const struct tok pptp_btype_str[] = {
+ { 1, "A" }, /* Analog */
+ { 2, "D" }, /* Digital */
+ { 3, "Any" },
+ { 0, NULL }
+};
+
+static void
+pptp_bearer_type_print(netdissect_options *ndo,
+ const nd_uint32_t bearer_type)
+{
+ ND_PRINT(" BEARER_TYPE(%s)",
+ tok2str(pptp_btype_str, "?", GET_BE_U_4(bearer_type)));
+}
+
+static void
+pptp_call_id_print(netdissect_options *ndo,
+ const nd_uint16_t call_id)
+{
+ ND_PRINT(" CALL_ID(%u)", GET_BE_U_2(call_id));
+}
+
+static void
+pptp_call_ser_print(netdissect_options *ndo,
+ const nd_uint16_t call_ser)
+{
+ ND_PRINT(" CALL_SER_NUM(%u)", GET_BE_U_2(call_ser));
+}
+
+static void
+pptp_cause_code_print(netdissect_options *ndo,
+ const nd_uint16_t cause_code)
+{
+ ND_PRINT(" CAUSE_CODE(%u)", GET_BE_U_2(cause_code));
+}
+
+static void
+pptp_conn_speed_print(netdissect_options *ndo,
+ const nd_uint32_t conn_speed)
+{
+ ND_PRINT(" CONN_SPEED(%u)", GET_BE_U_4(conn_speed));
+}
+
+static const struct tok pptp_errcode_str[] = {
+ { 0, "None" },
+ { 1, "Not-Connected" },
+ { 2, "Bad-Format" },
+ { 3, "Bad-Value" },
+ { 4, "No-Resource" },
+ { 5, "Bad-Call-ID" },
+ { 6, "PAC-Error" },
+ { 0, NULL }
+};
+
+static void
+pptp_err_code_print(netdissect_options *ndo,
+ const nd_uint8_t err_code)
+{
+ ND_PRINT(" ERR_CODE(%u", GET_U_1(err_code));
+ if (ndo->ndo_vflag) {
+ ND_PRINT(":%s",
+ tok2str(pptp_errcode_str, "?", GET_U_1(err_code)));
+ }
+ ND_PRINT(")");
+}
+
+static void
+pptp_firm_rev_print(netdissect_options *ndo,
+ const nd_uint16_t firm_rev)
+{
+ ND_PRINT(" FIRM_REV(%u)", GET_BE_U_2(firm_rev));
+}
+
+static void
+pptp_framing_cap_print(netdissect_options *ndo,
+ const nd_uint32_t framing_cap)
+{
+ ND_PRINT(" FRAME_CAP(");
+ if (GET_BE_U_4(framing_cap) & PPTP_FRAMING_CAP_ASYNC_MASK) {
+ ND_PRINT("A"); /* Async */
+ }
+ if (GET_BE_U_4(framing_cap) & PPTP_FRAMING_CAP_SYNC_MASK) {
+ ND_PRINT("S"); /* Sync */
+ }
+ ND_PRINT(")");
+}
+
+static const struct tok pptp_ftype_str[] = {
+ { 1, "A" }, /* Async */
+ { 2, "S" }, /* Sync */
+ { 3, "E" }, /* Either */
+ { 0, NULL }
+};
+
+static void
+pptp_framing_type_print(netdissect_options *ndo,
+ const nd_uint32_t framing_type)
+{
+ ND_PRINT(" FRAME_TYPE(%s)",
+ tok2str(pptp_ftype_str, "?", GET_BE_U_4(framing_type)));
+}
+
+static void
+pptp_hostname_print(netdissect_options *ndo,
+ const u_char *hostname)
+{
+ ND_PRINT(" HOSTNAME(");
+ nd_printjnp(ndo, hostname, 64);
+ ND_PRINT(")");
+}
+
+static void
+pptp_id_print(netdissect_options *ndo,
+ const nd_uint32_t id)
+{
+ ND_PRINT(" ID(%u)", GET_BE_U_4(id));
+}
+
+static void
+pptp_max_channel_print(netdissect_options *ndo,
+ const nd_uint16_t max_channel)
+{
+ ND_PRINT(" MAX_CHAN(%u)", GET_BE_U_2(max_channel));
+}
+
+static void
+pptp_peer_call_id_print(netdissect_options *ndo,
+ const nd_uint16_t peer_call_id)
+{
+ ND_PRINT(" PEER_CALL_ID(%u)", GET_BE_U_2(peer_call_id));
+}
+
+static void
+pptp_phy_chan_id_print(netdissect_options *ndo,
+ const nd_uint32_t phy_chan_id)
+{
+ ND_PRINT(" PHY_CHAN_ID(%u)", GET_BE_U_4(phy_chan_id));
+}
+
+static void
+pptp_pkt_proc_delay_print(netdissect_options *ndo,
+ const nd_uint16_t pkt_proc_delay)
+{
+ ND_PRINT(" PROC_DELAY(%u)", GET_BE_U_2(pkt_proc_delay));
+}
+
+static void
+pptp_proto_ver_print(netdissect_options *ndo,
+ const nd_uint16_t proto_ver)
+{
+ ND_PRINT(" PROTO_VER(%u.%u)", /* Version.Revision */
+ GET_BE_U_2(proto_ver) >> 8,
+ GET_BE_U_2(proto_ver) & 0xff);
+}
+
+static void
+pptp_recv_winsiz_print(netdissect_options *ndo,
+ const nd_uint16_t recv_winsiz)
+{
+ ND_PRINT(" RECV_WIN(%u)", GET_BE_U_2(recv_winsiz));
+}
+
+static const struct tok pptp_scrrp_str[] = {
+ { 1, "Successful channel establishment" },
+ { 2, "General error" },
+ { 3, "Command channel already exists" },
+ { 4, "Requester is not authorized to establish a command channel" },
+ { 5, "The protocol version of the requester is not supported" },
+ { 0, NULL }
+};
+
+static const struct tok pptp_echorp_str[] = {
+ { 1, "OK" },
+ { 2, "General Error" },
+ { 0, NULL }
+};
+
+static const struct tok pptp_ocrp_str[] = {
+ { 1, "Connected" },
+ { 2, "General Error" },
+ { 3, "No Carrier" },
+ { 4, "Busy" },
+ { 5, "No Dial Tone" },
+ { 6, "Time-out" },
+ { 7, "Do Not Accept" },
+ { 0, NULL }
+};
+
+static const struct tok pptp_icrp_str[] = {
+ { 1, "Connect" },
+ { 2, "General Error" },
+ { 3, "Do Not Accept" },
+ { 0, NULL }
+};
+
+static const struct tok pptp_cdn_str[] = {
+ { 1, "Lost Carrier" },
+ { 2, "General Error" },
+ { 3, "Admin Shutdown" },
+ { 4, "Request" },
+ { 0, NULL }
+};
+
+static void
+pptp_result_code_print(netdissect_options *ndo,
+ const nd_uint8_t result_code, int ctrl_msg_type)
+{
+ ND_PRINT(" RESULT_CODE(%u", GET_U_1(result_code));
+ if (ndo->ndo_vflag) {
+ const struct tok *dict =
+ ctrl_msg_type == PPTP_CTRL_MSG_TYPE_SCCRP ? pptp_scrrp_str :
+ ctrl_msg_type == PPTP_CTRL_MSG_TYPE_StopCCRP ? pptp_echorp_str :
+ ctrl_msg_type == PPTP_CTRL_MSG_TYPE_ECHORP ? pptp_echorp_str :
+ ctrl_msg_type == PPTP_CTRL_MSG_TYPE_OCRP ? pptp_ocrp_str :
+ ctrl_msg_type == PPTP_CTRL_MSG_TYPE_ICRP ? pptp_icrp_str :
+ ctrl_msg_type == PPTP_CTRL_MSG_TYPE_CDN ? pptp_cdn_str :
+ NULL; /* assertion error */
+ if (dict != NULL)
+ ND_PRINT(":%s",
+ tok2str(dict, "?", GET_U_1(result_code)));
+ }
+ ND_PRINT(")");
+}
+
+static void
+pptp_subaddr_print(netdissect_options *ndo,
+ const u_char *subaddr)
+{
+ ND_PRINT(" SUB_ADDR(");
+ nd_printjnp(ndo, subaddr, 64);
+ ND_PRINT(")");
+}
+
+static void
+pptp_vendor_print(netdissect_options *ndo,
+ const u_char *vendor)
+{
+ ND_PRINT(" VENDOR(");
+ nd_printjnp(ndo, vendor, 64);
+ ND_PRINT(")");
+}
+
+/************************************/
+/* PPTP message print out functions */
+/************************************/
+static void
+pptp_sccrq_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_sccrq *ptr = (const struct pptp_msg_sccrq *)dat;
+
+ pptp_proto_ver_print(ndo, ptr->proto_ver);
+ PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
+ pptp_framing_cap_print(ndo, ptr->framing_cap);
+ pptp_bearer_cap_print(ndo, ptr->bearer_cap);
+ pptp_max_channel_print(ndo, ptr->max_channel);
+ pptp_firm_rev_print(ndo, ptr->firm_rev);
+ pptp_hostname_print(ndo, ptr->hostname);
+ pptp_vendor_print(ndo, ptr->vendor);
+}
+
+static void
+pptp_sccrp_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_sccrp *ptr = (const struct pptp_msg_sccrp *)dat;
+
+ pptp_proto_ver_print(ndo, ptr->proto_ver);
+ pptp_result_code_print(ndo, ptr->result_code, PPTP_CTRL_MSG_TYPE_SCCRP);
+ pptp_err_code_print(ndo, ptr->err_code);
+ pptp_framing_cap_print(ndo, ptr->framing_cap);
+ pptp_bearer_cap_print(ndo, ptr->bearer_cap);
+ pptp_max_channel_print(ndo, ptr->max_channel);
+ pptp_firm_rev_print(ndo, ptr->firm_rev);
+ pptp_hostname_print(ndo, ptr->hostname);
+ pptp_vendor_print(ndo, ptr->vendor);
+}
+
+static void
+pptp_stopccrq_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_stopccrq *ptr = (const struct pptp_msg_stopccrq *)dat;
+
+ ND_PRINT(" REASON(%u", GET_U_1(ptr->reason));
+ if (ndo->ndo_vflag) {
+ switch (GET_U_1(ptr->reason)) {
+ case 1:
+ ND_PRINT(":None");
+ break;
+ case 2:
+ ND_PRINT(":Stop-Protocol");
+ break;
+ case 3:
+ ND_PRINT(":Stop-Local-Shutdown");
+ break;
+ default:
+ ND_PRINT(":?");
+ break;
+ }
+ }
+ ND_PRINT(")");
+ PRINT_RESERVED_IF_NOT_ZERO_1(ptr->reserved1);
+ PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved2);
+}
+
+static void
+pptp_stopccrp_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_stopccrp *ptr = (const struct pptp_msg_stopccrp *)dat;
+
+ pptp_result_code_print(ndo, ptr->result_code, PPTP_CTRL_MSG_TYPE_StopCCRP);
+ pptp_err_code_print(ndo, ptr->err_code);
+ PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
+}
+
+static void
+pptp_echorq_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_echorq *ptr = (const struct pptp_msg_echorq *)dat;
+
+ pptp_id_print(ndo, ptr->id);
+}
+
+static void
+pptp_echorp_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_echorp *ptr = (const struct pptp_msg_echorp *)dat;
+
+ pptp_id_print(ndo, ptr->id);
+ pptp_result_code_print(ndo, ptr->result_code, PPTP_CTRL_MSG_TYPE_ECHORP);
+ pptp_err_code_print(ndo, ptr->err_code);
+ PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
+}
+
+static void
+pptp_ocrq_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_ocrq *ptr = (const struct pptp_msg_ocrq *)dat;
+
+ pptp_call_id_print(ndo, ptr->call_id);
+ pptp_call_ser_print(ndo, ptr->call_ser);
+ ND_PRINT(" MIN_BPS(%u)", GET_BE_U_4(ptr->min_bps));
+ ND_PRINT(" MAX_BPS(%u)", GET_BE_U_4(ptr->max_bps));
+ pptp_bearer_type_print(ndo, ptr->bearer_type);
+ pptp_framing_type_print(ndo, ptr->framing_type);
+ pptp_recv_winsiz_print(ndo, ptr->recv_winsiz);
+ pptp_pkt_proc_delay_print(ndo, ptr->pkt_proc_delay);
+ ND_PRINT(" PHONE_NO_LEN(%u)", GET_BE_U_2(ptr->phone_no_len));
+ PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
+ ND_PRINT(" PHONE_NO(");
+ nd_printjnp(ndo, ptr->phone_no,
+ ND_MIN(64, GET_BE_U_2(ptr->phone_no_len)));
+ ND_PRINT(")");
+ pptp_subaddr_print(ndo, ptr->subaddr);
+}
+
+static void
+pptp_ocrp_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_ocrp *ptr = (const struct pptp_msg_ocrp *)dat;
+
+ pptp_call_id_print(ndo, ptr->call_id);
+ pptp_peer_call_id_print(ndo, ptr->peer_call_id);
+ pptp_result_code_print(ndo, ptr->result_code, PPTP_CTRL_MSG_TYPE_OCRP);
+ pptp_err_code_print(ndo, ptr->err_code);
+ pptp_cause_code_print(ndo, ptr->cause_code);
+ pptp_conn_speed_print(ndo, ptr->conn_speed);
+ pptp_recv_winsiz_print(ndo, ptr->recv_winsiz);
+ pptp_pkt_proc_delay_print(ndo, ptr->pkt_proc_delay);
+ pptp_phy_chan_id_print(ndo, ptr->phy_chan_id);
+}
+
+static void
+pptp_icrq_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_icrq *ptr = (const struct pptp_msg_icrq *)dat;
+
+ pptp_call_id_print(ndo, ptr->call_id);
+ pptp_call_ser_print(ndo, ptr->call_ser);
+ pptp_bearer_type_print(ndo, ptr->bearer_type);
+ pptp_phy_chan_id_print(ndo, ptr->phy_chan_id);
+ ND_PRINT(" DIALED_NO_LEN(%u)", GET_BE_U_2(ptr->dialed_no_len));
+ ND_PRINT(" DIALING_NO_LEN(%u)", GET_BE_U_2(ptr->dialing_no_len));
+ ND_PRINT(" DIALED_NO(");
+ nd_printjnp(ndo, ptr->dialed_no,
+ ND_MIN(64, GET_BE_U_2(ptr->dialed_no_len)));
+ ND_PRINT(")");
+ ND_PRINT(" DIALING_NO(");
+ nd_printjnp(ndo, ptr->dialing_no,
+ ND_MIN(64, GET_BE_U_2(ptr->dialing_no_len)));
+ ND_PRINT(")");
+ pptp_subaddr_print(ndo, ptr->subaddr);
+}
+
+static void
+pptp_icrp_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_icrp *ptr = (const struct pptp_msg_icrp *)dat;
+
+ pptp_call_id_print(ndo, ptr->call_id);
+ pptp_peer_call_id_print(ndo, ptr->peer_call_id);
+ pptp_result_code_print(ndo, ptr->result_code, PPTP_CTRL_MSG_TYPE_ICRP);
+ pptp_err_code_print(ndo, ptr->err_code);
+ pptp_recv_winsiz_print(ndo, ptr->recv_winsiz);
+ pptp_pkt_proc_delay_print(ndo, ptr->pkt_proc_delay);
+ PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
+}
+
+static void
+pptp_iccn_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_iccn *ptr = (const struct pptp_msg_iccn *)dat;
+
+ pptp_peer_call_id_print(ndo, ptr->peer_call_id);
+ PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
+ pptp_conn_speed_print(ndo, ptr->conn_speed);
+ pptp_recv_winsiz_print(ndo, ptr->recv_winsiz);
+ pptp_pkt_proc_delay_print(ndo, ptr->pkt_proc_delay);
+ pptp_framing_type_print(ndo, ptr->framing_type);
+}
+
+static void
+pptp_ccrq_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_ccrq *ptr = (const struct pptp_msg_ccrq *)dat;
+
+ pptp_call_id_print(ndo, ptr->call_id);
+ PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
+}
+
+static void
+pptp_cdn_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_cdn *ptr = (const struct pptp_msg_cdn *)dat;
+
+ pptp_call_id_print(ndo, ptr->call_id);
+ pptp_result_code_print(ndo, ptr->result_code, PPTP_CTRL_MSG_TYPE_CDN);
+ pptp_err_code_print(ndo, ptr->err_code);
+ pptp_cause_code_print(ndo, ptr->cause_code);
+ PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
+ ND_PRINT(" CALL_STATS(");
+ nd_printjnp(ndo, ptr->call_stats, 128);
+ ND_PRINT(")");
+}
+
+static void
+pptp_wen_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_wen *ptr = (const struct pptp_msg_wen *)dat;
+
+ pptp_peer_call_id_print(ndo, ptr->peer_call_id);
+ PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
+ ND_PRINT(" CRC_ERR(%u)", GET_BE_U_4(ptr->crc_err));
+ ND_PRINT(" FRAMING_ERR(%u)", GET_BE_U_4(ptr->framing_err));
+ ND_PRINT(" HARDWARE_OVERRUN(%u)", GET_BE_U_4(ptr->hardware_overrun));
+ ND_PRINT(" BUFFER_OVERRUN(%u)", GET_BE_U_4(ptr->buffer_overrun));
+ ND_PRINT(" TIMEOUT_ERR(%u)", GET_BE_U_4(ptr->timeout_err));
+ ND_PRINT(" ALIGN_ERR(%u)", GET_BE_U_4(ptr->align_err));
+}
+
+static void
+pptp_sli_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_msg_sli *ptr = (const struct pptp_msg_sli *)dat;
+
+ pptp_peer_call_id_print(ndo, ptr->peer_call_id);
+ PRINT_RESERVED_IF_NOT_ZERO_2(ptr->reserved1);
+ ND_PRINT(" SEND_ACCM(0x%08x)", GET_BE_U_4(ptr->send_accm));
+ ND_PRINT(" RECV_ACCM(0x%08x)", GET_BE_U_4(ptr->recv_accm));
+}
+
+void
+pptp_print(netdissect_options *ndo,
+ const u_char *dat)
+{
+ const struct pptp_hdr *hdr;
+ uint32_t mc;
+ uint16_t ctrl_msg_type;
+
+ ndo->ndo_protocol = "pptp";
+ ND_PRINT(": ");
+ nd_print_protocol(ndo);
+
+ hdr = (const struct pptp_hdr *)dat;
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" Length=%u", GET_BE_U_2(hdr->length));
+ }
+ if (ndo->ndo_vflag) {
+ switch(GET_BE_U_2(hdr->msg_type)) {
+ case PPTP_MSG_TYPE_CTRL:
+ ND_PRINT(" CTRL-MSG");
+ break;
+ case PPTP_MSG_TYPE_MGMT:
+ ND_PRINT(" MGMT-MSG");
+ break;
+ default:
+ ND_PRINT(" UNKNOWN-MSG-TYPE");
+ break;
+ }
+ }
+
+ mc = GET_BE_U_4(hdr->magic_cookie);
+ if (mc != PPTP_MAGIC_COOKIE) {
+ ND_PRINT(" UNEXPECTED Magic-Cookie!!(%08x)", mc);
+ }
+ if (ndo->ndo_vflag || mc != PPTP_MAGIC_COOKIE) {
+ ND_PRINT(" Magic-Cookie=%08x", mc);
+ }
+ ctrl_msg_type = GET_BE_U_2(hdr->ctrl_msg_type);
+ if (ctrl_msg_type < PPTP_MAX_MSGTYPE_INDEX) {
+ ND_PRINT(" CTRL_MSGTYPE=%s",
+ pptp_message_type_string[ctrl_msg_type]);
+ } else {
+ ND_PRINT(" UNKNOWN_CTRL_MSGTYPE(%u)", ctrl_msg_type);
+ }
+ PRINT_RESERVED_IF_NOT_ZERO_2(hdr->reserved0);
+
+ dat += 12;
+
+ switch(ctrl_msg_type) {
+ case PPTP_CTRL_MSG_TYPE_SCCRQ:
+ pptp_sccrq_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_SCCRP:
+ pptp_sccrp_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_StopCCRQ:
+ pptp_stopccrq_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_StopCCRP:
+ pptp_stopccrp_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_ECHORQ:
+ pptp_echorq_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_ECHORP:
+ pptp_echorp_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_OCRQ:
+ pptp_ocrq_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_OCRP:
+ pptp_ocrp_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_ICRQ:
+ pptp_icrq_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_ICRP:
+ pptp_icrp_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_ICCN:
+ pptp_iccn_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_CCRQ:
+ pptp_ccrq_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_CDN:
+ pptp_cdn_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_WEN:
+ pptp_wen_print(ndo, dat);
+ break;
+ case PPTP_CTRL_MSG_TYPE_SLI:
+ pptp_sli_print(ndo, dat);
+ break;
+ default:
+ /* do nothing */
+ break;
+ }
+}
diff --git a/print-ptp.c b/print-ptp.c
new file mode 100644
index 0000000..a1c09c0
--- /dev/null
+++ b/print-ptp.c
@@ -0,0 +1,634 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Partha S. Ghosh (psglinux dot gmail dot com)
+ */
+
+/* \summary: Precision Time Protocol (PTP) printer */
+
+/* specification: https://standards.ieee.org/findstds/standard/1588-2008.html*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include "netdissect.h"
+#include "extract.h"
+
+/*
+ * PTP header
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | R | |msgtype| version | Msg Len |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | domain No | rsvd1 | flag Field |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Correction NS |
+ * + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | | Correction Sub NS |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Reserved2 |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Clock Identity |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Port Identity | Sequence ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | control | log msg int |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 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
+ * 0 1 2 3
+ *
+ * Announce Message (msg type=0xB)
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
+ * | Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Nano Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Origin Cur UTC Offset | Reserved | GM Prio 1 |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |GM Clock Class | GM Clock Accu | GM Clock Variance |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | GM Prio 2 | |
+ * +-+-+-+-+-+-+-+-+ +
+ * | GM Clock Identity |
+ * + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | | Steps Removed | Time Source |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 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
+ * 0 1 2 3
+ *
+ * Sync Message (msg type=0x0)
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
+ * | Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Nano Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * Delay Request Message (msg type=0x1)
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
+ * | Origin Time Stamp Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Nano Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * Followup Message (msg type=0x8)
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
+ * | Precise Origin Time Stamp Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Nano Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * Delay Resp Message (msg type=0x9)
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
+ * | Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Nano Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Port Identity |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * PDelay Request Message (msg type=0x2)
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
+ * | Origin Time Stamp Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Origin Time Stamp Nano Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Port Identity |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * PDelay Response Message (msg type=0x3)
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
+ * | Request receipt Time Stamp Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Nano Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Requesting Port Identity |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * PDelay Resp Follow up Message (msg type=0xA)
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +
+ * | Response Origin Time Stamp Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Nano Seconds |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Requesting Port Identity |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * Signalling Message (msg type=0xC)
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Requesting Port Identity |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * Management Message (msg type=0xD)
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Requesting Port Identity |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Start Bndry Hps| Boundary Hops | flags | Reserved |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ */
+
+/* Values from IEEE1588-2008: 13.3.2.2 messageType (Enumeration4) */
+#define M_SYNC 0x0
+#define M_DELAY_REQ 0x1
+#define M_PDELAY_REQ 0x2
+#define M_PDELAY_RESP 0x3
+#define M_FOLLOW_UP 0x8
+#define M_DELAY_RESP 0x9
+#define M_PDELAY_RESP_FOLLOW_UP 0xA
+#define M_ANNOUNCE 0xB
+#define M_SIGNALLING 0xC
+#define M_MANAGEMENT 0xD
+
+static const struct tok ptp_msg_type[] = {
+ { M_SYNC, "sync msg"},
+ { M_DELAY_REQ, "delay req msg"},
+ { M_PDELAY_REQ, "peer delay req msg"},
+ { M_PDELAY_RESP, "peer delay resp msg"},
+ { M_FOLLOW_UP, "follow up msg"},
+ { M_DELAY_RESP, "delay resp msg"},
+ { M_PDELAY_RESP_FOLLOW_UP, "pdelay resp fup msg"},
+ { M_ANNOUNCE, "announce msg"},
+ { M_SIGNALLING, "signalling msg"},
+ { M_MANAGEMENT, "management msg"},
+ { 0, NULL}
+};
+
+/* Values from IEEE1588-2008: 13.3.2.10 controlField (UInteger8) */
+/*
+ * The use of this field by the receiver is deprecated.
+ * NOTE-This field is provided for compatibility with hardware designed
+ * to conform to version 1 of this standard.
+ */
+#define C_SYNC 0x0
+#define C_DELAY_REQ 0x1
+#define C_FOLLOW_UP 0x2
+#define C_DELAY_RESP 0x3
+#define C_MANAGEMENT 0x4
+#define C_OTHER 0x5
+
+static const struct tok ptp_control_field[] = {
+ { C_SYNC, "Sync"},
+ { C_DELAY_REQ, "Delay_Req"},
+ { C_FOLLOW_UP, "Follow_Up"},
+ { C_DELAY_RESP, "Delay_Resp"},
+ { C_MANAGEMENT, "Management"},
+ { C_OTHER, "Other"},
+ { 0, NULL}
+};
+
+#define PTP_TRUE 1
+#define PTP_FALSE !PTP_TRUE
+
+#define PTP_HDR_LEN 0x22
+
+/* mask based on the first byte */
+#define PTP_VERS_MASK 0xFF
+#define PTP_V1_COMPAT 0x10
+#define PTP_MSG_TYPE_MASK 0x0F
+
+/*mask based 2byte */
+#define PTP_DOMAIN_MASK 0xFF00
+#define PTP_RSVD1_MASK 0xFF
+#define PTP_CONTROL_MASK 0xFF
+#define PTP_LOGMSG_MASK 0xFF
+
+/* mask based on the flags 2 bytes */
+
+#define PTP_L161_MASK 0x1
+#define PTP_L1_59_MASK 0x2
+#define PTP_UTC_REASONABLE_MASK 0x4
+#define PTP_TIMESCALE_MASK 0x8
+#define PTP_TIME_TRACABLE_MASK 0x10
+#define PTP_FREQUENCY_TRACABLE_MASK 0x20
+#define PTP_ALTERNATE_MASTER_MASK 0x100
+#define PTP_TWO_STEP_MASK 0x200
+#define PTP_UNICAST_MASK 0x400
+#define PTP_PROFILE_SPEC_1_MASK 0x1000
+#define PTP_PROFILE_SPEC_2_MASK 0x2000
+#define PTP_SECURITY_MASK 0x4000
+#define PTP_FLAGS_UNKNOWN_MASK 0x18C0
+
+static const struct tok ptp_flag_values[] = {
+ { PTP_L161_MASK, "l1 61"},
+ { PTP_L1_59_MASK, "l1 59"},
+ { PTP_UTC_REASONABLE_MASK, "utc reasonable"},
+ { PTP_TIMESCALE_MASK, "timescale"},
+ { PTP_TIME_TRACABLE_MASK, "time tracable"},
+ { PTP_FREQUENCY_TRACABLE_MASK, "frequency tracable"},
+ { PTP_ALTERNATE_MASTER_MASK, "alternate master"},
+ { PTP_TWO_STEP_MASK, "two step"},
+ { PTP_UNICAST_MASK, "unicast"},
+ { PTP_PROFILE_SPEC_1_MASK, "profile specific 1"},
+ { PTP_PROFILE_SPEC_2_MASK, "profile specific 2"},
+ { PTP_SECURITY_MASK, "security mask"},
+ { PTP_FLAGS_UNKNOWN_MASK, "unknown"},
+ {0, NULL}
+};
+
+static const char *p_porigin_ts = "preciseOriginTimeStamp";
+static const char *p_origin_ts = "originTimeStamp";
+static const char *p_recv_ts = "receiveTimeStamp";
+
+#define PTP_VER_1 0x1
+#define PTP_VER_2 0x2
+
+#define PTP_UCHAR_LEN sizeof(uint8_t)
+#define PTP_UINT16_LEN sizeof(uint16_t)
+#define PTP_UINT32_LEN sizeof(uint32_t)
+#define PTP_6BYTES_LEN sizeof(uint32_t)+sizeof(uint16_t)
+#define PTP_UINT64_LEN sizeof(uint64_t)
+
+static void ptp_print_1(netdissect_options *ndo);
+static void ptp_print_2(netdissect_options *ndo, const u_char *bp, u_int len);
+
+static void ptp_print_timestamp(netdissect_options *ndo, const u_char *bp, u_int *len, const char *stype);
+static void ptp_print_timestamp_identity(netdissect_options *ndo, const u_char *bp, u_int *len, const char *ttype);
+static void ptp_print_announce_msg(netdissect_options *ndo, const u_char *bp, u_int *len);
+static void ptp_print_port_id(netdissect_options *ndo, const u_char *bp, u_int *len);
+static void ptp_print_mgmt_msg(netdissect_options *ndo, const u_char *bp, u_int *len);
+
+static void
+print_field(netdissect_options *ndo, const char *st, uint32_t flen,
+ const u_char *bp, u_int *len, uint8_t hex)
+{
+ uint8_t u8_val;
+ uint16_t u16_val;
+ uint32_t u32_val;
+ uint64_t u64_val;
+
+ switch(flen) {
+ case PTP_UCHAR_LEN:
+ u8_val = GET_U_1(bp);
+ ND_PRINT(", %s", st);
+ if (hex)
+ ND_PRINT(" 0x%x", u8_val);
+ else
+ ND_PRINT(" %u", u8_val);
+ *len -= 1; bp += 1;
+ break;
+ case PTP_UINT16_LEN:
+ u16_val = GET_BE_U_2(bp);
+ ND_PRINT(", %s", st);
+ if (hex)
+ ND_PRINT(" 0x%x", u16_val);
+ else
+ ND_PRINT(" %u", u16_val);
+ *len -= 2; bp += 2;
+ break;
+ case PTP_UINT32_LEN:
+ u32_val = GET_BE_U_4(bp);
+ ND_PRINT(", %s", st);
+ if (hex)
+ ND_PRINT(" 0x%x", u32_val);
+ else
+ ND_PRINT(" %u", u32_val);
+ *len -= 4; bp += 4;
+ break;
+ case PTP_UINT64_LEN:
+ u64_val = GET_BE_U_8(bp);
+ ND_PRINT(", %s", st);
+ if (hex)
+ ND_PRINT(" 0x%"PRIx64, u64_val);
+ else
+ ND_PRINT(" 0x%"PRIu64, u64_val);
+ *len -= 8; bp += 8;
+ break;
+ default:
+ break;
+ }
+}
+
+static void
+ptp_print_1(netdissect_options *ndo)
+{
+ ND_PRINT(" (not implemented)");
+}
+
+static void
+ptp_print_2(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ u_int len = length;
+ uint16_t msg_len, flags, port_id, seq_id;
+ uint8_t foct, domain_no, msg_type, v1_compat, rsvd1, lm_int, control;
+ uint64_t ns_corr;
+ uint16_t sns_corr;
+ uint32_t rsvd2;
+ uint64_t clk_id;
+
+ foct = GET_U_1(bp);
+ v1_compat = foct & PTP_V1_COMPAT;
+ ND_PRINT(", v1 compat : %s", v1_compat?"yes":"no");
+ msg_type = foct & PTP_MSG_TYPE_MASK;
+ ND_PRINT(", msg type : %s", tok2str(ptp_msg_type, "Reserved", msg_type));
+
+ /* msg length */
+ len -= 2; bp += 2; msg_len = GET_BE_U_2(bp); ND_PRINT(", length : %u", msg_len);
+
+ /* domain */
+ len -= 2; bp += 2; domain_no = (GET_BE_U_2(bp) & PTP_DOMAIN_MASK) >> 8; ND_PRINT(", domain : %u", domain_no);
+
+ /* rsvd 1*/
+ rsvd1 = GET_BE_U_2(bp) & PTP_RSVD1_MASK;
+ ND_PRINT(", reserved1 : %u", rsvd1);
+
+ /* flags */
+ len -= 2; bp += 2; flags = GET_BE_U_2(bp); ND_PRINT(", Flags [%s]", bittok2str(ptp_flag_values, "none", flags));
+
+ /* correction NS (48 bits) */
+ len -= 2; bp += 2; ns_corr = GET_BE_U_6(bp); ND_PRINT(", NS correction : %"PRIu64, ns_corr);
+
+ /* correction sub NS (16 bits) */
+ len -= 6; bp += 6; sns_corr = GET_BE_U_2(bp); ND_PRINT(", sub NS correction : %u", sns_corr);
+
+ /* Reserved 2 */
+ len -= 2; bp += 2; rsvd2 = GET_BE_U_4(bp); ND_PRINT(", reserved2 : %u", rsvd2);
+
+ /* clock identity */
+ len -= 4; bp += 4; clk_id = GET_BE_U_8(bp); ND_PRINT(", clock identity : 0x%"PRIx64, clk_id);
+
+ /* port identity */
+ len -= 8; bp += 8; port_id = GET_BE_U_2(bp); ND_PRINT(", port id : %u", port_id);
+
+ /* sequence ID */
+ len -= 2; bp += 2; seq_id = GET_BE_U_2(bp); ND_PRINT(", seq id : %u", seq_id);
+
+ /* control */
+ len -= 2; bp += 2; control = GET_U_1(bp) ;
+ ND_PRINT(", control : %u (%s)", control, tok2str(ptp_control_field, "Reserved", control));
+
+ /* log message interval */
+ lm_int = GET_BE_U_2(bp) & PTP_LOGMSG_MASK; ND_PRINT(", log message interval : %u", lm_int); len -= 2; bp += 2;
+
+ switch(msg_type) {
+ case M_SYNC:
+ ptp_print_timestamp(ndo, bp, &len, p_origin_ts);
+ break;
+ case M_DELAY_REQ:
+ ptp_print_timestamp(ndo, bp, &len, p_origin_ts);
+ break;
+ case M_PDELAY_REQ:
+ ptp_print_timestamp_identity(ndo, bp, &len, p_porigin_ts);
+ break;
+ case M_PDELAY_RESP:
+ ptp_print_timestamp_identity(ndo, bp, &len, p_recv_ts);
+ break;
+ case M_FOLLOW_UP:
+ ptp_print_timestamp(ndo, bp, &len, p_porigin_ts);
+ break;
+ case M_DELAY_RESP:
+ ptp_print_timestamp_identity(ndo, bp, &len, p_recv_ts);
+ break;
+ case M_PDELAY_RESP_FOLLOW_UP:
+ ptp_print_timestamp_identity(ndo, bp, &len, p_porigin_ts);
+ break;
+ case M_ANNOUNCE:
+ ptp_print_announce_msg(ndo, bp, &len);
+ break;
+ case M_SIGNALLING:
+ ptp_print_port_id(ndo, bp, &len);
+ break;
+ case M_MANAGEMENT:
+ ptp_print_mgmt_msg(ndo, bp, &len);
+ break;
+ default:
+ break;
+ }
+}
+/*
+ * PTP general message
+ */
+void
+ptp_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ u_int vers;
+
+ ndo->ndo_protocol = "ptp";
+ ND_LCHECK_U(length, PTP_HDR_LEN);
+ vers = GET_BE_U_2(bp) & PTP_VERS_MASK;
+ ND_PRINT("PTPv%u",vers);
+ switch(vers) {
+ case PTP_VER_1:
+ ptp_print_1(ndo);
+ break;
+ case PTP_VER_2:
+ ptp_print_2(ndo, bp, length);
+ break;
+ default:
+ //ND_PRINT("ERROR: unknown-version\n");
+ break;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
+
+static void
+ptp_print_timestamp(netdissect_options *ndo, const u_char *bp, u_int *len, const char *stype)
+{
+ uint64_t secs;
+ uint32_t nsecs;
+
+ ND_PRINT(", %s :", stype);
+ /* sec time stamp 6 bytes */
+ secs = GET_BE_U_6(bp);
+ ND_PRINT(" %"PRIu64" seconds,", secs);
+ *len -= 6;
+ bp += 6;
+
+ /* NS time stamp 4 bytes */
+ nsecs = GET_BE_U_4(bp);
+ ND_PRINT(" %u nanoseconds", nsecs);
+ *len -= 4;
+ bp += 4;
+}
+static void
+ptp_print_timestamp_identity(netdissect_options *ndo,
+ const u_char *bp, u_int *len, const char *ttype)
+{
+ uint64_t secs;
+ uint32_t nsecs;
+ uint16_t port_id;
+ uint64_t port_identity;
+
+ ND_PRINT(", %s :", ttype);
+ /* sec time stamp 6 bytes */
+ secs = GET_BE_U_6(bp);
+ ND_PRINT(" %"PRIu64" seconds,", secs);
+ *len -= 6;
+ bp += 6;
+
+ /* NS time stamp 4 bytes */
+ nsecs = GET_BE_U_4(bp);
+ ND_PRINT(" %u nanoseconds", nsecs);
+ *len -= 4;
+ bp += 4;
+
+ /* port identity*/
+ port_identity = GET_BE_U_8(bp);
+ ND_PRINT(", port identity : 0x%"PRIx64, port_identity);
+ *len -= 8;
+ bp += 8;
+
+ /* port id */
+ port_id = GET_BE_U_2(bp);
+ ND_PRINT(", port id : %u", port_id);
+ *len -= 2;
+ bp += 2;
+}
+static void
+ptp_print_announce_msg(netdissect_options *ndo, const u_char *bp, u_int *len)
+{
+ uint8_t rsvd, gm_prio_1, gm_prio_2, gm_clk_cls, gm_clk_acc, time_src;
+ uint16_t origin_cur_utc, gm_clk_var, steps_removed;
+ uint64_t gm_clock_id;
+ uint64_t secs;
+ uint32_t nsecs;
+
+ ND_PRINT(", %s :", p_origin_ts);
+ /* sec time stamp 6 bytes */
+ secs = GET_BE_U_6(bp);
+ ND_PRINT(" %"PRIu64" seconds", secs);
+ *len -= 6;
+ bp += 6;
+
+ /* NS time stamp 4 bytes */
+ nsecs = GET_BE_U_4(bp);
+ ND_PRINT(" %u nanoseconds", nsecs);
+ *len -= 4;
+ bp += 4;
+
+ /* origin cur utc */
+ origin_cur_utc = GET_BE_U_2(bp);
+ ND_PRINT(", origin cur utc :%u", origin_cur_utc);
+ *len -= 2;
+ bp += 2;
+
+ /* rsvd */
+ rsvd = GET_U_1(bp);
+ ND_PRINT(", rsvd : %u", rsvd);
+ *len -= 1;
+ bp += 1;
+
+ /* gm prio */
+ gm_prio_1 = GET_U_1(bp);
+ ND_PRINT(", gm priority_1 : %u", gm_prio_1);
+ *len -= 1;
+ bp += 1;
+
+ /* GM clock class */
+ gm_clk_cls = GET_U_1(bp);
+ ND_PRINT(", gm clock class : %u", gm_clk_cls);
+ *len -= 1;
+ bp += 1;
+ /* GM clock accuracy */
+ gm_clk_acc = GET_U_1(bp);
+ ND_PRINT(", gm clock accuracy : %u", gm_clk_acc);
+ *len -= 1;
+ bp += 1;
+ /* GM clock variance */
+ gm_clk_var = GET_BE_U_2(bp);
+ ND_PRINT(", gm clock variance : %u", gm_clk_var);
+ *len -= 2;
+ bp += 2;
+ /* GM Prio 2 */
+ gm_prio_2 = GET_U_1(bp);
+ ND_PRINT(", gm priority_2 : %u", gm_prio_2);
+ *len -= 1;
+ bp += 1;
+
+ /* GM Clock Identity */
+ gm_clock_id = GET_BE_U_8(bp);
+ ND_PRINT(", gm clock id : 0x%"PRIx64, gm_clock_id);
+ *len -= 8;
+ bp += 8;
+ /* steps removed */
+ steps_removed = GET_BE_U_2(bp);
+ ND_PRINT(", steps removed : %u", steps_removed);
+ *len -= 2;
+ bp += 2;
+ /* Time source */
+ time_src = GET_U_1(bp);
+ ND_PRINT(", time source : 0x%x", time_src);
+ *len -= 1;
+ bp += 1;
+
+}
+static void
+ptp_print_port_id(netdissect_options *ndo, const u_char *bp, u_int *len)
+{
+ uint16_t port_id;
+ uint64_t port_identity;
+
+ /* port identity*/
+ port_identity = GET_BE_U_8(bp);
+ ND_PRINT(", port identity : 0x%"PRIx64, port_identity);
+ *len -= 8;
+ bp += 8;
+
+ /* port id */
+ port_id = GET_BE_U_2(bp);
+ ND_PRINT(", port id : %u", port_id);
+ *len -= 2;
+ bp += 2;
+
+}
+
+static void
+ptp_print_mgmt_msg(netdissect_options *ndo, const u_char *bp, u_int *len)
+{
+ ptp_print_port_id(ndo, bp, len);
+ print_field(ndo, ", start boundary hops ", PTP_UCHAR_LEN, bp, len, PTP_FALSE);
+ print_field(ndo, ", boundary hops ", PTP_UCHAR_LEN, bp, len, PTP_FALSE);
+ print_field(ndo, ", flags ", PTP_UCHAR_LEN, bp, len, PTP_TRUE);
+ print_field(ndo, ", reserved ", PTP_UCHAR_LEN, bp, len, PTP_TRUE);
+}
diff --git a/print-radius.c b/print-radius.c
new file mode 100644
index 0000000..57d7e50
--- /dev/null
+++ b/print-radius.c
@@ -0,0 +1,1504 @@
+/*
+ * Copyright (C) 2000 Alfredo Andres Omella. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. The names of the authors may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Radius protocol printer */
+
+/*
+ * Radius printer routines as specified on:
+ *
+ * RFC 2865:
+ * "Remote Authentication Dial In User Service (RADIUS)"
+ *
+ * RFC 2866:
+ * "RADIUS Accounting"
+ *
+ * RFC 2867:
+ * "RADIUS Accounting Modifications for Tunnel Protocol Support"
+ *
+ * RFC 2868:
+ * "RADIUS Attributes for Tunnel Protocol Support"
+ *
+ * RFC 2869:
+ * "RADIUS Extensions"
+ *
+ * RFC 3162:
+ * "RADIUS and IPv6"
+ *
+ * RFC 3580:
+ * "IEEE 802.1X Remote Authentication Dial In User Service (RADIUS)"
+ * "Usage Guidelines"
+ *
+ * RFC 4072:
+ * "Diameter Extensible Authentication Protocol (EAP) Application"
+ *
+ * RFC 4675:
+ * "RADIUS Attributes for Virtual LAN and Priority Support"
+ *
+ * RFC 4818:
+ * "RADIUS Delegated-IPv6-Prefix Attribute"
+ *
+ * RFC 4849:
+ * "RADIUS Filter Rule Attribute"
+ *
+ * RFC 5090:
+ * "RADIUS Extension for Digest Authentication"
+ *
+ * RFC 5176:
+ * "Dynamic Authorization Extensions to RADIUS"
+ *
+ * RFC 5447:
+ * "Diameter Mobile IPv6"
+ *
+ * RFC 5580:
+ * "Carrying Location Objects in RADIUS and Diameter"
+ *
+ * RFC 6572:
+ * "RADIUS Support for Proxy Mobile IPv6"
+ *
+ * RFC 7155:
+ * "Diameter Network Access Server Application"
+ *
+ * Alfredo Andres Omella (aandres@s21sec.com) v0.1 2000/09/15
+ *
+ * TODO: Among other things to print ok MacIntosh and Vendor values
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect-ctype.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+#include "oui.h"
+#include "ntp.h"
+
+
+#define TAM_SIZE(x) (sizeof(x)/sizeof(x[0]) )
+
+#define PRINT_HEX(bytes_len, ptr_data) \
+ while(bytes_len) \
+ { \
+ ND_PRINT("%02X", GET_U_1(ptr_data)); \
+ ptr_data++; \
+ bytes_len--; \
+ }
+
+
+/* Radius packet codes */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-27 */
+#define RADCMD_ACCESS_REQ 1 /* Access-Request */
+#define RADCMD_ACCESS_ACC 2 /* Access-Accept */
+#define RADCMD_ACCESS_REJ 3 /* Access-Reject */
+#define RADCMD_ACCOUN_REQ 4 /* Accounting-Request */
+#define RADCMD_ACCOUN_RES 5 /* Accounting-Response */
+#define RADCMD_ACCESS_CHA 11 /* Access-Challenge */
+#define RADCMD_STATUS_SER 12 /* Status-Server */
+#define RADCMD_STATUS_CLI 13 /* Status-Client */
+#define RADCMD_DISCON_REQ 40 /* Disconnect-Request */
+#define RADCMD_DISCON_ACK 41 /* Disconnect-ACK */
+#define RADCMD_DISCON_NAK 42 /* Disconnect-NAK */
+#define RADCMD_COA_REQ 43 /* CoA-Request */
+#define RADCMD_COA_ACK 44 /* CoA-ACK */
+#define RADCMD_COA_NAK 45 /* CoA-NAK */
+#define RADCMD_RESERVED 255 /* Reserved */
+
+static const struct tok radius_command_values[] = {
+ { RADCMD_ACCESS_REQ, "Access-Request" },
+ { RADCMD_ACCESS_ACC, "Access-Accept" },
+ { RADCMD_ACCESS_REJ, "Access-Reject" },
+ { RADCMD_ACCOUN_REQ, "Accounting-Request" },
+ { RADCMD_ACCOUN_RES, "Accounting-Response" },
+ { RADCMD_ACCESS_CHA, "Access-Challenge" },
+ { RADCMD_STATUS_SER, "Status-Server" },
+ { RADCMD_STATUS_CLI, "Status-Client" },
+ { RADCMD_DISCON_REQ, "Disconnect-Request" },
+ { RADCMD_DISCON_ACK, "Disconnect-ACK" },
+ { RADCMD_DISCON_NAK, "Disconnect-NAK" },
+ { RADCMD_COA_REQ, "CoA-Request" },
+ { RADCMD_COA_ACK, "CoA-ACK" },
+ { RADCMD_COA_NAK, "CoA-NAK" },
+ { RADCMD_RESERVED, "Reserved" },
+ { 0, NULL}
+};
+
+/********************************/
+/* Begin Radius Attribute types */
+/********************************/
+#define SERV_TYPE 6
+#define FRM_IPADDR 8
+#define LOG_IPHOST 14
+#define LOG_SERVICE 15
+#define FRM_IPX 23
+#define SESSION_TIMEOUT 27
+#define IDLE_TIMEOUT 28
+#define FRM_ATALK_LINK 37
+#define FRM_ATALK_NETWORK 38
+
+#define ACCT_DELAY 41
+#define ACCT_SESSION_TIME 46
+
+#define EGRESS_VLAN_ID 56
+#define EGRESS_VLAN_NAME 58
+
+#define TUNNEL_TYPE 64
+#define TUNNEL_MEDIUM 65
+#define TUNNEL_CLIENT_END 66
+#define TUNNEL_SERVER_END 67
+#define TUNNEL_PASS 69
+
+#define ARAP_PASS 70
+#define ARAP_FEATURES 71
+
+#define EAP_MESSAGE 79
+
+#define TUNNEL_PRIV_GROUP 81
+#define TUNNEL_ASSIGN_ID 82
+#define TUNNEL_PREFERENCE 83
+
+#define ARAP_CHALLENGE_RESP 84
+#define ACCT_INT_INTERVAL 85
+
+#define TUNNEL_CLIENT_AUTH 90
+#define TUNNEL_SERVER_AUTH 91
+
+#define ERROR_CAUSE 101
+/********************************/
+/* End Radius Attribute types */
+/********************************/
+
+#define RFC4675_TAGGED 0x31
+#define RFC4675_UNTAGGED 0x32
+
+static const struct tok rfc4675_tagged[] = {
+ { RFC4675_TAGGED, "Tagged" },
+ { RFC4675_UNTAGGED, "Untagged" },
+ { 0, NULL}
+};
+
+
+static void print_attr_string(netdissect_options *, const u_char *, u_int, u_short );
+static void print_attr_num(netdissect_options *, const u_char *, u_int, u_short );
+static void print_vendor_attr(netdissect_options *, const u_char *, u_int, u_short );
+static void print_attr_address(netdissect_options *, const u_char *, u_int, u_short);
+static void print_attr_address6(netdissect_options *, const u_char *, u_int, u_short);
+static void print_attr_netmask6(netdissect_options *, const u_char *, u_int, u_short);
+static void print_attr_mip6_home_link_prefix(netdissect_options *, const u_char *, u_int, u_short);
+static void print_attr_operator_name(netdissect_options *, const u_char *, u_int, u_short);
+static void print_attr_location_information(netdissect_options *, const u_char *, u_int, u_short);
+static void print_attr_location_data(netdissect_options *, const u_char *, u_int, u_short);
+static void print_basic_location_policy_rules(netdissect_options *, const u_char *, u_int, u_short);
+static void print_attr_time(netdissect_options *, const u_char *, u_int, u_short);
+static void print_attr_vector64(netdissect_options *, register const u_char *, u_int, u_short);
+static void print_attr_strange(netdissect_options *, const u_char *, u_int, u_short);
+
+
+struct radius_hdr { nd_uint8_t code; /* Radius packet code */
+ nd_uint8_t id; /* Radius packet id */
+ nd_uint16_t len; /* Radius total length */
+ nd_byte auth[16]; /* Authenticator */
+ };
+
+#define MIN_RADIUS_LEN 20
+
+struct radius_attr { nd_uint8_t type; /* Attribute type */
+ nd_uint8_t len; /* Attribute length */
+ };
+
+
+/* Service-Type Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-4 */
+static const char *serv_type[]={ NULL,
+ "Login",
+ "Framed",
+ "Callback Login",
+ "Callback Framed",
+ "Outbound",
+ "Administrative",
+ "NAS Prompt",
+ "Authenticate Only",
+ "Callback NAS Prompt",
+ /* ^ [0, 9] ^ */
+ "Call Check",
+ "Callback Administrative",
+ "Voice",
+ "Fax",
+ "Modem Relay",
+ "IAPP-Register",
+ "IAPP-AP-Check",
+ "Authorize Only",
+ "Framed-Management",
+ "Additional-Authorization",
+ /* ^ [10, 19] ^ */
+ };
+
+/* Framed-Protocol Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-5 */
+static const char *frm_proto[]={ NULL,
+ "PPP",
+ "SLIP",
+ "ARAP",
+ "Gandalf proprietary",
+ "Xylogics IPX/SLIP",
+ "X.75 Synchronous",
+ "GPRS PDP Context",
+ };
+
+/* Framed-Routing Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-6 */
+static const char *frm_routing[]={ "None",
+ "Send",
+ "Listen",
+ "Send&Listen",
+ };
+
+/* Framed-Compression Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-7 */
+static const char *frm_comp[]={ "None",
+ "VJ TCP/IP",
+ "IPX",
+ "Stac-LZS",
+ };
+
+/* Login-Service Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-8 */
+static const char *login_serv[]={ "Telnet",
+ "Rlogin",
+ "TCP Clear",
+ "PortMaster(proprietary)",
+ "LAT",
+ "X.25-PAD",
+ "X.25-T3POS",
+ "Unassigned",
+ "TCP Clear Quiet",
+ };
+
+
+/* Termination-Action Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-9 */
+static const char *term_action[]={ "Default",
+ "RADIUS-Request",
+ };
+
+/* Ingress-Filters Attribute standard values */
+static const char *ingress_filters[]={ NULL,
+ "Enabled",
+ "Disabled",
+ };
+
+/* NAS-Port-Type Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-13 */
+static const char *nas_port_type[]={ "Async",
+ "Sync",
+ "ISDN Sync",
+ "ISDN Async V.120",
+ "ISDN Async V.110",
+ "Virtual",
+ "PIAFS",
+ "HDLC Clear Channel",
+ "X.25",
+ "X.75",
+ /* ^ [0, 9] ^ */
+ "G.3 Fax",
+ "SDSL",
+ "ADSL-CAP",
+ "ADSL-DMT",
+ "ISDN-DSL",
+ "Ethernet",
+ "xDSL",
+ "Cable",
+ "Wireless - Other",
+ "Wireless - IEEE 802.11",
+ /* ^ [10, 19] ^ */
+ "Token-Ring",
+ "FDDI",
+ "Wireless - CDMA200",
+ "Wireless - UMTS",
+ "Wireless - 1X-EV",
+ "IAPP",
+ "FTTP",
+ "Wireless - IEEE 802.16",
+ "Wireless - IEEE 802.20",
+ "Wireless - IEEE 802.22",
+ /* ^ [20, 29] ^ */
+ "PPPoA",
+ "PPPoEoA",
+ "PPPoEoE",
+ "PPPoEoVLAN",
+ "PPPoEoQinQ",
+ "xPON",
+ "Wireless - XGP",
+ "WiMAX Pre-Release 8 IWK Function",
+ "WIMAX-WIFI-IWK",
+ "WIMAX-SFF",
+ /* ^ [30, 39] ^ */
+ "WIMAX-HA-LMA",
+ "WIMAX-DHCP",
+ "WIMAX-LBS",
+ "WIMAX-WVS",
+ };
+
+/* Acct-Status-Type Accounting Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-10 */
+static const char *acct_status[]={ NULL,
+ "Start",
+ "Stop",
+ "Interim-Update",
+ "Unassigned",
+ "Unassigned",
+ "Unassigned",
+ "Accounting-On",
+ "Accounting-Off",
+ "Tunnel-Start",
+ /* ^ [0, 9] ^ */
+ "Tunnel-Stop",
+ "Tunnel-Reject",
+ "Tunnel-Link-Start",
+ "Tunnel-Link-Stop",
+ "Tunnel-Link-Reject",
+ "Failed",
+ };
+
+/* Acct-Authentic Accounting Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-11 */
+static const char *acct_auth[]={ NULL,
+ "RADIUS",
+ "Local",
+ "Remote",
+ "Diameter",
+ };
+
+/* Acct-Terminate-Cause Accounting Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-12 */
+static const char *acct_term[]={ NULL,
+ "User Request",
+ "Lost Carrier",
+ "Lost Service",
+ "Idle Timeout",
+ "Session Timeout",
+ "Admin Reset",
+ "Admin Reboot",
+ "Port Error",
+ "NAS Error",
+ /* ^ [0, 9] ^ */
+ "NAS Request",
+ "NAS Reboot",
+ "Port Unneeded",
+ "Port Preempted",
+ "Port Suspended",
+ "Service Unavailable",
+ "Callback",
+ "User Error",
+ "Host Request",
+ "Supplicant Restart",
+ /* ^ [10, 19] ^ */
+ "Reauthentication Failure",
+ "Port Reinitialized",
+ "Port Administratively Disabled",
+ "Lost Power",
+ };
+
+/* Tunnel-Type Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-14 */
+static const char *tunnel_type[]={ NULL,
+ "PPTP",
+ "L2F",
+ "L2TP",
+ "ATMP",
+ "VTP",
+ "AH",
+ "IP-IP",
+ "MIN-IP-IP",
+ "ESP",
+ /* ^ [0, 9] ^ */
+ "GRE",
+ "DVS",
+ "IP-in-IP Tunneling",
+ "VLAN",
+ };
+
+/* Tunnel-Medium-Type Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-15 */
+static const char *tunnel_medium[]={ NULL,
+ "IPv4",
+ "IPv6",
+ "NSAP",
+ "HDLC",
+ "BBN 1822",
+ "802",
+ "E.163",
+ "E.164",
+ "F.69",
+ /* ^ [0, 9] ^ */
+ "X.121",
+ "IPX",
+ "Appletalk",
+ "Decnet IV",
+ "Banyan Vines",
+ "E.164 with NSAP subaddress",
+ };
+
+/* ARAP-Zone-Access Attribute standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-16 */
+static const char *arap_zone[]={ NULL,
+ "Only access to dfl zone",
+ "Use zone filter inc.",
+ "Not used",
+ "Use zone filter exc.",
+ };
+
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-17 */
+static const char *prompt[]={ "No Echo",
+ "Echo",
+ };
+
+/* Error-Cause standard values */
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-18 */
+#define ERROR_CAUSE_RESIDUAL_CONTEXT_REMOVED 201
+#define ERROR_CAUSE_INVALID_EAP_PACKET 202
+#define ERROR_CAUSE_UNSUPPORTED_ATTRIBUTE 401
+#define ERROR_CAUSE_MISSING_ATTRIBUTE 402
+#define ERROR_CAUSE_NAS_IDENTIFICATION_MISMATCH 403
+#define ERROR_CAUSE_INVALID_REQUEST 404
+#define ERROR_CAUSE_UNSUPPORTED_SERVICE 405
+#define ERROR_CAUSE_UNSUPPORTED_EXTENSION 406
+#define ERROR_CAUSE_INVALID_ATTRIBUTE_VALUE 407
+#define ERROR_CAUSE_ADMINISTRATIVELY_PROHIBITED 501
+#define ERROR_CAUSE_PROXY_REQUEST_NOT_ROUTABLE 502
+#define ERROR_CAUSE_SESSION_CONTEXT_NOT_FOUND 503
+#define ERROR_CAUSE_SESSION_CONTEXT_NOT_REMOVABLE 504
+#define ERROR_CAUSE_PROXY_PROCESSING_ERROR 505
+#define ERROR_CAUSE_RESOURCES_UNAVAILABLE 506
+#define ERROR_CAUSE_REQUEST_INITIATED 507
+#define ERROR_CAUSE_MULTIPLE_SESSION_SELECTION_UNSUPPORTED 508
+#define ERROR_CAUSE_LOCATION_INFO_REQUIRED 509
+static const struct tok errorcausetype[] = {
+ { ERROR_CAUSE_RESIDUAL_CONTEXT_REMOVED, "Residual Session Context Removed" },
+ { ERROR_CAUSE_INVALID_EAP_PACKET, "Invalid EAP Packet (Ignored)" },
+ { ERROR_CAUSE_UNSUPPORTED_ATTRIBUTE, "Unsupported Attribute" },
+ { ERROR_CAUSE_MISSING_ATTRIBUTE, "Missing Attribute" },
+ { ERROR_CAUSE_NAS_IDENTIFICATION_MISMATCH, "NAS Identification Mismatch" },
+ { ERROR_CAUSE_INVALID_REQUEST, "Invalid Request" },
+ { ERROR_CAUSE_UNSUPPORTED_SERVICE, "Unsupported Service" },
+ { ERROR_CAUSE_UNSUPPORTED_EXTENSION, "Unsupported Extension" },
+ { ERROR_CAUSE_INVALID_ATTRIBUTE_VALUE, "Invalid Attribute Value" },
+ { ERROR_CAUSE_ADMINISTRATIVELY_PROHIBITED, "Administratively Prohibited" },
+ { ERROR_CAUSE_PROXY_REQUEST_NOT_ROUTABLE, "Request Not Routable (Proxy)" },
+ { ERROR_CAUSE_SESSION_CONTEXT_NOT_FOUND, "Session Context Not Found" },
+ { ERROR_CAUSE_SESSION_CONTEXT_NOT_REMOVABLE, "Session Context Not Removable" },
+ { ERROR_CAUSE_PROXY_PROCESSING_ERROR, "Other Proxy Processing Error" },
+ { ERROR_CAUSE_RESOURCES_UNAVAILABLE, "Resources Unavailable" },
+ { ERROR_CAUSE_REQUEST_INITIATED, "Request Initiated" },
+ { ERROR_CAUSE_MULTIPLE_SESSION_SELECTION_UNSUPPORTED, "Multiple Session Selection Unsupported" },
+ { ERROR_CAUSE_LOCATION_INFO_REQUIRED, "Location Info Required" },
+ { 0, NULL }
+ };
+
+/* MIP6-Feature-Vector standard values */
+/* https://www.iana.org/assignments/aaa-parameters/aaa-parameters.xhtml */
+#define MIP6_INTEGRATED 0x0000000000000001
+#define LOCAL_HOME_AGENT_ASSIGNMENT 0x0000000000000002
+#define PMIP6_SUPPORTED 0x0000010000000000
+#define IP4_HOA_SUPPORTED 0x0000020000000000
+#define LOCAL_MAG_ROUTING_SUPPORTED 0x0000040000000000
+#define ASSIGN_LOCAL_IP 0x0000080000000000
+#define MIP4_SUPPORTED 0x0000100000000000
+#define OPTIMIZED_IDLE_MODE_MOBILITY 0x0000200000000000
+#define GTPv2_SUPPORTED 0x0000400000000000
+#define IP4_TRANSPORT_SUPPORTED 0x0000800000000000
+#define IP4_HOA_ONLY_SUPPORTED 0x0001000000000000
+#define INTER_MAG_ROUTING_SUPPORTED 0x0002000000000000
+static const struct mip6_feature_vector {
+ uint64_t v;
+ const char *s;
+ } mip6_feature_vector[] = {
+ { MIP6_INTEGRATED, "MIP6_INTEGRATED" },
+ { LOCAL_HOME_AGENT_ASSIGNMENT, "LOCAL_HOME_AGENT_ASSIGNMENT" },
+ { PMIP6_SUPPORTED, "PMIP6_SUPPORTED" },
+ { IP4_HOA_SUPPORTED, "IP4_HOA_SUPPORTED" },
+ { LOCAL_MAG_ROUTING_SUPPORTED, "LOCAL_MAG_ROUTING_SUPPORTED" },
+ { ASSIGN_LOCAL_IP, "ASSIGN_LOCAL_IP" },
+ { MIP4_SUPPORTED, "MIP4_SUPPORTED" },
+ { OPTIMIZED_IDLE_MODE_MOBILITY, "OPTIMIZED_IDLE_MODE_MOBILITY" },
+ { GTPv2_SUPPORTED, "GTPv2_SUPPORTED" },
+ { IP4_TRANSPORT_SUPPORTED, "IP4_TRANSPORT_SUPPORTED" },
+ { IP4_HOA_ONLY_SUPPORTED, "IP4_HOA_ONLY_SUPPORTED" },
+ { INTER_MAG_ROUTING_SUPPORTED, "INTER_MAG_ROUTING_SUPPORTED" },
+ };
+
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-19 */
+#define OPERATOR_NAME_TADIG 0x30
+#define OPERATOR_NAME_REALM 0x31
+#define OPERATOR_NAME_E212 0x32
+#define OPERATOR_NAME_ICC 0x33
+static const struct tok operator_name_vector[] = {
+ { OPERATOR_NAME_TADIG, "TADIG" },
+ { OPERATOR_NAME_REALM, "REALM" },
+ { OPERATOR_NAME_E212, "E212" },
+ { OPERATOR_NAME_ICC, "ICC" },
+ { 0, NULL }
+ };
+
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-20 */
+#define LOCATION_INFORMATION_CODE_CIVIC 0
+#define LOCATION_INFORMATION_CODE_GEOSPATIAL 1
+static const struct tok location_information_code_vector[] = {
+ { LOCATION_INFORMATION_CODE_CIVIC , "Civic" },
+ { LOCATION_INFORMATION_CODE_GEOSPATIAL, "Geospatial" },
+ { 0, NULL }
+ };
+
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-21 */
+#define LOCATION_INFORMATION_ENTITY_USER 0
+#define LOCATION_INFORMATION_ENTITY_RADIUS 1
+static const struct tok location_information_entity_vector[] = {
+ { LOCATION_INFORMATION_ENTITY_USER, "User" },
+ { LOCATION_INFORMATION_ENTITY_RADIUS, "RADIUS" },
+ { 0, NULL }
+ };
+
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-22 */
+static const struct tok blpr_bm[] = {
+ { 0x0001, "MBZ-15" },
+ { 0x0002, "MBZ-14" },
+ { 0x0004, "MBZ-13" },
+ { 0x0008, "MBZ-12" },
+ { 0x0010, "MBZ-11" },
+ { 0x0020, "MBZ-10" },
+ { 0x0040, "MBZ-9" },
+ { 0x0080, "MBZ-8" },
+ { 0x0100, "MBZ-7" },
+ { 0x0200, "MBZ-6" },
+ { 0x0400, "MBZ-5" },
+ { 0x0800, "MBZ-4" },
+ { 0x1000, "MBZ-3" },
+ { 0x2000, "MBZ-2" },
+ { 0x4000, "MBZ-1" },
+ { 0x8000, "Retransmission Allowed" },
+ { 0, NULL }
+ };
+
+/* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-2 */
+static const struct attrtype {
+ const char *name; /* Attribute name */
+ const char **subtypes; /* Standard Values (if any) */
+ u_char siz_subtypes; /* Size of total standard values */
+ u_char first_subtype; /* First standard value is 0 or 1 */
+ void (*print_func)(netdissect_options *, const u_char *, u_int, u_short);
+ } attr_type[]=
+ {
+ { NULL, NULL, 0, 0, NULL },
+ { "User-Name", NULL, 0, 0, print_attr_string },
+ { "User-Password", NULL, 0, 0, NULL },
+ { "CHAP-Password", NULL, 0, 0, NULL },
+ { "NAS-IP-Address", NULL, 0, 0, print_attr_address },
+ { "NAS-Port", NULL, 0, 0, print_attr_num },
+ { "Service-Type", serv_type, TAM_SIZE(serv_type)-1, 1, print_attr_num },
+ { "Framed-Protocol", frm_proto, TAM_SIZE(frm_proto)-1, 1, print_attr_num },
+ { "Framed-IP-Address", NULL, 0, 0, print_attr_address },
+ { "Framed-IP-Netmask", NULL, 0, 0, print_attr_address },
+ /* ^ [0, 9] ^ */
+ { "Framed-Routing", frm_routing, TAM_SIZE(frm_routing), 0, print_attr_num },
+ { "Filter-Id", NULL, 0, 0, print_attr_string },
+ { "Framed-MTU", NULL, 0, 0, print_attr_num },
+ { "Framed-Compression", frm_comp, TAM_SIZE(frm_comp), 0, print_attr_num },
+ { "Login-IP-Host", NULL, 0, 0, print_attr_address },
+ { "Login-Service", login_serv, TAM_SIZE(login_serv), 0, print_attr_num },
+ { "Login-TCP-Port", NULL, 0, 0, print_attr_num },
+ { "Unassigned", NULL, 0, 0, NULL }, /*17*/
+ { "Reply-Message", NULL, 0, 0, print_attr_string },
+ { "Callback-Number", NULL, 0, 0, print_attr_string },
+ /* ^ [10, 19] ^ */
+ { "Callback-Id", NULL, 0, 0, print_attr_string },
+ { "Unassigned", NULL, 0, 0, NULL }, /*21*/
+ { "Framed-Route", NULL, 0, 0, print_attr_string },
+ { "Framed-IPX-Network", NULL, 0, 0, print_attr_num },
+ { "State", NULL, 0, 0, print_attr_string },
+ { "Class", NULL, 0, 0, print_attr_string },
+ { "Vendor-Specific", NULL, 0, 0, print_vendor_attr },
+ { "Session-Timeout", NULL, 0, 0, print_attr_num },
+ { "Idle-Timeout", NULL, 0, 0, print_attr_num },
+ { "Termination-Action", term_action, TAM_SIZE(term_action), 0, print_attr_num },
+ /* ^ [20, 29] ^ */
+ { "Called-Station-Id", NULL, 0, 0, print_attr_string },
+ { "Calling-Station-Id", NULL, 0, 0, print_attr_string },
+ { "NAS-Identifier", NULL, 0, 0, print_attr_string },
+ { "Proxy-State", NULL, 0, 0, print_attr_string },
+ { "Login-LAT-Service", NULL, 0, 0, print_attr_string },
+ { "Login-LAT-Node", NULL, 0, 0, print_attr_string },
+ { "Login-LAT-Group", NULL, 0, 0, print_attr_string },
+ { "Framed-AppleTalk-Link", NULL, 0, 0, print_attr_num },
+ { "Framed-AppleTalk-Network", NULL, 0, 0, print_attr_num },
+ { "Framed-AppleTalk-Zone", NULL, 0, 0, print_attr_string },
+ /* ^ [30, 39] ^ */
+ { "Acct-Status-Type", acct_status, TAM_SIZE(acct_status)-1, 1, print_attr_num },
+ { "Acct-Delay-Time", NULL, 0, 0, print_attr_num },
+ { "Acct-Input-Octets", NULL, 0, 0, print_attr_num },
+ { "Acct-Output-Octets", NULL, 0, 0, print_attr_num },
+ { "Acct-Session-Id", NULL, 0, 0, print_attr_string },
+ { "Acct-Authentic", acct_auth, TAM_SIZE(acct_auth)-1, 1, print_attr_num },
+ { "Acct-Session-Time", NULL, 0, 0, print_attr_num },
+ { "Acct-Input-Packets", NULL, 0, 0, print_attr_num },
+ { "Acct-Output-Packets", NULL, 0, 0, print_attr_num },
+ { "Acct-Terminate-Cause", acct_term, TAM_SIZE(acct_term)-1, 1, print_attr_num },
+ /* ^ [40, 49] ^ */
+ { "Acct-Multi-Session-Id", NULL, 0, 0, print_attr_string },
+ { "Acct-Link-Count", NULL, 0, 0, print_attr_num },
+ { "Acct-Input-Gigawords", NULL, 0, 0, print_attr_num },
+ { "Acct-Output-Gigawords", NULL, 0, 0, print_attr_num },
+ { "Unassigned", NULL, 0, 0, NULL }, /*54*/
+ { "Event-Timestamp", NULL, 0, 0, print_attr_time },
+ { "Egress-VLANID", NULL, 0, 0, print_attr_num },
+ { "Ingress-Filters", ingress_filters, TAM_SIZE(ingress_filters)-1, 1, print_attr_num },
+ { "Egress-VLAN-Name", NULL, 0, 0, print_attr_string },
+ { "User-Priority-Table", NULL, 0, 0, NULL },
+ /* ^ [50, 59] ^ */
+ { "CHAP-Challenge", NULL, 0, 0, print_attr_string },
+ { "NAS-Port-Type", nas_port_type, TAM_SIZE(nas_port_type), 0, print_attr_num },
+ { "Port-Limit", NULL, 0, 0, print_attr_num },
+ { "Login-LAT-Port", NULL, 0, 0, print_attr_string }, /*63*/
+ { "Tunnel-Type", tunnel_type, TAM_SIZE(tunnel_type)-1, 1, print_attr_num },
+ { "Tunnel-Medium-Type", tunnel_medium, TAM_SIZE(tunnel_medium)-1, 1, print_attr_num },
+ { "Tunnel-Client-Endpoint", NULL, 0, 0, print_attr_string },
+ { "Tunnel-Server-Endpoint", NULL, 0, 0, print_attr_string },
+ { "Acct-Tunnel-Connection", NULL, 0, 0, print_attr_string },
+ { "Tunnel-Password", NULL, 0, 0, print_attr_string },
+ /* ^ [60, 69] ^ */
+ { "ARAP-Password", NULL, 0, 0, print_attr_strange },
+ { "ARAP-Features", NULL, 0, 0, print_attr_strange },
+ { "ARAP-Zone-Access", arap_zone, TAM_SIZE(arap_zone)-1, 1, print_attr_num }, /*72*/
+ { "ARAP-Security", NULL, 0, 0, print_attr_string },
+ { "ARAP-Security-Data", NULL, 0, 0, print_attr_string },
+ { "Password-Retry", NULL, 0, 0, print_attr_num },
+ { "Prompt", prompt, TAM_SIZE(prompt), 0, print_attr_num },
+ { "Connect-Info", NULL, 0, 0, print_attr_string },
+ { "Configuration-Token", NULL, 0, 0, print_attr_string },
+ { "EAP-Message", NULL, 0, 0, print_attr_string },
+ /* ^ [70, 79] ^ */
+ { "Message-Authenticator", NULL, 0, 0, print_attr_string }, /*80*/
+ { "Tunnel-Private-Group-ID", NULL, 0, 0, print_attr_string },
+ { "Tunnel-Assignment-ID", NULL, 0, 0, print_attr_string },
+ { "Tunnel-Preference", NULL, 0, 0, print_attr_num },
+ { "ARAP-Challenge-Response", NULL, 0, 0, print_attr_strange },
+ { "Acct-Interim-Interval", NULL, 0, 0, print_attr_num },
+ { "Acct-Tunnel-Packets-Lost", NULL, 0, 0, print_attr_num }, /*86*/
+ { "NAS-Port-Id", NULL, 0, 0, print_attr_string },
+ { "Framed-Pool", NULL, 0, 0, print_attr_string },
+ { "CUI", NULL, 0, 0, print_attr_string },
+ /* ^ [80, 89] ^ */
+ { "Tunnel-Client-Auth-ID", NULL, 0, 0, print_attr_string },
+ { "Tunnel-Server-Auth-ID", NULL, 0, 0, print_attr_string },
+ { "NAS-Filter-Rule", NULL, 0, 0, print_attr_string },
+ { "Unassigned", NULL, 0, 0, NULL }, /*93*/
+ { "Originating-Line-Info", NULL, 0, 0, NULL },
+ { "NAS-IPv6-Address", NULL, 0, 0, print_attr_address6 },
+ { "Framed-Interface-ID", NULL, 0, 0, NULL },
+ { "Framed-IPv6-Prefix", NULL, 0, 0, print_attr_netmask6 },
+ { "Login-IPv6-Host", NULL, 0, 0, print_attr_address6 },
+ { "Framed-IPv6-Route", NULL, 0, 0, print_attr_string },
+ /* ^ [90, 99] ^ */
+ { "Framed-IPv6-Pool", NULL, 0, 0, print_attr_string },
+ { "Error-Cause", NULL, 0, 0, print_attr_strange },
+ { "EAP-Key-Name", NULL, 0, 0, NULL },
+ { "Digest-Response", NULL, 0, 0, print_attr_string },
+ { "Digest-Realm", NULL, 0, 0, print_attr_string },
+ { "Digest-Nonce", NULL, 0, 0, print_attr_string },
+ { "Digest-Response-Auth", NULL, 0, 0, print_attr_string },
+ { "Digest-Nextnonce", NULL, 0, 0, print_attr_string },
+ { "Digest-Method", NULL, 0, 0, print_attr_string },
+ { "Digest-URI", NULL, 0, 0, print_attr_string },
+ /* ^ [100, 109] ^ */
+ { "Digest-Qop", NULL, 0, 0, print_attr_string },
+ { "Digest-Algorithm", NULL, 0, 0, print_attr_string },
+ { "Digest-Entity-Body-Hash", NULL, 0, 0, print_attr_string },
+ { "Digest-CNonce", NULL, 0, 0, print_attr_string },
+ { "Digest-Nonce-Count", NULL, 0, 0, print_attr_string },
+ { "Digest-Username", NULL, 0, 0, print_attr_string },
+ { "Digest-Opaque", NULL, 0, 0, print_attr_string },
+ { "Digest-Auth-Param", NULL, 0, 0, print_attr_string },
+ { "Digest-AKA-Auts", NULL, 0, 0, print_attr_string },
+ { "Digest-Domain", NULL, 0, 0, print_attr_string },
+ /* ^ [110, 119] ^ */
+ { "Digest-Stale", NULL, 0, 0, print_attr_string },
+ { "Digest-HA1", NULL, 0, 0, print_attr_string },
+ { "SIP-AOR", NULL, 0, 0, print_attr_string },
+ { "Delegated-IPv6-Prefix", NULL, 0, 0, print_attr_netmask6 },
+ { "MIP6-Feature-Vector", NULL, 0, 0, print_attr_vector64 },
+ { "MIP6-Home-Link-Prefix", NULL, 0, 0, print_attr_mip6_home_link_prefix },
+ { "Operator-Name", NULL, 0, 0, print_attr_operator_name },
+ { "Location-Information", NULL, 0, 0, print_attr_location_information },
+ { "Location-Data", NULL, 0, 0, print_attr_location_data },
+ { "Basic-Location-Policy-Rules", NULL, 0, 0, print_basic_location_policy_rules }
+ /* ^ [120, 129] ^ */
+ };
+
+
+/*****************************/
+/* Print an attribute string */
+/* value pointed by 'data' */
+/* and 'length' size. */
+/*****************************/
+/* Returns nothing. */
+/*****************************/
+static void
+print_attr_string(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code)
+{
+ u_int i;
+
+ ND_TCHECK_LEN(data, length);
+
+ switch(attr_code)
+ {
+ case TUNNEL_PASS:
+ if (length < 3)
+ goto trunc;
+ if (GET_U_1(data) && (GET_U_1(data) <= 0x1F))
+ ND_PRINT("Tag[%u] ", GET_U_1(data));
+ else
+ ND_PRINT("Tag[Unused] ");
+ data++;
+ length--;
+ ND_PRINT("Salt %u ", GET_BE_U_2(data));
+ data+=2;
+ length-=2;
+ break;
+ case TUNNEL_CLIENT_END:
+ case TUNNEL_SERVER_END:
+ case TUNNEL_PRIV_GROUP:
+ case TUNNEL_ASSIGN_ID:
+ case TUNNEL_CLIENT_AUTH:
+ case TUNNEL_SERVER_AUTH:
+ if (GET_U_1(data) <= 0x1F)
+ {
+ if (length < 1)
+ goto trunc;
+ if (GET_U_1(data))
+ ND_PRINT("Tag[%u] ", GET_U_1(data));
+ else
+ ND_PRINT("Tag[Unused] ");
+ data++;
+ length--;
+ }
+ break;
+ case EGRESS_VLAN_NAME:
+ if (length < 1)
+ goto trunc;
+ ND_PRINT("%s (0x%02x) ",
+ tok2str(rfc4675_tagged,"Unknown tag",GET_U_1(data)),
+ GET_U_1(data));
+ data++;
+ length--;
+ break;
+ case EAP_MESSAGE:
+ if (length < 1)
+ goto trunc;
+ eap_print(ndo, data, length);
+ return;
+ }
+
+ for (i=0; i < length && GET_U_1(data); i++, data++)
+ ND_PRINT("%c", ND_ASCII_ISPRINT(GET_U_1(data)) ? GET_U_1(data) : '.');
+
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+}
+
+/*
+ * print vendor specific attributes
+ */
+static void
+print_vendor_attr(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code _U_)
+{
+ u_int idx;
+ u_int vendor_id;
+ u_int vendor_type;
+ u_int vendor_length;
+
+ if (length < 4)
+ goto trunc;
+ vendor_id = GET_BE_U_4(data);
+ data+=4;
+ length-=4;
+
+ ND_PRINT("Vendor: %s (%u)",
+ tok2str(smi_values,"Unknown",vendor_id),
+ vendor_id);
+
+ while (length >= 2) {
+ vendor_type = GET_U_1(data);
+ vendor_length = GET_U_1(data + 1);
+
+ if (vendor_length < 2)
+ {
+ ND_PRINT("\n\t Vendor Attribute: %u, Length: %u (bogus, must be >= 2)",
+ vendor_type,
+ vendor_length);
+ return;
+ }
+ if (vendor_length > length)
+ {
+ ND_PRINT("\n\t Vendor Attribute: %u, Length: %u (bogus, goes past end of vendor-specific attribute)",
+ vendor_type,
+ vendor_length);
+ return;
+ }
+ data+=2;
+ vendor_length-=2;
+ length-=2;
+ ND_TCHECK_LEN(data, vendor_length);
+
+ ND_PRINT("\n\t Vendor Attribute: %u, Length: %u, Value: ",
+ vendor_type,
+ vendor_length);
+ for (idx = 0; idx < vendor_length ; idx++, data++)
+ ND_PRINT("%c", ND_ASCII_ISPRINT(GET_U_1(data)) ? GET_U_1(data) : '.');
+ length-=vendor_length;
+ }
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+}
+
+/******************************/
+/* Print an attribute numeric */
+/* value pointed by 'data' */
+/* and 'length' size. */
+/******************************/
+/* Returns nothing. */
+/******************************/
+static void
+print_attr_num(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code)
+{
+ uint32_t timeout;
+
+ if (length != 4)
+ {
+ ND_PRINT("ERROR: length %u != 4", length);
+ return;
+ }
+
+ /* This attribute has standard values */
+ if (attr_type[attr_code].siz_subtypes)
+ {
+ static const char **table;
+ uint32_t data_value;
+ table = attr_type[attr_code].subtypes;
+
+ if ( (attr_code == TUNNEL_TYPE) || (attr_code == TUNNEL_MEDIUM) )
+ {
+ if (!GET_U_1(data))
+ ND_PRINT("Tag[Unused] ");
+ else
+ ND_PRINT("Tag[%u] ", GET_U_1(data));
+ data++;
+ data_value = GET_BE_U_3(data);
+ }
+ else
+ {
+ data_value = GET_BE_U_4(data);
+ }
+ if ( data_value <= (uint32_t)(attr_type[attr_code].siz_subtypes - 1 +
+ attr_type[attr_code].first_subtype) &&
+ data_value >= attr_type[attr_code].first_subtype )
+ ND_PRINT("%s", table[data_value]);
+ else
+ ND_PRINT("#%u", data_value);
+ }
+ else
+ {
+ switch(attr_code) /* Be aware of special cases... */
+ {
+ case FRM_IPX:
+ if (GET_BE_U_4(data) == 0xFFFFFFFE )
+ ND_PRINT("NAS Select");
+ else
+ ND_PRINT("%u", GET_BE_U_4(data));
+ break;
+
+ case SESSION_TIMEOUT:
+ case IDLE_TIMEOUT:
+ case ACCT_DELAY:
+ case ACCT_SESSION_TIME:
+ case ACCT_INT_INTERVAL:
+ timeout = GET_BE_U_4(data);
+ if ( timeout < 60 )
+ ND_PRINT("%02d secs", timeout);
+ else
+ {
+ if ( timeout < 3600 )
+ ND_PRINT("%02d:%02d min",
+ timeout / 60, timeout % 60);
+ else
+ ND_PRINT("%02d:%02d:%02d hours",
+ timeout / 3600, (timeout % 3600) / 60,
+ timeout % 60);
+ }
+ break;
+
+ case FRM_ATALK_LINK:
+ if (GET_BE_U_4(data))
+ ND_PRINT("%u", GET_BE_U_4(data));
+ else
+ ND_PRINT("Unnumbered");
+ break;
+
+ case FRM_ATALK_NETWORK:
+ if (GET_BE_U_4(data))
+ ND_PRINT("%u", GET_BE_U_4(data));
+ else
+ ND_PRINT("NAS assigned");
+ break;
+
+ case TUNNEL_PREFERENCE:
+ if (GET_U_1(data))
+ ND_PRINT("Tag[%u] ", GET_U_1(data));
+ else
+ ND_PRINT("Tag[Unused] ");
+ data++;
+ ND_PRINT("%u", GET_BE_U_3(data));
+ break;
+
+ case EGRESS_VLAN_ID:
+ ND_PRINT("%s (0x%02x) ",
+ tok2str(rfc4675_tagged,"Unknown tag",GET_U_1(data)),
+ GET_U_1(data));
+ data++;
+ ND_PRINT("%u", GET_BE_U_3(data));
+ break;
+
+ default:
+ ND_PRINT("%u", GET_BE_U_4(data));
+ break;
+
+ } /* switch */
+
+ } /* if-else */
+}
+
+/*****************************/
+/* Print an attribute IPv4 */
+/* address value pointed by */
+/* 'data' and 'length' size. */
+/*****************************/
+/* Returns nothing. */
+/*****************************/
+static void
+print_attr_address(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code)
+{
+ if (length != 4)
+ {
+ ND_PRINT("ERROR: length %u != 4", length);
+ return;
+ }
+
+ switch(attr_code)
+ {
+ case FRM_IPADDR:
+ case LOG_IPHOST:
+ if (GET_BE_U_4(data) == 0xFFFFFFFF )
+ ND_PRINT("User Selected");
+ else
+ if (GET_BE_U_4(data) == 0xFFFFFFFE )
+ ND_PRINT("NAS Select");
+ else
+ ND_PRINT("%s",GET_IPADDR_STRING(data));
+ break;
+
+ default:
+ ND_PRINT("%s", GET_IPADDR_STRING(data));
+ break;
+ }
+}
+
+/*****************************/
+/* Print an attribute IPv6 */
+/* address value pointed by */
+/* 'data' and 'length' size. */
+/*****************************/
+/* Returns nothing. */
+/*****************************/
+static void
+print_attr_address6(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code _U_)
+{
+ if (length != 16)
+ {
+ ND_PRINT("ERROR: length %u != 16", length);
+ return;
+ }
+
+ ND_PRINT("%s", GET_IP6ADDR_STRING(data));
+}
+
+static void
+print_attr_netmask6(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code _U_)
+{
+ u_char data2[16];
+
+ if (length < 2 || length > 18)
+ {
+ ND_PRINT("ERROR: length %u not in range (2..18)", length);
+ return;
+ }
+ ND_TCHECK_LEN(data, length);
+ if (GET_U_1(data + 1) > 128)
+ {
+ ND_PRINT("ERROR: netmask %u not in range (0..128)", GET_U_1(data + 1));
+ return;
+ }
+
+ memset(data2, 0, sizeof(data2));
+ if (length > 2)
+ memcpy(data2, data+2, length-2);
+
+ ND_PRINT("%s/%u", ip6addr_string(ndo, data2), GET_U_1(data + 1)); /* local buffer, not packet data; don't use GET_IP6ADDR_STRING() */
+
+ if (GET_U_1(data + 1) > 8 * (length - 2))
+ ND_PRINT(" (inconsistent prefix length)");
+
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+print_attr_mip6_home_link_prefix(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code _U_)
+{
+ if (length != 17)
+ {
+ ND_PRINT("ERROR: length %u != 17", length);
+ return;
+ }
+ ND_TCHECK_LEN(data, length);
+ if (GET_U_1(data) > 128)
+ {
+ ND_PRINT("ERROR: netmask %u not in range (0..128)", GET_U_1(data));
+ return;
+ }
+
+ ND_PRINT("%s/%u", GET_IP6ADDR_STRING(data + 1), GET_U_1(data));
+
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+print_attr_operator_name(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code _U_)
+{
+ u_int namespace_value;
+
+ ND_TCHECK_LEN(data, length);
+ if (length < 2)
+ {
+ ND_PRINT("ERROR: length %u < 2", length);
+ return;
+ }
+ namespace_value = GET_U_1(data);
+ data++;
+ ND_PRINT("[%s] ", tok2str(operator_name_vector, "unknown namespace %u", namespace_value));
+
+ (void)nd_printn(ndo, data, length - 1, NULL);
+
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+print_attr_location_information(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code _U_)
+{
+ uint16_t index;
+ uint8_t code, entity;
+
+ ND_TCHECK_LEN(data, length);
+ if (length < 21)
+ {
+ ND_PRINT("ERROR: length %u < 21", length);
+ return;
+ }
+
+ index = GET_BE_U_2(data);
+ data += 2;
+
+ code = GET_U_1(data);
+ data++;
+
+ entity = GET_U_1(data);
+ data++;
+
+ ND_PRINT("index %u, code %s, entity %s, ",
+ index,
+ tok2str(location_information_code_vector, "Unknown (%u)", code),
+ tok2str(location_information_entity_vector, "Unknown (%u)", entity)
+ );
+
+ ND_PRINT("sighting time ");
+ p_ntp_time(ndo, (const struct l_fixedpt *)data);
+ ND_PRINT(", ");
+ data += 8;
+
+ ND_PRINT("time to live ");
+ p_ntp_time(ndo, (const struct l_fixedpt *)data);
+ ND_PRINT(", ");
+ data += 8;
+
+ ND_PRINT("method \"");
+ (void)nd_printn(ndo, data, length - 20, NULL);
+ ND_PRINT("\"");
+
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+print_attr_location_data(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code _U_)
+{
+ uint16_t index;
+
+ ND_TCHECK_LEN(data, length);
+ if (length < 3)
+ {
+ ND_PRINT("ERROR: length %u < 3", length);
+ return;
+ }
+
+ index = GET_BE_U_2(data);
+ data += 2;
+ ND_PRINT("index %u, location", index);
+
+ /* The Location field of the String field of the Location-Data attribute
+ * can have two completely different structures depending on the value of
+ * the Code field of a Location-Info attribute, which supposedly precedes
+ * the current attribute. Unfortunately, this choice of encoding makes it
+ * non-trivial to decode the Location field without preserving some state
+ * between the attributes.
+ */
+ hex_and_ascii_print(ndo, "\n\t ", data, length - 2);
+
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+print_basic_location_policy_rules(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code _U_)
+{
+ uint16_t flags;
+
+ ND_TCHECK_LEN(data, length);
+ if (length < 10)
+ {
+ ND_PRINT("ERROR: length %u < 10", length);
+ return;
+ }
+
+ flags = GET_BE_U_2(data);
+ data += 2;
+ ND_PRINT("flags [%s], ", bittok2str(blpr_bm, "none", flags));
+
+ ND_PRINT("retention expires ");
+ p_ntp_time(ndo, (const struct l_fixedpt *)data);
+ data += 8;
+
+ if (length > 10) {
+ ND_PRINT(", note well \"");
+ (void)nd_printn(ndo, data, length - 10, NULL);
+ ND_PRINT("\"");
+ }
+
+ return;
+
+ trunc:
+ nd_print_trunc(ndo);
+}
+
+
+/*************************************/
+/* Print an attribute of 'secs since */
+/* January 1, 1970 00:00 UTC' value */
+/* pointed by 'data' and 'length' */
+/* size. */
+/*************************************/
+/* Returns nothing. */
+/*************************************/
+static void
+print_attr_time(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code _U_)
+{
+ time_t attr_time;
+ char string[26];
+
+ if (length != 4)
+ {
+ ND_PRINT("ERROR: length %u != 4", length);
+ return;
+ }
+
+ attr_time = GET_BE_U_4(data);
+ strlcpy(string, ctime(&attr_time), sizeof(string));
+ /* Get rid of the newline */
+ string[24] = '\0';
+ ND_PRINT("%.24s", string);
+}
+
+static void
+print_attr_vector64(netdissect_options *ndo,
+ register const u_char *data, u_int length, u_short attr_code _U_)
+{
+ uint64_t data_value, i;
+ const char *sep = "";
+
+ if (length != 8)
+ {
+ ND_PRINT("ERROR: length %u != 8", length);
+ return;
+ }
+
+ ND_PRINT("[");
+
+ data_value = GET_BE_U_8(data);
+ /* Print the 64-bit field in a format similar to bittok2str(), less
+ * flagging any unknown bits. This way it should be easier to replace
+ * the custom code with a library function later.
+ */
+ for (i = 0; i < TAM_SIZE(mip6_feature_vector); i++) {
+ if (data_value & mip6_feature_vector[i].v) {
+ ND_PRINT("%s%s", sep, mip6_feature_vector[i].s);
+ sep = ", ";
+ }
+ }
+
+ ND_PRINT("]");
+}
+
+/***********************************/
+/* Print an attribute of 'strange' */
+/* data format pointed by 'data' */
+/* and 'length' size. */
+/***********************************/
+/* Returns nothing. */
+/***********************************/
+static void
+print_attr_strange(netdissect_options *ndo,
+ const u_char *data, u_int length, u_short attr_code)
+{
+ u_short len_data;
+ u_int error_cause_value;
+
+ switch(attr_code)
+ {
+ case ARAP_PASS:
+ if (length != 16)
+ {
+ ND_PRINT("ERROR: length %u != 16", length);
+ return;
+ }
+ ND_PRINT("User_challenge (");
+ len_data = 8;
+ PRINT_HEX(len_data, data);
+ ND_PRINT(") User_resp(");
+ len_data = 8;
+ PRINT_HEX(len_data, data);
+ ND_PRINT(")");
+ break;
+
+ case ARAP_FEATURES:
+ if (length != 14)
+ {
+ ND_PRINT("ERROR: length %u != 14", length);
+ return;
+ }
+ if (GET_U_1(data))
+ ND_PRINT("User can change password");
+ else
+ ND_PRINT("User cannot change password");
+ data++;
+ ND_PRINT(", Min password length: %u", GET_U_1(data));
+ data++;
+ ND_PRINT(", created at: ");
+ len_data = 4;
+ PRINT_HEX(len_data, data);
+ ND_PRINT(", expires in: ");
+ len_data = 4;
+ PRINT_HEX(len_data, data);
+ ND_PRINT(", Current Time: ");
+ len_data = 4;
+ PRINT_HEX(len_data, data);
+ break;
+
+ case ARAP_CHALLENGE_RESP:
+ if (length < 8)
+ {
+ ND_PRINT("ERROR: length %u != 8", length);
+ return;
+ }
+ len_data = 8;
+ PRINT_HEX(len_data, data);
+ break;
+
+ case ERROR_CAUSE:
+ if (length != 4)
+ {
+ ND_PRINT("Error: length %u != 4", length);
+ return;
+ }
+
+ error_cause_value = GET_BE_U_4(data);
+ ND_PRINT("Error cause %u: %s", error_cause_value, tok2str(errorcausetype, "Error-Cause %u not known", error_cause_value));
+ break;
+ }
+ return;
+}
+
+static void
+radius_attrs_print(netdissect_options *ndo,
+ const u_char *attr, u_int length)
+{
+ const struct radius_attr *rad_attr = (const struct radius_attr *)attr;
+ const char *attr_string;
+ uint8_t type, len;
+
+ while (length > 0)
+ {
+ if (length < 2)
+ goto trunc;
+ ND_TCHECK_SIZE(rad_attr);
+
+ type = GET_U_1(rad_attr->type);
+ len = GET_U_1(rad_attr->len);
+ if (type != 0 && type < TAM_SIZE(attr_type))
+ attr_string = attr_type[type].name;
+ else
+ attr_string = "Unknown";
+
+ ND_PRINT("\n\t %s Attribute (%u), length: %u",
+ attr_string,
+ type,
+ len);
+ if (len < 2)
+ {
+ ND_PRINT(" (bogus, must be >= 2)");
+ return;
+ }
+ if (len > length)
+ {
+ ND_PRINT(" (bogus, goes past end of packet)");
+ return;
+ }
+ ND_PRINT(", Value: ");
+
+ if (type < TAM_SIZE(attr_type))
+ {
+ if (len > 2)
+ {
+ if ( attr_type[type].print_func )
+ (*attr_type[type].print_func)(
+ ndo, ((const u_char *)(rad_attr+1)),
+ len - 2, type);
+ }
+ }
+ /* do we also want to see a hex dump ? */
+ if (ndo->ndo_vflag> 1)
+ print_unknown_data(ndo, (const u_char *)rad_attr+2, "\n\t ", (len)-2);
+
+ length-=(len);
+ rad_attr = (const struct radius_attr *)( ((const char *)(rad_attr))+len);
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+void
+radius_print(netdissect_options *ndo,
+ const u_char *dat, u_int length)
+{
+ const struct radius_hdr *rad;
+ u_int len, auth_idx;
+
+ ndo->ndo_protocol = "radius";
+ ND_TCHECK_LEN(dat, MIN_RADIUS_LEN);
+ rad = (const struct radius_hdr *)dat;
+ len = GET_BE_U_2(rad->len);
+
+ if (len < MIN_RADIUS_LEN)
+ {
+ nd_print_trunc(ndo);
+ return;
+ }
+
+ if (len > length)
+ len = length;
+
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT("RADIUS, %s (%u), id: 0x%02x length: %u",
+ tok2str(radius_command_values,"Unknown Command",GET_U_1(rad->code)),
+ GET_U_1(rad->code),
+ GET_U_1(rad->id),
+ len);
+ return;
+ }
+ else {
+ ND_PRINT("RADIUS, length: %u\n\t%s (%u), id: 0x%02x, Authenticator: ",
+ len,
+ tok2str(radius_command_values,"Unknown Command",GET_U_1(rad->code)),
+ GET_U_1(rad->code),
+ GET_U_1(rad->id));
+
+ for(auth_idx=0; auth_idx < 16; auth_idx++)
+ ND_PRINT("%02x", rad->auth[auth_idx]);
+ }
+
+ if (len > MIN_RADIUS_LEN)
+ radius_attrs_print(ndo, dat + MIN_RADIUS_LEN, len - MIN_RADIUS_LEN);
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-raw.c b/print-raw.c
new file mode 100644
index 0000000..9c6558f
--- /dev/null
+++ b/print-raw.c
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Raw IP printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+
+/*
+ * The DLT_RAW packet has no header. It contains a raw IP packet.
+ */
+
+void
+raw_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ ndo->ndo_protocol = "raw";
+ ndo->ndo_ll_hdr_len += 0;
+ if (ndo->ndo_eflag)
+ ND_PRINT("ip: ");
+
+ ipN_print(ndo, p, h->len);
+}
diff --git a/print-realtek.c b/print-realtek.c
new file mode 100644
index 0000000..3105bf7
--- /dev/null
+++ b/print-realtek.c
@@ -0,0 +1,248 @@
+/*
+ * Copyright (c) 2007 - Andrey "nording" Chernyak <andrew@nording.ru>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Format and print Realtek Remote Control Protocol (RRCP), Realtek
+ * Loop Detection Protocol (RLDP), and Realtek Echo Protocol (REP) packets,
+ * as well as tag formats used by some Realtek switch chips to supply
+ * tag information to a host CPU for a switch.
+ */
+
+/* \summary: printer for various Realtek protocols */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#define RTL_PROTOCOL_OFFSET 0 /* Protocol and possibly other data - 1 byte */
+
+#define RTL_PROTOCOL_RRCP 0x01 /* RRCP */
+#define RTL_PROTOCOL_REP 0x02 /* REP */
+#define RTL_PROTOCOL_RLDP 0x03 /* RLDP */
+#define RTL_PROTOCOL_RLDP2 0x23 /* also RLDP */
+#define RTL_PROTOCOL_XXX_DSA 0x04 /* DSA protocol for some chip(s) */
+
+/*
+ * Values for the upper 4 bits of the protocol field, for
+ * protocols where the lower 4 bits contain protocol data.
+ *
+ * See section 8.10 "CPU Tag Function" of
+ *
+ * http://realtek.info/pdf/rtl8306sd%28m%29_datasheet_1.1.pdf
+ *
+ * for the RTL8306 DSA protocol tag format.
+ */
+#define RTL_PROTOCOL_8306_DSA 0x90 /* RTL8306 DSA protocol */
+#define RTL_PROTOCOL_8366RB_DSA 0xA0 /* RTL8366RB DSA protocol */
+
+#define RRCP_OPCODE_ISREPLY_OFFSET 1 /* opcode and isreply flag - 1 byte */
+
+#define RRCP_OPCODE_MASK 0x7F /* 0x00 = hello, 0x01 = get, 0x02 = set */
+#define RRCP_ISREPLY 0x80 /* 0 = request to switch, 0x80 = reply from switch */
+
+#define RRCP_OPCODE_HELLO 0x00
+#define RRCP_OPCODE_GET_CONFIGURATION 0x01
+#define RRCP_OPCODE_SET_CONFIGURATION 0x02
+
+#define RRCP_AUTHKEY_OFFSET 2 /* authorization key - 2 bytes, 0x2379 by default */
+
+/* most packets */
+#define RRCP_REG_ADDR_OFFSET 4 /* register address - 2 bytes */
+#define RRCP_REG_DATA_OFFSET 6 /* register data - 4 bytes */
+#define RRCP_COOKIE1_OFFSET 10 /* 4 bytes */
+#define RRCP_COOKIE2_OFFSET 14 /* 4 bytes */
+
+/* hello reply packets */
+#define RRCP_DOWNLINK_PORT_OFFSET 4 /* 1 byte */
+#define RRCP_UPLINK_PORT_OFFSET 5 /* 1 byte */
+#define RRCP_UPLINK_MAC_OFFSET 6 /* 6 byte MAC address */
+#define RRCP_CHIP_ID_OFFSET 12 /* 2 bytes */
+#define RRCP_VENDOR_ID_OFFSET 14 /* 4 bytes */
+
+static const struct tok opcode_values[] = {
+ { RRCP_OPCODE_HELLO, "hello" },
+ { RRCP_OPCODE_GET_CONFIGURATION, "get" },
+ { RRCP_OPCODE_SET_CONFIGURATION, "set" },
+ { 0, NULL }
+};
+
+/*
+ * Print RRCP packets.
+ *
+ * See, for example, section 8.20 "Realtek Remote Control Protocol" of
+ *
+ * http://realtek.info/pdf/rtl8324.pdf
+ *
+ * and section 7.22 "Realtek Remote Control Protocol" of
+ *
+ * http://realtek.info/pdf/rtl8326.pdf
+ *
+ * and this page on the OpenRRCP Wiki:
+ *
+ * http://openrrcp.org.ru/wiki/rrcp_protocol
+ *
+ * for information on RRCP.
+ */
+static void
+rrcp_print(netdissect_options *ndo,
+ const u_char *cp)
+{
+ uint8_t rrcp_opcode;
+
+ ndo->ndo_protocol = "rrcp";
+ rrcp_opcode = GET_U_1((cp + RRCP_OPCODE_ISREPLY_OFFSET)) & RRCP_OPCODE_MASK;
+ ND_PRINT("RRCP %s: %s",
+ ((GET_U_1(cp + RRCP_OPCODE_ISREPLY_OFFSET)) & RRCP_ISREPLY) ? "reply" : "query",
+ tok2str(opcode_values,"unknown opcode (0x%02x)",rrcp_opcode));
+ if (rrcp_opcode==RRCP_OPCODE_GET_CONFIGURATION ||
+ rrcp_opcode==RRCP_OPCODE_SET_CONFIGURATION){
+ ND_PRINT(" addr=0x%04x, data=0x%08x",
+ GET_LE_U_2(cp + RRCP_REG_ADDR_OFFSET),
+ GET_LE_U_4(cp + RRCP_REG_DATA_OFFSET));
+ }
+ ND_PRINT(", auth=0x%04x",
+ GET_BE_U_2(cp + RRCP_AUTHKEY_OFFSET));
+ if (rrcp_opcode==RRCP_OPCODE_HELLO &&
+ ((GET_U_1(cp + RRCP_OPCODE_ISREPLY_OFFSET)) & RRCP_ISREPLY)){
+ ND_PRINT(" downlink_port=%u, uplink_port=%u, uplink_mac=%s, vendor_id=%08x ,chip_id=%04x ",
+ GET_U_1(cp + RRCP_DOWNLINK_PORT_OFFSET),
+ GET_U_1(cp + RRCP_UPLINK_PORT_OFFSET),
+ GET_ETHERADDR_STRING(cp + RRCP_UPLINK_MAC_OFFSET),
+ GET_BE_U_4(cp + RRCP_VENDOR_ID_OFFSET),
+ GET_BE_U_2(cp + RRCP_CHIP_ID_OFFSET));
+ }else if (rrcp_opcode==RRCP_OPCODE_GET_CONFIGURATION ||
+ rrcp_opcode==RRCP_OPCODE_SET_CONFIGURATION){
+ ND_PRINT(", cookie=0x%08x%08x ",
+ GET_BE_U_4(cp + RRCP_COOKIE2_OFFSET),
+ GET_BE_U_4(cp + RRCP_COOKIE1_OFFSET));
+ }
+}
+
+/*
+ * Print Realtek packets.
+ *
+ * See, for example, section 8.22 "Realtek Echo Protocol" of
+ *
+ * http://realtek.info/pdf/rtl8324.pdf
+ *
+ * and section 7.24 "Realtek Echo Protocol" of
+ *
+ * http://realtek.info/pdf/rtl8326.pdf
+ *
+ * for information on REP.
+ *
+ * See section 8.21 "Network Loop Connection Fault Detection" of
+ *
+ * http://realtek.info/pdf/rtl8324.pdf
+ *
+ * and section 7.23 "Network Loop Connection Fault Detection" of
+ *
+ * http://realtek.info/pdf/rtl8326.pdf
+ *
+ * for information on RLDP.
+ *
+ * See also section 7.3.8 "Loop Detection" of
+ *
+ * http://www.ibselectronics.com/ibsstore/datasheet/RTL8306E-CG.pdf
+ *
+ * (revision 1.1 of the RTL8306E-CG datasheet), which describes a loop
+ * detection protocol for which the payload has a 16-bit (presumably
+ * big-endian) field containing the value 0x0300, followed by what is
+ * presumably a 16-bit big-endian field the upper 12 bits of which are 0
+ * and the lower 4 bits of which are a TTL value, followed by zeroes to
+ * pad the packet out to the minimum Ethernet packet size.
+ *
+ * See also section 7.3.13 "Loop Detection" of
+ *
+ * http://realtek.info/pdf/rtl8305sb.pdf
+ *
+ * (revision 1.3 of the RTL8305SB datasheet), which describes a similar
+ * loop detection protocol that lacks the TTL field - all the bytes
+ * after 0x0300 are zero.
+ *
+ * See also section 7.3.7 "Loop Detection" of
+ *
+ * https://datasheet.lcsc.com/lcsc/1810221720_Realtek-Semicon-RTL8305NB-CG_C52146.pdf
+ *
+ * (revision 1.0 of the RTL8305NB-CT datasheet), which describes a loop
+ * detection protocol similar to the one from the RTL8306E-CG datasheet,
+ * except that the first value is 0x2300, not 0x0300.
+ *
+ * And, on top of all that, I've seen packets where the first octet of
+ * the packet is 0x23, and that's followed by 6 unknown octets (a MAC
+ * address of some sort? It differs from packet to packet in a capture),
+ * followed by the MAC address that appears in the source address in the
+ * Ethernet header (possibly the originator, in case the packet is forwarded,
+ * in which case the forwarded packets won't have the source address from
+ * the Ethernet header there), followed by unknown stuff (0x0d followed by
+ * zeroes for all such packets in one capture, 0x01 followed by zeroes for
+ * all such packets in another capture, 0x07 followed by 0x20's for all
+ * such packets in yet another capture). The OpenRRCP issue at
+ * https://github.com/illarionov/OpenRRCP/issues/3 shows a capture
+ * similar to the last of those, but with 0x02 instead of 0x07. Or is that
+ * just crap in the buffer in which the chip constructed the packet, left
+ * over from something else?
+ */
+void
+rtl_print(netdissect_options *ndo,
+ const u_char *cp,
+ u_int length _U_,
+ const struct lladdr_info *src,
+ const struct lladdr_info *dst)
+{
+ uint8_t rtl_proto;
+
+ ndo->ndo_protocol = "rtl";
+
+ if (src != NULL && dst != NULL) {
+ ND_PRINT("%s > %s, ",
+ (src->addr_string)(ndo, src->addr),
+ (dst->addr_string)(ndo, dst->addr));
+ }
+
+ rtl_proto = GET_U_1(cp + RTL_PROTOCOL_OFFSET);
+
+ if (rtl_proto == RTL_PROTOCOL_RRCP)
+ rrcp_print(ndo, cp);
+ else if (rtl_proto == RTL_PROTOCOL_REP) {
+ /*
+ * REP packets have no payload.
+ */
+ ND_PRINT("REP");
+ } else if (rtl_proto == RTL_PROTOCOL_RLDP ||
+ rtl_proto == RTL_PROTOCOL_RLDP2) {
+ /*
+ * RLDP packets have no payload.
+ * (XXX - except when they do? See above.)
+ */
+ ND_PRINT("RLDP");
+ } else if (rtl_proto == RTL_PROTOCOL_XXX_DSA)
+ ND_PRINT("Realtek 8-byte DSA tag");
+ else if ((rtl_proto & 0xF0) == RTL_PROTOCOL_8306_DSA)
+ ND_PRINT("Realtek RTL8306 4-byte DSA tag");
+ else if ((rtl_proto & 0xF0) == RTL_PROTOCOL_8366RB_DSA)
+ ND_PRINT("Realtek RTL8366RB 4-byte DSA tag");
+ else
+ ND_PRINT("Realtek unknown type 0x%02x", rtl_proto);
+}
diff --git a/print-resp.c b/print-resp.c
new file mode 100644
index 0000000..37a386e
--- /dev/null
+++ b/print-resp.c
@@ -0,0 +1,534 @@
+/*
+ * Copyright (c) 2015 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Initial contribution by Andrew Darqui (andrew.darqui@gmail.com).
+ */
+
+/* \summary: REdis Serialization Protocol (RESP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include "netdissect.h"
+#include <limits.h>
+
+#include "extract.h"
+
+
+/*
+ * For information regarding RESP, see: https://redis.io/topics/protocol
+ */
+
+#define RESP_SIMPLE_STRING '+'
+#define RESP_ERROR '-'
+#define RESP_INTEGER ':'
+#define RESP_BULK_STRING '$'
+#define RESP_ARRAY '*'
+
+#define resp_print_empty(ndo) ND_PRINT(" empty")
+#define resp_print_null(ndo) ND_PRINT(" null")
+#define resp_print_length_too_large(ndo) ND_PRINT(" length too large")
+#define resp_print_length_negative(ndo) ND_PRINT(" length negative and not -1")
+#define resp_print_invalid(ndo) ND_PRINT(" invalid")
+
+static int resp_parse(netdissect_options *, const u_char *, int);
+static int resp_print_string_error_integer(netdissect_options *, const u_char *, int);
+static int resp_print_simple_string(netdissect_options *, const u_char *, int);
+static int resp_print_integer(netdissect_options *, const u_char *, int);
+static int resp_print_error(netdissect_options *, const u_char *, int);
+static int resp_print_bulk_string(netdissect_options *, const u_char *, int);
+static int resp_print_bulk_array(netdissect_options *, const u_char *, int);
+static int resp_print_inline(netdissect_options *, const u_char *, int);
+static int resp_get_length(netdissect_options *, const u_char *, int, const u_char **);
+
+#define LCHECK2(_tot_len, _len) \
+ { \
+ if (_tot_len < _len) \
+ goto trunc; \
+ }
+
+#define LCHECK(_tot_len) LCHECK2(_tot_len, 1)
+
+/*
+ * FIND_CRLF:
+ * Attempts to move our 'ptr' forward until a \r\n is found,
+ * while also making sure we don't exceed the buffer '_len'
+ * or go past the end of the captured data.
+ * If we exceed or go past the end of the captured data,
+ * jump to trunc.
+ */
+#define FIND_CRLF(_ptr, _len) \
+ for (;;) { \
+ LCHECK2(_len, 2); \
+ ND_TCHECK_2(_ptr); \
+ if (GET_U_1(_ptr) == '\r' && \
+ GET_U_1(_ptr+1) == '\n') \
+ break; \
+ _ptr++; \
+ _len--; \
+ }
+
+/*
+ * CONSUME_CRLF
+ * Consume a CRLF that we've just found.
+ */
+#define CONSUME_CRLF(_ptr, _len) \
+ _ptr += 2; \
+ _len -= 2;
+
+/*
+ * FIND_CR_OR_LF
+ * Attempts to move our '_ptr' forward until a \r or \n is found,
+ * while also making sure we don't exceed the buffer '_len'
+ * or go past the end of the captured data.
+ * If we exceed or go past the end of the captured data,
+ * jump to trunc.
+ */
+#define FIND_CR_OR_LF(_ptr, _len) \
+ for (;;) { \
+ LCHECK(_len); \
+ if (GET_U_1(_ptr) == '\r' || \
+ GET_U_1(_ptr) == '\n') \
+ break; \
+ _ptr++; \
+ _len--; \
+ }
+
+/*
+ * CONSUME_CR_OR_LF
+ * Consume all consecutive \r and \n bytes.
+ * If we exceed '_len' or go past the end of the captured data,
+ * jump to trunc.
+ */
+#define CONSUME_CR_OR_LF(_ptr, _len) \
+ { \
+ int _found_cr_or_lf = 0; \
+ for (;;) { \
+ /* \
+ * Have we hit the end of data? \
+ */ \
+ if (_len == 0 || !ND_TTEST_1(_ptr)) {\
+ /* \
+ * Yes. Have we seen a \r \
+ * or \n? \
+ */ \
+ if (_found_cr_or_lf) { \
+ /* \
+ * Yes. Just stop. \
+ */ \
+ break; \
+ } \
+ /* \
+ * No. We ran out of packet. \
+ */ \
+ goto trunc; \
+ } \
+ if (GET_U_1(_ptr) != '\r' && \
+ GET_U_1(_ptr) != '\n') \
+ break; \
+ _found_cr_or_lf = 1; \
+ _ptr++; \
+ _len--; \
+ } \
+ }
+
+/*
+ * SKIP_OPCODE
+ * Skip over the opcode character.
+ * The opcode has already been fetched, so we know it's there, and don't
+ * need to do any checks.
+ */
+#define SKIP_OPCODE(_ptr, _tot_len) \
+ _ptr++; \
+ _tot_len--;
+
+/*
+ * GET_LENGTH
+ * Get a bulk string or array length.
+ */
+#define GET_LENGTH(_ndo, _tot_len, _ptr, _len) \
+ { \
+ const u_char *_endp; \
+ _len = resp_get_length(_ndo, _ptr, _tot_len, &_endp); \
+ _tot_len -= (_endp - _ptr); \
+ _ptr = _endp; \
+ }
+
+/*
+ * TEST_RET_LEN
+ * If ret_len is < 0, jump to the trunc tag which returns (-1)
+ * and 'bubbles up' to printing tstr. Otherwise, return ret_len.
+ */
+#define TEST_RET_LEN(rl) \
+ if (rl < 0) { goto trunc; } else { return rl; }
+
+/*
+ * TEST_RET_LEN_NORETURN
+ * If ret_len is < 0, jump to the trunc tag which returns (-1)
+ * and 'bubbles up' to printing tstr. Otherwise, continue onward.
+ */
+#define TEST_RET_LEN_NORETURN(rl) \
+ if (rl < 0) { goto trunc; }
+
+/*
+ * RESP_PRINT_SEGMENT
+ * Prints a segment in the form of: ' "<stuff>"\n"
+ * Assumes the data has already been verified as present.
+ */
+#define RESP_PRINT_SEGMENT(_ndo, _bp, _len) \
+ ND_PRINT(" \""); \
+ if (nd_printn(_ndo, _bp, _len, _ndo->ndo_snapend)) \
+ goto trunc; \
+ fn_print_char(_ndo, '"');
+
+void
+resp_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ int ret_len = 0;
+
+ ndo->ndo_protocol = "resp";
+
+ ND_PRINT(": RESP");
+ while (length > 0) {
+ /*
+ * This block supports redis pipelining.
+ * For example, multiple operations can be pipelined within the same string:
+ * "*2\r\n\$4\r\nINCR\r\n\$1\r\nz\r\n*2\r\n\$4\r\nINCR\r\n\$1\r\nz\r\n*2\r\n\$4\r\nINCR\r\n\$1\r\nz\r\n"
+ * or
+ * "PING\r\nPING\r\nPING\r\n"
+ * In order to handle this case, we must try and parse 'bp' until
+ * 'length' bytes have been processed or we reach a trunc condition.
+ */
+ ret_len = resp_parse(ndo, bp, length);
+ TEST_RET_LEN_NORETURN(ret_len);
+ bp += ret_len;
+ length -= ret_len;
+ }
+
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static int
+resp_parse(netdissect_options *ndo, const u_char *bp, int length)
+{
+ u_char op;
+ int ret_len;
+
+ LCHECK2(length, 1);
+ op = GET_U_1(bp);
+
+ /* bp now points to the op, so these routines must skip it */
+ switch(op) {
+ case RESP_SIMPLE_STRING: ret_len = resp_print_simple_string(ndo, bp, length); break;
+ case RESP_INTEGER: ret_len = resp_print_integer(ndo, bp, length); break;
+ case RESP_ERROR: ret_len = resp_print_error(ndo, bp, length); break;
+ case RESP_BULK_STRING: ret_len = resp_print_bulk_string(ndo, bp, length); break;
+ case RESP_ARRAY: ret_len = resp_print_bulk_array(ndo, bp, length); break;
+ default: ret_len = resp_print_inline(ndo, bp, length); break;
+ }
+
+ /*
+ * This gives up with a "truncated" indicator for all errors,
+ * including invalid packet errors; that's what we want, as
+ * we have to give up on further parsing in that case.
+ */
+ TEST_RET_LEN(ret_len);
+
+trunc:
+ return (-1);
+}
+
+static int
+resp_print_simple_string(netdissect_options *ndo, const u_char *bp, int length) {
+ return resp_print_string_error_integer(ndo, bp, length);
+}
+
+static int
+resp_print_integer(netdissect_options *ndo, const u_char *bp, int length) {
+ return resp_print_string_error_integer(ndo, bp, length);
+}
+
+static int
+resp_print_error(netdissect_options *ndo, const u_char *bp, int length) {
+ return resp_print_string_error_integer(ndo, bp, length);
+}
+
+static int
+resp_print_string_error_integer(netdissect_options *ndo, const u_char *bp, int length) {
+ int length_cur = length, len, ret_len;
+ const u_char *bp_ptr;
+
+ /* bp points to the op; skip it */
+ SKIP_OPCODE(bp, length_cur);
+ bp_ptr = bp;
+
+ /*
+ * bp now prints past the (+-;) opcode, so it's pointing to the first
+ * character of the string (which could be numeric).
+ * +OK\r\n
+ * -ERR ...\r\n
+ * :02912309\r\n
+ *
+ * Find the \r\n with FIND_CRLF().
+ */
+ FIND_CRLF(bp_ptr, length_cur);
+
+ /*
+ * bp_ptr points to the \r\n, so bp_ptr - bp is the length of text
+ * preceding the \r\n. That includes the opcode, so don't print
+ * that.
+ */
+ len = ND_BYTES_BETWEEN(bp_ptr, bp);
+ RESP_PRINT_SEGMENT(ndo, bp, len);
+ ret_len = 1 /*<opcode>*/ + len /*<string>*/ + 2 /*<CRLF>*/;
+
+ TEST_RET_LEN(ret_len);
+
+trunc:
+ return (-1);
+}
+
+static int
+resp_print_bulk_string(netdissect_options *ndo, const u_char *bp, int length) {
+ int length_cur = length, string_len;
+
+ /* bp points to the op; skip it */
+ SKIP_OPCODE(bp, length_cur);
+
+ /* <length>\r\n */
+ GET_LENGTH(ndo, length_cur, bp, string_len);
+
+ if (string_len >= 0) {
+ /* Byte string of length string_len, starting at bp */
+ if (string_len == 0)
+ resp_print_empty(ndo);
+ else {
+ LCHECK2(length_cur, string_len);
+ ND_TCHECK_LEN(bp, string_len);
+ RESP_PRINT_SEGMENT(ndo, bp, string_len);
+ bp += string_len;
+ length_cur -= string_len;
+ }
+
+ /*
+ * Find the \r\n at the end of the string and skip past it.
+ * XXX - report an error if the \r\n isn't immediately after
+ * the item?
+ */
+ FIND_CRLF(bp, length_cur);
+ CONSUME_CRLF(bp, length_cur);
+ } else {
+ /* null, truncated, or invalid for some reason */
+ switch(string_len) {
+ case (-1): resp_print_null(ndo); break;
+ case (-2): goto trunc;
+ case (-3): resp_print_length_too_large(ndo); break;
+ case (-4): resp_print_length_negative(ndo); break;
+ default: resp_print_invalid(ndo); break;
+ }
+ }
+
+ return (length - length_cur);
+
+trunc:
+ return (-1);
+}
+
+static int
+resp_print_bulk_array(netdissect_options *ndo, const u_char *bp, int length) {
+ u_int length_cur = length;
+ int array_len, i, ret_len;
+
+ /* bp points to the op; skip it */
+ SKIP_OPCODE(bp, length_cur);
+
+ /* <array_length>\r\n */
+ GET_LENGTH(ndo, length_cur, bp, array_len);
+
+ if (array_len > 0) {
+ /* non empty array */
+ for (i = 0; i < array_len; i++) {
+ ret_len = resp_parse(ndo, bp, length_cur);
+
+ TEST_RET_LEN_NORETURN(ret_len);
+
+ bp += ret_len;
+ length_cur -= ret_len;
+ }
+ } else {
+ /* empty, null, truncated, or invalid */
+ switch(array_len) {
+ case 0: resp_print_empty(ndo); break;
+ case (-1): resp_print_null(ndo); break;
+ case (-2): goto trunc;
+ case (-3): resp_print_length_too_large(ndo); break;
+ case (-4): resp_print_length_negative(ndo); break;
+ default: resp_print_invalid(ndo); break;
+ }
+ }
+
+ return (length - length_cur);
+
+trunc:
+ return (-1);
+}
+
+static int
+resp_print_inline(netdissect_options *ndo, const u_char *bp, int length) {
+ int length_cur = length;
+ int len;
+ const u_char *bp_ptr;
+
+ /*
+ * Inline commands are simply 'strings' followed by \r or \n or both.
+ * Redis will do its best to split/parse these strings.
+ * This feature of redis is implemented to support the ability of
+ * command parsing from telnet/nc sessions etc.
+ *
+ * <string><\r||\n||\r\n...>
+ */
+
+ /*
+ * Skip forward past any leading \r, \n, or \r\n.
+ */
+ CONSUME_CR_OR_LF(bp, length_cur);
+ bp_ptr = bp;
+
+ /*
+ * Scan forward looking for \r or \n.
+ */
+ FIND_CR_OR_LF(bp_ptr, length_cur);
+
+ /*
+ * Found it; bp_ptr points to the \r or \n, so bp_ptr - bp is the
+ * Length of the line text that precedes it. Print it.
+ */
+ len = ND_BYTES_BETWEEN(bp_ptr, bp);
+ RESP_PRINT_SEGMENT(ndo, bp, len);
+
+ /*
+ * Skip forward past the \r, \n, or \r\n.
+ */
+ CONSUME_CR_OR_LF(bp_ptr, length_cur);
+
+ /*
+ * Return the number of bytes we processed.
+ */
+ return (length - length_cur);
+
+trunc:
+ return (-1);
+}
+
+static int
+resp_get_length(netdissect_options *ndo, const u_char *bp, int len, const u_char **endp)
+{
+ int result;
+ u_char c;
+ int saw_digit;
+ int neg;
+ int too_large;
+
+ if (len == 0)
+ goto trunc;
+ too_large = 0;
+ neg = 0;
+ if (GET_U_1(bp) == '-') {
+ neg = 1;
+ bp++;
+ len--;
+ }
+ result = 0;
+ saw_digit = 0;
+
+ for (;;) {
+ if (len == 0)
+ goto trunc;
+ c = GET_U_1(bp);
+ if (!(c >= '0' && c <= '9')) {
+ if (!saw_digit) {
+ bp++;
+ goto invalid;
+ }
+ break;
+ }
+ c -= '0';
+ if (result > (INT_MAX / 10)) {
+ /* This will overflow an int when we multiply it by 10. */
+ too_large = 1;
+ } else {
+ result *= 10;
+ if (result == ((INT_MAX / 10) * 10) && c > (INT_MAX % 10)) {
+ /* This will overflow an int when we add c */
+ too_large = 1;
+ } else
+ result += c;
+ }
+ bp++;
+ len--;
+ saw_digit = 1;
+ }
+
+ /*
+ * OK, we found a non-digit character. It should be a \r, followed
+ * by a \n.
+ */
+ if (GET_U_1(bp) != '\r') {
+ bp++;
+ goto invalid;
+ }
+ bp++;
+ len--;
+ if (len == 0)
+ goto trunc;
+ if (GET_U_1(bp) != '\n') {
+ bp++;
+ goto invalid;
+ }
+ bp++;
+ len--;
+ *endp = bp;
+ if (neg) {
+ /* -1 means "null", anything else is invalid */
+ if (too_large || result != 1)
+ return (-4);
+ result = -1;
+ }
+ return (too_large ? -3 : result);
+
+trunc:
+ *endp = bp;
+ return (-2);
+
+invalid:
+ *endp = bp;
+ return (-5);
+}
diff --git a/print-rip.c b/print-rip.c
new file mode 100644
index 0000000..fca534f
--- /dev/null
+++ b/print-rip.c
@@ -0,0 +1,422 @@
+/*
+ * Copyright (c) 1989, 1990, 1991, 1993, 1994, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Routing Information Protocol (RIP) printer */
+
+/* specification: RFC 1058, RFC 2453, RFC 4822 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "af.h"
+
+
+/*
+ * RFC 1058 and RFC 2453 header of packet.
+ *
+ * 0 1 2 3 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Command (1) | Version (1) | unused |
+ * +---------------+---------------+-------------------------------+
+ */
+struct rip {
+ nd_uint8_t rip_cmd; /* request/response */
+ nd_uint8_t rip_vers; /* protocol version # */
+ nd_byte unused[2]; /* unused */
+};
+
+#define RIPCMD_REQUEST 1 /* want info */
+#define RIPCMD_RESPONSE 2 /* responding to request */
+#define RIPCMD_TRACEON 3 /* turn tracing on */
+#define RIPCMD_TRACEOFF 4 /* turn it off */
+#define RIPCMD_POLL 5 /* want info from everybody */
+#define RIPCMD_POLLENTRY 6 /* poll for entry */
+
+static const struct tok rip_cmd_values[] = {
+ { RIPCMD_REQUEST, "Request" },
+ { RIPCMD_RESPONSE, "Response" },
+ { RIPCMD_TRACEON, "Trace on" },
+ { RIPCMD_TRACEOFF, "Trace off" },
+ { RIPCMD_POLL, "Poll" },
+ { RIPCMD_POLLENTRY, "Poll Entry" },
+ { 0, NULL}
+};
+
+#define RIP_AUTHLEN 16
+#define RIP_ROUTELEN 20
+
+/*
+ * First 4 bytes of all RIPv1/RIPv2 entries.
+ */
+struct rip_entry_header {
+ nd_uint16_t rip_family;
+ nd_uint16_t rip_tag;
+};
+
+/*
+ * RFC 1058 entry.
+ *
+ * 0 1 2 3 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Address Family Identifier (2) | must be zero (2) |
+ * +-------------------------------+-------------------------------+
+ * | IP Address (4) |
+ * +---------------------------------------------------------------+
+ * | must be zero (4) |
+ * +---------------------------------------------------------------+
+ * | must be zero (4) |
+ * +---------------------------------------------------------------+
+ * | Metric (4) |
+ * +---------------------------------------------------------------+
+ */
+struct rip_netinfo_v1 {
+ nd_uint16_t rip_family;
+ nd_byte rip_mbz1[2];
+ nd_ipv4 rip_dest;
+ nd_byte rip_mbz2[4];
+ nd_byte rip_mbz3[4];
+ nd_uint32_t rip_metric; /* cost of route */
+};
+
+
+/*
+ * RFC 2453 route entry
+ *
+ * 0 1 2 3 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Address Family Identifier (2) | Route Tag (2) |
+ * +-------------------------------+-------------------------------+
+ * | IP Address (4) |
+ * +---------------------------------------------------------------+
+ * | Subnet Mask (4) |
+ * +---------------------------------------------------------------+
+ * | Next Hop (4) |
+ * +---------------------------------------------------------------+
+ * | Metric (4) |
+ * +---------------------------------------------------------------+
+ *
+ */
+
+struct rip_netinfo_v2 {
+ nd_uint16_t rip_family;
+ nd_uint16_t rip_tag;
+ nd_ipv4 rip_dest;
+ nd_uint32_t rip_dest_mask;
+ nd_ipv4 rip_router;
+ nd_uint32_t rip_metric; /* cost of route */
+};
+
+/*
+ * RFC 2453 authentication entry
+ *
+ * 0 1 2 3 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | 0xFFFF | Authentication Type (2) |
+ * +-------------------------------+-------------------------------+
+ * - Authentication (16) -
+ * +---------------------------------------------------------------+
+ */
+
+struct rip_auth_v2 {
+ nd_uint16_t rip_family;
+ nd_uint16_t rip_tag;
+ nd_byte rip_auth[16];
+};
+
+/*
+ * RFC 4822 Cryptographic Authentication entry.
+ *
+ * 0 1 2 3 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | RIPv2 Packet Length | Key ID | Auth Data Len |
+ * +---------------+---------------+---------------+---------------+
+ * | Sequence Number (non-decreasing) |
+ * +---------------+---------------+---------------+---------------+
+ * | reserved must be zero |
+ * +---------------+---------------+---------------+---------------+
+ * | reserved must be zero |
+ * +---------------+---------------+---------------+---------------+
+ */
+struct rip_auth_crypto_v2 {
+ nd_uint16_t rip_packet_len;
+ nd_uint8_t rip_key_id;
+ nd_uint8_t rip_auth_data_len;
+ nd_uint32_t rip_seq_num;
+ nd_byte rip_mbz1[4];
+ nd_byte rip_mbz2[4];
+};
+
+static unsigned
+rip_entry_print_v1(netdissect_options *ndo, const u_char *p,
+ unsigned remaining)
+{
+ const struct rip_entry_header *eh = (const struct rip_entry_header *)p;
+ u_short family;
+ const struct rip_netinfo_v1 *ni = (const struct rip_netinfo_v1 *)p;
+
+ /* RFC 1058 */
+ if (remaining < RIP_ROUTELEN)
+ return (0);
+ ND_TCHECK_SIZE(ni);
+ family = GET_BE_U_2(ni->rip_family);
+ if (family != BSD_AFNUM_INET && family != 0) {
+ ND_PRINT("\n\t AFI %s, ", tok2str(bsd_af_values, "Unknown (%u)", family));
+ print_unknown_data(ndo, p + sizeof(*eh), "\n\t ", RIP_ROUTELEN - sizeof(*eh));
+ return (RIP_ROUTELEN);
+ }
+ if (GET_BE_U_2(ni->rip_mbz1) ||
+ GET_BE_U_4(ni->rip_mbz2) ||
+ GET_BE_U_4(ni->rip_mbz3)) {
+ /* MBZ fields not zero */
+ print_unknown_data(ndo, p, "\n\t ", RIP_ROUTELEN);
+ return (RIP_ROUTELEN);
+ }
+ if (family == 0) {
+ ND_PRINT("\n\t AFI 0, %s, metric: %u",
+ GET_IPADDR_STRING(ni->rip_dest),
+ GET_BE_U_4(ni->rip_metric));
+ return (RIP_ROUTELEN);
+ } /* BSD_AFNUM_INET */
+ ND_PRINT("\n\t %s, metric: %u",
+ GET_IPADDR_STRING(ni->rip_dest),
+ GET_BE_U_4(ni->rip_metric));
+ return (RIP_ROUTELEN);
+trunc:
+ return 0;
+}
+
+static unsigned
+rip_entry_print_v2(netdissect_options *ndo, const u_char *p,
+ unsigned remaining)
+{
+ const struct rip_entry_header *eh = (const struct rip_entry_header *)p;
+ u_short family;
+ const struct rip_netinfo_v2 *ni;
+
+ if (remaining < sizeof(*eh))
+ return (0);
+ ND_TCHECK_SIZE(eh);
+ family = GET_BE_U_2(eh->rip_family);
+ if (family == 0xFFFF) { /* variable-sized authentication structures */
+ uint16_t auth_type = GET_BE_U_2(eh->rip_tag);
+
+ p += sizeof(*eh);
+ remaining -= sizeof(*eh);
+ if (auth_type == 2) {
+ ND_PRINT("\n\t Simple Text Authentication data: ");
+ nd_printjnp(ndo, p, RIP_AUTHLEN);
+ } else if (auth_type == 3) {
+ const struct rip_auth_crypto_v2 *ch;
+
+ ch = (const struct rip_auth_crypto_v2 *)p;
+ ND_TCHECK_SIZE(ch);
+ if (remaining < sizeof(*ch))
+ return (0);
+ ND_PRINT("\n\t Auth header:");
+ ND_PRINT(" Packet Len %u,",
+ GET_BE_U_2(ch->rip_packet_len));
+ ND_PRINT(" Key-ID %u,", GET_U_1(ch->rip_key_id));
+ ND_PRINT(" Auth Data Len %u,",
+ GET_U_1(ch->rip_auth_data_len));
+ ND_PRINT(" SeqNo %u,", GET_BE_U_4(ch->rip_seq_num));
+ ND_PRINT(" MBZ %u,", GET_BE_U_4(ch->rip_mbz1));
+ ND_PRINT(" MBZ %u", GET_BE_U_4(ch->rip_mbz2));
+ } else if (auth_type == 1) {
+ ND_PRINT("\n\t Auth trailer:");
+ print_unknown_data(ndo, p, "\n\t ", remaining);
+ return (sizeof(*eh) + remaining); /* AT spans till the packet end */
+ } else {
+ ND_PRINT("\n\t Unknown (%u) Authentication data:",
+ auth_type);
+ print_unknown_data(ndo, p, "\n\t ", remaining);
+ return (sizeof(*eh) + remaining); /* we don't know how long this is, so we go to the packet end */
+ }
+ } else if (family != BSD_AFNUM_INET && family != 0) {
+ ND_PRINT("\n\t AFI %s", tok2str(bsd_af_values, "Unknown (%u)", family));
+ print_unknown_data(ndo, p + sizeof(*eh), "\n\t ", RIP_ROUTELEN - sizeof(*eh));
+ } else { /* BSD_AFNUM_INET or AFI 0 */
+ ni = (const struct rip_netinfo_v2 *)p;
+ ND_TCHECK_SIZE(ni);
+ if (remaining < sizeof(*ni))
+ return (0);
+ ND_PRINT("\n\t AFI %s, %15s/%-2d, tag 0x%04x, metric: %u, next-hop: ",
+ tok2str(bsd_af_values, "%u", family),
+ GET_IPADDR_STRING(ni->rip_dest),
+ mask2plen(GET_BE_U_4(ni->rip_dest_mask)),
+ GET_BE_U_2(ni->rip_tag),
+ GET_BE_U_4(ni->rip_metric));
+ if (GET_BE_U_4(ni->rip_router))
+ ND_PRINT("%s", GET_IPADDR_STRING(ni->rip_router));
+ else
+ ND_PRINT("self");
+ }
+ return (RIP_ROUTELEN);
+trunc:
+ return 0;
+}
+
+void
+rip_print(netdissect_options *ndo,
+ const u_char *dat, u_int length)
+{
+ const struct rip *rp;
+ uint8_t vers, cmd;
+ const u_char *p;
+ u_int len, routecount;
+ unsigned entry_size;
+
+ ndo->ndo_protocol = "rip";
+ if (ndo->ndo_snapend < dat) {
+ nd_print_trunc(ndo);
+ return;
+ }
+ len = ND_BYTES_AVAILABLE_AFTER(dat);
+ if (len > length)
+ len = length;
+ if (len < sizeof(*rp)) {
+ nd_print_trunc(ndo);
+ return;
+ }
+ len -= sizeof(*rp);
+
+ rp = (const struct rip *)dat;
+
+ ND_TCHECK_SIZE(rp);
+ vers = GET_U_1(rp->rip_vers);
+ ND_PRINT("%sRIPv%u",
+ (ndo->ndo_vflag >= 1) ? "\n\t" : "",
+ vers);
+
+ if (vers == 0) {
+ /*
+ * RFC 1058.
+ *
+ * XXX - RFC 1058 says
+ *
+ * 0 Datagrams whose version number is zero are to be ignored.
+ * These are from a previous version of the protocol, whose
+ * packet format was machine-specific.
+ *
+ * so perhaps we should just dump the packet, in hex.
+ */
+ print_unknown_data(ndo, (const uint8_t *)&rp->rip_cmd, "\n\t", length);
+ return;
+ }
+
+ /* dump version and lets see if we know the commands name*/
+ cmd = GET_U_1(rp->rip_cmd);
+ ND_PRINT(", %s, length: %u",
+ tok2str(rip_cmd_values, "unknown command (%u)", cmd),
+ length);
+
+ if (ndo->ndo_vflag < 1)
+ return;
+
+ switch (cmd) {
+
+ case RIPCMD_REQUEST:
+ case RIPCMD_RESPONSE:
+ switch (vers) {
+
+ case 1:
+ routecount = length / RIP_ROUTELEN;
+ ND_PRINT(", routes: %u", routecount);
+ p = (const u_char *)(rp + 1);
+ while (len != 0) {
+ entry_size = rip_entry_print_v1(ndo, p, len);
+ if (entry_size == 0) {
+ /* Error */
+ nd_print_trunc(ndo);
+ break;
+ }
+ if (len < entry_size) {
+ ND_PRINT(" [remaining entries length %u < %u]",
+ len, entry_size);
+ nd_print_invalid(ndo);
+ break;
+ }
+ p += entry_size;
+ len -= entry_size;
+ }
+ break;
+
+ case 2:
+ routecount = length / RIP_ROUTELEN;
+ ND_PRINT(", routes: %u or less", routecount);
+ p = (const u_char *)(rp + 1);
+ while (len != 0) {
+ entry_size = rip_entry_print_v2(ndo, p, len);
+ if (entry_size == 0) {
+ /* Error */
+ nd_print_trunc(ndo);
+ break;
+ }
+ if (len < entry_size) {
+ ND_PRINT(" [remaining entries length %u < %u]",
+ len, entry_size);
+ nd_print_invalid(ndo);
+ break;
+ }
+ p += entry_size;
+ len -= entry_size;
+ }
+ break;
+
+ default:
+ ND_PRINT(", unknown version");
+ break;
+ }
+ break;
+
+ case RIPCMD_TRACEOFF:
+ case RIPCMD_POLL:
+ case RIPCMD_POLLENTRY:
+ break;
+
+ case RIPCMD_TRACEON:
+ /* fall through */
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ if (!print_unknown_data(ndo, (const uint8_t *)rp, "\n\t", length))
+ return;
+ }
+ break;
+ }
+ /* do we want to see an additionally hexdump ? */
+ if (ndo->ndo_vflag> 1) {
+ if (!print_unknown_data(ndo, (const uint8_t *)rp, "\n\t", length))
+ return;
+ }
+trunc:
+ return;
+}
diff --git a/print-ripng.c b/print-ripng.c
new file mode 100644
index 0000000..94ebf1b
--- /dev/null
+++ b/print-ripng.c
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 1989, 1990, 1991, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IPv6 Routing Information Protocol (RIPng) printer */
+
+/* specification: RFC 2080 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+/*
+ * Copyright (C) 1995, 1996, 1997 and 1998 WIDE Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#define RIP6_VERSION 1
+
+#define RIP6_REQUEST 1
+#define RIP6_RESPONSE 2
+
+struct netinfo6 {
+ nd_ipv6 rip6_dest;
+ nd_uint16_t rip6_tag;
+ nd_uint8_t rip6_plen;
+ nd_uint8_t rip6_metric;
+};
+
+struct rip6 {
+ nd_uint8_t rip6_cmd;
+ nd_uint8_t rip6_vers;
+ nd_byte rip6_res1[2];
+ struct netinfo6 rip6_nets[1];
+};
+
+#define HOPCNT_INFINITY6 16
+
+static int ND_IN6_IS_ADDR_UNSPECIFIED(const nd_ipv6 *addr)
+{
+ static const nd_ipv6 in6addr_any_val = { 0 }; /* :: */
+ return (memcmp(addr, &in6addr_any_val, sizeof(*addr)) == 0);
+}
+
+static void
+rip6_entry_print(netdissect_options *ndo,
+ const struct netinfo6 *ni, const u_int print_metric)
+{
+ uint16_t tag;
+ uint8_t metric;
+
+ ND_PRINT("%s/%u", GET_IP6ADDR_STRING(ni->rip6_dest),
+ GET_U_1(ni->rip6_plen));
+ tag = GET_BE_U_2(ni->rip6_tag);
+ if (tag)
+ ND_PRINT(" [%u]", tag);
+ metric = GET_U_1(ni->rip6_metric);
+ if (metric && print_metric)
+ ND_PRINT(" (%u)", metric);
+}
+
+void
+ripng_print(netdissect_options *ndo, const u_char *dat, unsigned int length)
+{
+ const struct rip6 *rp = (const struct rip6 *)dat;
+ uint8_t cmd, vers;
+ const struct netinfo6 *ni;
+ unsigned int length_left;
+ u_int j;
+
+ ndo->ndo_protocol = "ripng";
+ vers = GET_U_1(rp->rip6_vers);
+ if (vers != RIP6_VERSION) {
+ nd_print_protocol(ndo);
+ ND_PRINT(" [version %u, must be %u]", vers, RIP6_VERSION);
+ goto invalid;
+ }
+ cmd = GET_U_1(rp->rip6_cmd);
+ switch (cmd) {
+
+ case RIP6_REQUEST:
+ length_left = length;
+ if (length_left < (sizeof(struct rip6) - sizeof(struct netinfo6)))
+ goto invalid;
+ length_left -= (sizeof(struct rip6) - sizeof(struct netinfo6));
+ j = length_left / sizeof(*ni);
+ if (j == 1) {
+ if (GET_U_1(rp->rip6_nets->rip6_metric) == HOPCNT_INFINITY6
+ && ND_IN6_IS_ADDR_UNSPECIFIED(&rp->rip6_nets->rip6_dest)) {
+ ND_PRINT(" ripng-req dump");
+ break;
+ }
+ }
+ if (j * sizeof(*ni) != length_left)
+ ND_PRINT(" ripng-req %u[%u]:", j, length);
+ else
+ ND_PRINT(" ripng-req %u:", j);
+ for (ni = rp->rip6_nets; length_left >= sizeof(*ni);
+ length_left -= sizeof(*ni), ++ni) {
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("\n\t");
+ else
+ ND_PRINT(" ");
+ rip6_entry_print(ndo, ni, FALSE);
+ }
+ if (length_left != 0)
+ goto invalid;
+ break;
+ case RIP6_RESPONSE:
+ length_left = length;
+ if (length_left < (sizeof(struct rip6) - sizeof(struct netinfo6)))
+ goto invalid;
+ length_left -= (sizeof(struct rip6) - sizeof(struct netinfo6));
+ j = length_left / sizeof(*ni);
+ if (j * sizeof(*ni) != length_left)
+ ND_PRINT(" ripng-resp %u[%u]:", j, length);
+ else
+ ND_PRINT(" ripng-resp %u:", j);
+ for (ni = rp->rip6_nets; length_left >= sizeof(*ni);
+ length_left -= sizeof(*ni), ++ni) {
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("\n\t");
+ else
+ ND_PRINT(" ");
+ rip6_entry_print(ndo, ni, TRUE);
+ }
+ if (length_left != 0)
+ goto invalid;
+ break;
+ default:
+ ND_PRINT(" ripng-%u ?? %u", cmd, length);
+ goto invalid;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-rpki-rtr.c b/print-rpki-rtr.c
new file mode 100644
index 0000000..36be399
--- /dev/null
+++ b/print-rpki-rtr.c
@@ -0,0 +1,391 @@
+/*
+ * Copyright (c) 1998-2011 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+/* \summary: Resource Public Key Infrastructure (RPKI) to Router Protocol printer */
+
+/* specification: RFC 6810 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+
+/*
+ * RPKI/Router PDU header
+ *
+ * Here's what the PDU header looks like.
+ * The length does include the version and length fields.
+ */
+typedef struct rpki_rtr_pdu_ {
+ nd_uint8_t version; /* Version number */
+ nd_uint8_t pdu_type; /* PDU type */
+ union {
+ nd_uint16_t session_id; /* Session id */
+ nd_uint16_t error_code; /* Error code */
+ } u;
+ nd_uint32_t length;
+} rpki_rtr_pdu;
+
+/*
+ * IPv4 Prefix PDU.
+ */
+typedef struct rpki_rtr_pdu_ipv4_prefix_ {
+ rpki_rtr_pdu pdu_header;
+ nd_uint8_t flags;
+ nd_uint8_t prefix_length;
+ nd_uint8_t max_length;
+ nd_uint8_t zero;
+ nd_ipv4 prefix;
+ nd_uint32_t as;
+} rpki_rtr_pdu_ipv4_prefix;
+
+/*
+ * IPv6 Prefix PDU.
+ */
+typedef struct rpki_rtr_pdu_ipv6_prefix_ {
+ rpki_rtr_pdu pdu_header;
+ nd_uint8_t flags;
+ nd_uint8_t prefix_length;
+ nd_uint8_t max_length;
+ nd_uint8_t zero;
+ nd_ipv6 prefix;
+ nd_uint32_t as;
+} rpki_rtr_pdu_ipv6_prefix;
+
+/*
+ * Error report PDU.
+ */
+typedef struct rpki_rtr_pdu_error_report_ {
+ rpki_rtr_pdu pdu_header;
+ nd_uint32_t encapsulated_pdu_length; /* Encapsulated PDU length */
+ /* Copy of Erroneous PDU (variable, optional) */
+ /* Length of Error Text (4 octets in network byte order) */
+ /* Arbitrary Text of Error Diagnostic Message (variable, optional) */
+} rpki_rtr_pdu_error_report;
+
+/*
+ * PDU type codes
+ */
+#define RPKI_RTR_SERIAL_NOTIFY_PDU 0
+#define RPKI_RTR_SERIAL_QUERY_PDU 1
+#define RPKI_RTR_RESET_QUERY_PDU 2
+#define RPKI_RTR_CACHE_RESPONSE_PDU 3
+#define RPKI_RTR_IPV4_PREFIX_PDU 4
+#define RPKI_RTR_IPV6_PREFIX_PDU 6
+#define RPKI_RTR_END_OF_DATA_PDU 7
+#define RPKI_RTR_CACHE_RESET_PDU 8
+#define RPKI_RTR_ERROR_REPORT_PDU 10
+
+static const struct tok rpki_rtr_pdu_values[] = {
+ { RPKI_RTR_SERIAL_NOTIFY_PDU, "Serial Notify" },
+ { RPKI_RTR_SERIAL_QUERY_PDU, "Serial Query" },
+ { RPKI_RTR_RESET_QUERY_PDU, "Reset Query" },
+ { RPKI_RTR_CACHE_RESPONSE_PDU, "Cache Response" },
+ { RPKI_RTR_IPV4_PREFIX_PDU, "IPV4 Prefix" },
+ { RPKI_RTR_IPV6_PREFIX_PDU, "IPV6 Prefix" },
+ { RPKI_RTR_END_OF_DATA_PDU, "End of Data" },
+ { RPKI_RTR_CACHE_RESET_PDU, "Cache Reset" },
+ { RPKI_RTR_ERROR_REPORT_PDU, "Error Report" },
+ { 0, NULL}
+};
+
+static const struct tok rpki_rtr_error_codes[] = {
+ { 0, "Corrupt Data" },
+ { 1, "Internal Error" },
+ { 2, "No Data Available" },
+ { 3, "Invalid Request" },
+ { 4, "Unsupported Protocol Version" },
+ { 5, "Unsupported PDU Type" },
+ { 6, "Withdrawal of Unknown Record" },
+ { 7, "Duplicate Announcement Received" },
+ { 0, NULL}
+};
+
+/*
+ * Build a indentation string for a given indentation level.
+ * XXX this should be really in util.c
+ */
+static char *
+indent_string (u_int indent)
+{
+ static char buf[20];
+ u_int idx;
+
+ idx = 0;
+ buf[idx] = '\0';
+
+ /*
+ * Does the static buffer fit ?
+ */
+ if (sizeof(buf) < ((indent/8) + (indent %8) + 2)) {
+ return buf;
+ }
+
+ /*
+ * Heading newline.
+ */
+ buf[idx] = '\n';
+ idx++;
+
+ while (indent >= 8) {
+ buf[idx] = '\t';
+ idx++;
+ indent -= 8;
+ }
+
+ while (indent > 0) {
+ buf[idx] = ' ';
+ idx++;
+ indent--;
+ }
+
+ /*
+ * Trailing zero.
+ */
+ buf[idx] = '\0';
+
+ return buf;
+}
+
+/*
+ * Print a single PDU.
+ */
+static u_int
+rpki_rtr_pdu_print(netdissect_options *ndo, const u_char *tptr, const u_int len,
+ const u_char recurse, const u_int indent)
+{
+ const rpki_rtr_pdu *pdu_header;
+ u_int pdu_type, pdu_len, hexdump;
+ const u_char *msg;
+
+ /* Protocol Version */
+ if (GET_U_1(tptr) != 0) {
+ /* Skip the rest of the input buffer because even if this is
+ * a well-formed PDU of a future RPKI-Router protocol version
+ * followed by a well-formed PDU of RPKI-Router protocol
+ * version 0, there is no way to know exactly how to skip the
+ * current PDU.
+ */
+ ND_PRINT("%sRPKI-RTRv%u (unknown)", indent_string(8), GET_U_1(tptr));
+ return len;
+ }
+ if (len < sizeof(rpki_rtr_pdu)) {
+ ND_PRINT("(%u bytes is too few to decode)", len);
+ goto invalid;
+ }
+ ND_TCHECK_LEN(tptr, sizeof(rpki_rtr_pdu));
+ pdu_header = (const rpki_rtr_pdu *)tptr;
+ pdu_type = GET_U_1(pdu_header->pdu_type);
+ pdu_len = GET_BE_U_4(pdu_header->length);
+ /* Do not check bounds with pdu_len yet, do it in the case blocks
+ * below to make it possible to decode at least the beginning of
+ * a truncated Error Report PDU or a truncated encapsulated PDU.
+ */
+ hexdump = FALSE;
+
+ ND_PRINT("%sRPKI-RTRv%u, %s PDU (%u), length: %u",
+ indent_string(8),
+ GET_U_1(pdu_header->version),
+ tok2str(rpki_rtr_pdu_values, "Unknown", pdu_type),
+ pdu_type, pdu_len);
+ if (pdu_len < sizeof(rpki_rtr_pdu) || pdu_len > len)
+ goto invalid;
+
+ switch (pdu_type) {
+
+ /*
+ * The following PDUs share the message format.
+ */
+ case RPKI_RTR_SERIAL_NOTIFY_PDU:
+ case RPKI_RTR_SERIAL_QUERY_PDU:
+ case RPKI_RTR_END_OF_DATA_PDU:
+ if (pdu_len != sizeof(rpki_rtr_pdu) + 4)
+ goto invalid;
+ msg = (const u_char *)(pdu_header + 1);
+ ND_PRINT("%sSession ID: 0x%04x, Serial: %u",
+ indent_string(indent+2),
+ GET_BE_U_2(pdu_header->u.session_id),
+ GET_BE_U_4(msg));
+ break;
+
+ /*
+ * The following PDUs share the message format.
+ */
+ case RPKI_RTR_RESET_QUERY_PDU:
+ case RPKI_RTR_CACHE_RESET_PDU:
+ if (pdu_len != sizeof(rpki_rtr_pdu))
+ goto invalid;
+ /* no additional boundary to check */
+
+ /*
+ * Zero payload PDUs.
+ */
+ break;
+
+ case RPKI_RTR_CACHE_RESPONSE_PDU:
+ if (pdu_len != sizeof(rpki_rtr_pdu))
+ goto invalid;
+ /* no additional boundary to check */
+ ND_PRINT("%sSession ID: 0x%04x",
+ indent_string(indent+2),
+ GET_BE_U_2(pdu_header->u.session_id));
+ break;
+
+ case RPKI_RTR_IPV4_PREFIX_PDU:
+ {
+ const rpki_rtr_pdu_ipv4_prefix *pdu;
+
+ if (pdu_len != sizeof(rpki_rtr_pdu_ipv4_prefix))
+ goto invalid;
+ pdu = (const rpki_rtr_pdu_ipv4_prefix *)tptr;
+ ND_PRINT("%sIPv4 Prefix %s/%u-%u, origin-as %u, flags 0x%02x",
+ indent_string(indent+2),
+ GET_IPADDR_STRING(pdu->prefix),
+ GET_U_1(pdu->prefix_length), GET_U_1(pdu->max_length),
+ GET_BE_U_4(pdu->as), GET_U_1(pdu->flags));
+ }
+ break;
+
+ case RPKI_RTR_IPV6_PREFIX_PDU:
+ {
+ const rpki_rtr_pdu_ipv6_prefix *pdu;
+
+ if (pdu_len != sizeof(rpki_rtr_pdu_ipv6_prefix))
+ goto invalid;
+ pdu = (const rpki_rtr_pdu_ipv6_prefix *)tptr;
+ ND_PRINT("%sIPv6 Prefix %s/%u-%u, origin-as %u, flags 0x%02x",
+ indent_string(indent+2),
+ GET_IP6ADDR_STRING(pdu->prefix),
+ GET_U_1(pdu->prefix_length), GET_U_1(pdu->max_length),
+ GET_BE_U_4(pdu->as), GET_U_1(pdu->flags));
+ }
+ break;
+
+ case RPKI_RTR_ERROR_REPORT_PDU:
+ {
+ const rpki_rtr_pdu_error_report *pdu;
+ u_int encapsulated_pdu_length, text_length, tlen, error_code;
+
+ tlen = sizeof(rpki_rtr_pdu);
+ /* Do not test for the "Length of Error Text" data element yet. */
+ if (pdu_len < tlen + 4)
+ goto invalid;
+ ND_TCHECK_LEN(tptr, tlen + 4);
+ /* Safe up to and including the "Length of Encapsulated PDU"
+ * data element, more data elements may be present.
+ */
+ pdu = (const rpki_rtr_pdu_error_report *)tptr;
+ encapsulated_pdu_length = GET_BE_U_4(pdu->encapsulated_pdu_length);
+ tlen += 4;
+
+ error_code = GET_BE_U_2(pdu->pdu_header.u.error_code);
+ ND_PRINT("%sError code: %s (%u), Encapsulated PDU length: %u",
+ indent_string(indent+2),
+ tok2str(rpki_rtr_error_codes, "Unknown", error_code),
+ error_code, encapsulated_pdu_length);
+
+ if (encapsulated_pdu_length) {
+ /* Section 5.10 of RFC 6810 says:
+ * "An Error Report PDU MUST NOT be sent for an Error Report PDU."
+ *
+ * However, as far as the protocol encoding goes Error Report PDUs can
+ * happen to be nested in each other, however many times, in which case
+ * the decoder should still print such semantically incorrect PDUs.
+ *
+ * That said, "the Erroneous PDU field MAY be truncated" (ibid), thus
+ * to keep things simple this implementation decodes only the two
+ * outermost layers of PDUs and makes bounds checks in the outer and
+ * the inner PDU independently.
+ */
+ if (pdu_len < tlen + encapsulated_pdu_length)
+ goto invalid;
+ if (! recurse) {
+ ND_TCHECK_LEN(tptr, tlen + encapsulated_pdu_length);
+ }
+ else {
+ ND_PRINT("%s-----encapsulated PDU-----", indent_string(indent+4));
+ rpki_rtr_pdu_print(ndo, tptr + tlen,
+ encapsulated_pdu_length, 0, indent + 2);
+ }
+ tlen += encapsulated_pdu_length;
+ }
+
+ if (pdu_len < tlen + 4)
+ goto invalid;
+ ND_TCHECK_LEN(tptr, tlen + 4);
+ /* Safe up to and including the "Length of Error Text" data element,
+ * one more data element may be present.
+ */
+
+ /*
+ * Extract, trail-zero and print the Error message.
+ */
+ text_length = GET_BE_U_4(tptr + tlen);
+ tlen += 4;
+
+ if (text_length) {
+ if (pdu_len < tlen + text_length)
+ goto invalid;
+ /* nd_printn() makes the bounds check */
+ ND_PRINT("%sError text: ", indent_string(indent+2));
+ (void)nd_printn(ndo, tptr + tlen, text_length, NULL);
+ }
+ }
+ break;
+
+ default:
+ ND_TCHECK_LEN(tptr, pdu_len);
+
+ /*
+ * Unknown data, please hexdump.
+ */
+ hexdump = TRUE;
+ }
+
+ /* do we also want to see a hex dump ? */
+ if (ndo->ndo_vflag > 1 || (ndo->ndo_vflag && hexdump)) {
+ print_unknown_data(ndo,tptr,"\n\t ", pdu_len);
+ }
+ return pdu_len;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(tptr, len);
+ return len;
+}
+
+void
+rpki_rtr_print(netdissect_options *ndo, const u_char *pptr, u_int len)
+{
+ ndo->ndo_protocol = "rpki_rtr";
+ if (!ndo->ndo_vflag) {
+ ND_PRINT(", RPKI-RTR");
+ return;
+ }
+ while (len) {
+ u_int pdu_len = rpki_rtr_pdu_print(ndo, pptr, len, 1, 8);
+ len -= pdu_len;
+ pptr += pdu_len;
+ }
+}
diff --git a/print-rsvp.c b/print-rsvp.c
new file mode 100644
index 0000000..23b6d5a
--- /dev/null
+++ b/print-rsvp.c
@@ -0,0 +1,2069 @@
+/*
+ * Copyright (c) 1998-2007 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+/* \summary: Resource ReSerVation Protocol (RSVP) printer */
+
+/* specification: RFC 2205 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "ethertype.h"
+#include "gmpls.h"
+#include "af.h"
+#include "signature.h"
+
+
+/*
+ * RFC 2205 common header
+ *
+ * 0 1 2 3
+ * +-------------+-------------+-------------+-------------+
+ * | Vers | Flags| Msg Type | RSVP Checksum |
+ * +-------------+-------------+-------------+-------------+
+ * | Send_TTL | (Reserved) | RSVP Length |
+ * +-------------+-------------+-------------+-------------+
+ *
+ */
+
+struct rsvp_common_header {
+ nd_uint8_t version_flags;
+ nd_uint8_t msg_type;
+ nd_uint16_t checksum;
+ nd_uint8_t ttl;
+ nd_byte reserved[1];
+ nd_uint16_t length;
+};
+
+/*
+ * RFC2205 object header
+ *
+ *
+ * 0 1 2 3
+ * +-------------+-------------+-------------+-------------+
+ * | Length (bytes) | Class-Num | C-Type |
+ * +-------------+-------------+-------------+-------------+
+ * | |
+ * // (Object contents) //
+ * | |
+ * +-------------+-------------+-------------+-------------+
+ */
+
+struct rsvp_object_header {
+ nd_uint16_t length;
+ nd_uint8_t class_num;
+ nd_uint8_t ctype;
+};
+
+#define RSVP_VERSION 1
+#define RSVP_EXTRACT_VERSION(x) (((x)&0xf0)>>4)
+#define RSVP_EXTRACT_FLAGS(x) ((x)&0x0f)
+
+#define RSVP_MSGTYPE_PATH 1
+#define RSVP_MSGTYPE_RESV 2
+#define RSVP_MSGTYPE_PATHERR 3
+#define RSVP_MSGTYPE_RESVERR 4
+#define RSVP_MSGTYPE_PATHTEAR 5
+#define RSVP_MSGTYPE_RESVTEAR 6
+#define RSVP_MSGTYPE_RESVCONF 7
+#define RSVP_MSGTYPE_BUNDLE 12
+#define RSVP_MSGTYPE_ACK 13
+#define RSVP_MSGTYPE_HELLO_OLD 14 /* ancient Hellos */
+#define RSVP_MSGTYPE_SREFRESH 15
+#define RSVP_MSGTYPE_HELLO 20
+
+static const struct tok rsvp_msg_type_values[] = {
+ { RSVP_MSGTYPE_PATH, "Path" },
+ { RSVP_MSGTYPE_RESV, "Resv" },
+ { RSVP_MSGTYPE_PATHERR, "PathErr" },
+ { RSVP_MSGTYPE_RESVERR, "ResvErr" },
+ { RSVP_MSGTYPE_PATHTEAR, "PathTear" },
+ { RSVP_MSGTYPE_RESVTEAR, "ResvTear" },
+ { RSVP_MSGTYPE_RESVCONF, "ResvConf" },
+ { RSVP_MSGTYPE_BUNDLE, "Bundle" },
+ { RSVP_MSGTYPE_ACK, "Acknowledgement" },
+ { RSVP_MSGTYPE_HELLO_OLD, "Hello (Old)" },
+ { RSVP_MSGTYPE_SREFRESH, "Refresh" },
+ { RSVP_MSGTYPE_HELLO, "Hello" },
+ { 0, NULL}
+};
+
+static const struct tok rsvp_header_flag_values[] = {
+ { 0x01, "Refresh reduction capable" }, /* rfc2961 */
+ { 0, NULL}
+};
+
+static const struct tok rsvp_obj_capability_flag_values[] = {
+ { 0x0004, "RecoveryPath Transmit Enabled" },
+ { 0x0002, "RecoveryPath Desired" },
+ { 0x0001, "RecoveryPath Srefresh Capable" },
+ { 0, NULL}
+};
+
+#define RSVP_OBJ_SESSION 1 /* rfc2205 */
+#define RSVP_OBJ_RSVP_HOP 3 /* rfc2205, rfc3473 */
+#define RSVP_OBJ_INTEGRITY 4 /* rfc2747 */
+#define RSVP_OBJ_TIME_VALUES 5 /* rfc2205 */
+#define RSVP_OBJ_ERROR_SPEC 6
+#define RSVP_OBJ_SCOPE 7
+#define RSVP_OBJ_STYLE 8 /* rfc2205 */
+#define RSVP_OBJ_FLOWSPEC 9 /* rfc2215 */
+#define RSVP_OBJ_FILTERSPEC 10 /* rfc2215 */
+#define RSVP_OBJ_SENDER_TEMPLATE 11
+#define RSVP_OBJ_SENDER_TSPEC 12 /* rfc2215 */
+#define RSVP_OBJ_ADSPEC 13 /* rfc2215 */
+#define RSVP_OBJ_POLICY_DATA 14
+#define RSVP_OBJ_CONFIRM 15 /* rfc2205 */
+#define RSVP_OBJ_LABEL 16 /* rfc3209 */
+#define RSVP_OBJ_LABEL_REQ 19 /* rfc3209 */
+#define RSVP_OBJ_ERO 20 /* rfc3209 */
+#define RSVP_OBJ_RRO 21 /* rfc3209 */
+#define RSVP_OBJ_HELLO 22 /* rfc3209 */
+#define RSVP_OBJ_MESSAGE_ID 23 /* rfc2961 */
+#define RSVP_OBJ_MESSAGE_ID_ACK 24 /* rfc2961 */
+#define RSVP_OBJ_MESSAGE_ID_LIST 25 /* rfc2961 */
+#define RSVP_OBJ_RECOVERY_LABEL 34 /* rfc3473 */
+#define RSVP_OBJ_UPSTREAM_LABEL 35 /* rfc3473 */
+#define RSVP_OBJ_LABEL_SET 36 /* rfc3473 */
+#define RSVP_OBJ_PROTECTION 37 /* rfc3473 */
+#define RSVP_OBJ_S2L 50 /* rfc4875 */
+#define RSVP_OBJ_DETOUR 63 /* rfc4090 */
+#define RSVP_OBJ_CLASSTYPE 66 /* rfc4124 */
+#define RSVP_OBJ_CLASSTYPE_OLD 125 /* draft-ietf-tewg-diff-te-proto-07 */
+#define RSVP_OBJ_SUGGESTED_LABEL 129 /* rfc3473 */
+#define RSVP_OBJ_ACCEPT_LABEL_SET 130 /* rfc3473 */
+#define RSVP_OBJ_RESTART_CAPABILITY 131 /* rfc3473 */
+#define RSVP_OBJ_CAPABILITY 134 /* rfc5063 */
+#define RSVP_OBJ_NOTIFY_REQ 195 /* rfc3473 */
+#define RSVP_OBJ_ADMIN_STATUS 196 /* rfc3473 */
+#define RSVP_OBJ_PROPERTIES 204 /* juniper proprietary */
+#define RSVP_OBJ_FASTREROUTE 205 /* rfc4090 */
+#define RSVP_OBJ_SESSION_ATTRIBUTE 207 /* rfc3209 */
+#define RSVP_OBJ_GENERALIZED_UNI 229 /* OIF RSVP extensions UNI 1.0 Signaling, Rel. 2 */
+#define RSVP_OBJ_CALL_ID 230 /* rfc3474 */
+#define RSVP_OBJ_CALL_OPS 236 /* rfc3474 */
+
+static const struct tok rsvp_obj_values[] = {
+ { RSVP_OBJ_SESSION, "Session" },
+ { RSVP_OBJ_RSVP_HOP, "RSVP Hop" },
+ { RSVP_OBJ_INTEGRITY, "Integrity" },
+ { RSVP_OBJ_TIME_VALUES, "Time Values" },
+ { RSVP_OBJ_ERROR_SPEC, "Error Spec" },
+ { RSVP_OBJ_SCOPE, "Scope" },
+ { RSVP_OBJ_STYLE, "Style" },
+ { RSVP_OBJ_FLOWSPEC, "Flowspec" },
+ { RSVP_OBJ_FILTERSPEC, "FilterSpec" },
+ { RSVP_OBJ_SENDER_TEMPLATE, "Sender Template" },
+ { RSVP_OBJ_SENDER_TSPEC, "Sender TSpec" },
+ { RSVP_OBJ_ADSPEC, "Adspec" },
+ { RSVP_OBJ_POLICY_DATA, "Policy Data" },
+ { RSVP_OBJ_CONFIRM, "Confirm" },
+ { RSVP_OBJ_LABEL, "Label" },
+ { RSVP_OBJ_LABEL_REQ, "Label Request" },
+ { RSVP_OBJ_ERO, "ERO" },
+ { RSVP_OBJ_RRO, "RRO" },
+ { RSVP_OBJ_HELLO, "Hello" },
+ { RSVP_OBJ_MESSAGE_ID, "Message ID" },
+ { RSVP_OBJ_MESSAGE_ID_ACK, "Message ID Ack" },
+ { RSVP_OBJ_MESSAGE_ID_LIST, "Message ID List" },
+ { RSVP_OBJ_RECOVERY_LABEL, "Recovery Label" },
+ { RSVP_OBJ_UPSTREAM_LABEL, "Upstream Label" },
+ { RSVP_OBJ_LABEL_SET, "Label Set" },
+ { RSVP_OBJ_ACCEPT_LABEL_SET, "Acceptable Label Set" },
+ { RSVP_OBJ_DETOUR, "Detour" },
+ { RSVP_OBJ_CLASSTYPE, "Class Type" },
+ { RSVP_OBJ_CLASSTYPE_OLD, "Class Type (old)" },
+ { RSVP_OBJ_SUGGESTED_LABEL, "Suggested Label" },
+ { RSVP_OBJ_PROPERTIES, "Properties" },
+ { RSVP_OBJ_FASTREROUTE, "Fast Re-Route" },
+ { RSVP_OBJ_SESSION_ATTRIBUTE, "Session Attribute" },
+ { RSVP_OBJ_GENERALIZED_UNI, "Generalized UNI" },
+ { RSVP_OBJ_CALL_ID, "Call-ID" },
+ { RSVP_OBJ_CALL_OPS, "Call Capability" },
+ { RSVP_OBJ_RESTART_CAPABILITY, "Restart Capability" },
+ { RSVP_OBJ_CAPABILITY, "Capability" },
+ { RSVP_OBJ_NOTIFY_REQ, "Notify Request" },
+ { RSVP_OBJ_PROTECTION, "Protection" },
+ { RSVP_OBJ_ADMIN_STATUS, "Administrative Status" },
+ { RSVP_OBJ_S2L, "Sub-LSP to LSP" },
+ { 0, NULL}
+};
+
+#define RSVP_CTYPE_IPV4 1
+#define RSVP_CTYPE_IPV6 2
+#define RSVP_CTYPE_TUNNEL_IPV4 7
+#define RSVP_CTYPE_TUNNEL_IPV6 8
+#define RSVP_CTYPE_UNI_IPV4 11 /* OIF RSVP extensions UNI 1.0 Signaling Rel. 2 */
+#define RSVP_CTYPE_1 1
+#define RSVP_CTYPE_2 2
+#define RSVP_CTYPE_3 3
+#define RSVP_CTYPE_4 4
+#define RSVP_CTYPE_12 12
+#define RSVP_CTYPE_13 13
+#define RSVP_CTYPE_14 14
+
+/*
+ * the ctypes are not globally unique so for
+ * translating it to strings we build a table based
+ * on objects offsetted by the ctype
+ */
+
+static const struct tok rsvp_ctype_values[] = {
+ { 256*RSVP_OBJ_RSVP_HOP+RSVP_CTYPE_IPV4, "IPv4" },
+ { 256*RSVP_OBJ_RSVP_HOP+RSVP_CTYPE_IPV6, "IPv6" },
+ { 256*RSVP_OBJ_RSVP_HOP+RSVP_CTYPE_3, "IPv4 plus opt. TLVs" },
+ { 256*RSVP_OBJ_RSVP_HOP+RSVP_CTYPE_4, "IPv6 plus opt. TLVs" },
+ { 256*RSVP_OBJ_NOTIFY_REQ+RSVP_CTYPE_IPV4, "IPv4" },
+ { 256*RSVP_OBJ_NOTIFY_REQ+RSVP_CTYPE_IPV6, "IPv6" },
+ { 256*RSVP_OBJ_CONFIRM+RSVP_CTYPE_IPV4, "IPv4" },
+ { 256*RSVP_OBJ_CONFIRM+RSVP_CTYPE_IPV6, "IPv6" },
+ { 256*RSVP_OBJ_TIME_VALUES+RSVP_CTYPE_1, "1" },
+ { 256*RSVP_OBJ_FLOWSPEC+RSVP_CTYPE_1, "obsolete" },
+ { 256*RSVP_OBJ_FLOWSPEC+RSVP_CTYPE_2, "IntServ" },
+ { 256*RSVP_OBJ_SENDER_TSPEC+RSVP_CTYPE_2, "IntServ" },
+ { 256*RSVP_OBJ_ADSPEC+RSVP_CTYPE_2, "IntServ" },
+ { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_IPV4, "IPv4" },
+ { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_IPV6, "IPv6" },
+ { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_3, "IPv6 Flow-label" },
+ { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" },
+ { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_12, "IPv4 P2MP LSP Tunnel" },
+ { 256*RSVP_OBJ_FILTERSPEC+RSVP_CTYPE_13, "IPv6 P2MP LSP Tunnel" },
+ { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_IPV4, "IPv4" },
+ { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_IPV6, "IPv6" },
+ { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" },
+ { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_UNI_IPV4, "UNI IPv4" },
+ { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_13, "IPv4 P2MP LSP Tunnel" },
+ { 256*RSVP_OBJ_SESSION+RSVP_CTYPE_14, "IPv6 P2MP LSP Tunnel" },
+ { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_IPV4, "IPv4" },
+ { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_IPV6, "IPv6" },
+ { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" },
+ { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_12, "IPv4 P2MP LSP Tunnel" },
+ { 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_13, "IPv6 P2MP LSP Tunnel" },
+ { 256*RSVP_OBJ_MESSAGE_ID+RSVP_CTYPE_1, "1" },
+ { 256*RSVP_OBJ_MESSAGE_ID_ACK+RSVP_CTYPE_1, "Message id ack" },
+ { 256*RSVP_OBJ_MESSAGE_ID_ACK+RSVP_CTYPE_2, "Message id nack" },
+ { 256*RSVP_OBJ_MESSAGE_ID_LIST+RSVP_CTYPE_1, "1" },
+ { 256*RSVP_OBJ_STYLE+RSVP_CTYPE_1, "1" },
+ { 256*RSVP_OBJ_HELLO+RSVP_CTYPE_1, "Hello Request" },
+ { 256*RSVP_OBJ_HELLO+RSVP_CTYPE_2, "Hello Ack" },
+ { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_1, "without label range" },
+ { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_2, "with ATM label range" },
+ { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_3, "with FR label range" },
+ { 256*RSVP_OBJ_LABEL_REQ+RSVP_CTYPE_4, "Generalized Label" },
+ { 256*RSVP_OBJ_LABEL+RSVP_CTYPE_1, "Label" },
+ { 256*RSVP_OBJ_LABEL+RSVP_CTYPE_2, "Generalized Label" },
+ { 256*RSVP_OBJ_LABEL+RSVP_CTYPE_3, "Waveband Switching" },
+ { 256*RSVP_OBJ_SUGGESTED_LABEL+RSVP_CTYPE_1, "Label" },
+ { 256*RSVP_OBJ_SUGGESTED_LABEL+RSVP_CTYPE_2, "Generalized Label" },
+ { 256*RSVP_OBJ_SUGGESTED_LABEL+RSVP_CTYPE_3, "Waveband Switching" },
+ { 256*RSVP_OBJ_UPSTREAM_LABEL+RSVP_CTYPE_1, "Label" },
+ { 256*RSVP_OBJ_UPSTREAM_LABEL+RSVP_CTYPE_2, "Generalized Label" },
+ { 256*RSVP_OBJ_UPSTREAM_LABEL+RSVP_CTYPE_3, "Waveband Switching" },
+ { 256*RSVP_OBJ_RECOVERY_LABEL+RSVP_CTYPE_1, "Label" },
+ { 256*RSVP_OBJ_RECOVERY_LABEL+RSVP_CTYPE_2, "Generalized Label" },
+ { 256*RSVP_OBJ_RECOVERY_LABEL+RSVP_CTYPE_3, "Waveband Switching" },
+ { 256*RSVP_OBJ_ERO+RSVP_CTYPE_IPV4, "IPv4" },
+ { 256*RSVP_OBJ_RRO+RSVP_CTYPE_IPV4, "IPv4" },
+ { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_IPV4, "IPv4" },
+ { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_IPV6, "IPv6" },
+ { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_3, "IPv4 plus opt. TLVs" },
+ { 256*RSVP_OBJ_ERROR_SPEC+RSVP_CTYPE_4, "IPv6 plus opt. TLVs" },
+ { 256*RSVP_OBJ_RESTART_CAPABILITY+RSVP_CTYPE_1, "IPv4" },
+ { 256*RSVP_OBJ_CAPABILITY+RSVP_CTYPE_1, "1" },
+ { 256*RSVP_OBJ_SESSION_ATTRIBUTE+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" },
+ { 256*RSVP_OBJ_FASTREROUTE+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" }, /* old style*/
+ { 256*RSVP_OBJ_FASTREROUTE+RSVP_CTYPE_1, "1" }, /* new style */
+ { 256*RSVP_OBJ_DETOUR+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" },
+ { 256*RSVP_OBJ_PROPERTIES+RSVP_CTYPE_1, "1" },
+ { 256*RSVP_OBJ_ADMIN_STATUS+RSVP_CTYPE_1, "1" },
+ { 256*RSVP_OBJ_CLASSTYPE+RSVP_CTYPE_1, "1" },
+ { 256*RSVP_OBJ_CLASSTYPE_OLD+RSVP_CTYPE_1, "1" },
+ { 256*RSVP_OBJ_LABEL_SET+RSVP_CTYPE_1, "1" },
+ { 256*RSVP_OBJ_GENERALIZED_UNI+RSVP_CTYPE_1, "1" },
+ { 256*RSVP_OBJ_S2L+RSVP_CTYPE_IPV4, "IPv4 sub-LSP" },
+ { 256*RSVP_OBJ_S2L+RSVP_CTYPE_IPV6, "IPv6 sub-LSP" },
+ { 0, NULL}
+};
+
+/*
+ * XXX - this assumes a 16-byte digest, which is true for HMAC-MD5, but
+ * isn't necessarily the case for other hash algorithms.
+ *
+ * Unless I've missed something, there's nothing in RFC 2747 to indicate
+ * the hash algorithm being used, so it's presumably something set up
+ * out-of-band, or negotiated by other RSVP objects.
+ */
+struct rsvp_obj_integrity_t {
+ uint8_t flags;
+ uint8_t res;
+ uint8_t key_id[6];
+ uint8_t sequence[8];
+ uint8_t digest[16];
+};
+
+static const struct tok rsvp_obj_integrity_flag_values[] = {
+ { 0x80, "Handshake" },
+ { 0, NULL}
+};
+
+struct rsvp_obj_frr_t {
+ uint8_t setup_prio;
+ uint8_t hold_prio;
+ uint8_t hop_limit;
+ uint8_t flags;
+ uint8_t bandwidth[4];
+ uint8_t include_any[4];
+ uint8_t exclude_any[4];
+ uint8_t include_all[4];
+};
+
+
+#define RSVP_OBJ_XRO_MASK_SUBOBJ(x) ((x)&0x7f)
+#define RSVP_OBJ_XRO_MASK_LOOSE(x) ((x)&0x80)
+
+#define RSVP_OBJ_CAPABILITY_FLAGS_MASK 0x7U
+
+#define RSVP_OBJ_XRO_RES 0
+#define RSVP_OBJ_XRO_IPV4 1
+#define RSVP_OBJ_XRO_IPV6 2
+#define RSVP_OBJ_XRO_LABEL 3
+#define RSVP_OBJ_XRO_ASN 32
+#define RSVP_OBJ_XRO_MPLS 64
+
+static const struct tok rsvp_obj_xro_values[] = {
+ { RSVP_OBJ_XRO_RES, "Reserved" },
+ { RSVP_OBJ_XRO_IPV4, "IPv4 prefix" },
+ { RSVP_OBJ_XRO_IPV6, "IPv6 prefix" },
+ { RSVP_OBJ_XRO_LABEL, "Label" },
+ { RSVP_OBJ_XRO_ASN, "Autonomous system number" },
+ { RSVP_OBJ_XRO_MPLS, "MPLS label switched path termination" },
+ { 0, NULL}
+};
+
+/* RFC4090 */
+static const struct tok rsvp_obj_rro_flag_values[] = {
+ { 0x01, "Local protection available" },
+ { 0x02, "Local protection in use" },
+ { 0x04, "Bandwidth protection" },
+ { 0x08, "Node protection" },
+ { 0, NULL}
+};
+
+/* RFC3209 */
+static const struct tok rsvp_obj_rro_label_flag_values[] = {
+ { 0x01, "Global" },
+ { 0, NULL}
+};
+
+static const struct tok rsvp_resstyle_values[] = {
+ { 17, "Wildcard Filter" },
+ { 10, "Fixed Filter" },
+ { 18, "Shared Explicit" },
+ { 0, NULL}
+};
+
+#define RSVP_OBJ_INTSERV_GUARANTEED_SERV 2
+#define RSVP_OBJ_INTSERV_CONTROLLED_LOAD 5
+
+static const struct tok rsvp_intserv_service_type_values[] = {
+ { 1, "Default/Global Information" },
+ { RSVP_OBJ_INTSERV_GUARANTEED_SERV, "Guaranteed Service" },
+ { RSVP_OBJ_INTSERV_CONTROLLED_LOAD, "Controlled Load" },
+ { 0, NULL}
+};
+
+static const struct tok rsvp_intserv_parameter_id_values[] = {
+ { 4, "IS hop cnt" },
+ { 6, "Path b/w estimate" },
+ { 8, "Minimum path latency" },
+ { 10, "Composed MTU" },
+ { 127, "Token Bucket TSpec" },
+ { 130, "Guaranteed Service RSpec" },
+ { 133, "End-to-end composed value for C" },
+ { 134, "End-to-end composed value for D" },
+ { 135, "Since-last-reshaping point composed C" },
+ { 136, "Since-last-reshaping point composed D" },
+ { 0, NULL}
+};
+
+static const struct tok rsvp_session_attribute_flag_values[] = {
+ { 0x01, "Local Protection" },
+ { 0x02, "Label Recording" },
+ { 0x04, "SE Style" },
+ { 0x08, "Bandwidth protection" }, /* RFC4090 */
+ { 0x10, "Node protection" }, /* RFC4090 */
+ { 0, NULL}
+};
+
+static const struct tok rsvp_obj_prop_tlv_values[] = {
+ { 0x01, "Cos" },
+ { 0x02, "Metric 1" },
+ { 0x04, "Metric 2" },
+ { 0x08, "CCC Status" },
+ { 0x10, "Path Type" },
+ { 0, NULL}
+};
+
+#define RSVP_OBJ_ERROR_SPEC_CODE_ROUTING 24
+#define RSVP_OBJ_ERROR_SPEC_CODE_NOTIFY 25
+#define RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE 28
+#define RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE_OLD 125
+
+static const struct tok rsvp_obj_error_code_values[] = {
+ { RSVP_OBJ_ERROR_SPEC_CODE_ROUTING, "Routing Problem" },
+ { RSVP_OBJ_ERROR_SPEC_CODE_NOTIFY, "Notify Error" },
+ { RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE, "Diffserv TE Error" },
+ { RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE_OLD, "Diffserv TE Error (Old)" },
+ { 0, NULL}
+};
+
+static const struct tok rsvp_obj_error_code_routing_values[] = {
+ { 1, "Bad EXPLICIT_ROUTE object" },
+ { 2, "Bad strict node" },
+ { 3, "Bad loose node" },
+ { 4, "Bad initial subobject" },
+ { 5, "No route available toward destination" },
+ { 6, "Unacceptable label value" },
+ { 7, "RRO indicated routing loops" },
+ { 8, "non-RSVP-capable router in the path" },
+ { 9, "MPLS label allocation failure" },
+ { 10, "Unsupported L3PID" },
+ { 0, NULL}
+};
+
+static const struct tok rsvp_obj_error_code_diffserv_te_values[] = {
+ { 1, "Unexpected CT object" },
+ { 2, "Unsupported CT" },
+ { 3, "Invalid CT value" },
+ { 4, "CT/setup priority do not form a configured TE-Class" },
+ { 5, "CT/holding priority do not form a configured TE-Class" },
+ { 6, "CT/setup priority and CT/holding priority do not form a configured TE-Class" },
+ { 7, "Inconsistency between signaled PSC and signaled CT" },
+ { 8, "Inconsistency between signaled PHBs and signaled CT" },
+ { 0, NULL}
+};
+
+/* rfc3473 / rfc 3471 */
+static const struct tok rsvp_obj_admin_status_flag_values[] = {
+ { 0x80000000, "Reflect" },
+ { 0x00000004, "Testing" },
+ { 0x00000002, "Admin-down" },
+ { 0x00000001, "Delete-in-progress" },
+ { 0, NULL}
+};
+
+/* label set actions - rfc3471 */
+#define LABEL_SET_INCLUSIVE_LIST 0
+#define LABEL_SET_EXCLUSIVE_LIST 1
+#define LABEL_SET_INCLUSIVE_RANGE 2
+#define LABEL_SET_EXCLUSIVE_RANGE 3
+
+static const struct tok rsvp_obj_label_set_action_values[] = {
+ { LABEL_SET_INCLUSIVE_LIST, "Inclusive list" },
+ { LABEL_SET_EXCLUSIVE_LIST, "Exclusive list" },
+ { LABEL_SET_INCLUSIVE_RANGE, "Inclusive range" },
+ { LABEL_SET_EXCLUSIVE_RANGE, "Exclusive range" },
+ { 0, NULL}
+};
+
+/* OIF RSVP extensions UNI 1.0 Signaling, release 2 */
+#define RSVP_GEN_UNI_SUBOBJ_SOURCE_TNA_ADDRESS 1
+#define RSVP_GEN_UNI_SUBOBJ_DESTINATION_TNA_ADDRESS 2
+#define RSVP_GEN_UNI_SUBOBJ_DIVERSITY 3
+#define RSVP_GEN_UNI_SUBOBJ_EGRESS_LABEL 4
+#define RSVP_GEN_UNI_SUBOBJ_SERVICE_LEVEL 5
+
+static const struct tok rsvp_obj_generalized_uni_values[] = {
+ { RSVP_GEN_UNI_SUBOBJ_SOURCE_TNA_ADDRESS, "Source TNA address" },
+ { RSVP_GEN_UNI_SUBOBJ_DESTINATION_TNA_ADDRESS, "Destination TNA address" },
+ { RSVP_GEN_UNI_SUBOBJ_DIVERSITY, "Diversity" },
+ { RSVP_GEN_UNI_SUBOBJ_EGRESS_LABEL, "Egress label" },
+ { RSVP_GEN_UNI_SUBOBJ_SERVICE_LEVEL, "Service level" },
+ { 0, NULL}
+};
+
+/*
+ * this is a dissector for all the intserv defined
+ * specs as defined per rfc2215
+ * it is called from various rsvp objects;
+ * returns the amount of bytes being processed
+ */
+static u_int
+rsvp_intserv_print(netdissect_options *ndo,
+ const u_char *tptr, u_int obj_tlen)
+{
+ u_int parameter_id,parameter_length;
+ union {
+ float f;
+ uint32_t i;
+ } bw;
+
+ if (obj_tlen < 4)
+ return 0;
+ parameter_id = GET_U_1(tptr);
+ parameter_length = GET_BE_U_2(tptr + 2)<<2; /* convert wordcount to bytecount */
+
+ ND_PRINT("\n\t Parameter ID: %s (%u), length: %u, Flags: [0x%02x]",
+ tok2str(rsvp_intserv_parameter_id_values,"unknown",parameter_id),
+ parameter_id,
+ parameter_length,
+ GET_U_1(tptr + 1));
+
+ if (obj_tlen < parameter_length+4)
+ return 0;
+ switch(parameter_id) { /* parameter_id */
+
+ case 4:
+ /*
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | 4 (e) | (f) | 1 (g) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IS hop cnt (32-bit unsigned integer) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+ if (parameter_length == 4) {
+ ND_PRINT("\n\t\tIS hop count: %u", GET_BE_U_4(tptr + 4));
+ }
+ break;
+
+ case 6:
+ /*
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | 6 (h) | (i) | 1 (j) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Path b/w estimate (32-bit IEEE floating point number) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+ if (parameter_length == 4) {
+ bw.i = GET_BE_U_4(tptr + 4);
+ ND_PRINT("\n\t\tPath b/w estimate: %.10g Mbps", bw.f / 125000);
+ }
+ break;
+
+ case 8:
+ /*
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | 8 (k) | (l) | 1 (m) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Minimum path latency (32-bit integer) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+ if (parameter_length == 4) {
+ ND_PRINT("\n\t\tMinimum path latency: ");
+ if (GET_BE_U_4(tptr + 4) == 0xffffffff)
+ ND_PRINT("don't care");
+ else
+ ND_PRINT("%u", GET_BE_U_4(tptr + 4));
+ }
+ break;
+
+ case 10:
+
+ /*
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | 10 (n) | (o) | 1 (p) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Composed MTU (32-bit unsigned integer) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+ if (parameter_length == 4) {
+ ND_PRINT("\n\t\tComposed MTU: %u bytes", GET_BE_U_4(tptr + 4));
+ }
+ break;
+ case 127:
+ /*
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | 127 (e) | 0 (f) | 5 (g) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Token Bucket Rate [r] (32-bit IEEE floating point number) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Token Bucket Size [b] (32-bit IEEE floating point number) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Peak Data Rate [p] (32-bit IEEE floating point number) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Minimum Policed Unit [m] (32-bit integer) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Maximum Packet Size [M] (32-bit integer) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+ if (parameter_length == 20) {
+ ND_TCHECK_LEN(tptr + 4, 20);
+ bw.i = GET_BE_U_4(tptr + 4);
+ ND_PRINT("\n\t\tToken Bucket Rate: %.10g Mbps", bw.f / 125000);
+ bw.i = GET_BE_U_4(tptr + 8);
+ ND_PRINT("\n\t\tToken Bucket Size: %.10g bytes", bw.f);
+ bw.i = GET_BE_U_4(tptr + 12);
+ ND_PRINT("\n\t\tPeak Data Rate: %.10g Mbps", bw.f / 125000);
+ ND_PRINT("\n\t\tMinimum Policed Unit: %u bytes",
+ GET_BE_U_4(tptr + 16));
+ ND_PRINT("\n\t\tMaximum Packet Size: %u bytes",
+ GET_BE_U_4(tptr + 20));
+ }
+ break;
+
+ case 130:
+ /*
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | 130 (h) | 0 (i) | 2 (j) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Rate [R] (32-bit IEEE floating point number) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Slack Term [S] (32-bit integer) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+ if (parameter_length == 8) {
+ ND_TCHECK_8(tptr + 4);
+ bw.i = GET_BE_U_4(tptr + 4);
+ ND_PRINT("\n\t\tRate: %.10g Mbps", bw.f / 125000);
+ ND_PRINT("\n\t\tSlack Term: %u", GET_BE_U_4(tptr + 8));
+ }
+ break;
+
+ case 133:
+ case 134:
+ case 135:
+ case 136:
+ if (parameter_length == 4) {
+ ND_PRINT("\n\t\tValue: %u", GET_BE_U_4(tptr + 4));
+ }
+ break;
+
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, tptr + 4, "\n\t\t", parameter_length);
+ }
+ return (parameter_length+4); /* header length 4 bytes */
+
+trunc:
+ nd_print_trunc(ndo);
+ return 0;
+}
+
+/*
+ * Clear checksum prior to signature verification.
+ */
+static void
+rsvp_clear_checksum(void *header)
+{
+ struct rsvp_common_header *rsvp_com_header = (struct rsvp_common_header *) header;
+
+ rsvp_com_header->checksum[0] = 0;
+ rsvp_com_header->checksum[1] = 0;
+}
+
+static int
+rsvp_obj_print(netdissect_options *ndo,
+ const u_char *pptr, u_int plen, const u_char *tptr,
+ const char *indent, u_int tlen,
+ const struct rsvp_common_header *rsvp_com_header)
+{
+ const struct rsvp_object_header *rsvp_obj_header;
+ const u_char *obj_tptr;
+ union {
+ const struct rsvp_obj_integrity_t *rsvp_obj_integrity;
+ const struct rsvp_obj_frr_t *rsvp_obj_frr;
+ } obj_ptr;
+
+ u_short rsvp_obj_len,rsvp_obj_ctype,rsvp_obj_class_num;
+ u_int obj_tlen,intserv_serv_tlen;
+ int hexdump;
+ u_int processed,padbytes,error_code,error_value,i,sigcheck;
+ union {
+ float f;
+ uint32_t i;
+ } bw;
+ u_int namelen;
+
+ u_int action, subchannel;
+
+ while(tlen>=sizeof(struct rsvp_object_header)) {
+ /* did we capture enough for fully decoding the object header ? */
+ ND_TCHECK_LEN(tptr, sizeof(struct rsvp_object_header));
+
+ rsvp_obj_header = (const struct rsvp_object_header *)tptr;
+ rsvp_obj_len=GET_BE_U_2(rsvp_obj_header->length);
+ rsvp_obj_ctype=GET_U_1(rsvp_obj_header->ctype);
+
+ if(rsvp_obj_len % 4) {
+ ND_PRINT("%sERROR: object header size %u not a multiple of 4", indent, rsvp_obj_len);
+ return -1;
+ }
+ if(rsvp_obj_len < sizeof(struct rsvp_object_header)) {
+ ND_PRINT("%sERROR: object header too short %u < %zu", indent, rsvp_obj_len,
+ sizeof(struct rsvp_object_header));
+ return -1;
+ }
+
+ rsvp_obj_class_num = GET_U_1(rsvp_obj_header->class_num);
+ ND_PRINT("%s%s Object (%u) Flags: [%s",
+ indent,
+ tok2str(rsvp_obj_values,
+ "Unknown",
+ rsvp_obj_class_num),
+ rsvp_obj_class_num,
+ (rsvp_obj_class_num & 0x80) ?
+ ((rsvp_obj_class_num & 0x40) ? "ignore and forward" :
+ "ignore silently") :
+ "reject");
+
+ ND_PRINT(" if unknown], Class-Type: %s (%u), length: %u",
+ tok2str(rsvp_ctype_values,
+ "Unknown",
+ (rsvp_obj_class_num<<8)+rsvp_obj_ctype),
+ rsvp_obj_ctype,
+ rsvp_obj_len);
+
+ if(tlen < rsvp_obj_len) {
+ ND_PRINT("%sERROR: object goes past end of objects TLV", indent);
+ return -1;
+ }
+
+ obj_tptr=tptr+sizeof(struct rsvp_object_header);
+ obj_tlen=rsvp_obj_len-sizeof(struct rsvp_object_header);
+
+ /* did we capture enough for fully decoding the object ? */
+ ND_TCHECK_LEN(tptr, rsvp_obj_len);
+ hexdump=FALSE;
+
+ switch(rsvp_obj_class_num) {
+ case RSVP_OBJ_SESSION:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_IPV4:
+ if (obj_tlen < 8)
+ goto obj_tooshort;
+ ND_PRINT("%s IPv4 DestAddress: %s, Protocol ID: 0x%02x",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_U_1(obj_tptr + sizeof(nd_ipv4)));
+ ND_PRINT("%s Flags: [0x%02x], DestPort %u",
+ indent,
+ GET_U_1((obj_tptr + 5)),
+ GET_BE_U_2(obj_tptr + 6));
+ obj_tlen-=8;
+ obj_tptr+=8;
+ break;
+ case RSVP_CTYPE_IPV6:
+ if (obj_tlen < 20)
+ goto obj_tooshort;
+ ND_PRINT("%s IPv6 DestAddress: %s, Protocol ID: 0x%02x",
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr),
+ GET_U_1(obj_tptr + sizeof(nd_ipv6)));
+ ND_PRINT("%s Flags: [0x%02x], DestPort %u",
+ indent,
+ GET_U_1((obj_tptr + sizeof(nd_ipv6) + 1)),
+ GET_BE_U_2(obj_tptr + sizeof(nd_ipv6) + 2));
+ obj_tlen-=20;
+ obj_tptr+=20;
+ break;
+
+ case RSVP_CTYPE_TUNNEL_IPV6:
+ if (obj_tlen < 36)
+ goto obj_tooshort;
+ ND_PRINT("%s IPv6 Tunnel EndPoint: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s",
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 18),
+ GET_IP6ADDR_STRING(obj_tptr + 20));
+ obj_tlen-=36;
+ obj_tptr+=36;
+ break;
+
+ case RSVP_CTYPE_14: /* IPv6 p2mp LSP Tunnel */
+ if (obj_tlen < 26)
+ goto obj_tooshort;
+ ND_PRINT("%s IPv6 P2MP LSP ID: 0x%08x, Tunnel ID: 0x%04x, Extended Tunnel ID: %s",
+ indent,
+ GET_BE_U_4(obj_tptr),
+ GET_BE_U_2(obj_tptr + 6),
+ GET_IP6ADDR_STRING(obj_tptr + 8));
+ obj_tlen-=26;
+ obj_tptr+=26;
+ break;
+ case RSVP_CTYPE_13: /* IPv4 p2mp LSP Tunnel */
+ if (obj_tlen < 12)
+ goto obj_tooshort;
+ ND_PRINT("%s IPv4 P2MP LSP ID: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 6),
+ GET_IPADDR_STRING(obj_tptr + 8));
+ obj_tlen-=12;
+ obj_tptr+=12;
+ break;
+ case RSVP_CTYPE_TUNNEL_IPV4:
+ case RSVP_CTYPE_UNI_IPV4:
+ if (obj_tlen < 12)
+ goto obj_tooshort;
+ ND_PRINT("%s IPv4 Tunnel EndPoint: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 6),
+ GET_IPADDR_STRING(obj_tptr + 8));
+ obj_tlen-=12;
+ obj_tptr+=12;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_CONFIRM:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_IPV4:
+ if (obj_tlen < sizeof(nd_ipv4))
+ goto obj_tooshort;
+ ND_PRINT("%s IPv4 Receiver Address: %s",
+ indent,
+ GET_IPADDR_STRING(obj_tptr));
+ obj_tlen-=sizeof(nd_ipv4);
+ obj_tptr+=sizeof(nd_ipv4);
+ break;
+ case RSVP_CTYPE_IPV6:
+ if (obj_tlen < sizeof(nd_ipv6))
+ goto obj_tooshort;
+ ND_PRINT("%s IPv6 Receiver Address: %s",
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr));
+ obj_tlen-=sizeof(nd_ipv6);
+ obj_tptr+=sizeof(nd_ipv6);
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_NOTIFY_REQ:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_IPV4:
+ if (obj_tlen < sizeof(nd_ipv4))
+ goto obj_tooshort;
+ ND_PRINT("%s IPv4 Notify Node Address: %s",
+ indent,
+ GET_IPADDR_STRING(obj_tptr));
+ obj_tlen-=sizeof(nd_ipv4);
+ obj_tptr+=sizeof(nd_ipv4);
+ break;
+ case RSVP_CTYPE_IPV6:
+ if (obj_tlen < sizeof(nd_ipv6))
+ goto obj_tooshort;
+ ND_PRINT("%s IPv6 Notify Node Address: %s",
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr));
+ obj_tlen-=sizeof(nd_ipv6);
+ obj_tptr+=sizeof(nd_ipv6);
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_SUGGESTED_LABEL: /* fall through */
+ case RSVP_OBJ_UPSTREAM_LABEL: /* fall through */
+ case RSVP_OBJ_RECOVERY_LABEL: /* fall through */
+ case RSVP_OBJ_LABEL:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ while(obj_tlen >= 4 ) {
+ ND_PRINT("%s Label: %u", indent, GET_BE_U_4(obj_tptr));
+ obj_tlen-=4;
+ obj_tptr+=4;
+ }
+ break;
+ case RSVP_CTYPE_2:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ ND_PRINT("%s Generalized Label: %u",
+ indent,
+ GET_BE_U_4(obj_tptr));
+ obj_tlen-=4;
+ obj_tptr+=4;
+ break;
+ case RSVP_CTYPE_3:
+ if (obj_tlen < 12)
+ goto obj_tooshort;
+ ND_PRINT("%s Waveband ID: %u%s Start Label: %u, Stop Label: %u",
+ indent,
+ GET_BE_U_4(obj_tptr),
+ indent,
+ GET_BE_U_4(obj_tptr + 4),
+ GET_BE_U_4(obj_tptr + 8));
+ obj_tlen-=12;
+ obj_tptr+=12;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_STYLE:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ ND_PRINT("%s Reservation Style: %s, Flags: [0x%02x]",
+ indent,
+ tok2str(rsvp_resstyle_values,
+ "Unknown",
+ GET_BE_U_3(obj_tptr + 1)),
+ GET_U_1(obj_tptr));
+ obj_tlen-=4;
+ obj_tptr+=4;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_SENDER_TEMPLATE:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_IPV4:
+ if (obj_tlen < 8)
+ goto obj_tooshort;
+ ND_PRINT("%s Source Address: %s, Source Port: %u",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 6));
+ obj_tlen-=8;
+ obj_tptr+=8;
+ break;
+ case RSVP_CTYPE_IPV6:
+ if (obj_tlen < 20)
+ goto obj_tooshort;
+ ND_PRINT("%s Source Address: %s, Source Port: %u",
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 18));
+ obj_tlen-=20;
+ obj_tptr+=20;
+ break;
+ case RSVP_CTYPE_13: /* IPv6 p2mp LSP tunnel */
+ if (obj_tlen < 40)
+ goto obj_tooshort;
+ ND_PRINT("%s IPv6 Tunnel Sender Address: %s, LSP ID: 0x%04x"
+ "%s Sub-Group Originator ID: %s, Sub-Group ID: 0x%04x",
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 18),
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr+20),
+ GET_BE_U_2(obj_tptr + 38));
+ obj_tlen-=40;
+ obj_tptr+=40;
+ break;
+ case RSVP_CTYPE_TUNNEL_IPV4:
+ if (obj_tlen < 8)
+ goto obj_tooshort;
+ ND_PRINT("%s IPv4 Tunnel Sender Address: %s, LSP-ID: 0x%04x",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 6));
+ obj_tlen-=8;
+ obj_tptr+=8;
+ break;
+ case RSVP_CTYPE_12: /* IPv4 p2mp LSP tunnel */
+ if (obj_tlen < 16)
+ goto obj_tooshort;
+ ND_PRINT("%s IPv4 Tunnel Sender Address: %s, LSP ID: 0x%04x"
+ "%s Sub-Group Originator ID: %s, Sub-Group ID: 0x%04x",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 6),
+ indent,
+ GET_IPADDR_STRING(obj_tptr+8),
+ GET_BE_U_2(obj_tptr + 12));
+ obj_tlen-=16;
+ obj_tptr+=16;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_LABEL_REQ:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ while(obj_tlen >= 4 ) {
+ ND_PRINT("%s L3 Protocol ID: %s",
+ indent,
+ tok2str(ethertype_values,
+ "Unknown Protocol (0x%04x)",
+ GET_BE_U_2(obj_tptr + 2)));
+ obj_tlen-=4;
+ obj_tptr+=4;
+ }
+ break;
+ case RSVP_CTYPE_2:
+ if (obj_tlen < 12)
+ goto obj_tooshort;
+ ND_PRINT("%s L3 Protocol ID: %s",
+ indent,
+ tok2str(ethertype_values,
+ "Unknown Protocol (0x%04x)",
+ GET_BE_U_2(obj_tptr + 2)));
+ ND_PRINT(",%s merge capability",
+ ((GET_U_1(obj_tptr + 4)) & 0x80) ? "no" : "" );
+ ND_PRINT("%s Minimum VPI/VCI: %u/%u",
+ indent,
+ (GET_BE_U_2(obj_tptr + 4))&0xfff,
+ (GET_BE_U_2(obj_tptr + 6)) & 0xfff);
+ ND_PRINT("%s Maximum VPI/VCI: %u/%u",
+ indent,
+ (GET_BE_U_2(obj_tptr + 8))&0xfff,
+ (GET_BE_U_2(obj_tptr + 10)) & 0xfff);
+ obj_tlen-=12;
+ obj_tptr+=12;
+ break;
+ case RSVP_CTYPE_3:
+ if (obj_tlen < 12)
+ goto obj_tooshort;
+ ND_PRINT("%s L3 Protocol ID: %s",
+ indent,
+ tok2str(ethertype_values,
+ "Unknown Protocol (0x%04x)",
+ GET_BE_U_2(obj_tptr + 2)));
+ ND_PRINT("%s Minimum/Maximum DLCI: %u/%u, %s%s bit DLCI",
+ indent,
+ (GET_BE_U_4(obj_tptr + 4))&0x7fffff,
+ (GET_BE_U_4(obj_tptr + 8))&0x7fffff,
+ (((GET_BE_U_2(obj_tptr + 4)>>7)&3) == 0 ) ? "10" : "",
+ (((GET_BE_U_2(obj_tptr + 4) >> 7) & 3) == 2 ) ? "23" : "");
+ obj_tlen-=12;
+ obj_tptr+=12;
+ break;
+ case RSVP_CTYPE_4:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ ND_PRINT("%s LSP Encoding Type: %s (%u)",
+ indent,
+ tok2str(gmpls_encoding_values,
+ "Unknown",
+ GET_U_1(obj_tptr)),
+ GET_U_1(obj_tptr));
+ ND_PRINT("%s Switching Type: %s (%u), Payload ID: %s (0x%04x)",
+ indent,
+ tok2str(gmpls_switch_cap_values,
+ "Unknown",
+ GET_U_1((obj_tptr + 1))),
+ GET_U_1(obj_tptr + 1),
+ tok2str(gmpls_payload_values,
+ "Unknown",
+ GET_BE_U_2(obj_tptr + 2)),
+ GET_BE_U_2(obj_tptr + 2));
+ obj_tlen-=4;
+ obj_tptr+=4;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_RRO:
+ case RSVP_OBJ_ERO:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_IPV4:
+ while(obj_tlen >= 4 ) {
+ u_char length;
+
+ ND_TCHECK_4(obj_tptr);
+ length = GET_U_1(obj_tptr + 1);
+ ND_PRINT("%s Subobject Type: %s, length %u",
+ indent,
+ tok2str(rsvp_obj_xro_values,
+ "Unknown %u",
+ RSVP_OBJ_XRO_MASK_SUBOBJ(GET_U_1(obj_tptr))),
+ length);
+ if (obj_tlen < length) {
+ ND_PRINT("%s ERROR: ERO subobject length > object length", indent);
+ break;
+ }
+
+ if (length == 0) { /* prevent infinite loops */
+ ND_PRINT("%s ERROR: zero length ERO subtype", indent);
+ break;
+ }
+
+ switch(RSVP_OBJ_XRO_MASK_SUBOBJ(GET_U_1(obj_tptr))) {
+ u_char prefix_length;
+
+ case RSVP_OBJ_XRO_IPV4:
+ if (length != 8) {
+ ND_PRINT(" ERROR: length != 8");
+ goto invalid;
+ }
+ ND_TCHECK_8(obj_tptr);
+ prefix_length = GET_U_1(obj_tptr + 6);
+ if (prefix_length != 32) {
+ ND_PRINT(" ERROR: Prefix length %u != 32",
+ prefix_length);
+ goto invalid;
+ }
+ ND_PRINT(", %s, %s/%u, Flags: [%s]",
+ RSVP_OBJ_XRO_MASK_LOOSE(GET_U_1(obj_tptr)) ? "Loose" : "Strict",
+ GET_IPADDR_STRING(obj_tptr+2),
+ GET_U_1((obj_tptr + 6)),
+ bittok2str(rsvp_obj_rro_flag_values,
+ "none",
+ GET_U_1((obj_tptr + 7)))); /* rfc3209 says that this field is rsvd. */
+ break;
+ case RSVP_OBJ_XRO_LABEL:
+ if (length != 8) {
+ ND_PRINT(" ERROR: length != 8");
+ goto invalid;
+ }
+ ND_TCHECK_8(obj_tptr);
+ ND_PRINT(", Flags: [%s] (%#x), Class-Type: %s (%u), %u",
+ bittok2str(rsvp_obj_rro_label_flag_values,
+ "none",
+ GET_U_1((obj_tptr + 2))),
+ GET_U_1(obj_tptr + 2),
+ tok2str(rsvp_ctype_values,
+ "Unknown",
+ GET_U_1((obj_tptr + 3)) + (256 * RSVP_OBJ_RRO)),
+ GET_U_1((obj_tptr + 3)),
+ GET_BE_U_4(obj_tptr + 4));
+ }
+ obj_tlen-=length;
+ obj_tptr+=length;
+ }
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_HELLO:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ case RSVP_CTYPE_2:
+ if (obj_tlen < 8)
+ goto obj_tooshort;
+ ND_PRINT("%s Source Instance: 0x%08x, Destination Instance: 0x%08x",
+ indent,
+ GET_BE_U_4(obj_tptr),
+ GET_BE_U_4(obj_tptr + 4));
+ obj_tlen-=8;
+ obj_tptr+=8;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_RESTART_CAPABILITY:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ if (obj_tlen < 8)
+ goto obj_tooshort;
+ ND_PRINT("%s Restart Time: %ums, Recovery Time: %ums",
+ indent,
+ GET_BE_U_4(obj_tptr),
+ GET_BE_U_4(obj_tptr + 4));
+ obj_tlen-=8;
+ obj_tptr+=8;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_CAPABILITY:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ uint32_t unused_and_flags = GET_BE_U_4(obj_tptr);
+ if (unused_and_flags & ~RSVP_OBJ_CAPABILITY_FLAGS_MASK)
+ ND_PRINT("%s [reserved=0x%08x must be zero]", indent,
+ unused_and_flags & ~RSVP_OBJ_CAPABILITY_FLAGS_MASK);
+ ND_PRINT("%s Flags: [%s]",
+ indent,
+ bittok2str(rsvp_obj_capability_flag_values,
+ "none",
+ (unused_and_flags & RSVP_OBJ_CAPABILITY_FLAGS_MASK)));
+ obj_tlen-=4;
+ obj_tptr+=4;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_SESSION_ATTRIBUTE:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_TUNNEL_IPV4:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ namelen = GET_U_1(obj_tptr + 3);
+ if (obj_tlen < 4+namelen)
+ goto obj_tooshort;
+ ND_PRINT("%s Session Name: ", indent);
+ for (i = 0; i < namelen; i++)
+ fn_print_char(ndo, GET_U_1(obj_tptr + 4 + i));
+ ND_PRINT("%s Setup Priority: %u, Holding Priority: %u, Flags: [%s] (%#x)",
+ indent,
+ GET_U_1(obj_tptr),
+ GET_U_1(obj_tptr + 1),
+ bittok2str(rsvp_session_attribute_flag_values,
+ "none",
+ GET_U_1((obj_tptr + 2))),
+ GET_U_1(obj_tptr + 2));
+ obj_tlen-=4+namelen;
+ obj_tptr+=4+namelen;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_GENERALIZED_UNI:
+ switch(rsvp_obj_ctype) {
+ u_int subobj_type,af,subobj_len,total_subobj_len;
+
+ case RSVP_CTYPE_1:
+
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+
+ /* read variable length subobjects */
+ total_subobj_len = obj_tlen;
+ while(total_subobj_len > 0) {
+ /* If RFC 3476 Section 3.1 defined that a sub-object of the
+ * GENERALIZED_UNI RSVP object must have the Length field as
+ * a multiple of 4, instead of the check below it would be
+ * better to test total_subobj_len only once before the loop.
+ * So long as it does not define it and this while loop does
+ * not implement such a requirement, let's accept that within
+ * each iteration subobj_len may happen to be a multiple of 1
+ * and test it and total_subobj_len respectively.
+ */
+ if (total_subobj_len < 4)
+ goto invalid;
+ subobj_len = GET_BE_U_2(obj_tptr);
+ subobj_type = (GET_BE_U_2(obj_tptr + 2))>>8;
+ af = (GET_BE_U_2(obj_tptr + 2))&0x00FF;
+
+ ND_PRINT("%s Subobject Type: %s (%u), AF: %s (%u), length: %u",
+ indent,
+ tok2str(rsvp_obj_generalized_uni_values, "Unknown", subobj_type),
+ subobj_type,
+ tok2str(af_values, "Unknown", af), af,
+ subobj_len);
+
+ /* In addition to what is explained above, the same spec does not
+ * explicitly say that the same Length field includes the 4-octet
+ * sub-object header, but as long as this while loop implements it
+ * as it does include, let's keep the check below consistent with
+ * the rest of the code.
+ *
+ * XXX - RFC 3476 Section 3.1 says "The contents of these
+ * sub-objects are described in [8]", where [8] is
+ * UNI 1.0 Signaling Specification, The Optical
+ * Internetworking Forum. The URL they give for that
+ * document is
+ *
+ * http://www.oiforum.com/public/UNI_1.0_ia.html
+ *
+ * but that doesn't work; the new URL appears to be
+ *
+ * https://web.archive.org/web/20160401194747/http://www.oiforum.com/public/documents/OIF-UNI-01.0.pdf
+ *
+ * and *that* document, in section 12.5.2.3
+ * "GENERALIZED_UNI Object (Class-Num=11bbbbbb (TBA))",
+ * says nothing about the length field in general, but
+ * some of the examples it gives in subsections have
+ * length field values that clearly includes the length
+ * of the sub-object header as well as the length of the
+ * value.
+ */
+ if(subobj_len < 4 || subobj_len > total_subobj_len ||
+ obj_tlen < subobj_len)
+ goto invalid;
+
+ switch(subobj_type) {
+ case RSVP_GEN_UNI_SUBOBJ_SOURCE_TNA_ADDRESS:
+ case RSVP_GEN_UNI_SUBOBJ_DESTINATION_TNA_ADDRESS:
+
+ switch(af) {
+ case AFNUM_INET:
+ if (subobj_len < 8)
+ goto subobj_tooshort;
+ ND_PRINT("%s UNI IPv4 TNA address: %s",
+ indent, GET_IPADDR_STRING(obj_tptr + 4));
+ break;
+ case AFNUM_INET6:
+ if (subobj_len < 20)
+ goto subobj_tooshort;
+ ND_PRINT("%s UNI IPv6 TNA address: %s",
+ indent, GET_IP6ADDR_STRING(obj_tptr + 4));
+ break;
+ case AFNUM_NSAP:
+ if (subobj_len) {
+ /* unless we have a TLV parser lets just hexdump */
+ hexdump=TRUE;
+ }
+ break;
+ }
+ break;
+
+ case RSVP_GEN_UNI_SUBOBJ_DIVERSITY:
+ if (subobj_len > 4) {
+ /* unless we have a TLV parser lets just hexdump */
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_GEN_UNI_SUBOBJ_EGRESS_LABEL:
+ if (subobj_len < 16) {
+ goto subobj_tooshort;
+ }
+
+ ND_PRINT("%s U-bit: %x, Label type: %u, Logical port id: %u, Label: %u",
+ indent,
+ ((GET_BE_U_4(obj_tptr + 4))>>31),
+ ((GET_BE_U_4(obj_tptr + 4))&0xFF),
+ GET_BE_U_4(obj_tptr + 8),
+ GET_BE_U_4(obj_tptr + 12));
+ break;
+
+ case RSVP_GEN_UNI_SUBOBJ_SERVICE_LEVEL:
+ if (subobj_len < 8) {
+ goto subobj_tooshort;
+ }
+
+ ND_PRINT("%s Service level: %u",
+ indent, (GET_BE_U_4(obj_tptr + 4)) >> 24);
+ break;
+
+ default:
+ hexdump=TRUE;
+ break;
+ }
+ total_subobj_len-=subobj_len;
+ obj_tptr+=subobj_len;
+ obj_tlen+=subobj_len;
+ }
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_RSVP_HOP:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_3: /* fall through - FIXME add TLV parser */
+ case RSVP_CTYPE_IPV4:
+ if (obj_tlen < 8)
+ goto obj_tooshort;
+ ND_PRINT("%s Previous/Next Interface: %s, Logical Interface Handle: 0x%08x",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_BE_U_4(obj_tptr + 4));
+ obj_tlen-=8;
+ obj_tptr+=8;
+ if (obj_tlen)
+ hexdump=TRUE; /* unless we have a TLV parser lets just hexdump */
+ break;
+ case RSVP_CTYPE_4: /* fall through - FIXME add TLV parser */
+ case RSVP_CTYPE_IPV6:
+ if (obj_tlen < 20)
+ goto obj_tooshort;
+ ND_PRINT("%s Previous/Next Interface: %s, Logical Interface Handle: 0x%08x",
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr),
+ GET_BE_U_4(obj_tptr + 16));
+ obj_tlen-=20;
+ obj_tptr+=20;
+ hexdump=TRUE; /* unless we have a TLV parser lets just hexdump */
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_TIME_VALUES:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ ND_PRINT("%s Refresh Period: %ums",
+ indent,
+ GET_BE_U_4(obj_tptr));
+ obj_tlen-=4;
+ obj_tptr+=4;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ /* those three objects do share the same semantics */
+ case RSVP_OBJ_SENDER_TSPEC:
+ case RSVP_OBJ_ADSPEC:
+ case RSVP_OBJ_FLOWSPEC:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_2:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ ND_PRINT("%s Msg-Version: %u, length: %u",
+ indent,
+ (GET_U_1(obj_tptr) & 0xf0) >> 4,
+ GET_BE_U_2(obj_tptr + 2) << 2);
+ obj_tptr+=4; /* get to the start of the service header */
+ obj_tlen-=4;
+
+ while (obj_tlen >= 4) {
+ intserv_serv_tlen=GET_BE_U_2(obj_tptr + 2)<<2;
+ ND_PRINT("%s Service Type: %s (%u), break bit %sset, Service length: %u",
+ indent,
+ tok2str(rsvp_intserv_service_type_values,"unknown",GET_U_1((obj_tptr))),
+ GET_U_1(obj_tptr),
+ (GET_U_1(obj_tptr + 1)&0x80) ? "" : "not ",
+ intserv_serv_tlen);
+
+ obj_tptr+=4; /* get to the start of the parameter list */
+ obj_tlen-=4;
+
+ while (intserv_serv_tlen>=4) {
+ processed = rsvp_intserv_print(ndo, obj_tptr, obj_tlen);
+ if (processed == 0)
+ break;
+ obj_tlen-=processed;
+ intserv_serv_tlen-=processed;
+ obj_tptr+=processed;
+ }
+ }
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_FILTERSPEC:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_IPV4:
+ if (obj_tlen < 8)
+ goto obj_tooshort;
+ ND_PRINT("%s Source Address: %s, Source Port: %u",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 6));
+ obj_tlen-=8;
+ obj_tptr+=8;
+ break;
+ case RSVP_CTYPE_IPV6:
+ if (obj_tlen < 20)
+ goto obj_tooshort;
+ ND_PRINT("%s Source Address: %s, Source Port: %u",
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 18));
+ obj_tlen-=20;
+ obj_tptr+=20;
+ break;
+ case RSVP_CTYPE_3:
+ if (obj_tlen < 20)
+ goto obj_tooshort;
+ ND_PRINT("%s Source Address: %s, Flow Label: %u",
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr),
+ GET_BE_U_3(obj_tptr + 17));
+ obj_tlen-=20;
+ obj_tptr+=20;
+ break;
+ case RSVP_CTYPE_TUNNEL_IPV6:
+ if (obj_tlen < 20)
+ goto obj_tooshort;
+ ND_PRINT("%s Source Address: %s, LSP-ID: 0x%04x",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 18));
+ obj_tlen-=20;
+ obj_tptr+=20;
+ break;
+ case RSVP_CTYPE_13: /* IPv6 p2mp LSP tunnel */
+ if (obj_tlen < 40)
+ goto obj_tooshort;
+ ND_PRINT("%s IPv6 Tunnel Sender Address: %s, LSP ID: 0x%04x"
+ "%s Sub-Group Originator ID: %s, Sub-Group ID: 0x%04x",
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 18),
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr+20),
+ GET_BE_U_2(obj_tptr + 38));
+ obj_tlen-=40;
+ obj_tptr+=40;
+ break;
+ case RSVP_CTYPE_TUNNEL_IPV4:
+ if (obj_tlen < 8)
+ goto obj_tooshort;
+ ND_PRINT("%s Source Address: %s, LSP-ID: 0x%04x",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 6));
+ obj_tlen-=8;
+ obj_tptr+=8;
+ break;
+ case RSVP_CTYPE_12: /* IPv4 p2mp LSP tunnel */
+ if (obj_tlen < 16)
+ goto obj_tooshort;
+ ND_PRINT("%s IPv4 Tunnel Sender Address: %s, LSP ID: 0x%04x"
+ "%s Sub-Group Originator ID: %s, Sub-Group ID: 0x%04x",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_BE_U_2(obj_tptr + 6),
+ indent,
+ GET_IPADDR_STRING(obj_tptr+8),
+ GET_BE_U_2(obj_tptr + 12));
+ obj_tlen-=16;
+ obj_tptr+=16;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_FASTREROUTE:
+ /* the differences between c-type 1 and 7 are minor */
+ obj_ptr.rsvp_obj_frr = (const struct rsvp_obj_frr_t *)obj_tptr;
+
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1: /* new style */
+ if (obj_tlen < sizeof(struct rsvp_obj_frr_t))
+ goto obj_tooshort;
+ bw.i = GET_BE_U_4(obj_ptr.rsvp_obj_frr->bandwidth);
+ ND_PRINT("%s Setup Priority: %u, Holding Priority: %u, Hop-limit: %u, Bandwidth: %.10g Mbps",
+ indent,
+ obj_ptr.rsvp_obj_frr->setup_prio,
+ obj_ptr.rsvp_obj_frr->hold_prio,
+ obj_ptr.rsvp_obj_frr->hop_limit,
+ bw.f * 8 / 1000000);
+ ND_PRINT("%s Include-any: 0x%08x, Exclude-any: 0x%08x, Include-all: 0x%08x",
+ indent,
+ GET_BE_U_4(obj_ptr.rsvp_obj_frr->include_any),
+ GET_BE_U_4(obj_ptr.rsvp_obj_frr->exclude_any),
+ GET_BE_U_4(obj_ptr.rsvp_obj_frr->include_all));
+ obj_tlen-=sizeof(struct rsvp_obj_frr_t);
+ obj_tptr+=sizeof(struct rsvp_obj_frr_t);
+ break;
+
+ case RSVP_CTYPE_TUNNEL_IPV4: /* old style */
+ if (obj_tlen < 16)
+ goto obj_tooshort;
+ bw.i = GET_BE_U_4(obj_ptr.rsvp_obj_frr->bandwidth);
+ ND_PRINT("%s Setup Priority: %u, Holding Priority: %u, Hop-limit: %u, Bandwidth: %.10g Mbps",
+ indent,
+ obj_ptr.rsvp_obj_frr->setup_prio,
+ obj_ptr.rsvp_obj_frr->hold_prio,
+ obj_ptr.rsvp_obj_frr->hop_limit,
+ bw.f * 8 / 1000000);
+ ND_PRINT("%s Include Colors: 0x%08x, Exclude Colors: 0x%08x",
+ indent,
+ GET_BE_U_4(obj_ptr.rsvp_obj_frr->include_any),
+ GET_BE_U_4(obj_ptr.rsvp_obj_frr->exclude_any));
+ obj_tlen-=16;
+ obj_tptr+=16;
+ break;
+
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_DETOUR:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_TUNNEL_IPV4:
+ while(obj_tlen >= 8) {
+ ND_PRINT("%s PLR-ID: %s, Avoid-Node-ID: %s",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_IPADDR_STRING(obj_tptr + 4));
+ obj_tlen-=8;
+ obj_tptr+=8;
+ }
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_CLASSTYPE:
+ case RSVP_OBJ_CLASSTYPE_OLD: /* fall through */
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ ND_PRINT("%s CT: %u",
+ indent,
+ GET_BE_U_4(obj_tptr) & 0x7);
+ obj_tlen-=4;
+ obj_tptr+=4;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_ERROR_SPEC:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_3: /* fall through - FIXME add TLV parser */
+ case RSVP_CTYPE_IPV4:
+ if (obj_tlen < 8)
+ goto obj_tooshort;
+ error_code=GET_U_1(obj_tptr + 5);
+ error_value=GET_BE_U_2(obj_tptr + 6);
+ ND_PRINT("%s Error Node Address: %s, Flags: [0x%02x]%s Error Code: %s (%u)",
+ indent,
+ GET_IPADDR_STRING(obj_tptr),
+ GET_U_1(obj_tptr + 4),
+ indent,
+ tok2str(rsvp_obj_error_code_values,"unknown",error_code),
+ error_code);
+ switch (error_code) {
+ case RSVP_OBJ_ERROR_SPEC_CODE_ROUTING:
+ ND_PRINT(", Error Value: %s (%u)",
+ tok2str(rsvp_obj_error_code_routing_values,"unknown",error_value),
+ error_value);
+ break;
+ case RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE: /* fall through */
+ case RSVP_OBJ_ERROR_SPEC_CODE_DIFFSERV_TE_OLD:
+ ND_PRINT(", Error Value: %s (%u)",
+ tok2str(rsvp_obj_error_code_diffserv_te_values,"unknown",error_value),
+ error_value);
+ break;
+ default:
+ ND_PRINT(", Unknown Error Value (%u)", error_value);
+ break;
+ }
+ obj_tlen-=8;
+ obj_tptr+=8;
+ break;
+ case RSVP_CTYPE_4: /* fall through - FIXME add TLV parser */
+ case RSVP_CTYPE_IPV6:
+ if (obj_tlen < 20)
+ goto obj_tooshort;
+ error_code=GET_U_1(obj_tptr + 17);
+ error_value=GET_BE_U_2(obj_tptr + 18);
+ ND_PRINT("%s Error Node Address: %s, Flags: [0x%02x]%s Error Code: %s (%u)",
+ indent,
+ GET_IP6ADDR_STRING(obj_tptr),
+ GET_U_1(obj_tptr + 16),
+ indent,
+ tok2str(rsvp_obj_error_code_values,"unknown",error_code),
+ error_code);
+
+ switch (error_code) {
+ case RSVP_OBJ_ERROR_SPEC_CODE_ROUTING:
+ ND_PRINT(", Error Value: %s (%u)",
+ tok2str(rsvp_obj_error_code_routing_values,"unknown",error_value),
+ error_value);
+ break;
+ default:
+ break;
+ }
+ obj_tlen-=20;
+ obj_tptr+=20;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_PROPERTIES:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ padbytes = GET_BE_U_2(obj_tptr + 2);
+ ND_PRINT("%s TLV count: %u, padding bytes: %u",
+ indent,
+ GET_BE_U_2(obj_tptr),
+ padbytes);
+ obj_tlen-=4;
+ obj_tptr+=4;
+ /* loop through as long there is anything longer than the TLV header (2) */
+ while(obj_tlen >= 2 + padbytes) {
+ ND_PRINT("%s %s TLV (0x%02x), length: %u", /* length includes header */
+ indent,
+ tok2str(rsvp_obj_prop_tlv_values,"unknown",GET_U_1(obj_tptr)),
+ GET_U_1(obj_tptr),
+ GET_U_1(obj_tptr + 1));
+ if (obj_tlen < GET_U_1(obj_tptr + 1))
+ goto obj_tooshort;
+ if (GET_U_1(obj_tptr + 1) < 2) {
+ ND_PRINT("%sERROR: property TLV is too short", indent);
+ return -1;
+ }
+ print_unknown_data(ndo, obj_tptr + 2, "\n\t\t",
+ GET_U_1(obj_tptr + 1) - 2);
+ obj_tlen-=GET_U_1(obj_tptr + 1);
+ obj_tptr+=GET_U_1(obj_tptr + 1);
+ }
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_MESSAGE_ID: /* fall through */
+ case RSVP_OBJ_MESSAGE_ID_ACK: /* fall through */
+ case RSVP_OBJ_MESSAGE_ID_LIST:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ case RSVP_CTYPE_2:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ ND_PRINT("%s Flags [0x%02x], epoch: %u",
+ indent,
+ GET_U_1(obj_tptr),
+ GET_BE_U_3(obj_tptr + 1));
+ obj_tlen-=4;
+ obj_tptr+=4;
+ /* loop through as long there are no messages left */
+ while(obj_tlen >= 4) {
+ ND_PRINT("%s Message-ID 0x%08x (%u)",
+ indent,
+ GET_BE_U_4(obj_tptr),
+ GET_BE_U_4(obj_tptr));
+ obj_tlen-=4;
+ obj_tptr+=4;
+ }
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_INTEGRITY:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ if (obj_tlen < sizeof(struct rsvp_obj_integrity_t))
+ goto obj_tooshort;
+ obj_ptr.rsvp_obj_integrity = (const struct rsvp_obj_integrity_t *)obj_tptr;
+ ND_PRINT("%s Key-ID 0x%04x%08x, Sequence 0x%08x%08x, Flags [%s]",
+ indent,
+ GET_BE_U_2(obj_ptr.rsvp_obj_integrity->key_id),
+ GET_BE_U_4(obj_ptr.rsvp_obj_integrity->key_id + 2),
+ GET_BE_U_4(obj_ptr.rsvp_obj_integrity->sequence),
+ GET_BE_U_4(obj_ptr.rsvp_obj_integrity->sequence + 4),
+ bittok2str(rsvp_obj_integrity_flag_values,
+ "none",
+ obj_ptr.rsvp_obj_integrity->flags));
+ ND_PRINT("%s MD5-sum 0x%08x%08x%08x%08x ",
+ indent,
+ GET_BE_U_4(obj_ptr.rsvp_obj_integrity->digest),
+ GET_BE_U_4(obj_ptr.rsvp_obj_integrity->digest + 4),
+ GET_BE_U_4(obj_ptr.rsvp_obj_integrity->digest + 8),
+ GET_BE_U_4(obj_ptr.rsvp_obj_integrity->digest + 12));
+
+ sigcheck = signature_verify(ndo, pptr, plen,
+ obj_ptr.rsvp_obj_integrity->digest,
+ rsvp_clear_checksum,
+ rsvp_com_header);
+ ND_PRINT(" (%s)", tok2str(signature_check_values, "Unknown", sigcheck));
+
+ obj_tlen+=sizeof(struct rsvp_obj_integrity_t);
+ obj_tptr+=sizeof(struct rsvp_obj_integrity_t);
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_ADMIN_STATUS:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ ND_PRINT("%s Flags [%s]", indent,
+ bittok2str(rsvp_obj_admin_status_flag_values, "none",
+ GET_BE_U_4(obj_tptr)));
+ obj_tlen-=4;
+ obj_tptr+=4;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_LABEL_SET:
+ switch(rsvp_obj_ctype) {
+ case RSVP_CTYPE_1:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ action = (GET_BE_U_2(obj_tptr)>>8);
+
+ ND_PRINT("%s Action: %s (%u), Label type: %u", indent,
+ tok2str(rsvp_obj_label_set_action_values, "Unknown", action),
+ action, (GET_BE_U_4(obj_tptr) & 0x7F));
+
+ switch (action) {
+ case LABEL_SET_INCLUSIVE_RANGE:
+ case LABEL_SET_EXCLUSIVE_RANGE: /* fall through */
+
+ /* only a couple of subchannels are expected */
+ if (obj_tlen < 12)
+ goto obj_tooshort;
+ ND_PRINT("%s Start range: %u, End range: %u", indent,
+ GET_BE_U_4(obj_tptr + 4),
+ GET_BE_U_4(obj_tptr + 8));
+ obj_tlen-=12;
+ obj_tptr+=12;
+ break;
+
+ default:
+ obj_tlen-=4;
+ obj_tptr+=4;
+ subchannel = 1;
+ while(obj_tlen >= 4 ) {
+ ND_PRINT("%s Subchannel #%u: %u", indent, subchannel,
+ GET_BE_U_4(obj_tptr));
+ obj_tptr+=4;
+ obj_tlen-=4;
+ subchannel++;
+ }
+ break;
+ }
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ case RSVP_OBJ_S2L:
+ switch (rsvp_obj_ctype) {
+ case RSVP_CTYPE_IPV4:
+ if (obj_tlen < 4)
+ goto obj_tooshort;
+ ND_PRINT("%s Sub-LSP destination address: %s",
+ indent, GET_IPADDR_STRING(obj_tptr));
+
+ obj_tlen-=4;
+ obj_tptr+=4;
+ break;
+ case RSVP_CTYPE_IPV6:
+ if (obj_tlen < 16)
+ goto obj_tooshort;
+ ND_PRINT("%s Sub-LSP destination address: %s",
+ indent, GET_IP6ADDR_STRING(obj_tptr));
+
+ obj_tlen-=16;
+ obj_tptr+=16;
+ break;
+ default:
+ hexdump=TRUE;
+ }
+ break;
+
+ /*
+ * FIXME those are the defined objects that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+
+ case RSVP_OBJ_SCOPE:
+ case RSVP_OBJ_POLICY_DATA:
+ case RSVP_OBJ_ACCEPT_LABEL_SET:
+ case RSVP_OBJ_PROTECTION:
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, obj_tptr, "\n\t ", obj_tlen); /* FIXME indentation */
+ break;
+ }
+ /* do we also want to see a hex dump ? */
+ if (ndo->ndo_vflag > 1 || hexdump == TRUE)
+ print_unknown_data(ndo, tptr + sizeof(struct rsvp_object_header), "\n\t ", /* FIXME indentation */
+ rsvp_obj_len - sizeof(struct rsvp_object_header));
+
+ tptr+=rsvp_obj_len;
+ tlen-=rsvp_obj_len;
+ }
+ return 0;
+subobj_tooshort:
+ ND_PRINT("%sERROR: sub-object is too short", indent);
+ return -1;
+obj_tooshort:
+ ND_PRINT("%sERROR: object is too short", indent);
+ return -1;
+invalid:
+ nd_print_invalid(ndo);
+ return -1;
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
+
+void
+rsvp_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len)
+{
+ const struct rsvp_common_header *rsvp_com_header;
+ uint8_t version_flags, msg_type;
+ const u_char *tptr;
+ u_short plen, tlen;
+
+ ndo->ndo_protocol = "rsvp";
+ tptr=pptr;
+
+ rsvp_com_header = (const struct rsvp_common_header *)pptr;
+ ND_TCHECK_SIZE(rsvp_com_header);
+ version_flags = GET_U_1(rsvp_com_header->version_flags);
+
+ /*
+ * Sanity checking of the header.
+ */
+ if (RSVP_EXTRACT_VERSION(version_flags) != RSVP_VERSION) {
+ ND_PRINT("ERROR: RSVP version %u packet not supported",
+ RSVP_EXTRACT_VERSION(version_flags));
+ return;
+ }
+
+ msg_type = GET_U_1(rsvp_com_header->msg_type);
+
+ /* in non-verbose mode just lets print the basic Message Type*/
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT("RSVPv%u %s Message, length: %u",
+ RSVP_EXTRACT_VERSION(version_flags),
+ tok2str(rsvp_msg_type_values, "unknown (%u)",msg_type),
+ len);
+ return;
+ }
+
+ /* ok they seem to want to know everything - lets fully decode it */
+
+ plen = tlen = GET_BE_U_2(rsvp_com_header->length);
+
+ ND_PRINT("\n\tRSVPv%u %s Message (%u), Flags: [%s], length: %u, ttl: %u, checksum: 0x%04x",
+ RSVP_EXTRACT_VERSION(version_flags),
+ tok2str(rsvp_msg_type_values, "unknown, type: %u",msg_type),
+ msg_type,
+ bittok2str(rsvp_header_flag_values,"none",RSVP_EXTRACT_FLAGS(version_flags)),
+ tlen,
+ GET_U_1(rsvp_com_header->ttl),
+ GET_BE_U_2(rsvp_com_header->checksum));
+
+ if (tlen < sizeof(struct rsvp_common_header)) {
+ ND_PRINT("ERROR: common header too short %u < %zu", tlen,
+ sizeof(struct rsvp_common_header));
+ return;
+ }
+
+ tptr+=sizeof(struct rsvp_common_header);
+ tlen-=sizeof(struct rsvp_common_header);
+
+ switch(msg_type) {
+
+ case RSVP_MSGTYPE_BUNDLE:
+ /*
+ * Process each submessage in the bundle message.
+ * Bundle messages may not contain bundle submessages, so we don't
+ * need to handle bundle submessages specially.
+ */
+ while(tlen > 0) {
+ const u_char *subpptr=tptr, *subtptr;
+ u_short subplen, subtlen;
+
+ subtptr=subpptr;
+
+ rsvp_com_header = (const struct rsvp_common_header *)subpptr;
+ ND_TCHECK_SIZE(rsvp_com_header);
+ version_flags = GET_U_1(rsvp_com_header->version_flags);
+
+ /*
+ * Sanity checking of the header.
+ */
+ if (RSVP_EXTRACT_VERSION(version_flags) != RSVP_VERSION) {
+ ND_PRINT("ERROR: RSVP version %u packet not supported",
+ RSVP_EXTRACT_VERSION(version_flags));
+ return;
+ }
+
+ subplen = subtlen = GET_BE_U_2(rsvp_com_header->length);
+
+ msg_type = GET_U_1(rsvp_com_header->msg_type);
+ ND_PRINT("\n\t RSVPv%u %s Message (%u), Flags: [%s], length: %u, ttl: %u, checksum: 0x%04x",
+ RSVP_EXTRACT_VERSION(version_flags),
+ tok2str(rsvp_msg_type_values, "unknown, type: %u",msg_type),
+ msg_type,
+ bittok2str(rsvp_header_flag_values,"none",RSVP_EXTRACT_FLAGS(version_flags)),
+ subtlen,
+ GET_U_1(rsvp_com_header->ttl),
+ GET_BE_U_2(rsvp_com_header->checksum));
+
+ if (subtlen < sizeof(struct rsvp_common_header)) {
+ ND_PRINT("ERROR: common header too short %u < %zu", subtlen,
+ sizeof(struct rsvp_common_header));
+ return;
+ }
+
+ if (tlen < subtlen) {
+ ND_PRINT("ERROR: common header too large %u > %u", subtlen,
+ tlen);
+ return;
+ }
+
+ subtptr+=sizeof(struct rsvp_common_header);
+ subtlen-=sizeof(struct rsvp_common_header);
+
+ /*
+ * Print all objects in the submessage.
+ */
+ if (rsvp_obj_print(ndo, subpptr, subplen, subtptr, "\n\t ", subtlen, rsvp_com_header) == -1)
+ return;
+
+ tptr+=subtlen+sizeof(struct rsvp_common_header);
+ tlen-=subtlen+sizeof(struct rsvp_common_header);
+ }
+
+ break;
+
+ case RSVP_MSGTYPE_PATH:
+ case RSVP_MSGTYPE_RESV:
+ case RSVP_MSGTYPE_PATHERR:
+ case RSVP_MSGTYPE_RESVERR:
+ case RSVP_MSGTYPE_PATHTEAR:
+ case RSVP_MSGTYPE_RESVTEAR:
+ case RSVP_MSGTYPE_RESVCONF:
+ case RSVP_MSGTYPE_HELLO_OLD:
+ case RSVP_MSGTYPE_HELLO:
+ case RSVP_MSGTYPE_ACK:
+ case RSVP_MSGTYPE_SREFRESH:
+ /*
+ * Print all objects in the message.
+ */
+ if (rsvp_obj_print(ndo, pptr, plen, tptr, "\n\t ", tlen, rsvp_com_header) == -1)
+ return;
+ break;
+
+ default:
+ print_unknown_data(ndo, tptr, "\n\t ", tlen);
+ break;
+ }
+
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-rt6.c b/print-rt6.c
new file mode 100644
index 0000000..096a962
--- /dev/null
+++ b/print-rt6.c
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: IPv6 routing header printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip6.h"
+
+int
+rt6_print(netdissect_options *ndo, const u_char *bp, const u_char *bp2 _U_)
+{
+ const struct ip6_rthdr *dp;
+ const struct ip6_rthdr0 *dp0;
+ const struct ip6_srh *srh;
+ u_int i, len, type;
+ const u_char *p;
+
+ ndo->ndo_protocol = "rt6";
+
+ nd_print_protocol_caps(ndo);
+ dp = (const struct ip6_rthdr *)bp;
+
+ len = GET_U_1(dp->ip6r_len);
+ ND_PRINT(" (len=%u", len); /*)*/
+ type = GET_U_1(dp->ip6r_type);
+ ND_PRINT(", type=%u", type);
+ if (type == IPV6_RTHDR_TYPE_0)
+ ND_PRINT(" [Deprecated]");
+ ND_PRINT(", segleft=%u", GET_U_1(dp->ip6r_segleft));
+
+ switch (type) {
+ case IPV6_RTHDR_TYPE_0:
+ case IPV6_RTHDR_TYPE_2: /* Mobile IPv6 ID-20 */
+ dp0 = (const struct ip6_rthdr0 *)dp;
+
+ if (GET_BE_U_4(dp0->ip6r0_reserved) || ndo->ndo_vflag) {
+ ND_PRINT(", rsv=0x%0x",
+ GET_BE_U_4(dp0->ip6r0_reserved));
+ }
+
+ if (len % 2 == 1) {
+ ND_PRINT(" (invalid length %u)", len);
+ goto invalid;
+ }
+ len >>= 1;
+ p = (const u_char *) dp0->ip6r0_addr;
+ for (i = 0; i < len; i++) {
+ ND_PRINT(", [%u]%s", i, GET_IP6ADDR_STRING(p));
+ p += 16;
+ }
+ /*(*/
+ ND_PRINT(") ");
+ return((GET_U_1(dp0->ip6r0_len) + 1) << 3);
+ break;
+ case IPV6_RTHDR_TYPE_4:
+ srh = (const struct ip6_srh *)dp;
+ ND_PRINT(", last-entry=%u", GET_U_1(srh->srh_last_ent));
+
+ if (GET_U_1(srh->srh_flags) || ndo->ndo_vflag) {
+ ND_PRINT(", flags=0x%0x",
+ GET_U_1(srh->srh_flags));
+ }
+
+ ND_PRINT(", tag=%x", GET_BE_U_2(srh->srh_tag));
+
+ if (len % 2 == 1) {
+ ND_PRINT(" (invalid length %u)", len);
+ goto invalid;
+ }
+ len >>= 1;
+ p = (const u_char *) srh->srh_segments;
+ for (i = 0; i < len; i++) {
+ ND_PRINT(", [%u]%s", i, GET_IP6ADDR_STRING(p));
+ p += 16;
+ }
+ /*(*/
+ ND_PRINT(") ");
+ return((GET_U_1(srh->srh_len) + 1) << 3);
+ break;
+ default:
+ ND_PRINT(" (unknown type)");
+ goto invalid;
+ }
+
+invalid:
+ nd_print_invalid(ndo);
+ return -1;
+}
diff --git a/print-rtsp.c b/print-rtsp.c
new file mode 100644
index 0000000..626a5ed
--- /dev/null
+++ b/print-rtsp.c
@@ -0,0 +1,44 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Real Time Streaming Protocol (RTSP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+
+static const char *rtspcmds[] = {
+ "DESCRIBE",
+ "ANNOUNCE",
+ "GET_PARAMETER",
+ "OPTIONS",
+ "PAUSE",
+ "PLAY",
+ "RECORD",
+ "REDIRECT",
+ "SETUP",
+ "SET_PARAMETER",
+ "TEARDOWN",
+ NULL
+};
+
+void
+rtsp_print(netdissect_options *ndo, const u_char *pptr, u_int len)
+{
+ ndo->ndo_protocol = "rtsp";
+ txtproto_print(ndo, pptr, len, rtspcmds, RESP_CODE_SECOND_TOKEN);
+}
diff --git a/print-rx.c b/print-rx.c
new file mode 100644
index 0000000..0a1a8d1
--- /dev/null
+++ b/print-rx.c
@@ -0,0 +1,2842 @@
+/*
+ * Copyright: (c) 2000 United States Government as represented by the
+ * Secretary of the Navy. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. The names of the authors may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: AFS RX printer */
+
+/*
+ * This code unmangles RX packets. RX is the mutant form of RPC that AFS
+ * uses to communicate between clients and servers.
+ *
+ * In this code, I mainly concern myself with decoding the AFS calls, not
+ * with the guts of RX, per se.
+ *
+ * Bah. If I never look at rx_packet.h again, it will be too soon.
+ *
+ * Ken Hornstein <kenh@cmf.nrl.navy.mil>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip.h"
+
+#define FS_RX_PORT 7000
+#define CB_RX_PORT 7001
+#define PROT_RX_PORT 7002
+#define VLDB_RX_PORT 7003
+#define KAUTH_RX_PORT 7004
+#define VOL_RX_PORT 7005
+#define ERROR_RX_PORT 7006 /* Doesn't seem to be used */
+#define BOS_RX_PORT 7007
+
+#define AFSOPAQUEMAX 1024
+#define AFSNAMEMAX 256 /* Must be >= PRNAMEMAX + 1, VLNAMEMAX + 1, and 32 + 1 */
+#define PRNAMEMAX 64
+#define VLNAMEMAX 65
+#define KANAMEMAX 64
+#define BOSNAMEMAX 256
+#define USERNAMEMAX 1024 /* AFSOPAQUEMAX was used for this; does it need to be this big? */
+
+#define PRSFS_READ 1 /* Read files */
+#define PRSFS_WRITE 2 /* Write files */
+#define PRSFS_INSERT 4 /* Insert files into a directory */
+#define PRSFS_LOOKUP 8 /* Lookup files into a directory */
+#define PRSFS_DELETE 16 /* Delete files */
+#define PRSFS_LOCK 32 /* Lock files */
+#define PRSFS_ADMINISTER 64 /* Change ACL's */
+
+struct rx_header {
+ nd_uint32_t epoch;
+ nd_uint32_t cid;
+ nd_uint32_t callNumber;
+ nd_uint32_t seq;
+ nd_uint32_t serial;
+ nd_uint8_t type;
+#define RX_PACKET_TYPE_DATA 1
+#define RX_PACKET_TYPE_ACK 2
+#define RX_PACKET_TYPE_BUSY 3
+#define RX_PACKET_TYPE_ABORT 4
+#define RX_PACKET_TYPE_ACKALL 5
+#define RX_PACKET_TYPE_CHALLENGE 6
+#define RX_PACKET_TYPE_RESPONSE 7
+#define RX_PACKET_TYPE_DEBUG 8
+#define RX_PACKET_TYPE_PARAMS 9
+#define RX_PACKET_TYPE_VERSION 13
+ nd_uint8_t flags;
+#define RX_CLIENT_INITIATED 1
+#define RX_REQUEST_ACK 2
+#define RX_LAST_PACKET 4
+#define RX_MORE_PACKETS 8
+#define RX_FREE_PACKET 16
+#define RX_SLOW_START_OK 32
+#define RX_JUMBO_PACKET 32
+ nd_uint8_t userStatus;
+ nd_uint8_t securityIndex;
+ nd_uint16_t spare; /* How clever: even though the AFS */
+ nd_uint16_t serviceId; /* header files indicate that the */
+}; /* serviceId is first, it's really */
+ /* encoded _after_ the spare field */
+ /* I wasted a day figuring that out! */
+
+#define NUM_RX_FLAGS 7
+
+#define RX_MAXACKS 255
+
+struct rx_ackPacket {
+ nd_uint16_t bufferSpace; /* Number of packet buffers available */
+ nd_uint16_t maxSkew; /* Max diff between ack'd packet and */
+ /* highest packet received */
+ nd_uint32_t firstPacket; /* The first packet in ack list */
+ nd_uint32_t previousPacket; /* Previous packet recv'd (obsolete) */
+ nd_uint32_t serial; /* # of packet that prompted the ack */
+ nd_uint8_t reason; /* Reason for acknowledgement */
+ nd_uint8_t nAcks; /* Number of acknowledgements */
+ /* Followed by nAcks acknowledgments */
+#if 0
+ uint8_t acks[RX_MAXACKS]; /* Up to RX_MAXACKS acknowledgements */
+#endif
+};
+
+/*
+ * Values for the acks array
+ */
+
+#define RX_ACK_TYPE_NACK 0 /* Don't have this packet */
+#define RX_ACK_TYPE_ACK 1 /* I have this packet */
+
+static const struct tok rx_types[] = {
+ { RX_PACKET_TYPE_DATA, "data" },
+ { RX_PACKET_TYPE_ACK, "ack" },
+ { RX_PACKET_TYPE_BUSY, "busy" },
+ { RX_PACKET_TYPE_ABORT, "abort" },
+ { RX_PACKET_TYPE_ACKALL, "ackall" },
+ { RX_PACKET_TYPE_CHALLENGE, "challenge" },
+ { RX_PACKET_TYPE_RESPONSE, "response" },
+ { RX_PACKET_TYPE_DEBUG, "debug" },
+ { RX_PACKET_TYPE_PARAMS, "params" },
+ { RX_PACKET_TYPE_VERSION, "version" },
+ { 0, NULL },
+};
+
+static const struct double_tok {
+ uint32_t flag; /* Rx flag */
+ uint32_t packetType; /* Packet type */
+ const char *s; /* Flag string */
+} rx_flags[] = {
+ { RX_CLIENT_INITIATED, 0, "client-init" },
+ { RX_REQUEST_ACK, 0, "req-ack" },
+ { RX_LAST_PACKET, 0, "last-pckt" },
+ { RX_MORE_PACKETS, 0, "more-pckts" },
+ { RX_FREE_PACKET, 0, "free-pckt" },
+ { RX_SLOW_START_OK, RX_PACKET_TYPE_ACK, "slow-start" },
+ { RX_JUMBO_PACKET, RX_PACKET_TYPE_DATA, "jumbogram" }
+};
+
+static const struct tok fs_req[] = {
+ { 130, "fetch-data" },
+ { 131, "fetch-acl" },
+ { 132, "fetch-status" },
+ { 133, "store-data" },
+ { 134, "store-acl" },
+ { 135, "store-status" },
+ { 136, "remove-file" },
+ { 137, "create-file" },
+ { 138, "rename" },
+ { 139, "symlink" },
+ { 140, "link" },
+ { 141, "makedir" },
+ { 142, "rmdir" },
+ { 143, "oldsetlock" },
+ { 144, "oldextlock" },
+ { 145, "oldrellock" },
+ { 146, "get-stats" },
+ { 147, "give-cbs" },
+ { 148, "get-vlinfo" },
+ { 149, "get-vlstats" },
+ { 150, "set-vlstats" },
+ { 151, "get-rootvl" },
+ { 152, "check-token" },
+ { 153, "get-time" },
+ { 154, "nget-vlinfo" },
+ { 155, "bulk-stat" },
+ { 156, "setlock" },
+ { 157, "extlock" },
+ { 158, "rellock" },
+ { 159, "xstat-ver" },
+ { 160, "get-xstat" },
+ { 161, "dfs-lookup" },
+ { 162, "dfs-flushcps" },
+ { 163, "dfs-symlink" },
+ { 220, "residency" },
+ { 65536, "inline-bulk-status" },
+ { 65537, "fetch-data-64" },
+ { 65538, "store-data-64" },
+ { 65539, "give-up-all-cbs" },
+ { 65540, "get-caps" },
+ { 65541, "cb-rx-conn-addr" },
+ { 0, NULL },
+};
+
+static const struct tok cb_req[] = {
+ { 204, "callback" },
+ { 205, "initcb" },
+ { 206, "probe" },
+ { 207, "getlock" },
+ { 208, "getce" },
+ { 209, "xstatver" },
+ { 210, "getxstat" },
+ { 211, "initcb2" },
+ { 212, "whoareyou" },
+ { 213, "initcb3" },
+ { 214, "probeuuid" },
+ { 215, "getsrvprefs" },
+ { 216, "getcellservdb" },
+ { 217, "getlocalcell" },
+ { 218, "getcacheconf" },
+ { 65536, "getce64" },
+ { 65537, "getcellbynum" },
+ { 65538, "tellmeaboutyourself" },
+ { 0, NULL },
+};
+
+static const struct tok pt_req[] = {
+ { 500, "new-user" },
+ { 501, "where-is-it" },
+ { 502, "dump-entry" },
+ { 503, "add-to-group" },
+ { 504, "name-to-id" },
+ { 505, "id-to-name" },
+ { 506, "delete" },
+ { 507, "remove-from-group" },
+ { 508, "get-cps" },
+ { 509, "new-entry" },
+ { 510, "list-max" },
+ { 511, "set-max" },
+ { 512, "list-entry" },
+ { 513, "change-entry" },
+ { 514, "list-elements" },
+ { 515, "same-mbr-of" },
+ { 516, "set-fld-sentry" },
+ { 517, "list-owned" },
+ { 518, "get-cps2" },
+ { 519, "get-host-cps" },
+ { 520, "update-entry" },
+ { 521, "list-entries" },
+ { 530, "list-super-groups" },
+ { 0, NULL },
+};
+
+static const struct tok vldb_req[] = {
+ { 501, "create-entry" },
+ { 502, "delete-entry" },
+ { 503, "get-entry-by-id" },
+ { 504, "get-entry-by-name" },
+ { 505, "get-new-volume-id" },
+ { 506, "replace-entry" },
+ { 507, "update-entry" },
+ { 508, "setlock" },
+ { 509, "releaselock" },
+ { 510, "list-entry" },
+ { 511, "list-attrib" },
+ { 512, "linked-list" },
+ { 513, "get-stats" },
+ { 514, "probe" },
+ { 515, "get-addrs" },
+ { 516, "change-addr" },
+ { 517, "create-entry-n" },
+ { 518, "get-entry-by-id-n" },
+ { 519, "get-entry-by-name-n" },
+ { 520, "replace-entry-n" },
+ { 521, "list-entry-n" },
+ { 522, "list-attrib-n" },
+ { 523, "linked-list-n" },
+ { 524, "update-entry-by-name" },
+ { 525, "create-entry-u" },
+ { 526, "get-entry-by-id-u" },
+ { 527, "get-entry-by-name-u" },
+ { 528, "replace-entry-u" },
+ { 529, "list-entry-u" },
+ { 530, "list-attrib-u" },
+ { 531, "linked-list-u" },
+ { 532, "regaddr" },
+ { 533, "get-addrs-u" },
+ { 534, "list-attrib-n2" },
+ { 0, NULL },
+};
+
+static const struct tok kauth_req[] = {
+ { 1, "auth-old" },
+ { 21, "authenticate" },
+ { 22, "authenticate-v2" },
+ { 2, "change-pw" },
+ { 3, "get-ticket-old" },
+ { 23, "get-ticket" },
+ { 4, "set-pw" },
+ { 5, "set-fields" },
+ { 6, "create-user" },
+ { 7, "delete-user" },
+ { 8, "get-entry" },
+ { 9, "list-entry" },
+ { 10, "get-stats" },
+ { 11, "debug" },
+ { 12, "get-pw" },
+ { 13, "get-random-key" },
+ { 14, "unlock" },
+ { 15, "lock-status" },
+ { 0, NULL },
+};
+
+static const struct tok vol_req[] = {
+ { 100, "create-volume" },
+ { 101, "delete-volume" },
+ { 102, "restore" },
+ { 103, "forward" },
+ { 104, "end-trans" },
+ { 105, "clone" },
+ { 106, "set-flags" },
+ { 107, "get-flags" },
+ { 108, "trans-create" },
+ { 109, "dump" },
+ { 110, "get-nth-volume" },
+ { 111, "set-forwarding" },
+ { 112, "get-name" },
+ { 113, "get-status" },
+ { 114, "sig-restore" },
+ { 115, "list-partitions" },
+ { 116, "list-volumes" },
+ { 117, "set-id-types" },
+ { 118, "monitor" },
+ { 119, "partition-info" },
+ { 120, "reclone" },
+ { 121, "list-one-volume" },
+ { 122, "nuke" },
+ { 123, "set-date" },
+ { 124, "x-list-volumes" },
+ { 125, "x-list-one-volume" },
+ { 126, "set-info" },
+ { 127, "x-list-partitions" },
+ { 128, "forward-multiple" },
+ { 65536, "convert-ro" },
+ { 65537, "get-size" },
+ { 65538, "dump-v2" },
+ { 0, NULL },
+};
+
+static const struct tok bos_req[] = {
+ { 80, "create-bnode" },
+ { 81, "delete-bnode" },
+ { 82, "set-status" },
+ { 83, "get-status" },
+ { 84, "enumerate-instance" },
+ { 85, "get-instance-info" },
+ { 86, "get-instance-parm" },
+ { 87, "add-superuser" },
+ { 88, "delete-superuser" },
+ { 89, "list-superusers" },
+ { 90, "list-keys" },
+ { 91, "add-key" },
+ { 92, "delete-key" },
+ { 93, "set-cell-name" },
+ { 94, "get-cell-name" },
+ { 95, "get-cell-host" },
+ { 96, "add-cell-host" },
+ { 97, "delete-cell-host" },
+ { 98, "set-t-status" },
+ { 99, "shutdown-all" },
+ { 100, "restart-all" },
+ { 101, "startup-all" },
+ { 102, "set-noauth-flag" },
+ { 103, "re-bozo" },
+ { 104, "restart" },
+ { 105, "start-bozo-install" },
+ { 106, "uninstall" },
+ { 107, "get-dates" },
+ { 108, "exec" },
+ { 109, "prune" },
+ { 110, "set-restart-time" },
+ { 111, "get-restart-time" },
+ { 112, "start-bozo-log" },
+ { 113, "wait-all" },
+ { 114, "get-instance-strings" },
+ { 115, "get-restricted" },
+ { 116, "set-restricted" },
+ { 0, NULL },
+};
+
+static const struct tok ubik_req[] = {
+ { 10000, "vote-beacon" },
+ { 10001, "vote-debug-old" },
+ { 10002, "vote-sdebug-old" },
+ { 10003, "vote-getsyncsite" },
+ { 10004, "vote-debug" },
+ { 10005, "vote-sdebug" },
+ { 10006, "vote-xdebug" },
+ { 10007, "vote-xsdebug" },
+ { 20000, "disk-begin" },
+ { 20001, "disk-commit" },
+ { 20002, "disk-lock" },
+ { 20003, "disk-write" },
+ { 20004, "disk-getversion" },
+ { 20005, "disk-getfile" },
+ { 20006, "disk-sendfile" },
+ { 20007, "disk-abort" },
+ { 20008, "disk-releaselocks" },
+ { 20009, "disk-truncate" },
+ { 20010, "disk-probe" },
+ { 20011, "disk-writev" },
+ { 20012, "disk-interfaceaddr" },
+ { 20013, "disk-setversion" },
+ { 0, NULL },
+};
+
+#define VOTE_LOW 10000
+#define VOTE_HIGH 10007
+#define DISK_LOW 20000
+#define DISK_HIGH 20013
+
+static const struct tok cb_types[] = {
+ { 1, "exclusive" },
+ { 2, "shared" },
+ { 3, "dropped" },
+ { 0, NULL },
+};
+
+static const struct tok ubik_lock_types[] = {
+ { 1, "read" },
+ { 2, "write" },
+ { 3, "wait" },
+ { 0, NULL },
+};
+
+static const char *voltype[] = { "read-write", "read-only", "backup" };
+
+static const struct tok afs_fs_errors[] = {
+ { 101, "salvage volume" },
+ { 102, "no such vnode" },
+ { 103, "no such volume" },
+ { 104, "volume exist" },
+ { 105, "no service" },
+ { 106, "volume offline" },
+ { 107, "voline online" },
+ { 108, "diskfull" },
+ { 109, "diskquota exceeded" },
+ { 110, "volume busy" },
+ { 111, "volume moved" },
+ { 112, "AFS IO error" },
+ { 0xffffff9c, "restarting fileserver" }, /* -100, sic! */
+ { 0, NULL }
+};
+
+/*
+ * Reasons for acknowledging a packet
+ */
+
+static const struct tok rx_ack_reasons[] = {
+ { 1, "ack requested" },
+ { 2, "duplicate packet" },
+ { 3, "out of sequence" },
+ { 4, "exceeds window" },
+ { 5, "no buffer space" },
+ { 6, "ping" },
+ { 7, "ping response" },
+ { 8, "delay" },
+ { 9, "idle" },
+ { 0, NULL },
+};
+
+/*
+ * Cache entries we keep around so we can figure out the RX opcode
+ * numbers for replies. This allows us to make sense of RX reply packets.
+ */
+
+struct rx_cache_entry {
+ uint32_t callnum; /* Call number (net order) */
+ uint32_t client; /* client IP address (net order) */
+ uint32_t server; /* server IP address (net order) */
+ uint16_t dport; /* server UDP port (host order) */
+ uint16_t serviceId; /* Service identifier (net order) */
+ uint32_t opcode; /* RX opcode (host order) */
+};
+
+#define RX_CACHE_SIZE 64
+
+static struct rx_cache_entry rx_cache[RX_CACHE_SIZE];
+
+static uint32_t rx_cache_next = 0;
+static uint32_t rx_cache_hint = 0;
+static void rx_cache_insert(netdissect_options *, const u_char *, const struct ip *, uint16_t);
+static int rx_cache_find(netdissect_options *, const struct rx_header *,
+ const struct ip *, uint16_t, uint32_t *);
+
+static void fs_print(netdissect_options *, const u_char *, u_int);
+static void fs_reply_print(netdissect_options *, const u_char *, u_int, uint32_t);
+static void acl_print(netdissect_options *, u_char *, const u_char *);
+static void cb_print(netdissect_options *, const u_char *, u_int);
+static void cb_reply_print(netdissect_options *, const u_char *, u_int, uint32_t);
+static void prot_print(netdissect_options *, const u_char *, u_int);
+static void prot_reply_print(netdissect_options *, const u_char *, u_int, uint32_t);
+static void vldb_print(netdissect_options *, const u_char *, u_int);
+static void vldb_reply_print(netdissect_options *, const u_char *, u_int, uint32_t);
+static void kauth_print(netdissect_options *, const u_char *, u_int);
+static void kauth_reply_print(netdissect_options *, const u_char *, u_int, uint32_t);
+static void vol_print(netdissect_options *, const u_char *, u_int);
+static void vol_reply_print(netdissect_options *, const u_char *, u_int, uint32_t);
+static void bos_print(netdissect_options *, const u_char *, u_int);
+static void bos_reply_print(netdissect_options *, const u_char *, u_int, uint32_t);
+static void ubik_print(netdissect_options *, const u_char *);
+static void ubik_reply_print(netdissect_options *, const u_char *, u_int, uint32_t);
+
+static void rx_ack_print(netdissect_options *, const u_char *, u_int);
+
+static int is_ubik(uint32_t);
+
+/*
+ * Handle the rx-level packet. See if we know what port it's going to so
+ * we can peek at the afs call inside
+ */
+
+void
+rx_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, uint16_t sport, uint16_t dport,
+ const u_char *bp2)
+{
+ const struct rx_header *rxh;
+ uint32_t i;
+ uint8_t type, flags;
+ uint32_t opcode;
+
+ ndo->ndo_protocol = "rx";
+ if (!ND_TTEST_LEN(bp, sizeof(struct rx_header))) {
+ ND_PRINT(" [|rx] (%u)", length);
+ return;
+ }
+
+ rxh = (const struct rx_header *) bp;
+
+ type = GET_U_1(rxh->type);
+ ND_PRINT(" rx %s", tok2str(rx_types, "type %u", type));
+
+ flags = GET_U_1(rxh->flags);
+ if (ndo->ndo_vflag) {
+ int firstflag = 0;
+
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT(" cid %08x call# %u",
+ GET_BE_U_4(rxh->cid),
+ GET_BE_U_4(rxh->callNumber));
+
+ ND_PRINT(" seq %u ser %u",
+ GET_BE_U_4(rxh->seq),
+ GET_BE_U_4(rxh->serial));
+
+ if (ndo->ndo_vflag > 2)
+ ND_PRINT(" secindex %u serviceid %hu",
+ GET_U_1(rxh->securityIndex),
+ GET_BE_U_2(rxh->serviceId));
+
+ if (ndo->ndo_vflag > 1)
+ for (i = 0; i < NUM_RX_FLAGS; i++) {
+ if (flags & rx_flags[i].flag &&
+ (!rx_flags[i].packetType ||
+ type == rx_flags[i].packetType)) {
+ if (!firstflag) {
+ firstflag = 1;
+ ND_PRINT(" ");
+ } else {
+ ND_PRINT(",");
+ }
+ ND_PRINT("<%s>", rx_flags[i].s);
+ }
+ }
+ }
+
+ /*
+ * Try to handle AFS calls that we know about. Check the destination
+ * port and make sure it's a data packet. Also, make sure the
+ * seq number is 1 (because otherwise it's a continuation packet,
+ * and we can't interpret that). Also, seems that reply packets
+ * do not have the client-init flag set, so we check for that
+ * as well.
+ */
+
+ if (type == RX_PACKET_TYPE_DATA &&
+ GET_BE_U_4(rxh->seq) == 1 &&
+ flags & RX_CLIENT_INITIATED) {
+
+ /*
+ * Insert this call into the call cache table, so we
+ * have a chance to print out replies
+ */
+
+ rx_cache_insert(ndo, bp, (const struct ip *) bp2, dport);
+
+ switch (dport) {
+ case FS_RX_PORT: /* AFS file service */
+ fs_print(ndo, bp, length);
+ break;
+ case CB_RX_PORT: /* AFS callback service */
+ cb_print(ndo, bp, length);
+ break;
+ case PROT_RX_PORT: /* AFS protection service */
+ prot_print(ndo, bp, length);
+ break;
+ case VLDB_RX_PORT: /* AFS VLDB service */
+ vldb_print(ndo, bp, length);
+ break;
+ case KAUTH_RX_PORT: /* AFS Kerberos auth service */
+ kauth_print(ndo, bp, length);
+ break;
+ case VOL_RX_PORT: /* AFS Volume service */
+ vol_print(ndo, bp, length);
+ break;
+ case BOS_RX_PORT: /* AFS BOS service */
+ bos_print(ndo, bp, length);
+ break;
+ default:
+ ;
+ }
+
+ /*
+ * If it's a reply (client-init is _not_ set, but seq is one)
+ * then look it up in the cache. If we find it, call the reply
+ * printing functions Note that we handle abort packets here,
+ * because printing out the return code can be useful at times.
+ */
+
+ } else if (((type == RX_PACKET_TYPE_DATA &&
+ GET_BE_U_4(rxh->seq) == 1) ||
+ type == RX_PACKET_TYPE_ABORT) &&
+ (flags & RX_CLIENT_INITIATED) == 0 &&
+ rx_cache_find(ndo, rxh, (const struct ip *) bp2,
+ sport, &opcode)) {
+
+ switch (sport) {
+ case FS_RX_PORT: /* AFS file service */
+ fs_reply_print(ndo, bp, length, opcode);
+ break;
+ case CB_RX_PORT: /* AFS callback service */
+ cb_reply_print(ndo, bp, length, opcode);
+ break;
+ case PROT_RX_PORT: /* AFS PT service */
+ prot_reply_print(ndo, bp, length, opcode);
+ break;
+ case VLDB_RX_PORT: /* AFS VLDB service */
+ vldb_reply_print(ndo, bp, length, opcode);
+ break;
+ case KAUTH_RX_PORT: /* AFS Kerberos auth service */
+ kauth_reply_print(ndo, bp, length, opcode);
+ break;
+ case VOL_RX_PORT: /* AFS Volume service */
+ vol_reply_print(ndo, bp, length, opcode);
+ break;
+ case BOS_RX_PORT: /* AFS BOS service */
+ bos_reply_print(ndo, bp, length, opcode);
+ break;
+ default:
+ ;
+ }
+
+ /*
+ * If it's an RX ack packet, then use the appropriate ack decoding
+ * function (there isn't any service-specific information in the
+ * ack packet, so we can use one for all AFS services)
+ */
+
+ } else if (type == RX_PACKET_TYPE_ACK)
+ rx_ack_print(ndo, bp, length);
+
+
+ ND_PRINT(" (%u)", length);
+}
+
+/*
+ * Insert an entry into the cache. Taken from print-nfs.c
+ */
+
+static void
+rx_cache_insert(netdissect_options *ndo,
+ const u_char *bp, const struct ip *ip, uint16_t dport)
+{
+ struct rx_cache_entry *rxent;
+ const struct rx_header *rxh = (const struct rx_header *) bp;
+
+ if (!ND_TTEST_4(bp + sizeof(struct rx_header)))
+ return;
+
+ rxent = &rx_cache[rx_cache_next];
+
+ if (++rx_cache_next >= RX_CACHE_SIZE)
+ rx_cache_next = 0;
+
+ rxent->callnum = GET_BE_U_4(rxh->callNumber);
+ rxent->client = GET_IPV4_TO_NETWORK_ORDER(ip->ip_src);
+ rxent->server = GET_IPV4_TO_NETWORK_ORDER(ip->ip_dst);
+ rxent->dport = dport;
+ rxent->serviceId = GET_BE_U_2(rxh->serviceId);
+ rxent->opcode = GET_BE_U_4(bp + sizeof(struct rx_header));
+}
+
+/*
+ * Lookup an entry in the cache. Also taken from print-nfs.c
+ *
+ * Note that because this is a reply, we're looking at the _source_
+ * port.
+ */
+
+static int
+rx_cache_find(netdissect_options *ndo, const struct rx_header *rxh,
+ const struct ip *ip, uint16_t sport, uint32_t *opcode)
+{
+ uint32_t i;
+ struct rx_cache_entry *rxent;
+ uint32_t clip;
+ uint32_t sip;
+
+ clip = GET_IPV4_TO_NETWORK_ORDER(ip->ip_dst);
+ sip = GET_IPV4_TO_NETWORK_ORDER(ip->ip_src);
+
+ /* Start the search where we last left off */
+
+ i = rx_cache_hint;
+ do {
+ rxent = &rx_cache[i];
+ if (rxent->callnum == GET_BE_U_4(rxh->callNumber) &&
+ rxent->client == clip &&
+ rxent->server == sip &&
+ rxent->serviceId == GET_BE_U_2(rxh->serviceId) &&
+ rxent->dport == sport) {
+
+ /* We got a match! */
+
+ rx_cache_hint = i;
+ *opcode = rxent->opcode;
+ return(1);
+ }
+ if (++i >= RX_CACHE_SIZE)
+ i = 0;
+ } while (i != rx_cache_hint);
+
+ /* Our search failed */
+ return(0);
+}
+
+/*
+ * These extremely grody macros handle the printing of various AFS stuff.
+ */
+
+#define FIDOUT() { uint32_t n1, n2, n3; \
+ ND_TCHECK_LEN(bp, sizeof(uint32_t) * 3); \
+ n1 = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ n2 = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ n3 = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ ND_PRINT(" fid %u/%u/%u", n1, n2, n3); \
+ }
+
+#define STROUT(MAX) { uint32_t _i; \
+ _i = GET_BE_U_4(bp); \
+ if (_i > (MAX)) \
+ goto trunc; \
+ bp += sizeof(uint32_t); \
+ ND_PRINT(" \""); \
+ if (nd_printn(ndo, bp, _i, ndo->ndo_snapend)) \
+ goto trunc; \
+ ND_PRINT("\""); \
+ bp += ((_i + sizeof(uint32_t) - 1) / sizeof(uint32_t)) * sizeof(uint32_t); \
+ }
+
+#define INTOUT() { int32_t _i; \
+ _i = GET_BE_S_4(bp); \
+ bp += sizeof(int32_t); \
+ ND_PRINT(" %d", _i); \
+ }
+
+#define UINTOUT() { uint32_t _i; \
+ _i = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ ND_PRINT(" %u", _i); \
+ }
+
+#define UINT64OUT() { uint64_t _i; \
+ _i = GET_BE_U_8(bp); \
+ bp += sizeof(uint64_t); \
+ ND_PRINT(" %" PRIu64, _i); \
+ }
+
+#define DATEOUT() { time_t _t; char str[256]; \
+ _t = (time_t) GET_BE_S_4(bp); \
+ bp += sizeof(int32_t); \
+ ND_PRINT(" %s", \
+ nd_format_time(str, sizeof(str), \
+ "%Y/%m/%d %H:%M:%S", localtime(&_t))); \
+ }
+
+#define STOREATTROUT() { uint32_t mask, _i; \
+ ND_TCHECK_LEN(bp, (sizeof(uint32_t) * 6)); \
+ mask = GET_BE_U_4(bp); bp += sizeof(uint32_t); \
+ if (mask) ND_PRINT(" StoreStatus"); \
+ if (mask & 1) { ND_PRINT(" date"); DATEOUT(); } \
+ else bp += sizeof(uint32_t); \
+ _i = GET_BE_U_4(bp); bp += sizeof(uint32_t); \
+ if (mask & 2) ND_PRINT(" owner %u", _i); \
+ _i = GET_BE_U_4(bp); bp += sizeof(uint32_t); \
+ if (mask & 4) ND_PRINT(" group %u", _i); \
+ _i = GET_BE_U_4(bp); bp += sizeof(uint32_t); \
+ if (mask & 8) ND_PRINT(" mode %o", _i & 07777); \
+ _i = GET_BE_U_4(bp); bp += sizeof(uint32_t); \
+ if (mask & 16) ND_PRINT(" segsize %u", _i); \
+ /* undocumented in 3.3 docu */ \
+ if (mask & 1024) ND_PRINT(" fsync"); \
+ }
+
+#define UBIK_VERSIONOUT() {uint32_t epoch; uint32_t counter; \
+ ND_TCHECK_LEN(bp, sizeof(uint32_t) * 2); \
+ epoch = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ counter = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ ND_PRINT(" %u.%u", epoch, counter); \
+ }
+
+#define AFSUUIDOUT() {uint32_t temp; int _i; \
+ ND_TCHECK_LEN(bp, 11 * sizeof(uint32_t)); \
+ temp = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ ND_PRINT(" %08x", temp); \
+ temp = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ ND_PRINT("%04x", temp); \
+ temp = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ ND_PRINT("%04x", temp); \
+ for (_i = 0; _i < 8; _i++) { \
+ temp = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ ND_PRINT("%02x", (unsigned char) temp); \
+ } \
+ }
+
+/*
+ * This is the sickest one of all
+ * MAX is expected to be a constant here
+ */
+
+#define VECOUT(MAX) { u_char *sp; \
+ u_char s[(MAX) + 1]; \
+ uint32_t k; \
+ ND_TCHECK_LEN(bp, (MAX) * sizeof(uint32_t)); \
+ sp = s; \
+ for (k = 0; k < (MAX); k++) { \
+ *sp++ = (u_char) GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ } \
+ s[(MAX)] = '\0'; \
+ ND_PRINT(" \""); \
+ fn_print_str(ndo, s); \
+ ND_PRINT("\""); \
+ }
+
+#define DESTSERVEROUT() { uint32_t n1, n2, n3; \
+ ND_TCHECK_LEN(bp, sizeof(uint32_t) * 3); \
+ n1 = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ n2 = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ n3 = GET_BE_U_4(bp); \
+ bp += sizeof(uint32_t); \
+ ND_PRINT(" server %u:%u:%u", n1, n2, n3); \
+ }
+
+/*
+ * Handle calls to the AFS file service (fs)
+ */
+
+static void
+fs_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ uint32_t fs_op;
+ uint32_t i;
+
+ if (length <= sizeof(struct rx_header))
+ return;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from fsint/afsint.xg
+ */
+
+ fs_op = GET_BE_U_4(bp + sizeof(struct rx_header));
+
+ ND_PRINT(" fs call %s", tok2str(fs_req, "op#%u", fs_op));
+
+ /*
+ * Print out arguments to some of the AFS calls. This stuff is
+ * all from afsint.xg
+ */
+
+ bp += sizeof(struct rx_header) + 4;
+
+ /*
+ * Sigh. This is gross. Ritchie forgive me.
+ */
+
+ switch (fs_op) {
+ case 130: /* Fetch data */
+ FIDOUT();
+ ND_PRINT(" offset");
+ UINTOUT();
+ ND_PRINT(" length");
+ UINTOUT();
+ break;
+ case 131: /* Fetch ACL */
+ case 132: /* Fetch Status */
+ case 143: /* Old set lock */
+ case 144: /* Old extend lock */
+ case 145: /* Old release lock */
+ case 156: /* Set lock */
+ case 157: /* Extend lock */
+ case 158: /* Release lock */
+ FIDOUT();
+ break;
+ case 135: /* Store status */
+ FIDOUT();
+ STOREATTROUT();
+ break;
+ case 133: /* Store data */
+ FIDOUT();
+ STOREATTROUT();
+ ND_PRINT(" offset");
+ UINTOUT();
+ ND_PRINT(" length");
+ UINTOUT();
+ ND_PRINT(" flen");
+ UINTOUT();
+ break;
+ case 134: /* Store ACL */
+ {
+ char a[AFSOPAQUEMAX+1];
+ FIDOUT();
+ i = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ ND_TCHECK_LEN(bp, i);
+ i = ND_MIN(AFSOPAQUEMAX, i);
+ strncpy(a, (const char *) bp, i);
+ a[i] = '\0';
+ acl_print(ndo, (u_char *) a, (u_char *) a + i);
+ break;
+ }
+ case 137: /* Create file */
+ case 141: /* MakeDir */
+ FIDOUT();
+ STROUT(AFSNAMEMAX);
+ STOREATTROUT();
+ break;
+ case 136: /* Remove file */
+ case 142: /* Remove directory */
+ FIDOUT();
+ STROUT(AFSNAMEMAX);
+ break;
+ case 138: /* Rename file */
+ ND_PRINT(" old");
+ FIDOUT();
+ STROUT(AFSNAMEMAX);
+ ND_PRINT(" new");
+ FIDOUT();
+ STROUT(AFSNAMEMAX);
+ break;
+ case 139: /* Symlink */
+ FIDOUT();
+ STROUT(AFSNAMEMAX);
+ ND_PRINT(" link to");
+ STROUT(AFSNAMEMAX);
+ break;
+ case 140: /* Link */
+ FIDOUT();
+ STROUT(AFSNAMEMAX);
+ ND_PRINT(" link to");
+ FIDOUT();
+ break;
+ case 148: /* Get volume info */
+ STROUT(AFSNAMEMAX);
+ break;
+ case 149: /* Get volume stats */
+ case 150: /* Set volume stats */
+ ND_PRINT(" volid");
+ UINTOUT();
+ break;
+ case 154: /* New get volume info */
+ ND_PRINT(" volname");
+ STROUT(AFSNAMEMAX);
+ break;
+ case 155: /* Bulk stat */
+ case 65536: /* Inline bulk stat */
+ {
+ uint32_t j;
+ j = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+
+ for (i = 0; i < j; i++) {
+ FIDOUT();
+ if (i != j - 1)
+ ND_PRINT(",");
+ }
+ if (j == 0)
+ ND_PRINT(" <none!>");
+ break;
+ }
+ case 65537: /* Fetch data 64 */
+ FIDOUT();
+ ND_PRINT(" offset");
+ UINT64OUT();
+ ND_PRINT(" length");
+ UINT64OUT();
+ break;
+ case 65538: /* Store data 64 */
+ FIDOUT();
+ STOREATTROUT();
+ ND_PRINT(" offset");
+ UINT64OUT();
+ ND_PRINT(" length");
+ UINT64OUT();
+ ND_PRINT(" flen");
+ UINT64OUT();
+ break;
+ case 65541: /* CallBack rx conn address */
+ ND_PRINT(" addr");
+ UINTOUT();
+ default:
+ ;
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|fs]");
+}
+
+/*
+ * Handle replies to the AFS file service
+ */
+
+static void
+fs_reply_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, uint32_t opcode)
+{
+ uint32_t i;
+ const struct rx_header *rxh;
+ uint8_t type;
+
+ if (length <= sizeof(struct rx_header))
+ return;
+
+ rxh = (const struct rx_header *) bp;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from fsint/afsint.xg
+ */
+
+ ND_PRINT(" fs reply %s", tok2str(fs_req, "op#%u", opcode));
+
+ type = GET_U_1(rxh->type);
+ bp += sizeof(struct rx_header);
+
+ /*
+ * If it was a data packet, interpret the response
+ */
+
+ if (type == RX_PACKET_TYPE_DATA) {
+ switch (opcode) {
+ case 131: /* Fetch ACL */
+ {
+ char a[AFSOPAQUEMAX+1];
+ i = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ ND_TCHECK_LEN(bp, i);
+ i = ND_MIN(AFSOPAQUEMAX, i);
+ strncpy(a, (const char *) bp, i);
+ a[i] = '\0';
+ acl_print(ndo, (u_char *) a, (u_char *) a + i);
+ break;
+ }
+ case 137: /* Create file */
+ case 141: /* MakeDir */
+ ND_PRINT(" new");
+ FIDOUT();
+ break;
+ case 151: /* Get root volume */
+ ND_PRINT(" root volume");
+ STROUT(AFSNAMEMAX);
+ break;
+ case 153: /* Get time */
+ DATEOUT();
+ break;
+ default:
+ ;
+ }
+ } else if (type == RX_PACKET_TYPE_ABORT) {
+ /*
+ * Otherwise, just print out the return code
+ */
+ int32_t errcode;
+
+ errcode = GET_BE_S_4(bp);
+ bp += sizeof(int32_t);
+
+ ND_PRINT(" error %s", tok2str(afs_fs_errors, "#%d", errcode));
+ } else {
+ ND_PRINT(" strange fs reply of type %u", type);
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|fs]");
+}
+
+/*
+ * Print out an AFS ACL string. An AFS ACL is a string that has the
+ * following format:
+ *
+ * <positive> <negative>
+ * <uid1> <aclbits1>
+ * ....
+ *
+ * "positive" and "negative" are integers which contain the number of
+ * positive and negative ACL's in the string. The uid/aclbits pair are
+ * ASCII strings containing the UID/PTS record and an ASCII number
+ * representing a logical OR of all the ACL permission bits
+ */
+
+#define XSTRINGIFY(x) #x
+#define NUMSTRINGIFY(x) XSTRINGIFY(x)
+
+static void
+acl_print(netdissect_options *ndo,
+ u_char *s, const u_char *end)
+{
+ int pos, neg, acl;
+ int n, i;
+ char user[USERNAMEMAX+1];
+
+ if (sscanf((char *) s, "%d %d\n%n", &pos, &neg, &n) != 2)
+ return;
+
+ s += n;
+
+ if (s > end)
+ return;
+
+ /*
+ * This wacky order preserves the order used by the "fs" command
+ */
+
+#define ACLOUT(acl) \
+ ND_PRINT("%s%s%s%s%s%s%s", \
+ acl & PRSFS_READ ? "r" : "", \
+ acl & PRSFS_LOOKUP ? "l" : "", \
+ acl & PRSFS_INSERT ? "i" : "", \
+ acl & PRSFS_DELETE ? "d" : "", \
+ acl & PRSFS_WRITE ? "w" : "", \
+ acl & PRSFS_LOCK ? "k" : "", \
+ acl & PRSFS_ADMINISTER ? "a" : "");
+
+ for (i = 0; i < pos; i++) {
+ if (sscanf((char *) s, "%" NUMSTRINGIFY(USERNAMEMAX) "s %d\n%n", user, &acl, &n) != 2)
+ return;
+ s += n;
+ ND_PRINT(" +{");
+ fn_print_str(ndo, (u_char *)user);
+ ND_PRINT(" ");
+ ACLOUT(acl);
+ ND_PRINT("}");
+ if (s > end)
+ return;
+ }
+
+ for (i = 0; i < neg; i++) {
+ if (sscanf((char *) s, "%" NUMSTRINGIFY(USERNAMEMAX) "s %d\n%n", user, &acl, &n) != 2)
+ return;
+ s += n;
+ ND_PRINT(" -{");
+ fn_print_str(ndo, (u_char *)user);
+ ND_PRINT(" ");
+ ACLOUT(acl);
+ ND_PRINT("}");
+ if (s > end)
+ return;
+ }
+}
+
+#undef ACLOUT
+
+/*
+ * Handle calls to the AFS callback service
+ */
+
+static void
+cb_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ uint32_t cb_op;
+ uint32_t i;
+
+ if (length <= sizeof(struct rx_header))
+ return;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from fsint/afscbint.xg
+ */
+
+ cb_op = GET_BE_U_4(bp + sizeof(struct rx_header));
+
+ ND_PRINT(" cb call %s", tok2str(cb_req, "op#%u", cb_op));
+
+ bp += sizeof(struct rx_header) + 4;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from fsint/afscbint.xg
+ */
+
+ switch (cb_op) {
+ case 204: /* Callback */
+ {
+ uint32_t j, t;
+ j = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+
+ for (i = 0; i < j; i++) {
+ FIDOUT();
+ if (i != j - 1)
+ ND_PRINT(",");
+ }
+
+ if (j == 0)
+ ND_PRINT(" <none!>");
+
+ j = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+
+ if (j != 0)
+ ND_PRINT(";");
+
+ for (i = 0; i < j; i++) {
+ ND_PRINT(" ver");
+ INTOUT();
+ ND_PRINT(" expires");
+ DATEOUT();
+ t = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ tok2str(cb_types, "type %u", t);
+ }
+ break;
+ }
+ case 214: {
+ ND_PRINT(" afsuuid");
+ AFSUUIDOUT();
+ break;
+ }
+ default:
+ ;
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|cb]");
+}
+
+/*
+ * Handle replies to the AFS Callback Service
+ */
+
+static void
+cb_reply_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, uint32_t opcode)
+{
+ const struct rx_header *rxh;
+ uint8_t type;
+
+ if (length <= sizeof(struct rx_header))
+ return;
+
+ rxh = (const struct rx_header *) bp;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from fsint/afscbint.xg
+ */
+
+ ND_PRINT(" cb reply %s", tok2str(cb_req, "op#%u", opcode));
+
+ type = GET_U_1(rxh->type);
+ bp += sizeof(struct rx_header);
+
+ /*
+ * If it was a data packet, interpret the response.
+ */
+
+ if (type == RX_PACKET_TYPE_DATA)
+ switch (opcode) {
+ case 213: /* InitCallBackState3 */
+ AFSUUIDOUT();
+ break;
+ default:
+ ;
+ }
+ else {
+ /*
+ * Otherwise, just print out the return code
+ */
+ ND_PRINT(" errcode");
+ INTOUT();
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|cb]");
+}
+
+/*
+ * Handle calls to the AFS protection database server
+ */
+
+static void
+prot_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ uint32_t i;
+ uint32_t pt_op;
+
+ if (length <= sizeof(struct rx_header))
+ return;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from ptserver/ptint.xg
+ */
+
+ pt_op = GET_BE_U_4(bp + sizeof(struct rx_header));
+
+ ND_PRINT(" pt");
+
+ if (is_ubik(pt_op)) {
+ ubik_print(ndo, bp);
+ return;
+ }
+
+ ND_PRINT(" call %s", tok2str(pt_req, "op#%u", pt_op));
+
+ /*
+ * Decode some of the arguments to the PT calls
+ */
+
+ bp += sizeof(struct rx_header) + 4;
+
+ switch (pt_op) {
+ case 500: /* I New User */
+ STROUT(PRNAMEMAX);
+ ND_PRINT(" id");
+ INTOUT();
+ ND_PRINT(" oldid");
+ INTOUT();
+ break;
+ case 501: /* Where is it */
+ case 506: /* Delete */
+ case 508: /* Get CPS */
+ case 512: /* List entry */
+ case 514: /* List elements */
+ case 517: /* List owned */
+ case 518: /* Get CPS2 */
+ case 519: /* Get host CPS */
+ case 530: /* List super groups */
+ ND_PRINT(" id");
+ INTOUT();
+ break;
+ case 502: /* Dump entry */
+ ND_PRINT(" pos");
+ INTOUT();
+ break;
+ case 503: /* Add to group */
+ case 507: /* Remove from group */
+ case 515: /* Is a member of? */
+ ND_PRINT(" uid");
+ INTOUT();
+ ND_PRINT(" gid");
+ INTOUT();
+ break;
+ case 504: /* Name to ID */
+ {
+ uint32_t j;
+ j = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+
+ /*
+ * Who designed this chicken-shit protocol?
+ *
+ * Each character is stored as a 32-bit
+ * integer!
+ */
+
+ for (i = 0; i < j; i++) {
+ VECOUT(PRNAMEMAX);
+ }
+ if (j == 0)
+ ND_PRINT(" <none!>");
+ }
+ break;
+ case 505: /* Id to name */
+ {
+ uint32_t j;
+ ND_PRINT(" ids:");
+ i = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ for (j = 0; j < i; j++)
+ INTOUT();
+ if (j == 0)
+ ND_PRINT(" <none!>");
+ }
+ break;
+ case 509: /* New entry */
+ STROUT(PRNAMEMAX);
+ ND_PRINT(" flag");
+ INTOUT();
+ ND_PRINT(" oid");
+ INTOUT();
+ break;
+ case 511: /* Set max */
+ ND_PRINT(" id");
+ INTOUT();
+ ND_PRINT(" gflag");
+ INTOUT();
+ break;
+ case 513: /* Change entry */
+ ND_PRINT(" id");
+ INTOUT();
+ STROUT(PRNAMEMAX);
+ ND_PRINT(" oldid");
+ INTOUT();
+ ND_PRINT(" newid");
+ INTOUT();
+ break;
+ case 520: /* Update entry */
+ ND_PRINT(" id");
+ INTOUT();
+ STROUT(PRNAMEMAX);
+ break;
+ default:
+ ;
+ }
+
+
+ return;
+
+trunc:
+ ND_PRINT(" [|pt]");
+}
+
+/*
+ * Handle replies to the AFS protection service
+ */
+
+static void
+prot_reply_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, uint32_t opcode)
+{
+ const struct rx_header *rxh;
+ uint8_t type;
+ uint32_t i;
+
+ if (length < sizeof(struct rx_header))
+ return;
+
+ rxh = (const struct rx_header *) bp;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from ptserver/ptint.xg. Check to see if it's a
+ * Ubik call, however.
+ */
+
+ ND_PRINT(" pt");
+
+ if (is_ubik(opcode)) {
+ ubik_reply_print(ndo, bp, length, opcode);
+ return;
+ }
+
+ ND_PRINT(" reply %s", tok2str(pt_req, "op#%u", opcode));
+
+ type = GET_U_1(rxh->type);
+ bp += sizeof(struct rx_header);
+
+ /*
+ * If it was a data packet, interpret the response
+ */
+
+ if (type == RX_PACKET_TYPE_DATA)
+ switch (opcode) {
+ case 504: /* Name to ID */
+ {
+ uint32_t j;
+ ND_PRINT(" ids:");
+ i = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ for (j = 0; j < i; j++)
+ INTOUT();
+ if (j == 0)
+ ND_PRINT(" <none!>");
+ }
+ break;
+ case 505: /* ID to name */
+ {
+ uint32_t j;
+ j = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+
+ /*
+ * Who designed this chicken-shit protocol?
+ *
+ * Each character is stored as a 32-bit
+ * integer!
+ */
+
+ for (i = 0; i < j; i++) {
+ VECOUT(PRNAMEMAX);
+ }
+ if (j == 0)
+ ND_PRINT(" <none!>");
+ }
+ break;
+ case 508: /* Get CPS */
+ case 514: /* List elements */
+ case 517: /* List owned */
+ case 518: /* Get CPS2 */
+ case 519: /* Get host CPS */
+ {
+ uint32_t j;
+ j = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ for (i = 0; i < j; i++) {
+ INTOUT();
+ }
+ if (j == 0)
+ ND_PRINT(" <none!>");
+ }
+ break;
+ case 510: /* List max */
+ ND_PRINT(" maxuid");
+ INTOUT();
+ ND_PRINT(" maxgid");
+ INTOUT();
+ break;
+ default:
+ ;
+ }
+ else {
+ /*
+ * Otherwise, just print out the return code
+ */
+ ND_PRINT(" errcode");
+ INTOUT();
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|pt]");
+}
+
+/*
+ * Handle calls to the AFS volume location database service
+ */
+
+static void
+vldb_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ uint32_t vldb_op;
+ uint32_t i;
+
+ if (length <= sizeof(struct rx_header))
+ return;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from vlserver/vldbint.xg
+ */
+
+ vldb_op = GET_BE_U_4(bp + sizeof(struct rx_header));
+
+ ND_PRINT(" vldb");
+
+ if (is_ubik(vldb_op)) {
+ ubik_print(ndo, bp);
+ return;
+ }
+ ND_PRINT(" call %s", tok2str(vldb_req, "op#%u", vldb_op));
+
+ /*
+ * Decode some of the arguments to the VLDB calls
+ */
+
+ bp += sizeof(struct rx_header) + 4;
+
+ switch (vldb_op) {
+ case 501: /* Create new volume */
+ case 517: /* Create entry N */
+ VECOUT(VLNAMEMAX);
+ break;
+ case 502: /* Delete entry */
+ case 503: /* Get entry by ID */
+ case 507: /* Update entry */
+ case 508: /* Set lock */
+ case 509: /* Release lock */
+ case 518: /* Get entry by ID N */
+ ND_PRINT(" volid");
+ INTOUT();
+ i = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ if (i <= 2)
+ ND_PRINT(" type %s", voltype[i]);
+ break;
+ case 504: /* Get entry by name */
+ case 519: /* Get entry by name N */
+ case 524: /* Update entry by name */
+ case 527: /* Get entry by name U */
+ STROUT(VLNAMEMAX);
+ break;
+ case 505: /* Get new vol id */
+ ND_PRINT(" bump");
+ INTOUT();
+ break;
+ case 506: /* Replace entry */
+ case 520: /* Replace entry N */
+ ND_PRINT(" volid");
+ INTOUT();
+ i = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ if (i <= 2)
+ ND_PRINT(" type %s", voltype[i]);
+ VECOUT(VLNAMEMAX);
+ break;
+ case 510: /* List entry */
+ case 521: /* List entry N */
+ ND_PRINT(" index");
+ INTOUT();
+ break;
+ default:
+ ;
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|vldb]");
+}
+
+/*
+ * Handle replies to the AFS volume location database service
+ */
+
+static void
+vldb_reply_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, uint32_t opcode)
+{
+ const struct rx_header *rxh;
+ uint8_t type;
+ uint32_t i;
+
+ if (length < sizeof(struct rx_header))
+ return;
+
+ rxh = (const struct rx_header *) bp;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from vlserver/vldbint.xg. Check to see if it's a
+ * Ubik call, however.
+ */
+
+ ND_PRINT(" vldb");
+
+ if (is_ubik(opcode)) {
+ ubik_reply_print(ndo, bp, length, opcode);
+ return;
+ }
+
+ ND_PRINT(" reply %s", tok2str(vldb_req, "op#%u", opcode));
+
+ type = GET_U_1(rxh->type);
+ bp += sizeof(struct rx_header);
+
+ /*
+ * If it was a data packet, interpret the response
+ */
+
+ if (type == RX_PACKET_TYPE_DATA)
+ switch (opcode) {
+ case 510: /* List entry */
+ ND_PRINT(" count");
+ INTOUT();
+ ND_PRINT(" nextindex");
+ INTOUT();
+ ND_FALL_THROUGH;
+ case 503: /* Get entry by id */
+ case 504: /* Get entry by name */
+ { uint32_t nservers, j;
+ VECOUT(VLNAMEMAX);
+ ND_TCHECK_4(bp);
+ bp += sizeof(uint32_t);
+ ND_PRINT(" numservers");
+ nservers = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ ND_PRINT(" %u", nservers);
+ ND_PRINT(" servers");
+ for (i = 0; i < 8; i++) {
+ ND_TCHECK_4(bp);
+ if (i < nservers)
+ ND_PRINT(" %s",
+ intoa(GET_IPV4_TO_NETWORK_ORDER(bp)));
+ bp += sizeof(nd_ipv4);
+ }
+ ND_PRINT(" partitions");
+ for (i = 0; i < 8; i++) {
+ j = GET_BE_U_4(bp);
+ if (i < nservers && j <= 26)
+ ND_PRINT(" %c", 'a' + j);
+ else if (i < nservers)
+ ND_PRINT(" %u", j);
+ bp += sizeof(uint32_t);
+ }
+ ND_TCHECK_LEN(bp, 8 * sizeof(uint32_t));
+ bp += 8 * sizeof(uint32_t);
+ ND_PRINT(" rwvol");
+ UINTOUT();
+ ND_PRINT(" rovol");
+ UINTOUT();
+ ND_PRINT(" backup");
+ UINTOUT();
+ }
+ break;
+ case 505: /* Get new volume ID */
+ ND_PRINT(" newvol");
+ UINTOUT();
+ break;
+ case 521: /* List entry */
+ case 529: /* List entry U */
+ ND_PRINT(" count");
+ INTOUT();
+ ND_PRINT(" nextindex");
+ INTOUT();
+ ND_FALL_THROUGH;
+ case 518: /* Get entry by ID N */
+ case 519: /* Get entry by name N */
+ { uint32_t nservers, j;
+ VECOUT(VLNAMEMAX);
+ ND_PRINT(" numservers");
+ nservers = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ ND_PRINT(" %u", nservers);
+ ND_PRINT(" servers");
+ for (i = 0; i < 13; i++) {
+ ND_TCHECK_4(bp);
+ if (i < nservers)
+ ND_PRINT(" %s",
+ intoa(GET_IPV4_TO_NETWORK_ORDER(bp)));
+ bp += sizeof(nd_ipv4);
+ }
+ ND_PRINT(" partitions");
+ for (i = 0; i < 13; i++) {
+ j = GET_BE_U_4(bp);
+ if (i < nservers && j <= 26)
+ ND_PRINT(" %c", 'a' + j);
+ else if (i < nservers)
+ ND_PRINT(" %u", j);
+ bp += sizeof(uint32_t);
+ }
+ ND_TCHECK_LEN(bp, 13 * sizeof(uint32_t));
+ bp += 13 * sizeof(uint32_t);
+ ND_PRINT(" rwvol");
+ UINTOUT();
+ ND_PRINT(" rovol");
+ UINTOUT();
+ ND_PRINT(" backup");
+ UINTOUT();
+ }
+ break;
+ case 526: /* Get entry by ID U */
+ case 527: /* Get entry by name U */
+ { uint32_t nservers, j;
+ VECOUT(VLNAMEMAX);
+ ND_PRINT(" numservers");
+ nservers = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ ND_PRINT(" %u", nservers);
+ ND_PRINT(" servers");
+ for (i = 0; i < 13; i++) {
+ if (i < nservers) {
+ ND_PRINT(" afsuuid");
+ AFSUUIDOUT();
+ } else {
+ ND_TCHECK_LEN(bp, 44);
+ bp += 44;
+ }
+ }
+ ND_TCHECK_LEN(bp, 4 * 13);
+ bp += 4 * 13;
+ ND_PRINT(" partitions");
+ for (i = 0; i < 13; i++) {
+ j = GET_BE_U_4(bp);
+ if (i < nservers && j <= 26)
+ ND_PRINT(" %c", 'a' + j);
+ else if (i < nservers)
+ ND_PRINT(" %u", j);
+ bp += sizeof(uint32_t);
+ }
+ ND_TCHECK_LEN(bp, 13 * sizeof(uint32_t));
+ bp += 13 * sizeof(uint32_t);
+ ND_PRINT(" rwvol");
+ UINTOUT();
+ ND_PRINT(" rovol");
+ UINTOUT();
+ ND_PRINT(" backup");
+ UINTOUT();
+ }
+ default:
+ ;
+ }
+
+ else {
+ /*
+ * Otherwise, just print out the return code
+ */
+ ND_PRINT(" errcode");
+ INTOUT();
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|vldb]");
+}
+
+/*
+ * Handle calls to the AFS Kerberos Authentication service
+ */
+
+static void
+kauth_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ uint32_t kauth_op;
+
+ if (length <= sizeof(struct rx_header))
+ return;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from kauth/kauth.rg
+ */
+
+ kauth_op = GET_BE_U_4(bp + sizeof(struct rx_header));
+
+ ND_PRINT(" kauth");
+
+ if (is_ubik(kauth_op)) {
+ ubik_print(ndo, bp);
+ return;
+ }
+
+
+ ND_PRINT(" call %s", tok2str(kauth_req, "op#%u", kauth_op));
+
+ /*
+ * Decode some of the arguments to the KA calls
+ */
+
+ bp += sizeof(struct rx_header) + 4;
+
+ switch (kauth_op) {
+ case 1: /* Authenticate old */
+ case 21: /* Authenticate */
+ case 22: /* Authenticate-V2 */
+ case 2: /* Change PW */
+ case 5: /* Set fields */
+ case 6: /* Create user */
+ case 7: /* Delete user */
+ case 8: /* Get entry */
+ case 14: /* Unlock */
+ case 15: /* Lock status */
+ ND_PRINT(" principal");
+ STROUT(KANAMEMAX);
+ STROUT(KANAMEMAX);
+ break;
+ case 3: /* GetTicket-old */
+ case 23: /* GetTicket */
+ {
+ uint32_t i;
+ ND_PRINT(" kvno");
+ INTOUT();
+ ND_PRINT(" domain");
+ STROUT(KANAMEMAX);
+ i = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ ND_TCHECK_LEN(bp, i);
+ bp += i;
+ ND_PRINT(" principal");
+ STROUT(KANAMEMAX);
+ STROUT(KANAMEMAX);
+ break;
+ }
+ case 4: /* Set Password */
+ ND_PRINT(" principal");
+ STROUT(KANAMEMAX);
+ STROUT(KANAMEMAX);
+ ND_PRINT(" kvno");
+ INTOUT();
+ break;
+ case 12: /* Get password */
+ ND_PRINT(" name");
+ STROUT(KANAMEMAX);
+ break;
+ default:
+ ;
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|kauth]");
+}
+
+/*
+ * Handle replies to the AFS Kerberos Authentication Service
+ */
+
+static void
+kauth_reply_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, uint32_t opcode)
+{
+ const struct rx_header *rxh;
+ uint8_t type;
+
+ if (length <= sizeof(struct rx_header))
+ return;
+
+ rxh = (const struct rx_header *) bp;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from kauth/kauth.rg
+ */
+
+ ND_PRINT(" kauth");
+
+ if (is_ubik(opcode)) {
+ ubik_reply_print(ndo, bp, length, opcode);
+ return;
+ }
+
+ ND_PRINT(" reply %s", tok2str(kauth_req, "op#%u", opcode));
+
+ type = GET_U_1(rxh->type);
+ bp += sizeof(struct rx_header);
+
+ /*
+ * If it was a data packet, interpret the response.
+ */
+
+ if (type == RX_PACKET_TYPE_DATA)
+ /* Well, no, not really. Leave this for later */
+ ;
+ else {
+ /*
+ * Otherwise, just print out the return code
+ */
+ ND_PRINT(" errcode");
+ INTOUT();
+ }
+}
+
+/*
+ * Handle calls to the AFS Volume location service
+ */
+
+static void
+vol_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ uint32_t vol_op;
+
+ if (length <= sizeof(struct rx_header))
+ return;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from volser/volint.xg
+ */
+
+ vol_op = GET_BE_U_4(bp + sizeof(struct rx_header));
+
+ ND_PRINT(" vol call %s", tok2str(vol_req, "op#%u", vol_op));
+
+ bp += sizeof(struct rx_header) + 4;
+
+ switch (vol_op) {
+ case 100: /* Create volume */
+ ND_PRINT(" partition");
+ UINTOUT();
+ ND_PRINT(" name");
+ STROUT(AFSNAMEMAX);
+ ND_PRINT(" type");
+ UINTOUT();
+ ND_PRINT(" parent");
+ UINTOUT();
+ break;
+ case 101: /* Delete volume */
+ case 107: /* Get flags */
+ ND_PRINT(" trans");
+ UINTOUT();
+ break;
+ case 102: /* Restore */
+ ND_PRINT(" totrans");
+ UINTOUT();
+ ND_PRINT(" flags");
+ UINTOUT();
+ break;
+ case 103: /* Forward */
+ ND_PRINT(" fromtrans");
+ UINTOUT();
+ ND_PRINT(" fromdate");
+ DATEOUT();
+ DESTSERVEROUT();
+ ND_PRINT(" desttrans");
+ INTOUT();
+ break;
+ case 104: /* End trans */
+ ND_PRINT(" trans");
+ UINTOUT();
+ break;
+ case 105: /* Clone */
+ ND_PRINT(" trans");
+ UINTOUT();
+ ND_PRINT(" purgevol");
+ UINTOUT();
+ ND_PRINT(" newtype");
+ UINTOUT();
+ ND_PRINT(" newname");
+ STROUT(AFSNAMEMAX);
+ break;
+ case 106: /* Set flags */
+ ND_PRINT(" trans");
+ UINTOUT();
+ ND_PRINT(" flags");
+ UINTOUT();
+ break;
+ case 108: /* Trans create */
+ ND_PRINT(" vol");
+ UINTOUT();
+ ND_PRINT(" partition");
+ UINTOUT();
+ ND_PRINT(" flags");
+ UINTOUT();
+ break;
+ case 109: /* Dump */
+ case 655537: /* Get size */
+ ND_PRINT(" fromtrans");
+ UINTOUT();
+ ND_PRINT(" fromdate");
+ DATEOUT();
+ break;
+ case 110: /* Get n-th volume */
+ ND_PRINT(" index");
+ UINTOUT();
+ break;
+ case 111: /* Set forwarding */
+ ND_PRINT(" tid");
+ UINTOUT();
+ ND_PRINT(" newsite");
+ UINTOUT();
+ break;
+ case 112: /* Get name */
+ case 113: /* Get status */
+ ND_PRINT(" tid");
+ break;
+ case 114: /* Signal restore */
+ ND_PRINT(" name");
+ STROUT(AFSNAMEMAX);
+ ND_PRINT(" type");
+ UINTOUT();
+ ND_PRINT(" pid");
+ UINTOUT();
+ ND_PRINT(" cloneid");
+ UINTOUT();
+ break;
+ case 116: /* List volumes */
+ ND_PRINT(" partition");
+ UINTOUT();
+ ND_PRINT(" flags");
+ UINTOUT();
+ break;
+ case 117: /* Set id types */
+ ND_PRINT(" tid");
+ UINTOUT();
+ ND_PRINT(" name");
+ STROUT(AFSNAMEMAX);
+ ND_PRINT(" type");
+ UINTOUT();
+ ND_PRINT(" pid");
+ UINTOUT();
+ ND_PRINT(" clone");
+ UINTOUT();
+ ND_PRINT(" backup");
+ UINTOUT();
+ break;
+ case 119: /* Partition info */
+ ND_PRINT(" name");
+ STROUT(AFSNAMEMAX);
+ break;
+ case 120: /* Reclone */
+ ND_PRINT(" tid");
+ UINTOUT();
+ break;
+ case 121: /* List one volume */
+ case 122: /* Nuke volume */
+ case 124: /* Extended List volumes */
+ case 125: /* Extended List one volume */
+ case 65536: /* Convert RO to RW volume */
+ ND_PRINT(" partid");
+ UINTOUT();
+ ND_PRINT(" volid");
+ UINTOUT();
+ break;
+ case 123: /* Set date */
+ ND_PRINT(" tid");
+ UINTOUT();
+ ND_PRINT(" date");
+ DATEOUT();
+ break;
+ case 126: /* Set info */
+ ND_PRINT(" tid");
+ UINTOUT();
+ break;
+ case 128: /* Forward multiple */
+ ND_PRINT(" fromtrans");
+ UINTOUT();
+ ND_PRINT(" fromdate");
+ DATEOUT();
+ {
+ uint32_t i, j;
+ j = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ for (i = 0; i < j; i++) {
+ DESTSERVEROUT();
+ if (i != j - 1)
+ ND_PRINT(",");
+ }
+ if (j == 0)
+ ND_PRINT(" <none!>");
+ }
+ break;
+ case 65538: /* Dump version 2 */
+ ND_PRINT(" fromtrans");
+ UINTOUT();
+ ND_PRINT(" fromdate");
+ DATEOUT();
+ ND_PRINT(" flags");
+ UINTOUT();
+ break;
+ default:
+ ;
+ }
+ return;
+
+trunc:
+ ND_PRINT(" [|vol]");
+}
+
+/*
+ * Handle replies to the AFS Volume Service
+ */
+
+static void
+vol_reply_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, uint32_t opcode)
+{
+ const struct rx_header *rxh;
+ uint8_t type;
+
+ if (length <= sizeof(struct rx_header))
+ return;
+
+ rxh = (const struct rx_header *) bp;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from volser/volint.xg
+ */
+
+ ND_PRINT(" vol reply %s", tok2str(vol_req, "op#%u", opcode));
+
+ type = GET_U_1(rxh->type);
+ bp += sizeof(struct rx_header);
+
+ /*
+ * If it was a data packet, interpret the response.
+ */
+
+ if (type == RX_PACKET_TYPE_DATA) {
+ switch (opcode) {
+ case 100: /* Create volume */
+ ND_PRINT(" volid");
+ UINTOUT();
+ ND_PRINT(" trans");
+ UINTOUT();
+ break;
+ case 104: /* End transaction */
+ UINTOUT();
+ break;
+ case 105: /* Clone */
+ ND_PRINT(" newvol");
+ UINTOUT();
+ break;
+ case 107: /* Get flags */
+ UINTOUT();
+ break;
+ case 108: /* Transaction create */
+ ND_PRINT(" trans");
+ UINTOUT();
+ break;
+ case 110: /* Get n-th volume */
+ ND_PRINT(" volume");
+ UINTOUT();
+ ND_PRINT(" partition");
+ UINTOUT();
+ break;
+ case 112: /* Get name */
+ STROUT(AFSNAMEMAX);
+ break;
+ case 113: /* Get status */
+ ND_PRINT(" volid");
+ UINTOUT();
+ ND_PRINT(" nextuniq");
+ UINTOUT();
+ ND_PRINT(" type");
+ UINTOUT();
+ ND_PRINT(" parentid");
+ UINTOUT();
+ ND_PRINT(" clone");
+ UINTOUT();
+ ND_PRINT(" backup");
+ UINTOUT();
+ ND_PRINT(" restore");
+ UINTOUT();
+ ND_PRINT(" maxquota");
+ UINTOUT();
+ ND_PRINT(" minquota");
+ UINTOUT();
+ ND_PRINT(" owner");
+ UINTOUT();
+ ND_PRINT(" create");
+ DATEOUT();
+ ND_PRINT(" access");
+ DATEOUT();
+ ND_PRINT(" update");
+ DATEOUT();
+ ND_PRINT(" expire");
+ DATEOUT();
+ ND_PRINT(" backup");
+ DATEOUT();
+ ND_PRINT(" copy");
+ DATEOUT();
+ break;
+ case 115: /* Old list partitions */
+ break;
+ case 116: /* List volumes */
+ case 121: /* List one volume */
+ {
+ uint32_t i, j;
+ j = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ for (i = 0; i < j; i++) {
+ ND_PRINT(" name");
+ VECOUT(32);
+ ND_PRINT(" volid");
+ UINTOUT();
+ ND_PRINT(" type");
+ bp += sizeof(uint32_t) * 21;
+ if (i != j - 1)
+ ND_PRINT(",");
+ }
+ if (j == 0)
+ ND_PRINT(" <none!>");
+ }
+ break;
+
+
+ default:
+ ;
+ }
+ } else {
+ /*
+ * Otherwise, just print out the return code
+ */
+ ND_PRINT(" errcode");
+ INTOUT();
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|vol]");
+}
+
+/*
+ * Handle calls to the AFS BOS service
+ */
+
+static void
+bos_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ uint32_t bos_op;
+
+ if (length <= sizeof(struct rx_header))
+ return;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from bozo/bosint.xg
+ */
+
+ bos_op = GET_BE_U_4(bp + sizeof(struct rx_header));
+
+ ND_PRINT(" bos call %s", tok2str(bos_req, "op#%u", bos_op));
+
+ /*
+ * Decode some of the arguments to the BOS calls
+ */
+
+ bp += sizeof(struct rx_header) + 4;
+
+ switch (bos_op) {
+ case 80: /* Create B node */
+ ND_PRINT(" type");
+ STROUT(BOSNAMEMAX);
+ ND_PRINT(" instance");
+ STROUT(BOSNAMEMAX);
+ break;
+ case 81: /* Delete B node */
+ case 83: /* Get status */
+ case 85: /* Get instance info */
+ case 87: /* Add super user */
+ case 88: /* Delete super user */
+ case 93: /* Set cell name */
+ case 96: /* Add cell host */
+ case 97: /* Delete cell host */
+ case 104: /* Restart */
+ case 106: /* Uninstall */
+ case 108: /* Exec */
+ case 112: /* Getlog */
+ case 114: /* Get instance strings */
+ STROUT(BOSNAMEMAX);
+ break;
+ case 82: /* Set status */
+ case 98: /* Set T status */
+ STROUT(BOSNAMEMAX);
+ ND_PRINT(" status");
+ INTOUT();
+ break;
+ case 86: /* Get instance parm */
+ STROUT(BOSNAMEMAX);
+ ND_PRINT(" num");
+ INTOUT();
+ break;
+ case 84: /* Enumerate instance */
+ case 89: /* List super users */
+ case 90: /* List keys */
+ case 91: /* Add key */
+ case 92: /* Delete key */
+ case 95: /* Get cell host */
+ INTOUT();
+ break;
+ case 105: /* Install */
+ STROUT(BOSNAMEMAX);
+ ND_PRINT(" size");
+ INTOUT();
+ ND_PRINT(" flags");
+ INTOUT();
+ ND_PRINT(" date");
+ INTOUT();
+ break;
+ default:
+ ;
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|bos]");
+}
+
+/*
+ * Handle replies to the AFS BOS Service
+ */
+
+static void
+bos_reply_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, uint32_t opcode)
+{
+ const struct rx_header *rxh;
+ uint8_t type;
+
+ if (length <= sizeof(struct rx_header))
+ return;
+
+ rxh = (const struct rx_header *) bp;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from volser/volint.xg
+ */
+
+ ND_PRINT(" bos reply %s", tok2str(bos_req, "op#%u", opcode));
+
+ type = GET_U_1(rxh->type);
+ bp += sizeof(struct rx_header);
+
+ /*
+ * If it was a data packet, interpret the response.
+ */
+
+ if (type == RX_PACKET_TYPE_DATA)
+ /* Well, no, not really. Leave this for later */
+ ;
+ else {
+ /*
+ * Otherwise, just print out the return code
+ */
+ ND_PRINT(" errcode");
+ INTOUT();
+ }
+}
+
+/*
+ * Check to see if this is a Ubik opcode.
+ */
+
+static int
+is_ubik(uint32_t opcode)
+{
+ if ((opcode >= VOTE_LOW && opcode <= VOTE_HIGH) ||
+ (opcode >= DISK_LOW && opcode <= DISK_HIGH))
+ return(1);
+ else
+ return(0);
+}
+
+/*
+ * Handle Ubik opcodes to any one of the replicated database services
+ */
+
+static void
+ubik_print(netdissect_options *ndo,
+ const u_char *bp)
+{
+ uint32_t ubik_op;
+ uint32_t temp;
+
+ /*
+ * Print out the afs call we're invoking. The table used here was
+ * gleaned from ubik/ubik_int.xg
+ */
+
+ /* Every function that calls this function first makes a bounds check
+ * for (sizeof(rx_header) + 4) bytes, so long as it remains this way
+ * the line below will not over-read.
+ */
+ ubik_op = GET_BE_U_4(bp + sizeof(struct rx_header));
+
+ ND_PRINT(" ubik call %s", tok2str(ubik_req, "op#%u", ubik_op));
+
+ /*
+ * Decode some of the arguments to the Ubik calls
+ */
+
+ bp += sizeof(struct rx_header) + 4;
+
+ switch (ubik_op) {
+ case 10000: /* Beacon */
+ temp = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ ND_PRINT(" syncsite %s", temp ? "yes" : "no");
+ ND_PRINT(" votestart");
+ DATEOUT();
+ ND_PRINT(" dbversion");
+ UBIK_VERSIONOUT();
+ ND_PRINT(" tid");
+ UBIK_VERSIONOUT();
+ break;
+ case 10003: /* Get sync site */
+ ND_PRINT(" site");
+ UINTOUT();
+ break;
+ case 20000: /* Begin */
+ case 20001: /* Commit */
+ case 20007: /* Abort */
+ case 20008: /* Release locks */
+ case 20010: /* Writev */
+ ND_PRINT(" tid");
+ UBIK_VERSIONOUT();
+ break;
+ case 20002: /* Lock */
+ ND_PRINT(" tid");
+ UBIK_VERSIONOUT();
+ ND_PRINT(" file");
+ INTOUT();
+ ND_PRINT(" pos");
+ INTOUT();
+ ND_PRINT(" length");
+ INTOUT();
+ temp = GET_BE_U_4(bp);
+ bp += sizeof(uint32_t);
+ tok2str(ubik_lock_types, "type %u", temp);
+ break;
+ case 20003: /* Write */
+ ND_PRINT(" tid");
+ UBIK_VERSIONOUT();
+ ND_PRINT(" file");
+ INTOUT();
+ ND_PRINT(" pos");
+ INTOUT();
+ break;
+ case 20005: /* Get file */
+ ND_PRINT(" file");
+ INTOUT();
+ break;
+ case 20006: /* Send file */
+ ND_PRINT(" file");
+ INTOUT();
+ ND_PRINT(" length");
+ INTOUT();
+ ND_PRINT(" dbversion");
+ UBIK_VERSIONOUT();
+ break;
+ case 20009: /* Truncate */
+ ND_PRINT(" tid");
+ UBIK_VERSIONOUT();
+ ND_PRINT(" file");
+ INTOUT();
+ ND_PRINT(" length");
+ INTOUT();
+ break;
+ case 20012: /* Set version */
+ ND_PRINT(" tid");
+ UBIK_VERSIONOUT();
+ ND_PRINT(" oldversion");
+ UBIK_VERSIONOUT();
+ ND_PRINT(" newversion");
+ UBIK_VERSIONOUT();
+ break;
+ default:
+ ;
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|ubik]");
+}
+
+/*
+ * Handle Ubik replies to any one of the replicated database services
+ */
+
+static void
+ubik_reply_print(netdissect_options *ndo,
+ const u_char *bp, u_int length, uint32_t opcode)
+{
+ const struct rx_header *rxh;
+ uint8_t type;
+
+ if (length < sizeof(struct rx_header))
+ return;
+
+ rxh = (const struct rx_header *) bp;
+
+ /*
+ * Print out the ubik call we're invoking. This table was gleaned
+ * from ubik/ubik_int.xg
+ */
+
+ ND_PRINT(" ubik reply %s", tok2str(ubik_req, "op#%u", opcode));
+
+ type = GET_U_1(rxh->type);
+ bp += sizeof(struct rx_header);
+
+ /*
+ * If it was a data packet, print out the arguments to the Ubik calls
+ */
+
+ if (type == RX_PACKET_TYPE_DATA)
+ switch (opcode) {
+ case 10000: /* Beacon */
+ ND_PRINT(" vote no");
+ break;
+ case 20004: /* Get version */
+ ND_PRINT(" dbversion");
+ UBIK_VERSIONOUT();
+ break;
+ default:
+ ;
+ }
+
+ /*
+ * Otherwise, print out "yes" if it was a beacon packet (because
+ * that's how yes votes are returned, go figure), otherwise
+ * just print out the error code.
+ */
+
+ else
+ switch (opcode) {
+ case 10000: /* Beacon */
+ ND_PRINT(" vote yes until");
+ DATEOUT();
+ break;
+ default:
+ ND_PRINT(" errcode");
+ INTOUT();
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|ubik]");
+}
+
+/*
+ * Handle RX ACK packets.
+ */
+
+static void
+rx_ack_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ const struct rx_ackPacket *rxa;
+ uint8_t nAcks;
+ int i, start, last;
+ uint32_t firstPacket;
+
+ if (length < sizeof(struct rx_header))
+ return;
+
+ bp += sizeof(struct rx_header);
+
+ ND_TCHECK_LEN(bp, sizeof(struct rx_ackPacket));
+
+ rxa = (const struct rx_ackPacket *) bp;
+ bp += sizeof(struct rx_ackPacket);
+
+ /*
+ * Print out a few useful things from the ack packet structure
+ */
+
+ if (ndo->ndo_vflag > 2)
+ ND_PRINT(" bufspace %u maxskew %u",
+ GET_BE_U_2(rxa->bufferSpace),
+ GET_BE_U_2(rxa->maxSkew));
+
+ firstPacket = GET_BE_U_4(rxa->firstPacket);
+ ND_PRINT(" first %u serial %u reason %s",
+ firstPacket, GET_BE_U_4(rxa->serial),
+ tok2str(rx_ack_reasons, "#%u", GET_U_1(rxa->reason)));
+
+ /*
+ * Okay, now we print out the ack array. The way _this_ works
+ * is that we start at "first", and step through the ack array.
+ * If we have a contiguous range of acks/nacks, try to
+ * collapse them into a range.
+ *
+ * If you're really clever, you might have noticed that this
+ * doesn't seem quite correct. Specifically, due to structure
+ * padding, sizeof(struct rx_ackPacket) - RX_MAXACKS won't actually
+ * yield the start of the ack array (because RX_MAXACKS is 255
+ * and the structure will likely get padded to a 2 or 4 byte
+ * boundary). However, this is the way it's implemented inside
+ * of AFS - the start of the extra fields are at
+ * sizeof(struct rx_ackPacket) - RX_MAXACKS + nAcks, which _isn't_
+ * the exact start of the ack array. Sigh. That's why we aren't
+ * using bp, but instead use rxa->acks[]. But nAcks gets added
+ * to bp after this, so bp ends up at the right spot. Go figure.
+ */
+
+ nAcks = GET_U_1(rxa->nAcks);
+ if (nAcks != 0) {
+
+ ND_TCHECK_LEN(bp, nAcks);
+
+ /*
+ * Sigh, this is gross, but it seems to work to collapse
+ * ranges correctly.
+ */
+
+ for (i = 0, start = last = -2; i < nAcks; i++)
+ if (GET_U_1(bp + i) == RX_ACK_TYPE_ACK) {
+
+ /*
+ * I figured this deserved _some_ explanation.
+ * First, print "acked" and the packet seq
+ * number if this is the first time we've
+ * seen an acked packet.
+ */
+
+ if (last == -2) {
+ ND_PRINT(" acked %u", firstPacket + i);
+ start = i;
+ }
+
+ /*
+ * Otherwise, if there is a skip in
+ * the range (such as an nacked packet in
+ * the middle of some acked packets),
+ * then print the current packet number
+ * separated from the last number by
+ * a comma.
+ */
+
+ else if (last != i - 1) {
+ ND_PRINT(",%u", firstPacket + i);
+ start = i;
+ }
+
+ /*
+ * We always set last to the value of
+ * the last ack we saw. Conversely, start
+ * is set to the value of the first ack
+ * we saw in a range.
+ */
+
+ last = i;
+
+ /*
+ * Okay, this bit a code gets executed when
+ * we hit a nack ... in _this_ case we
+ * want to print out the range of packets
+ * that were acked, so we need to print
+ * the _previous_ packet number separated
+ * from the first by a dash (-). Since we
+ * already printed the first packet above,
+ * just print the final packet. Don't
+ * do this if there will be a single-length
+ * range.
+ */
+ } else if (last == i - 1 && start != last)
+ ND_PRINT("-%u", firstPacket + i - 1);
+
+ /*
+ * So, what's going on here? We ran off the end of the
+ * ack list, and if we got a range we need to finish it up.
+ * So we need to determine if the last packet in the list
+ * was an ack (if so, then last will be set to it) and
+ * we need to see if the last range didn't start with the
+ * last packet (because if it _did_, then that would mean
+ * that the packet number has already been printed and
+ * we don't need to print it again).
+ */
+
+ if (last == i - 1 && start != last)
+ ND_PRINT("-%u", firstPacket + i - 1);
+
+ /*
+ * Same as above, just without comments
+ */
+
+ for (i = 0, start = last = -2; i < nAcks; i++)
+ if (GET_U_1(bp + i) == RX_ACK_TYPE_NACK) {
+ if (last == -2) {
+ ND_PRINT(" nacked %u", firstPacket + i);
+ start = i;
+ } else if (last != i - 1) {
+ ND_PRINT(",%u", firstPacket + i);
+ start = i;
+ }
+ last = i;
+ } else if (last == i - 1 && start != last)
+ ND_PRINT("-%u", firstPacket + i - 1);
+
+ if (last == i - 1 && start != last)
+ ND_PRINT("-%u", firstPacket + i - 1);
+
+ bp += nAcks;
+ }
+
+ /* Padding. */
+ bp += 3;
+
+ /*
+ * These are optional fields; depending on your version of AFS,
+ * you may or may not see them
+ */
+
+#define TRUNCRET(n) if (ndo->ndo_snapend - bp + 1 <= n) return;
+
+ if (ndo->ndo_vflag > 1) {
+ TRUNCRET(4);
+ ND_PRINT(" ifmtu");
+ UINTOUT();
+
+ TRUNCRET(4);
+ ND_PRINT(" maxmtu");
+ UINTOUT();
+
+ TRUNCRET(4);
+ ND_PRINT(" rwind");
+ UINTOUT();
+
+ TRUNCRET(4);
+ ND_PRINT(" maxpackets");
+ UINTOUT();
+ }
+
+ return;
+
+trunc:
+ ND_PRINT(" [|ack]");
+}
+#undef TRUNCRET
diff --git a/print-sctp.c b/print-sctp.c
new file mode 100644
index 0000000..ad0f785
--- /dev/null
+++ b/print-sctp.c
@@ -0,0 +1,775 @@
+/* Copyright (c) 2001 NETLAB, Temple University
+ * Copyright (c) 2001 Protocol Engineering Lab, University of Delaware
+ *
+ * Jerry Heinz <gheinz@astro.temple.edu>
+ * John Fiore <jfiore@joda.cis.temple.edu>
+ * Armando L. Caro Jr. <acaro@cis.udel.edu>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the University nor of the Laboratory may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* \summary: Stream Control Transmission Protocol (SCTP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+#include "ip.h"
+#include "ip6.h"
+
+/* Definitions from:
+ *
+ * SCTP reference Implementation Copyright (C) 1999 Cisco And Motorola
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of Cisco nor of Motorola may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * This file is part of the SCTP reference Implementation
+ *
+ *
+ * Please send any bug reports or fixes you make to one of the following email
+ * addresses:
+ *
+ * rstewar1@email.mot.com
+ * kmorneau@cisco.com
+ * qxie1@email.mot.com
+ *
+ * Any bugs reported given to us we will try to fix... any fixes shared will
+ * be incorporated into the next SCTP release.
+ */
+
+/* The valid defines for all message
+ * types know to SCTP. 0 is reserved
+ */
+#define SCTP_DATA 0x00
+#define SCTP_INITIATION 0x01
+#define SCTP_INITIATION_ACK 0x02
+#define SCTP_SELECTIVE_ACK 0x03
+#define SCTP_HEARTBEAT_REQUEST 0x04
+#define SCTP_HEARTBEAT_ACK 0x05
+#define SCTP_ABORT_ASSOCIATION 0x06
+#define SCTP_SHUTDOWN 0x07
+#define SCTP_SHUTDOWN_ACK 0x08
+#define SCTP_OPERATION_ERR 0x09
+#define SCTP_COOKIE_ECHO 0x0a
+#define SCTP_COOKIE_ACK 0x0b
+#define SCTP_ECN_ECHO 0x0c
+#define SCTP_ECN_CWR 0x0d
+#define SCTP_SHUTDOWN_COMPLETE 0x0e
+#define SCTP_FORWARD_CUM_TSN 0xc0
+#define SCTP_RELIABLE_CNTL 0xc1
+#define SCTP_RELIABLE_CNTL_ACK 0xc2
+
+static const struct tok sctp_chunkid_str[] = {
+ { SCTP_DATA, "DATA" },
+ { SCTP_INITIATION, "INIT" },
+ { SCTP_INITIATION_ACK, "INIT ACK" },
+ { SCTP_SELECTIVE_ACK, "SACK" },
+ { SCTP_HEARTBEAT_REQUEST, "HB REQ" },
+ { SCTP_HEARTBEAT_ACK, "HB ACK" },
+ { SCTP_ABORT_ASSOCIATION, "ABORT" },
+ { SCTP_SHUTDOWN, "SHUTDOWN" },
+ { SCTP_SHUTDOWN_ACK, "SHUTDOWN ACK" },
+ { SCTP_OPERATION_ERR, "OP ERR" },
+ { SCTP_COOKIE_ECHO, "COOKIE ECHO" },
+ { SCTP_COOKIE_ACK, "COOKIE ACK" },
+ { SCTP_ECN_ECHO, "ECN ECHO" },
+ { SCTP_ECN_CWR, "ECN CWR" },
+ { SCTP_SHUTDOWN_COMPLETE, "SHUTDOWN COMPLETE" },
+ { SCTP_FORWARD_CUM_TSN, "FOR CUM TSN" },
+ { SCTP_RELIABLE_CNTL, "REL CTRL" },
+ { SCTP_RELIABLE_CNTL_ACK, "REL CTRL ACK" },
+ { 0, NULL }
+};
+
+/* Data Chuck Specific Flags */
+#define SCTP_DATA_FRAG_MASK 0x03
+#define SCTP_DATA_MIDDLE_FRAG 0x00
+#define SCTP_DATA_LAST_FRAG 0x01
+#define SCTP_DATA_FIRST_FRAG 0x02
+#define SCTP_DATA_NOT_FRAG 0x03
+#define SCTP_DATA_UNORDERED 0x04
+
+#define SCTP_ADDRMAX 60
+
+#define CHAN_HP 6704
+#define CHAN_MP 6705
+#define CHAN_LP 6706
+
+/* the sctp common header */
+
+struct sctpHeader{
+ nd_uint16_t source;
+ nd_uint16_t destination;
+ nd_uint32_t verificationTag;
+ nd_uint32_t adler32;
+};
+
+/* various descriptor parsers */
+
+struct sctpChunkDesc{
+ nd_uint8_t chunkID;
+ nd_uint8_t chunkFlg;
+ nd_uint16_t chunkLength;
+};
+
+struct sctpParamDesc{
+ nd_uint16_t paramType;
+ nd_uint16_t paramLength;
+};
+
+
+struct sctpRelChunkDesc{
+ struct sctpChunkDesc chk;
+ nd_uint32_t serialNumber;
+};
+
+struct sctpVendorSpecificParam {
+ struct sctpParamDesc p; /* type must be 0xfffe */
+ nd_uint32_t vendorId; /* vendor ID from RFC 1700 */
+ nd_uint16_t vendorSpecificType;
+ nd_uint16_t vendorSpecificLen;
+};
+
+
+/* Structures for the control parts */
+
+
+
+/* Sctp association init request/ack */
+
+/* this is used for init ack, too */
+struct sctpInitiation{
+ nd_uint32_t initTag; /* tag of mine */
+ nd_uint32_t rcvWindowCredit; /* rwnd */
+ nd_uint16_t NumPreopenStreams; /* OS */
+ nd_uint16_t MaxInboundStreams; /* MIS */
+ nd_uint32_t initialTSN;
+ /* optional param's follow in sctpParamDesc form */
+};
+
+struct sctpV4IpAddress{
+ struct sctpParamDesc p; /* type is set to SCTP_IPV4_PARAM_TYPE, len=10 */
+ nd_ipv4 ipAddress;
+};
+
+
+struct sctpV6IpAddress{
+ struct sctpParamDesc p; /* type is set to SCTP_IPV6_PARAM_TYPE, len=22 */
+ nd_ipv6 ipAddress;
+};
+
+struct sctpDNSName{
+ struct sctpParamDesc param;
+ nd_byte name[1];
+};
+
+
+struct sctpCookiePreserve{
+ struct sctpParamDesc p; /* type is set to SCTP_COOKIE_PRESERVE, len=8 */
+ nd_uint32_t extraTime;
+};
+
+
+struct sctpTimeStamp{
+ nd_uint32_t ts_sec;
+ nd_uint32_t ts_usec;
+};
+
+
+/* this guy is for use when
+ * I have a initiate message gloming the
+ * things together.
+
+ */
+struct sctpUnifiedInit{
+ struct sctpChunkDesc uh;
+ struct sctpInitiation initm;
+};
+
+struct sctpSendableInit{
+ struct sctpHeader mh;
+ struct sctpUnifiedInit msg;
+};
+
+
+/* Selective Acknowledgement
+ * has the following structure with
+ * a optional amount of trailing int's
+ * on the last part (based on the numberOfDesc
+ * field).
+ */
+
+struct sctpSelectiveAck{
+ nd_uint32_t highestConseqTSN;
+ nd_uint32_t updatedRwnd;
+ nd_uint16_t numberOfdesc;
+ nd_uint16_t numDupTsns;
+};
+
+struct sctpSelectiveFrag{
+ nd_uint16_t fragmentStart;
+ nd_uint16_t fragmentEnd;
+};
+
+
+struct sctpUnifiedSack{
+ struct sctpChunkDesc uh;
+ struct sctpSelectiveAck sack;
+};
+
+/* for the abort and shutdown ACK
+ * we must carry the init tag in the common header. Just the
+ * common header is all that is needed with a chunk descriptor.
+ */
+struct sctpUnifiedAbort{
+ struct sctpChunkDesc uh;
+};
+
+struct sctpUnifiedAbortLight{
+ struct sctpHeader mh;
+ struct sctpChunkDesc uh;
+};
+
+struct sctpUnifiedAbortHeavy{
+ struct sctpHeader mh;
+ struct sctpChunkDesc uh;
+ nd_uint16_t causeCode;
+ nd_uint16_t causeLen;
+};
+
+/* For the graceful shutdown we must carry
+ * the tag (in common header) and the highest consequitive acking value
+ */
+struct sctpShutdown {
+ nd_uint32_t TSN_Seen;
+};
+
+struct sctpUnifiedShutdown{
+ struct sctpChunkDesc uh;
+ struct sctpShutdown shut;
+};
+
+/* in the unified message we add the trailing
+ * stream id since it is the only message
+ * that is defined as a operation error.
+ */
+struct sctpOpErrorCause{
+ nd_uint16_t cause;
+ nd_uint16_t causeLen;
+};
+
+struct sctpUnifiedOpError{
+ struct sctpChunkDesc uh;
+ struct sctpOpErrorCause c;
+};
+
+struct sctpUnifiedStreamError{
+ struct sctpHeader mh;
+ struct sctpChunkDesc uh;
+ struct sctpOpErrorCause c;
+ nd_uint16_t strmNum;
+ nd_uint16_t reserved;
+};
+
+struct staleCookieMsg{
+ struct sctpHeader mh;
+ struct sctpChunkDesc uh;
+ struct sctpOpErrorCause c;
+ nd_uint32_t moretime;
+};
+
+/* the following is used in all sends
+ * where nothing is needed except the
+ * chunk/type i.e. shutdownAck Abort */
+
+struct sctpUnifiedSingleMsg{
+ struct sctpHeader mh;
+ struct sctpChunkDesc uh;
+};
+
+struct sctpDataPart{
+ nd_uint32_t TSN;
+ nd_uint16_t streamId;
+ nd_uint16_t sequence;
+ nd_uint32_t payloadtype;
+};
+
+struct sctpUnifiedDatagram{
+ struct sctpChunkDesc uh;
+ struct sctpDataPart dp;
+};
+
+struct sctpECN_echo{
+ struct sctpChunkDesc uh;
+ nd_uint32_t Lowest_TSN;
+};
+
+
+struct sctpCWR{
+ struct sctpChunkDesc uh;
+ nd_uint32_t TSN_reduced_at;
+};
+
+static const struct tok ForCES_channels[] = {
+ { CHAN_HP, "ForCES HP" },
+ { CHAN_MP, "ForCES MP" },
+ { CHAN_LP, "ForCES LP" },
+ { 0, NULL }
+};
+
+/* data chunk's payload protocol identifiers */
+
+#define SCTP_PPID_IUA 1
+#define SCTP_PPID_M2UA 2
+#define SCTP_PPID_M3UA 3
+#define SCTP_PPID_SUA 4
+#define SCTP_PPID_M2PA 5
+#define SCTP_PPID_V5UA 6
+#define SCTP_PPID_H248 7
+#define SCTP_PPID_BICC 8
+#define SCTP_PPID_TALI 9
+#define SCTP_PPID_DUA 10
+#define SCTP_PPID_ASAP 11
+#define SCTP_PPID_ENRP 12
+#define SCTP_PPID_H323 13
+#define SCTP_PPID_QIPC 14
+#define SCTP_PPID_SIMCO 15
+#define SCTP_PPID_DDPSC 16
+#define SCTP_PPID_DDPSSC 17
+#define SCTP_PPID_S1AP 18
+#define SCTP_PPID_RUA 19
+#define SCTP_PPID_HNBAP 20
+#define SCTP_PPID_FORCES_HP 21
+#define SCTP_PPID_FORCES_MP 22
+#define SCTP_PPID_FORCES_LP 23
+#define SCTP_PPID_SBC_AP 24
+#define SCTP_PPID_NBAP 25
+/* 26 */
+#define SCTP_PPID_X2AP 27
+
+static const struct tok PayloadProto_idents[] = {
+ { SCTP_PPID_IUA, "ISDN Q.921" },
+ { SCTP_PPID_M2UA, "M2UA" },
+ { SCTP_PPID_M3UA, "M3UA" },
+ { SCTP_PPID_SUA, "SUA" },
+ { SCTP_PPID_M2PA, "M2PA" },
+ { SCTP_PPID_V5UA, "V5.2" },
+ { SCTP_PPID_H248, "H.248" },
+ { SCTP_PPID_BICC, "BICC" },
+ { SCTP_PPID_TALI, "TALI" },
+ { SCTP_PPID_DUA, "DUA" },
+ { SCTP_PPID_ASAP, "ASAP" },
+ { SCTP_PPID_ENRP, "ENRP" },
+ { SCTP_PPID_H323, "H.323" },
+ { SCTP_PPID_QIPC, "Q.IPC" },
+ { SCTP_PPID_SIMCO, "SIMCO" },
+ { SCTP_PPID_DDPSC, "DDPSC" },
+ { SCTP_PPID_DDPSSC, "DDPSSC" },
+ { SCTP_PPID_S1AP, "S1AP" },
+ { SCTP_PPID_RUA, "RUA" },
+ { SCTP_PPID_HNBAP, "HNBAP" },
+ { SCTP_PPID_FORCES_HP, "ForCES HP" },
+ { SCTP_PPID_FORCES_MP, "ForCES MP" },
+ { SCTP_PPID_FORCES_LP, "ForCES LP" },
+ { SCTP_PPID_SBC_AP, "SBc-AP" },
+ { SCTP_PPID_NBAP, "NBAP" },
+ /* 26 */
+ { SCTP_PPID_X2AP, "X2AP" },
+ { 0, NULL }
+};
+
+
+static int
+isForCES_port(u_short Port)
+{
+ if (Port == CHAN_HP)
+ return 1;
+ if (Port == CHAN_MP)
+ return 1;
+ if (Port == CHAN_LP)
+ return 1;
+
+ return 0;
+}
+
+void
+sctp_print(netdissect_options *ndo,
+ const u_char *bp, /* beginning of sctp packet */
+ const u_char *bp2, /* beginning of enclosing */
+ u_int sctpPacketLength) /* ip packet */
+{
+ u_int sctpPacketLengthRemaining;
+ const struct sctpHeader *sctpPktHdr;
+ const struct ip *ip;
+ const struct ip6_hdr *ip6;
+ uint8_t chunkID;
+ u_short sourcePort, destPort;
+ u_int chunkCount;
+ const struct sctpChunkDesc *chunkDescPtr;
+ const char *sep;
+ int isforces = 0;
+
+ ndo->ndo_protocol = "sctp";
+ if (sctpPacketLength < sizeof(struct sctpHeader))
+ {
+ ND_PRINT("truncated-sctp - %zu bytes missing!",
+ sizeof(struct sctpHeader) - sctpPacketLength);
+ return;
+ }
+ sctpPktHdr = (const struct sctpHeader*) bp;
+ ND_TCHECK_SIZE(sctpPktHdr);
+ sctpPacketLengthRemaining = sctpPacketLength;
+
+ sourcePort = GET_BE_U_2(sctpPktHdr->source);
+ destPort = GET_BE_U_2(sctpPktHdr->destination);
+
+ ip = (const struct ip *)bp2;
+ if (IP_V(ip) == 6)
+ ip6 = (const struct ip6_hdr *)bp2;
+ else
+ ip6 = NULL;
+
+ if (ip6) {
+ ND_PRINT("%s.%u > %s.%u: sctp",
+ GET_IP6ADDR_STRING(ip6->ip6_src),
+ sourcePort,
+ GET_IP6ADDR_STRING(ip6->ip6_dst),
+ destPort);
+ } else {
+ ND_PRINT("%s.%u > %s.%u: sctp",
+ GET_IPADDR_STRING(ip->ip_src),
+ sourcePort,
+ GET_IPADDR_STRING(ip->ip_dst),
+ destPort);
+ }
+
+ if (isForCES_port(sourcePort)) {
+ ND_PRINT("[%s]", tok2str(ForCES_channels, NULL, sourcePort));
+ isforces = 1;
+ }
+ if (isForCES_port(destPort)) {
+ ND_PRINT("[%s]", tok2str(ForCES_channels, NULL, destPort));
+ isforces = 1;
+ }
+
+ bp += sizeof(struct sctpHeader);
+ sctpPacketLengthRemaining -= sizeof(struct sctpHeader);
+
+ if (ndo->ndo_vflag >= 2)
+ sep = "\n\t";
+ else
+ sep = " (";
+ /* cycle through all chunks, printing information on each one */
+ for (chunkCount = 0, chunkDescPtr = (const struct sctpChunkDesc *)bp;
+ sctpPacketLengthRemaining != 0;
+ chunkCount++)
+ {
+ uint16_t chunkLength, chunkLengthRemaining;
+ uint16_t align;
+
+ chunkDescPtr = (const struct sctpChunkDesc *)bp;
+ if (sctpPacketLengthRemaining < sizeof(*chunkDescPtr)) {
+ ND_PRINT("%s%u) [chunk descriptor cut off at end of packet]", sep, chunkCount+1);
+ break;
+ }
+ ND_TCHECK_SIZE(chunkDescPtr);
+ chunkLength = GET_BE_U_2(chunkDescPtr->chunkLength);
+ if (chunkLength < sizeof(*chunkDescPtr)) {
+ ND_PRINT("%s%u) [Bad chunk length %u, < size of chunk descriptor]", sep, chunkCount+1, chunkLength);
+ break;
+ }
+ chunkLengthRemaining = chunkLength;
+
+ align = chunkLength % 4;
+ if (align != 0)
+ align = 4 - align;
+
+ if (sctpPacketLengthRemaining < align) {
+ ND_PRINT("%s%u) [Bad chunk length %u, > remaining data in packet]", sep, chunkCount+1, chunkLength);
+ break;
+ }
+
+ ND_TCHECK_LEN(bp, chunkLength);
+
+ bp += sizeof(*chunkDescPtr);
+ sctpPacketLengthRemaining -= sizeof(*chunkDescPtr);
+ chunkLengthRemaining -= sizeof(*chunkDescPtr);
+
+ ND_PRINT("%s%u) ", sep, chunkCount+1);
+ chunkID = GET_U_1(chunkDescPtr->chunkID);
+ ND_PRINT("[%s] ", tok2str(sctp_chunkid_str, "Unknown chunk type: 0x%x",
+ chunkID));
+ switch (chunkID)
+ {
+ case SCTP_DATA :
+ {
+ const struct sctpDataPart *dataHdrPtr;
+ uint8_t chunkFlg;
+ uint32_t ppid;
+ uint16_t payload_size;
+
+ chunkFlg = GET_U_1(chunkDescPtr->chunkFlg);
+ if ((chunkFlg & SCTP_DATA_UNORDERED) == SCTP_DATA_UNORDERED)
+ ND_PRINT("(U)");
+
+ if ((chunkFlg & SCTP_DATA_FIRST_FRAG) == SCTP_DATA_FIRST_FRAG)
+ ND_PRINT("(B)");
+
+ if ((chunkFlg & SCTP_DATA_LAST_FRAG) == SCTP_DATA_LAST_FRAG)
+ ND_PRINT("(E)");
+
+ if( ((chunkFlg & SCTP_DATA_UNORDERED) == SCTP_DATA_UNORDERED) ||
+ ((chunkFlg & SCTP_DATA_FIRST_FRAG) == SCTP_DATA_FIRST_FRAG) ||
+ ((chunkFlg & SCTP_DATA_LAST_FRAG) == SCTP_DATA_LAST_FRAG) )
+ ND_PRINT(" ");
+
+ if (chunkLengthRemaining < sizeof(*dataHdrPtr)) {
+ ND_PRINT("bogus chunk length %u]", chunkLength);
+ return;
+ }
+ dataHdrPtr=(const struct sctpDataPart*)bp;
+
+ ppid = GET_BE_U_4(dataHdrPtr->payloadtype);
+ ND_PRINT("[TSN: %u] ", GET_BE_U_4(dataHdrPtr->TSN));
+ ND_PRINT("[SID: %u] ", GET_BE_U_2(dataHdrPtr->streamId));
+ ND_PRINT("[SSEQ %u] ", GET_BE_U_2(dataHdrPtr->sequence));
+ ND_PRINT("[PPID %s] ",
+ tok2str(PayloadProto_idents, "0x%x", ppid));
+
+ if (!isforces) {
+ isforces = (ppid == SCTP_PPID_FORCES_HP) ||
+ (ppid == SCTP_PPID_FORCES_MP) ||
+ (ppid == SCTP_PPID_FORCES_LP);
+ }
+
+ bp += sizeof(*dataHdrPtr);
+ sctpPacketLengthRemaining -= sizeof(*dataHdrPtr);
+ chunkLengthRemaining -= sizeof(*dataHdrPtr);
+ payload_size = chunkLengthRemaining;
+ if (payload_size == 0) {
+ ND_PRINT("bogus chunk length %u]", chunkLength);
+ return;
+ }
+
+ if (isforces) {
+ forces_print(ndo, bp, payload_size);
+ /* ndo_protocol reassignment after forces_print() call */
+ ndo->ndo_protocol = "sctp";
+ } else if (ndo->ndo_vflag >= 2) { /* if verbose output is specified */
+ /* at the command line */
+ switch (ppid) {
+ case SCTP_PPID_M3UA :
+ m3ua_print(ndo, bp, payload_size);
+ /* ndo_protocol reassignment after m3ua_print() call */
+ ndo->ndo_protocol = "sctp";
+ break;
+ default:
+ ND_PRINT("[Payload");
+ if (!ndo->ndo_suppress_default_print) {
+ ND_PRINT(":");
+ ND_DEFAULTPRINT(bp, payload_size);
+ }
+ ND_PRINT("]");
+ break;
+ }
+ }
+ bp += payload_size;
+ sctpPacketLengthRemaining -= payload_size;
+ chunkLengthRemaining -= payload_size;
+ break;
+ }
+ case SCTP_INITIATION :
+ {
+ const struct sctpInitiation *init;
+
+ if (chunkLengthRemaining < sizeof(*init)) {
+ ND_PRINT("bogus chunk length %u]", chunkLength);
+ return;
+ }
+ init=(const struct sctpInitiation*)bp;
+ ND_PRINT("[init tag: %u] ", GET_BE_U_4(init->initTag));
+ ND_PRINT("[rwnd: %u] ", GET_BE_U_4(init->rcvWindowCredit));
+ ND_PRINT("[OS: %u] ", GET_BE_U_2(init->NumPreopenStreams));
+ ND_PRINT("[MIS: %u] ", GET_BE_U_2(init->MaxInboundStreams));
+ ND_PRINT("[init TSN: %u] ", GET_BE_U_4(init->initialTSN));
+ bp += sizeof(*init);
+ sctpPacketLengthRemaining -= sizeof(*init);
+ chunkLengthRemaining -= sizeof(*init);
+
+#if 0 /* ALC you can add code for optional params here */
+ if( chunkLengthRemaining != 0 )
+ ND_PRINT(" @@@@@ UNFINISHED @@@@@@%s\n",
+ "Optional params present, but not printed.");
+#endif
+ bp += chunkLengthRemaining;
+ sctpPacketLengthRemaining -= chunkLengthRemaining;
+ chunkLengthRemaining = 0;
+ break;
+ }
+ case SCTP_INITIATION_ACK :
+ {
+ const struct sctpInitiation *init;
+
+ if (chunkLengthRemaining < sizeof(*init)) {
+ ND_PRINT("bogus chunk length %u]", chunkLength);
+ return;
+ }
+ init=(const struct sctpInitiation*)bp;
+ ND_PRINT("[init tag: %u] ", GET_BE_U_4(init->initTag));
+ ND_PRINT("[rwnd: %u] ", GET_BE_U_4(init->rcvWindowCredit));
+ ND_PRINT("[OS: %u] ", GET_BE_U_2(init->NumPreopenStreams));
+ ND_PRINT("[MIS: %u] ", GET_BE_U_2(init->MaxInboundStreams));
+ ND_PRINT("[init TSN: %u] ", GET_BE_U_4(init->initialTSN));
+ bp += sizeof(*init);
+ sctpPacketLengthRemaining -= sizeof(*init);
+ chunkLengthRemaining -= sizeof(*init);
+
+#if 0 /* ALC you can add code for optional params here */
+ if( chunkLengthRemaining != 0 )
+ ND_PRINT(" @@@@@ UNFINISHED @@@@@@%s\n",
+ "Optional params present, but not printed.");
+#endif
+ bp += chunkLengthRemaining;
+ sctpPacketLengthRemaining -= chunkLengthRemaining;
+ chunkLengthRemaining = 0;
+ break;
+ }
+ case SCTP_SELECTIVE_ACK:
+ {
+ const struct sctpSelectiveAck *sack;
+ const struct sctpSelectiveFrag *frag;
+ u_int fragNo, tsnNo;
+ const u_char *dupTSN;
+
+ if (chunkLengthRemaining < sizeof(*sack)) {
+ ND_PRINT("bogus chunk length %u]", chunkLength);
+ return;
+ }
+ sack=(const struct sctpSelectiveAck*)bp;
+ ND_PRINT("[cum ack %u] ", GET_BE_U_4(sack->highestConseqTSN));
+ ND_PRINT("[a_rwnd %u] ", GET_BE_U_4(sack->updatedRwnd));
+ ND_PRINT("[#gap acks %u] ", GET_BE_U_2(sack->numberOfdesc));
+ ND_PRINT("[#dup tsns %u] ", GET_BE_U_2(sack->numDupTsns));
+ bp += sizeof(*sack);
+ sctpPacketLengthRemaining -= sizeof(*sack);
+ chunkLengthRemaining -= sizeof(*sack);
+
+
+ /* print gaps */
+ for (fragNo=0;
+ chunkLengthRemaining != 0 && fragNo < GET_BE_U_2(sack->numberOfdesc);
+ bp += sizeof(*frag), sctpPacketLengthRemaining -= sizeof(*frag), chunkLengthRemaining -= sizeof(*frag), fragNo++) {
+ if (chunkLengthRemaining < sizeof(*frag)) {
+ ND_PRINT("bogus chunk length %u]", chunkLength);
+ return;
+ }
+ frag = (const struct sctpSelectiveFrag *)bp;
+ ND_PRINT("\n\t\t[gap ack block #%u: start = %u, end = %u] ",
+ fragNo+1,
+ GET_BE_U_4(sack->highestConseqTSN) + GET_BE_U_2(frag->fragmentStart),
+ GET_BE_U_4(sack->highestConseqTSN) + GET_BE_U_2(frag->fragmentEnd));
+ }
+
+ /* print duplicate TSNs */
+ for (tsnNo=0;
+ chunkLengthRemaining != 0 && tsnNo<GET_BE_U_2(sack->numDupTsns);
+ bp += 4, sctpPacketLengthRemaining -= 4, chunkLengthRemaining -= 4, tsnNo++) {
+ if (chunkLengthRemaining < 4) {
+ ND_PRINT("bogus chunk length %u]", chunkLength);
+ return;
+ }
+ dupTSN = (const u_char *)bp;
+ ND_PRINT("\n\t\t[dup TSN #%u: %u] ", tsnNo+1,
+ GET_BE_U_4(dupTSN));
+ }
+ break;
+ }
+ default :
+ {
+ bp += chunkLengthRemaining;
+ sctpPacketLengthRemaining -= chunkLengthRemaining;
+ chunkLengthRemaining = 0;
+ break;
+ }
+ }
+
+ /*
+ * Any extra stuff at the end of the chunk?
+ * XXX - report this?
+ */
+ bp += chunkLengthRemaining;
+ sctpPacketLengthRemaining -= chunkLengthRemaining;
+
+ if (ndo->ndo_vflag < 2)
+ sep = ", (";
+
+ if (align != 0) {
+ /*
+ * Fail if the alignment padding isn't in the captured data.
+ * Otherwise, skip it.
+ */
+ ND_TCHECK_LEN(bp, align);
+ bp += align;
+ sctpPacketLengthRemaining -= align;
+ }
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-sflow.c b/print-sflow.c
new file mode 100644
index 0000000..f508ccc
--- /dev/null
+++ b/print-sflow.c
@@ -0,0 +1,962 @@
+/*
+ * Copyright (c) 1998-2007 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Carles Kishimoto <carles.kishimoto@gmail.com>
+ *
+ * Expansion and refactoring by Rick Jones <rick.jones2@hp.com>
+ */
+
+/* \summary: sFlow protocol printer */
+
+/* specification: https://sflow.org/developers/specifications.php */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+/*
+ * sFlow datagram
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Sflow version (2,4,5) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IP version (1 for IPv4 | 2 for IPv6) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IP Address AGENT (4 or 16 bytes) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Sub agent ID |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Datagram sequence number |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Switch uptime in ms |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | num samples in datagram |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ */
+
+struct sflow_datagram_t {
+ nd_uint32_t version;
+ nd_uint32_t ip_version;
+ nd_ipv4 agent;
+ nd_uint32_t agent_id;
+ nd_uint32_t seqnum;
+ nd_uint32_t uptime;
+ nd_uint32_t samples;
+};
+
+struct sflow_v6_datagram_t {
+ nd_uint32_t version;
+ nd_uint32_t ip_version;
+ nd_ipv6 agent;
+ nd_uint32_t agent_id;
+ nd_uint32_t seqnum;
+ nd_uint32_t uptime;
+ nd_uint32_t samples;
+};
+
+struct sflow_sample_header {
+ nd_uint32_t format;
+ nd_uint32_t len;
+};
+
+#define SFLOW_FLOW_SAMPLE 1
+#define SFLOW_COUNTER_SAMPLE 2
+#define SFLOW_EXPANDED_FLOW_SAMPLE 3
+#define SFLOW_EXPANDED_COUNTER_SAMPLE 4
+
+static const struct tok sflow_format_values[] = {
+ { SFLOW_FLOW_SAMPLE, "flow sample" },
+ { SFLOW_COUNTER_SAMPLE, "counter sample" },
+ { SFLOW_EXPANDED_FLOW_SAMPLE, "expanded flow sample" },
+ { SFLOW_EXPANDED_COUNTER_SAMPLE, "expanded counter sample" },
+ { 0, NULL}
+};
+
+struct sflow_flow_sample_t {
+ nd_uint32_t seqnum;
+ nd_uint8_t type;
+ nd_uint24_t index;
+ nd_uint32_t rate;
+ nd_uint32_t pool;
+ nd_uint32_t drops;
+ nd_uint32_t in_interface;
+ nd_uint32_t out_interface;
+ nd_uint32_t records;
+
+};
+
+struct sflow_expanded_flow_sample_t {
+ nd_uint32_t seqnum;
+ nd_uint32_t type;
+ nd_uint32_t index;
+ nd_uint32_t rate;
+ nd_uint32_t pool;
+ nd_uint32_t drops;
+ nd_uint32_t in_interface_format;
+ nd_uint32_t in_interface_value;
+ nd_uint32_t out_interface_format;
+ nd_uint32_t out_interface_value;
+ nd_uint32_t records;
+};
+
+#define SFLOW_FLOW_RAW_PACKET 1
+#define SFLOW_FLOW_ETHERNET_FRAME 2
+#define SFLOW_FLOW_IPV4_DATA 3
+#define SFLOW_FLOW_IPV6_DATA 4
+#define SFLOW_FLOW_EXTENDED_SWITCH_DATA 1001
+#define SFLOW_FLOW_EXTENDED_ROUTER_DATA 1002
+#define SFLOW_FLOW_EXTENDED_GATEWAY_DATA 1003
+#define SFLOW_FLOW_EXTENDED_USER_DATA 1004
+#define SFLOW_FLOW_EXTENDED_URL_DATA 1005
+#define SFLOW_FLOW_EXTENDED_MPLS_DATA 1006
+#define SFLOW_FLOW_EXTENDED_NAT_DATA 1007
+#define SFLOW_FLOW_EXTENDED_MPLS_TUNNEL 1008
+#define SFLOW_FLOW_EXTENDED_MPLS_VC 1009
+#define SFLOW_FLOW_EXTENDED_MPLS_FEC 1010
+#define SFLOW_FLOW_EXTENDED_MPLS_LVP_FEC 1011
+#define SFLOW_FLOW_EXTENDED_VLAN_TUNNEL 1012
+
+static const struct tok sflow_flow_type_values[] = {
+ { SFLOW_FLOW_RAW_PACKET, "Raw packet"},
+ { SFLOW_FLOW_ETHERNET_FRAME, "Ethernet frame"},
+ { SFLOW_FLOW_IPV4_DATA, "IPv4 Data"},
+ { SFLOW_FLOW_IPV6_DATA, "IPv6 Data"},
+ { SFLOW_FLOW_EXTENDED_SWITCH_DATA, "Extended Switch data"},
+ { SFLOW_FLOW_EXTENDED_ROUTER_DATA, "Extended Router data"},
+ { SFLOW_FLOW_EXTENDED_GATEWAY_DATA, "Extended Gateway data"},
+ { SFLOW_FLOW_EXTENDED_USER_DATA, "Extended User data"},
+ { SFLOW_FLOW_EXTENDED_URL_DATA, "Extended URL data"},
+ { SFLOW_FLOW_EXTENDED_MPLS_DATA, "Extended MPLS data"},
+ { SFLOW_FLOW_EXTENDED_NAT_DATA, "Extended NAT data"},
+ { SFLOW_FLOW_EXTENDED_MPLS_TUNNEL, "Extended MPLS tunnel"},
+ { SFLOW_FLOW_EXTENDED_MPLS_VC, "Extended MPLS VC"},
+ { SFLOW_FLOW_EXTENDED_MPLS_FEC, "Extended MPLS FEC"},
+ { SFLOW_FLOW_EXTENDED_MPLS_LVP_FEC, "Extended MPLS LVP FEC"},
+ { SFLOW_FLOW_EXTENDED_VLAN_TUNNEL, "Extended VLAN Tunnel"},
+ { 0, NULL}
+};
+
+#define SFLOW_HEADER_PROTOCOL_ETHERNET 1
+#define SFLOW_HEADER_PROTOCOL_IPV4 11
+#define SFLOW_HEADER_PROTOCOL_IPV6 12
+
+static const struct tok sflow_flow_raw_protocol_values[] = {
+ { SFLOW_HEADER_PROTOCOL_ETHERNET, "Ethernet"},
+ { SFLOW_HEADER_PROTOCOL_IPV4, "IPv4"},
+ { SFLOW_HEADER_PROTOCOL_IPV6, "IPv6"},
+ { 0, NULL}
+};
+
+struct sflow_expanded_flow_raw_t {
+ nd_uint32_t protocol;
+ nd_uint32_t length;
+ nd_uint32_t stripped_bytes;
+ nd_uint32_t header_size;
+};
+
+struct sflow_ethernet_frame_t {
+ nd_uint32_t length;
+ nd_byte src_mac[8];
+ nd_byte dst_mac[8];
+ nd_uint32_t type;
+};
+
+struct sflow_extended_switch_data_t {
+ nd_uint32_t src_vlan;
+ nd_uint32_t src_pri;
+ nd_uint32_t dst_vlan;
+ nd_uint32_t dst_pri;
+};
+
+struct sflow_counter_record_t {
+ nd_uint32_t format;
+ nd_uint32_t length;
+};
+
+struct sflow_flow_record_t {
+ nd_uint32_t format;
+ nd_uint32_t length;
+};
+
+struct sflow_counter_sample_t {
+ nd_uint32_t seqnum;
+ nd_uint8_t type;
+ nd_uint24_t index;
+ nd_uint32_t records;
+};
+
+struct sflow_expanded_counter_sample_t {
+ nd_uint32_t seqnum;
+ nd_uint32_t type;
+ nd_uint32_t index;
+ nd_uint32_t records;
+};
+
+#define SFLOW_COUNTER_GENERIC 1
+#define SFLOW_COUNTER_ETHERNET 2
+#define SFLOW_COUNTER_TOKEN_RING 3
+#define SFLOW_COUNTER_BASEVG 4
+#define SFLOW_COUNTER_VLAN 5
+#define SFLOW_COUNTER_PROCESSOR 1001
+
+static const struct tok sflow_counter_type_values[] = {
+ { SFLOW_COUNTER_GENERIC, "Generic counter"},
+ { SFLOW_COUNTER_ETHERNET, "Ethernet counter"},
+ { SFLOW_COUNTER_TOKEN_RING, "Token ring counter"},
+ { SFLOW_COUNTER_BASEVG, "100 BaseVG counter"},
+ { SFLOW_COUNTER_VLAN, "Vlan counter"},
+ { SFLOW_COUNTER_PROCESSOR, "Processor counter"},
+ { 0, NULL}
+};
+
+#define SFLOW_IFACE_DIRECTION_UNKNOWN 0
+#define SFLOW_IFACE_DIRECTION_FULLDUPLEX 1
+#define SFLOW_IFACE_DIRECTION_HALFDUPLEX 2
+#define SFLOW_IFACE_DIRECTION_IN 3
+#define SFLOW_IFACE_DIRECTION_OUT 4
+
+static const struct tok sflow_iface_direction_values[] = {
+ { SFLOW_IFACE_DIRECTION_UNKNOWN, "unknown"},
+ { SFLOW_IFACE_DIRECTION_FULLDUPLEX, "full-duplex"},
+ { SFLOW_IFACE_DIRECTION_HALFDUPLEX, "half-duplex"},
+ { SFLOW_IFACE_DIRECTION_IN, "in"},
+ { SFLOW_IFACE_DIRECTION_OUT, "out"},
+ { 0, NULL}
+};
+
+struct sflow_generic_counter_t {
+ nd_uint32_t ifindex;
+ nd_uint32_t iftype;
+ nd_uint64_t ifspeed;
+ nd_uint32_t ifdirection;
+ nd_uint32_t ifstatus;
+ nd_uint64_t ifinoctets;
+ nd_uint32_t ifinunicastpkts;
+ nd_uint32_t ifinmulticastpkts;
+ nd_uint32_t ifinbroadcastpkts;
+ nd_uint32_t ifindiscards;
+ nd_uint32_t ifinerrors;
+ nd_uint32_t ifinunkownprotos;
+ nd_uint64_t ifoutoctets;
+ nd_uint32_t ifoutunicastpkts;
+ nd_uint32_t ifoutmulticastpkts;
+ nd_uint32_t ifoutbroadcastpkts;
+ nd_uint32_t ifoutdiscards;
+ nd_uint32_t ifouterrors;
+ nd_uint32_t ifpromiscmode;
+};
+
+struct sflow_ethernet_counter_t {
+ nd_uint32_t alignerrors;
+ nd_uint32_t fcserrors;
+ nd_uint32_t single_collision_frames;
+ nd_uint32_t multiple_collision_frames;
+ nd_uint32_t test_errors;
+ nd_uint32_t deferred_transmissions;
+ nd_uint32_t late_collisions;
+ nd_uint32_t excessive_collisions;
+ nd_uint32_t mac_transmit_errors;
+ nd_uint32_t carrier_sense_errors;
+ nd_uint32_t frame_too_longs;
+ nd_uint32_t mac_receive_errors;
+ nd_uint32_t symbol_errors;
+};
+
+struct sflow_100basevg_counter_t {
+ nd_uint32_t in_highpriority_frames;
+ nd_uint64_t in_highpriority_octets;
+ nd_uint32_t in_normpriority_frames;
+ nd_uint64_t in_normpriority_octets;
+ nd_uint32_t in_ipmerrors;
+ nd_uint32_t in_oversized;
+ nd_uint32_t in_data_errors;
+ nd_uint32_t in_null_addressed_frames;
+ nd_uint32_t out_highpriority_frames;
+ nd_uint64_t out_highpriority_octets;
+ nd_uint32_t transitioninto_frames;
+ nd_uint64_t hc_in_highpriority_octets;
+ nd_uint64_t hc_in_normpriority_octets;
+ nd_uint64_t hc_out_highpriority_octets;
+};
+
+struct sflow_vlan_counter_t {
+ nd_uint32_t vlan_id;
+ nd_uint64_t octets;
+ nd_uint32_t unicast_pkt;
+ nd_uint32_t multicast_pkt;
+ nd_uint32_t broadcast_pkt;
+ nd_uint32_t discards;
+};
+
+static int
+print_sflow_counter_generic(netdissect_options *ndo,
+ const u_char *pointer, u_int len)
+{
+ const struct sflow_generic_counter_t *sflow_gen_counter;
+
+ if (len < sizeof(struct sflow_generic_counter_t))
+ return 1;
+
+ sflow_gen_counter = (const struct sflow_generic_counter_t *)pointer;
+ ND_PRINT("\n\t ifindex %u, iftype %u, ifspeed %" PRIu64 ", ifdirection %u (%s)",
+ GET_BE_U_4(sflow_gen_counter->ifindex),
+ GET_BE_U_4(sflow_gen_counter->iftype),
+ GET_BE_U_8(sflow_gen_counter->ifspeed),
+ GET_BE_U_4(sflow_gen_counter->ifdirection),
+ tok2str(sflow_iface_direction_values, "Unknown",
+ GET_BE_U_4(sflow_gen_counter->ifdirection)));
+ ND_PRINT("\n\t ifstatus %u, adminstatus: %s, operstatus: %s",
+ GET_BE_U_4(sflow_gen_counter->ifstatus),
+ GET_BE_U_4(sflow_gen_counter->ifstatus)&1 ? "up" : "down",
+ (GET_BE_U_4(sflow_gen_counter->ifstatus)>>1)&1 ? "up" : "down");
+ ND_PRINT("\n\t In octets %" PRIu64
+ ", unicast pkts %u, multicast pkts %u, broadcast pkts %u, discards %u",
+ GET_BE_U_8(sflow_gen_counter->ifinoctets),
+ GET_BE_U_4(sflow_gen_counter->ifinunicastpkts),
+ GET_BE_U_4(sflow_gen_counter->ifinmulticastpkts),
+ GET_BE_U_4(sflow_gen_counter->ifinbroadcastpkts),
+ GET_BE_U_4(sflow_gen_counter->ifindiscards));
+ ND_PRINT("\n\t In errors %u, unknown protos %u",
+ GET_BE_U_4(sflow_gen_counter->ifinerrors),
+ GET_BE_U_4(sflow_gen_counter->ifinunkownprotos));
+ ND_PRINT("\n\t Out octets %" PRIu64
+ ", unicast pkts %u, multicast pkts %u, broadcast pkts %u, discards %u",
+ GET_BE_U_8(sflow_gen_counter->ifoutoctets),
+ GET_BE_U_4(sflow_gen_counter->ifoutunicastpkts),
+ GET_BE_U_4(sflow_gen_counter->ifoutmulticastpkts),
+ GET_BE_U_4(sflow_gen_counter->ifoutbroadcastpkts),
+ GET_BE_U_4(sflow_gen_counter->ifoutdiscards));
+ ND_PRINT("\n\t Out errors %u, promisc mode %u",
+ GET_BE_U_4(sflow_gen_counter->ifouterrors),
+ GET_BE_U_4(sflow_gen_counter->ifpromiscmode));
+
+ return 0;
+}
+
+static int
+print_sflow_counter_ethernet(netdissect_options *ndo,
+ const u_char *pointer, u_int len)
+{
+ const struct sflow_ethernet_counter_t *sflow_eth_counter;
+
+ if (len < sizeof(struct sflow_ethernet_counter_t))
+ return 1;
+
+ sflow_eth_counter = (const struct sflow_ethernet_counter_t *)pointer;
+ ND_PRINT("\n\t align errors %u, fcs errors %u, single collision %u, multiple collision %u, test error %u",
+ GET_BE_U_4(sflow_eth_counter->alignerrors),
+ GET_BE_U_4(sflow_eth_counter->fcserrors),
+ GET_BE_U_4(sflow_eth_counter->single_collision_frames),
+ GET_BE_U_4(sflow_eth_counter->multiple_collision_frames),
+ GET_BE_U_4(sflow_eth_counter->test_errors));
+ ND_PRINT("\n\t deferred %u, late collision %u, excessive collision %u, mac trans error %u",
+ GET_BE_U_4(sflow_eth_counter->deferred_transmissions),
+ GET_BE_U_4(sflow_eth_counter->late_collisions),
+ GET_BE_U_4(sflow_eth_counter->excessive_collisions),
+ GET_BE_U_4(sflow_eth_counter->mac_transmit_errors));
+ ND_PRINT("\n\t carrier error %u, frames too long %u, mac receive errors %u, symbol errors %u",
+ GET_BE_U_4(sflow_eth_counter->carrier_sense_errors),
+ GET_BE_U_4(sflow_eth_counter->frame_too_longs),
+ GET_BE_U_4(sflow_eth_counter->mac_receive_errors),
+ GET_BE_U_4(sflow_eth_counter->symbol_errors));
+
+ return 0;
+}
+
+static int
+print_sflow_counter_token_ring(netdissect_options *ndo _U_,
+ const u_char *pointer _U_, u_int len _U_)
+{
+ return 0;
+}
+
+static int
+print_sflow_counter_basevg(netdissect_options *ndo,
+ const u_char *pointer, u_int len)
+{
+ const struct sflow_100basevg_counter_t *sflow_100basevg_counter;
+
+ if (len < sizeof(struct sflow_100basevg_counter_t))
+ return 1;
+
+ sflow_100basevg_counter = (const struct sflow_100basevg_counter_t *)pointer;
+ ND_PRINT("\n\t in high prio frames %u, in high prio octets %" PRIu64,
+ GET_BE_U_4(sflow_100basevg_counter->in_highpriority_frames),
+ GET_BE_U_8(sflow_100basevg_counter->in_highpriority_octets));
+ ND_PRINT("\n\t in norm prio frames %u, in norm prio octets %" PRIu64,
+ GET_BE_U_4(sflow_100basevg_counter->in_normpriority_frames),
+ GET_BE_U_8(sflow_100basevg_counter->in_normpriority_octets));
+ ND_PRINT("\n\t in ipm errors %u, oversized %u, in data errors %u, null addressed frames %u",
+ GET_BE_U_4(sflow_100basevg_counter->in_ipmerrors),
+ GET_BE_U_4(sflow_100basevg_counter->in_oversized),
+ GET_BE_U_4(sflow_100basevg_counter->in_data_errors),
+ GET_BE_U_4(sflow_100basevg_counter->in_null_addressed_frames));
+ ND_PRINT("\n\t out high prio frames %u, out high prio octets %" PRIu64
+ ", trans into frames %u",
+ GET_BE_U_4(sflow_100basevg_counter->out_highpriority_frames),
+ GET_BE_U_8(sflow_100basevg_counter->out_highpriority_octets),
+ GET_BE_U_4(sflow_100basevg_counter->transitioninto_frames));
+ ND_PRINT("\n\t in hc high prio octets %" PRIu64
+ ", in hc norm prio octets %" PRIu64
+ ", out hc high prio octets %" PRIu64,
+ GET_BE_U_8(sflow_100basevg_counter->hc_in_highpriority_octets),
+ GET_BE_U_8(sflow_100basevg_counter->hc_in_normpriority_octets),
+ GET_BE_U_8(sflow_100basevg_counter->hc_out_highpriority_octets));
+
+ return 0;
+}
+
+static int
+print_sflow_counter_vlan(netdissect_options *ndo,
+ const u_char *pointer, u_int len)
+{
+ const struct sflow_vlan_counter_t *sflow_vlan_counter;
+
+ if (len < sizeof(struct sflow_vlan_counter_t))
+ return 1;
+
+ sflow_vlan_counter = (const struct sflow_vlan_counter_t *)pointer;
+ ND_PRINT("\n\t vlan_id %u, octets %" PRIu64
+ ", unicast_pkt %u, multicast_pkt %u, broadcast_pkt %u, discards %u",
+ GET_BE_U_4(sflow_vlan_counter->vlan_id),
+ GET_BE_U_8(sflow_vlan_counter->octets),
+ GET_BE_U_4(sflow_vlan_counter->unicast_pkt),
+ GET_BE_U_4(sflow_vlan_counter->multicast_pkt),
+ GET_BE_U_4(sflow_vlan_counter->broadcast_pkt),
+ GET_BE_U_4(sflow_vlan_counter->discards));
+
+ return 0;
+}
+
+struct sflow_processor_counter_t {
+ nd_uint32_t five_sec_util;
+ nd_uint32_t one_min_util;
+ nd_uint32_t five_min_util;
+ nd_uint64_t total_memory;
+ nd_uint64_t free_memory;
+};
+
+static int
+print_sflow_counter_processor(netdissect_options *ndo,
+ const u_char *pointer, u_int len)
+{
+ const struct sflow_processor_counter_t *sflow_processor_counter;
+
+ if (len < sizeof(struct sflow_processor_counter_t))
+ return 1;
+
+ sflow_processor_counter = (const struct sflow_processor_counter_t *)pointer;
+ ND_PRINT("\n\t 5sec %u, 1min %u, 5min %u, total_mem %" PRIu64
+ ", total_mem %" PRIu64,
+ GET_BE_U_4(sflow_processor_counter->five_sec_util),
+ GET_BE_U_4(sflow_processor_counter->one_min_util),
+ GET_BE_U_4(sflow_processor_counter->five_min_util),
+ GET_BE_U_8(sflow_processor_counter->total_memory),
+ GET_BE_U_8(sflow_processor_counter->free_memory));
+
+ return 0;
+}
+
+static int
+sflow_print_counter_records(netdissect_options *ndo,
+ const u_char *pointer, u_int len, u_int records)
+{
+ u_int nrecords;
+ const u_char *tptr;
+ u_int tlen;
+ u_int counter_type;
+ u_int counter_len;
+ u_int enterprise;
+ const struct sflow_counter_record_t *sflow_counter_record;
+
+ nrecords = records;
+ tptr = pointer;
+ tlen = len;
+
+ while (nrecords > 0) {
+ /* do we have the "header?" */
+ if (tlen < sizeof(struct sflow_counter_record_t))
+ return 1;
+ sflow_counter_record = (const struct sflow_counter_record_t *)tptr;
+
+ enterprise = GET_BE_U_4(sflow_counter_record->format);
+ counter_type = enterprise & 0x0FFF;
+ enterprise = enterprise >> 20;
+ counter_len = GET_BE_U_4(sflow_counter_record->length);
+ ND_PRINT("\n\t enterprise %u, %s (%u) length %u",
+ enterprise,
+ (enterprise == 0) ? tok2str(sflow_counter_type_values,"Unknown",counter_type) : "Unknown",
+ counter_type,
+ counter_len);
+
+ tptr += sizeof(struct sflow_counter_record_t);
+ tlen -= sizeof(struct sflow_counter_record_t);
+
+ if (tlen < counter_len)
+ return 1;
+ if (enterprise == 0) {
+ switch (counter_type) {
+ case SFLOW_COUNTER_GENERIC:
+ if (print_sflow_counter_generic(ndo, tptr, tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_ETHERNET:
+ if (print_sflow_counter_ethernet(ndo, tptr, tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_TOKEN_RING:
+ if (print_sflow_counter_token_ring(ndo, tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_BASEVG:
+ if (print_sflow_counter_basevg(ndo, tptr, tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_VLAN:
+ if (print_sflow_counter_vlan(ndo, tptr, tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_PROCESSOR:
+ if (print_sflow_counter_processor(ndo, tptr, tlen))
+ return 1;
+ break;
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, tptr, "\n\t\t", counter_len);
+ break;
+ }
+ }
+ tptr += counter_len;
+ tlen -= counter_len;
+ nrecords--;
+
+ }
+
+ return 0;
+}
+
+static int
+sflow_print_counter_sample(netdissect_options *ndo,
+ const u_char *pointer, u_int len)
+{
+ const struct sflow_counter_sample_t *sflow_counter_sample;
+ u_int nrecords;
+
+ if (len < sizeof(struct sflow_counter_sample_t))
+ return 1;
+
+ sflow_counter_sample = (const struct sflow_counter_sample_t *)pointer;
+
+ nrecords = GET_BE_U_4(sflow_counter_sample->records);
+
+ ND_PRINT(" seqnum %u, type %u, idx %u, records %u",
+ GET_BE_U_4(sflow_counter_sample->seqnum),
+ GET_U_1(sflow_counter_sample->type),
+ GET_BE_U_3(sflow_counter_sample->index),
+ nrecords);
+
+ return sflow_print_counter_records(ndo, pointer + sizeof(struct sflow_counter_sample_t),
+ len - sizeof(struct sflow_counter_sample_t),
+ nrecords);
+}
+
+static int
+sflow_print_expanded_counter_sample(netdissect_options *ndo,
+ const u_char *pointer, u_int len)
+{
+ const struct sflow_expanded_counter_sample_t *sflow_expanded_counter_sample;
+ u_int nrecords;
+
+
+ if (len < sizeof(struct sflow_expanded_counter_sample_t))
+ return 1;
+
+ sflow_expanded_counter_sample = (const struct sflow_expanded_counter_sample_t *)pointer;
+
+ nrecords = GET_BE_U_4(sflow_expanded_counter_sample->records);
+
+ ND_PRINT(" seqnum %u, type %u, idx %u, records %u",
+ GET_BE_U_4(sflow_expanded_counter_sample->seqnum),
+ GET_BE_U_4(sflow_expanded_counter_sample->type),
+ GET_BE_U_4(sflow_expanded_counter_sample->index),
+ nrecords);
+
+ return sflow_print_counter_records(ndo, pointer + sizeof(struct sflow_expanded_counter_sample_t),
+ len - sizeof(struct sflow_expanded_counter_sample_t),
+ nrecords);
+}
+
+static int
+print_sflow_raw_packet(netdissect_options *ndo,
+ const u_char *pointer, u_int len)
+{
+ const struct sflow_expanded_flow_raw_t *sflow_flow_raw;
+
+ if (len < sizeof(struct sflow_expanded_flow_raw_t))
+ return 1;
+
+ sflow_flow_raw = (const struct sflow_expanded_flow_raw_t *)pointer;
+ ND_PRINT("\n\t protocol %s (%u), length %u, stripped bytes %u, header_size %u",
+ tok2str(sflow_flow_raw_protocol_values,"Unknown",GET_BE_U_4(sflow_flow_raw->protocol)),
+ GET_BE_U_4(sflow_flow_raw->protocol),
+ GET_BE_U_4(sflow_flow_raw->length),
+ GET_BE_U_4(sflow_flow_raw->stripped_bytes),
+ GET_BE_U_4(sflow_flow_raw->header_size));
+
+ /* QUESTION - should we attempt to print the raw header itself?
+ assuming of course there is enough data present to do so... */
+
+ return 0;
+}
+
+static int
+print_sflow_ethernet_frame(netdissect_options *ndo,
+ const u_char *pointer, u_int len)
+{
+ const struct sflow_ethernet_frame_t *sflow_ethernet_frame;
+
+ if (len < sizeof(struct sflow_ethernet_frame_t))
+ return 1;
+
+ sflow_ethernet_frame = (const struct sflow_ethernet_frame_t *)pointer;
+
+ ND_PRINT("\n\t frame len %u, type %u",
+ GET_BE_U_4(sflow_ethernet_frame->length),
+ GET_BE_U_4(sflow_ethernet_frame->type));
+
+ return 0;
+}
+
+static int
+print_sflow_extended_switch_data(netdissect_options *ndo,
+ const u_char *pointer, u_int len)
+{
+ const struct sflow_extended_switch_data_t *sflow_extended_sw_data;
+
+ if (len < sizeof(struct sflow_extended_switch_data_t))
+ return 1;
+
+ sflow_extended_sw_data = (const struct sflow_extended_switch_data_t *)pointer;
+ ND_PRINT("\n\t src vlan %u, src pri %u, dst vlan %u, dst pri %u",
+ GET_BE_U_4(sflow_extended_sw_data->src_vlan),
+ GET_BE_U_4(sflow_extended_sw_data->src_pri),
+ GET_BE_U_4(sflow_extended_sw_data->dst_vlan),
+ GET_BE_U_4(sflow_extended_sw_data->dst_pri));
+
+ return 0;
+}
+
+static int
+sflow_print_flow_records(netdissect_options *ndo,
+ const u_char *pointer, u_int len, u_int records)
+{
+ u_int nrecords;
+ const u_char *tptr;
+ u_int tlen;
+ u_int flow_type;
+ u_int enterprise;
+ u_int flow_len;
+ const struct sflow_flow_record_t *sflow_flow_record;
+
+ nrecords = records;
+ tptr = pointer;
+ tlen = len;
+
+ while (nrecords > 0) {
+ /* do we have the "header?" */
+ if (tlen < sizeof(struct sflow_flow_record_t))
+ return 1;
+
+ sflow_flow_record = (const struct sflow_flow_record_t *)tptr;
+
+ /* so, the funky encoding means we cannot blythly mask-off
+ bits, we must also check the enterprise. */
+
+ enterprise = GET_BE_U_4(sflow_flow_record->format);
+ flow_type = enterprise & 0x0FFF;
+ enterprise = enterprise >> 12;
+ flow_len = GET_BE_U_4(sflow_flow_record->length);
+ ND_PRINT("\n\t enterprise %u %s (%u) length %u",
+ enterprise,
+ (enterprise == 0) ? tok2str(sflow_flow_type_values,"Unknown",flow_type) : "Unknown",
+ flow_type,
+ flow_len);
+
+ tptr += sizeof(struct sflow_flow_record_t);
+ tlen -= sizeof(struct sflow_flow_record_t);
+
+ if (tlen < flow_len)
+ return 1;
+
+ if (enterprise == 0) {
+ switch (flow_type) {
+ case SFLOW_FLOW_RAW_PACKET:
+ if (print_sflow_raw_packet(ndo, tptr, tlen))
+ return 1;
+ break;
+ case SFLOW_FLOW_EXTENDED_SWITCH_DATA:
+ if (print_sflow_extended_switch_data(ndo, tptr, tlen))
+ return 1;
+ break;
+ case SFLOW_FLOW_ETHERNET_FRAME:
+ if (print_sflow_ethernet_frame(ndo, tptr, tlen))
+ return 1;
+ break;
+ /* FIXME these need a decoder */
+ case SFLOW_FLOW_IPV4_DATA:
+ case SFLOW_FLOW_IPV6_DATA:
+ case SFLOW_FLOW_EXTENDED_ROUTER_DATA:
+ case SFLOW_FLOW_EXTENDED_GATEWAY_DATA:
+ case SFLOW_FLOW_EXTENDED_USER_DATA:
+ case SFLOW_FLOW_EXTENDED_URL_DATA:
+ case SFLOW_FLOW_EXTENDED_MPLS_DATA:
+ case SFLOW_FLOW_EXTENDED_NAT_DATA:
+ case SFLOW_FLOW_EXTENDED_MPLS_TUNNEL:
+ case SFLOW_FLOW_EXTENDED_MPLS_VC:
+ case SFLOW_FLOW_EXTENDED_MPLS_FEC:
+ case SFLOW_FLOW_EXTENDED_MPLS_LVP_FEC:
+ case SFLOW_FLOW_EXTENDED_VLAN_TUNNEL:
+ break;
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, tptr, "\n\t\t", flow_len);
+ break;
+ }
+ }
+ tptr += flow_len;
+ tlen -= flow_len;
+ nrecords--;
+
+ }
+
+ return 0;
+}
+
+static int
+sflow_print_flow_sample(netdissect_options *ndo,
+ const u_char *pointer, u_int len)
+{
+ const struct sflow_flow_sample_t *sflow_flow_sample;
+ u_int nrecords;
+
+ if (len < sizeof(struct sflow_flow_sample_t))
+ return 1;
+
+ sflow_flow_sample = (const struct sflow_flow_sample_t *)pointer;
+
+ nrecords = GET_BE_U_4(sflow_flow_sample->records);
+
+ ND_PRINT(" seqnum %u, type %u, idx %u, rate %u, pool %u, drops %u, input %u output %u records %u",
+ GET_BE_U_4(sflow_flow_sample->seqnum),
+ GET_U_1(sflow_flow_sample->type),
+ GET_BE_U_3(sflow_flow_sample->index),
+ GET_BE_U_4(sflow_flow_sample->rate),
+ GET_BE_U_4(sflow_flow_sample->pool),
+ GET_BE_U_4(sflow_flow_sample->drops),
+ GET_BE_U_4(sflow_flow_sample->in_interface),
+ GET_BE_U_4(sflow_flow_sample->out_interface),
+ nrecords);
+
+ return sflow_print_flow_records(ndo, pointer + sizeof(struct sflow_flow_sample_t),
+ len - sizeof(struct sflow_flow_sample_t),
+ nrecords);
+}
+
+static int
+sflow_print_expanded_flow_sample(netdissect_options *ndo,
+ const u_char *pointer, u_int len)
+{
+ const struct sflow_expanded_flow_sample_t *sflow_expanded_flow_sample;
+ u_int nrecords;
+
+ if (len < sizeof(struct sflow_expanded_flow_sample_t))
+ return 1;
+
+ sflow_expanded_flow_sample = (const struct sflow_expanded_flow_sample_t *)pointer;
+
+ nrecords = GET_BE_U_4(sflow_expanded_flow_sample->records);
+
+ ND_PRINT(" seqnum %u, type %u, idx %u, rate %u, pool %u, drops %u, records %u",
+ GET_BE_U_4(sflow_expanded_flow_sample->seqnum),
+ GET_BE_U_4(sflow_expanded_flow_sample->type),
+ GET_BE_U_4(sflow_expanded_flow_sample->index),
+ GET_BE_U_4(sflow_expanded_flow_sample->rate),
+ GET_BE_U_4(sflow_expanded_flow_sample->pool),
+ GET_BE_U_4(sflow_expanded_flow_sample->drops),
+ nrecords);
+
+ return sflow_print_flow_records(ndo, pointer + sizeof(struct sflow_expanded_flow_sample_t),
+ len - sizeof(struct sflow_expanded_flow_sample_t),
+ nrecords);
+}
+
+void
+sflow_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len)
+{
+ const struct sflow_datagram_t *sflow_datagram;
+ const struct sflow_v6_datagram_t *sflow_v6_datagram;
+ const struct sflow_sample_header *sflow_sample;
+
+ const u_char *tptr;
+ u_int tlen;
+ uint32_t sflow_sample_type, sflow_sample_len;
+ uint32_t nsamples;
+ uint32_t ip_version;
+
+ ndo->ndo_protocol = "sflow";
+ tptr = pptr;
+ tlen = len;
+ sflow_datagram = (const struct sflow_datagram_t *)pptr;
+ sflow_v6_datagram = (const struct sflow_v6_datagram_t *)pptr;
+ ip_version = GET_BE_U_4(sflow_datagram->ip_version);
+
+ if ((len < sizeof(struct sflow_datagram_t) && (ip_version == 1)) ||
+ (len < sizeof(struct sflow_v6_datagram_t) && (ip_version == 2))) {
+ ND_PRINT("sFlowv%u", GET_BE_U_4(sflow_datagram->version));
+ ND_PRINT(" [length %u < %zu]", len, sizeof(struct sflow_datagram_t));
+ nd_print_invalid(ndo);
+ return;
+ }
+ ND_TCHECK_SIZE(sflow_datagram);
+
+ /*
+ * Sanity checking of the header.
+ */
+ if (GET_BE_U_4(sflow_datagram->version) != 5) {
+ ND_PRINT("sFlow version %u packet not supported",
+ GET_BE_U_4(sflow_datagram->version));
+ return;
+ }
+
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT("sFlowv%u, %s agent %s, agent-id %u, length %u",
+ GET_BE_U_4(sflow_datagram->version),
+ ip_version == 1 ? "IPv4" : "IPv6",
+ ip_version == 1 ? GET_IPADDR_STRING(sflow_datagram->agent) :
+ GET_IP6ADDR_STRING( sflow_v6_datagram->agent),
+ ip_version == 1 ? GET_BE_U_4(sflow_datagram->agent_id) :
+ GET_BE_U_4(sflow_v6_datagram->agent_id),
+ len);
+ return;
+ }
+
+ /* ok they seem to want to know everything - lets fully decode it */
+ if (ip_version == 1) {
+ nsamples=GET_BE_U_4(sflow_datagram->samples);
+ ND_PRINT("sFlowv%u, %s agent %s, agent-id %u, seqnum %u, uptime %u, samples %u, length %u",
+ GET_BE_U_4(sflow_datagram->version),
+ "IPv4",
+ GET_IPADDR_STRING(sflow_datagram->agent),
+ GET_BE_U_4(sflow_datagram->agent_id),
+ GET_BE_U_4(sflow_datagram->seqnum),
+ GET_BE_U_4(sflow_datagram->uptime),
+ nsamples,
+ len);
+
+ /* skip Common header */
+ ND_LCHECK_ZU(tlen, sizeof(struct sflow_datagram_t));
+ tptr += sizeof(struct sflow_datagram_t);
+ tlen -= sizeof(struct sflow_datagram_t);
+ } else {
+ nsamples=GET_BE_U_4(sflow_v6_datagram->samples);
+ ND_PRINT("sFlowv%u, %s agent %s, agent-id %u, seqnum %u, uptime %u, samples %u, length %u",
+ GET_BE_U_4(sflow_v6_datagram->version),
+ "IPv6",
+ GET_IP6ADDR_STRING(sflow_v6_datagram->agent),
+ GET_BE_U_4(sflow_v6_datagram->agent_id),
+ GET_BE_U_4(sflow_v6_datagram->seqnum),
+ GET_BE_U_4(sflow_v6_datagram->uptime),
+ nsamples,
+ len);
+
+ /* skip Common header */
+ ND_LCHECK_ZU(tlen, sizeof(struct sflow_v6_datagram_t));
+ tptr += sizeof(struct sflow_v6_datagram_t);
+ tlen -= sizeof(struct sflow_v6_datagram_t);
+ }
+ while (nsamples > 0 && tlen > 0) {
+ sflow_sample = (const struct sflow_sample_header *)tptr;
+
+ sflow_sample_type = (GET_BE_U_4(sflow_sample->format)&0x0FFF);
+ sflow_sample_len = GET_BE_U_4(sflow_sample->len);
+
+ if (tlen < sizeof(struct sflow_sample_header))
+ goto invalid;
+
+ tptr += sizeof(struct sflow_sample_header);
+ tlen -= sizeof(struct sflow_sample_header);
+
+ ND_PRINT("\n\t%s (%u), length %u,",
+ tok2str(sflow_format_values, "Unknown", sflow_sample_type),
+ sflow_sample_type,
+ sflow_sample_len);
+
+ /* basic sanity check */
+ if (sflow_sample_type == 0 || sflow_sample_len ==0) {
+ return;
+ }
+
+ if (tlen < sflow_sample_len)
+ goto invalid;
+
+ /* did we capture enough for fully decoding the sample ? */
+ ND_TCHECK_LEN(tptr, sflow_sample_len);
+
+ switch(sflow_sample_type) {
+ case SFLOW_FLOW_SAMPLE:
+ if (sflow_print_flow_sample(ndo, tptr, tlen))
+ goto invalid;
+ break;
+
+ case SFLOW_COUNTER_SAMPLE:
+ if (sflow_print_counter_sample(ndo, tptr,tlen))
+ goto invalid;
+ break;
+
+ case SFLOW_EXPANDED_FLOW_SAMPLE:
+ if (sflow_print_expanded_flow_sample(ndo, tptr, tlen))
+ goto invalid;
+ break;
+
+ case SFLOW_EXPANDED_COUNTER_SAMPLE:
+ if (sflow_print_expanded_counter_sample(ndo, tptr,tlen))
+ goto invalid;
+ break;
+
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, tptr, "\n\t ", sflow_sample_len);
+ break;
+ }
+ tptr += sflow_sample_len;
+ tlen -= sflow_sample_len;
+ nsamples--;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+ ND_TCHECK_LEN(tptr, tlen);
+}
diff --git a/print-sip.c b/print-sip.c
new file mode 100644
index 0000000..bfbfddf
--- /dev/null
+++ b/print-sip.c
@@ -0,0 +1,54 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ * Turned into common "text protocol" code, which this uses, by
+ * Guy Harris.
+ */
+
+/* \summary: Session Initiation Protocol (SIP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+
+static const char *sipcmds[] = {
+ "ACK",
+ "BYE",
+ "CANCEL",
+ "DO",
+ "INFO",
+ "INVITE",
+ "MESSAGE",
+ "NOTIFY",
+ "OPTIONS",
+ "PRACK",
+ "QAUTH",
+ "REFER",
+ "REGISTER",
+ "SPRACK",
+ "SUBSCRIBE",
+ "UPDATE",
+ "PUBLISH",
+ NULL
+};
+
+void
+sip_print(netdissect_options *ndo, const u_char *pptr, u_int len)
+{
+ ndo->ndo_protocol = "sip";
+ txtproto_print(ndo, pptr, len, sipcmds, RESP_CODE_SECOND_TOKEN);
+}
diff --git a/print-sl.c b/print-sl.c
new file mode 100644
index 0000000..85b7624
--- /dev/null
+++ b/print-sl.c
@@ -0,0 +1,259 @@
+/*
+ * Copyright (c) 1989, 1990, 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Compressed Serial Line Internet Protocol printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+#include "ip.h"
+#include "tcp.h"
+#include "slcompress.h"
+
+/*
+ * definitions of the pseudo- link-level header attached to slip
+ * packets grabbed by the packet filter (bpf) traffic monitor.
+ */
+#define SLIP_HDRLEN 16
+
+#define SLX_DIR 0
+#define SLX_CHDR 1
+
+#define SLIPDIR_IN 0
+#define SLIPDIR_OUT 1
+
+
+static u_int lastlen[2][256];
+static u_int lastconn = 255;
+
+static void sliplink_print(netdissect_options *, const u_char *, const struct ip *, u_int);
+static void compressed_sl_print(netdissect_options *, const u_char *, const struct ip *, u_int, int);
+
+void
+sl_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int length = h->len;
+ const struct ip *ip;
+
+ ndo->ndo_protocol = "slip";
+ ND_TCHECK_LEN(p, SLIP_HDRLEN);
+ ndo->ndo_ll_hdr_len += SLIP_HDRLEN;
+
+ length -= SLIP_HDRLEN;
+
+ ip = (const struct ip *)(p + SLIP_HDRLEN);
+
+ if (ndo->ndo_eflag)
+ sliplink_print(ndo, p, ip, length);
+
+ switch (IP_V(ip)) {
+ case 4:
+ ip_print(ndo, (const u_char *)ip, length);
+ break;
+ case 6:
+ ip6_print(ndo, (const u_char *)ip, length);
+ break;
+ default:
+ ND_PRINT("ip v%u", IP_V(ip));
+ }
+}
+
+void
+sl_bsdos_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int length = h->len;
+ const struct ip *ip;
+
+ ndo->ndo_protocol = "slip_bsdos";
+ ND_TCHECK_LEN(p, SLIP_HDRLEN);
+ ndo->ndo_ll_hdr_len += SLIP_HDRLEN;
+
+ length -= SLIP_HDRLEN;
+
+ ip = (const struct ip *)(p + SLIP_HDRLEN);
+
+#ifdef notdef
+ if (ndo->ndo_eflag)
+ sliplink_print(ndo, p, ip, length);
+#endif
+
+ ip_print(ndo, (const u_char *)ip, length);
+}
+
+static void
+sliplink_print(netdissect_options *ndo,
+ const u_char *p, const struct ip *ip,
+ u_int length)
+{
+ int dir;
+ u_int hlen;
+
+ dir = GET_U_1(p + SLX_DIR);
+ switch (dir) {
+
+ case SLIPDIR_IN:
+ ND_PRINT("I ");
+ break;
+
+ case SLIPDIR_OUT:
+ ND_PRINT("O ");
+ break;
+
+ default:
+ ND_PRINT("Invalid direction %d ", dir);
+ dir = -1;
+ break;
+ }
+ switch (GET_U_1(p + SLX_CHDR) & 0xf0) {
+
+ case TYPE_IP:
+ ND_PRINT("ip %u: ", length + SLIP_HDRLEN);
+ break;
+
+ case TYPE_UNCOMPRESSED_TCP:
+ /*
+ * The connection id is stored in the IP protocol field.
+ * Get it from the link layer since sl_uncompress_tcp()
+ * has restored the IP header copy to IPPROTO_TCP.
+ */
+ lastconn = GET_U_1(((const struct ip *)(p + SLX_CHDR))->ip_p);
+ ND_PRINT("utcp %u: ", lastconn);
+ if (dir == -1) {
+ /* Direction is bogus, don't use it */
+ return;
+ }
+ ND_TCHECK_SIZE(ip);
+ hlen = IP_HL(ip);
+ ND_TCHECK_SIZE((const struct tcphdr *)&((const int *)ip)[hlen]);
+ hlen += TH_OFF((const struct tcphdr *)&((const int *)ip)[hlen]);
+ lastlen[dir][lastconn] = length - (hlen << 2);
+ break;
+
+ default:
+ if (dir == -1) {
+ /* Direction is bogus, don't use it */
+ return;
+ }
+ if (GET_U_1(p + SLX_CHDR) & TYPE_COMPRESSED_TCP) {
+ compressed_sl_print(ndo, p + SLX_CHDR, ip, length, dir);
+ ND_PRINT(": ");
+ } else
+ ND_PRINT("slip-%u!: ", GET_U_1(p + SLX_CHDR));
+ }
+}
+
+static const u_char *
+print_sl_change(netdissect_options *ndo,
+ const char *str, const u_char *cp)
+{
+ u_int i;
+
+ if ((i = GET_U_1(cp)) == 0) {
+ cp++;
+ i = GET_BE_U_2(cp);
+ cp += 2;
+ }
+ ND_PRINT(" %s%u", str, i);
+ return (cp);
+}
+
+static const u_char *
+print_sl_winchange(netdissect_options *ndo,
+ const u_char *cp)
+{
+ int16_t i;
+
+ if ((i = GET_U_1(cp)) == 0) {
+ cp++;
+ i = GET_BE_S_2(cp);
+ cp += 2;
+ }
+ if (i >= 0)
+ ND_PRINT(" W+%d", i);
+ else
+ ND_PRINT(" W%d", i);
+ return (cp);
+}
+
+static void
+compressed_sl_print(netdissect_options *ndo,
+ const u_char *chdr, const struct ip *ip,
+ u_int length, int dir)
+{
+ const u_char *cp = chdr;
+ u_int flags, hlen;
+
+ flags = GET_U_1(cp);
+ cp++;
+ if (flags & NEW_C) {
+ lastconn = GET_U_1(cp);
+ cp++;
+ ND_PRINT("ctcp %u", lastconn);
+ } else
+ ND_PRINT("ctcp *");
+
+ /* skip tcp checksum */
+ cp += 2;
+
+ switch (flags & SPECIALS_MASK) {
+ case SPECIAL_I:
+ ND_PRINT(" *SA+%u", lastlen[dir][lastconn]);
+ break;
+
+ case SPECIAL_D:
+ ND_PRINT(" *S+%u", lastlen[dir][lastconn]);
+ break;
+
+ default:
+ if (flags & NEW_U)
+ cp = print_sl_change(ndo, "U=", cp);
+ if (flags & NEW_W)
+ cp = print_sl_winchange(ndo, cp);
+ if (flags & NEW_A)
+ cp = print_sl_change(ndo, "A+", cp);
+ if (flags & NEW_S)
+ cp = print_sl_change(ndo, "S+", cp);
+ break;
+ }
+ if (flags & NEW_I)
+ cp = print_sl_change(ndo, "I+", cp);
+
+ /*
+ * 'hlen' is the length of the uncompressed TCP/IP header (in words).
+ * 'cp - chdr' is the length of the compressed header.
+ * 'length - hlen' is the amount of data in the packet.
+ */
+ ND_TCHECK_SIZE(ip);
+ hlen = IP_HL(ip);
+ ND_TCHECK_SIZE((const struct tcphdr *)&((const int32_t *)ip)[hlen]);
+ hlen += TH_OFF((const struct tcphdr *)&((const int32_t *)ip)[hlen]);
+ lastlen[dir][lastconn] = length - (hlen << 2);
+ ND_PRINT(" %u (%ld)", lastlen[dir][lastconn], (long)(cp - chdr));
+}
diff --git a/print-sll.c b/print-sll.c
new file mode 100644
index 0000000..eb8d620
--- /dev/null
+++ b/print-sll.c
@@ -0,0 +1,535 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Linux cooked sockets capture printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_NET_IF_H
+/*
+ * Include diag-control.h before <net/if.h>, which too defines a macro
+ * named ND_UNREACHABLE.
+ */
+#include "diag-control.h"
+#include <net/if.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "ethertype.h"
+#include "extract.h"
+
+/*
+ * For captures on Linux cooked sockets, we construct a fake header
+ * that includes:
+ *
+ * a 2-byte "packet type" which is one of:
+ *
+ * LINUX_SLL_HOST packet was sent to us
+ * LINUX_SLL_BROADCAST packet was broadcast
+ * LINUX_SLL_MULTICAST packet was multicast
+ * LINUX_SLL_OTHERHOST packet was sent to somebody else
+ * LINUX_SLL_OUTGOING packet was sent *by* us;
+ *
+ * a 2-byte Ethernet protocol field;
+ *
+ * a 2-byte link-layer type;
+ *
+ * a 2-byte link-layer address length;
+ *
+ * an 8-byte source link-layer address, whose actual length is
+ * specified by the previous value.
+ *
+ * All fields except for the link-layer address are in network byte order.
+ *
+ * DO NOT change the layout of this structure, or change any of the
+ * LINUX_SLL_ values below. If you must change the link-layer header
+ * for a "cooked" Linux capture, introduce a new DLT_ type (ask
+ * "tcpdump-workers@lists.tcpdump.org" for one, so that you don't give it
+ * a value that collides with a value already being used), and use the
+ * new header in captures of that type, so that programs that can
+ * handle DLT_LINUX_SLL captures will continue to handle them correctly
+ * without any change, and so that capture files with different headers
+ * can be told apart and programs that read them can dissect the
+ * packets in them.
+ *
+ * This structure, and the #defines below, must be the same in the
+ * libpcap and tcpdump versions of "sll.h".
+ */
+
+/*
+ * A DLT_LINUX_SLL fake link-layer header.
+ */
+#define SLL_HDR_LEN 16 /* total header length */
+#define SLL_ADDRLEN 8 /* length of address field */
+
+struct sll_header {
+ nd_uint16_t sll_pkttype; /* packet type */
+ nd_uint16_t sll_hatype; /* link-layer address type */
+ nd_uint16_t sll_halen; /* link-layer address length */
+ nd_byte sll_addr[SLL_ADDRLEN]; /* link-layer address */
+ nd_uint16_t sll_protocol; /* protocol */
+};
+
+/*
+ * A DLT_LINUX_SLL2 fake link-layer header.
+ */
+#define SLL2_HDR_LEN 20 /* total header length */
+
+struct sll2_header {
+ nd_uint16_t sll2_protocol; /* protocol */
+ nd_uint16_t sll2_reserved_mbz; /* reserved - must be zero */
+ nd_uint32_t sll2_if_index; /* 1-based interface index */
+ nd_uint16_t sll2_hatype; /* link-layer address type */
+ nd_uint8_t sll2_pkttype; /* packet type */
+ nd_uint8_t sll2_halen; /* link-layer address length */
+ nd_byte sll2_addr[SLL_ADDRLEN]; /* link-layer address */
+};
+
+/*
+ * The LINUX_SLL_ values for "sll_pkttype"; these correspond to the
+ * PACKET_ values on Linux, but are defined here so that they're
+ * available even on systems other than Linux, and so that they
+ * don't change even if the PACKET_ values change.
+ */
+#define LINUX_SLL_HOST 0
+#define LINUX_SLL_BROADCAST 1
+#define LINUX_SLL_MULTICAST 2
+#define LINUX_SLL_OTHERHOST 3
+#define LINUX_SLL_OUTGOING 4
+
+/*
+ * The LINUX_SLL_ values for "sll_protocol"; these correspond to the
+ * ETH_P_ values on Linux, but are defined here so that they're
+ * available even on systems other than Linux. We assume, for now,
+ * that the ETH_P_ values won't change in Linux; if they do, then:
+ *
+ * if we don't translate them in "pcap-linux.c", capture files
+ * won't necessarily be readable if captured on a system that
+ * defines ETH_P_ values that don't match these values;
+ *
+ * if we do translate them in "pcap-linux.c", that makes life
+ * unpleasant for the BPF code generator, as the values you test
+ * for in the kernel aren't the values that you test for when
+ * reading a capture file, so the fixup code run on BPF programs
+ * handed to the kernel ends up having to do more work.
+ *
+ * Add other values here as necessary, for handling packet types that
+ * might show up on non-Ethernet, non-802.x networks. (Not all the ones
+ * in the Linux "if_ether.h" will, I suspect, actually show up in
+ * captures.)
+ */
+#define LINUX_SLL_P_802_3 0x0001 /* Novell 802.3 frames without 802.2 LLC header */
+#define LINUX_SLL_P_802_2 0x0004 /* 802.2 frames (not D/I/X Ethernet) */
+
+static const struct tok sll_pkttype_values[] = {
+ { LINUX_SLL_HOST, "In" },
+ { LINUX_SLL_BROADCAST, "B" },
+ { LINUX_SLL_MULTICAST, "M" },
+ { LINUX_SLL_OTHERHOST, "P" },
+ { LINUX_SLL_OUTGOING, "Out" },
+ { 0, NULL}
+};
+
+static void
+sll_print(netdissect_options *ndo, const struct sll_header *sllp, u_int length)
+{
+ u_short ether_type;
+
+ ndo->ndo_protocol = "sll";
+ ND_PRINT("%3s ",
+ tok2str(sll_pkttype_values,"?",GET_BE_U_2(sllp->sll_pkttype)));
+
+ /*
+ * XXX - check the link-layer address type value?
+ * For now, we just assume 6 means Ethernet.
+ * XXX - print others as strings of hex?
+ */
+ if (GET_BE_U_2(sllp->sll_halen) == MAC_ADDR_LEN)
+ ND_PRINT("%s ", GET_ETHERADDR_STRING(sllp->sll_addr));
+
+ if (!ndo->ndo_qflag) {
+ ether_type = GET_BE_U_2(sllp->sll_protocol);
+
+ if (ether_type <= MAX_ETHERNET_LENGTH_VAL) {
+ /*
+ * Not an Ethernet type; what type is it?
+ */
+ switch (ether_type) {
+
+ case LINUX_SLL_P_802_3:
+ /*
+ * Ethernet_802.3 IPX frame.
+ */
+ ND_PRINT("802.3");
+ break;
+
+ case LINUX_SLL_P_802_2:
+ /*
+ * 802.2.
+ */
+ ND_PRINT("802.2");
+ break;
+
+ default:
+ /*
+ * What is it?
+ */
+ ND_PRINT("ethertype Unknown (0x%04x)",
+ ether_type);
+ break;
+ }
+ } else {
+ ND_PRINT("ethertype %s (0x%04x)",
+ tok2str(ethertype_values, "Unknown", ether_type),
+ ether_type);
+ }
+ ND_PRINT(", length %u: ", length);
+ }
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points to the
+ * Linux "cooked capture" header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+sll_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+ const struct sll_header *sllp;
+ u_short hatype;
+ u_short ether_type;
+ int llc_hdrlen;
+ u_int hdrlen;
+
+ ndo->ndo_protocol = "sll";
+ ND_TCHECK_LEN(p, SLL_HDR_LEN);
+
+ sllp = (const struct sll_header *)p;
+
+ if (ndo->ndo_eflag)
+ sll_print(ndo, sllp, length);
+
+ /*
+ * Go past the cooked-mode header.
+ */
+ length -= SLL_HDR_LEN;
+ caplen -= SLL_HDR_LEN;
+ p += SLL_HDR_LEN;
+ hdrlen = SLL_HDR_LEN;
+
+ hatype = GET_BE_U_2(sllp->sll_hatype);
+ switch (hatype) {
+
+ case 803:
+ /*
+ * This is an packet with a radiotap header;
+ * just dissect the payload as such.
+ */
+ ndo->ndo_ll_hdr_len += SLL_HDR_LEN;
+ ndo->ndo_ll_hdr_len += ieee802_11_radio_print(ndo, p, length, caplen);
+ return;
+ }
+ ether_type = GET_BE_U_2(sllp->sll_protocol);
+
+recurse:
+ /*
+ * Is it (gag) an 802.3 encapsulation, or some non-Ethernet
+ * packet type?
+ */
+ if (ether_type <= MAX_ETHERNET_LENGTH_VAL) {
+ /*
+ * Yes - what type is it?
+ */
+ switch (ether_type) {
+
+ case LINUX_SLL_P_802_3:
+ /*
+ * Ethernet_802.3 IPX frame.
+ */
+ ipx_print(ndo, p, length);
+ break;
+
+ case LINUX_SLL_P_802_2:
+ /*
+ * 802.2.
+ * Try to print the LLC-layer header & higher layers.
+ */
+ llc_hdrlen = llc_print(ndo, p, length, caplen, NULL, NULL);
+ if (llc_hdrlen < 0)
+ goto unknown; /* unknown LLC type */
+ hdrlen += llc_hdrlen;
+ break;
+
+ default:
+ /*FALLTHROUGH*/
+
+ unknown:
+ /* packet type not known, print raw packet */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ break;
+ }
+ } else if (ether_type == ETHERTYPE_8021Q) {
+ /*
+ * Print VLAN information, and then go back and process
+ * the enclosed type field.
+ */
+ if (caplen < 4) {
+ ndo->ndo_protocol = "vlan";
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += hdrlen + caplen;
+ return;
+ }
+ if (ndo->ndo_eflag) {
+ uint16_t tag = GET_BE_U_2(p);
+
+ ND_PRINT("%s, ", ieee8021q_tci_string(tag));
+ }
+
+ ether_type = GET_BE_U_2(p + 2);
+ if (ether_type <= MAX_ETHERNET_LENGTH_VAL)
+ ether_type = LINUX_SLL_P_802_2;
+ if (!ndo->ndo_qflag) {
+ ND_PRINT("ethertype %s, ",
+ tok2str(ethertype_values, "Unknown", ether_type));
+ }
+ p += 4;
+ length -= 4;
+ caplen -= 4;
+ hdrlen += 4;
+ goto recurse;
+ } else {
+ if (ethertype_print(ndo, ether_type, p, length, caplen, NULL, NULL) == 0) {
+ /* ether_type not known, print raw packet */
+ if (!ndo->ndo_eflag)
+ sll_print(ndo, sllp, length + SLL_HDR_LEN);
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ }
+ }
+
+ ndo->ndo_ll_hdr_len += hdrlen;
+}
+
+static void
+sll2_print(netdissect_options *ndo, const struct sll2_header *sllp, u_int length)
+{
+ u_short ether_type;
+
+ ndo->ndo_protocol = "sll2";
+ ND_PRINT("ifindex %u ", GET_BE_U_4(sllp->sll2_if_index));
+
+ /*
+ * XXX - check the link-layer address type value?
+ * For now, we just assume 6 means Ethernet.
+ * XXX - print others as strings of hex?
+ */
+ if (GET_U_1(sllp->sll2_halen) == MAC_ADDR_LEN)
+ ND_PRINT("%s ", GET_ETHERADDR_STRING(sllp->sll2_addr));
+
+ if (!ndo->ndo_qflag) {
+ ether_type = GET_BE_U_2(sllp->sll2_protocol);
+
+ if (ether_type <= MAX_ETHERNET_LENGTH_VAL) {
+ /*
+ * Not an Ethernet type; what type is it?
+ */
+ switch (ether_type) {
+
+ case LINUX_SLL_P_802_3:
+ /*
+ * Ethernet_802.3 IPX frame.
+ */
+ ND_PRINT("802.3");
+ break;
+
+ case LINUX_SLL_P_802_2:
+ /*
+ * 802.2.
+ */
+ ND_PRINT("802.2");
+ break;
+
+ default:
+ /*
+ * What is it?
+ */
+ ND_PRINT("ethertype Unknown (0x%04x)",
+ ether_type);
+ break;
+ }
+ } else {
+ ND_PRINT("ethertype %s (0x%04x)",
+ tok2str(ethertype_values, "Unknown", ether_type),
+ ether_type);
+ }
+ ND_PRINT(", length %u: ", length);
+ }
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points to the
+ * Linux "cooked capture" header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+sll2_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+ const struct sll2_header *sllp;
+ u_short hatype;
+ u_short ether_type;
+ int llc_hdrlen;
+ u_int hdrlen;
+#ifdef HAVE_NET_IF_H
+ uint32_t if_index;
+ char ifname[IF_NAMESIZE];
+#endif
+
+ ndo->ndo_protocol = "sll2";
+ ND_TCHECK_LEN(p, SLL2_HDR_LEN);
+
+ sllp = (const struct sll2_header *)p;
+#ifdef HAVE_NET_IF_H
+ if_index = GET_BE_U_4(sllp->sll2_if_index);
+ if (!if_indextoname(if_index, ifname))
+ strncpy(ifname, "?", 2);
+ ND_PRINT("%-5s ", ifname);
+#endif
+
+ ND_PRINT("%-3s ",
+ tok2str(sll_pkttype_values, "?", GET_U_1(sllp->sll2_pkttype)));
+
+ if (ndo->ndo_eflag)
+ sll2_print(ndo, sllp, length);
+
+ /*
+ * Go past the cooked-mode header.
+ */
+ length -= SLL2_HDR_LEN;
+ caplen -= SLL2_HDR_LEN;
+ p += SLL2_HDR_LEN;
+ hdrlen = SLL2_HDR_LEN;
+
+ hatype = GET_BE_U_2(sllp->sll2_hatype);
+ switch (hatype) {
+
+ case 803:
+ /*
+ * This is an packet with a radiotap header;
+ * just dissect the payload as such.
+ */
+ ndo->ndo_ll_hdr_len += SLL2_HDR_LEN;
+ ndo->ndo_ll_hdr_len += ieee802_11_radio_print(ndo, p, length, caplen);
+ return;
+ }
+ ether_type = GET_BE_U_2(sllp->sll2_protocol);
+
+recurse:
+ /*
+ * Is it (gag) an 802.3 encapsulation, or some non-Ethernet
+ * packet type?
+ */
+ if (ether_type <= MAX_ETHERNET_LENGTH_VAL) {
+ /*
+ * Yes - what type is it?
+ */
+ switch (ether_type) {
+
+ case LINUX_SLL_P_802_3:
+ /*
+ * Ethernet_802.3 IPX frame.
+ */
+ ipx_print(ndo, p, length);
+ break;
+
+ case LINUX_SLL_P_802_2:
+ /*
+ * 802.2.
+ * Try to print the LLC-layer header & higher layers.
+ */
+ llc_hdrlen = llc_print(ndo, p, length, caplen, NULL, NULL);
+ if (llc_hdrlen < 0)
+ goto unknown; /* unknown LLC type */
+ hdrlen += llc_hdrlen;
+ break;
+
+ default:
+ /*FALLTHROUGH*/
+
+ unknown:
+ /* packet type not known, print raw packet */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ break;
+ }
+ } else if (ether_type == ETHERTYPE_8021Q) {
+ /*
+ * Print VLAN information, and then go back and process
+ * the enclosed type field.
+ */
+ if (caplen < 4) {
+ ndo->ndo_protocol = "vlan";
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += hdrlen + caplen;
+ return;
+ }
+ if (ndo->ndo_eflag) {
+ uint16_t tag = GET_BE_U_2(p);
+
+ ND_PRINT("%s, ", ieee8021q_tci_string(tag));
+ }
+
+ ether_type = GET_BE_U_2(p + 2);
+ if (ether_type <= MAX_ETHERNET_LENGTH_VAL)
+ ether_type = LINUX_SLL_P_802_2;
+ if (!ndo->ndo_qflag) {
+ ND_PRINT("ethertype %s, ",
+ tok2str(ethertype_values, "Unknown", ether_type));
+ }
+ p += 4;
+ length -= 4;
+ caplen -= 4;
+ hdrlen += 4;
+ goto recurse;
+ } else {
+ if (ethertype_print(ndo, ether_type, p, length, caplen, NULL, NULL) == 0) {
+ /* ether_type not known, print raw packet */
+ if (!ndo->ndo_eflag)
+ sll2_print(ndo, sllp, length + SLL2_HDR_LEN);
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ }
+ }
+
+ ndo->ndo_ll_hdr_len += hdrlen;
+}
diff --git a/print-slow.c b/print-slow.c
new file mode 100644
index 0000000..1183818
--- /dev/null
+++ b/print-slow.c
@@ -0,0 +1,737 @@
+/*
+ * Copyright (c) 1998-2006 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * support for the IEEE "slow protocols" LACP, MARKER as per 802.3ad
+ * OAM as per 802.3ah
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+/* \summary: IEEE "slow protocols" (802.3ad/802.3ah) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+#include "oui.h"
+
+
+#define SLOW_PROTO_LACP 1
+#define SLOW_PROTO_MARKER 2
+#define SLOW_PROTO_OAM 3
+
+#define LACP_VERSION 1
+#define MARKER_VERSION 1
+
+static const struct tok slow_proto_values[] = {
+ { SLOW_PROTO_LACP, "LACP" },
+ { SLOW_PROTO_MARKER, "MARKER" },
+ { SLOW_PROTO_OAM, "OAM" },
+ { 0, NULL}
+};
+
+static const struct tok slow_oam_flag_values[] = {
+ { 0x0001, "Link Fault" },
+ { 0x0002, "Dying Gasp" },
+ { 0x0004, "Critical Event" },
+ { 0x0008, "Local Evaluating" },
+ { 0x0010, "Local Stable" },
+ { 0x0020, "Remote Evaluating" },
+ { 0x0040, "Remote Stable" },
+ { 0, NULL}
+};
+
+#define SLOW_OAM_CODE_INFO 0x00
+#define SLOW_OAM_CODE_EVENT_NOTIF 0x01
+#define SLOW_OAM_CODE_VAR_REQUEST 0x02
+#define SLOW_OAM_CODE_VAR_RESPONSE 0x03
+#define SLOW_OAM_CODE_LOOPBACK_CTRL 0x04
+#define SLOW_OAM_CODE_PRIVATE 0xfe
+
+static const struct tok slow_oam_code_values[] = {
+ { SLOW_OAM_CODE_INFO, "Information" },
+ { SLOW_OAM_CODE_EVENT_NOTIF, "Event Notification" },
+ { SLOW_OAM_CODE_VAR_REQUEST, "Variable Request" },
+ { SLOW_OAM_CODE_VAR_RESPONSE, "Variable Response" },
+ { SLOW_OAM_CODE_LOOPBACK_CTRL, "Loopback Control" },
+ { SLOW_OAM_CODE_PRIVATE, "Vendor Private" },
+ { 0, NULL}
+};
+
+struct slow_oam_info_t {
+ nd_uint8_t info_type;
+ nd_uint8_t info_length;
+ nd_uint8_t oam_version;
+ nd_uint16_t revision;
+ nd_uint8_t state;
+ nd_uint8_t oam_config;
+ nd_uint16_t oam_pdu_config;
+ nd_uint24_t oui;
+ nd_uint32_t vendor_private;
+};
+
+#define SLOW_OAM_INFO_TYPE_END_OF_TLV 0x00
+#define SLOW_OAM_INFO_TYPE_LOCAL 0x01
+#define SLOW_OAM_INFO_TYPE_REMOTE 0x02
+#define SLOW_OAM_INFO_TYPE_ORG_SPECIFIC 0xfe
+
+static const struct tok slow_oam_info_type_values[] = {
+ { SLOW_OAM_INFO_TYPE_END_OF_TLV, "End of TLV marker" },
+ { SLOW_OAM_INFO_TYPE_LOCAL, "Local" },
+ { SLOW_OAM_INFO_TYPE_REMOTE, "Remote" },
+ { SLOW_OAM_INFO_TYPE_ORG_SPECIFIC, "Organization specific" },
+ { 0, NULL}
+};
+
+#define OAM_INFO_TYPE_PARSER_MASK 0x3
+static const struct tok slow_oam_info_type_state_parser_values[] = {
+ { 0x00, "forwarding" },
+ { 0x01, "looping back" },
+ { 0x02, "discarding" },
+ { 0x03, "reserved" },
+ { 0, NULL}
+};
+
+#define OAM_INFO_TYPE_MUX_MASK 0x4
+static const struct tok slow_oam_info_type_state_mux_values[] = {
+ { 0x00, "forwarding" },
+ { 0x04, "discarding" },
+ { 0, NULL}
+};
+
+static const struct tok slow_oam_info_type_oam_config_values[] = {
+ { 0x01, "Active" },
+ { 0x02, "Unidirectional" },
+ { 0x04, "Remote-Loopback" },
+ { 0x08, "Link-Events" },
+ { 0x10, "Variable-Retrieval" },
+ { 0, NULL}
+};
+
+/* 11 Bits */
+#define OAM_INFO_TYPE_PDU_SIZE_MASK 0x7ff
+
+#define SLOW_OAM_LINK_EVENT_END_OF_TLV 0x00
+#define SLOW_OAM_LINK_EVENT_ERR_SYM_PER 0x01
+#define SLOW_OAM_LINK_EVENT_ERR_FRM 0x02
+#define SLOW_OAM_LINK_EVENT_ERR_FRM_PER 0x03
+#define SLOW_OAM_LINK_EVENT_ERR_FRM_SUMM 0x04
+#define SLOW_OAM_LINK_EVENT_ORG_SPECIFIC 0xfe
+
+static const struct tok slow_oam_link_event_values[] = {
+ { SLOW_OAM_LINK_EVENT_END_OF_TLV, "End of TLV marker" },
+ { SLOW_OAM_LINK_EVENT_ERR_SYM_PER, "Errored Symbol Period Event" },
+ { SLOW_OAM_LINK_EVENT_ERR_FRM, "Errored Frame Event" },
+ { SLOW_OAM_LINK_EVENT_ERR_FRM_PER, "Errored Frame Period Event" },
+ { SLOW_OAM_LINK_EVENT_ERR_FRM_SUMM, "Errored Frame Seconds Summary Event" },
+ { SLOW_OAM_LINK_EVENT_ORG_SPECIFIC, "Organization specific" },
+ { 0, NULL}
+};
+
+struct slow_oam_link_event_t {
+ nd_uint8_t event_type;
+ nd_uint8_t event_length;
+ nd_uint16_t time_stamp;
+ nd_uint64_t window;
+ nd_uint64_t threshold;
+ nd_uint64_t errors;
+ nd_uint64_t errors_running_total;
+ nd_uint32_t event_running_total;
+};
+
+struct slow_oam_variablerequest_t {
+ nd_uint8_t branch;
+ nd_uint16_t leaf;
+};
+
+struct slow_oam_variableresponse_t {
+ nd_uint8_t branch;
+ nd_uint16_t leaf;
+ nd_uint8_t length;
+};
+
+struct slow_oam_loopbackctrl_t {
+ nd_uint8_t command;
+};
+
+static const struct tok slow_oam_loopbackctrl_cmd_values[] = {
+ { 0x01, "Enable OAM Remote Loopback" },
+ { 0x02, "Disable OAM Remote Loopback" },
+ { 0, NULL}
+};
+
+struct tlv_header_t {
+ nd_uint8_t type;
+ nd_uint8_t length;
+};
+
+#define LACP_MARKER_TLV_TERMINATOR 0x00 /* same code for LACP and Marker */
+
+#define LACP_TLV_ACTOR_INFO 0x01
+#define LACP_TLV_PARTNER_INFO 0x02
+#define LACP_TLV_COLLECTOR_INFO 0x03
+
+#define MARKER_TLV_MARKER_INFO 0x01
+
+static const struct tok slow_tlv_values[] = {
+ { (SLOW_PROTO_LACP << 8) + LACP_MARKER_TLV_TERMINATOR, "Terminator"},
+ { (SLOW_PROTO_LACP << 8) + LACP_TLV_ACTOR_INFO, "Actor Information"},
+ { (SLOW_PROTO_LACP << 8) + LACP_TLV_PARTNER_INFO, "Partner Information"},
+ { (SLOW_PROTO_LACP << 8) + LACP_TLV_COLLECTOR_INFO, "Collector Information"},
+
+ { (SLOW_PROTO_MARKER << 8) + LACP_MARKER_TLV_TERMINATOR, "Terminator"},
+ { (SLOW_PROTO_MARKER << 8) + MARKER_TLV_MARKER_INFO, "Marker Information"},
+ { 0, NULL}
+};
+
+struct lacp_tlv_actor_partner_info_t {
+ nd_uint16_t sys_pri;
+ nd_mac_addr sys;
+ nd_uint16_t key;
+ nd_uint16_t port_pri;
+ nd_uint16_t port;
+ nd_uint8_t state;
+ nd_byte pad[3];
+};
+
+static const struct tok lacp_tlv_actor_partner_info_state_values[] = {
+ { 0x01, "Activity"},
+ { 0x02, "Timeout"},
+ { 0x04, "Aggregation"},
+ { 0x08, "Synchronization"},
+ { 0x10, "Collecting"},
+ { 0x20, "Distributing"},
+ { 0x40, "Default"},
+ { 0x80, "Expired"},
+ { 0, NULL}
+};
+
+struct lacp_tlv_collector_info_t {
+ nd_uint16_t max_delay;
+ nd_byte pad[12];
+};
+
+struct marker_tlv_marker_info_t {
+ nd_uint16_t req_port;
+ nd_mac_addr req_sys;
+ nd_uint32_t req_trans_id;
+ nd_byte pad[2];
+};
+
+struct lacp_marker_tlv_terminator_t {
+ nd_byte pad[50];
+};
+
+static void slow_marker_lacp_print(netdissect_options *, const u_char *, u_int, u_int);
+static void slow_oam_print(netdissect_options *, const u_char *, u_int);
+
+void
+slow_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len)
+{
+ int print_version;
+ u_int subtype;
+
+ ndo->ndo_protocol = "slow";
+ if (len < 1)
+ goto tooshort;
+ subtype = GET_U_1(pptr);
+
+ /*
+ * Sanity checking of the header.
+ */
+ switch (subtype) {
+ case SLOW_PROTO_LACP:
+ if (len < 2)
+ goto tooshort;
+ if (GET_U_1(pptr + 1) != LACP_VERSION) {
+ ND_PRINT("LACP version %u packet not supported",
+ GET_U_1(pptr + 1));
+ return;
+ }
+ print_version = 1;
+ break;
+
+ case SLOW_PROTO_MARKER:
+ if (len < 2)
+ goto tooshort;
+ if (GET_U_1(pptr + 1) != MARKER_VERSION) {
+ ND_PRINT("MARKER version %u packet not supported",
+ GET_U_1(pptr + 1));
+ return;
+ }
+ print_version = 1;
+ break;
+
+ case SLOW_PROTO_OAM: /* fall through */
+ print_version = 0;
+ break;
+
+ default:
+ /* print basic information and exit */
+ print_version = -1;
+ break;
+ }
+
+ if (print_version == 1) {
+ ND_PRINT("%sv%u, length %u",
+ tok2str(slow_proto_values, "unknown (%u)", subtype),
+ GET_U_1((pptr + 1)),
+ len);
+ } else {
+ /* some slow protos don't have a version number in the header */
+ ND_PRINT("%s, length %u",
+ tok2str(slow_proto_values, "unknown (%u)", subtype),
+ len);
+ }
+
+ /* unrecognized subtype */
+ if (print_version == -1) {
+ print_unknown_data(ndo, pptr, "\n\t", len);
+ return;
+ }
+
+ if (!ndo->ndo_vflag)
+ return;
+
+ switch (subtype) {
+ default: /* should not happen */
+ break;
+
+ case SLOW_PROTO_OAM:
+ /* skip subtype */
+ len -= 1;
+ pptr += 1;
+ slow_oam_print(ndo, pptr, len);
+ break;
+
+ case SLOW_PROTO_LACP: /* LACP and MARKER share the same semantics */
+ case SLOW_PROTO_MARKER:
+ /* skip subtype and version */
+ len -= 2;
+ pptr += 2;
+ slow_marker_lacp_print(ndo, pptr, len, subtype);
+ break;
+ }
+ return;
+
+tooshort:
+ if (!ndo->ndo_vflag)
+ ND_PRINT(" (packet is too short)");
+ else
+ ND_PRINT("\n\t\t packet is too short");
+}
+
+static void
+slow_marker_lacp_print(netdissect_options *ndo,
+ const u_char *tptr, u_int tlen,
+ u_int proto_subtype)
+{
+ const struct tlv_header_t *tlv_header;
+ const u_char *tlv_tptr;
+ u_int tlv_type, tlv_len, tlv_tlen;
+
+ union {
+ const struct lacp_marker_tlv_terminator_t *lacp_marker_tlv_terminator;
+ const struct lacp_tlv_actor_partner_info_t *lacp_tlv_actor_partner_info;
+ const struct lacp_tlv_collector_info_t *lacp_tlv_collector_info;
+ const struct marker_tlv_marker_info_t *marker_tlv_marker_info;
+ } tlv_ptr;
+
+ while(tlen>0) {
+ /* is the packet big enough to include the tlv header ? */
+ if (tlen < sizeof(struct tlv_header_t))
+ goto tooshort;
+ /* did we capture enough for fully decoding the tlv header ? */
+ tlv_header = (const struct tlv_header_t *)tptr;
+ tlv_type = GET_U_1(tlv_header->type);
+ tlv_len = GET_U_1(tlv_header->length);
+
+ ND_PRINT("\n\t%s TLV (0x%02x), length %u",
+ tok2str(slow_tlv_values,
+ "Unknown",
+ (proto_subtype << 8) + tlv_type),
+ tlv_type,
+ tlv_len);
+
+ if (tlv_type == LACP_MARKER_TLV_TERMINATOR) {
+ /*
+ * This TLV has a length of zero, and means there are no
+ * more TLVs to process.
+ */
+ return;
+ }
+
+ /* length includes the type and length fields */
+ if (tlv_len < sizeof(struct tlv_header_t)) {
+ ND_PRINT("\n\t ERROR: illegal length - should be >= %zu",
+ sizeof(struct tlv_header_t));
+ return;
+ }
+
+ /* is the packet big enough to include the tlv ? */
+ if (tlen < tlv_len)
+ goto tooshort;
+ /* did we capture enough for fully decoding the tlv ? */
+ ND_TCHECK_LEN(tptr, tlv_len);
+
+ tlv_tptr=tptr+sizeof(struct tlv_header_t);
+ tlv_tlen=tlv_len-sizeof(struct tlv_header_t);
+
+ switch((proto_subtype << 8) + tlv_type) {
+
+ /* those two TLVs have the same structure -> fall through */
+ case ((SLOW_PROTO_LACP << 8) + LACP_TLV_ACTOR_INFO):
+ case ((SLOW_PROTO_LACP << 8) + LACP_TLV_PARTNER_INFO):
+ if (tlv_tlen !=
+ sizeof(struct lacp_tlv_actor_partner_info_t)) {
+ ND_PRINT("\n\t ERROR: illegal length - should be %zu",
+ sizeof(struct tlv_header_t) + sizeof(struct lacp_tlv_actor_partner_info_t));
+ goto badlength;
+ }
+
+ tlv_ptr.lacp_tlv_actor_partner_info = (const struct lacp_tlv_actor_partner_info_t *)tlv_tptr;
+
+ ND_PRINT("\n\t System %s, System Priority %u, Key %u"
+ ", Port %u, Port Priority %u\n\t State Flags [%s]",
+ GET_ETHERADDR_STRING(tlv_ptr.lacp_tlv_actor_partner_info->sys),
+ GET_BE_U_2(tlv_ptr.lacp_tlv_actor_partner_info->sys_pri),
+ GET_BE_U_2(tlv_ptr.lacp_tlv_actor_partner_info->key),
+ GET_BE_U_2(tlv_ptr.lacp_tlv_actor_partner_info->port),
+ GET_BE_U_2(tlv_ptr.lacp_tlv_actor_partner_info->port_pri),
+ bittok2str(lacp_tlv_actor_partner_info_state_values,
+ "none",
+ GET_U_1(tlv_ptr.lacp_tlv_actor_partner_info->state)));
+
+ break;
+
+ case ((SLOW_PROTO_LACP << 8) + LACP_TLV_COLLECTOR_INFO):
+ if (tlv_tlen !=
+ sizeof(struct lacp_tlv_collector_info_t)) {
+ ND_PRINT("\n\t ERROR: illegal length - should be %zu",
+ sizeof(struct tlv_header_t) + sizeof(struct lacp_tlv_collector_info_t));
+ goto badlength;
+ }
+
+ tlv_ptr.lacp_tlv_collector_info = (const struct lacp_tlv_collector_info_t *)tlv_tptr;
+
+ ND_PRINT("\n\t Max Delay %u",
+ GET_BE_U_2(tlv_ptr.lacp_tlv_collector_info->max_delay));
+
+ break;
+
+ case ((SLOW_PROTO_MARKER << 8) + MARKER_TLV_MARKER_INFO):
+ if (tlv_tlen !=
+ sizeof(struct marker_tlv_marker_info_t)) {
+ ND_PRINT("\n\t ERROR: illegal length - should be %zu",
+ sizeof(struct tlv_header_t) + sizeof(struct marker_tlv_marker_info_t));
+ goto badlength;
+ }
+
+ tlv_ptr.marker_tlv_marker_info = (const struct marker_tlv_marker_info_t *)tlv_tptr;
+
+ ND_PRINT("\n\t Request System %s, Request Port %u, Request Transaction ID 0x%08x",
+ GET_ETHERADDR_STRING(tlv_ptr.marker_tlv_marker_info->req_sys),
+ GET_BE_U_2(tlv_ptr.marker_tlv_marker_info->req_port),
+ GET_BE_U_4(tlv_ptr.marker_tlv_marker_info->req_trans_id));
+
+ break;
+
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo, tlv_tptr, "\n\t ", tlv_tlen);
+ break;
+ }
+
+ badlength:
+ /* do we want to see an additional hexdump ? */
+ if (ndo->ndo_vflag > 1) {
+ print_unknown_data(ndo, tptr+sizeof(struct tlv_header_t), "\n\t ",
+ tlv_len-sizeof(struct tlv_header_t));
+ }
+
+ tptr+=tlv_len;
+ tlen-=tlv_len;
+ }
+ return;
+
+tooshort:
+ ND_PRINT("\n\t\t packet is too short");
+}
+
+static void
+slow_oam_print(netdissect_options *ndo,
+ const u_char *tptr, u_int tlen)
+{
+ uint8_t code;
+ uint8_t type, length;
+ uint8_t state;
+ uint8_t command;
+ u_int hexdump;
+
+ struct slow_oam_common_header_t {
+ nd_uint16_t flags;
+ nd_uint8_t code;
+ };
+
+ struct slow_oam_tlv_header_t {
+ nd_uint8_t type;
+ nd_uint8_t length;
+ };
+
+ union {
+ const struct slow_oam_common_header_t *slow_oam_common_header;
+ const struct slow_oam_tlv_header_t *slow_oam_tlv_header;
+ } ptr;
+
+ union {
+ const struct slow_oam_info_t *slow_oam_info;
+ const struct slow_oam_link_event_t *slow_oam_link_event;
+ const struct slow_oam_variablerequest_t *slow_oam_variablerequest;
+ const struct slow_oam_variableresponse_t *slow_oam_variableresponse;
+ const struct slow_oam_loopbackctrl_t *slow_oam_loopbackctrl;
+ } tlv;
+
+ ptr.slow_oam_common_header = (const struct slow_oam_common_header_t *)tptr;
+ if (tlen < sizeof(*ptr.slow_oam_common_header))
+ goto tooshort;
+ ND_TCHECK_SIZE(ptr.slow_oam_common_header);
+ tptr += sizeof(struct slow_oam_common_header_t);
+ tlen -= sizeof(struct slow_oam_common_header_t);
+
+ code = GET_U_1(ptr.slow_oam_common_header->code);
+ ND_PRINT("\n\tCode %s OAM PDU, Flags [%s]",
+ tok2str(slow_oam_code_values, "Unknown (%u)", code),
+ bittok2str(slow_oam_flag_values,
+ "none",
+ GET_BE_U_2(ptr.slow_oam_common_header->flags)));
+
+ switch (code) {
+ case SLOW_OAM_CODE_INFO:
+ while (tlen > 0) {
+ ptr.slow_oam_tlv_header = (const struct slow_oam_tlv_header_t *)tptr;
+ if (tlen < sizeof(*ptr.slow_oam_tlv_header))
+ goto tooshort;
+ ND_TCHECK_SIZE(ptr.slow_oam_tlv_header);
+ type = GET_U_1(ptr.slow_oam_tlv_header->type);
+ length = GET_U_1(ptr.slow_oam_tlv_header->length);
+ ND_PRINT("\n\t %s Information Type (%u), length %u",
+ tok2str(slow_oam_info_type_values, "Reserved", type),
+ type,
+ length);
+
+ if (type == SLOW_OAM_INFO_TYPE_END_OF_TLV) {
+ /*
+ * As IEEE Std 802.3-2015 says for the End of TLV Marker,
+ * "(the length and value of the Type 0x00 TLV can be ignored)".
+ */
+ return;
+ }
+
+ /* length includes the type and length fields */
+ if (length < sizeof(struct slow_oam_tlv_header_t)) {
+ ND_PRINT("\n\t ERROR: illegal length - should be >= %zu",
+ sizeof(struct slow_oam_tlv_header_t));
+ return;
+ }
+
+ if (tlen < length)
+ goto tooshort;
+ ND_TCHECK_LEN(tptr, length);
+
+ hexdump = FALSE;
+ switch (type) {
+ case SLOW_OAM_INFO_TYPE_LOCAL: /* identical format - fall through */
+ case SLOW_OAM_INFO_TYPE_REMOTE:
+ tlv.slow_oam_info = (const struct slow_oam_info_t *)tptr;
+
+ if (GET_U_1(tlv.slow_oam_info->info_length) !=
+ sizeof(struct slow_oam_info_t)) {
+ ND_PRINT("\n\t ERROR: illegal length - should be %zu",
+ sizeof(struct slow_oam_info_t));
+ hexdump = TRUE;
+ goto badlength_code_info;
+ }
+
+ ND_PRINT("\n\t OAM-Version %u, Revision %u",
+ GET_U_1(tlv.slow_oam_info->oam_version),
+ GET_BE_U_2(tlv.slow_oam_info->revision));
+
+ state = GET_U_1(tlv.slow_oam_info->state);
+ ND_PRINT("\n\t State-Parser-Action %s, State-MUX-Action %s",
+ tok2str(slow_oam_info_type_state_parser_values, "Reserved",
+ state & OAM_INFO_TYPE_PARSER_MASK),
+ tok2str(slow_oam_info_type_state_mux_values, "Reserved",
+ state & OAM_INFO_TYPE_MUX_MASK));
+ ND_PRINT("\n\t OAM-Config Flags [%s], OAM-PDU-Config max-PDU size %u",
+ bittok2str(slow_oam_info_type_oam_config_values, "none",
+ GET_U_1(tlv.slow_oam_info->oam_config)),
+ GET_BE_U_2(tlv.slow_oam_info->oam_pdu_config) &
+ OAM_INFO_TYPE_PDU_SIZE_MASK);
+ ND_PRINT("\n\t OUI %s (0x%06x), Vendor-Private 0x%08x",
+ tok2str(oui_values, "Unknown",
+ GET_BE_U_3(tlv.slow_oam_info->oui)),
+ GET_BE_U_3(tlv.slow_oam_info->oui),
+ GET_BE_U_4(tlv.slow_oam_info->vendor_private));
+ break;
+
+ case SLOW_OAM_INFO_TYPE_ORG_SPECIFIC:
+ hexdump = TRUE;
+ break;
+
+ default:
+ hexdump = TRUE;
+ break;
+ }
+
+ badlength_code_info:
+ /* do we also want to see a hex dump ? */
+ if (ndo->ndo_vflag > 1 || hexdump==TRUE) {
+ print_unknown_data(ndo, tptr, "\n\t ",
+ length);
+ }
+
+ tlen -= length;
+ tptr += length;
+ }
+ break;
+
+ case SLOW_OAM_CODE_EVENT_NOTIF:
+ /* Sequence number */
+ if (tlen < 2)
+ goto tooshort;
+ ND_PRINT("\n\t Sequence Number %u", GET_BE_U_2(tptr));
+ tlen -= 2;
+ tptr += 2;
+
+ /* TLVs */
+ while (tlen > 0) {
+ ptr.slow_oam_tlv_header = (const struct slow_oam_tlv_header_t *)tptr;
+ if (tlen < sizeof(*ptr.slow_oam_tlv_header))
+ goto tooshort;
+ type = GET_U_1(ptr.slow_oam_tlv_header->type);
+ length = GET_U_1(ptr.slow_oam_tlv_header->length);
+ ND_PRINT("\n\t %s Link Event Type (%u), length %u",
+ tok2str(slow_oam_link_event_values, "Reserved",
+ type),
+ type,
+ length);
+
+ if (type == SLOW_OAM_INFO_TYPE_END_OF_TLV) {
+ /*
+ * As IEEE Std 802.3-2015 says for the End of TLV Marker,
+ * "(the length and value of the Type 0x00 TLV can be ignored)".
+ */
+ return;
+ }
+
+ /* length includes the type and length fields */
+ if (length < sizeof(struct slow_oam_tlv_header_t)) {
+ ND_PRINT("\n\t ERROR: illegal length - should be >= %zu",
+ sizeof(struct slow_oam_tlv_header_t));
+ return;
+ }
+
+ if (tlen < length)
+ goto tooshort;
+ ND_TCHECK_LEN(tptr, length);
+
+ hexdump = FALSE;
+ switch (type) {
+ case SLOW_OAM_LINK_EVENT_ERR_SYM_PER: /* identical format - fall through */
+ case SLOW_OAM_LINK_EVENT_ERR_FRM:
+ case SLOW_OAM_LINK_EVENT_ERR_FRM_PER:
+ case SLOW_OAM_LINK_EVENT_ERR_FRM_SUMM:
+ tlv.slow_oam_link_event = (const struct slow_oam_link_event_t *)tptr;
+
+ if (GET_U_1(tlv.slow_oam_link_event->event_length) !=
+ sizeof(struct slow_oam_link_event_t)) {
+ ND_PRINT("\n\t ERROR: illegal length - should be %zu",
+ sizeof(struct slow_oam_link_event_t));
+ hexdump = TRUE;
+ goto badlength_event_notif;
+ }
+
+ ND_PRINT("\n\t Timestamp %u ms, Errored Window %" PRIu64
+ "\n\t Errored Threshold %" PRIu64
+ "\n\t Errors %" PRIu64
+ "\n\t Error Running Total %" PRIu64
+ "\n\t Event Running Total %u",
+ GET_BE_U_2(tlv.slow_oam_link_event->time_stamp)*100,
+ GET_BE_U_8(tlv.slow_oam_link_event->window),
+ GET_BE_U_8(tlv.slow_oam_link_event->threshold),
+ GET_BE_U_8(tlv.slow_oam_link_event->errors),
+ GET_BE_U_8(tlv.slow_oam_link_event->errors_running_total),
+ GET_BE_U_4(tlv.slow_oam_link_event->event_running_total));
+ break;
+
+ case SLOW_OAM_LINK_EVENT_ORG_SPECIFIC:
+ hexdump = TRUE;
+ break;
+
+ default:
+ hexdump = TRUE;
+ break;
+ }
+
+ badlength_event_notif:
+ /* do we also want to see a hex dump ? */
+ if (ndo->ndo_vflag > 1 || hexdump==TRUE) {
+ print_unknown_data(ndo, tptr, "\n\t ",
+ length);
+ }
+
+ tlen -= length;
+ tptr += length;
+ }
+ break;
+
+ case SLOW_OAM_CODE_LOOPBACK_CTRL:
+ tlv.slow_oam_loopbackctrl = (const struct slow_oam_loopbackctrl_t *)tptr;
+ if (tlen < sizeof(*tlv.slow_oam_loopbackctrl))
+ goto tooshort;
+ command = GET_U_1(tlv.slow_oam_loopbackctrl->command);
+ ND_PRINT("\n\t Command %s (%u)",
+ tok2str(slow_oam_loopbackctrl_cmd_values,
+ "Unknown",
+ command),
+ command);
+ tptr ++;
+ tlen --;
+ break;
+
+ /*
+ * FIXME those are the defined codes that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+ case SLOW_OAM_CODE_VAR_REQUEST:
+ case SLOW_OAM_CODE_VAR_RESPONSE:
+ case SLOW_OAM_CODE_PRIVATE:
+ default:
+ if (ndo->ndo_vflag <= 1) {
+ print_unknown_data(ndo, tptr, "\n\t ", tlen);
+ }
+ break;
+ }
+ return;
+
+tooshort:
+ ND_PRINT("\n\t\t packet is too short");
+}
diff --git a/print-smb.c b/print-smb.c
new file mode 100644
index 0000000..bcd7363
--- /dev/null
+++ b/print-smb.c
@@ -0,0 +1,1476 @@
+/*
+ * Copyright (C) Andrew Tridgell 1995-1999
+ *
+ * This software may be distributed either under the terms of the
+ * BSD-style license that accompanies tcpdump or the GNU GPL version 2
+ * or later
+ */
+
+/* \summary: SMB/CIFS printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect.h"
+#include "extract.h"
+#include "smb.h"
+
+
+static int request = 0;
+static int unicodestr = 0;
+
+extern const u_char *startbuf;
+
+const u_char *startbuf = NULL;
+
+struct smbdescript {
+ const char *req_f1;
+ const char *req_f2;
+ const char *rep_f1;
+ const char *rep_f2;
+ void (*fn)(netdissect_options *, const u_char *, const u_char *, const u_char *, const u_char *);
+};
+
+struct smbdescriptint {
+ const char *req_f1;
+ const char *req_f2;
+ const char *rep_f1;
+ const char *rep_f2;
+ void (*fn)(netdissect_options *, const u_char *, const u_char *, u_int, u_int);
+};
+
+struct smbfns
+{
+ int id;
+ const char *name;
+ int flags;
+ struct smbdescript descript;
+};
+
+struct smbfnsint
+{
+ int id;
+ const char *name;
+ int flags;
+ struct smbdescriptint descript;
+};
+
+#define DEFDESCRIPT { NULL, NULL, NULL, NULL, NULL }
+
+#define FLG_CHAIN (1 << 0)
+
+static const struct smbfns *
+smbfind(int id, const struct smbfns *list)
+{
+ int sindex;
+
+ for (sindex = 0; list[sindex].name; sindex++)
+ if (list[sindex].id == id)
+ return(&list[sindex]);
+
+ return(&list[0]);
+}
+
+static const struct smbfnsint *
+smbfindint(int id, const struct smbfnsint *list)
+{
+ int sindex;
+
+ for (sindex = 0; list[sindex].name; sindex++)
+ if (list[sindex].id == id)
+ return(&list[sindex]);
+
+ return(&list[0]);
+}
+
+static void
+trans2_findfirst(netdissect_options *ndo,
+ const u_char *param, const u_char *data, u_int pcnt, u_int dcnt)
+{
+ const char *fmt;
+
+ if (request)
+ fmt = "Attribute=[A]\nSearchCount=[u]\nFlags=[w]\nLevel=[uP4]\nFile=[S]\n";
+ else
+ fmt = "Handle=[w]\nCount=[u]\nEOS=[w]\nEoffset=[u]\nLastNameOfs=[w]\n";
+
+ smb_fdata(ndo, param, fmt, param + pcnt, unicodestr);
+ if (dcnt) {
+ ND_PRINT("data:\n");
+ smb_data_print(ndo, data, dcnt);
+ }
+}
+
+static void
+trans2_qfsinfo(netdissect_options *ndo,
+ const u_char *param, const u_char *data, u_int pcnt, u_int dcnt)
+{
+ static u_int level = 0;
+ const char *fmt="";
+
+ if (request) {
+ level = GET_LE_U_2(param);
+ fmt = "InfoLevel=[u]\n";
+ smb_fdata(ndo, param, fmt, param + pcnt, unicodestr);
+ } else {
+ switch (level) {
+ case 1:
+ fmt = "idFileSystem=[W]\nSectorUnit=[U]\nUnit=[U]\nAvail=[U]\nSectorSize=[u]\n";
+ break;
+ case 2:
+ fmt = "CreationTime=[T2]VolNameLength=[lb]\nVolumeLabel=[c]\n";
+ break;
+ case 0x105:
+ fmt = "Capabilities=[W]\nMaxFileLen=[U]\nVolNameLen=[lU]\nVolume=[C]\n";
+ break;
+ default:
+ fmt = "UnknownLevel\n";
+ break;
+ }
+ smb_fdata(ndo, data, fmt, data + dcnt, unicodestr);
+ }
+ if (dcnt) {
+ ND_PRINT("data:\n");
+ smb_data_print(ndo, data, dcnt);
+ }
+}
+
+static const struct smbfnsint trans2_fns[] = {
+ { 0, "TRANSACT2_OPEN", 0,
+ { "Flags2=[w]\nMode=[w]\nSearchAttrib=[A]\nAttrib=[A]\nTime=[T2]\nOFun=[w]\nSize=[U]\nRes=([w, w, w, w, w])\nPath=[S]",
+ NULL,
+ "Handle=[u]\nAttrib=[A]\nTime=[T2]\nSize=[U]\nAccess=[w]\nType=[w]\nState=[w]\nAction=[w]\nInode=[W]\nOffErr=[u]\n|EALength=[u]\n",
+ NULL, NULL }},
+ { 1, "TRANSACT2_FINDFIRST", 0,
+ { NULL, NULL, NULL, NULL, trans2_findfirst }},
+ { 2, "TRANSACT2_FINDNEXT", 0, DEFDESCRIPT },
+ { 3, "TRANSACT2_QFSINFO", 0,
+ { NULL, NULL, NULL, NULL, trans2_qfsinfo }},
+ { 4, "TRANSACT2_SETFSINFO", 0, DEFDESCRIPT },
+ { 5, "TRANSACT2_QPATHINFO", 0, DEFDESCRIPT },
+ { 6, "TRANSACT2_SETPATHINFO", 0, DEFDESCRIPT },
+ { 7, "TRANSACT2_QFILEINFO", 0, DEFDESCRIPT },
+ { 8, "TRANSACT2_SETFILEINFO", 0, DEFDESCRIPT },
+ { 9, "TRANSACT2_FSCTL", 0, DEFDESCRIPT },
+ { 10, "TRANSACT2_IOCTL", 0, DEFDESCRIPT },
+ { 11, "TRANSACT2_FINDNOTIFYFIRST", 0, DEFDESCRIPT },
+ { 12, "TRANSACT2_FINDNOTIFYNEXT", 0, DEFDESCRIPT },
+ { 13, "TRANSACT2_MKDIR", 0, DEFDESCRIPT },
+ { -1, NULL, 0, DEFDESCRIPT }
+};
+
+
+static void
+print_trans2(netdissect_options *ndo,
+ const u_char *words, const u_char *dat, const u_char *buf, const u_char *maxbuf)
+{
+ u_int bcc;
+ static const struct smbfnsint *fn = &trans2_fns[0];
+ const u_char *data, *param;
+ const u_char *w = words + 1;
+ const char *f1 = NULL, *f2 = NULL;
+ u_int pcnt, dcnt;
+
+ ND_TCHECK_1(words);
+ if (request) {
+ ND_TCHECK_2(w + (14 * 2));
+ pcnt = GET_LE_U_2(w + 9 * 2);
+ param = buf + GET_LE_U_2(w + 10 * 2);
+ dcnt = GET_LE_U_2(w + 11 * 2);
+ data = buf + GET_LE_U_2(w + 12 * 2);
+ fn = smbfindint(GET_LE_U_2(w + 14 * 2), trans2_fns);
+ } else {
+ if (GET_U_1(words) == 0) {
+ ND_PRINT("%s\n", fn->name);
+ ND_PRINT("Trans2Interim\n");
+ return;
+ }
+ ND_TCHECK_2(w + (7 * 2));
+ pcnt = GET_LE_U_2(w + 3 * 2);
+ param = buf + GET_LE_U_2(w + 4 * 2);
+ dcnt = GET_LE_U_2(w + 6 * 2);
+ data = buf + GET_LE_U_2(w + 7 * 2);
+ }
+
+ ND_PRINT("%s param_length=%u data_length=%u\n", fn->name, pcnt, dcnt);
+
+ if (request) {
+ if (GET_U_1(words) == 8) {
+ smb_fdata(ndo, words + 1,
+ "Trans2Secondary\nTotParam=[u]\nTotData=[u]\nParamCnt=[u]\nParamOff=[u]\nParamDisp=[u]\nDataCnt=[u]\nDataOff=[u]\nDataDisp=[u]\nHandle=[u]\n",
+ maxbuf, unicodestr);
+ return;
+ } else {
+ smb_fdata(ndo, words + 1,
+ "TotParam=[u]\nTotData=[u]\nMaxParam=[u]\nMaxData=[u]\nMaxSetup=[b][P1]\nFlags=[w]\nTimeOut=[D]\nRes1=[w]\nParamCnt=[u]\nParamOff=[u]\nDataCnt=[u]\nDataOff=[u]\nSetupCnt=[b][P1]\n",
+ words + 1 + 14 * 2, unicodestr);
+ }
+ f1 = fn->descript.req_f1;
+ f2 = fn->descript.req_f2;
+ } else {
+ smb_fdata(ndo, words + 1,
+ "TotParam=[u]\nTotData=[u]\nRes1=[w]\nParamCnt=[u]\nParamOff=[u]\nParamDisp[u]\nDataCnt=[u]\nDataOff=[u]\nDataDisp=[u]\nSetupCnt=[b][P1]\n",
+ words + 1 + 10 * 2, unicodestr);
+ f1 = fn->descript.rep_f1;
+ f2 = fn->descript.rep_f2;
+ }
+
+ bcc = GET_LE_U_2(dat);
+ ND_PRINT("smb_bcc=%u\n", bcc);
+ if (fn->descript.fn)
+ (*fn->descript.fn)(ndo, param, data, pcnt, dcnt);
+ else {
+ smb_fdata(ndo, param, f1 ? f1 : "Parameters=\n", param + pcnt, unicodestr);
+ smb_fdata(ndo, data, f2 ? f2 : "Data=\n", data + dcnt, unicodestr);
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static void
+print_browse(netdissect_options *ndo,
+ const u_char *param, u_int paramlen, const u_char *data, u_int datalen)
+{
+ const u_char *maxbuf = data + datalen;
+ u_int command;
+
+ command = GET_U_1(data);
+
+ smb_fdata(ndo, param, "BROWSE PACKET\n|Param ", param+paramlen, unicodestr);
+
+ switch (command) {
+ case 0xF:
+ data = smb_fdata(ndo, data,
+ "BROWSE PACKET:\nType=[B] (LocalMasterAnnouncement)\nUpdateCount=[w]\nRes1=[B]\nAnnounceInterval=[u]\nName=[n2]\nMajorVersion=[B]\nMinorVersion=[B]\nServerType=[W]\nElectionVersion=[w]\nBrowserConstant=[w]\n",
+ maxbuf, unicodestr);
+ break;
+
+ case 0x1:
+ data = smb_fdata(ndo, data,
+ "BROWSE PACKET:\nType=[B] (HostAnnouncement)\nUpdateCount=[w]\nRes1=[B]\nAnnounceInterval=[u]\nName=[n2]\nMajorVersion=[B]\nMinorVersion=[B]\nServerType=[W]\nElectionVersion=[w]\nBrowserConstant=[w]\n",
+ maxbuf, unicodestr);
+ break;
+
+ case 0x2:
+ data = smb_fdata(ndo, data,
+ "BROWSE PACKET:\nType=[B] (AnnouncementRequest)\nFlags=[B]\nReplySystemName=[S]\n",
+ maxbuf, unicodestr);
+ break;
+
+ case 0xc:
+ data = smb_fdata(ndo, data,
+ "BROWSE PACKET:\nType=[B] (WorkgroupAnnouncement)\nUpdateCount=[w]\nRes1=[B]\nAnnounceInterval=[u]\nName=[n2]\nMajorVersion=[B]\nMinorVersion=[B]\nServerType=[W]\nCommentPointer=[W]\nServerName=[S]\n",
+ maxbuf, unicodestr);
+ break;
+
+ case 0x8:
+ data = smb_fdata(ndo, data,
+ "BROWSE PACKET:\nType=[B] (ElectionFrame)\nElectionVersion=[B]\nOSSummary=[W]\nUptime=[(W, W)]\nServerName=[S]\n",
+ maxbuf, unicodestr);
+ break;
+
+ case 0xb:
+ data = smb_fdata(ndo, data,
+ "BROWSE PACKET:\nType=[B] (BecomeBackupBrowser)\nName=[S]\n",
+ maxbuf, unicodestr);
+ break;
+
+ case 0x9:
+ data = smb_fdata(ndo, data,
+ "BROWSE PACKET:\nType=[B] (GetBackupList)\nListCount?=[B]\nToken=[W]\n",
+ maxbuf, unicodestr);
+ break;
+
+ case 0xa:
+ data = smb_fdata(ndo, data,
+ "BROWSE PACKET:\nType=[B] (BackupListResponse)\nServerCount?=[B]\nToken=[W]\n*Name=[S]\n",
+ maxbuf, unicodestr);
+ break;
+
+ case 0xd:
+ data = smb_fdata(ndo, data,
+ "BROWSE PACKET:\nType=[B] (MasterAnnouncement)\nMasterName=[S]\n",
+ maxbuf, unicodestr);
+ break;
+
+ case 0xe:
+ data = smb_fdata(ndo, data,
+ "BROWSE PACKET:\nType=[B] (ResetBrowser)\nOptions=[B]\n", maxbuf, unicodestr);
+ break;
+
+ default:
+ data = smb_fdata(ndo, data, "Unknown Browser Frame ", maxbuf, unicodestr);
+ break;
+ }
+}
+
+
+static void
+print_ipc(netdissect_options *ndo,
+ const u_char *param, u_int paramlen, const u_char *data, u_int datalen)
+{
+ if (paramlen)
+ smb_fdata(ndo, param, "Command=[w]\nStr1=[S]\nStr2=[S]\n", param + paramlen,
+ unicodestr);
+ if (datalen)
+ smb_fdata(ndo, data, "IPC ", data + datalen, unicodestr);
+}
+
+
+static void
+print_trans(netdissect_options *ndo,
+ const u_char *words, const u_char *data1, const u_char *buf, const u_char *maxbuf)
+{
+ u_int bcc;
+ const char *f1, *f2, *f3, *f4;
+ const u_char *data, *param;
+ const u_char *w = words + 1;
+ u_int datalen, paramlen;
+
+ if (request) {
+ ND_TCHECK_2(w + (12 * 2));
+ paramlen = GET_LE_U_2(w + 9 * 2);
+ param = buf + GET_LE_U_2(w + 10 * 2);
+ datalen = GET_LE_U_2(w + 11 * 2);
+ data = buf + GET_LE_U_2(w + 12 * 2);
+ f1 = "TotParamCnt=[u]\nTotDataCnt=[u]\nMaxParmCnt=[u]\nMaxDataCnt=[u]\nMaxSCnt=[u]\nTransFlags=[w]\nRes1=[w]\nRes2=[w]\nRes3=[w]\nParamCnt=[u]\nParamOff=[u]\nDataCnt=[u]\nDataOff=[u]\nSUCnt=[u]\n";
+ f2 = "|Name=[S]\n";
+ f3 = "|Param ";
+ f4 = "|Data ";
+ } else {
+ ND_TCHECK_2(w + (7 * 2));
+ paramlen = GET_LE_U_2(w + 3 * 2);
+ param = buf + GET_LE_U_2(w + 4 * 2);
+ datalen = GET_LE_U_2(w + 6 * 2);
+ data = buf + GET_LE_U_2(w + 7 * 2);
+ f1 = "TotParamCnt=[u]\nTotDataCnt=[u]\nRes1=[u]\nParamCnt=[u]\nParamOff=[u]\nRes2=[u]\nDataCnt=[u]\nDataOff=[u]\nRes3=[u]\nLsetup=[u]\n";
+ f2 = "|Unknown ";
+ f3 = "|Param ";
+ f4 = "|Data ";
+ }
+
+ smb_fdata(ndo, words + 1, f1,
+ ND_MIN(words + 1 + 2 * GET_U_1(words), maxbuf),
+ unicodestr);
+
+ bcc = GET_LE_U_2(data1);
+ ND_PRINT("smb_bcc=%u\n", bcc);
+ if (bcc > 0) {
+ smb_fdata(ndo, data1 + 2, f2, maxbuf - (paramlen + datalen), unicodestr);
+
+#define MAILSLOT_BROWSE_STR "\\MAILSLOT\\BROWSE"
+ ND_TCHECK_LEN(data1 + 2, strlen(MAILSLOT_BROWSE_STR) + 1);
+ if (strcmp((const char *)(data1 + 2), MAILSLOT_BROWSE_STR) == 0) {
+ print_browse(ndo, param, paramlen, data, datalen);
+ return;
+ }
+#undef MAILSLOT_BROWSE_STR
+
+#define PIPE_LANMAN_STR "\\PIPE\\LANMAN"
+ ND_TCHECK_LEN(data1 + 2, strlen(PIPE_LANMAN_STR) + 1);
+ if (strcmp((const char *)(data1 + 2), PIPE_LANMAN_STR) == 0) {
+ print_ipc(ndo, param, paramlen, data, datalen);
+ return;
+ }
+#undef PIPE_LANMAN_STR
+
+ if (paramlen)
+ smb_fdata(ndo, param, f3, ND_MIN(param + paramlen, maxbuf), unicodestr);
+ if (datalen)
+ smb_fdata(ndo, data, f4, ND_MIN(data + datalen, maxbuf), unicodestr);
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+
+static void
+print_negprot(netdissect_options *ndo,
+ const u_char *words, const u_char *data, const u_char *buf _U_, const u_char *maxbuf)
+{
+ u_int wct, bcc;
+ const char *f1 = NULL, *f2 = NULL;
+
+ wct = GET_U_1(words);
+ if (request)
+ f2 = "*|Dialect=[Y]\n";
+ else {
+ if (wct == 1)
+ f1 = "Core Protocol\nDialectIndex=[u]";
+ else if (wct == 17)
+ f1 = "NT1 Protocol\nDialectIndex=[u]\nSecMode=[B]\nMaxMux=[u]\nNumVcs=[u]\nMaxBuffer=[U]\nRawSize=[U]\nSessionKey=[W]\nCapabilities=[W]\nServerTime=[T3]TimeZone=[u]\nCryptKey=";
+ else if (wct == 13)
+ f1 = "Coreplus/Lanman1/Lanman2 Protocol\nDialectIndex=[u]\nSecMode=[w]\nMaxXMit=[u]\nMaxMux=[u]\nMaxVcs=[u]\nBlkMode=[w]\nSessionKey=[W]\nServerTime=[T1]TimeZone=[u]\nRes=[W]\nCryptKey=";
+ }
+
+ if (f1)
+ smb_fdata(ndo, words + 1, f1, ND_MIN(words + 1 + wct * 2, maxbuf),
+ unicodestr);
+ else
+ smb_data_print(ndo, words + 1, ND_MIN(wct * 2, ND_BYTES_BETWEEN(maxbuf, words + 1)));
+
+ bcc = GET_LE_U_2(data);
+ ND_PRINT("smb_bcc=%u\n", bcc);
+ if (bcc > 0) {
+ if (f2)
+ smb_fdata(ndo, data + 2, f2, ND_MIN(data + 2 + GET_LE_U_2(data),
+ maxbuf), unicodestr);
+ else
+ smb_data_print(ndo, data + 2,
+ ND_MIN(GET_LE_U_2(data), ND_BYTES_BETWEEN(maxbuf, data + 2)));
+ }
+}
+
+static void
+print_sesssetup(netdissect_options *ndo,
+ const u_char *words, const u_char *data, const u_char *buf _U_, const u_char *maxbuf)
+{
+ u_int wct, bcc;
+ const char *f1 = NULL, *f2 = NULL;
+
+ wct = GET_U_1(words);
+ if (request) {
+ if (wct == 10)
+ f1 = "Com2=[w]\nOff2=[u]\nBufSize=[u]\nMpxMax=[u]\nVcNum=[u]\nSessionKey=[W]\nPassLen=[u]\nCryptLen=[u]\nCryptOff=[u]\nPass&Name=\n";
+ else
+ f1 = "Com2=[B]\nRes1=[B]\nOff2=[u]\nMaxBuffer=[u]\nMaxMpx=[u]\nVcNumber=[u]\nSessionKey=[W]\nCaseInsensitivePasswordLength=[u]\nCaseSensitivePasswordLength=[u]\nRes=[W]\nCapabilities=[W]\nPass1&Pass2&Account&Domain&OS&LanMan=\n";
+ } else {
+ if (wct == 3) {
+ f1 = "Com2=[w]\nOff2=[u]\nAction=[w]\n";
+ } else if (wct == 13) {
+ f1 = "Com2=[B]\nRes=[B]\nOff2=[u]\nAction=[w]\n";
+ f2 = "NativeOS=[S]\nNativeLanMan=[S]\nPrimaryDomain=[S]\n";
+ }
+ }
+
+ if (f1)
+ smb_fdata(ndo, words + 1, f1, ND_MIN(words + 1 + wct * 2, maxbuf),
+ unicodestr);
+ else
+ smb_data_print(ndo, words + 1, ND_MIN(wct * 2, ND_BYTES_BETWEEN(maxbuf, words + 1)));
+
+ bcc = GET_LE_U_2(data);
+ ND_PRINT("smb_bcc=%u\n", bcc);
+ if (bcc > 0) {
+ if (f2)
+ smb_fdata(ndo, data + 2, f2, ND_MIN(data + 2 + GET_LE_U_2(data),
+ maxbuf), unicodestr);
+ else
+ smb_data_print(ndo, data + 2,
+ ND_MIN(GET_LE_U_2(data), ND_BYTES_BETWEEN(maxbuf, data + 2)));
+ }
+}
+
+static void
+print_lockingandx(netdissect_options *ndo,
+ const u_char *words, const u_char *data, const u_char *buf _U_, const u_char *maxbuf)
+{
+ u_int wct, bcc;
+ const u_char *maxwords;
+ const char *f1 = NULL, *f2 = NULL;
+
+ wct = GET_U_1(words);
+ if (request) {
+ f1 = "Com2=[w]\nOff2=[u]\nHandle=[u]\nLockType=[w]\nTimeOut=[D]\nUnlockCount=[u]\nLockCount=[u]\n";
+ if (GET_U_1(words + 7) & 0x10)
+ f2 = "*Process=[u]\n[P2]Offset=[M]\nLength=[M]\n";
+ else
+ f2 = "*Process=[u]\nOffset=[D]\nLength=[U]\n";
+ } else {
+ f1 = "Com2=[w]\nOff2=[u]\n";
+ }
+
+ maxwords = ND_MIN(words + 1 + wct * 2, maxbuf);
+ if (wct)
+ smb_fdata(ndo, words + 1, f1, maxwords, unicodestr);
+
+ bcc = GET_LE_U_2(data);
+ ND_PRINT("smb_bcc=%u\n", bcc);
+ if (bcc > 0) {
+ if (f2)
+ smb_fdata(ndo, data + 2, f2, ND_MIN(data + 2 + GET_LE_U_2(data),
+ maxbuf), unicodestr);
+ else
+ smb_data_print(ndo, data + 2,
+ ND_MIN(GET_LE_U_2(data), ND_BYTES_BETWEEN(maxbuf, data + 2)));
+ }
+}
+
+
+static const struct smbfns smb_fns[] = {
+ { -1, "SMBunknown", 0, DEFDESCRIPT },
+
+ { SMBtcon, "SMBtcon", 0,
+ { NULL, "Path=[Z]\nPassword=[Z]\nDevice=[Z]\n",
+ "MaxXmit=[u]\nTreeId=[u]\n", NULL,
+ NULL } },
+
+ { SMBtdis, "SMBtdis", 0, DEFDESCRIPT },
+ { SMBexit, "SMBexit", 0, DEFDESCRIPT },
+ { SMBioctl, "SMBioctl", 0, DEFDESCRIPT },
+
+ { SMBecho, "SMBecho", 0,
+ { "ReverbCount=[u]\n", NULL,
+ "SequenceNum=[u]\n", NULL,
+ NULL } },
+
+ { SMBulogoffX, "SMBulogoffX", FLG_CHAIN, DEFDESCRIPT },
+
+ { SMBgetatr, "SMBgetatr", 0,
+ { NULL, "Path=[Z]\n",
+ "Attribute=[A]\nTime=[T2]Size=[U]\nRes=([w,w,w,w,w])\n", NULL,
+ NULL } },
+
+ { SMBsetatr, "SMBsetatr", 0,
+ { "Attribute=[A]\nTime=[T2]Res=([w,w,w,w,w])\n", "Path=[Z]\n",
+ NULL, NULL, NULL } },
+
+ { SMBchkpth, "SMBchkpth", 0,
+ { NULL, "Path=[Z]\n", NULL, NULL, NULL } },
+
+ { SMBsearch, "SMBsearch", 0,
+ { "Count=[u]\nAttrib=[A]\n",
+ "Path=[Z]\nBlkType=[B]\nBlkLen=[u]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[u]\nSrv2=[w]\nRes2=[W]\n",
+ "Count=[u]\n",
+ "BlkType=[B]\nBlkLen=[u]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[u]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[U]\nName=[s13]\n",
+ NULL } },
+
+ { SMBopen, "SMBopen", 0,
+ { "Mode=[w]\nAttribute=[A]\n", "Path=[Z]\n",
+ "Handle=[u]\nOAttrib=[A]\nTime=[T2]Size=[U]\nAccess=[w]\n",
+ NULL, NULL } },
+
+ { SMBcreate, "SMBcreate", 0,
+ { "Attrib=[A]\nTime=[T2]", "Path=[Z]\n", "Handle=[u]\n", NULL, NULL } },
+
+ { SMBmknew, "SMBmknew", 0,
+ { "Attrib=[A]\nTime=[T2]", "Path=[Z]\n", "Handle=[u]\n", NULL, NULL } },
+
+ { SMBunlink, "SMBunlink", 0,
+ { "Attrib=[A]\n", "Path=[Z]\n", NULL, NULL, NULL } },
+
+ { SMBread, "SMBread", 0,
+ { "Handle=[u]\nByteCount=[u]\nOffset=[D]\nCountLeft=[u]\n", NULL,
+ "Count=[u]\nRes=([w,w,w,w])\n", NULL, NULL } },
+
+ { SMBwrite, "SMBwrite", 0,
+ { "Handle=[u]\nByteCount=[u]\nOffset=[D]\nCountLeft=[u]\n", NULL,
+ "Count=[u]\n", NULL, NULL } },
+
+ { SMBclose, "SMBclose", 0,
+ { "Handle=[u]\nTime=[T2]", NULL, NULL, NULL, NULL } },
+
+ { SMBmkdir, "SMBmkdir", 0,
+ { NULL, "Path=[Z]\n", NULL, NULL, NULL } },
+
+ { SMBrmdir, "SMBrmdir", 0,
+ { NULL, "Path=[Z]\n", NULL, NULL, NULL } },
+
+ { SMBdskattr, "SMBdskattr", 0,
+ { NULL, NULL,
+ "TotalUnits=[u]\nBlocksPerUnit=[u]\nBlockSize=[u]\nFreeUnits=[u]\nMedia=[w]\n",
+ NULL, NULL } },
+
+ { SMBmv, "SMBmv", 0,
+ { "Attrib=[A]\n", "OldPath=[Z]\nNewPath=[Z]\n", NULL, NULL, NULL } },
+
+ /*
+ * this is a Pathworks specific call, allowing the
+ * changing of the root path
+ */
+ { pSETDIR, "SMBsetdir", 0, { NULL, "Path=[Z]\n", NULL, NULL, NULL } },
+
+ { SMBlseek, "SMBlseek", 0,
+ { "Handle=[u]\nMode=[w]\nOffset=[D]\n", "Offset=[D]\n", NULL, NULL, NULL } },
+
+ { SMBflush, "SMBflush", 0, { "Handle=[u]\n", NULL, NULL, NULL, NULL } },
+
+ { SMBsplopen, "SMBsplopen", 0,
+ { "SetupLen=[u]\nMode=[w]\n", "Ident=[Z]\n", "Handle=[u]\n",
+ NULL, NULL } },
+
+ { SMBsplclose, "SMBsplclose", 0,
+ { "Handle=[u]\n", NULL, NULL, NULL, NULL } },
+
+ { SMBsplretq, "SMBsplretq", 0,
+ { "MaxCount=[u]\nStartIndex=[u]\n", NULL,
+ "Count=[u]\nIndex=[u]\n",
+ "*Time=[T2]Status=[B]\nJobID=[u]\nSize=[U]\nRes=[B]Name=[s16]\n",
+ NULL } },
+
+ { SMBsplwr, "SMBsplwr", 0,
+ { "Handle=[u]\n", NULL, NULL, NULL, NULL } },
+
+ { SMBlock, "SMBlock", 0,
+ { "Handle=[u]\nCount=[U]\nOffset=[D]\n", NULL, NULL, NULL, NULL } },
+
+ { SMBunlock, "SMBunlock", 0,
+ { "Handle=[u]\nCount=[U]\nOffset=[D]\n", NULL, NULL, NULL, NULL } },
+
+ /* CORE+ PROTOCOL FOLLOWS */
+
+ { SMBreadbraw, "SMBreadbraw", 0,
+ { "Handle=[u]\nOffset=[D]\nMaxCount=[u]\nMinCount=[u]\nTimeOut=[D]\nRes=[u]\n",
+ NULL, NULL, NULL, NULL } },
+
+ { SMBwritebraw, "SMBwritebraw", 0,
+ { "Handle=[u]\nTotalCount=[u]\nRes=[w]\nOffset=[D]\nTimeOut=[D]\nWMode=[w]\nRes2=[W]\n|DataSize=[u]\nDataOff=[u]\n",
+ NULL, "WriteRawAck", NULL, NULL } },
+
+ { SMBwritec, "SMBwritec", 0,
+ { NULL, NULL, "Count=[u]\n", NULL, NULL } },
+
+ { SMBwriteclose, "SMBwriteclose", 0,
+ { "Handle=[u]\nCount=[u]\nOffset=[D]\nTime=[T2]Res=([w,w,w,w,w,w])",
+ NULL, "Count=[u]\n", NULL, NULL } },
+
+ { SMBlockread, "SMBlockread", 0,
+ { "Handle=[u]\nByteCount=[u]\nOffset=[D]\nCountLeft=[u]\n", NULL,
+ "Count=[u]\nRes=([w,w,w,w])\n", NULL, NULL } },
+
+ { SMBwriteunlock, "SMBwriteunlock", 0,
+ { "Handle=[u]\nByteCount=[u]\nOffset=[D]\nCountLeft=[u]\n", NULL,
+ "Count=[u]\n", NULL, NULL } },
+
+ { SMBreadBmpx, "SMBreadBmpx", 0,
+ { "Handle=[u]\nOffset=[D]\nMaxCount=[u]\nMinCount=[u]\nTimeOut=[D]\nRes=[w]\n",
+ NULL,
+ "Offset=[D]\nTotCount=[u]\nRemaining=[u]\nRes=([w,w])\nDataSize=[u]\nDataOff=[u]\n",
+ NULL, NULL } },
+
+ { SMBwriteBmpx, "SMBwriteBmpx", 0,
+ { "Handle=[u]\nTotCount=[u]\nRes=[w]\nOffset=[D]\nTimeOut=[D]\nWMode=[w]\nRes2=[W]\nDataSize=[u]\nDataOff=[u]\n", NULL,
+ "Remaining=[u]\n", NULL, NULL } },
+
+ { SMBwriteBs, "SMBwriteBs", 0,
+ { "Handle=[u]\nTotCount=[u]\nOffset=[D]\nRes=[W]\nDataSize=[u]\nDataOff=[u]\n",
+ NULL, "Count=[u]\n", NULL, NULL } },
+
+ { SMBsetattrE, "SMBsetattrE", 0,
+ { "Handle=[u]\nCreationTime=[T2]AccessTime=[T2]ModifyTime=[T2]", NULL,
+ NULL, NULL, NULL } },
+
+ { SMBgetattrE, "SMBgetattrE", 0,
+ { "Handle=[u]\n", NULL,
+ "CreationTime=[T2]AccessTime=[T2]ModifyTime=[T2]Size=[U]\nAllocSize=[U]\nAttribute=[A]\n",
+ NULL, NULL } },
+
+ { SMBtranss, "SMBtranss", 0, DEFDESCRIPT },
+ { SMBioctls, "SMBioctls", 0, DEFDESCRIPT },
+
+ { SMBcopy, "SMBcopy", 0,
+ { "TreeID2=[u]\nOFun=[w]\nFlags=[w]\n", "Path=[S]\nNewPath=[S]\n",
+ "CopyCount=[u]\n", "|ErrStr=[S]\n", NULL } },
+
+ { SMBmove, "SMBmove", 0,
+ { "TreeID2=[u]\nOFun=[w]\nFlags=[w]\n", "Path=[S]\nNewPath=[S]\n",
+ "MoveCount=[u]\n", "|ErrStr=[S]\n", NULL } },
+
+ { SMBopenX, "SMBopenX", FLG_CHAIN,
+ { "Com2=[w]\nOff2=[u]\nFlags=[w]\nMode=[w]\nSearchAttrib=[A]\nAttrib=[A]\nTime=[T2]OFun=[w]\nSize=[U]\nTimeOut=[D]\nRes=[W]\n",
+ "Path=[S]\n",
+ "Com2=[w]\nOff2=[u]\nHandle=[u]\nAttrib=[A]\nTime=[T2]Size=[U]\nAccess=[w]\nType=[w]\nState=[w]\nAction=[w]\nFileID=[W]\nRes=[w]\n",
+ NULL, NULL } },
+
+ { SMBreadX, "SMBreadX", FLG_CHAIN,
+ { "Com2=[w]\nOff2=[u]\nHandle=[u]\nOffset=[D]\nMaxCount=[u]\nMinCount=[u]\nTimeOut=[D]\nCountLeft=[u]\n",
+ NULL,
+ "Com2=[w]\nOff2=[u]\nRemaining=[u]\nRes=[W]\nDataSize=[u]\nDataOff=[u]\nRes=([w,w,w,w])\n",
+ NULL, NULL } },
+
+ { SMBwriteX, "SMBwriteX", FLG_CHAIN,
+ { "Com2=[w]\nOff2=[u]\nHandle=[u]\nOffset=[D]\nTimeOut=[D]\nWMode=[w]\nCountLeft=[u]\nRes=[w]\nDataSize=[u]\nDataOff=[u]\n",
+ NULL,
+ "Com2=[w]\nOff2=[u]\nCount=[u]\nRemaining=[u]\nRes=[W]\n",
+ NULL, NULL } },
+
+ { SMBffirst, "SMBffirst", 0,
+ { "Count=[u]\nAttrib=[A]\n",
+ "Path=[Z]\nBlkType=[B]\nBlkLen=[u]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[u]\nSrv2=[w]\n",
+ "Count=[u]\n",
+ "BlkType=[B]\nBlkLen=[u]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[u]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[U]\nName=[s13]\n",
+ NULL } },
+
+ { SMBfunique, "SMBfunique", 0,
+ { "Count=[u]\nAttrib=[A]\n",
+ "Path=[Z]\nBlkType=[B]\nBlkLen=[u]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[u]\nSrv2=[w]\n",
+ "Count=[u]\n",
+ "BlkType=[B]\nBlkLen=[u]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[u]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[U]\nName=[s13]\n",
+ NULL } },
+
+ { SMBfclose, "SMBfclose", 0,
+ { "Count=[u]\nAttrib=[A]\n",
+ "Path=[Z]\nBlkType=[B]\nBlkLen=[u]\n|Res1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[u]\nSrv2=[w]\n",
+ "Count=[u]\n",
+ "BlkType=[B]\nBlkLen=[u]\n*\nRes1=[B]\nMask=[s11]\nSrv1=[B]\nDirIndex=[u]\nSrv2=[w]\nRes2=[W]\nAttrib=[a]\nTime=[T1]Size=[U]\nName=[s13]\n",
+ NULL } },
+
+ { SMBfindnclose, "SMBfindnclose", 0,
+ { "Handle=[u]\n", NULL, NULL, NULL, NULL } },
+
+ { SMBfindclose, "SMBfindclose", 0,
+ { "Handle=[u]\n", NULL, NULL, NULL, NULL } },
+
+ { SMBsends, "SMBsends", 0,
+ { NULL, "Source=[Z]\nDest=[Z]\n", NULL, NULL, NULL } },
+
+ { SMBsendstrt, "SMBsendstrt", 0,
+ { NULL, "Source=[Z]\nDest=[Z]\n", "GroupID=[u]\n", NULL, NULL } },
+
+ { SMBsendend, "SMBsendend", 0,
+ { "GroupID=[u]\n", NULL, NULL, NULL, NULL } },
+
+ { SMBsendtxt, "SMBsendtxt", 0,
+ { "GroupID=[u]\n", NULL, NULL, NULL, NULL } },
+
+ { SMBsendb, "SMBsendb", 0,
+ { NULL, "Source=[Z]\nDest=[Z]\n", NULL, NULL, NULL } },
+
+ { SMBfwdname, "SMBfwdname", 0, DEFDESCRIPT },
+ { SMBcancelf, "SMBcancelf", 0, DEFDESCRIPT },
+ { SMBgetmac, "SMBgetmac", 0, DEFDESCRIPT },
+
+ { SMBnegprot, "SMBnegprot", 0,
+ { NULL, NULL, NULL, NULL, print_negprot } },
+
+ { SMBsesssetupX, "SMBsesssetupX", FLG_CHAIN,
+ { NULL, NULL, NULL, NULL, print_sesssetup } },
+
+ { SMBtconX, "SMBtconX", FLG_CHAIN,
+ { "Com2=[w]\nOff2=[u]\nFlags=[w]\nPassLen=[u]\nPasswd&Path&Device=\n",
+ NULL, "Com2=[w]\nOff2=[u]\n", "ServiceType=[R]\n", NULL } },
+
+ { SMBlockingX, "SMBlockingX", FLG_CHAIN,
+ { NULL, NULL, NULL, NULL, print_lockingandx } },
+
+ { SMBtrans2, "SMBtrans2", 0, { NULL, NULL, NULL, NULL, print_trans2 } },
+
+ { SMBtranss2, "SMBtranss2", 0, DEFDESCRIPT },
+ { SMBctemp, "SMBctemp", 0, DEFDESCRIPT },
+ { SMBreadBs, "SMBreadBs", 0, DEFDESCRIPT },
+ { SMBtrans, "SMBtrans", 0, { NULL, NULL, NULL, NULL, print_trans } },
+
+ { SMBnttrans, "SMBnttrans", 0, DEFDESCRIPT },
+ { SMBnttranss, "SMBnttranss", 0, DEFDESCRIPT },
+
+ { SMBntcreateX, "SMBntcreateX", FLG_CHAIN,
+ { "Com2=[w]\nOff2=[u]\nRes=[b]\nNameLen=[lu]\nFlags=[W]\nRootDirectoryFid=[U]\nAccessMask=[W]\nAllocationSize=[L]\nExtFileAttributes=[W]\nShareAccess=[W]\nCreateDisposition=[W]\nCreateOptions=[W]\nImpersonationLevel=[W]\nSecurityFlags=[b]\n",
+ "Path=[C]\n",
+ "Com2=[w]\nOff2=[u]\nOplockLevel=[b]\nFid=[u]\nCreateAction=[W]\nCreateTime=[T3]LastAccessTime=[T3]LastWriteTime=[T3]ChangeTime=[T3]ExtFileAttributes=[W]\nAllocationSize=[L]\nEndOfFile=[L]\nFileType=[w]\nDeviceState=[w]\nDirectory=[b]\n",
+ NULL, NULL } },
+
+ { SMBntcancel, "SMBntcancel", 0, DEFDESCRIPT },
+
+ { -1, NULL, 0, DEFDESCRIPT }
+};
+
+
+/*
+ * print a SMB message
+ */
+static void
+print_smb(netdissect_options *ndo,
+ const u_char *buf, const u_char *maxbuf)
+{
+ uint16_t flags2;
+ u_int nterrcodes;
+ u_int command;
+ uint32_t nterror;
+ const u_char *words, *maxwords, *data;
+ const struct smbfns *fn;
+ const char *fmt_smbheader =
+ "[P4]SMB Command = [B]\nError class = [BP1]\nError code = [u]\nFlags1 = [B]\nFlags2 = [B][P13]\nTree ID = [u]\nProc ID = [u]\nUID = [u]\nMID = [u]\nWord Count = [b]\n";
+ u_int smboffset;
+
+ ndo->ndo_protocol = "smb";
+
+ request = (GET_U_1(buf + 9) & 0x80) ? 0 : 1;
+ startbuf = buf;
+
+ command = GET_U_1(buf + 4);
+
+ fn = smbfind(command, smb_fns);
+
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("\n");
+
+ ND_PRINT("SMB PACKET: %s (%s)", fn->name, request ? "REQUEST" : "REPLY");
+
+ if (ndo->ndo_vflag < 2)
+ return;
+
+ ND_PRINT("\n");
+ flags2 = GET_LE_U_2(buf + 10);
+ unicodestr = flags2 & 0x8000;
+ nterrcodes = flags2 & 0x4000;
+
+ /* print out the header */
+ smb_fdata(ndo, buf, fmt_smbheader, buf + 33, unicodestr);
+
+ if (nterrcodes) {
+ nterror = GET_LE_U_4(buf + 5);
+ if (nterror)
+ ND_PRINT("NTError = %s\n", nt_errstr(nterror));
+ } else {
+ if (GET_U_1(buf + 5))
+ ND_PRINT("SMBError = %s\n", smb_errstr(GET_U_1(buf + 5),
+ GET_LE_U_2(buf + 7)));
+ }
+
+ smboffset = 32;
+
+ for (;;) {
+ const char *f1, *f2;
+ int wct;
+ u_int bcc;
+ u_int newsmboffset;
+
+ words = buf + smboffset;
+ wct = GET_U_1(words);
+ data = words + 1 + wct * 2;
+ maxwords = ND_MIN(data, maxbuf);
+
+ if (request) {
+ f1 = fn->descript.req_f1;
+ f2 = fn->descript.req_f2;
+ } else {
+ f1 = fn->descript.rep_f1;
+ f2 = fn->descript.rep_f2;
+ }
+
+ smb_reset();
+ if (fn->descript.fn)
+ (*fn->descript.fn)(ndo, words, data, buf, maxbuf);
+ else {
+ if (wct) {
+ if (f1)
+ smb_fdata(ndo, words + 1, f1, words + 1 + wct * 2, unicodestr);
+ else {
+ u_int i;
+ u_int v;
+
+ for (i = 0; words + 1 + 2 * i < maxwords; i++) {
+ v = GET_LE_U_2(words + 1 + 2 * i);
+ ND_PRINT("smb_vwv[%u]=%u (0x%X)\n", i, v, v);
+ }
+ }
+ }
+
+ bcc = GET_LE_U_2(data);
+ ND_PRINT("smb_bcc=%u\n", bcc);
+ if (f2) {
+ if (bcc > 0)
+ smb_fdata(ndo, data + 2, f2, data + 2 + bcc, unicodestr);
+ } else {
+ if (bcc > 0) {
+ ND_PRINT("smb_buf[]=\n");
+ smb_data_print(ndo, data + 2, ND_MIN(bcc, ND_BYTES_BETWEEN(maxbuf, data + 2)));
+ }
+ }
+ }
+
+ if ((fn->flags & FLG_CHAIN) == 0)
+ break;
+ if (wct == 0)
+ break;
+ command = GET_U_1(words + 1);
+ if (command == 0xFF)
+ break;
+ newsmboffset = GET_LE_U_2(words + 3);
+
+ fn = smbfind(command, smb_fns);
+
+ ND_PRINT("\nSMB PACKET: %s (%s) (CHAINED)\n",
+ fn->name, request ? "REQUEST" : "REPLY");
+ if (newsmboffset <= smboffset) {
+ ND_PRINT("Bad andX offset: %u <= %u\n", newsmboffset, smboffset);
+ break;
+ }
+ smboffset = newsmboffset;
+ }
+}
+
+
+/*
+ * print a NBT packet received across tcp on port 139
+ */
+void
+nbt_tcp_print(netdissect_options *ndo,
+ const u_char *data, u_int length)
+{
+ u_int caplen;
+ u_int type;
+ u_int nbt_len;
+ const u_char *maxbuf;
+
+ ndo->ndo_protocol = "nbt_tcp";
+ if (length < 4)
+ goto trunc;
+ if (ndo->ndo_snapend < data)
+ goto trunc;
+ caplen = ND_BYTES_AVAILABLE_AFTER(data);
+ if (caplen < 4)
+ goto trunc;
+ maxbuf = data + caplen;
+ type = GET_U_1(data);
+ nbt_len = GET_BE_U_2(data + 2);
+ length -= 4;
+ caplen -= 4;
+
+ startbuf = data;
+
+ if (ndo->ndo_vflag < 2) {
+ ND_PRINT(" NBT Session Packet: ");
+ switch (type) {
+ case 0x00:
+ ND_PRINT("Session Message");
+ break;
+
+ case 0x81:
+ ND_PRINT("Session Request");
+ break;
+
+ case 0x82:
+ ND_PRINT("Session Granted");
+ break;
+
+ case 0x83:
+ {
+ u_int ecode;
+
+ if (nbt_len < 4)
+ goto trunc;
+ if (length < 4)
+ goto trunc;
+ if (caplen < 4)
+ goto trunc;
+ ecode = GET_U_1(data + 4);
+
+ ND_PRINT("Session Reject, ");
+ switch (ecode) {
+ case 0x80:
+ ND_PRINT("Not listening on called name");
+ break;
+ case 0x81:
+ ND_PRINT("Not listening for calling name");
+ break;
+ case 0x82:
+ ND_PRINT("Called name not present");
+ break;
+ case 0x83:
+ ND_PRINT("Called name present, but insufficient resources");
+ break;
+ default:
+ ND_PRINT("Unspecified error 0x%X", ecode);
+ break;
+ }
+ }
+ break;
+
+ case 0x85:
+ ND_PRINT("Session Keepalive");
+ break;
+
+ default:
+ data = smb_fdata(ndo, data, "Unknown packet type [rB]", maxbuf, 0);
+ break;
+ }
+ } else {
+ ND_PRINT("\n>>> NBT Session Packet\n");
+ switch (type) {
+ case 0x00:
+ data = smb_fdata(ndo, data, "[P1]NBT Session Message\nFlags=[B]\nLength=[ru]\n",
+ data + 4, 0);
+ if (data == NULL)
+ break;
+ if (nbt_len >= 4 && caplen >= 4 && memcmp(data,"\377SMB",4) == 0) {
+ if (nbt_len > caplen) {
+ if (nbt_len > length)
+ ND_PRINT("WARNING: Packet is continued in later TCP segments\n");
+ else
+ ND_PRINT("WARNING: Short packet. Try increasing the snap length by %u\n",
+ nbt_len - caplen);
+ }
+ print_smb(ndo, data, maxbuf > data + nbt_len ? data + nbt_len : maxbuf);
+ } else
+ ND_PRINT("Session packet:(raw data or continuation?)\n");
+ break;
+
+ case 0x81:
+ data = smb_fdata(ndo, data,
+ "[P1]NBT Session Request\nFlags=[B]\nLength=[ru]\nDestination=[n1]\nSource=[n1]\n",
+ maxbuf, 0);
+ break;
+
+ case 0x82:
+ data = smb_fdata(ndo, data, "[P1]NBT Session Granted\nFlags=[B]\nLength=[ru]\n", maxbuf, 0);
+ break;
+
+ case 0x83:
+ {
+ const u_char *origdata;
+ u_int ecode;
+
+ origdata = data;
+ data = smb_fdata(ndo, data, "[P1]NBT SessionReject\nFlags=[B]\nLength=[ru]\nReason=[B]\n",
+ maxbuf, 0);
+ if (data == NULL)
+ break;
+ if (nbt_len >= 1 && caplen >= 1) {
+ ecode = GET_U_1(origdata + 4);
+ switch (ecode) {
+ case 0x80:
+ ND_PRINT("Not listening on called name\n");
+ break;
+ case 0x81:
+ ND_PRINT("Not listening for calling name\n");
+ break;
+ case 0x82:
+ ND_PRINT("Called name not present\n");
+ break;
+ case 0x83:
+ ND_PRINT("Called name present, but insufficient resources\n");
+ break;
+ default:
+ ND_PRINT("Unspecified error 0x%X\n", ecode);
+ break;
+ }
+ }
+ }
+ break;
+
+ case 0x85:
+ data = smb_fdata(ndo, data, "[P1]NBT Session Keepalive\nFlags=[B]\nLength=[ru]\n", maxbuf, 0);
+ break;
+
+ default:
+ data = smb_fdata(ndo, data, "NBT - Unknown packet type\nType=[B]\n", maxbuf, 0);
+ break;
+ }
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+static const struct tok opcode_str[] = {
+ { 0, "QUERY" },
+ { 5, "REGISTRATION" },
+ { 6, "RELEASE" },
+ { 7, "WACK" },
+ { 8, "REFRESH(8)" },
+ { 9, "REFRESH" },
+ { 15, "MULTIHOMED REGISTRATION" },
+ { 0, NULL }
+};
+
+/*
+ * print a NBT packet received across udp on port 137
+ */
+void
+nbt_udp137_print(netdissect_options *ndo,
+ const u_char *data, u_int length)
+{
+ const u_char *maxbuf = data + length;
+ u_int name_trn_id, response, opcode, nm_flags, rcode;
+ u_int qdcount, ancount, nscount, arcount;
+ const u_char *p;
+ u_int total, i;
+
+ ndo->ndo_protocol = "nbt_udp137";
+ name_trn_id = GET_BE_U_2(data);
+ response = (GET_U_1(data + 2) >> 7);
+ opcode = (GET_U_1(data + 2) >> 3) & 0xF;
+ nm_flags = ((GET_U_1(data + 2) & 0x7) << 4) + (GET_U_1(data + 3) >> 4);
+ rcode = GET_U_1(data + 3) & 0xF;
+ qdcount = GET_BE_U_2(data + 4);
+ ancount = GET_BE_U_2(data + 6);
+ nscount = GET_BE_U_2(data + 8);
+ arcount = GET_BE_U_2(data + 10);
+ startbuf = data;
+
+ if (maxbuf <= data)
+ return;
+
+ if (ndo->ndo_vflag > 1)
+ ND_PRINT("\n>>> ");
+
+ ND_PRINT("NBT UDP PACKET(137): %s", tok2str(opcode_str, "OPUNKNOWN", opcode));
+ if (response) {
+ ND_PRINT("; %s", rcode ? "NEGATIVE" : "POSITIVE");
+ }
+ ND_PRINT("; %s; %s", response ? "RESPONSE" : "REQUEST",
+ (nm_flags & 1) ? "BROADCAST" : "UNICAST");
+
+ if (ndo->ndo_vflag < 2)
+ return;
+
+ ND_PRINT("\nTrnID=0x%X\nOpCode=%u\nNmFlags=0x%X\nRcode=%u\nQueryCount=%u\nAnswerCount=%u\nAuthorityCount=%u\nAddressRecCount=%u\n",
+ name_trn_id, opcode, nm_flags, rcode, qdcount, ancount, nscount,
+ arcount);
+
+ p = data + 12;
+
+ total = ancount + nscount + arcount;
+
+ if (qdcount > 100 || total > 100) {
+ ND_PRINT("Corrupt packet??\n");
+ return;
+ }
+
+ if (qdcount) {
+ ND_PRINT("QuestionRecords:\n");
+ for (i = 0; i < qdcount; i++) {
+ p = smb_fdata(ndo, p,
+ "|Name=[n1]\nQuestionType=[rw]\nQuestionClass=[rw]\n#",
+ maxbuf, 0);
+ if (p == NULL)
+ goto out;
+ }
+ }
+
+ if (total) {
+ ND_PRINT("\nResourceRecords:\n");
+ for (i = 0; i < total; i++) {
+ u_int rdlen;
+ u_int restype;
+
+ p = smb_fdata(ndo, p, "Name=[n1]\n#", maxbuf, 0);
+ if (p == NULL)
+ goto out;
+ restype = GET_BE_U_2(p);
+ p = smb_fdata(ndo, p, "ResType=[rw]\nResClass=[rw]\nTTL=[rU]\n", p + 8, 0);
+ if (p == NULL)
+ goto out;
+ rdlen = GET_BE_U_2(p);
+ ND_PRINT("ResourceLength=%u\nResourceData=\n", rdlen);
+ p += 2;
+ if (rdlen == 6) {
+ p = smb_fdata(ndo, p, "AddrType=[rw]\nAddress=[b.b.b.b]\n", p + rdlen, 0);
+ if (p == NULL)
+ goto out;
+ } else {
+ if (restype == 0x21) {
+ u_int numnames;
+
+ numnames = GET_U_1(p);
+ p = smb_fdata(ndo, p, "NumNames=[B]\n", p + 1, 0);
+ if (p == NULL)
+ goto out;
+ while (numnames) {
+ p = smb_fdata(ndo, p, "Name=[n2]\t#", maxbuf, 0);
+ if (p == NULL)
+ goto out;
+ ND_TCHECK_1(p);
+ if (p >= maxbuf)
+ goto out;
+ if (GET_U_1(p) & 0x80)
+ ND_PRINT("<GROUP> ");
+ switch (GET_U_1(p) & 0x60) {
+ case 0x00: ND_PRINT("B "); break;
+ case 0x20: ND_PRINT("P "); break;
+ case 0x40: ND_PRINT("M "); break;
+ case 0x60: ND_PRINT("_ "); break;
+ }
+ if (GET_U_1(p) & 0x10)
+ ND_PRINT("<DEREGISTERING> ");
+ if (GET_U_1(p) & 0x08)
+ ND_PRINT("<CONFLICT> ");
+ if (GET_U_1(p) & 0x04)
+ ND_PRINT("<ACTIVE> ");
+ if (GET_U_1(p) & 0x02)
+ ND_PRINT("<PERMANENT> ");
+ ND_PRINT("\n");
+ p += 2;
+ numnames--;
+ }
+ } else {
+ if (p >= maxbuf)
+ goto out;
+ smb_data_print(ndo, p, ND_MIN(rdlen, length - ND_BYTES_BETWEEN(p, data)));
+ p += rdlen;
+ }
+ }
+ }
+ }
+
+ if (p < maxbuf)
+ smb_fdata(ndo, p, "AdditionalData:\n", maxbuf, 0);
+
+out:
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+/*
+ * Print an SMB-over-TCP packet received across tcp on port 445
+ */
+void
+smb_tcp_print(netdissect_options *ndo,
+ const u_char * data, u_int length)
+{
+ u_int caplen;
+ u_int smb_len;
+ const u_char *maxbuf;
+
+ ndo->ndo_protocol = "smb_tcp";
+ if (length < 4)
+ goto trunc;
+ if (ndo->ndo_snapend < data)
+ goto trunc;
+ caplen = ND_BYTES_AVAILABLE_AFTER(data);
+ if (caplen < 4)
+ goto trunc;
+ maxbuf = data + caplen;
+ smb_len = GET_BE_U_3(data + 1);
+ length -= 4;
+ caplen -= 4;
+
+ startbuf = data;
+ data += 4;
+
+ if (smb_len >= 4 && caplen >= 4 && memcmp(data,"\377SMB",4) == 0) {
+ if (smb_len > caplen) {
+ if (smb_len > length)
+ ND_PRINT(" WARNING: Packet is continued in later TCP segments\n");
+ else
+ ND_PRINT(" WARNING: Short packet. Try increasing the snap length by %u\n",
+ smb_len - caplen);
+ } else
+ ND_PRINT(" ");
+ print_smb(ndo, data, maxbuf > data + smb_len ? data + smb_len : maxbuf);
+ } else
+ ND_PRINT(" SMB-over-TCP packet:(raw data or continuation?)\n");
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
+
+/*
+ * print a NBT packet received across udp on port 138
+ */
+void
+nbt_udp138_print(netdissect_options *ndo,
+ const u_char *data, u_int length)
+{
+ const u_char *maxbuf = data + length;
+
+ ndo->ndo_protocol = "nbt_udp138";
+ if (maxbuf > ndo->ndo_snapend)
+ maxbuf = ndo->ndo_snapend;
+ if (maxbuf <= data)
+ return;
+ startbuf = data;
+
+ if (ndo->ndo_vflag < 2) {
+ ND_PRINT("NBT UDP PACKET(138)");
+ return;
+ }
+
+ data = smb_fdata(ndo, data,
+ "\n>>> NBT UDP PACKET(138) Res=[rw] ID=[rw] IP=[b.b.b.b] Port=[ru] Length=[ru] Res2=[rw]\nSourceName=[n1]\nDestName=[n1]\n#",
+ maxbuf, 0);
+
+ if (data != NULL) {
+ /* If there isn't enough data for "\377SMB", don't check for it. */
+ if ((data + 3) >= maxbuf)
+ goto out;
+
+ if (memcmp(data, "\377SMB",4) == 0)
+ print_smb(ndo, data, maxbuf);
+ }
+out:
+ return;
+}
+
+
+/*
+ print netbeui frames
+*/
+static struct nbf_strings {
+ const char *name;
+ const char *nonverbose;
+ const char *verbose;
+} nbf_strings[0x20] = {
+ { "Add Group Name Query", ", [P23]Name to add=[n2]#",
+ "[P5]ResponseCorrelator=[w]\n[P16]Name to add=[n2]\n" },
+ { "Add Name Query", ", [P23]Name to add=[n2]#",
+ "[P5]ResponseCorrelator=[w]\n[P16]Name to add=[n2]\n" },
+ { "Name In Conflict", NULL, NULL },
+ { "Status Query", NULL, NULL },
+ { NULL, NULL, NULL }, /* not used */
+ { NULL, NULL, NULL }, /* not used */
+ { NULL, NULL, NULL }, /* not used */
+ { "Terminate Trace", NULL, NULL },
+ { "Datagram", NULL,
+ "[P7]Destination=[n2]\nSource=[n2]\n" },
+ { "Broadcast Datagram", NULL,
+ "[P7]Destination=[n2]\nSource=[n2]\n" },
+ { "Name Query", ", [P7]Name=[n2]#",
+ "[P1]SessionNumber=[B]\nNameType=[B][P2]\nResponseCorrelator=[w]\nName=[n2]\nName of sender=[n2]\n" },
+ { NULL, NULL, NULL }, /* not used */
+ { NULL, NULL, NULL }, /* not used */
+ { "Add Name Response", ", [P1]GroupName=[w] [P4]Destination=[n2] Source=[n2]#",
+ "AddNameInProcess=[B]\nGroupName=[w]\nTransmitCorrelator=[w][P2]\nDestination=[n2]\nSource=[n2]\n" },
+ { "Name Recognized", NULL,
+ "[P1]Data2=[w]\nTransmitCorrelator=[w]\nResponseCorelator=[w]\nDestination=[n2]\nSource=[n2]\n" },
+ { "Status Response", NULL, NULL },
+ { NULL, NULL, NULL }, /* not used */
+ { NULL, NULL, NULL }, /* not used */
+ { NULL, NULL, NULL }, /* not used */
+ { "Terminate Trace", NULL, NULL },
+ { "Data Ack", NULL,
+ "[P3]TransmitCorrelator=[w][P2]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" },
+ { "Data First/Middle", NULL,
+ "Flags=[{RECEIVE_CONTINUE|NO_ACK||PIGGYBACK_ACK_INCLUDED|}]\nResyncIndicator=[w][P2]\nResponseCorelator=[w]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" },
+ { "Data Only/Last", NULL,
+ "Flags=[{|NO_ACK|PIGGYBACK_ACK_ALLOWED|PIGGYBACK_ACK_INCLUDED|}]\nResyncIndicator=[w][P2]\nResponseCorelator=[w]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" },
+ { "Session Confirm", NULL,
+ "Data1=[B]\nData2=[w]\nTransmitCorrelator=[w]\nResponseCorelator=[w]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" },
+ { "Session End", NULL,
+ "[P1]Data2=[w][P4]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" },
+ { "Session Initialize", NULL,
+ "Data1=[B]\nData2=[w]\nTransmitCorrelator=[w]\nResponseCorelator=[w]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" },
+ { "No Receive", NULL,
+ "Flags=[{|SEND_NO_ACK}]\nDataBytesAccepted=[b][P4]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" },
+ { "Receive Outstanding", NULL,
+ "[P1]DataBytesAccepted=[b][P4]\nRemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" },
+ { "Receive Continue", NULL,
+ "[P2]TransmitCorrelator=[w]\n[P2]RemoteSessionNumber=[B]\nLocalSessionNumber=[B]\n" },
+ { NULL, NULL, NULL }, /* not used */
+ { NULL, NULL, NULL }, /* not used */
+ { "Session Alive", NULL, NULL }
+};
+
+void
+netbeui_print(netdissect_options *ndo,
+ u_short control, const u_char *data, u_int length)
+{
+ const u_char *maxbuf = data + length;
+ u_int len;
+ u_int command;
+ const u_char *data2;
+ int is_truncated = 0;
+
+ ndo->ndo_protocol = "netbeui";
+ if (maxbuf > ndo->ndo_snapend)
+ maxbuf = ndo->ndo_snapend;
+ len = GET_LE_U_2(data);
+ command = GET_U_1(data + 4);
+ data2 = data + len;
+ if (data2 >= maxbuf) {
+ data2 = maxbuf;
+ is_truncated = 1;
+ }
+
+ startbuf = data;
+
+ if (ndo->ndo_vflag < 2) {
+ ND_PRINT("NBF Packet: ");
+ data = smb_fdata(ndo, data, "[P5]#", maxbuf, 0);
+ } else {
+ ND_PRINT("\n>>> NBF Packet\nType=0x%X ", control);
+ data = smb_fdata(ndo, data, "Length=[u] Signature=[w] Command=[B]\n#", maxbuf, 0);
+ }
+ if (data == NULL)
+ goto out;
+
+ if (command > 0x1f || nbf_strings[command].name == NULL) {
+ if (ndo->ndo_vflag < 2)
+ data = smb_fdata(ndo, data, "Unknown NBF Command#", data2, 0);
+ else
+ data = smb_fdata(ndo, data, "Unknown NBF Command\n", data2, 0);
+ } else {
+ if (ndo->ndo_vflag < 2) {
+ ND_PRINT("%s", nbf_strings[command].name);
+ if (nbf_strings[command].nonverbose != NULL)
+ data = smb_fdata(ndo, data, nbf_strings[command].nonverbose, data2, 0);
+ } else {
+ ND_PRINT("%s:\n", nbf_strings[command].name);
+ if (nbf_strings[command].verbose != NULL)
+ data = smb_fdata(ndo, data, nbf_strings[command].verbose, data2, 0);
+ else
+ ND_PRINT("\n");
+ }
+ }
+
+ if (ndo->ndo_vflag < 2)
+ return;
+
+ if (data == NULL)
+ goto out;
+
+ if (is_truncated) {
+ /* data2 was past the end of the buffer */
+ goto out;
+ }
+
+ /* If this isn't a command that would contain an SMB message, quit. */
+ if (command != 0x08 && command != 0x09 && command != 0x15 &&
+ command != 0x16)
+ goto out;
+
+ /* If there isn't enough data for "\377SMB", don't look for it. */
+ if ((data2 + 3) >= maxbuf)
+ goto out;
+
+ if (memcmp(data2, "\377SMB",4) == 0)
+ print_smb(ndo, data2, maxbuf);
+ else {
+ u_int i;
+ for (i = 0; i < 128; i++) {
+ if ((data2 + i + 3) >= maxbuf)
+ break;
+ if (memcmp(data2 + i, "\377SMB", 4) == 0) {
+ ND_PRINT("found SMB packet at %u\n", i);
+ print_smb(ndo, data2 + i, maxbuf);
+ break;
+ }
+ }
+ }
+
+out:
+ return;
+}
+
+
+/*
+ * print IPX-Netbios frames
+ */
+void
+ipx_netbios_print(netdissect_options *ndo,
+ const u_char *data, u_int length)
+{
+ /*
+ * this is a hack till I work out how to parse the rest of the
+ * NetBIOS-over-IPX stuff
+ */
+ u_int i;
+ const u_char *maxbuf;
+
+ ndo->ndo_protocol = "ipx_netbios";
+ maxbuf = data + length;
+ /* Don't go past the end of the captured data in the packet. */
+ if (maxbuf > ndo->ndo_snapend)
+ maxbuf = ndo->ndo_snapend;
+ startbuf = data;
+ for (i = 0; i < 128; i++) {
+ if ((data + i + 4) > maxbuf)
+ break;
+ if (memcmp(data + i, "\377SMB", 4) == 0) {
+ smb_fdata(ndo, data, "\n>>> IPX transport ", data + i, 0);
+ print_smb(ndo, data + i, maxbuf);
+ break;
+ }
+ }
+ if (i == 128)
+ smb_fdata(ndo, data, "\n>>> Unknown IPX ", maxbuf, 0);
+}
diff --git a/print-smtp.c b/print-smtp.c
new file mode 100644
index 0000000..4acf87c
--- /dev/null
+++ b/print-smtp.c
@@ -0,0 +1,29 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Simple Mail Transfer Protocol (SMTP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+
+void
+smtp_print(netdissect_options *ndo, const u_char *pptr, u_int len)
+{
+ ndo->ndo_protocol = "smtp";
+ txtproto_print(ndo, pptr, len, NULL, 0);
+}
diff --git a/print-snmp.c b/print-snmp.c
new file mode 100644
index 0000000..6aae34c
--- /dev/null
+++ b/print-snmp.c
@@ -0,0 +1,1932 @@
+/*
+ * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997
+ * John Robert LoVerso. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ * This implementation has been influenced by the CMU SNMP release,
+ * by Steve Waldbusser. However, this shares no code with that system.
+ * Additional ASN.1 insight gained from Marshall T. Rose's _The_Open_Book_.
+ * Earlier forms of this implementation were derived and/or inspired by an
+ * awk script originally written by C. Philip Wood of LANL (but later
+ * heavily modified by John Robert LoVerso). The copyright notice for
+ * that work is preserved below, even though it may not rightly apply
+ * to this file.
+ *
+ * Support for SNMPv2c/SNMPv3 and the ability to link the module against
+ * the libsmi was added by J. Schoenwaelder, Copyright (c) 1999.
+ *
+ * This started out as a very simple program, but the incremental decoding
+ * (into the BE structure) complicated things.
+ *
+ # Los Alamos National Laboratory
+ #
+ # Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997
+ # This software was produced under a U.S. Government contract
+ # (W-7405-ENG-36) by Los Alamos National Laboratory, which is
+ # operated by the University of California for the U.S. Department
+ # of Energy. The U.S. Government is licensed to use, reproduce,
+ # and distribute this software. Permission is granted to the
+ # public to copy and use this software without charge, provided
+ # that this Notice and any statement of authorship are reproduced
+ # on all copies. Neither the Government nor the University makes
+ # any warranty, express or implied, or assumes any liability or
+ # responsibility for the use of this software.
+ # @(#)snmp.awk.x 1.1 (LANL) 1/15/90
+ */
+
+/* \summary: Simple Network Management Protocol (SNMP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#ifdef USE_LIBSMI
+#include <smi.h>
+#endif
+
+#include "netdissect-ctype.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+#undef OPAQUE /* defined in <wingdi.h> */
+
+
+/*
+ * Universal ASN.1 types
+ * (we only care about the tag values for those allowed in the Internet SMI)
+ */
+static const char *Universal[] = {
+ "U-0",
+ "Boolean",
+ "Integer",
+#define INTEGER 2
+ "Bitstring",
+ "String",
+#define STRING 4
+ "Null",
+#define ASN_NULL 5
+ "ObjID",
+#define OBJECTID 6
+ "ObjectDes",
+ "U-8","U-9","U-10","U-11", /* 8-11 */
+ "U-12","U-13","U-14","U-15", /* 12-15 */
+ "Sequence",
+#define SEQUENCE 16
+ "Set"
+};
+
+/*
+ * Application-wide ASN.1 types from the Internet SMI and their tags
+ */
+static const char *Application[] = {
+ "IpAddress",
+#define IPADDR 0
+ "Counter",
+#define COUNTER 1
+ "Gauge",
+#define GAUGE 2
+ "TimeTicks",
+#define TIMETICKS 3
+ "Opaque",
+#define OPAQUE 4
+ "C-5",
+ "Counter64"
+#define COUNTER64 6
+};
+
+/*
+ * Context-specific ASN.1 types for the SNMP PDUs and their tags
+ */
+static const char *Context[] = {
+ "GetRequest",
+#define GETREQ 0
+ "GetNextRequest",
+#define GETNEXTREQ 1
+ "GetResponse",
+#define GETRESP 2
+ "SetRequest",
+#define SETREQ 3
+ "Trap",
+#define TRAP 4
+ "GetBulk",
+#define GETBULKREQ 5
+ "Inform",
+#define INFORMREQ 6
+ "V2Trap",
+#define V2TRAP 7
+ "Report"
+#define REPORT 8
+};
+
+#define NOTIFY_CLASS(x) (x == TRAP || x == V2TRAP || x == INFORMREQ)
+#define READ_CLASS(x) (x == GETREQ || x == GETNEXTREQ || x == GETBULKREQ)
+#define WRITE_CLASS(x) (x == SETREQ)
+#define RESPONSE_CLASS(x) (x == GETRESP)
+#define INTERNAL_CLASS(x) (x == REPORT)
+
+/*
+ * Context-specific ASN.1 types for the SNMP Exceptions and their tags
+ */
+static const char *Exceptions[] = {
+ "noSuchObject",
+#define NOSUCHOBJECT 0
+ "noSuchInstance",
+#define NOSUCHINSTANCE 1
+ "endOfMibView",
+#define ENDOFMIBVIEW 2
+};
+
+/*
+ * Private ASN.1 types
+ * The Internet SMI does not specify any
+ */
+static const char *Private[] = {
+ "P-0"
+};
+
+/*
+ * error-status values for any SNMP PDU
+ */
+static const char *ErrorStatus[] = {
+ "noError",
+ "tooBig",
+ "noSuchName",
+ "badValue",
+ "readOnly",
+ "genErr",
+ "noAccess",
+ "wrongType",
+ "wrongLength",
+ "wrongEncoding",
+ "wrongValue",
+ "noCreation",
+ "inconsistentValue",
+ "resourceUnavailable",
+ "commitFailed",
+ "undoFailed",
+ "authorizationError",
+ "notWritable",
+ "inconsistentName"
+};
+#define DECODE_ErrorStatus(e) \
+ ( e >= 0 && (size_t)e < sizeof(ErrorStatus)/sizeof(ErrorStatus[0]) \
+ ? ErrorStatus[e] \
+ : (snprintf(errbuf, sizeof(errbuf), "err=%u", e), errbuf))
+
+/*
+ * generic-trap values in the SNMP Trap-PDU
+ */
+static const char *GenericTrap[] = {
+ "coldStart",
+ "warmStart",
+ "linkDown",
+ "linkUp",
+ "authenticationFailure",
+ "egpNeighborLoss",
+ "enterpriseSpecific"
+#define GT_ENTERPRISE 6
+};
+#define DECODE_GenericTrap(t) \
+ ( t >= 0 && (size_t)t < sizeof(GenericTrap)/sizeof(GenericTrap[0]) \
+ ? GenericTrap[t] \
+ : (snprintf(buf, sizeof(buf), "gt=%d", t), buf))
+
+/*
+ * ASN.1 type class table
+ * Ties together the preceding Universal, Application, Context, and Private
+ * type definitions.
+ */
+#define defineCLASS(x) { "x", x, sizeof(x)/sizeof(x[0]) } /* not ANSI-C */
+static const struct {
+ const char *name;
+ const char **Id;
+ int numIDs;
+ } Class[] = {
+ defineCLASS(Universal),
+#define UNIVERSAL 0
+ defineCLASS(Application),
+#define APPLICATION 1
+ defineCLASS(Context),
+#define CONTEXT 2
+ defineCLASS(Private),
+#define PRIVATE 3
+ defineCLASS(Exceptions),
+#define EXCEPTIONS 4
+};
+
+/*
+ * defined forms for ASN.1 types
+ */
+static const char *Form[] = {
+ "Primitive",
+#define PRIMITIVE 0
+ "Constructed",
+#define CONSTRUCTED 1
+};
+
+/*
+ * A structure for the OID tree for the compiled-in MIB.
+ * This is stored as a general-order tree.
+ */
+static struct obj {
+ const char *desc; /* name of object */
+ u_char oid; /* sub-id following parent */
+ u_char type; /* object type (unused) */
+ struct obj *child, *next; /* child and next sibling pointers */
+} *objp = NULL;
+
+/*
+ * Include the compiled in SNMP MIB. "mib.h" is produced by feeding
+ * RFC-1156 format files into "makemib". "mib.h" MUST define at least
+ * a value for `mibroot'.
+ *
+ * In particular, this is gross, as this is including initialized structures,
+ * and by right shouldn't be an "include" file.
+ */
+#include "mib.h"
+
+/*
+ * This defines a list of OIDs which will be abbreviated on output.
+ * Currently, this includes the prefixes for the Internet MIB, the
+ * private enterprises tree, and the experimental tree.
+ */
+#define OID_FIRST_OCTET(x, y) (((x)*40) + (y)) /* X.690 8.19.4 */
+
+#ifndef NO_ABREV_MIB
+static const uint8_t mib_oid[] = { OID_FIRST_OCTET(1, 3), 6, 1, 2, 1 };
+#endif
+#ifndef NO_ABREV_ENTER
+static const uint8_t enterprises_oid[] = { OID_FIRST_OCTET(1, 3), 6, 1, 4, 1 };
+#endif
+#ifndef NO_ABREV_EXPERI
+static const uint8_t experimental_oid[] = { OID_FIRST_OCTET(1, 3), 6, 1, 3 };
+#endif
+#ifndef NO_ABBREV_SNMPMODS
+static const uint8_t snmpModules_oid[] = { OID_FIRST_OCTET(1, 3), 6, 1, 6, 3 };
+#endif
+
+#define OBJ_ABBREV_ENTRY(prefix, obj) \
+ { prefix, &_ ## obj ## _obj, obj ## _oid, sizeof (obj ## _oid) }
+static const struct obj_abrev {
+ const char *prefix; /* prefix for this abrev */
+ struct obj *node; /* pointer into object table */
+ const uint8_t *oid; /* ASN.1 encoded OID */
+ size_t oid_len; /* length of OID */
+} obj_abrev_list[] = {
+#ifndef NO_ABREV_MIB
+ /* .iso.org.dod.internet.mgmt.mib */
+ OBJ_ABBREV_ENTRY("", mib),
+#endif
+#ifndef NO_ABREV_ENTER
+ /* .iso.org.dod.internet.private.enterprises */
+ OBJ_ABBREV_ENTRY("E:", enterprises),
+#endif
+#ifndef NO_ABREV_EXPERI
+ /* .iso.org.dod.internet.experimental */
+ OBJ_ABBREV_ENTRY("X:", experimental),
+#endif
+#ifndef NO_ABBREV_SNMPMODS
+ /* .iso.org.dod.internet.snmpV2.snmpModules */
+ OBJ_ABBREV_ENTRY("S:", snmpModules),
+#endif
+ { 0,0,0,0 }
+};
+
+/*
+ * This is used in the OID print routine to walk down the object tree
+ * rooted at `mibroot'.
+ */
+#define OBJ_PRINT(o, suppressdot) \
+{ \
+ if (objp) { \
+ do { \
+ if ((o) == objp->oid) \
+ break; \
+ } while ((objp = objp->next) != NULL); \
+ } \
+ if (objp) { \
+ ND_PRINT(suppressdot?"%s":".%s", objp->desc); \
+ objp = objp->child; \
+ } else \
+ ND_PRINT(suppressdot?"%u":".%u", (o)); \
+}
+
+/*
+ * This is the definition for the Any-Data-Type storage used purely for
+ * temporary internal representation while decoding an ASN.1 data stream.
+ */
+struct be {
+ uint32_t asnlen;
+ union {
+ const uint8_t *raw;
+ int32_t integer;
+ uint32_t uns;
+ const u_char *str;
+ uint64_t uns64;
+ } data;
+ u_short id;
+ u_char form, class; /* tag info */
+ u_char type;
+#define BE_ANY 255
+#define BE_NONE 0
+#define BE_NULL 1
+#define BE_OCTET 2
+#define BE_OID 3
+#define BE_INT 4
+#define BE_UNS 5
+#define BE_STR 6
+#define BE_SEQ 7
+#define BE_INETADDR 8
+#define BE_PDU 9
+#define BE_UNS64 10
+#define BE_NOSUCHOBJECT 128
+#define BE_NOSUCHINST 129
+#define BE_ENDOFMIBVIEW 130
+};
+
+/*
+ * SNMP versions recognized by this module
+ */
+static const char *SnmpVersion[] = {
+ "SNMPv1",
+#define SNMP_VERSION_1 0
+ "SNMPv2c",
+#define SNMP_VERSION_2 1
+ "SNMPv2u",
+#define SNMP_VERSION_2U 2
+ "SNMPv3"
+#define SNMP_VERSION_3 3
+};
+
+/*
+ * Defaults for SNMP PDU components
+ */
+#define DEF_COMMUNITY "public"
+
+/*
+ * constants for ASN.1 decoding
+ */
+#define OIDMUX 40
+#define ASNLEN_INETADDR 4
+#define ASN_SHIFT7 7
+#define ASN_SHIFT8 8
+#define ASN_BIT8 0x80
+#define ASN_LONGLEN 0x80
+
+#define ASN_ID_BITS 0x1f
+#define ASN_FORM_BITS 0x20
+#define ASN_FORM_SHIFT 5
+#define ASN_CLASS_BITS 0xc0
+#define ASN_CLASS_SHIFT 6
+
+#define ASN_ID_EXT 0x1f /* extension ID in tag field */
+
+/*
+ * This decodes the next ASN.1 object in the stream pointed to by "p"
+ * (and of real-length "len") and stores the intermediate data in the
+ * provided BE object.
+ *
+ * This returns -l if it fails (i.e., the ASN.1 stream is not valid).
+ * O/w, this returns the number of bytes parsed from "p".
+ */
+static int
+asn1_parse(netdissect_options *ndo,
+ const u_char *p, u_int len, struct be *elem)
+{
+ u_char form, class, id;
+ u_int i, hdr;
+
+ elem->asnlen = 0;
+ elem->type = BE_ANY;
+ if (len < 1) {
+ ND_PRINT("[nothing to parse]");
+ return -1;
+ }
+
+ /*
+ * it would be nice to use a bit field, but you can't depend on them.
+ * +---+---+---+---+---+---+---+---+
+ * + class |frm| id |
+ * +---+---+---+---+---+---+---+---+
+ * 7 6 5 4 3 2 1 0
+ */
+ id = GET_U_1(p) & ASN_ID_BITS; /* lower 5 bits, range 00-1f */
+#ifdef notdef
+ form = (GET_U_1(p) & 0xe0) >> 5; /* move upper 3 bits to lower 3 */
+ class = form >> 1; /* bits 7&6 -> bits 1&0, range 0-3 */
+ form &= 0x1; /* bit 5 -> bit 0, range 0-1 */
+#else
+ form = (u_char)(GET_U_1(p) & ASN_FORM_BITS) >> ASN_FORM_SHIFT;
+ class = (u_char)(GET_U_1(p) & ASN_CLASS_BITS) >> ASN_CLASS_SHIFT;
+#endif
+ elem->form = form;
+ elem->class = class;
+ elem->id = id;
+ p++; len--; hdr = 1;
+ /* extended tag field */
+ if (id == ASN_ID_EXT) {
+ /*
+ * The ID follows, as a sequence of octets with the
+ * 8th bit set and the remaining 7 bits being
+ * the next 7 bits of the value, terminated with
+ * an octet with the 8th bit not set.
+ *
+ * First, assemble all the octets with the 8th
+ * bit set. XXX - this doesn't handle a value
+ * that won't fit in 32 bits.
+ */
+ id = 0;
+ while (GET_U_1(p) & ASN_BIT8) {
+ if (len < 1) {
+ ND_PRINT("[Xtagfield?]");
+ return -1;
+ }
+ id = (id << 7) | (GET_U_1(p) & ~ASN_BIT8);
+ len--;
+ hdr++;
+ p++;
+ }
+ if (len < 1) {
+ ND_PRINT("[Xtagfield?]");
+ return -1;
+ }
+ elem->id = id = (id << 7) | GET_U_1(p);
+ --len;
+ ++hdr;
+ ++p;
+ }
+ if (len < 1) {
+ ND_PRINT("[no asnlen]");
+ return -1;
+ }
+ elem->asnlen = GET_U_1(p);
+ p++; len--; hdr++;
+ if (elem->asnlen & ASN_BIT8) {
+ uint32_t noct = elem->asnlen % ASN_BIT8;
+ elem->asnlen = 0;
+ if (len < noct) {
+ ND_PRINT("[asnlen? %d<%d]", len, noct);
+ return -1;
+ }
+ ND_TCHECK_LEN(p, noct);
+ for (; noct != 0; len--, hdr++, noct--) {
+ elem->asnlen = (elem->asnlen << ASN_SHIFT8) | GET_U_1(p);
+ p++;
+ }
+ }
+ if (len < elem->asnlen) {
+ ND_PRINT("[len%d<asnlen%u]", len, elem->asnlen);
+ return -1;
+ }
+ if (form >= sizeof(Form)/sizeof(Form[0])) {
+ ND_PRINT("[form?%d]", form);
+ return -1;
+ }
+ if (class >= sizeof(Class)/sizeof(Class[0])) {
+ ND_PRINT("[class?%c/%d]", *Form[form], class);
+ return -1;
+ }
+ if ((int)id >= Class[class].numIDs) {
+ ND_PRINT("[id?%c/%s/%d]", *Form[form], Class[class].name, id);
+ return -1;
+ }
+ ND_TCHECK_LEN(p, elem->asnlen);
+
+ switch (form) {
+ case PRIMITIVE:
+ switch (class) {
+ case UNIVERSAL:
+ switch (id) {
+ case STRING:
+ elem->type = BE_STR;
+ elem->data.str = p;
+ break;
+
+ case INTEGER: {
+ int32_t data;
+ elem->type = BE_INT;
+ data = 0;
+
+ if (elem->asnlen == 0) {
+ ND_PRINT("[asnlen=0]");
+ return -1;
+ }
+ if (GET_U_1(p) & ASN_BIT8) /* negative */
+ data = -1;
+ for (i = elem->asnlen; i != 0; p++, i--)
+ data = (data << ASN_SHIFT8) | GET_U_1(p);
+ elem->data.integer = data;
+ break;
+ }
+
+ case OBJECTID:
+ elem->type = BE_OID;
+ elem->data.raw = (const uint8_t *)p;
+ break;
+
+ case ASN_NULL:
+ elem->type = BE_NULL;
+ elem->data.raw = NULL;
+ break;
+
+ default:
+ elem->type = BE_OCTET;
+ elem->data.raw = (const uint8_t *)p;
+ ND_PRINT("[P/U/%s]", Class[class].Id[id]);
+ break;
+ }
+ break;
+
+ case APPLICATION:
+ switch (id) {
+ case IPADDR:
+ elem->type = BE_INETADDR;
+ elem->data.raw = (const uint8_t *)p;
+ break;
+
+ case COUNTER:
+ case GAUGE:
+ case TIMETICKS: {
+ uint32_t data;
+ elem->type = BE_UNS;
+ data = 0;
+ for (i = elem->asnlen; i != 0; p++, i--)
+ data = (data << 8) + GET_U_1(p);
+ elem->data.uns = data;
+ break;
+ }
+
+ case COUNTER64: {
+ uint64_t data64;
+ elem->type = BE_UNS64;
+ data64 = 0;
+ for (i = elem->asnlen; i != 0; p++, i--)
+ data64 = (data64 << 8) + GET_U_1(p);
+ elem->data.uns64 = data64;
+ break;
+ }
+
+ default:
+ elem->type = BE_OCTET;
+ elem->data.raw = (const uint8_t *)p;
+ ND_PRINT("[P/A/%s]",
+ Class[class].Id[id]);
+ break;
+ }
+ break;
+
+ case CONTEXT:
+ switch (id) {
+ case NOSUCHOBJECT:
+ elem->type = BE_NOSUCHOBJECT;
+ elem->data.raw = NULL;
+ break;
+
+ case NOSUCHINSTANCE:
+ elem->type = BE_NOSUCHINST;
+ elem->data.raw = NULL;
+ break;
+
+ case ENDOFMIBVIEW:
+ elem->type = BE_ENDOFMIBVIEW;
+ elem->data.raw = NULL;
+ break;
+ }
+ break;
+
+ default:
+ ND_PRINT("[P/%s/%s]", Class[class].name, Class[class].Id[id]);
+ elem->type = BE_OCTET;
+ elem->data.raw = (const uint8_t *)p;
+ break;
+ }
+ break;
+
+ case CONSTRUCTED:
+ switch (class) {
+ case UNIVERSAL:
+ switch (id) {
+ case SEQUENCE:
+ elem->type = BE_SEQ;
+ elem->data.raw = (const uint8_t *)p;
+ break;
+
+ default:
+ elem->type = BE_OCTET;
+ elem->data.raw = (const uint8_t *)p;
+ ND_PRINT("C/U/%s", Class[class].Id[id]);
+ break;
+ }
+ break;
+
+ case CONTEXT:
+ elem->type = BE_PDU;
+ elem->data.raw = (const uint8_t *)p;
+ break;
+
+ default:
+ elem->type = BE_OCTET;
+ elem->data.raw = (const uint8_t *)p;
+ ND_PRINT("C/%s/%s", Class[class].name, Class[class].Id[id]);
+ break;
+ }
+ break;
+ }
+ p += elem->asnlen;
+ len -= elem->asnlen;
+ return elem->asnlen + hdr;
+
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
+
+static int
+asn1_print_octets(netdissect_options *ndo, struct be *elem)
+{
+ const u_char *p = (const u_char *)elem->data.raw;
+ uint32_t asnlen = elem->asnlen;
+ uint32_t i;
+
+ ND_TCHECK_LEN(p, asnlen);
+ for (i = asnlen; i != 0; p++, i--)
+ ND_PRINT("_%.2x", GET_U_1(p));
+ return 0;
+
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
+
+static int
+asn1_print_string(netdissect_options *ndo, struct be *elem)
+{
+ int printable = 1, first = 1;
+ const u_char *p;
+ uint32_t asnlen = elem->asnlen;
+ uint32_t i;
+
+ p = elem->data.str;
+ ND_TCHECK_LEN(p, asnlen);
+ for (i = asnlen; printable && i != 0; p++, i--)
+ printable = ND_ASCII_ISPRINT(GET_U_1(p));
+ p = elem->data.str;
+ if (printable) {
+ ND_PRINT("\"");
+ if (nd_printn(ndo, p, asnlen, ndo->ndo_snapend)) {
+ ND_PRINT("\"");
+ goto trunc;
+ }
+ ND_PRINT("\"");
+ } else {
+ for (i = asnlen; i != 0; p++, i--) {
+ ND_PRINT(first ? "%.2x" : "_%.2x", GET_U_1(p));
+ first = 0;
+ }
+ }
+ return 0;
+
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
+
+/*
+ * Display the ASN.1 object represented by the BE object.
+ * This used to be an integral part of asn1_parse() before the intermediate
+ * BE form was added.
+ */
+static int
+asn1_print(netdissect_options *ndo,
+ struct be *elem)
+{
+ const u_char *p;
+ uint32_t asnlen = elem->asnlen;
+ uint32_t i;
+
+ switch (elem->type) {
+
+ case BE_OCTET:
+ if (asn1_print_octets(ndo, elem) == -1)
+ return -1;
+ break;
+
+ case BE_NULL:
+ break;
+
+ case BE_OID: {
+ int o = 0, first = -1;
+
+ p = (const u_char *)elem->data.raw;
+ i = asnlen;
+ if (!ndo->ndo_nflag && asnlen > 2) {
+ const struct obj_abrev *a = &obj_abrev_list[0];
+ for (; a->node; a++) {
+ if (i < a->oid_len)
+ continue;
+ if (!ND_TTEST_LEN(p, a->oid_len))
+ continue;
+ if (memcmp(a->oid, p, a->oid_len) == 0) {
+ objp = a->node->child;
+ i -= a->oid_len;
+ p += a->oid_len;
+ ND_PRINT("%s", a->prefix);
+ first = 1;
+ break;
+ }
+ }
+ }
+
+ for (; i != 0; p++, i--) {
+ o = (o << ASN_SHIFT7) + (GET_U_1(p) & ~ASN_BIT8);
+ if (GET_U_1(p) & ASN_LONGLEN)
+ continue;
+
+ /*
+ * first subitem encodes two items with
+ * 1st*OIDMUX+2nd
+ * (see X.690:1997 clause 8.19 for the details)
+ */
+ if (first < 0) {
+ int s;
+ if (!ndo->ndo_nflag)
+ objp = mibroot;
+ first = 0;
+ s = o / OIDMUX;
+ if (s > 2) s = 2;
+ OBJ_PRINT(s, first);
+ o -= s * OIDMUX;
+ }
+ OBJ_PRINT(o, first);
+ if (--first < 0)
+ first = 0;
+ o = 0;
+ }
+ break;
+ }
+
+ case BE_INT:
+ ND_PRINT("%d", elem->data.integer);
+ break;
+
+ case BE_UNS:
+ ND_PRINT("%u", elem->data.uns);
+ break;
+
+ case BE_UNS64:
+ ND_PRINT("%" PRIu64, elem->data.uns64);
+ break;
+
+ case BE_STR:
+ if (asn1_print_string(ndo, elem) == -1)
+ return -1;
+ break;
+
+ case BE_SEQ:
+ ND_PRINT("Seq(%u)", elem->asnlen);
+ break;
+
+ case BE_INETADDR:
+ if (asnlen != ASNLEN_INETADDR)
+ ND_PRINT("[inetaddr len!=%d]", ASNLEN_INETADDR);
+ p = (const u_char *)elem->data.raw;
+ ND_TCHECK_LEN(p, asnlen);
+ for (i = asnlen; i != 0; p++, i--) {
+ ND_PRINT((i == asnlen) ? "%u" : ".%u", GET_U_1(p));
+ }
+ break;
+
+ case BE_NOSUCHOBJECT:
+ case BE_NOSUCHINST:
+ case BE_ENDOFMIBVIEW:
+ ND_PRINT("[%s]", Class[EXCEPTIONS].Id[elem->id]);
+ break;
+
+ case BE_PDU:
+ ND_PRINT("%s(%u)", Class[CONTEXT].Id[elem->id], elem->asnlen);
+ break;
+
+ case BE_ANY:
+ ND_PRINT("[BE_ANY!?]");
+ break;
+
+ default:
+ ND_PRINT("[be!?]");
+ break;
+ }
+ return 0;
+
+trunc:
+ nd_print_trunc(ndo);
+ return -1;
+}
+
+#ifdef notdef
+/*
+ * This is a brute force ASN.1 printer: recurses to dump an entire structure.
+ * This will work for any ASN.1 stream, not just an SNMP PDU.
+ *
+ * By adding newlines and spaces at the correct places, this would print in
+ * Rose-Normal-Form.
+ *
+ * This is not currently used.
+ */
+static void
+asn1_decode(u_char *p, u_int length)
+{
+ struct be elem;
+ int i = 0;
+
+ while (i >= 0 && length > 0) {
+ i = asn1_parse(ndo, p, length, &elem);
+ if (i >= 0) {
+ ND_PRINT(" ");
+ if (asn1_print(ndo, &elem) < 0)
+ return;
+ if (elem.type == BE_SEQ || elem.type == BE_PDU) {
+ ND_PRINT(" {");
+ asn1_decode(elem.data.raw, elem.asnlen);
+ ND_PRINT(" }");
+ }
+ length -= i;
+ p += i;
+ }
+ }
+}
+#endif
+
+#ifdef USE_LIBSMI
+
+struct smi2be {
+ SmiBasetype basetype;
+ int be;
+};
+
+static const struct smi2be smi2betab[] = {
+ { SMI_BASETYPE_INTEGER32, BE_INT },
+ { SMI_BASETYPE_OCTETSTRING, BE_STR },
+ { SMI_BASETYPE_OCTETSTRING, BE_INETADDR },
+ { SMI_BASETYPE_OBJECTIDENTIFIER, BE_OID },
+ { SMI_BASETYPE_UNSIGNED32, BE_UNS },
+ { SMI_BASETYPE_INTEGER64, BE_NONE },
+ { SMI_BASETYPE_UNSIGNED64, BE_UNS64 },
+ { SMI_BASETYPE_FLOAT32, BE_NONE },
+ { SMI_BASETYPE_FLOAT64, BE_NONE },
+ { SMI_BASETYPE_FLOAT128, BE_NONE },
+ { SMI_BASETYPE_ENUM, BE_INT },
+ { SMI_BASETYPE_BITS, BE_STR },
+ { SMI_BASETYPE_UNKNOWN, BE_NONE }
+};
+
+static int
+smi_decode_oid(netdissect_options *ndo,
+ struct be *elem, unsigned int *oid,
+ unsigned int oidsize, unsigned int *oidlen)
+{
+ const u_char *p = (const u_char *)elem->data.raw;
+ uint32_t asnlen = elem->asnlen;
+ uint32_t i = asnlen;
+ int o = 0, first = -1;
+ unsigned int firstval;
+
+ for (*oidlen = 0; i != 0; p++, i--) {
+ o = (o << ASN_SHIFT7) + (GET_U_1(p) & ~ASN_BIT8);
+ if (GET_U_1(p) & ASN_LONGLEN)
+ continue;
+
+ /*
+ * first subitem encodes two items with 1st*OIDMUX+2nd
+ * (see X.690:1997 clause 8.19 for the details)
+ */
+ if (first < 0) {
+ first = 0;
+ firstval = o / OIDMUX;
+ if (firstval > 2) firstval = 2;
+ o -= firstval * OIDMUX;
+ if (*oidlen < oidsize) {
+ oid[(*oidlen)++] = firstval;
+ }
+ }
+ if (*oidlen < oidsize) {
+ oid[(*oidlen)++] = o;
+ }
+ o = 0;
+ }
+ return 0;
+}
+
+static int smi_check_type(SmiBasetype basetype, int be)
+{
+ int i;
+
+ for (i = 0; smi2betab[i].basetype != SMI_BASETYPE_UNKNOWN; i++) {
+ if (smi2betab[i].basetype == basetype && smi2betab[i].be == be) {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+static int smi_check_a_range(SmiType *smiType, SmiRange *smiRange,
+ struct be *elem)
+{
+ int ok = 1;
+
+ switch (smiType->basetype) {
+ case SMI_BASETYPE_OBJECTIDENTIFIER:
+ case SMI_BASETYPE_OCTETSTRING:
+ if (smiRange->minValue.value.unsigned32
+ == smiRange->maxValue.value.unsigned32) {
+ ok = (elem->asnlen == smiRange->minValue.value.unsigned32);
+ } else {
+ ok = (elem->asnlen >= smiRange->minValue.value.unsigned32
+ && elem->asnlen <= smiRange->maxValue.value.unsigned32);
+ }
+ break;
+
+ case SMI_BASETYPE_INTEGER32:
+ ok = (elem->data.integer >= smiRange->minValue.value.integer32
+ && elem->data.integer <= smiRange->maxValue.value.integer32);
+ break;
+
+ case SMI_BASETYPE_UNSIGNED32:
+ ok = (elem->data.uns >= smiRange->minValue.value.unsigned32
+ && elem->data.uns <= smiRange->maxValue.value.unsigned32);
+ break;
+
+ case SMI_BASETYPE_UNSIGNED64:
+ /* XXX */
+ break;
+
+ /* case SMI_BASETYPE_INTEGER64: SMIng */
+ /* case SMI_BASETYPE_FLOAT32: SMIng */
+ /* case SMI_BASETYPE_FLOAT64: SMIng */
+ /* case SMI_BASETYPE_FLOAT128: SMIng */
+
+ case SMI_BASETYPE_ENUM:
+ case SMI_BASETYPE_BITS:
+ case SMI_BASETYPE_UNKNOWN:
+ ok = 1;
+ break;
+
+ default:
+ ok = 0;
+ break;
+ }
+
+ return ok;
+}
+
+static int smi_check_range(SmiType *smiType, struct be *elem)
+{
+ SmiRange *smiRange;
+ int ok = 1;
+
+ for (smiRange = smiGetFirstRange(smiType);
+ smiRange;
+ smiRange = smiGetNextRange(smiRange)) {
+
+ ok = smi_check_a_range(smiType, smiRange, elem);
+
+ if (ok) {
+ break;
+ }
+ }
+
+ if (ok) {
+ SmiType *parentType;
+ parentType = smiGetParentType(smiType);
+ if (parentType) {
+ ok = smi_check_range(parentType, elem);
+ }
+ }
+
+ return ok;
+}
+
+static SmiNode *
+smi_print_variable(netdissect_options *ndo,
+ struct be *elem, int *status)
+{
+ unsigned int oid[128], oidlen;
+ SmiNode *smiNode = NULL;
+ unsigned int i;
+
+ if (!nd_smi_module_loaded) {
+ *status = asn1_print(ndo, elem);
+ return NULL;
+ }
+ *status = smi_decode_oid(ndo, elem, oid, sizeof(oid) / sizeof(unsigned int),
+ &oidlen);
+ if (*status < 0)
+ return NULL;
+ smiNode = smiGetNodeByOID(oidlen, oid);
+ if (! smiNode) {
+ *status = asn1_print(ndo, elem);
+ return NULL;
+ }
+ if (ndo->ndo_vflag) {
+ ND_PRINT("%s::", smiGetNodeModule(smiNode)->name);
+ }
+ ND_PRINT("%s", smiNode->name);
+ if (smiNode->oidlen < oidlen) {
+ for (i = smiNode->oidlen; i < oidlen; i++) {
+ ND_PRINT(".%u", oid[i]);
+ }
+ }
+ *status = 0;
+ return smiNode;
+}
+
+static int
+smi_print_value(netdissect_options *ndo,
+ SmiNode *smiNode, u_short pduid, struct be *elem)
+{
+ unsigned int i, oid[128], oidlen;
+ SmiType *smiType;
+ SmiNamedNumber *nn;
+ int done = 0;
+
+ if (! smiNode || ! (smiNode->nodekind
+ & (SMI_NODEKIND_SCALAR | SMI_NODEKIND_COLUMN))) {
+ return asn1_print(ndo, elem);
+ }
+
+ if (elem->type == BE_NOSUCHOBJECT
+ || elem->type == BE_NOSUCHINST
+ || elem->type == BE_ENDOFMIBVIEW) {
+ return asn1_print(ndo, elem);
+ }
+
+ if (NOTIFY_CLASS(pduid) && smiNode->access < SMI_ACCESS_NOTIFY) {
+ ND_PRINT("[notNotifyable]");
+ }
+
+ if (READ_CLASS(pduid) && smiNode->access < SMI_ACCESS_READ_ONLY) {
+ ND_PRINT("[notReadable]");
+ }
+
+ if (WRITE_CLASS(pduid) && smiNode->access < SMI_ACCESS_READ_WRITE) {
+ ND_PRINT("[notWritable]");
+ }
+
+ if (RESPONSE_CLASS(pduid)
+ && smiNode->access == SMI_ACCESS_NOT_ACCESSIBLE) {
+ ND_PRINT("[noAccess]");
+ }
+
+ smiType = smiGetNodeType(smiNode);
+ if (! smiType) {
+ return asn1_print(ndo, elem);
+ }
+
+ if (! smi_check_type(smiType->basetype, elem->type)) {
+ ND_PRINT("[wrongType]");
+ }
+
+ if (! smi_check_range(smiType, elem)) {
+ ND_PRINT("[outOfRange]");
+ }
+
+ /* resolve bits to named bits */
+
+ /* check whether instance identifier is valid */
+
+ /* apply display hints (integer, octetstring) */
+
+ /* convert instance identifier to index type values */
+
+ switch (elem->type) {
+ case BE_OID:
+ if (smiType->basetype == SMI_BASETYPE_BITS) {
+ /* print bit labels */
+ } else {
+ if (nd_smi_module_loaded &&
+ smi_decode_oid(ndo, elem, oid,
+ sizeof(oid)/sizeof(unsigned int),
+ &oidlen) == 0) {
+ smiNode = smiGetNodeByOID(oidlen, oid);
+ if (smiNode) {
+ if (ndo->ndo_vflag) {
+ ND_PRINT("%s::", smiGetNodeModule(smiNode)->name);
+ }
+ ND_PRINT("%s", smiNode->name);
+ if (smiNode->oidlen < oidlen) {
+ for (i = smiNode->oidlen;
+ i < oidlen; i++) {
+ ND_PRINT(".%u", oid[i]);
+ }
+ }
+ done++;
+ }
+ }
+ }
+ break;
+
+ case BE_INT:
+ if (smiType->basetype == SMI_BASETYPE_ENUM) {
+ for (nn = smiGetFirstNamedNumber(smiType);
+ nn;
+ nn = smiGetNextNamedNumber(nn)) {
+ if (nn->value.value.integer32
+ == elem->data.integer) {
+ ND_PRINT("%s", nn->name);
+ ND_PRINT("(%d)", elem->data.integer);
+ done++;
+ break;
+ }
+ }
+ }
+ break;
+ }
+
+ if (! done) {
+ return asn1_print(ndo, elem);
+ }
+ return 0;
+}
+#endif
+
+/*
+ * General SNMP header
+ * SEQUENCE {
+ * version INTEGER {version-1(0)},
+ * community OCTET STRING,
+ * data ANY -- PDUs
+ * }
+ * PDUs for all but Trap: (see rfc1157 from page 15 on)
+ * SEQUENCE {
+ * request-id INTEGER,
+ * error-status INTEGER,
+ * error-index INTEGER,
+ * varbindlist SEQUENCE OF
+ * SEQUENCE {
+ * name ObjectName,
+ * value ObjectValue
+ * }
+ * }
+ * PDU for Trap:
+ * SEQUENCE {
+ * enterprise OBJECT IDENTIFIER,
+ * agent-addr NetworkAddress,
+ * generic-trap INTEGER,
+ * specific-trap INTEGER,
+ * time-stamp TimeTicks,
+ * varbindlist SEQUENCE OF
+ * SEQUENCE {
+ * name ObjectName,
+ * value ObjectValue
+ * }
+ * }
+ */
+
+/*
+ * Decode SNMP varBind
+ */
+static void
+varbind_print(netdissect_options *ndo,
+ u_short pduid, const u_char *np, u_int length)
+{
+ struct be elem;
+ int count = 0;
+#ifdef USE_LIBSMI
+ SmiNode *smiNode = NULL;
+#endif
+ int status;
+
+ /* Sequence of varBind */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_SEQ) {
+ ND_PRINT("[!SEQ of varbind]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ if ((u_int)count < length)
+ ND_PRINT("[%d extra after SEQ of varbind]", length - count);
+ /* descend */
+ length = elem.asnlen;
+ np = (const u_char *)elem.data.raw;
+
+ while (length) {
+ const u_char *vbend;
+ u_int vblength;
+
+ ND_PRINT(" ");
+
+ /* Sequence */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_SEQ) {
+ ND_PRINT("[!varbind]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ vbend = np + count;
+ vblength = length - count;
+ /* descend */
+ length = elem.asnlen;
+ np = (const u_char *)elem.data.raw;
+
+ /* objName (OID) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_OID) {
+ ND_PRINT("[objName!=OID]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+#ifdef USE_LIBSMI
+ smiNode = smi_print_variable(ndo, &elem, &status);
+#else
+ status = asn1_print(ndo, &elem);
+#endif
+ if (status < 0)
+ return;
+ length -= count;
+ np += count;
+
+ if (pduid != GETREQ && pduid != GETNEXTREQ
+ && pduid != GETBULKREQ)
+ ND_PRINT("=");
+
+ /* objVal (ANY) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (pduid == GETREQ || pduid == GETNEXTREQ
+ || pduid == GETBULKREQ) {
+ if (elem.type != BE_NULL) {
+ ND_PRINT("[objVal!=NULL]");
+ if (asn1_print(ndo, &elem) < 0)
+ return;
+ }
+ } else {
+ if (elem.type != BE_NULL) {
+#ifdef USE_LIBSMI
+ status = smi_print_value(ndo, smiNode, pduid, &elem);
+#else
+ status = asn1_print(ndo, &elem);
+#endif
+ }
+ if (status < 0)
+ return;
+ }
+ length = vblength;
+ np = vbend;
+ }
+}
+
+/*
+ * Decode SNMP PDUs: GetRequest, GetNextRequest, GetResponse, SetRequest,
+ * GetBulk, Inform, V2Trap, and Report
+ */
+static void
+snmppdu_print(netdissect_options *ndo,
+ u_short pduid, const u_char *np, u_int length)
+{
+ struct be elem;
+ int count = 0, error_status;
+
+ /* reqId (Integer) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_INT) {
+ ND_PRINT("[reqId!=INT]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ if (ndo->ndo_vflag)
+ ND_PRINT("R=%d ", elem.data.integer);
+ length -= count;
+ np += count;
+
+ /* errorStatus (Integer) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_INT) {
+ ND_PRINT("[errorStatus!=INT]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ error_status = 0;
+ if ((pduid == GETREQ || pduid == GETNEXTREQ || pduid == SETREQ
+ || pduid == INFORMREQ || pduid == V2TRAP || pduid == REPORT)
+ && elem.data.integer != 0) {
+ char errbuf[20];
+ ND_PRINT("[errorStatus(%s)!=0]",
+ DECODE_ErrorStatus(elem.data.integer));
+ } else if (pduid == GETBULKREQ) {
+ ND_PRINT(" N=%d", elem.data.integer);
+ } else if (elem.data.integer != 0) {
+ char errbuf[20];
+ ND_PRINT(" %s", DECODE_ErrorStatus(elem.data.integer));
+ error_status = elem.data.integer;
+ }
+ length -= count;
+ np += count;
+
+ /* errorIndex (Integer) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_INT) {
+ ND_PRINT("[errorIndex!=INT]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ if ((pduid == GETREQ || pduid == GETNEXTREQ || pduid == SETREQ
+ || pduid == INFORMREQ || pduid == V2TRAP || pduid == REPORT)
+ && elem.data.integer != 0)
+ ND_PRINT("[errorIndex(%d)!=0]", elem.data.integer);
+ else if (pduid == GETBULKREQ)
+ ND_PRINT(" M=%d", elem.data.integer);
+ else if (elem.data.integer != 0) {
+ if (!error_status)
+ ND_PRINT("[errorIndex(%d) w/o errorStatus]", elem.data.integer);
+ else
+ ND_PRINT("@%d", elem.data.integer);
+ } else if (error_status) {
+ ND_PRINT("[errorIndex==0]");
+ }
+ length -= count;
+ np += count;
+
+ varbind_print(ndo, pduid, np, length);
+}
+
+/*
+ * Decode SNMP Trap PDU
+ */
+static void
+trappdu_print(netdissect_options *ndo,
+ const u_char *np, u_int length)
+{
+ struct be elem;
+ int count = 0, generic;
+
+ ND_PRINT(" ");
+
+ /* enterprise (oid) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_OID) {
+ ND_PRINT("[enterprise!=OID]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ if (asn1_print(ndo, &elem) < 0)
+ return;
+ length -= count;
+ np += count;
+
+ ND_PRINT(" ");
+
+ /* agent-addr (inetaddr) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_INETADDR) {
+ ND_PRINT("[agent-addr!=INETADDR]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ if (asn1_print(ndo, &elem) < 0)
+ return;
+ length -= count;
+ np += count;
+
+ /* generic-trap (Integer) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_INT) {
+ ND_PRINT("[generic-trap!=INT]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ generic = elem.data.integer;
+ {
+ char buf[20];
+ ND_PRINT(" %s", DECODE_GenericTrap(generic));
+ }
+ length -= count;
+ np += count;
+
+ /* specific-trap (Integer) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_INT) {
+ ND_PRINT("[specific-trap!=INT]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ if (generic != GT_ENTERPRISE) {
+ if (elem.data.integer != 0)
+ ND_PRINT("[specific-trap(%d)!=0]", elem.data.integer);
+ } else
+ ND_PRINT(" s=%d", elem.data.integer);
+ length -= count;
+ np += count;
+
+ ND_PRINT(" ");
+
+ /* time-stamp (TimeTicks) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_UNS) { /* XXX */
+ ND_PRINT("[time-stamp!=TIMETICKS]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ if (asn1_print(ndo, &elem) < 0)
+ return;
+ length -= count;
+ np += count;
+
+ varbind_print(ndo, TRAP, np, length);
+}
+
+/*
+ * Decode arbitrary SNMP PDUs.
+ */
+static void
+pdu_print(netdissect_options *ndo,
+ const u_char *np, u_int length, int version)
+{
+ struct be pdu;
+ int count = 0;
+
+ /* PDU (Context) */
+ if ((count = asn1_parse(ndo, np, length, &pdu)) < 0)
+ return;
+ if (pdu.type != BE_PDU) {
+ ND_PRINT("[no PDU]");
+ return;
+ }
+ if ((u_int)count < length)
+ ND_PRINT("[%d extra after PDU]", length - count);
+ if (ndo->ndo_vflag) {
+ ND_PRINT("{ ");
+ }
+ if (asn1_print(ndo, &pdu) < 0)
+ return;
+ ND_PRINT(" ");
+ /* descend into PDU */
+ length = pdu.asnlen;
+ np = (const u_char *)pdu.data.raw;
+
+ if (version == SNMP_VERSION_1 &&
+ (pdu.id == GETBULKREQ || pdu.id == INFORMREQ ||
+ pdu.id == V2TRAP || pdu.id == REPORT)) {
+ ND_PRINT("[v2 PDU in v1 message]");
+ return;
+ }
+
+ if (version == SNMP_VERSION_2 && pdu.id == TRAP) {
+ ND_PRINT("[v1 PDU in v2 message]");
+ return;
+ }
+
+ switch (pdu.id) {
+ case TRAP:
+ trappdu_print(ndo, np, length);
+ break;
+ case GETREQ:
+ case GETNEXTREQ:
+ case GETRESP:
+ case SETREQ:
+ case GETBULKREQ:
+ case INFORMREQ:
+ case V2TRAP:
+ case REPORT:
+ snmppdu_print(ndo, pdu.id, np, length);
+ break;
+ }
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" } ");
+ }
+}
+
+/*
+ * Decode a scoped SNMP PDU.
+ */
+static void
+scopedpdu_print(netdissect_options *ndo,
+ const u_char *np, u_int length, int version)
+{
+ struct be elem;
+ int count = 0;
+
+ /* Sequence */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_SEQ) {
+ ND_PRINT("[!scoped PDU]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ length = elem.asnlen;
+ np = (const u_char *)elem.data.raw;
+
+ /* contextEngineID (OCTET STRING) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_STR) {
+ ND_PRINT("[contextEngineID!=STR]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ length -= count;
+ np += count;
+
+ ND_PRINT("E=");
+ if (asn1_print_octets(ndo, &elem) == -1)
+ return;
+ ND_PRINT(" ");
+
+ /* contextName (OCTET STRING) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_STR) {
+ ND_PRINT("[contextName!=STR]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ length -= count;
+ np += count;
+
+ ND_PRINT("C=");
+ if (asn1_print_string(ndo, &elem) == -1)
+ return;
+ ND_PRINT(" ");
+
+ pdu_print(ndo, np, length, version);
+}
+
+/*
+ * Decode SNMP Community Header (SNMPv1 and SNMPv2c)
+ */
+static void
+community_print(netdissect_options *ndo,
+ const u_char *np, u_int length, int version)
+{
+ struct be elem;
+ int count = 0;
+
+ /* Community (String) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_STR) {
+ ND_PRINT("[comm!=STR]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ /* default community */
+ if (!(elem.asnlen == sizeof(DEF_COMMUNITY) - 1 &&
+ strncmp((const char *)elem.data.str, DEF_COMMUNITY,
+ sizeof(DEF_COMMUNITY) - 1) == 0)) {
+ /* ! "public" */
+ ND_PRINT("C=");
+ if (asn1_print_string(ndo, &elem) == -1)
+ return;
+ ND_PRINT(" ");
+ }
+ length -= count;
+ np += count;
+
+ pdu_print(ndo, np, length, version);
+}
+
+/*
+ * Decode SNMPv3 User-based Security Message Header (SNMPv3)
+ */
+static void
+usm_print(netdissect_options *ndo,
+ const u_char *np, u_int length)
+{
+ struct be elem;
+ int count = 0;
+
+ /* Sequence */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_SEQ) {
+ ND_PRINT("[!usm]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ length = elem.asnlen;
+ np = (const u_char *)elem.data.raw;
+
+ /* msgAuthoritativeEngineID (OCTET STRING) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_STR) {
+ ND_PRINT("[msgAuthoritativeEngineID!=STR]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ length -= count;
+ np += count;
+
+ /* msgAuthoritativeEngineBoots (INTEGER) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_INT) {
+ ND_PRINT("[msgAuthoritativeEngineBoots!=INT]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ if (ndo->ndo_vflag)
+ ND_PRINT("B=%d ", elem.data.integer);
+ length -= count;
+ np += count;
+
+ /* msgAuthoritativeEngineTime (INTEGER) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_INT) {
+ ND_PRINT("[msgAuthoritativeEngineTime!=INT]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ if (ndo->ndo_vflag)
+ ND_PRINT("T=%d ", elem.data.integer);
+ length -= count;
+ np += count;
+
+ /* msgUserName (OCTET STRING) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_STR) {
+ ND_PRINT("[msgUserName!=STR]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ length -= count;
+ np += count;
+
+ ND_PRINT("U=");
+ if (asn1_print_string(ndo, &elem) == -1)
+ return;
+ ND_PRINT(" ");
+
+ /* msgAuthenticationParameters (OCTET STRING) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_STR) {
+ ND_PRINT("[msgAuthenticationParameters!=STR]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ length -= count;
+ np += count;
+
+ /* msgPrivacyParameters (OCTET STRING) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_STR) {
+ ND_PRINT("[msgPrivacyParameters!=STR]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ length -= count;
+ np += count;
+
+ if ((u_int)count < length)
+ ND_PRINT("[%d extra after usm SEQ]", length - count);
+}
+
+/*
+ * Decode SNMPv3 Message Header (SNMPv3)
+ */
+static void
+v3msg_print(netdissect_options *ndo,
+ const u_char *np, u_int length)
+{
+ struct be elem;
+ int count = 0;
+ u_char flags;
+ int model;
+ const u_char *xnp = np;
+ int xlength = length;
+
+ /* Sequence */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_SEQ) {
+ ND_PRINT("[!message]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ length = elem.asnlen;
+ np = (const u_char *)elem.data.raw;
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT("{ ");
+ }
+
+ /* msgID (INTEGER) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_INT) {
+ ND_PRINT("[msgID!=INT]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ length -= count;
+ np += count;
+
+ /* msgMaxSize (INTEGER) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_INT) {
+ ND_PRINT("[msgMaxSize!=INT]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ length -= count;
+ np += count;
+
+ /* msgFlags (OCTET STRING) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_STR) {
+ ND_PRINT("[msgFlags!=STR]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ if (elem.asnlen != 1) {
+ ND_PRINT("[msgFlags size %d]", elem.asnlen);
+ return;
+ }
+ flags = GET_U_1(elem.data.str);
+ if (flags != 0x00 && flags != 0x01 && flags != 0x03
+ && flags != 0x04 && flags != 0x05 && flags != 0x07) {
+ ND_PRINT("[msgFlags=0x%02X]", flags);
+ return;
+ }
+ length -= count;
+ np += count;
+
+ ND_PRINT("F=%s%s%s ",
+ flags & 0x01 ? "a" : "",
+ flags & 0x02 ? "p" : "",
+ flags & 0x04 ? "r" : "");
+
+ /* msgSecurityModel (INTEGER) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_INT) {
+ ND_PRINT("[msgSecurityModel!=INT]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ model = elem.data.integer;
+ length -= count;
+ np += count;
+
+ if ((u_int)count < length)
+ ND_PRINT("[%d extra after message SEQ]", length - count);
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT("} ");
+ }
+
+ if (model == 3) {
+ if (ndo->ndo_vflag) {
+ ND_PRINT("{ USM ");
+ }
+ } else {
+ ND_PRINT("[security model %d]", model);
+ return;
+ }
+
+ np = xnp + (np - xnp);
+ length = xlength - (np - xnp);
+
+ /* msgSecurityParameters (OCTET STRING) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_STR) {
+ ND_PRINT("[msgSecurityParameters!=STR]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ length -= count;
+ np += count;
+
+ if (model == 3) {
+ usm_print(ndo, elem.data.str, elem.asnlen);
+ if (ndo->ndo_vflag) {
+ ND_PRINT("} ");
+ }
+ }
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT("{ ScopedPDU ");
+ }
+
+ scopedpdu_print(ndo, np, length, 3);
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT("} ");
+ }
+}
+
+/*
+ * Decode SNMP header and pass on to PDU printing routines
+ */
+void
+snmp_print(netdissect_options *ndo,
+ const u_char *np, u_int length)
+{
+ struct be elem;
+ int count = 0;
+ int version = 0;
+
+ ndo->ndo_protocol = "snmp";
+ ND_PRINT(" ");
+
+ /* initial Sequence */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_SEQ) {
+ ND_PRINT("[!init SEQ]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+ if ((u_int)count < length)
+ ND_PRINT("[%d extra after iSEQ]", length - count);
+ /* descend */
+ length = elem.asnlen;
+ np = (const u_char *)elem.data.raw;
+
+ /* Version (INTEGER) */
+ if ((count = asn1_parse(ndo, np, length, &elem)) < 0)
+ return;
+ if (elem.type != BE_INT) {
+ ND_PRINT("[version!=INT]");
+ asn1_print(ndo, &elem);
+ return;
+ }
+
+ switch (elem.data.integer) {
+ case SNMP_VERSION_1:
+ case SNMP_VERSION_2:
+ case SNMP_VERSION_3:
+ if (ndo->ndo_vflag)
+ ND_PRINT("{ %s ", SnmpVersion[elem.data.integer]);
+ break;
+ default:
+ ND_PRINT("SNMP [version = %d]", elem.data.integer);
+ return;
+ }
+ version = elem.data.integer;
+ length -= count;
+ np += count;
+
+ switch (version) {
+ case SNMP_VERSION_1:
+ case SNMP_VERSION_2:
+ community_print(ndo, np, length, version);
+ break;
+ case SNMP_VERSION_3:
+ v3msg_print(ndo, np, length);
+ break;
+ default:
+ ND_PRINT("[version = %d]", elem.data.integer);
+ break;
+ }
+
+ if (ndo->ndo_vflag) {
+ ND_PRINT("} ");
+ }
+}
diff --git a/print-someip.c b/print-someip.c
new file mode 100644
index 0000000..210e413
--- /dev/null
+++ b/print-someip.c
@@ -0,0 +1,142 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Francesco Fondelli (francesco dot fondelli, gmail dot com)
+ */
+
+/* \summary: Autosar SOME/IP Protocol printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include "netdissect.h"
+#include "extract.h"
+#include "udp.h"
+
+/*
+ * SOMEIP Header (R19-11)
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Message ID (Service ID/Method ID) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Length |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Request ID (Client ID/Session ID) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Protocol Ver | Interface Ver | Message Type | Return Code |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Payload |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+static const struct tok message_type_values[] = {
+ { 0x00, "REQUEST" },
+ { 0x01, "REQUEST_NO_RETURN" },
+ { 0x02, "NOTIFICATION" },
+ { 0x80, "RESPONSE" },
+ { 0x81, "ERROR" },
+ { 0x20, "TP_REQUEST" },
+ { 0x21, "TP_REQUEST_NO_RETURN" },
+ { 0x22, "TP_NOTIFICATION" },
+ { 0xa0, "TP_RESPONSE" },
+ { 0xa1, "TP_ERROR" },
+ { 0, NULL }
+};
+
+static const struct tok return_code_values[] = {
+ { 0x00, "E_OK" },
+ { 0x01, "E_NOT_OK" },
+ { 0x02, "E_UNKNOWN_SERVICE" },
+ { 0x03, "E_UNKNOWN_METHOD" },
+ { 0x04, "E_NOT_READY" },
+ { 0x05, "E_NOT_REACHABLE" },
+ { 0x06, "E_TIMEOUT" },
+ { 0x07, "E_WRONG_PROTOCOL_VERSION" },
+ { 0x08, "E_WRONG_INTERFACE_VERSION" },
+ { 0x09, "E_MALFORMED_MESSAGE" },
+ { 0x0a, "E_WRONG_MESSAGE_TYPE" },
+ { 0x0b, "E_E2E_REPEATED" },
+ { 0x0c, "E_E2E_WRONG_SEQUENCE" },
+ { 0x0d, "E_E2E" },
+ { 0x0e, "E_E2E_NOT_AVAILABLE" },
+ { 0x0f, "E_E2E_NO_NEW_DATA" },
+ { 0, NULL }
+};
+
+void
+someip_print(netdissect_options *ndo, const u_char *bp, const u_int len)
+{
+ uint32_t message_id;
+ uint16_t service_id;
+ uint16_t method_or_event_id;
+ uint8_t event_flag;
+ uint32_t message_len;
+ uint32_t request_id;
+ uint16_t client_id;
+ uint16_t session_id;
+ uint8_t protocol_version;
+ uint8_t interface_version;
+ uint8_t message_type;
+ uint8_t return_code;
+
+ ndo->ndo_protocol = "someip";
+ nd_print_protocol_caps(ndo);
+
+ if (len < 16) {
+ goto invalid;
+ }
+
+ message_id = GET_BE_U_4(bp);
+ service_id = message_id >> 16;
+ event_flag = (message_id & 0x00008000) >> 15;
+ method_or_event_id = message_id & 0x00007FFF;
+ bp += 4;
+ ND_PRINT(", service %u, %s %u",
+ service_id, event_flag ? "event" : "method", method_or_event_id);
+
+ message_len = GET_BE_U_4(bp);
+ bp += 4;
+ ND_PRINT(", len %u", message_len);
+
+ request_id = GET_BE_U_4(bp);
+ client_id = request_id >> 16;
+ session_id = request_id & 0x0000FFFF;
+ bp += 4;
+ ND_PRINT(", client %u, session %u", client_id, session_id);
+
+ protocol_version = GET_U_1(bp);
+ bp += 1;
+ ND_PRINT(", pver %u", protocol_version);
+
+ interface_version = GET_U_1(bp);
+ bp += 1;
+ ND_PRINT(", iver %u", interface_version);
+
+ message_type = GET_U_1(bp);
+ bp += 1;
+ ND_PRINT(", msgtype %s",
+ tok2str(message_type_values, "Unknown", message_type));
+
+ return_code = GET_U_1(bp);
+ bp += 1;
+ ND_PRINT(", retcode %s\n",
+ tok2str(return_code_values, "Unknown", return_code));
+
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-ssh.c b/print-ssh.c
new file mode 100644
index 0000000..5207c52
--- /dev/null
+++ b/print-ssh.c
@@ -0,0 +1,99 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Secure Shell (SSH) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include "netdissect-ctype.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+static int
+ssh_print_version(netdissect_options *ndo, const u_char *pptr, u_int len)
+{
+ u_int idx = 0;
+
+ if ( GET_U_1(pptr+idx) != 'S' )
+ return 0;
+ idx++;
+ if ( GET_U_1(pptr+idx) != 'S' )
+ return 0;
+ idx++;
+ if ( GET_U_1(pptr+idx) != 'H' )
+ return 0;
+ idx++;
+ if ( GET_U_1(pptr+idx) != '-' )
+ return 0;
+ idx++;
+
+ while (idx < len) {
+ u_char c;
+
+ c = GET_U_1(pptr + idx);
+ if (c == '\n') {
+ /*
+ * LF without CR; end of line.
+ * Skip the LF and print the line, with the
+ * exception of the LF.
+ */
+ goto print;
+ } else if (c == '\r') {
+ /* CR - any LF? */
+ if ((idx+1) >= len) {
+ /* not in this packet */
+ goto trunc;
+ }
+ if (GET_U_1(pptr + idx + 1) == '\n') {
+ /*
+ * CR-LF; end of line.
+ * Skip the CR-LF and print the line, with
+ * the exception of the CR-LF.
+ */
+ goto print;
+ }
+
+ /*
+ * CR followed by something else; treat this as
+ * if it were binary data and don't print it.
+ */
+ goto trunc;
+ } else if (!ND_ASCII_ISPRINT(c) ) {
+ /*
+ * Not a printable ASCII character; treat this
+ * as if it were binary data and don't print it.
+ */
+ goto trunc;
+ }
+ idx++;
+ }
+trunc:
+ return -1;
+print:
+ ND_PRINT(": ");
+ nd_print_protocol_caps(ndo);
+ ND_PRINT(": %.*s", (int)idx, pptr);
+ return idx;
+}
+
+void
+ssh_print(netdissect_options *ndo, const u_char *pptr, u_int len)
+{
+ ndo->ndo_protocol = "ssh";
+
+ ssh_print_version(ndo, pptr, len);
+}
diff --git a/print-stp.c b/print-stp.c
new file mode 100644
index 0000000..a4d49c4
--- /dev/null
+++ b/print-stp.c
@@ -0,0 +1,471 @@
+/*
+ * Copyright (c) 2000 Lennert Buytenhek
+ *
+ * This software may be distributed either under the terms of the
+ * BSD-style license that accompanies tcpdump or the GNU General
+ * Public License
+ *
+ * Contributed by Lennert Buytenhek <buytenh@gnu.org>
+ */
+
+/* \summary: IEEE 802.1d Spanning Tree Protocol (STP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+
+#include "netdissect.h"
+#include "extract.h"
+
+#define RSTP_EXTRACT_PORT_ROLE(x) (((x)&0x0C)>>2)
+/* STP timers are expressed in multiples of 1/256th second */
+#define STP_TIME_BASE 256
+#define STP_BPDU_MSTP_MIN_LEN 102
+
+struct stp_bpdu_ {
+ nd_uint16_t protocol_id;
+ nd_uint8_t protocol_version;
+ nd_uint8_t bpdu_type;
+ nd_uint8_t flags;
+ nd_byte root_id[8];
+ nd_uint32_t root_path_cost;
+ nd_byte bridge_id[8];
+ nd_uint16_t port_id;
+ nd_uint16_t message_age;
+ nd_uint16_t max_age;
+ nd_uint16_t hello_time;
+ nd_uint16_t forward_delay;
+ nd_uint8_t v1_length;
+};
+
+#define STP_PROTO_REGULAR 0x00
+#define STP_PROTO_RAPID 0x02
+#define STP_PROTO_MSTP 0x03
+#define STP_PROTO_SPB 0x04
+
+static const struct tok stp_proto_values[] = {
+ { STP_PROTO_REGULAR, "802.1d" },
+ { STP_PROTO_RAPID, "802.1w" },
+ { STP_PROTO_MSTP, "802.1s" },
+ { STP_PROTO_SPB, "802.1aq" },
+ { 0, NULL}
+};
+
+#define STP_BPDU_TYPE_CONFIG 0x00
+#define STP_BPDU_TYPE_RSTP 0x02
+#define STP_BPDU_TYPE_TOPO_CHANGE 0x80
+
+static const struct tok stp_bpdu_flag_values[] = {
+ { 0x01, "Topology change" },
+ { 0x02, "Proposal" },
+ { 0x10, "Learn" },
+ { 0x20, "Forward" },
+ { 0x40, "Agreement" },
+ { 0x80, "Topology change ACK" },
+ { 0, NULL}
+};
+
+static const struct tok stp_bpdu_type_values[] = {
+ { STP_BPDU_TYPE_CONFIG, "Config" },
+ { STP_BPDU_TYPE_RSTP, "Rapid STP" },
+ { STP_BPDU_TYPE_TOPO_CHANGE, "Topology Change" },
+ { 0, NULL}
+};
+
+static const struct tok rstp_obj_port_role_values[] = {
+ { 0x00, "Unknown" },
+ { 0x01, "Alternate" },
+ { 0x02, "Root" },
+ { 0x03, "Designated" },
+ { 0, NULL}
+};
+
+static char *
+stp_print_bridge_id(netdissect_options *ndo, const u_char *p)
+{
+ static char bridge_id_str[sizeof("pppp.aa:bb:cc:dd:ee:ff")];
+
+ snprintf(bridge_id_str, sizeof(bridge_id_str),
+ "%.2x%.2x.%.2x:%.2x:%.2x:%.2x:%.2x:%.2x",
+ GET_U_1(p), GET_U_1(p + 1), GET_U_1(p + 2),
+ GET_U_1(p + 3), GET_U_1(p + 4), GET_U_1(p + 5),
+ GET_U_1(p + 6), GET_U_1(p + 7));
+
+ return bridge_id_str;
+}
+
+static void
+stp_print_config_bpdu(netdissect_options *ndo, const struct stp_bpdu_ *stp_bpdu,
+ u_int length)
+{
+ uint8_t bpdu_flags;
+
+ bpdu_flags = GET_U_1(stp_bpdu->flags);
+ ND_PRINT(", Flags [%s]",
+ bittok2str(stp_bpdu_flag_values, "none", bpdu_flags));
+
+ ND_PRINT(", bridge-id %s.%04x, length %u",
+ stp_print_bridge_id(ndo, stp_bpdu->bridge_id),
+ GET_BE_U_2(stp_bpdu->port_id), length);
+
+ /* in non-verbose mode just print the bridge-id */
+ if (!ndo->ndo_vflag) {
+ return;
+ }
+
+ ND_PRINT("\n\tmessage-age %.2fs, max-age %.2fs"
+ ", hello-time %.2fs, forwarding-delay %.2fs",
+ (float) GET_BE_U_2(stp_bpdu->message_age) / STP_TIME_BASE,
+ (float) GET_BE_U_2(stp_bpdu->max_age) / STP_TIME_BASE,
+ (float) GET_BE_U_2(stp_bpdu->hello_time) / STP_TIME_BASE,
+ (float) GET_BE_U_2(stp_bpdu->forward_delay) / STP_TIME_BASE);
+
+ ND_PRINT("\n\troot-id %s, root-pathcost %u",
+ stp_print_bridge_id(ndo, stp_bpdu->root_id),
+ GET_BE_U_4(stp_bpdu->root_path_cost));
+
+ /* Port role is only valid for 802.1w */
+ if (GET_U_1(stp_bpdu->protocol_version) == STP_PROTO_RAPID) {
+ ND_PRINT(", port-role %s",
+ tok2str(rstp_obj_port_role_values, "Unknown",
+ RSTP_EXTRACT_PORT_ROLE(bpdu_flags)));
+ }
+}
+
+/*
+ * MSTP packet format
+ * Ref. IEEE 802.1Q 2003 Ed. Section 14
+ *
+ * MSTP BPDU
+ *
+ * 2 - bytes Protocol Id
+ * 1 - byte Protocol Ver.
+ * 1 - byte BPDU type
+ * 1 - byte Flags
+ * 8 - bytes CIST Root Identifier
+ * 4 - bytes CIST External Path Cost
+ * 8 - bytes CIST Regional Root Identifier
+ * 2 - bytes CIST Port Identifier
+ * 2 - bytes Message Age
+ * 2 - bytes Max age
+ * 2 - bytes Hello Time
+ * 2 - bytes Forward delay
+ * 1 - byte Version 1 length. Must be 0
+ * 2 - bytes Version 3 length
+ * 1 - byte Config Identifier
+ * 32 - bytes Config Name
+ * 2 - bytes Revision level
+ * 16 - bytes Config Digest [MD5]
+ * 4 - bytes CIST Internal Root Path Cost
+ * 8 - bytes CIST Bridge Identifier
+ * 1 - byte CIST Remaining Hops
+ * 16 - bytes MSTI information [Max 64 MSTI, each 16 bytes]
+ *
+ *
+ * SPB BPDU
+ * Ref. IEEE 802.1aq. Section 14
+ *
+ * 2 - bytes Version 4 length
+ * 1 - byte Aux Config Identifier
+ * 32 - bytes Aux Config Name
+ * 2 - bytes Aux Revision level
+ * 16 - bytes Aux Config Digest [MD5]
+ * 1 - byte (1 - 2) Agreement Number
+ * (3 - 4) Discarded Agreement Number
+ * (5) Agreement Valid Flag
+ * (6) Restricted Role Flag
+ * (7 - 8) Unused sent zero
+ * 1 - byte Unused
+ * 1 - byte (1 - 4) Agreement Digest Format Identifier
+ * (5 - 8) Agreement Digest Format Capabilities
+ * 1 - byte (1 - 4) Agreement Digest Convention Identifier
+ * (5 - 8) Agreement Digest Convention Capabilities
+ * 2 - bytes Agreement Digest Edge Count
+ * 8 - byte Reserved Set
+ * 20 - bytes Computed Topology Digest
+ *
+ *
+ * MSTI Payload
+ *
+ * 1 - byte MSTI flag
+ * 8 - bytes MSTI Regional Root Identifier
+ * 4 - bytes MSTI Regional Path Cost
+ * 1 - byte MSTI Bridge Priority
+ * 1 - byte MSTI Port Priority
+ * 1 - byte MSTI Remaining Hops
+ *
+ */
+
+#define MST_BPDU_MSTI_LENGTH 16
+#define MST_BPDU_CONFIG_INFO_LENGTH 64
+
+/* Offsets of fields from the beginning for the packet */
+#define MST_BPDU_VER3_LEN_OFFSET 36
+#define MST_BPDU_CONFIG_NAME_OFFSET 39
+#define MST_BPDU_CONFIG_DIGEST_OFFSET 73
+#define MST_BPDU_CIST_INT_PATH_COST_OFFSET 89
+#define MST_BPDU_CIST_BRIDGE_ID_OFFSET 93
+#define MST_BPDU_CIST_REMAIN_HOPS_OFFSET 101
+#define MST_BPDU_MSTI_OFFSET 102
+/* Offsets within an MSTI */
+#define MST_BPDU_MSTI_ROOT_PRIO_OFFSET 1
+#define MST_BPDU_MSTI_ROOT_PATH_COST_OFFSET 9
+#define MST_BPDU_MSTI_BRIDGE_PRIO_OFFSET 13
+#define MST_BPDU_MSTI_PORT_PRIO_OFFSET 14
+#define MST_BPDU_MSTI_REMAIN_HOPS_OFFSET 15
+
+#define SPB_BPDU_MIN_LEN 87
+#define SPB_BPDU_CONFIG_NAME_OFFSET 3
+#define SPB_BPDU_CONFIG_REV_OFFSET SPB_BPDU_CONFIG_NAME_OFFSET + 32
+#define SPB_BPDU_CONFIG_DIGEST_OFFSET SPB_BPDU_CONFIG_REV_OFFSET + 2
+#define SPB_BPDU_AGREEMENT_OFFSET SPB_BPDU_CONFIG_DIGEST_OFFSET + 16
+#define SPB_BPDU_AGREEMENT_UNUSED_OFFSET SPB_BPDU_AGREEMENT_OFFSET + 1
+#define SPB_BPDU_AGREEMENT_FORMAT_OFFSET SPB_BPDU_AGREEMENT_UNUSED_OFFSET + 1
+#define SPB_BPDU_AGREEMENT_CON_OFFSET SPB_BPDU_AGREEMENT_FORMAT_OFFSET + 1
+#define SPB_BPDU_AGREEMENT_EDGE_OFFSET SPB_BPDU_AGREEMENT_CON_OFFSET + 1
+#define SPB_BPDU_AGREEMENT_RES1_OFFSET SPB_BPDU_AGREEMENT_EDGE_OFFSET + 2
+#define SPB_BPDU_AGREEMENT_RES2_OFFSET SPB_BPDU_AGREEMENT_RES1_OFFSET + 4
+#define SPB_BPDU_AGREEMENT_DIGEST_OFFSET SPB_BPDU_AGREEMENT_RES2_OFFSET + 4
+
+static void
+stp_print_mstp_bpdu(netdissect_options *ndo, const struct stp_bpdu_ *stp_bpdu,
+ u_int length)
+{
+ const u_char *ptr;
+ uint8_t bpdu_flags;
+ uint16_t v3len;
+ uint16_t len;
+ uint16_t msti;
+ u_int offset;
+
+ ptr = (const u_char *)stp_bpdu;
+ bpdu_flags = GET_U_1(stp_bpdu->flags);
+ ND_PRINT(", CIST Flags [%s], length %u",
+ bittok2str(stp_bpdu_flag_values, "none", bpdu_flags), length);
+
+ /*
+ * in non-verbose mode just print the flags.
+ */
+ if (!ndo->ndo_vflag) {
+ return;
+ }
+
+ ND_PRINT("\n\tport-role %s, ",
+ tok2str(rstp_obj_port_role_values, "Unknown",
+ RSTP_EXTRACT_PORT_ROLE(bpdu_flags)));
+
+ ND_PRINT("CIST root-id %s, CIST ext-pathcost %u",
+ stp_print_bridge_id(ndo, stp_bpdu->root_id),
+ GET_BE_U_4(stp_bpdu->root_path_cost));
+
+ ND_PRINT("\n\tCIST regional-root-id %s, ",
+ stp_print_bridge_id(ndo, stp_bpdu->bridge_id));
+
+ ND_PRINT("CIST port-id %04x,", GET_BE_U_2(stp_bpdu->port_id));
+
+ ND_PRINT("\n\tmessage-age %.2fs, max-age %.2fs"
+ ", hello-time %.2fs, forwarding-delay %.2fs",
+ (float) GET_BE_U_2(stp_bpdu->message_age) / STP_TIME_BASE,
+ (float) GET_BE_U_2(stp_bpdu->max_age) / STP_TIME_BASE,
+ (float) GET_BE_U_2(stp_bpdu->hello_time) / STP_TIME_BASE,
+ (float) GET_BE_U_2(stp_bpdu->forward_delay) / STP_TIME_BASE);
+
+ ND_PRINT("\n\tv3len %u, ", GET_BE_U_2(ptr + MST_BPDU_VER3_LEN_OFFSET));
+ ND_PRINT("MCID Name ");
+ nd_printjnp(ndo, ptr + MST_BPDU_CONFIG_NAME_OFFSET, 32);
+ ND_PRINT(", rev %u,"
+ "\n\t\tdigest %08x%08x%08x%08x, ",
+ GET_BE_U_2(ptr + MST_BPDU_CONFIG_NAME_OFFSET + 32),
+ GET_BE_U_4(ptr + MST_BPDU_CONFIG_DIGEST_OFFSET),
+ GET_BE_U_4(ptr + MST_BPDU_CONFIG_DIGEST_OFFSET + 4),
+ GET_BE_U_4(ptr + MST_BPDU_CONFIG_DIGEST_OFFSET + 8),
+ GET_BE_U_4(ptr + MST_BPDU_CONFIG_DIGEST_OFFSET + 12));
+
+ ND_PRINT("CIST int-root-pathcost %u,",
+ GET_BE_U_4(ptr + MST_BPDU_CIST_INT_PATH_COST_OFFSET));
+
+ ND_PRINT("\n\tCIST bridge-id %s, ",
+ stp_print_bridge_id(ndo, ptr + MST_BPDU_CIST_BRIDGE_ID_OFFSET));
+
+ ND_PRINT("CIST remaining-hops %u",
+ GET_U_1(ptr + MST_BPDU_CIST_REMAIN_HOPS_OFFSET));
+
+ /* Dump all MSTI's */
+ v3len = GET_BE_U_2(ptr + MST_BPDU_VER3_LEN_OFFSET);
+ if (v3len > MST_BPDU_CONFIG_INFO_LENGTH) {
+ len = v3len - MST_BPDU_CONFIG_INFO_LENGTH;
+ offset = MST_BPDU_MSTI_OFFSET;
+ while (len >= MST_BPDU_MSTI_LENGTH) {
+ msti = GET_BE_U_2(ptr + offset + MST_BPDU_MSTI_ROOT_PRIO_OFFSET);
+ msti = msti & 0x0FFF;
+
+ ND_PRINT("\n\tMSTI %u, Flags [%s], port-role %s",
+ msti,
+ bittok2str(stp_bpdu_flag_values, "none", GET_U_1(ptr + offset)),
+ tok2str(rstp_obj_port_role_values, "Unknown",
+ RSTP_EXTRACT_PORT_ROLE(GET_U_1(ptr + offset))));
+ ND_PRINT("\n\t\tMSTI regional-root-id %s, pathcost %u",
+ stp_print_bridge_id(ndo, ptr + offset +
+ MST_BPDU_MSTI_ROOT_PRIO_OFFSET),
+ GET_BE_U_4(ptr + offset + MST_BPDU_MSTI_ROOT_PATH_COST_OFFSET));
+ ND_PRINT("\n\t\tMSTI bridge-prio %u, port-prio %u, hops %u",
+ GET_U_1(ptr + offset + MST_BPDU_MSTI_BRIDGE_PRIO_OFFSET) >> 4,
+ GET_U_1(ptr + offset + MST_BPDU_MSTI_PORT_PRIO_OFFSET) >> 4,
+ GET_U_1(ptr + offset + MST_BPDU_MSTI_REMAIN_HOPS_OFFSET));
+
+ len -= MST_BPDU_MSTI_LENGTH;
+ offset += MST_BPDU_MSTI_LENGTH;
+ }
+ }
+}
+
+static void
+stp_print_spb_bpdu(netdissect_options *ndo, const struct stp_bpdu_ *stp_bpdu,
+ u_int offset)
+{
+ const u_char *ptr;
+
+ /*
+ * in non-verbose mode don't print anything.
+ */
+ if (!ndo->ndo_vflag) {
+ return;
+ }
+
+ ptr = (const u_char *)stp_bpdu;
+
+ ND_PRINT("\n\tv4len %u, ", GET_BE_U_2(ptr + offset));
+ ND_PRINT("AUXMCID Name ");
+ nd_printjnp(ndo, ptr + offset + SPB_BPDU_CONFIG_NAME_OFFSET, 32);
+ ND_PRINT(", Rev %u,\n\t\tdigest %08x%08x%08x%08x",
+ GET_BE_U_2(ptr + offset + SPB_BPDU_CONFIG_REV_OFFSET),
+ GET_BE_U_4(ptr + offset + SPB_BPDU_CONFIG_DIGEST_OFFSET),
+ GET_BE_U_4(ptr + offset + SPB_BPDU_CONFIG_DIGEST_OFFSET + 4),
+ GET_BE_U_4(ptr + offset + SPB_BPDU_CONFIG_DIGEST_OFFSET + 8),
+ GET_BE_U_4(ptr + offset + SPB_BPDU_CONFIG_DIGEST_OFFSET + 12));
+
+ ND_PRINT("\n\tAgreement num %u, Discarded Agreement num %u, Agreement valid-"
+ "flag %u,\n\tRestricted role-flag: %u, Format id %u cap %u, "
+ "Convention id %u cap %u,\n\tEdge count %u, "
+ "Agreement digest %08x%08x%08x%08x%08x",
+ GET_U_1(ptr + offset + SPB_BPDU_AGREEMENT_OFFSET)>>6,
+ GET_U_1(ptr + offset + SPB_BPDU_AGREEMENT_OFFSET)>>4 & 0x3,
+ GET_U_1(ptr + offset + SPB_BPDU_AGREEMENT_OFFSET)>>3 & 0x1,
+ GET_U_1(ptr + offset + SPB_BPDU_AGREEMENT_OFFSET)>>2 & 0x1,
+ GET_U_1(ptr + offset + SPB_BPDU_AGREEMENT_FORMAT_OFFSET)>>4,
+ GET_U_1(ptr + offset + SPB_BPDU_AGREEMENT_FORMAT_OFFSET)&0x00ff,
+ GET_U_1(ptr + offset + SPB_BPDU_AGREEMENT_CON_OFFSET)>>4,
+ GET_U_1(ptr + offset + SPB_BPDU_AGREEMENT_CON_OFFSET)&0x00ff,
+ GET_BE_U_2(ptr + offset + SPB_BPDU_AGREEMENT_EDGE_OFFSET),
+ GET_BE_U_4(ptr + offset + SPB_BPDU_AGREEMENT_DIGEST_OFFSET),
+ GET_BE_U_4(ptr + offset + SPB_BPDU_AGREEMENT_DIGEST_OFFSET + 4),
+ GET_BE_U_4(ptr + offset + SPB_BPDU_AGREEMENT_DIGEST_OFFSET + 8),
+ GET_BE_U_4(ptr + offset + SPB_BPDU_AGREEMENT_DIGEST_OFFSET + 12),
+ GET_BE_U_4(ptr + offset + SPB_BPDU_AGREEMENT_DIGEST_OFFSET + 16));
+}
+
+/*
+ * Print 802.1d / 802.1w / 802.1q (mstp) / 802.1aq (spb) packets.
+ */
+void
+stp_print(netdissect_options *ndo, const u_char *p, u_int length)
+{
+ const struct stp_bpdu_ *stp_bpdu;
+ u_int protocol_version;
+ u_int bpdu_type;
+ u_int mstp_len;
+ u_int spb_len;
+
+ ndo->ndo_protocol = "stp";
+ stp_bpdu = (const struct stp_bpdu_*)p;
+
+ /* Minimum STP Frame size. */
+ if (length < 4)
+ goto invalid;
+
+ if (GET_BE_U_2(stp_bpdu->protocol_id)) {
+ ND_PRINT("unknown STP version, length %u", length);
+ return;
+ }
+
+ protocol_version = GET_U_1(stp_bpdu->protocol_version);
+ ND_PRINT("STP %s", tok2str(stp_proto_values, "Unknown STP protocol (0x%02x)",
+ protocol_version));
+
+ switch (protocol_version) {
+ case STP_PROTO_REGULAR:
+ case STP_PROTO_RAPID:
+ case STP_PROTO_MSTP:
+ case STP_PROTO_SPB:
+ break;
+ default:
+ return;
+ }
+
+ bpdu_type = GET_U_1(stp_bpdu->bpdu_type);
+ ND_PRINT(", %s", tok2str(stp_bpdu_type_values, "Unknown BPDU Type (0x%02x)",
+ bpdu_type));
+
+ switch (bpdu_type) {
+ case STP_BPDU_TYPE_CONFIG:
+ if (length < sizeof(struct stp_bpdu_) - 1) {
+ goto invalid;
+ }
+ stp_print_config_bpdu(ndo, stp_bpdu, length);
+ break;
+
+ case STP_BPDU_TYPE_RSTP:
+ if (protocol_version == STP_PROTO_RAPID) {
+ if (length < sizeof(struct stp_bpdu_)) {
+ goto invalid;
+ }
+ stp_print_config_bpdu(ndo, stp_bpdu, length);
+ } else if (protocol_version == STP_PROTO_MSTP ||
+ protocol_version == STP_PROTO_SPB) {
+ if (length < STP_BPDU_MSTP_MIN_LEN) {
+ goto invalid;
+ }
+
+ if (GET_U_1(stp_bpdu->v1_length) != 0) {
+ /* FIX ME: Emit a message here ? */
+ goto invalid;
+ }
+
+ /* Validate v3 length */
+ mstp_len = GET_BE_U_2(p + MST_BPDU_VER3_LEN_OFFSET);
+ mstp_len += 2; /* length encoding itself is 2 bytes */
+ if (length < (sizeof(struct stp_bpdu_) + mstp_len)) {
+ goto invalid;
+ }
+ stp_print_mstp_bpdu(ndo, stp_bpdu, length);
+
+ if (protocol_version == STP_PROTO_SPB)
+ {
+ /* Validate v4 length */
+ spb_len = GET_BE_U_2(p + MST_BPDU_VER3_LEN_OFFSET + mstp_len);
+ spb_len += 2;
+ if (length < (sizeof(struct stp_bpdu_) + mstp_len + spb_len) ||
+ spb_len < SPB_BPDU_MIN_LEN) {
+ goto invalid;
+ }
+ stp_print_spb_bpdu(ndo, stp_bpdu, (sizeof(struct stp_bpdu_) + mstp_len));
+ }
+ }
+ break;
+
+ case STP_BPDU_TYPE_TOPO_CHANGE:
+ /* always empty message - just break out */
+ break;
+
+ default:
+ break;
+ }
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-sunatm.c b/print-sunatm.c
new file mode 100644
index 0000000..0fe5eee
--- /dev/null
+++ b/print-sunatm.c
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 1997 Yen Yen Lim and North Dakota State University
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Yen Yen Lim and
+ North Dakota State University
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: SunATM DLPI capture printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+#include "atm.h"
+
+/* SunATM header for ATM packet */
+#define DIR_POS 0 /* Direction (0x80 = transmit, 0x00 = receive) */
+#define VPI_POS 1 /* VPI */
+#define VCI_POS 2 /* VCI */
+#define PKT_BEGIN_POS 4 /* Start of the ATM packet */
+
+/* Protocol type values in the bottom for bits of the byte at SUNATM_DIR_POS. */
+#define PT_LANE 0x01 /* LANE */
+#define PT_LLC 0x02 /* LLC encapsulation */
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the SunATM pseudo-header for the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+sunatm_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+ u_short vci;
+ u_char vpi;
+ u_int traftype;
+
+ ndo->ndo_protocol = "sunatm";
+
+ if (ndo->ndo_eflag) {
+ ND_PRINT(GET_U_1(p + DIR_POS) & 0x80 ? "Tx: " : "Rx: ");
+ }
+
+ switch (GET_U_1(p + DIR_POS) & 0x0f) {
+
+ case PT_LANE:
+ traftype = ATM_LANE;
+ break;
+
+ case PT_LLC:
+ traftype = ATM_LLC;
+ break;
+
+ default:
+ traftype = ATM_UNKNOWN;
+ break;
+ }
+
+ vpi = GET_U_1(p + VPI_POS);
+ vci = GET_BE_U_2(p + VCI_POS);
+
+ p += PKT_BEGIN_POS;
+ caplen -= PKT_BEGIN_POS;
+ length -= PKT_BEGIN_POS;
+ ndo->ndo_ll_hdr_len += PKT_BEGIN_POS;
+ atm_print(ndo, vpi, vci, traftype, p, length, caplen);
+}
diff --git a/print-sunrpc.c b/print-sunrpc.c
new file mode 100644
index 0000000..7eeb42d
--- /dev/null
+++ b/print-sunrpc.c
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 1992, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Sun Remote Procedure Call printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+/*
+ * At least on HP-UX:
+ *
+ * 1) getrpcbynumber() is declared in <netdb.h>, not any of the RPC
+ * header files
+ *
+ * and
+ *
+ * 2) if _XOPEN_SOURCE_EXTENDED is defined, <netdb.h> doesn't declare
+ * it
+ *
+ * so we undefine it.
+ */
+#undef _XOPEN_SOURCE_EXTENDED
+
+#include "netdissect-stdinc.h"
+
+#if defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H)
+#include <rpc/rpc.h>
+#ifdef HAVE_RPC_RPCENT_H
+#include <rpc/rpcent.h>
+#endif /* HAVE_RPC_RPCENT_H */
+#endif /* defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H) */
+
+#include <stdio.h>
+#include <string.h>
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip.h"
+#include "ip6.h"
+
+#include "rpc_auth.h"
+#include "rpc_msg.h"
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part. Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ *
+ * from: @(#)pmap_prot.h 1.14 88/02/08 SMI
+ * from: @(#)pmap_prot.h 2.1 88/07/29 4.0 RPCSRC
+ * $FreeBSD: src/include/rpc/pmap_prot.h,v 1.9.2.1 1999/08/29 14:39:05 peter Exp $
+ */
+
+/*
+ * pmap_prot.h
+ * Protocol for the local binder service, or pmap.
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ *
+ * The following procedures are supported by the protocol:
+ *
+ * PMAPPROC_NULL() returns ()
+ * takes nothing, returns nothing
+ *
+ * PMAPPROC_SET(struct pmap) returns (bool_t)
+ * TRUE is success, FALSE is failure. Registers the tuple
+ * [prog, vers, prot, port].
+ *
+ * PMAPPROC_UNSET(struct pmap) returns (bool_t)
+ * TRUE is success, FALSE is failure. Un-registers pair
+ * [prog, vers]. prot and port are ignored.
+ *
+ * PMAPPROC_GETPORT(struct pmap) returns (long unsigned).
+ * 0 is failure. Otherwise returns the port number where the pair
+ * [prog, vers] is registered. It may lie!
+ *
+ * PMAPPROC_DUMP() RETURNS (struct pmaplist *)
+ *
+ * PMAPPROC_CALLIT(unsigned, unsigned, unsigned, string<>)
+ * RETURNS (port, string<>);
+ * usage: encapsulatedresults = PMAPPROC_CALLIT(prog, vers, proc, encapsulatedargs);
+ * Calls the procedure on the local machine. If it is not registered,
+ * this procedure is quite; ie it does not return error information!!!
+ * This procedure only is supported on rpc/udp and calls via
+ * rpc/udp. This routine only passes null authentication parameters.
+ * This file has no interface to xdr routines for PMAPPROC_CALLIT.
+ *
+ * The service supports remote procedure calls on udp/ip or tcp/ip socket 111.
+ */
+
+#define SUNRPC_PMAPPORT ((uint16_t)111)
+#define SUNRPC_PMAPPROC_NULL ((uint32_t)0)
+#define SUNRPC_PMAPPROC_SET ((uint32_t)1)
+#define SUNRPC_PMAPPROC_UNSET ((uint32_t)2)
+#define SUNRPC_PMAPPROC_GETPORT ((uint32_t)3)
+#define SUNRPC_PMAPPROC_DUMP ((uint32_t)4)
+#define SUNRPC_PMAPPROC_CALLIT ((uint32_t)5)
+
+static const struct tok proc2str[] = {
+ { SUNRPC_PMAPPROC_NULL, "null" },
+ { SUNRPC_PMAPPROC_SET, "set" },
+ { SUNRPC_PMAPPROC_UNSET, "unset" },
+ { SUNRPC_PMAPPROC_GETPORT, "getport" },
+ { SUNRPC_PMAPPROC_DUMP, "dump" },
+ { SUNRPC_PMAPPROC_CALLIT, "call" },
+ { 0, NULL }
+};
+
+/* Forwards */
+static char *progstr(uint32_t);
+
+void
+sunrpc_print(netdissect_options *ndo, const u_char *bp,
+ u_int length, const u_char *bp2)
+{
+ const struct sunrpc_msg *rp;
+ const struct ip *ip;
+ const struct ip6_hdr *ip6;
+ uint32_t x;
+ char srcid[20], dstid[20]; /*fits 32bit*/
+
+ ndo->ndo_protocol = "sunrpc";
+ rp = (const struct sunrpc_msg *)bp;
+ ND_TCHECK_SIZE(rp);
+
+ if (!ndo->ndo_nflag) {
+ snprintf(srcid, sizeof(srcid), "0x%x",
+ GET_BE_U_4(rp->rm_xid));
+ strlcpy(dstid, "sunrpc", sizeof(dstid));
+ } else {
+ snprintf(srcid, sizeof(srcid), "0x%x",
+ GET_BE_U_4(rp->rm_xid));
+ snprintf(dstid, sizeof(dstid), "0x%x", SUNRPC_PMAPPORT);
+ }
+
+ switch (IP_V((const struct ip *)bp2)) {
+ case 4:
+ ip = (const struct ip *)bp2;
+ ND_PRINT("%s.%s > %s.%s: %u",
+ GET_IPADDR_STRING(ip->ip_src), srcid,
+ GET_IPADDR_STRING(ip->ip_dst), dstid, length);
+ break;
+ case 6:
+ ip6 = (const struct ip6_hdr *)bp2;
+ ND_PRINT("%s.%s > %s.%s: %u",
+ GET_IP6ADDR_STRING(ip6->ip6_src), srcid,
+ GET_IP6ADDR_STRING(ip6->ip6_dst), dstid, length);
+ break;
+ default:
+ ND_PRINT("%s.%s > %s.%s: %u", "?", srcid, "?", dstid, length);
+ break;
+ }
+
+ ND_PRINT(" %s", tok2str(proc2str, " proc #%u",
+ GET_BE_U_4(rp->rm_call.cb_proc)));
+ x = GET_BE_U_4(rp->rm_call.cb_rpcvers);
+ if (x != SUNRPC_MSG_VERSION)
+ ND_PRINT(" [rpcver %u]", x);
+
+ switch (GET_BE_U_4(rp->rm_call.cb_proc)) {
+
+ case SUNRPC_PMAPPROC_SET:
+ case SUNRPC_PMAPPROC_UNSET:
+ case SUNRPC_PMAPPROC_GETPORT:
+ case SUNRPC_PMAPPROC_CALLIT:
+ x = GET_BE_U_4(rp->rm_call.cb_prog);
+ if (!ndo->ndo_nflag)
+ ND_PRINT(" %s", progstr(x));
+ else
+ ND_PRINT(" %u", x);
+ ND_PRINT(".%u", GET_BE_U_4(rp->rm_call.cb_vers));
+ break;
+ }
+}
+
+static char *
+progstr(uint32_t prog)
+{
+#if defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H)
+ struct rpcent *rp;
+#endif
+ static char buf[32];
+ static uint32_t lastprog = 0;
+
+ if (lastprog != 0 && prog == lastprog)
+ return (buf);
+#if defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H)
+ rp = getrpcbynumber(prog);
+ if (rp != NULL)
+ strlcpy(buf, rp->r_name, sizeof(buf));
+ else
+#endif
+ (void) snprintf(buf, sizeof(buf), "#%u", prog);
+ lastprog = prog;
+ return (buf);
+}
diff --git a/print-symantec.c b/print-symantec.c
new file mode 100644
index 0000000..0d394e3
--- /dev/null
+++ b/print-symantec.c
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Symantec Enterprise Firewall printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "ethertype.h"
+
+struct symantec_header {
+ nd_byte stuff1[6];
+ nd_uint16_t ether_type;
+ nd_byte stuff2[36];
+};
+
+static void
+symantec_hdr_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const struct symantec_header *sp;
+ uint16_t etype;
+
+ sp = (const struct symantec_header *)bp;
+
+ etype = GET_BE_U_2(sp->ether_type);
+ if (!ndo->ndo_qflag) {
+ if (etype <= MAX_ETHERNET_LENGTH_VAL)
+ ND_PRINT("invalid ethertype %u", etype);
+ else
+ ND_PRINT("ethertype %s (0x%04x)",
+ tok2str(ethertype_values,"Unknown", etype),
+ etype);
+ } else {
+ if (etype <= MAX_ETHERNET_LENGTH_VAL)
+ ND_PRINT("invalid ethertype %u", etype);
+ else
+ ND_PRINT("%s", tok2str(ethertype_values,"Unknown Ethertype (0x%04x)", etype));
+ }
+
+ ND_PRINT(", length %u: ", length);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+symantec_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int length = h->len;
+ u_int caplen = h->caplen;
+ const struct symantec_header *sp;
+ u_short ether_type;
+
+ ndo->ndo_protocol = "symantec";
+ ND_TCHECK_LEN(p, sizeof(struct symantec_header));
+
+ ndo->ndo_ll_hdr_len += sizeof (struct symantec_header);
+ if (ndo->ndo_eflag)
+ symantec_hdr_print(ndo, p, length);
+
+ length -= sizeof (struct symantec_header);
+ caplen -= sizeof (struct symantec_header);
+ sp = (const struct symantec_header *)p;
+ p += sizeof (struct symantec_header);
+
+ ether_type = GET_BE_U_2(sp->ether_type);
+
+ if (ether_type <= MAX_ETHERNET_LENGTH_VAL) {
+ /* ether_type not known, print raw packet */
+ if (!ndo->ndo_eflag)
+ symantec_hdr_print(ndo, (const u_char *)sp, length + sizeof (struct symantec_header));
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ } else if (ethertype_print(ndo, ether_type, p, length, caplen, NULL, NULL) == 0) {
+ /* ether_type not known, print raw packet */
+ if (!ndo->ndo_eflag)
+ symantec_hdr_print(ndo, (const u_char *)sp, length + sizeof (struct symantec_header));
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ }
+}
diff --git a/print-syslog.c b/print-syslog.c
new file mode 100644
index 0000000..b0e1c91
--- /dev/null
+++ b/print-syslog.c
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 1998-2004 Hannes Gredler <hannes@gredler.at>
+ * The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Syslog protocol printer */
+/* specification: RFC 3164 (not RFC 5424) */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+
+/*
+ * tokenlists and #defines taken from Ethereal - Network traffic analyzer
+ * by Gerald Combs <gerald@ethereal.com>
+ */
+
+#define SYSLOG_SEVERITY_MASK 0x0007 /* 0000 0000 0000 0111 */
+#define SYSLOG_FACILITY_MASK 0x03f8 /* 0000 0011 1111 1000 */
+#define SYSLOG_MAX_DIGITS 3 /* The maximum number of priority digits to read in. */
+
+static const struct tok syslog_severity_values[] = {
+ { 0, "emergency" },
+ { 1, "alert" },
+ { 2, "critical" },
+ { 3, "error" },
+ { 4, "warning" },
+ { 5, "notice" },
+ { 6, "info" },
+ { 7, "debug" },
+ { 0, NULL },
+};
+
+static const struct tok syslog_facility_values[] = {
+ { 0, "kernel" },
+ { 1, "user" },
+ { 2, "mail" },
+ { 3, "daemon" },
+ { 4, "auth" },
+ { 5, "syslog" },
+ { 6, "lpr" },
+ { 7, "news" },
+ { 8, "uucp" },
+ { 9, "cron" },
+ { 10, "authpriv" },
+ { 11, "ftp" },
+ { 12, "ntp" },
+ { 13, "security" },
+ { 14, "console" },
+ { 15, "cron" },
+ { 16, "local0" },
+ { 17, "local1" },
+ { 18, "local2" },
+ { 19, "local3" },
+ { 20, "local4" },
+ { 21, "local5" },
+ { 22, "local6" },
+ { 23, "local7" },
+ { 0, NULL },
+};
+
+void
+syslog_print(netdissect_options *ndo,
+ const u_char *pptr, u_int len)
+{
+ uint16_t msg_off = 0;
+ uint16_t pri = 0;
+ uint16_t facility,severity;
+
+ ndo->ndo_protocol = "syslog";
+ /* extract decimal figures that are
+ * encapsulated within < > tags
+ * based on this decimal figure extract the
+ * severity and facility values
+ */
+
+ if (GET_U_1(pptr) != '<')
+ goto invalid;
+ msg_off++;
+
+ while (msg_off <= SYSLOG_MAX_DIGITS &&
+ GET_U_1(pptr + msg_off) >= '0' &&
+ GET_U_1(pptr + msg_off) <= '9') {
+ pri = pri * 10 + (GET_U_1(pptr + msg_off) - '0');
+ msg_off++;
+ }
+
+ if (GET_U_1(pptr + msg_off) != '>')
+ goto invalid;
+ msg_off++;
+
+ facility = (pri & SYSLOG_FACILITY_MASK) >> 3;
+ severity = pri & SYSLOG_SEVERITY_MASK;
+
+ if (ndo->ndo_vflag < 1 )
+ {
+ ND_PRINT("SYSLOG %s.%s, length: %u",
+ tok2str(syslog_facility_values, "unknown (%u)", facility),
+ tok2str(syslog_severity_values, "unknown (%u)", severity),
+ len);
+ return;
+ }
+
+ ND_PRINT("SYSLOG, length: %u\n\tFacility %s (%u), Severity %s (%u)\n\tMsg: ",
+ len,
+ tok2str(syslog_facility_values, "unknown (%u)", facility),
+ facility,
+ tok2str(syslog_severity_values, "unknown (%u)", severity),
+ severity);
+
+ /* print the syslog text in verbose mode */
+ /*
+ * RFC 3164 Section 4.1.3: "There is no ending delimiter to this part.
+ * The MSG part of the syslog packet MUST contain visible (printing)
+ * characters."
+ *
+ * RFC 5424 Section 8.2: "This document does not impose any mandatory
+ * restrictions on the MSG or PARAM-VALUE content. As such, they MAY
+ * contain control characters, including the NUL character."
+ *
+ * Hence, to aid in protocol debugging, print the full MSG without
+ * beautification to make it clear what was transmitted on the wire.
+ */
+ if (len > msg_off)
+ (void)nd_printn(ndo, pptr + msg_off, len - msg_off, NULL);
+
+ if (ndo->ndo_vflag > 1)
+ print_unknown_data(ndo, pptr, "\n\t", len);
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-tcp.c b/print-tcp.c
new file mode 100644
index 0000000..72964eb
--- /dev/null
+++ b/print-tcp.c
@@ -0,0 +1,972 @@
+/* $NetBSD: print-tcp.c,v 1.9 2007/07/26 18:15:12 plunky Exp $ */
+
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Copyright (c) 1999-2004 The tcpdump.org project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: TCP printer */
+
+#ifndef lint
+#else
+__RCSID("$NetBSD: print-tcp.c,v 1.8 2007/07/24 11:53:48 drochner Exp $");
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "diag-control.h"
+
+#include "tcp.h"
+
+#include "ip.h"
+#include "ip6.h"
+#include "ipproto.h"
+#include "rpc_auth.h"
+#include "rpc_msg.h"
+
+#ifdef HAVE_LIBCRYPTO
+#include <openssl/md5.h>
+#include "signature.h"
+
+static int tcp_verify_signature(netdissect_options *ndo,
+ const struct ip *ip, const struct tcphdr *tp,
+ const u_char *data, u_int length, const u_char *rcvsig);
+#endif
+
+static void print_tcp_rst_data(netdissect_options *, const u_char *sp, u_int length);
+static void print_tcp_fastopen_option(netdissect_options *ndo, const u_char *cp,
+ u_int datalen, int exp);
+
+#define MAX_RST_DATA_LEN 30
+
+
+struct tha {
+ nd_ipv4 src;
+ nd_ipv4 dst;
+ u_int port;
+};
+
+struct tcp_seq_hash {
+ struct tcp_seq_hash *nxt;
+ struct tha addr;
+ uint32_t seq;
+ uint32_t ack;
+};
+
+struct tha6 {
+ nd_ipv6 src;
+ nd_ipv6 dst;
+ u_int port;
+};
+
+struct tcp_seq_hash6 {
+ struct tcp_seq_hash6 *nxt;
+ struct tha6 addr;
+ uint32_t seq;
+ uint32_t ack;
+};
+
+#define TSEQ_HASHSIZE 919
+
+/* These tcp options do not have the size octet */
+#define ZEROLENOPT(o) ((o) == TCPOPT_EOL || (o) == TCPOPT_NOP)
+
+static struct tcp_seq_hash tcp_seq_hash4[TSEQ_HASHSIZE];
+static struct tcp_seq_hash6 tcp_seq_hash6[TSEQ_HASHSIZE];
+
+static const struct tok tcp_flag_values[] = {
+ { TH_FIN, "F" },
+ { TH_SYN, "S" },
+ { TH_RST, "R" },
+ { TH_PUSH, "P" },
+ { TH_ACK, "." },
+ { TH_URG, "U" },
+ { TH_ECNECHO, "E" },
+ { TH_CWR, "W" },
+ { 0, NULL }
+};
+
+static const struct tok tcp_option_values[] = {
+ { TCPOPT_EOL, "eol" },
+ { TCPOPT_NOP, "nop" },
+ { TCPOPT_MAXSEG, "mss" },
+ { TCPOPT_WSCALE, "wscale" },
+ { TCPOPT_SACKOK, "sackOK" },
+ { TCPOPT_SACK, "sack" },
+ { TCPOPT_ECHO, "echo" },
+ { TCPOPT_ECHOREPLY, "echoreply" },
+ { TCPOPT_TIMESTAMP, "TS" },
+ { TCPOPT_CC, "cc" },
+ { TCPOPT_CCNEW, "ccnew" },
+ { TCPOPT_CCECHO, "" },
+ { TCPOPT_SIGNATURE, "md5" },
+ { TCPOPT_SCPS, "scps" },
+ { TCPOPT_UTO, "uto" },
+ { TCPOPT_TCPAO, "tcp-ao" },
+ { TCPOPT_MPTCP, "mptcp" },
+ { TCPOPT_FASTOPEN, "tfo" },
+ { TCPOPT_EXPERIMENT2, "exp" },
+ { 0, NULL }
+};
+
+static uint16_t
+tcp_cksum(netdissect_options *ndo,
+ const struct ip *ip,
+ const struct tcphdr *tp,
+ u_int len)
+{
+ return nextproto4_cksum(ndo, ip, (const uint8_t *)tp, len, len,
+ IPPROTO_TCP);
+}
+
+static uint16_t
+tcp6_cksum(netdissect_options *ndo,
+ const struct ip6_hdr *ip6,
+ const struct tcphdr *tp,
+ u_int len)
+{
+ return nextproto6_cksum(ndo, ip6, (const uint8_t *)tp, len, len,
+ IPPROTO_TCP);
+}
+
+void
+tcp_print(netdissect_options *ndo,
+ const u_char *bp, u_int length,
+ const u_char *bp2, int fragmented)
+{
+ const struct tcphdr *tp;
+ const struct ip *ip;
+ u_char flags;
+ u_int hlen;
+ char ch;
+ uint16_t sport, dport, win, urp;
+ uint32_t seq, ack, thseq, thack;
+ u_int utoval;
+ uint16_t magic;
+ int rev;
+ const struct ip6_hdr *ip6;
+ u_int header_len; /* Header length in bytes */
+
+ ndo->ndo_protocol = "tcp";
+ tp = (const struct tcphdr *)bp;
+ ip = (const struct ip *)bp2;
+ if (IP_V(ip) == 6)
+ ip6 = (const struct ip6_hdr *)bp2;
+ else
+ ip6 = NULL;
+ ch = '\0';
+ if (!ND_TTEST_2(tp->th_dport)) {
+ if (ip6) {
+ ND_PRINT("%s > %s:",
+ GET_IP6ADDR_STRING(ip6->ip6_src),
+ GET_IP6ADDR_STRING(ip6->ip6_dst));
+ } else {
+ ND_PRINT("%s > %s:",
+ GET_IPADDR_STRING(ip->ip_src),
+ GET_IPADDR_STRING(ip->ip_dst));
+ }
+ nd_print_trunc(ndo);
+ return;
+ }
+
+ sport = GET_BE_U_2(tp->th_sport);
+ dport = GET_BE_U_2(tp->th_dport);
+
+ if (ip6) {
+ if (GET_U_1(ip6->ip6_nxt) == IPPROTO_TCP) {
+ ND_PRINT("%s.%s > %s.%s: ",
+ GET_IP6ADDR_STRING(ip6->ip6_src),
+ tcpport_string(ndo, sport),
+ GET_IP6ADDR_STRING(ip6->ip6_dst),
+ tcpport_string(ndo, dport));
+ } else {
+ ND_PRINT("%s > %s: ",
+ tcpport_string(ndo, sport), tcpport_string(ndo, dport));
+ }
+ } else {
+ if (GET_U_1(ip->ip_p) == IPPROTO_TCP) {
+ ND_PRINT("%s.%s > %s.%s: ",
+ GET_IPADDR_STRING(ip->ip_src),
+ tcpport_string(ndo, sport),
+ GET_IPADDR_STRING(ip->ip_dst),
+ tcpport_string(ndo, dport));
+ } else {
+ ND_PRINT("%s > %s: ",
+ tcpport_string(ndo, sport), tcpport_string(ndo, dport));
+ }
+ }
+
+ ND_TCHECK_SIZE(tp);
+
+ hlen = TH_OFF(tp) * 4;
+
+ if (hlen < sizeof(*tp)) {
+ ND_PRINT(" tcp %u [bad hdr length %u - too short, < %zu]",
+ length - hlen, hlen, sizeof(*tp));
+ return;
+ }
+
+ seq = GET_BE_U_4(tp->th_seq);
+ ack = GET_BE_U_4(tp->th_ack);
+ win = GET_BE_U_2(tp->th_win);
+ urp = GET_BE_U_2(tp->th_urp);
+
+ if (ndo->ndo_qflag) {
+ ND_PRINT("tcp %u", length - hlen);
+ if (hlen > length) {
+ ND_PRINT(" [bad hdr length %u - too long, > %u]",
+ hlen, length);
+ }
+ return;
+ }
+
+ flags = GET_U_1(tp->th_flags);
+ ND_PRINT("Flags [%s]", bittok2str_nosep(tcp_flag_values, "none", flags));
+
+ if (!ndo->ndo_Sflag && (flags & TH_ACK)) {
+ /*
+ * Find (or record) the initial sequence numbers for
+ * this conversation. (we pick an arbitrary
+ * collating order so there's only one entry for
+ * both directions).
+ */
+ rev = 0;
+ if (ip6) {
+ struct tcp_seq_hash6 *th;
+ struct tcp_seq_hash6 *tcp_seq_hash;
+ const void *src, *dst;
+ struct tha6 tha;
+
+ tcp_seq_hash = tcp_seq_hash6;
+ src = (const void *)ip6->ip6_src;
+ dst = (const void *)ip6->ip6_dst;
+ if (sport > dport)
+ rev = 1;
+ else if (sport == dport) {
+ if (UNALIGNED_MEMCMP(src, dst, sizeof(ip6->ip6_dst)) > 0)
+ rev = 1;
+ }
+ if (rev) {
+ UNALIGNED_MEMCPY(&tha.src, dst, sizeof(ip6->ip6_dst));
+ UNALIGNED_MEMCPY(&tha.dst, src, sizeof(ip6->ip6_src));
+ tha.port = ((u_int)dport) << 16 | sport;
+ } else {
+ UNALIGNED_MEMCPY(&tha.dst, dst, sizeof(ip6->ip6_dst));
+ UNALIGNED_MEMCPY(&tha.src, src, sizeof(ip6->ip6_src));
+ tha.port = ((u_int)sport) << 16 | dport;
+ }
+
+ for (th = &tcp_seq_hash[tha.port % TSEQ_HASHSIZE];
+ th->nxt; th = th->nxt)
+ if (memcmp((char *)&tha, (char *)&th->addr,
+ sizeof(th->addr)) == 0)
+ break;
+
+ if (!th->nxt || (flags & TH_SYN)) {
+ /* didn't find it or new conversation */
+ /* calloc() return used by the 'tcp_seq_hash6'
+ hash table: do not free() */
+ if (th->nxt == NULL) {
+ th->nxt = (struct tcp_seq_hash6 *)
+ calloc(1, sizeof(*th));
+ if (th->nxt == NULL)
+ (*ndo->ndo_error)(ndo,
+ S_ERR_ND_MEM_ALLOC,
+ "%s: calloc", __func__);
+ }
+ th->addr = tha;
+ if (rev)
+ th->ack = seq, th->seq = ack - 1;
+ else
+ th->seq = seq, th->ack = ack - 1;
+ } else {
+ if (rev)
+ seq -= th->ack, ack -= th->seq;
+ else
+ seq -= th->seq, ack -= th->ack;
+ }
+
+ thseq = th->seq;
+ thack = th->ack;
+ } else {
+ struct tcp_seq_hash *th;
+ struct tcp_seq_hash *tcp_seq_hash;
+ struct tha tha;
+
+ tcp_seq_hash = tcp_seq_hash4;
+ if (sport > dport)
+ rev = 1;
+ else if (sport == dport) {
+ if (UNALIGNED_MEMCMP(ip->ip_src, ip->ip_dst, sizeof(ip->ip_dst)) > 0)
+ rev = 1;
+ }
+ if (rev) {
+ UNALIGNED_MEMCPY(&tha.src, ip->ip_dst,
+ sizeof(ip->ip_dst));
+ UNALIGNED_MEMCPY(&tha.dst, ip->ip_src,
+ sizeof(ip->ip_src));
+ tha.port = ((u_int)dport) << 16 | sport;
+ } else {
+ UNALIGNED_MEMCPY(&tha.dst, ip->ip_dst,
+ sizeof(ip->ip_dst));
+ UNALIGNED_MEMCPY(&tha.src, ip->ip_src,
+ sizeof(ip->ip_src));
+ tha.port = ((u_int)sport) << 16 | dport;
+ }
+
+ for (th = &tcp_seq_hash[tha.port % TSEQ_HASHSIZE];
+ th->nxt; th = th->nxt)
+ if (memcmp((char *)&tha, (char *)&th->addr,
+ sizeof(th->addr)) == 0)
+ break;
+
+ if (!th->nxt || (flags & TH_SYN)) {
+ /* didn't find it or new conversation */
+ /* calloc() return used by the 'tcp_seq_hash4'
+ hash table: do not free() */
+ if (th->nxt == NULL) {
+ th->nxt = (struct tcp_seq_hash *)
+ calloc(1, sizeof(*th));
+ if (th->nxt == NULL)
+ (*ndo->ndo_error)(ndo,
+ S_ERR_ND_MEM_ALLOC,
+ "%s: calloc", __func__);
+ }
+ th->addr = tha;
+ if (rev)
+ th->ack = seq, th->seq = ack - 1;
+ else
+ th->seq = seq, th->ack = ack - 1;
+ } else {
+ if (rev)
+ seq -= th->ack, ack -= th->seq;
+ else
+ seq -= th->seq, ack -= th->ack;
+ }
+
+ thseq = th->seq;
+ thack = th->ack;
+ }
+ } else {
+ /*fool gcc*/
+ thseq = thack = rev = 0;
+ }
+ if (hlen > length) {
+ ND_PRINT(" [bad hdr length %u - too long, > %u]",
+ hlen, length);
+ return;
+ }
+
+ if (ndo->ndo_vflag && !ndo->ndo_Kflag && !fragmented) {
+ /* Check the checksum, if possible. */
+ uint16_t sum, tcp_sum;
+
+ if (IP_V(ip) == 4) {
+ if (ND_TTEST_LEN(tp->th_sport, length)) {
+ sum = tcp_cksum(ndo, ip, tp, length);
+ tcp_sum = GET_BE_U_2(tp->th_sum);
+
+ ND_PRINT(", cksum 0x%04x", tcp_sum);
+ if (sum != 0)
+ ND_PRINT(" (incorrect -> 0x%04x)",
+ in_cksum_shouldbe(tcp_sum, sum));
+ else
+ ND_PRINT(" (correct)");
+ }
+ } else if (IP_V(ip) == 6) {
+ if (ND_TTEST_LEN(tp->th_sport, length)) {
+ sum = tcp6_cksum(ndo, ip6, tp, length);
+ tcp_sum = GET_BE_U_2(tp->th_sum);
+
+ ND_PRINT(", cksum 0x%04x", tcp_sum);
+ if (sum != 0)
+ ND_PRINT(" (incorrect -> 0x%04x)",
+ in_cksum_shouldbe(tcp_sum, sum));
+ else
+ ND_PRINT(" (correct)");
+
+ }
+ }
+ }
+
+ length -= hlen;
+ if (ndo->ndo_vflag > 1 || length > 0 || flags & (TH_SYN | TH_FIN | TH_RST)) {
+ ND_PRINT(", seq %u", seq);
+
+ if (length > 0) {
+ ND_PRINT(":%u", seq + length);
+ }
+ }
+
+ if (flags & TH_ACK) {
+ ND_PRINT(", ack %u", ack);
+ }
+
+ ND_PRINT(", win %u", win);
+
+ if (flags & TH_URG)
+ ND_PRINT(", urg %u", urp);
+ /*
+ * Handle any options.
+ */
+ if (hlen > sizeof(*tp)) {
+ const u_char *cp;
+ u_int i, opt, datalen;
+ u_int len;
+
+ hlen -= sizeof(*tp);
+ cp = (const u_char *)tp + sizeof(*tp);
+ ND_PRINT(", options [");
+ while (hlen > 0) {
+ if (ch != '\0')
+ ND_PRINT("%c", ch);
+ opt = GET_U_1(cp);
+ cp++;
+ if (ZEROLENOPT(opt))
+ len = 1;
+ else {
+ len = GET_U_1(cp);
+ cp++; /* total including type, len */
+ if (len < 2 || len > hlen)
+ goto bad;
+ --hlen; /* account for length byte */
+ }
+ --hlen; /* account for type byte */
+ datalen = 0;
+
+/* Bail if "l" bytes of data are not left or were not captured */
+#define LENCHECK(l) { if ((l) > hlen) goto bad; ND_TCHECK_LEN(cp, l); }
+
+
+ ND_PRINT("%s", tok2str(tcp_option_values, "unknown-%u", opt));
+
+ switch (opt) {
+
+ case TCPOPT_MAXSEG:
+ datalen = 2;
+ LENCHECK(datalen);
+ ND_PRINT(" %u", GET_BE_U_2(cp));
+ break;
+
+ case TCPOPT_WSCALE:
+ datalen = 1;
+ LENCHECK(datalen);
+ ND_PRINT(" %u", GET_U_1(cp));
+ break;
+
+ case TCPOPT_SACK:
+ datalen = len - 2;
+ if (datalen % 8 != 0) {
+ ND_PRINT(" invalid sack");
+ } else {
+ uint32_t s, e;
+
+ ND_PRINT(" %u ", datalen / 8);
+ for (i = 0; i < datalen; i += 8) {
+ LENCHECK(i + 4);
+ s = GET_BE_U_4(cp + i);
+ LENCHECK(i + 8);
+ e = GET_BE_U_4(cp + i + 4);
+ if (rev) {
+ s -= thseq;
+ e -= thseq;
+ } else {
+ s -= thack;
+ e -= thack;
+ }
+ ND_PRINT("{%u:%u}", s, e);
+ }
+ }
+ break;
+
+ case TCPOPT_CC:
+ case TCPOPT_CCNEW:
+ case TCPOPT_CCECHO:
+ case TCPOPT_ECHO:
+ case TCPOPT_ECHOREPLY:
+
+ /*
+ * those options share their semantics.
+ * fall through
+ */
+ datalen = 4;
+ LENCHECK(datalen);
+ ND_PRINT(" %u", GET_BE_U_4(cp));
+ break;
+
+ case TCPOPT_TIMESTAMP:
+ datalen = 8;
+ LENCHECK(datalen);
+ ND_PRINT(" val %u ecr %u",
+ GET_BE_U_4(cp),
+ GET_BE_U_4(cp + 4));
+ break;
+
+ case TCPOPT_SIGNATURE:
+ datalen = TCP_SIGLEN;
+ LENCHECK(datalen);
+ ND_PRINT(" ");
+#ifdef HAVE_LIBCRYPTO
+ switch (tcp_verify_signature(ndo, ip, tp,
+ bp + TH_OFF(tp) * 4, length, cp)) {
+
+ case SIGNATURE_VALID:
+ ND_PRINT("valid");
+ break;
+
+ case SIGNATURE_INVALID:
+ nd_print_invalid(ndo);
+ break;
+
+ case CANT_CHECK_SIGNATURE:
+ ND_PRINT("can't check - ");
+ for (i = 0; i < TCP_SIGLEN; ++i)
+ ND_PRINT("%02x",
+ GET_U_1(cp + i));
+ break;
+ }
+#else
+ for (i = 0; i < TCP_SIGLEN; ++i)
+ ND_PRINT("%02x", GET_U_1(cp + i));
+#endif
+ break;
+
+ case TCPOPT_SCPS:
+ datalen = 2;
+ LENCHECK(datalen);
+ ND_PRINT(" cap %02x id %u", GET_U_1(cp),
+ GET_U_1(cp + 1));
+ break;
+
+ case TCPOPT_TCPAO:
+ datalen = len - 2;
+ /* RFC 5925 Section 2.2:
+ * "The Length value MUST be greater than or equal to 4."
+ * (This includes the Kind and Length fields already processed
+ * at this point.)
+ */
+ if (datalen < 2) {
+ nd_print_invalid(ndo);
+ } else {
+ LENCHECK(1);
+ ND_PRINT(" keyid %u", GET_U_1(cp));
+ LENCHECK(2);
+ ND_PRINT(" rnextkeyid %u",
+ GET_U_1(cp + 1));
+ if (datalen > 2) {
+ ND_PRINT(" mac 0x");
+ for (i = 2; i < datalen; i++) {
+ LENCHECK(i + 1);
+ ND_PRINT("%02x",
+ GET_U_1(cp + i));
+ }
+ }
+ }
+ break;
+
+ case TCPOPT_EOL:
+ case TCPOPT_NOP:
+ case TCPOPT_SACKOK:
+ /*
+ * Nothing interesting.
+ * fall through
+ */
+ break;
+
+ case TCPOPT_UTO:
+ datalen = 2;
+ LENCHECK(datalen);
+ utoval = GET_BE_U_2(cp);
+ ND_PRINT(" 0x%x", utoval);
+ if (utoval & 0x0001)
+ utoval = (utoval >> 1) * 60;
+ else
+ utoval >>= 1;
+ ND_PRINT(" %u", utoval);
+ break;
+
+ case TCPOPT_MPTCP:
+ {
+ const u_char *snapend_save;
+ int ret;
+
+ datalen = len - 2;
+ LENCHECK(datalen);
+ /* Update the snapend to the end of the option
+ * before calling mptcp_print(). Some options
+ * (MPTCP or others) may be present after a
+ * MPTCP option. This prevents that, in
+ * mptcp_print(), the remaining length < the
+ * remaining caplen.
+ */
+ snapend_save = ndo->ndo_snapend;
+ ndo->ndo_snapend = ND_MIN(cp - 2 + len,
+ ndo->ndo_snapend);
+ ret = mptcp_print(ndo, cp - 2, len, flags);
+ ndo->ndo_snapend = snapend_save;
+ if (!ret)
+ goto bad;
+ break;
+ }
+
+ case TCPOPT_FASTOPEN:
+ datalen = len - 2;
+ LENCHECK(datalen);
+ ND_PRINT(" ");
+ print_tcp_fastopen_option(ndo, cp, datalen, FALSE);
+ break;
+
+ case TCPOPT_EXPERIMENT2:
+ datalen = len - 2;
+ LENCHECK(datalen);
+ if (datalen < 2)
+ goto bad;
+ /* RFC6994 */
+ magic = GET_BE_U_2(cp);
+ ND_PRINT("-");
+
+ switch(magic) {
+
+ case 0xf989: /* TCP Fast Open RFC 7413 */
+ print_tcp_fastopen_option(ndo, cp + 2, datalen - 2, TRUE);
+ break;
+
+ default:
+ /* Unknown magic number */
+ ND_PRINT("%04x", magic);
+ break;
+ }
+ break;
+
+ default:
+ datalen = len - 2;
+ if (datalen)
+ ND_PRINT(" 0x");
+ for (i = 0; i < datalen; ++i) {
+ LENCHECK(i + 1);
+ ND_PRINT("%02x", GET_U_1(cp + i));
+ }
+ break;
+ }
+
+ /* Account for data printed */
+ cp += datalen;
+ hlen -= datalen;
+
+ /* Check specification against observed length */
+ ++datalen; /* option octet */
+ if (!ZEROLENOPT(opt))
+ ++datalen; /* size octet */
+ if (datalen != len)
+ ND_PRINT("[len %u]", len);
+ ch = ',';
+ if (opt == TCPOPT_EOL)
+ break;
+ }
+ ND_PRINT("]");
+ }
+
+ /*
+ * Print length field before crawling down the stack.
+ */
+ ND_PRINT(", length %u", length);
+
+ if (length == 0)
+ return;
+
+ /*
+ * Decode payload if necessary.
+ */
+ header_len = TH_OFF(tp) * 4;
+ /*
+ * Do a bounds check before decoding the payload.
+ * At least the header data is required.
+ */
+ if (!ND_TTEST_LEN(bp, header_len)) {
+ ND_PRINT(" [remaining caplen(%u) < header length(%u)]",
+ ND_BYTES_AVAILABLE_AFTER(bp), header_len);
+ nd_trunc_longjmp(ndo);
+ }
+ bp += header_len;
+ if ((flags & TH_RST) && ndo->ndo_vflag) {
+ print_tcp_rst_data(ndo, bp, length);
+ return;
+ }
+
+ if (ndo->ndo_packettype) {
+ switch (ndo->ndo_packettype) {
+ case PT_ZMTP1:
+ zmtp1_print(ndo, bp, length);
+ break;
+ case PT_RESP:
+ resp_print(ndo, bp, length);
+ break;
+ case PT_DOMAIN:
+ /* over_tcp: TRUE, is_mdns: FALSE */
+ domain_print(ndo, bp, length, TRUE, FALSE);
+ break;
+ }
+ return;
+ }
+
+ if (IS_SRC_OR_DST_PORT(TELNET_PORT)) {
+ telnet_print(ndo, bp, length);
+ } else if (IS_SRC_OR_DST_PORT(SMTP_PORT)) {
+ ND_PRINT(": ");
+ smtp_print(ndo, bp, length);
+ } else if (IS_SRC_OR_DST_PORT(WHOIS_PORT)) {
+ ND_PRINT(": ");
+ whois_print(ndo, bp, length);
+ } else if (IS_SRC_OR_DST_PORT(BGP_PORT))
+ bgp_print(ndo, bp, length);
+ else if (IS_SRC_OR_DST_PORT(PPTP_PORT))
+ pptp_print(ndo, bp);
+ else if (IS_SRC_OR_DST_PORT(REDIS_PORT))
+ resp_print(ndo, bp, length);
+ else if (IS_SRC_OR_DST_PORT(SSH_PORT))
+ ssh_print(ndo, bp, length);
+#ifdef ENABLE_SMB
+ else if (IS_SRC_OR_DST_PORT(NETBIOS_SSN_PORT))
+ nbt_tcp_print(ndo, bp, length);
+ else if (IS_SRC_OR_DST_PORT(SMB_PORT))
+ smb_tcp_print(ndo, bp, length);
+#endif
+ else if (IS_SRC_OR_DST_PORT(BEEP_PORT))
+ beep_print(ndo, bp, length);
+ else if (IS_SRC_OR_DST_PORT(OPENFLOW_PORT_OLD) || IS_SRC_OR_DST_PORT(OPENFLOW_PORT_IANA))
+ openflow_print(ndo, bp, length);
+ else if (IS_SRC_OR_DST_PORT(FTP_PORT)) {
+ ND_PRINT(": ");
+ ftp_print(ndo, bp, length);
+ } else if (IS_SRC_OR_DST_PORT(HTTP_PORT) || IS_SRC_OR_DST_PORT(HTTP_PORT_ALT)) {
+ ND_PRINT(": ");
+ http_print(ndo, bp, length);
+ } else if (IS_SRC_OR_DST_PORT(RTSP_PORT) || IS_SRC_OR_DST_PORT(RTSP_PORT_ALT)) {
+ ND_PRINT(": ");
+ rtsp_print(ndo, bp, length);
+ } else if (IS_SRC_OR_DST_PORT(NAMESERVER_PORT)) {
+ /* over_tcp: TRUE, is_mdns: FALSE */
+ domain_print(ndo, bp, length, TRUE, FALSE);
+ } else if (IS_SRC_OR_DST_PORT(MSDP_PORT)) {
+ msdp_print(ndo, bp, length);
+ } else if (IS_SRC_OR_DST_PORT(RPKI_RTR_PORT)) {
+ rpki_rtr_print(ndo, bp, length);
+ } else if (IS_SRC_OR_DST_PORT(LDP_PORT)) {
+ ldp_print(ndo, bp, length);
+ } else if ((IS_SRC_OR_DST_PORT(NFS_PORT)) &&
+ length >= 4 && ND_TTEST_4(bp)) {
+ /*
+ * If data present, header length valid, and NFS port used,
+ * assume NFS.
+ * Pass offset of data plus 4 bytes for RPC TCP msg length
+ * to NFS print routines.
+ */
+ uint32_t fraglen;
+ const struct sunrpc_msg *rp;
+ enum sunrpc_msg_type direction;
+
+ fraglen = GET_BE_U_4(bp) & 0x7FFFFFFF;
+ if (fraglen > (length) - 4)
+ fraglen = (length) - 4;
+ rp = (const struct sunrpc_msg *)(bp + 4);
+ if (ND_TTEST_4(rp->rm_direction)) {
+ direction = (enum sunrpc_msg_type) GET_BE_U_4(rp->rm_direction);
+ if (dport == NFS_PORT && direction == SUNRPC_CALL) {
+ ND_PRINT(": NFS request xid %u ",
+ GET_BE_U_4(rp->rm_xid));
+ nfsreq_noaddr_print(ndo, (const u_char *)rp, fraglen, (const u_char *)ip);
+ return;
+ }
+ if (sport == NFS_PORT && direction == SUNRPC_REPLY) {
+ ND_PRINT(": NFS reply xid %u ",
+ GET_BE_U_4(rp->rm_xid));
+ nfsreply_noaddr_print(ndo, (const u_char *)rp, fraglen, (const u_char *)ip);
+ return;
+ }
+ }
+ }
+
+ return;
+bad:
+ ND_PRINT("[bad opt]");
+ if (ch != '\0')
+ ND_PRINT("]");
+ return;
+trunc:
+ nd_print_trunc(ndo);
+ if (ch != '\0')
+ ND_PRINT(">");
+}
+
+/*
+ * RFC1122 says the following on data in RST segments:
+ *
+ * 4.2.2.12 RST Segment: RFC-793 Section 3.4
+ *
+ * A TCP SHOULD allow a received RST segment to include data.
+ *
+ * DISCUSSION
+ * It has been suggested that a RST segment could contain
+ * ASCII text that encoded and explained the cause of the
+ * RST. No standard has yet been established for such
+ * data.
+ *
+ */
+
+static void
+print_tcp_rst_data(netdissect_options *ndo,
+ const u_char *sp, u_int length)
+{
+ u_char c;
+
+ ND_PRINT(ND_TTEST_LEN(sp, length) ? " [RST" : " [!RST");
+ if (length > MAX_RST_DATA_LEN) {
+ length = MAX_RST_DATA_LEN; /* can use -X for longer */
+ ND_PRINT("+"); /* indicate we truncate */
+ }
+ ND_PRINT(" ");
+ while (length && sp < ndo->ndo_snapend) {
+ c = GET_U_1(sp);
+ sp++;
+ fn_print_char(ndo, c);
+ length--;
+ }
+ ND_PRINT("]");
+}
+
+static void
+print_tcp_fastopen_option(netdissect_options *ndo, const u_char *cp,
+ u_int datalen, int exp)
+{
+ u_int i;
+
+ if (exp)
+ ND_PRINT("tfo");
+
+ if (datalen == 0) {
+ /* Fast Open Cookie Request */
+ ND_PRINT(" cookiereq");
+ } else {
+ /* Fast Open Cookie */
+ if (datalen % 2 != 0 || datalen < 4 || datalen > 16) {
+ nd_print_invalid(ndo);
+ } else {
+ ND_PRINT(" cookie ");
+ for (i = 0; i < datalen; ++i)
+ ND_PRINT("%02x", GET_U_1(cp + i));
+ }
+ }
+}
+
+#ifdef HAVE_LIBCRYPTO
+DIAG_OFF_DEPRECATION
+static int
+tcp_verify_signature(netdissect_options *ndo,
+ const struct ip *ip, const struct tcphdr *tp,
+ const u_char *data, u_int length, const u_char *rcvsig)
+{
+ struct tcphdr tp1;
+ u_char sig[TCP_SIGLEN];
+ char zero_proto = 0;
+ MD5_CTX ctx;
+ uint16_t savecsum, tlen;
+ const struct ip6_hdr *ip6;
+ uint32_t len32;
+ uint8_t nxt;
+
+ if (data + length > ndo->ndo_snapend) {
+ ND_PRINT("snaplen too short, ");
+ return (CANT_CHECK_SIGNATURE);
+ }
+
+ tp1 = *tp;
+
+ if (ndo->ndo_sigsecret == NULL) {
+ ND_PRINT("shared secret not supplied with -M, ");
+ return (CANT_CHECK_SIGNATURE);
+ }
+
+ MD5_Init(&ctx);
+ /*
+ * Step 1: Update MD5 hash with IP pseudo-header.
+ */
+ if (IP_V(ip) == 4) {
+ MD5_Update(&ctx, (const char *)&ip->ip_src, sizeof(ip->ip_src));
+ MD5_Update(&ctx, (const char *)&ip->ip_dst, sizeof(ip->ip_dst));
+ MD5_Update(&ctx, (const char *)&zero_proto, sizeof(zero_proto));
+ MD5_Update(&ctx, (const char *)&ip->ip_p, sizeof(ip->ip_p));
+ tlen = GET_BE_U_2(ip->ip_len) - IP_HL(ip) * 4;
+ tlen = htons(tlen);
+ MD5_Update(&ctx, (const char *)&tlen, sizeof(tlen));
+ } else if (IP_V(ip) == 6) {
+ ip6 = (const struct ip6_hdr *)ip;
+ MD5_Update(&ctx, (const char *)&ip6->ip6_src, sizeof(ip6->ip6_src));
+ MD5_Update(&ctx, (const char *)&ip6->ip6_dst, sizeof(ip6->ip6_dst));
+ len32 = htonl(GET_BE_U_2(ip6->ip6_plen));
+ MD5_Update(&ctx, (const char *)&len32, sizeof(len32));
+ nxt = 0;
+ MD5_Update(&ctx, (const char *)&nxt, sizeof(nxt));
+ MD5_Update(&ctx, (const char *)&nxt, sizeof(nxt));
+ MD5_Update(&ctx, (const char *)&nxt, sizeof(nxt));
+ nxt = IPPROTO_TCP;
+ MD5_Update(&ctx, (const char *)&nxt, sizeof(nxt));
+ } else {
+ ND_PRINT("IP version not 4 or 6, ");
+ return (CANT_CHECK_SIGNATURE);
+ }
+
+ /*
+ * Step 2: Update MD5 hash with TCP header, excluding options.
+ * The TCP checksum must be set to zero.
+ */
+ memcpy(&savecsum, tp1.th_sum, sizeof(savecsum));
+ memset(tp1.th_sum, 0, sizeof(tp1.th_sum));
+ MD5_Update(&ctx, (const char *)&tp1, sizeof(struct tcphdr));
+ memcpy(tp1.th_sum, &savecsum, sizeof(tp1.th_sum));
+ /*
+ * Step 3: Update MD5 hash with TCP segment data, if present.
+ */
+ if (length > 0)
+ MD5_Update(&ctx, data, length);
+ /*
+ * Step 4: Update MD5 hash with shared secret.
+ */
+ MD5_Update(&ctx, ndo->ndo_sigsecret, strlen(ndo->ndo_sigsecret));
+ MD5_Final(sig, &ctx);
+
+ if (memcmp(rcvsig, sig, TCP_SIGLEN) == 0)
+ return (SIGNATURE_VALID);
+ else
+ return (SIGNATURE_INVALID);
+}
+DIAG_ON_DEPRECATION
+#endif /* HAVE_LIBCRYPTO */
diff --git a/print-telnet.c b/print-telnet.c
new file mode 100644
index 0000000..ea7464f
--- /dev/null
+++ b/print-telnet.c
@@ -0,0 +1,540 @@
+/* $NetBSD: print-telnet.c,v 1.2 1999/10/11 12:40:12 sjg Exp $ */
+
+/*-
+ * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Simon J. Gerraty.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ * @(#)Copyright (c) 1994, Simon J. Gerraty.
+ *
+ * This is free software. It comes with NO WARRANTY.
+ * Permission to use, modify and distribute this source code
+ * is granted subject to the following conditions.
+ * 1/ that the above copyright notice and this notice
+ * are preserved in all copies.
+ */
+
+/* \summary: Telnet option printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+
+#include "netdissect.h"
+#include "extract.h"
+
+
+/* NetBSD: telnet.h,v 1.9 2001/06/11 01:50:50 wiz Exp */
+
+/*
+ * Definitions for the TELNET protocol.
+ */
+#define IAC 255 /* interpret as command: */
+#define DONT 254 /* you are not to use option */
+#define DO 253 /* please, you use option */
+#define WONT 252 /* I won't use option */
+#define WILL 251 /* I will use option */
+#define SB 250 /* interpret as subnegotiation */
+#define GA 249 /* you may reverse the line */
+#define EL 248 /* erase the current line */
+#define EC 247 /* erase the current character */
+#define AYT 246 /* are you there */
+#define AO 245 /* abort output--but let prog finish */
+#define IP 244 /* interrupt process--permanently */
+#define BREAK 243 /* break */
+#define DM 242 /* data mark--for connect. cleaning */
+#define NOP 241 /* nop */
+#define SE 240 /* end sub negotiation */
+#define EOR 239 /* end of record (transparent mode) */
+#define ABORT 238 /* Abort process */
+#define SUSP 237 /* Suspend process */
+#define xEOF 236 /* End of file: EOF is already used... */
+
+#define SYNCH 242 /* for telfunc calls */
+
+static const char *telcmds[] = {
+ "EOF", "SUSP", "ABORT", "EOR",
+ "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC",
+ "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0,
+};
+
+#define TELCMD_FIRST xEOF
+#define TELCMD_LAST IAC
+#define TELCMD_OK(x) ((unsigned int)(x) <= TELCMD_LAST && \
+ (unsigned int)(x) >= TELCMD_FIRST)
+#define TELCMD(x) telcmds[(x)-TELCMD_FIRST]
+
+/* telnet options */
+#define TELOPT_BINARY 0 /* 8-bit data path */
+#define TELOPT_ECHO 1 /* echo */
+#define TELOPT_RCP 2 /* prepare to reconnect */
+#define TELOPT_SGA 3 /* suppress go ahead */
+#define TELOPT_NAMS 4 /* approximate message size */
+#define TELOPT_STATUS 5 /* give status */
+#define TELOPT_TM 6 /* timing mark */
+#define TELOPT_RCTE 7 /* remote controlled transmission and echo */
+#define TELOPT_NAOL 8 /* negotiate about output line width */
+#define TELOPT_NAOP 9 /* negotiate about output page size */
+#define TELOPT_NAOCRD 10 /* negotiate about CR disposition */
+#define TELOPT_NAOHTS 11 /* negotiate about horizontal tabstops */
+#define TELOPT_NAOHTD 12 /* negotiate about horizontal tab disposition */
+#define TELOPT_NAOFFD 13 /* negotiate about formfeed disposition */
+#define TELOPT_NAOVTS 14 /* negotiate about vertical tab stops */
+#define TELOPT_NAOVTD 15 /* negotiate about vertical tab disposition */
+#define TELOPT_NAOLFD 16 /* negotiate about output LF disposition */
+#define TELOPT_XASCII 17 /* extended ascic character set */
+#define TELOPT_LOGOUT 18 /* force logout */
+#define TELOPT_BM 19 /* byte macro */
+#define TELOPT_DET 20 /* data entry terminal */
+#define TELOPT_SUPDUP 21 /* supdup protocol */
+#define TELOPT_SUPDUPOUTPUT 22 /* supdup output */
+#define TELOPT_SNDLOC 23 /* send location */
+#define TELOPT_TTYPE 24 /* terminal type */
+#define TELOPT_EOR 25 /* end or record */
+#define TELOPT_TUID 26 /* TACACS user identification */
+#define TELOPT_OUTMRK 27 /* output marking */
+#define TELOPT_TTYLOC 28 /* terminal location number */
+#define TELOPT_3270REGIME 29 /* 3270 regime */
+#define TELOPT_X3PAD 30 /* X.3 PAD */
+#define TELOPT_NAWS 31 /* window size */
+#define TELOPT_TSPEED 32 /* terminal speed */
+#define TELOPT_LFLOW 33 /* remote flow control */
+#define TELOPT_LINEMODE 34 /* Linemode option */
+#define TELOPT_XDISPLOC 35 /* X Display Location */
+#define TELOPT_OLD_ENVIRON 36 /* Old - Environment variables */
+#define TELOPT_AUTHENTICATION 37/* Authenticate */
+#define TELOPT_ENCRYPT 38 /* Encryption option */
+#define TELOPT_NEW_ENVIRON 39 /* New - Environment variables */
+#define TELOPT_EXOPL 255 /* extended-options-list */
+
+
+#define NTELOPTS (1+TELOPT_NEW_ENVIRON)
+static const char *telopts[NTELOPTS+1] = {
+ "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME",
+ "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP",
+ "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS",
+ "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
+ "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT",
+ "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD",
+ "TACACS UID", "OUTPUT MARKING", "TTYLOC",
+ "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW",
+ "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION",
+ "ENCRYPT", "NEW-ENVIRON",
+ 0,
+};
+#define TELOPT_FIRST TELOPT_BINARY
+#define TELOPT_LAST TELOPT_NEW_ENVIRON
+#define TELOPT_OK(x) ((unsigned int)(x) <= TELOPT_LAST)
+#define TELOPT(x) telopts[(x)-TELOPT_FIRST]
+
+/* sub-option qualifiers */
+#define TELQUAL_IS 0 /* option is... */
+#define TELQUAL_SEND 1 /* send option */
+#define TELQUAL_INFO 2 /* ENVIRON: informational version of IS */
+#define TELQUAL_REPLY 2 /* AUTHENTICATION: client version of IS */
+#define TELQUAL_NAME 3 /* AUTHENTICATION: client version of IS */
+
+#define LFLOW_OFF 0 /* Disable remote flow control */
+#define LFLOW_ON 1 /* Enable remote flow control */
+#define LFLOW_RESTART_ANY 2 /* Restart output on any char */
+#define LFLOW_RESTART_XON 3 /* Restart output only on XON */
+
+/*
+ * LINEMODE suboptions
+ */
+
+#define LM_MODE 1
+#define LM_FORWARDMASK 2
+#define LM_SLC 3
+
+#define MODE_EDIT 0x01
+#define MODE_TRAPSIG 0x02
+#define MODE_ACK 0x04
+#define MODE_SOFT_TAB 0x08
+#define MODE_LIT_ECHO 0x10
+
+#define MODE_MASK 0x1f
+
+#define SLC_SYNCH 1
+#define SLC_BRK 2
+#define SLC_IP 3
+#define SLC_AO 4
+#define SLC_AYT 5
+#define SLC_EOR 6
+#define SLC_ABORT 7
+#define SLC_EOF 8
+#define SLC_SUSP 9
+#define SLC_EC 10
+#define SLC_EL 11
+#define SLC_EW 12
+#define SLC_RP 13
+#define SLC_LNEXT 14
+#define SLC_XON 15
+#define SLC_XOFF 16
+#define SLC_FORW1 17
+#define SLC_FORW2 18
+#define SLC_MCL 19
+#define SLC_MCR 20
+#define SLC_MCWL 21
+#define SLC_MCWR 22
+#define SLC_MCBOL 23
+#define SLC_MCEOL 24
+#define SLC_INSRT 25
+#define SLC_OVER 26
+#define SLC_ECR 27
+#define SLC_EWR 28
+#define SLC_EBOL 29
+#define SLC_EEOL 30
+
+#define NSLC 30
+
+/*
+ * For backwards compatibility, we define SLC_NAMES to be the
+ * list of names if SLC_NAMES is not defined.
+ */
+#define SLC_NAMELIST "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \
+ "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \
+ "LNEXT", "XON", "XOFF", "FORW1", "FORW2", \
+ "MCL", "MCR", "MCWL", "MCWR", "MCBOL", \
+ "MCEOL", "INSRT", "OVER", "ECR", "EWR", \
+ "EBOL", "EEOL", \
+ 0,
+
+#ifdef SLC_NAMES
+const char *slc_names[] = {
+ SLC_NAMELIST
+};
+#else
+extern char *slc_names[];
+#define SLC_NAMES SLC_NAMELIST
+#endif
+
+#define SLC_NAME_OK(x) ((unsigned int)(x) <= NSLC)
+#define SLC_NAME(x) slc_names[x]
+
+#define SLC_NOSUPPORT 0
+#define SLC_CANTCHANGE 1
+#define SLC_VARIABLE 2
+#define SLC_DEFAULT 3
+#define SLC_LEVELBITS 0x03
+
+#define SLC_FUNC 0
+#define SLC_FLAGS 1
+#define SLC_VALUE 2
+
+#define SLC_ACK 0x80
+#define SLC_FLUSHIN 0x40
+#define SLC_FLUSHOUT 0x20
+
+#define OLD_ENV_VAR 1
+#define OLD_ENV_VALUE 0
+#define NEW_ENV_VAR 0
+#define NEW_ENV_VALUE 1
+#define ENV_ESC 2
+#define ENV_USERVAR 3
+
+/*
+ * AUTHENTICATION suboptions
+ */
+
+/*
+ * Who is authenticating who ...
+ */
+#define AUTH_WHO_CLIENT 0 /* Client authenticating server */
+#define AUTH_WHO_SERVER 1 /* Server authenticating client */
+#define AUTH_WHO_MASK 1
+
+#define AUTHTYPE_NULL 0
+#define AUTHTYPE_KERBEROS_V4 1
+#define AUTHTYPE_KERBEROS_V5 2
+#define AUTHTYPE_SPX 3
+#define AUTHTYPE_MINK 4
+#define AUTHTYPE_CNT 5
+
+#define AUTHTYPE_TEST 99
+
+#ifdef AUTH_NAMES
+const char *authtype_names[] = {
+ "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 0,
+};
+#else
+extern char *authtype_names[];
+#endif
+
+#define AUTHTYPE_NAME_OK(x) ((unsigned int)(x) < AUTHTYPE_CNT)
+#define AUTHTYPE_NAME(x) authtype_names[x]
+
+/*
+ * ENCRYPTion suboptions
+ */
+#define ENCRYPT_IS 0 /* I pick encryption type ... */
+#define ENCRYPT_SUPPORT 1 /* I support encryption types ... */
+#define ENCRYPT_REPLY 2 /* Initial setup response */
+#define ENCRYPT_START 3 /* Am starting to send encrypted */
+#define ENCRYPT_END 4 /* Am ending encrypted */
+#define ENCRYPT_REQSTART 5 /* Request you start encrypting */
+#define ENCRYPT_REQEND 6 /* Request you send encrypting */
+#define ENCRYPT_ENC_KEYID 7
+#define ENCRYPT_DEC_KEYID 8
+#define ENCRYPT_CNT 9
+
+#define ENCTYPE_ANY 0
+#define ENCTYPE_DES_CFB64 1
+#define ENCTYPE_DES_OFB64 2
+#define ENCTYPE_CNT 3
+
+#ifdef ENCRYPT_NAMES
+const char *encrypt_names[] = {
+ "IS", "SUPPORT", "REPLY", "START", "END",
+ "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID",
+ 0,
+};
+const char *enctype_names[] = {
+ "ANY", "DES_CFB64", "DES_OFB64", 0,
+};
+#else
+extern char *encrypt_names[];
+extern char *enctype_names[];
+#endif
+
+#define ENCRYPT_NAME_OK(x) ((unsigned int)(x) < ENCRYPT_CNT)
+#define ENCRYPT_NAME(x) encrypt_names[x]
+
+#define ENCTYPE_NAME_OK(x) ((unsigned int)(x) < ENCTYPE_CNT)
+#define ENCTYPE_NAME(x) enctype_names[x]
+
+/* normal */
+static const char *cmds[] = {
+ "IS", "SEND", "INFO",
+};
+
+/* 37: Authentication */
+static const char *authcmd[] = {
+ "IS", "SEND", "REPLY", "NAME",
+};
+static const char *authtype[] = {
+ "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK",
+ "SRP", "RSA", "SSL", NULL, NULL,
+ "LOKI", "SSA", "KEA_SJ", "KEA_SJ_INTEG", "DSS",
+ "NTLM",
+};
+
+/* 38: Encryption */
+static const char *enccmd[] = {
+ "IS", "SUPPORT", "REPLY", "START", "END",
+ "REQUEST-START", "REQUEST-END", "END_KEYID", "DEC_KEYID",
+};
+static const char *enctype[] = {
+ "NULL", "DES_CFB64", "DES_OFB64", "DES3_CFB64", "DES3_OFB64",
+ NULL, "CAST5_40_CFB64", "CAST5_40_OFB64", "CAST128_CFB64", "CAST128_OFB64",
+};
+
+#define STR_OR_ID(x, tab) \
+ (((x) < sizeof(tab)/sizeof(tab[0]) && tab[(x)]) ? tab[(x)] : numstr(x))
+
+static char *
+numstr(int x)
+{
+ static char buf[20];
+
+ snprintf(buf, sizeof(buf), "%#x", x);
+ return buf;
+}
+
+/* sp points to IAC byte */
+static int
+telnet_parse(netdissect_options *ndo, const u_char *sp, u_int length, int print)
+{
+ int i, x;
+ u_int c;
+ const u_char *osp, *p;
+#define FETCH(c, sp, length) \
+ do { \
+ if (length < 1) \
+ goto pktend; \
+ c = GET_U_1(sp); \
+ sp++; \
+ length--; \
+ } while (0)
+
+ osp = sp;
+
+ FETCH(c, sp, length);
+ if (c != IAC)
+ goto pktend;
+ FETCH(c, sp, length);
+ if (c == IAC) { /* <IAC><IAC>! */
+ if (print)
+ ND_PRINT("IAC IAC");
+ goto done;
+ }
+
+ i = c - TELCMD_FIRST;
+ if (i < 0 || i > IAC - TELCMD_FIRST)
+ goto pktend;
+
+ switch (c) {
+ case DONT:
+ case DO:
+ case WONT:
+ case WILL:
+ case SB:
+ /* DONT/DO/WONT/WILL x */
+ FETCH(x, sp, length);
+ if (x >= 0 && x < NTELOPTS) {
+ if (print)
+ ND_PRINT("%s %s", telcmds[i], telopts[x]);
+ } else {
+ if (print)
+ ND_PRINT("%s %#x", telcmds[i], x);
+ }
+ if (c != SB)
+ break;
+ /* IAC SB .... IAC SE */
+ p = sp;
+ while (length > (u_int)(p + 1 - sp)) {
+ if (GET_U_1(p) == IAC && GET_U_1(p + 1) == SE)
+ break;
+ p++;
+ }
+ if (GET_U_1(p) != IAC)
+ goto pktend;
+
+ switch (x) {
+ case TELOPT_AUTHENTICATION:
+ if (p <= sp)
+ break;
+ FETCH(c, sp, length);
+ if (print)
+ ND_PRINT(" %s", STR_OR_ID(c, authcmd));
+ if (p <= sp)
+ break;
+ FETCH(c, sp, length);
+ if (print)
+ ND_PRINT(" %s", STR_OR_ID(c, authtype));
+ break;
+ case TELOPT_ENCRYPT:
+ if (p <= sp)
+ break;
+ FETCH(c, sp, length);
+ if (print)
+ ND_PRINT(" %s", STR_OR_ID(c, enccmd));
+ if (p <= sp)
+ break;
+ FETCH(c, sp, length);
+ if (print)
+ ND_PRINT(" %s", STR_OR_ID(c, enctype));
+ break;
+ default:
+ if (p <= sp)
+ break;
+ FETCH(c, sp, length);
+ if (print)
+ ND_PRINT(" %s", STR_OR_ID(c, cmds));
+ break;
+ }
+ while (p > sp) {
+ FETCH(x, sp, length);
+ if (print)
+ ND_PRINT(" %#x", x);
+ }
+ /* terminating IAC SE */
+ if (print)
+ ND_PRINT(" SE");
+ sp += 2;
+ break;
+ default:
+ if (print)
+ ND_PRINT("%s", telcmds[i]);
+ goto done;
+ }
+
+done:
+ return (int)(sp - osp);
+
+pktend:
+ return -1;
+#undef FETCH
+}
+
+void
+telnet_print(netdissect_options *ndo, const u_char *sp, u_int length)
+{
+ int first = 1;
+ const u_char *osp;
+ int l;
+
+ ndo->ndo_protocol = "telnet";
+ osp = sp;
+
+ while (length > 0 && GET_U_1(sp) == IAC) {
+ /*
+ * Parse the Telnet command without printing it,
+ * to determine its length.
+ */
+ l = telnet_parse(ndo, sp, length, 0);
+ if (l < 0)
+ break;
+
+ /*
+ * now print it
+ */
+ if (ndo->ndo_Xflag && 2 < ndo->ndo_vflag) {
+ if (first)
+ ND_PRINT("\nTelnet:");
+ hex_print_with_offset(ndo, "\n", sp, l, (u_int)(sp - osp));
+ if (l > 8)
+ ND_PRINT("\n\t\t\t\t");
+ else
+ ND_PRINT("%*s\t", (8 - l) * 3, "");
+ } else
+ ND_PRINT("%s", (first) ? " [telnet " : ", ");
+
+ (void)telnet_parse(ndo, sp, length, 1);
+ first = 0;
+
+ sp += l;
+ length -= l;
+ }
+ if (!first) {
+ if (ndo->ndo_Xflag && 2 < ndo->ndo_vflag)
+ ND_PRINT("\n");
+ else
+ ND_PRINT("]");
+ }
+}
diff --git a/print-tftp.c b/print-tftp.c
new file mode 100644
index 0000000..39fc696
--- /dev/null
+++ b/print-tftp.c
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Trivial File Transfer Protocol (TFTP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+/*
+ * Trivial File Transfer Protocol (IEN-133)
+ */
+
+/*
+ * Packet types.
+ */
+#define RRQ 01 /* read request */
+#define WRQ 02 /* write request */
+#define DATA 03 /* data packet */
+#define ACK 04 /* acknowledgement */
+#define TFTP_ERROR 05 /* error code */
+#define OACK 06 /* option acknowledgement */
+
+/*
+ * Error codes.
+ */
+#define EUNDEF 0 /* not defined */
+#define ENOTFOUND 1 /* file not found */
+#define EACCESS 2 /* access violation */
+#define ENOSPACE 3 /* disk full or allocation exceeded */
+#define EBADOP 4 /* illegal TFTP operation */
+#define EBADID 5 /* unknown transfer ID */
+#define EEXISTS 6 /* file already exists */
+#define ENOUSER 7 /* no such user */
+
+
+/* op code to string mapping */
+static const struct tok op2str[] = {
+ { RRQ, "RRQ" }, /* read request */
+ { WRQ, "WRQ" }, /* write request */
+ { DATA, "DATA" }, /* data packet */
+ { ACK, "ACK" }, /* acknowledgement */
+ { TFTP_ERROR, "ERROR" }, /* error code */
+ { OACK, "OACK" }, /* option acknowledgement */
+ { 0, NULL }
+};
+
+/* error code to string mapping */
+static const struct tok err2str[] = {
+ { EUNDEF, "EUNDEF" }, /* not defined */
+ { ENOTFOUND, "ENOTFOUND" }, /* file not found */
+ { EACCESS, "EACCESS" }, /* access violation */
+ { ENOSPACE, "ENOSPACE" }, /* disk full or allocation exceeded */
+ { EBADOP, "EBADOP" }, /* illegal TFTP operation */
+ { EBADID, "EBADID" }, /* unknown transfer ID */
+ { EEXISTS, "EEXISTS" }, /* file already exists */
+ { ENOUSER, "ENOUSER" }, /* no such user */
+ { 0, NULL }
+};
+
+/*
+ * Print trivial file transfer program requests
+ */
+void
+tftp_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
+{
+ const char *cp;
+ u_int opcode;
+ u_int ui;
+
+ ndo->ndo_protocol = "tftp";
+
+ /* Print protocol */
+ nd_print_protocol_caps(ndo);
+ /* Print length */
+ ND_PRINT(", length %u", length);
+
+ /* Print tftp request type */
+ if (length < 2)
+ goto trunc;
+ opcode = GET_BE_U_2(bp);
+ cp = tok2str(op2str, "tftp-#%u", opcode);
+ ND_PRINT(", %s", cp);
+ /* Bail if bogus opcode */
+ if (*cp == 't')
+ return;
+ bp += 2;
+ length -= 2;
+
+ switch (opcode) {
+
+ case RRQ:
+ case WRQ:
+ if (length == 0)
+ goto trunc;
+ ND_PRINT(" ");
+ /* Print filename */
+ ND_PRINT("\"");
+ ui = nd_printztn(ndo, bp, length, ndo->ndo_snapend);
+ ND_PRINT("\"");
+ if (ui == 0)
+ goto trunc;
+ bp += ui;
+ length -= ui;
+
+ /* Print the mode - RRQ and WRQ only */
+ if (length == 0)
+ goto trunc; /* no mode */
+ ND_PRINT(" ");
+ ui = nd_printztn(ndo, bp, length, ndo->ndo_snapend);
+ if (ui == 0)
+ goto trunc;
+ bp += ui;
+ length -= ui;
+
+ /* Print options, if any */
+ while (length != 0) {
+ if (GET_U_1(bp) != '\0')
+ ND_PRINT(" ");
+ ui = nd_printztn(ndo, bp, length, ndo->ndo_snapend);
+ if (ui == 0)
+ goto trunc;
+ bp += ui;
+ length -= ui;
+ }
+ break;
+
+ case OACK:
+ /* Print options */
+ while (length != 0) {
+ if (GET_U_1(bp) != '\0')
+ ND_PRINT(" ");
+ ui = nd_printztn(ndo, bp, length, ndo->ndo_snapend);
+ if (ui == 0)
+ goto trunc;
+ bp += ui;
+ length -= ui;
+ }
+ break;
+
+ case ACK:
+ case DATA:
+ if (length < 2)
+ goto trunc; /* no block number */
+ ND_PRINT(" block %u", GET_BE_U_2(bp));
+ break;
+
+ case TFTP_ERROR:
+ /* Print error code string */
+ if (length < 2)
+ goto trunc; /* no error code */
+ ND_PRINT(" %s", tok2str(err2str, "tftp-err-#%u \"",
+ GET_BE_U_2(bp)));
+ bp += 2;
+ length -= 2;
+ /* Print error message string */
+ if (length == 0)
+ goto trunc; /* no error message */
+ ND_PRINT(" \"");
+ ui = nd_printztn(ndo, bp, length, ndo->ndo_snapend);
+ ND_PRINT("\"");
+ if (ui == 0)
+ goto trunc;
+ break;
+
+ default:
+ /* We shouldn't get here */
+ ND_PRINT("(unknown #%u)", opcode);
+ break;
+ }
+ return;
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-timed.c b/print-timed.c
new file mode 100644
index 0000000..ebd0ac8
--- /dev/null
+++ b/print-timed.c
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2000 Ben Smithurst <ben@scientia.demon.co.uk>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Berkeley UNIX Time Synchronization Protocol */
+
+/* specification: https://docs.freebsd.org/44doc/smm/12.timed/paper.pdf */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+struct tsp_timeval {
+ nd_int32_t tv_sec;
+ nd_int32_t tv_usec;
+};
+
+struct tsp {
+ nd_uint8_t tsp_type;
+ nd_uint8_t tsp_vers;
+ nd_uint16_t tsp_seq;
+ union {
+ struct tsp_timeval tspu_time;
+ nd_int8_t tspu_hopcnt;
+ } tsp_u;
+ nd_byte tsp_name[256]; /* null-terminated string up to 256 */
+};
+
+#define tsp_time tsp_u.tspu_time
+#define tsp_hopcnt tsp_u.tspu_hopcnt
+
+/*
+ * Command types.
+ */
+#define TSP_ANY 0 /* match any types */
+#define TSP_ADJTIME 1 /* send adjtime */
+#define TSP_ACK 2 /* generic acknowledgement */
+#define TSP_MASTERREQ 3 /* ask for master's name */
+#define TSP_MASTERACK 4 /* acknowledge master request */
+#define TSP_SETTIME 5 /* send network time */
+#define TSP_MASTERUP 6 /* inform slaves that master is up */
+#define TSP_SLAVEUP 7 /* slave is up but not polled */
+#define TSP_ELECTION 8 /* advance candidature for master */
+#define TSP_ACCEPT 9 /* support candidature of master */
+#define TSP_REFUSE 10 /* reject candidature of master */
+#define TSP_CONFLICT 11 /* two or more masters present */
+#define TSP_RESOLVE 12 /* masters' conflict resolution */
+#define TSP_QUIT 13 /* reject candidature if master is up */
+#define TSP_DATE 14 /* reset the time (date command) */
+#define TSP_DATEREQ 15 /* remote request to reset the time */
+#define TSP_DATEACK 16 /* acknowledge time setting */
+#define TSP_TRACEON 17 /* turn tracing on */
+#define TSP_TRACEOFF 18 /* turn tracing off */
+#define TSP_MSITE 19 /* find out master's site */
+#define TSP_MSITEREQ 20 /* remote master's site request */
+#define TSP_TEST 21 /* for testing election algo */
+#define TSP_SETDATE 22 /* New from date command */
+#define TSP_SETDATEREQ 23 /* New remote for above */
+#define TSP_LOOP 24 /* loop detection packet */
+static const struct tok tsptype_str[] = {
+ { TSP_ANY, "TSP_ANY" },
+ { TSP_ADJTIME, "TSP_ADJTIME" },
+ { TSP_ACK, "TSP_ACK" },
+ { TSP_MASTERREQ, "TSP_MASTERREQ" },
+ { TSP_MASTERACK, "TSP_MASTERACK" },
+ { TSP_SETTIME, "TSP_SETTIME" },
+ { TSP_MASTERUP, "TSP_MASTERUP" },
+ { TSP_SLAVEUP, "TSP_SLAVEUP" },
+ { TSP_ELECTION, "TSP_ELECTION" },
+ { TSP_ACCEPT, "TSP_ACCEPT" },
+ { TSP_REFUSE, "TSP_REFUSE" },
+ { TSP_CONFLICT, "TSP_CONFLICT" },
+ { TSP_RESOLVE, "TSP_RESOLVE" },
+ { TSP_QUIT, "TSP_QUIT" },
+ { TSP_DATE, "TSP_DATE" },
+ { TSP_DATEREQ, "TSP_DATEREQ" },
+ { TSP_DATEACK, "TSP_DATEACK" },
+ { TSP_TRACEON, "TSP_TRACEON" },
+ { TSP_TRACEOFF, "TSP_TRACEOFF" },
+ { TSP_MSITE, "TSP_MSITE" },
+ { TSP_MSITEREQ, "TSP_MSITEREQ" },
+ { TSP_TEST, "TSP_TEST" },
+ { TSP_SETDATE, "TSP_SETDATE" },
+ { TSP_SETDATEREQ, "TSP_SETDATEREQ" },
+ { TSP_LOOP, "TSP_LOOP" },
+ { 0, NULL }
+};
+
+void
+timed_print(netdissect_options *ndo,
+ const u_char *bp)
+{
+ const struct tsp *tsp = (const struct tsp *)bp;
+ uint8_t tsp_type;
+ int sec, usec;
+
+ ndo->ndo_protocol = "timed";
+ tsp_type = GET_U_1(tsp->tsp_type);
+ ND_PRINT("%s", tok2str(tsptype_str, "(tsp_type %#x)", tsp_type));
+
+ ND_PRINT(" vers %u", GET_U_1(tsp->tsp_vers));
+
+ ND_PRINT(" seq %u", GET_BE_U_2(tsp->tsp_seq));
+
+ switch (tsp_type) {
+ case TSP_LOOP:
+ ND_PRINT(" hopcnt %u", GET_U_1(tsp->tsp_hopcnt));
+ break;
+ case TSP_SETTIME:
+ case TSP_ADJTIME:
+ case TSP_SETDATE:
+ case TSP_SETDATEREQ:
+ sec = GET_BE_S_4(tsp->tsp_time.tv_sec);
+ usec = GET_BE_S_4(tsp->tsp_time.tv_usec);
+ /* XXX The comparison below is always false? */
+ if (usec < 0)
+ /* invalid, skip the rest of the packet */
+ return;
+ ND_PRINT(" time ");
+ if (sec < 0 && usec != 0) {
+ sec++;
+ if (sec == 0)
+ ND_PRINT("-");
+ usec = 1000000 - usec;
+ }
+ ND_PRINT("%d.%06d", sec, usec);
+ break;
+ }
+ ND_PRINT(" name ");
+ nd_printjnp(ndo, tsp->tsp_name, sizeof(tsp->tsp_name));
+}
diff --git a/print-tipc.c b/print-tipc.c
new file mode 100644
index 0000000..54179a4
--- /dev/null
+++ b/print-tipc.c
@@ -0,0 +1,354 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Transparent Inter-Process Communication (TIPC) protocol printer */
+
+/*
+ * specification:
+ * https://web.archive.org/web/20150302152944/http://tipc.sourceforge.net/doc/draft-spec-tipc-07.html
+ * https://web.archive.org/web/20161025110514/http://tipc.sourceforge.net/doc/tipc_message_formats.html
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "ethertype.h"
+#include "extract.h"
+
+
+#define TIPC_USER_LOW_IMPORTANCE 0
+#define TIPC_USER_MEDIUM_IMPORTANCE 1
+#define TIPC_USER_HIGH_IMPORTANCE 2
+#define TIPC_USER_CRITICAL_IMPORTANCE 3
+#define TIPC_USER_BCAST_PROTOCOL 5
+#define TIPC_USER_MSG_BUNDLER 6
+#define TIPC_USER_LINK_PROTOCOL 7
+#define TIPC_USER_CONN_MANAGER 8
+#define TIPC_USER_CHANGEOVER_PROTOCOL 10
+#define TIPC_USER_NAME_DISTRIBUTOR 11
+#define TIPC_USER_MSG_FRAGMENTER 12
+#define TIPC_USER_LINK_CONFIG 13
+
+#define TIPC_CONN_MSG 0
+#define TIPC_DIRECT_MSG 1
+#define TIPC_NAMED_MSG 2
+#define TIPC_MCAST_MSG 3
+
+#define TIPC_ZONE(addr) (((addr) >> 24) & 0xFF)
+#define TIPC_CLUSTER(addr) (((addr) >> 12) & 0xFFF)
+#define TIPC_NODE(addr) (((addr) >> 0) & 0xFFF)
+
+struct tipc_pkthdr {
+ nd_uint32_t w0;
+ nd_uint32_t w1;
+};
+
+#define TIPC_VER(w0) (((w0) >> 29) & 0x07)
+#define TIPC_USER(w0) (((w0) >> 25) & 0x0F)
+#define TIPC_HSIZE(w0) (((w0) >> 21) & 0x0F)
+#define TIPC_MSIZE(w0) (((w0) >> 0) & 0x1FFFF)
+#define TIPC_MTYPE(w1) (((w1) >> 29) & 0x07)
+#define TIPC_BROADCAST_ACK(w1) (((w1) >> 0) & 0xFFFF)
+#define TIPC_LINK_ACK(w2) (((w2) >> 16) & 0xFFFF)
+#define TIPC_LINK_SEQ(w2) (((w2) >> 0) & 0xFFFF)
+
+static const struct tok tipcuser_values[] = {
+ { TIPC_USER_LOW_IMPORTANCE, "Low Importance Data payload" },
+ { TIPC_USER_MEDIUM_IMPORTANCE, "Medium Importance Data payload" },
+ { TIPC_USER_HIGH_IMPORTANCE, "High Importance Data payload" },
+ { TIPC_USER_CRITICAL_IMPORTANCE, "Critical Importance Data payload" },
+ { TIPC_USER_BCAST_PROTOCOL, "Broadcast Link Protocol internal" },
+ { TIPC_USER_MSG_BUNDLER, "Message Bundler Protocol internal" },
+ { TIPC_USER_LINK_PROTOCOL, "Link State Protocol internal" },
+ { TIPC_USER_CONN_MANAGER, "Connection Manager internal" },
+ { TIPC_USER_CHANGEOVER_PROTOCOL, "Link Changeover Protocol internal" },
+ { TIPC_USER_NAME_DISTRIBUTOR, "Name Table Update Protocol internal" },
+ { TIPC_USER_MSG_FRAGMENTER, "Message Fragmentation Protocol internal" },
+ { TIPC_USER_LINK_CONFIG, "Neighbor Detection Protocol internal" },
+ { 0, NULL }
+};
+
+static const struct tok tipcmtype_values[] = {
+ { TIPC_CONN_MSG, "CONN_MSG" },
+ { TIPC_DIRECT_MSG, "MCAST_MSG" },
+ { TIPC_NAMED_MSG, "NAMED_MSG" },
+ { TIPC_MCAST_MSG, "DIRECT_MSG" },
+ { 0, NULL }
+};
+
+static const struct tok tipc_linkconf_mtype_values[] = {
+ { 0, "Link request" },
+ { 1, "Link response" },
+ { 0, NULL }
+};
+
+struct payload_tipc_pkthdr {
+ nd_uint32_t w0;
+ nd_uint32_t w1;
+ nd_uint32_t w2;
+ nd_uint32_t prev_node;
+ nd_uint32_t orig_port;
+ nd_uint32_t dest_port;
+ nd_uint32_t orig_node;
+ nd_uint32_t dest_node;
+ nd_uint32_t name_type;
+ nd_uint32_t w9;
+ nd_uint32_t wA;
+};
+
+struct internal_tipc_pkthdr {
+ nd_uint32_t w0;
+ nd_uint32_t w1;
+ nd_uint32_t w2;
+ nd_uint32_t prev_node;
+ nd_uint32_t w4;
+ nd_uint32_t w5;
+ nd_uint32_t orig_node;
+ nd_uint32_t dest_node;
+ nd_uint32_t trans_seq;
+ nd_uint32_t w9;
+};
+
+#define TIPC_SEQ_GAP(w1) (((w1) >> 16) & 0x1FFF)
+#define TIPC_BC_GAP_AFTER(w2) (((w2) >> 16) & 0xFFFF)
+#define TIPC_BC_GAP_TO(w2) (((w2) >> 0) & 0xFFFF)
+#define TIPC_LAST_SENT_FRAG(w4) (((w4) >> 16) & 0xFFFF)
+#define TIPC_NEXT_SENT_FRAG(w4) (((w4) >> 0) & 0xFFFF)
+#define TIPC_SESS_NO(w5) (((w5) >> 16) & 0xFFFF)
+#define TIPC_MSG_CNT(w9) (((w9) >> 16) & 0xFFFF)
+#define TIPC_LINK_TOL(w9) (((w9) >> 0) & 0xFFFF)
+
+struct link_conf_tipc_pkthdr {
+ nd_uint32_t w0;
+ nd_uint32_t w1;
+ nd_uint32_t dest_domain;
+ nd_uint32_t prev_node;
+ nd_uint32_t ntwrk_id;
+ nd_uint32_t w5;
+ nd_byte media_address[16];
+};
+
+#define TIPC_NODE_SIG(w1) (((w1) >> 0) & 0xFFFF)
+#define TIPC_MEDIA_ID(w5) (((w5) >> 0) & 0xFF)
+
+static void
+print_payload(netdissect_options *ndo, const struct payload_tipc_pkthdr *ap)
+{
+ uint32_t w0, w1, w2;
+ u_int user;
+ u_int hsize;
+ u_int msize;
+ u_int mtype;
+ u_int broadcast_ack;
+ u_int link_ack;
+ u_int link_seq;
+ u_int prev_node;
+ u_int orig_port;
+ u_int dest_port;
+ u_int orig_node;
+ u_int dest_node;
+
+ w0 = GET_BE_U_4(ap->w0);
+ user = TIPC_USER(w0);
+ hsize = TIPC_HSIZE(w0);
+ msize = TIPC_MSIZE(w0);
+ w1 = GET_BE_U_4(ap->w1);
+ mtype = TIPC_MTYPE(w1);
+ prev_node = GET_BE_U_4(ap->prev_node);
+ orig_port = GET_BE_U_4(ap->orig_port);
+ dest_port = GET_BE_U_4(ap->dest_port);
+ if (hsize <= 6) {
+ ND_PRINT("TIPC v%u.0 %u.%u.%u:%u > %u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s",
+ TIPC_VER(w0),
+ TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node),
+ orig_port, dest_port,
+ hsize*4, msize,
+ tok2str(tipcuser_values, "unknown", user),
+ tok2str(tipcmtype_values, "Unknown", mtype));
+ } else {
+ orig_node = GET_BE_U_4(ap->orig_node);
+ dest_node = GET_BE_U_4(ap->dest_node);
+ ND_PRINT("TIPC v%u.0 %u.%u.%u:%u > %u.%u.%u:%u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s",
+ TIPC_VER(w0),
+ TIPC_ZONE(orig_node), TIPC_CLUSTER(orig_node), TIPC_NODE(orig_node),
+ orig_port,
+ TIPC_ZONE(dest_node), TIPC_CLUSTER(dest_node), TIPC_NODE(dest_node),
+ dest_port,
+ hsize*4, msize,
+ tok2str(tipcuser_values, "unknown", user),
+ tok2str(tipcmtype_values, "Unknown", mtype));
+
+ if (ndo->ndo_vflag) {
+ broadcast_ack = TIPC_BROADCAST_ACK(w1);
+ w2 = GET_BE_U_4(ap->w2);
+ link_ack = TIPC_LINK_ACK(w2);
+ link_seq = TIPC_LINK_SEQ(w2);
+ ND_PRINT("\n\tPrevious Node %u.%u.%u, Broadcast Ack %u, Link Ack %u, Link Sequence %u",
+ TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node),
+ broadcast_ack, link_ack, link_seq);
+ }
+ }
+}
+
+static void
+print_internal(netdissect_options *ndo, const struct internal_tipc_pkthdr *ap)
+{
+ uint32_t w0, w1, w2, w4, w5, w9;
+ u_int user;
+ u_int hsize;
+ u_int msize;
+ u_int mtype;
+ u_int seq_gap;
+ u_int broadcast_ack;
+ u_int bc_gap_after;
+ u_int bc_gap_to;
+ u_int prev_node;
+ u_int last_sent_frag;
+ u_int next_sent_frag;
+ u_int sess_no;
+ u_int orig_node;
+ u_int dest_node;
+ u_int trans_seq;
+ u_int msg_cnt;
+ u_int link_tol;
+
+ w0 = GET_BE_U_4(ap->w0);
+ user = TIPC_USER(w0);
+ hsize = TIPC_HSIZE(w0);
+ msize = TIPC_MSIZE(w0);
+ w1 = GET_BE_U_4(ap->w1);
+ mtype = TIPC_MTYPE(w1);
+ orig_node = GET_BE_U_4(ap->orig_node);
+ dest_node = GET_BE_U_4(ap->dest_node);
+ ND_PRINT("TIPC v%u.0 %u.%u.%u > %u.%u.%u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s (0x%08x)",
+ TIPC_VER(w0),
+ TIPC_ZONE(orig_node), TIPC_CLUSTER(orig_node), TIPC_NODE(orig_node),
+ TIPC_ZONE(dest_node), TIPC_CLUSTER(dest_node), TIPC_NODE(dest_node),
+ hsize*4, msize,
+ tok2str(tipcuser_values, "unknown", user),
+ tok2str(tipcmtype_values, "Unknown", mtype), w1);
+
+ if (ndo->ndo_vflag) {
+ seq_gap = TIPC_SEQ_GAP(w1);
+ broadcast_ack = TIPC_BROADCAST_ACK(w1);
+ w2 = GET_BE_U_4(ap->w2);
+ bc_gap_after = TIPC_BC_GAP_AFTER(w2);
+ bc_gap_to = TIPC_BC_GAP_TO(w2);
+ prev_node = GET_BE_U_4(ap->prev_node);
+ w4 = GET_BE_U_4(ap->w4);
+ last_sent_frag = TIPC_LAST_SENT_FRAG(w4);
+ next_sent_frag = TIPC_NEXT_SENT_FRAG(w4);
+ w5 = GET_BE_U_4(ap->w5);
+ sess_no = TIPC_SESS_NO(w5);
+ trans_seq = GET_BE_U_4(ap->trans_seq);
+ w9 = GET_BE_U_4(ap->w9);
+ msg_cnt = TIPC_MSG_CNT(w9);
+ link_tol = TIPC_LINK_TOL(w9);
+ ND_PRINT("\n\tPrevious Node %u.%u.%u, Session No. %u, Broadcast Ack %u, Sequence Gap %u, Broadcast Gap After %u, Broadcast Gap To %u, Last Sent Packet No. %u, Next sent Packet No. %u, Transport Sequence %u, msg_count %u, Link Tolerance %u",
+ TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node),
+ sess_no, broadcast_ack, seq_gap, bc_gap_after, bc_gap_to,
+ last_sent_frag, next_sent_frag, trans_seq, msg_cnt,
+ link_tol);
+ }
+}
+
+static void
+print_link_conf(netdissect_options *ndo, const struct link_conf_tipc_pkthdr *ap)
+{
+ uint32_t w0, w1, w5;
+ u_int user;
+ u_int hsize;
+ u_int msize;
+ u_int mtype;
+ u_int node_sig;
+ u_int prev_node;
+ u_int dest_domain;
+ u_int ntwrk_id;
+ u_int media_id;
+
+ w0 = GET_BE_U_4(ap->w0);
+ user = TIPC_USER(w0);
+ hsize = TIPC_HSIZE(w0);
+ msize = TIPC_MSIZE(w0);
+ w1 = GET_BE_U_4(ap->w1);
+ mtype = TIPC_MTYPE(w1);
+ dest_domain = GET_BE_U_4(ap->dest_domain);
+ prev_node = GET_BE_U_4(ap->prev_node);
+
+ ND_PRINT("TIPC v%u.0 %u.%u.%u > %u.%u.%u, headerlength %u bytes, MessageSize %u bytes, %s, messageType %s",
+ TIPC_VER(w0),
+ TIPC_ZONE(prev_node), TIPC_CLUSTER(prev_node), TIPC_NODE(prev_node),
+ TIPC_ZONE(dest_domain), TIPC_CLUSTER(dest_domain), TIPC_NODE(dest_domain),
+ hsize*4, msize,
+ tok2str(tipcuser_values, "unknown", user),
+ tok2str(tipc_linkconf_mtype_values, "Unknown", mtype));
+ if (ndo->ndo_vflag) {
+ node_sig = TIPC_NODE_SIG(w1);
+ ntwrk_id = GET_BE_U_4(ap->ntwrk_id);
+ w5 = GET_BE_U_4(ap->w5);
+ media_id = TIPC_MEDIA_ID(w5);
+ ND_PRINT("\n\tNodeSignature %u, network_id %u, media_id %u",
+ node_sig, ntwrk_id, media_id);
+ }
+}
+
+void
+tipc_print(netdissect_options *ndo, const u_char *bp, u_int length _U_,
+ u_int caplen _U_)
+{
+ const struct tipc_pkthdr *ap;
+ uint32_t w0;
+ u_int user;
+
+ ndo->ndo_protocol = "tipc";
+ ap = (const struct tipc_pkthdr *)bp;
+ w0 = GET_BE_U_4(ap->w0);
+ user = TIPC_USER(w0);
+
+ switch (user)
+ {
+ case TIPC_USER_LOW_IMPORTANCE:
+ case TIPC_USER_MEDIUM_IMPORTANCE:
+ case TIPC_USER_HIGH_IMPORTANCE:
+ case TIPC_USER_CRITICAL_IMPORTANCE:
+ case TIPC_USER_NAME_DISTRIBUTOR:
+ case TIPC_USER_CONN_MANAGER:
+ print_payload(ndo, (const struct payload_tipc_pkthdr *)bp);
+ break;
+
+ case TIPC_USER_LINK_CONFIG:
+ print_link_conf(ndo, (const struct link_conf_tipc_pkthdr *)bp);
+ break;
+
+ case TIPC_USER_BCAST_PROTOCOL:
+ case TIPC_USER_MSG_BUNDLER:
+ case TIPC_USER_LINK_PROTOCOL:
+ case TIPC_USER_CHANGEOVER_PROTOCOL:
+ case TIPC_USER_MSG_FRAGMENTER:
+ print_internal(ndo, (const struct internal_tipc_pkthdr *)bp);
+ break;
+
+ }
+}
diff --git a/print-token.c b/print-token.c
new file mode 100644
index 0000000..bcb7258
--- /dev/null
+++ b/print-token.c
@@ -0,0 +1,250 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Hacked version of print-ether.c Larry Lile <lile@stdio.com>
+ *
+ * Further tweaked to more closely resemble print-fddi.c
+ * Guy Harris <guy@alum.mit.edu>
+ */
+
+/* \summary: Token Ring printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+/*
+ * Copyright (c) 1998, Larry Lile
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice unmodified, this list of conditions, and the following
+ * disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#define TOKEN_HDRLEN 14
+#define ROUTING_SEGMENT_MAX 16
+#define IS_SOURCE_ROUTED(trp) ((trp)->token_shost[0] & 0x80)
+#define FRAME_TYPE(trp) ((GET_U_1((trp)->token_fc) & 0xC0) >> 6)
+#define TOKEN_FC_LLC 1
+
+#define BROADCAST(trp) ((GET_BE_U_2((trp)->token_rcf) & 0xE000) >> 13)
+#define RIF_LENGTH(trp) ((GET_BE_U_2((trp)->token_rcf) & 0x1f00) >> 8)
+#define DIRECTION(trp) ((GET_BE_U_2((trp)->token_rcf) & 0x0080) >> 7)
+#define LARGEST_FRAME(trp) ((GET_BE_U_2((trp)->token_rcf) & 0x0070) >> 4)
+#define RING_NUMBER(trp, x) ((GET_BE_U_2((trp)->token_rseg[x]) & 0xfff0) >> 4)
+#define BRIDGE_NUMBER(trp, x) (GET_BE_U_2((trp)->token_rseg[x]) & 0x000f)
+#define SEGMENT_COUNT(trp) ((int)((RIF_LENGTH(trp) - 2) / 2))
+
+struct token_header {
+ nd_uint8_t token_ac;
+ nd_uint8_t token_fc;
+ nd_mac_addr token_dhost;
+ nd_mac_addr token_shost;
+ nd_uint16_t token_rcf;
+ nd_uint16_t token_rseg[ROUTING_SEGMENT_MAX];
+};
+
+
+/* Extract src, dst addresses */
+static void
+extract_token_addrs(const struct token_header *trp, char *fsrc, char *fdst)
+{
+ memcpy(fdst, (const char *)trp->token_dhost, 6);
+ memcpy(fsrc, (const char *)trp->token_shost, 6);
+}
+
+/*
+ * Print the TR MAC header
+ */
+static void
+token_hdr_print(netdissect_options *ndo,
+ const struct token_header *trp, u_int length,
+ const u_char *fsrc, const u_char *fdst)
+{
+ const char *srcname, *dstname;
+
+ srcname = etheraddr_string(ndo, fsrc);
+ dstname = etheraddr_string(ndo, fdst);
+
+ if (!ndo->ndo_qflag)
+ ND_PRINT("%02x %02x ",
+ GET_U_1(trp->token_ac),
+ GET_U_1(trp->token_fc));
+ ND_PRINT("%s > %s, length %u: ",
+ srcname, dstname,
+ length);
+}
+
+static const char *broadcast_indicator[] = {
+ "Non-Broadcast", "Non-Broadcast",
+ "Non-Broadcast", "Non-Broadcast",
+ "All-routes", "All-routes",
+ "Single-route", "Single-route"
+};
+
+static const char *direction[] = {
+ "Forward", "Backward"
+};
+
+static const char *largest_frame[] = {
+ "516",
+ "1500",
+ "2052",
+ "4472",
+ "8144",
+ "11407",
+ "17800",
+ "??"
+};
+
+u_int
+token_print(netdissect_options *ndo, const u_char *p, u_int length, u_int caplen)
+{
+ const struct token_header *trp;
+ int llc_hdrlen;
+ nd_mac_addr srcmac, dstmac;
+ struct lladdr_info src, dst;
+ u_int route_len = 0, hdr_len = TOKEN_HDRLEN;
+ int seg;
+
+ ndo->ndo_protocol = "token-ring";
+ trp = (const struct token_header *)p;
+
+ if (caplen < TOKEN_HDRLEN) {
+ nd_print_trunc(ndo);
+ return hdr_len;
+ }
+
+ /*
+ * Get the TR addresses into a canonical form
+ */
+ extract_token_addrs(trp, (char*)srcmac, (char*)dstmac);
+
+ /* Adjust for source routing information in the MAC header */
+ if (IS_SOURCE_ROUTED(trp)) {
+ /* Clear source-routed bit */
+ srcmac[0] &= 0x7f;
+
+ if (ndo->ndo_eflag)
+ token_hdr_print(ndo, trp, length, srcmac, dstmac);
+
+ if (caplen < TOKEN_HDRLEN + 2) {
+ nd_print_trunc(ndo);
+ return hdr_len;
+ }
+ route_len = RIF_LENGTH(trp);
+ hdr_len += route_len;
+ if (caplen < hdr_len) {
+ nd_print_trunc(ndo);
+ return hdr_len;
+ }
+ if (ndo->ndo_vflag) {
+ ND_PRINT("%s ", broadcast_indicator[BROADCAST(trp)]);
+ ND_PRINT("%s", direction[DIRECTION(trp)]);
+
+ for (seg = 0; seg < SEGMENT_COUNT(trp); seg++)
+ ND_PRINT(" [%u:%u]", RING_NUMBER(trp, seg),
+ BRIDGE_NUMBER(trp, seg));
+ } else {
+ ND_PRINT("rt = %x", GET_BE_U_2(trp->token_rcf));
+
+ for (seg = 0; seg < SEGMENT_COUNT(trp); seg++)
+ ND_PRINT(":%x",
+ GET_BE_U_2(trp->token_rseg[seg]));
+ }
+ ND_PRINT(" (%s) ", largest_frame[LARGEST_FRAME(trp)]);
+ } else {
+ if (ndo->ndo_eflag)
+ token_hdr_print(ndo, trp, length, srcmac, dstmac);
+ }
+
+ src.addr = srcmac;
+ src.addr_string = etheraddr_string;
+ dst.addr = dstmac;
+ dst.addr_string = etheraddr_string;
+
+ /* Skip over token ring MAC header and routing information */
+ length -= hdr_len;
+ p += hdr_len;
+ caplen -= hdr_len;
+
+ /* Frame Control field determines interpretation of packet */
+ if (FRAME_TYPE(trp) == TOKEN_FC_LLC) {
+ /* Try to print the LLC-layer header & higher layers */
+ llc_hdrlen = llc_print(ndo, p, length, caplen, &src, &dst);
+ if (llc_hdrlen < 0) {
+ /* packet type not known, print raw packet */
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ llc_hdrlen = -llc_hdrlen;
+ }
+ hdr_len += llc_hdrlen;
+ } else {
+ /* Some kinds of TR packet we cannot handle intelligently */
+ /* XXX - dissect MAC packets if frame type is 0 */
+ if (!ndo->ndo_eflag)
+ token_hdr_print(ndo, trp, length + TOKEN_HDRLEN + route_len,
+ srcmac, dstmac);
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(p, caplen);
+ }
+ return (hdr_len);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the TR header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+token_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
+{
+ ndo->ndo_protocol = "token-ring";
+ ndo->ndo_ll_hdr_len += token_print(ndo, p, h->len, h->caplen);
+}
diff --git a/print-udld.c b/print-udld.c
new file mode 100644
index 0000000..aec1d9e
--- /dev/null
+++ b/print-udld.c
@@ -0,0 +1,207 @@
+/*
+ * Copyright (c) 1998-2007 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Carles Kishimoto <carles.kishimoto@gmail.com>
+ */
+
+/* \summary: Cisco UniDirectional Link Detection (UDLD) protocol printer */
+
+/* specification: RFC 5171 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+
+#define UDLD_HEADER_LEN 4
+#define UDLD_TLV_HEADER_LEN 4
+#define UDLD_DEVICE_ID_TLV 0x0001
+#define UDLD_PORT_ID_TLV 0x0002
+#define UDLD_ECHO_TLV 0x0003
+#define UDLD_MESSAGE_INTERVAL_TLV 0x0004
+#define UDLD_TIMEOUT_INTERVAL_TLV 0x0005
+#define UDLD_DEVICE_NAME_TLV 0x0006
+#define UDLD_SEQ_NUMBER_TLV 0x0007
+
+static const struct tok udld_tlv_values[] = {
+ { UDLD_DEVICE_ID_TLV, "Device-ID TLV"},
+ { UDLD_PORT_ID_TLV, "Port-ID TLV"},
+ { UDLD_ECHO_TLV, "Echo TLV"},
+ { UDLD_MESSAGE_INTERVAL_TLV, "Message Interval TLV"},
+ { UDLD_TIMEOUT_INTERVAL_TLV, "Timeout Interval TLV"},
+ { UDLD_DEVICE_NAME_TLV, "Device Name TLV"},
+ { UDLD_SEQ_NUMBER_TLV,"Sequence Number TLV"},
+ { 0, NULL}
+};
+
+static const struct tok udld_code_values[] = {
+ { 0x00, "Reserved"},
+ { 0x01, "Probe message"},
+ { 0x02, "Echo message"},
+ { 0x03, "Flush message"},
+ { 0, NULL}
+};
+
+static const struct tok udld_flags_bitmap_str[] = {
+ { 1U << 0, "RT" },
+ { 1U << 1, "RSY" },
+ { 1U << 2, "MBZ-2" },
+ { 1U << 3, "MBZ-3" },
+ { 1U << 4, "MBZ-4" },
+ { 1U << 5, "MBZ-5" },
+ { 1U << 6, "MBZ-6" },
+ { 1U << 7, "MBZ-7" },
+ { 0, NULL}
+};
+
+/*
+ * UDLD's Protocol Data Unit format:
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Ver | Opcode | Flags | Checksum |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | List of TLVs (variable length list) |
+ * | ... |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * TLV format:
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | TYPE | LENGTH |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | VALUE |
+ * | ... |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * LENGTH: Length in bytes of the Type, Length, and Value fields.
+ */
+
+#define UDLD_EXTRACT_VERSION(x) (((x)&0xe0)>>5)
+#define UDLD_EXTRACT_OPCODE(x) ((x)&0x1f)
+
+void
+udld_print(netdissect_options *ndo,
+ const u_char *tptr, u_int length)
+{
+ uint8_t ver, code, flags;
+
+ ndo->ndo_protocol = "udld";
+ if (length < UDLD_HEADER_LEN)
+ goto invalid;
+
+ ver = UDLD_EXTRACT_VERSION(GET_U_1(tptr));
+ code = UDLD_EXTRACT_OPCODE(GET_U_1(tptr));
+ tptr += 1;
+ length -= 1;
+
+ flags = GET_U_1(tptr);
+ tptr += 1;
+ length -= 1;
+
+ ND_PRINT("UDLDv%u, Code %s (%x), Flags [%s] (0x%02x), length %u",
+ ver,
+ tok2str(udld_code_values, "Reserved", code),
+ code,
+ bittok2str(udld_flags_bitmap_str, "none", flags),
+ flags,
+ length + 2);
+
+ /*
+ * In non-verbose mode, just print version and opcode type
+ */
+ if (ndo->ndo_vflag < 1) {
+ goto tcheck_remainder;
+ }
+
+ ND_PRINT("\n\tChecksum 0x%04x (unverified)", GET_BE_U_2(tptr));
+ tptr += 2;
+ length -= 2;
+
+ while (length) {
+ uint16_t type, len;
+
+ if (length < UDLD_TLV_HEADER_LEN)
+ goto invalid;
+
+ type = GET_BE_U_2(tptr);
+ tptr += 2;
+ length -= 2;
+
+ len = GET_BE_U_2(tptr);
+ tptr += 2;
+ length -= 2;
+
+ ND_PRINT("\n\t%s (0x%04x) TLV, length %u",
+ tok2str(udld_tlv_values, "Unknown", type),
+ type, len);
+
+ /* infinite loop check */
+ if (len <= UDLD_TLV_HEADER_LEN)
+ goto invalid;
+
+ len -= UDLD_TLV_HEADER_LEN;
+ if (length < len)
+ goto invalid;
+
+ switch (type) {
+ case UDLD_DEVICE_ID_TLV:
+ case UDLD_PORT_ID_TLV:
+ case UDLD_DEVICE_NAME_TLV:
+ ND_PRINT(", ");
+ nd_printjnp(ndo, tptr, len);
+ break;
+
+ case UDLD_ECHO_TLV:
+ ND_PRINT(", ");
+ (void)nd_printn(ndo, tptr, len, NULL);
+ break;
+
+ case UDLD_MESSAGE_INTERVAL_TLV:
+ case UDLD_TIMEOUT_INTERVAL_TLV:
+ if (len != 1)
+ goto invalid;
+ ND_PRINT(", %us", (GET_U_1(tptr)));
+ break;
+
+ case UDLD_SEQ_NUMBER_TLV:
+ if (len != 4)
+ goto invalid;
+ ND_PRINT(", %u", GET_BE_U_4(tptr));
+ break;
+
+ default:
+ ND_TCHECK_LEN(tptr, len);
+ break;
+ }
+ tptr += len;
+ length -= len;
+ }
+
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+tcheck_remainder:
+ ND_TCHECK_LEN(tptr, length);
+}
diff --git a/print-udp.c b/print-udp.c
new file mode 100644
index 0000000..769cbe4
--- /dev/null
+++ b/print-udp.c
@@ -0,0 +1,743 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: UDP printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+#include "appletalk.h"
+
+#include "udp.h"
+
+#include "ip.h"
+#include "ip6.h"
+#include "ipproto.h"
+#include "rpc_auth.h"
+#include "rpc_msg.h"
+
+#include "nfs.h"
+
+
+struct rtcphdr {
+ nd_uint16_t rh_flags; /* T:2 P:1 CNT:5 PT:8 */
+ nd_uint16_t rh_len; /* length of message (in words) */
+ nd_uint32_t rh_ssrc; /* synchronization src id */
+};
+
+typedef struct {
+ nd_uint32_t upper; /* more significant 32 bits */
+ nd_uint32_t lower; /* less significant 32 bits */
+} ntp64;
+
+/*
+ * Sender report.
+ */
+struct rtcp_sr {
+ ntp64 sr_ntp; /* 64-bit ntp timestamp */
+ nd_uint32_t sr_ts; /* reference media timestamp */
+ nd_uint32_t sr_np; /* no. packets sent */
+ nd_uint32_t sr_nb; /* no. bytes sent */
+};
+
+/*
+ * Receiver report.
+ * Time stamps are middle 32-bits of ntp timestamp.
+ */
+struct rtcp_rr {
+ nd_uint32_t rr_srcid; /* sender being reported */
+ nd_uint32_t rr_nl; /* no. packets lost */
+ nd_uint32_t rr_ls; /* extended last seq number received */
+ nd_uint32_t rr_dv; /* jitter (delay variance) */
+ nd_uint32_t rr_lsr; /* orig. ts from last rr from this src */
+ nd_uint32_t rr_dlsr; /* time from recpt of last rr to xmit time */
+};
+
+/*XXX*/
+#define RTCP_PT_SR 200
+#define RTCP_PT_RR 201
+#define RTCP_PT_SDES 202
+#define RTCP_SDES_CNAME 1
+#define RTCP_SDES_NAME 2
+#define RTCP_SDES_EMAIL 3
+#define RTCP_SDES_PHONE 4
+#define RTCP_SDES_LOC 5
+#define RTCP_SDES_TOOL 6
+#define RTCP_SDES_NOTE 7
+#define RTCP_SDES_PRIV 8
+#define RTCP_PT_BYE 203
+#define RTCP_PT_APP 204
+
+static void
+vat_print(netdissect_options *ndo, const u_char *hdr, u_int length)
+{
+ /* vat/vt audio */
+ u_int ts;
+
+ ndo->ndo_protocol = "vat";
+ if (length < 2) {
+ ND_PRINT("udp/va/vat, length %u < 2", length);
+ return;
+ }
+ ts = GET_BE_U_2(hdr);
+ if ((ts & 0xf060) != 0) {
+ /* probably vt */
+ ND_PRINT("udp/vt %u %u / %u",
+ length,
+ ts & 0x3ff, ts >> 10);
+ } else {
+ /* probably vat */
+ uint32_t i0, i1;
+
+ if (length < 8) {
+ ND_PRINT("udp/vat, length %u < 8", length);
+ return;
+ }
+ i0 = GET_BE_U_4(&((const u_int *)hdr)[0]);
+ i1 = GET_BE_U_4(&((const u_int *)hdr)[1]);
+ ND_PRINT("udp/vat %u c%u %u%s",
+ length - 8,
+ i0 & 0xffff,
+ i1, i0 & 0x800000? "*" : "");
+ /* audio format */
+ if (i0 & 0x1f0000)
+ ND_PRINT(" f%u", (i0 >> 16) & 0x1f);
+ if (i0 & 0x3f000000)
+ ND_PRINT(" s%u", (i0 >> 24) & 0x3f);
+ }
+}
+
+static void
+rtp_print(netdissect_options *ndo, const u_char *hdr, u_int len)
+{
+ /* rtp v1 or v2 */
+ const u_int *ip = (const u_int *)hdr;
+ u_int hasopt, hasext, contype, hasmarker, dlen;
+ uint32_t i0, i1;
+ const char * ptype;
+
+ ndo->ndo_protocol = "rtp";
+ if (len < 8) {
+ ND_PRINT("udp/rtp, length %u < 8", len);
+ return;
+ }
+ i0 = GET_BE_U_4(&((const u_int *)hdr)[0]);
+ i1 = GET_BE_U_4(&((const u_int *)hdr)[1]);
+ dlen = len - 8;
+ ip += 2;
+ len >>= 2;
+ len -= 2;
+ hasopt = 0;
+ hasext = 0;
+ if ((i0 >> 30) == 1) {
+ /* rtp v1 - draft-ietf-avt-rtp-04 */
+ hasopt = i0 & 0x800000;
+ contype = (i0 >> 16) & 0x3f;
+ hasmarker = i0 & 0x400000;
+ ptype = "rtpv1";
+ } else {
+ /* rtp v2 - RFC 3550 */
+ if (dlen < 4) {
+ ND_PRINT("udp/rtp, length %u < 12", dlen + 8);
+ return;
+ }
+ hasext = i0 & 0x10000000;
+ contype = (i0 >> 16) & 0x7f;
+ hasmarker = i0 & 0x800000;
+ dlen -= 4;
+ ptype = "rtp";
+ ip += 1;
+ len -= 1;
+ }
+ ND_PRINT("udp/%s %u c%u %s%s %u %u",
+ ptype,
+ dlen,
+ contype,
+ (hasopt || hasext)? "+" : "",
+ hasmarker? "*" : "",
+ i0 & 0xffff,
+ i1);
+ if (ndo->ndo_vflag) {
+ ND_PRINT(" %u", GET_BE_U_4(&((const u_int *)hdr)[2]));
+ if (hasopt) {
+ u_int i2, optlen;
+ do {
+ i2 = GET_BE_U_4(ip);
+ optlen = (i2 >> 16) & 0xff;
+ if (optlen == 0 || optlen > len) {
+ ND_PRINT(" !opt");
+ return;
+ }
+ ip += optlen;
+ len -= optlen;
+ } while ((int)i2 >= 0);
+ }
+ if (hasext) {
+ u_int i2, extlen;
+ i2 = GET_BE_U_4(ip);
+ extlen = (i2 & 0xffff) + 1;
+ if (extlen > len) {
+ ND_PRINT(" !ext");
+ return;
+ }
+ ip += extlen;
+ }
+ if (contype == 0x1f) /*XXX H.261 */
+ ND_PRINT(" 0x%04x", GET_BE_U_4(ip) >> 16);
+ }
+}
+
+static const u_char *
+rtcp_print(netdissect_options *ndo, const u_char *hdr, const u_char *ep)
+{
+ /* rtp v2 control (rtcp) */
+ const struct rtcp_rr *rr = 0;
+ const struct rtcp_sr *sr;
+ const struct rtcphdr *rh = (const struct rtcphdr *)hdr;
+ u_int len;
+ uint16_t flags;
+ u_int cnt;
+ double ts, dts;
+
+ ndo->ndo_protocol = "rtcp";
+ if ((const u_char *)(rh + 1) > ep)
+ goto trunc;
+ ND_TCHECK_SIZE(rh);
+ len = (GET_BE_U_2(rh->rh_len) + 1) * 4;
+ flags = GET_BE_U_2(rh->rh_flags);
+ cnt = (flags >> 8) & 0x1f;
+ switch (flags & 0xff) {
+ case RTCP_PT_SR:
+ sr = (const struct rtcp_sr *)(rh + 1);
+ ND_PRINT(" sr");
+ if (len != cnt * sizeof(*rr) + sizeof(*sr) + sizeof(*rh))
+ ND_PRINT(" [%u]", len);
+ if (ndo->ndo_vflag)
+ ND_PRINT(" %u", GET_BE_U_4(rh->rh_ssrc));
+ if ((const u_char *)(sr + 1) > ep)
+ goto trunc;
+ ND_TCHECK_SIZE(sr);
+ ts = (double)(GET_BE_U_4(sr->sr_ntp.upper)) +
+ ((double)(GET_BE_U_4(sr->sr_ntp.lower)) /
+ FMAXINT);
+ ND_PRINT(" @%.2f %u %up %ub", ts, GET_BE_U_4(sr->sr_ts),
+ GET_BE_U_4(sr->sr_np), GET_BE_U_4(sr->sr_nb));
+ rr = (const struct rtcp_rr *)(sr + 1);
+ break;
+ case RTCP_PT_RR:
+ ND_PRINT(" rr");
+ if (len != cnt * sizeof(*rr) + sizeof(*rh))
+ ND_PRINT(" [%u]", len);
+ rr = (const struct rtcp_rr *)(rh + 1);
+ if (ndo->ndo_vflag)
+ ND_PRINT(" %u", GET_BE_U_4(rh->rh_ssrc));
+ break;
+ case RTCP_PT_SDES:
+ ND_PRINT(" sdes %u", len);
+ if (ndo->ndo_vflag)
+ ND_PRINT(" %u", GET_BE_U_4(rh->rh_ssrc));
+ cnt = 0;
+ break;
+ case RTCP_PT_BYE:
+ ND_PRINT(" bye %u", len);
+ if (ndo->ndo_vflag)
+ ND_PRINT(" %u", GET_BE_U_4(rh->rh_ssrc));
+ cnt = 0;
+ break;
+ default:
+ ND_PRINT(" type-0x%x %u", flags & 0xff, len);
+ cnt = 0;
+ break;
+ }
+ if (cnt > 1)
+ ND_PRINT(" c%u", cnt);
+ while (cnt != 0) {
+ if ((const u_char *)(rr + 1) > ep)
+ goto trunc;
+ ND_TCHECK_SIZE(rr);
+ if (ndo->ndo_vflag)
+ ND_PRINT(" %u", GET_BE_U_4(rr->rr_srcid));
+ ts = (double)(GET_BE_U_4(rr->rr_lsr)) / 65536.;
+ dts = (double)(GET_BE_U_4(rr->rr_dlsr)) / 65536.;
+ ND_PRINT(" %ul %us %uj @%.2f+%.2f",
+ GET_BE_U_4(rr->rr_nl) & 0x00ffffff,
+ GET_BE_U_4(rr->rr_ls),
+ GET_BE_U_4(rr->rr_dv), ts, dts);
+ cnt--;
+ }
+ return (hdr + len);
+
+trunc:
+ nd_print_trunc(ndo);
+ return ep;
+}
+
+static uint16_t udp_cksum(netdissect_options *ndo, const struct ip *ip,
+ const struct udphdr *up,
+ u_int len)
+{
+ return nextproto4_cksum(ndo, ip, (const uint8_t *)(const void *)up, len, len,
+ IPPROTO_UDP);
+}
+
+static uint16_t udp6_cksum(netdissect_options *ndo, const struct ip6_hdr *ip6,
+ const struct udphdr *up, u_int len)
+{
+ return nextproto6_cksum(ndo, ip6, (const uint8_t *)(const void *)up, len, len,
+ IPPROTO_UDP);
+}
+
+static void
+udpipaddr_print(netdissect_options *ndo, const struct ip *ip, int sport, int dport)
+{
+ const struct ip6_hdr *ip6;
+
+ if (IP_V(ip) == 6)
+ ip6 = (const struct ip6_hdr *)ip;
+ else
+ ip6 = NULL;
+
+ if (ip6) {
+ if (GET_U_1(ip6->ip6_nxt) == IPPROTO_UDP) {
+ if (sport == -1) {
+ ND_PRINT("%s > %s: ",
+ GET_IP6ADDR_STRING(ip6->ip6_src),
+ GET_IP6ADDR_STRING(ip6->ip6_dst));
+ } else {
+ ND_PRINT("%s.%s > %s.%s: ",
+ GET_IP6ADDR_STRING(ip6->ip6_src),
+ udpport_string(ndo, (uint16_t)sport),
+ GET_IP6ADDR_STRING(ip6->ip6_dst),
+ udpport_string(ndo, (uint16_t)dport));
+ }
+ } else {
+ if (sport != -1) {
+ ND_PRINT("%s > %s: ",
+ udpport_string(ndo, (uint16_t)sport),
+ udpport_string(ndo, (uint16_t)dport));
+ }
+ }
+ } else {
+ if (GET_U_1(ip->ip_p) == IPPROTO_UDP) {
+ if (sport == -1) {
+ ND_PRINT("%s > %s: ",
+ GET_IPADDR_STRING(ip->ip_src),
+ GET_IPADDR_STRING(ip->ip_dst));
+ } else {
+ ND_PRINT("%s.%s > %s.%s: ",
+ GET_IPADDR_STRING(ip->ip_src),
+ udpport_string(ndo, (uint16_t)sport),
+ GET_IPADDR_STRING(ip->ip_dst),
+ udpport_string(ndo, (uint16_t)dport));
+ }
+ } else {
+ if (sport != -1) {
+ ND_PRINT("%s > %s: ",
+ udpport_string(ndo, (uint16_t)sport),
+ udpport_string(ndo, (uint16_t)dport));
+ }
+ }
+ }
+}
+
+void
+udp_print(netdissect_options *ndo, const u_char *bp, u_int length,
+ const u_char *bp2, int fragmented, u_int ttl_hl)
+{
+ const struct udphdr *up;
+ const struct ip *ip;
+ const u_char *cp;
+ const u_char *ep = ndo->ndo_snapend;
+ uint16_t sport, dport;
+ u_int ulen;
+ const struct ip6_hdr *ip6;
+
+ ndo->ndo_protocol = "udp";
+ up = (const struct udphdr *)bp;
+ ip = (const struct ip *)bp2;
+ if (IP_V(ip) == 6)
+ ip6 = (const struct ip6_hdr *)bp2;
+ else
+ ip6 = NULL;
+ if (!ND_TTEST_2(up->uh_dport)) {
+ udpipaddr_print(ndo, ip, -1, -1);
+ goto trunc;
+ }
+
+ sport = GET_BE_U_2(up->uh_sport);
+ dport = GET_BE_U_2(up->uh_dport);
+
+ if (length < sizeof(struct udphdr)) {
+ udpipaddr_print(ndo, ip, sport, dport);
+ ND_PRINT("truncated-udp %u", length);
+ return;
+ }
+ if (!ND_TTEST_2(up->uh_ulen)) {
+ udpipaddr_print(ndo, ip, sport, dport);
+ goto trunc;
+ }
+ ulen = GET_BE_U_2(up->uh_ulen);
+ /*
+ * IPv6 Jumbo Datagrams; see RFC 2675.
+ * If the length is zero, and the length provided to us is
+ * > 65535, use the provided length as the length.
+ */
+ if (ulen == 0 && length > 65535)
+ ulen = length;
+ if (ulen < sizeof(struct udphdr)) {
+ udpipaddr_print(ndo, ip, sport, dport);
+ ND_PRINT("truncated-udplength %u", ulen);
+ return;
+ }
+ ulen -= sizeof(struct udphdr);
+ length -= sizeof(struct udphdr);
+ if (ulen < length)
+ length = ulen;
+
+ cp = (const u_char *)(up + 1);
+ if (cp > ndo->ndo_snapend) {
+ udpipaddr_print(ndo, ip, sport, dport);
+ goto trunc;
+ }
+
+ if (ndo->ndo_packettype) {
+ const struct sunrpc_msg *rp;
+ enum sunrpc_msg_type direction;
+
+ switch (ndo->ndo_packettype) {
+
+ case PT_VAT:
+ udpipaddr_print(ndo, ip, sport, dport);
+ vat_print(ndo, cp, length);
+ break;
+
+ case PT_WB:
+ udpipaddr_print(ndo, ip, sport, dport);
+ wb_print(ndo, cp, length);
+ break;
+
+ case PT_RPC:
+ rp = (const struct sunrpc_msg *)cp;
+ direction = (enum sunrpc_msg_type) GET_BE_U_4(rp->rm_direction);
+ if (direction == SUNRPC_CALL)
+ sunrpc_print(ndo, (const u_char *)rp, length,
+ (const u_char *)ip);
+ else
+ nfsreply_print(ndo, (const u_char *)rp, length,
+ (const u_char *)ip); /*XXX*/
+ break;
+
+ case PT_RTP:
+ udpipaddr_print(ndo, ip, sport, dport);
+ rtp_print(ndo, cp, length);
+ break;
+
+ case PT_RTCP:
+ udpipaddr_print(ndo, ip, sport, dport);
+ while (cp < ep)
+ cp = rtcp_print(ndo, cp, ep);
+ break;
+
+ case PT_SNMP:
+ udpipaddr_print(ndo, ip, sport, dport);
+ snmp_print(ndo, cp, length);
+ break;
+
+ case PT_CNFP:
+ udpipaddr_print(ndo, ip, sport, dport);
+ cnfp_print(ndo, cp);
+ break;
+
+ case PT_TFTP:
+ udpipaddr_print(ndo, ip, sport, dport);
+ tftp_print(ndo, cp, length);
+ break;
+
+ case PT_AODV:
+ udpipaddr_print(ndo, ip, sport, dport);
+ aodv_print(ndo, cp, length,
+ ip6 != NULL);
+ break;
+
+ case PT_RADIUS:
+ udpipaddr_print(ndo, ip, sport, dport);
+ radius_print(ndo, cp, length);
+ break;
+
+ case PT_VXLAN:
+ udpipaddr_print(ndo, ip, sport, dport);
+ vxlan_print(ndo, cp, length);
+ break;
+
+ case PT_PGM:
+ case PT_PGM_ZMTP1:
+ udpipaddr_print(ndo, ip, sport, dport);
+ pgm_print(ndo, cp, length, bp2);
+ break;
+ case PT_LMP:
+ udpipaddr_print(ndo, ip, sport, dport);
+ lmp_print(ndo, cp, length);
+ break;
+ case PT_PTP:
+ udpipaddr_print(ndo, ip, sport, dport);
+ ptp_print(ndo, cp, length);
+ break;
+ case PT_SOMEIP:
+ udpipaddr_print(ndo, ip, sport, dport);
+ someip_print(ndo, cp, length);
+ break;
+ case PT_DOMAIN:
+ udpipaddr_print(ndo, ip, sport, dport);
+ /* over_tcp: FALSE, is_mdns: FALSE */
+ domain_print(ndo, cp, length, FALSE, FALSE);
+ break;
+ }
+ return;
+ }
+
+ udpipaddr_print(ndo, ip, sport, dport);
+ if (!ndo->ndo_qflag) {
+ const struct sunrpc_msg *rp;
+ enum sunrpc_msg_type direction;
+
+ rp = (const struct sunrpc_msg *)cp;
+ if (ND_TTEST_4(rp->rm_direction)) {
+ direction = (enum sunrpc_msg_type) GET_BE_U_4(rp->rm_direction);
+ if (dport == NFS_PORT && direction == SUNRPC_CALL) {
+ ND_PRINT("NFS request xid %u ",
+ GET_BE_U_4(rp->rm_xid));
+ nfsreq_noaddr_print(ndo, (const u_char *)rp, length,
+ (const u_char *)ip);
+ return;
+ }
+ if (sport == NFS_PORT && direction == SUNRPC_REPLY) {
+ ND_PRINT("NFS reply xid %u ",
+ GET_BE_U_4(rp->rm_xid));
+ nfsreply_noaddr_print(ndo, (const u_char *)rp, length,
+ (const u_char *)ip);
+ return;
+ }
+#ifdef notdef
+ if (dport == SUNRPC_PORT && direction == SUNRPC_CALL) {
+ sunrpc_print((const u_char *)rp, length, (const u_char *)ip);
+ return;
+ }
+#endif
+ }
+ }
+
+ if (ndo->ndo_vflag && !ndo->ndo_Kflag && !fragmented) {
+ /* Check the checksum, if possible. */
+ uint16_t sum, udp_sum;
+
+ /*
+ * XXX - do this even if vflag == 1?
+ * TCP does, and we do so for UDP-over-IPv6.
+ */
+ if (IP_V(ip) == 4 && (ndo->ndo_vflag > 1)) {
+ udp_sum = GET_BE_U_2(up->uh_sum);
+ if (udp_sum == 0) {
+ ND_PRINT("[no cksum] ");
+ } else if (ND_TTEST_LEN(cp, length)) {
+ sum = udp_cksum(ndo, ip, up, length + sizeof(struct udphdr));
+
+ if (sum != 0) {
+ ND_PRINT("[bad udp cksum 0x%04x -> 0x%04x!] ",
+ udp_sum,
+ in_cksum_shouldbe(udp_sum, sum));
+ } else
+ ND_PRINT("[udp sum ok] ");
+ }
+ }
+ else if (IP_V(ip) == 6) {
+ /* for IPv6, UDP checksum is mandatory */
+ if (ND_TTEST_LEN(cp, length)) {
+ sum = udp6_cksum(ndo, ip6, up, length + sizeof(struct udphdr));
+ udp_sum = GET_BE_U_2(up->uh_sum);
+
+ if (sum != 0) {
+ ND_PRINT("[bad udp cksum 0x%04x -> 0x%04x!] ",
+ udp_sum,
+ in_cksum_shouldbe(udp_sum, sum));
+ } else
+ ND_PRINT("[udp sum ok] ");
+ }
+ }
+ }
+
+ if (!ndo->ndo_qflag) {
+ if (IS_SRC_OR_DST_PORT(NAMESERVER_PORT))
+ /* over_tcp: FALSE, is_mdns: FALSE */
+ domain_print(ndo, cp, length, FALSE, FALSE);
+ else if (IS_SRC_OR_DST_PORT(MULTICASTDNS_PORT))
+ /* over_tcp: FALSE, is_mdns: TRUE */
+ domain_print(ndo, cp, length, FALSE, TRUE);
+ else if (IS_SRC_OR_DST_PORT(TIMED_PORT))
+ timed_print(ndo, (const u_char *)cp);
+ else if (IS_SRC_OR_DST_PORT(TFTP_PORT))
+ tftp_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(BOOTPC_PORT) || IS_SRC_OR_DST_PORT(BOOTPS_PORT))
+ bootp_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(RIP_PORT))
+ rip_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(AODV_PORT))
+ aodv_print(ndo, cp, length,
+ ip6 != NULL);
+ else if (IS_SRC_OR_DST_PORT(ISAKMP_PORT))
+ isakmp_print(ndo, cp, length, bp2);
+ else if (IS_SRC_OR_DST_PORT(ISAKMP_PORT_NATT))
+ isakmp_rfc3948_print(ndo, cp, length, bp2, IP_V(ip), fragmented, ttl_hl);
+ else if (IS_SRC_OR_DST_PORT(ISAKMP_PORT_USER1) || IS_SRC_OR_DST_PORT(ISAKMP_PORT_USER2))
+ isakmp_print(ndo, cp, length, bp2);
+ else if (IS_SRC_OR_DST_PORT(SNMP_PORT) || IS_SRC_OR_DST_PORT(SNMPTRAP_PORT))
+ snmp_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(NTP_PORT))
+ ntp_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(KERBEROS_PORT) || IS_SRC_OR_DST_PORT(KERBEROS_SEC_PORT))
+ krb_print(ndo, (const u_char *)cp);
+ else if (IS_SRC_OR_DST_PORT(L2TP_PORT))
+ l2tp_print(ndo, cp, length);
+#ifdef ENABLE_SMB
+ else if (IS_SRC_OR_DST_PORT(NETBIOS_NS_PORT))
+ nbt_udp137_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(NETBIOS_DGRAM_PORT))
+ nbt_udp138_print(ndo, cp, length);
+#endif
+ else if (dport == VAT_PORT)
+ vat_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(ZEPHYR_SRV_PORT) || IS_SRC_OR_DST_PORT(ZEPHYR_CLT_PORT))
+ zephyr_print(ndo, cp, length);
+ /*
+ * Since there are 10 possible ports to check, I think
+ * a <> test would be more efficient
+ */
+ else if ((sport >= RX_PORT_LOW && sport <= RX_PORT_HIGH) ||
+ (dport >= RX_PORT_LOW && dport <= RX_PORT_HIGH))
+ rx_print(ndo, cp, length, sport, dport,
+ (const u_char *) ip);
+ else if (IS_SRC_OR_DST_PORT(RIPNG_PORT))
+ ripng_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(DHCP6_SERV_PORT) || IS_SRC_OR_DST_PORT(DHCP6_CLI_PORT))
+ dhcp6_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(AHCP_PORT))
+ ahcp_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(BABEL_PORT) || IS_SRC_OR_DST_PORT(BABEL_PORT_OLD))
+ babel_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(HNCP_PORT))
+ hncp_print(ndo, cp, length);
+ /*
+ * Kludge in test for whiteboard packets.
+ */
+ else if (dport == WB_PORT)
+ wb_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(CISCO_AUTORP_PORT))
+ cisco_autorp_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(RADIUS_PORT) ||
+ IS_SRC_OR_DST_PORT(RADIUS_NEW_PORT) ||
+ IS_SRC_OR_DST_PORT(RADIUS_ACCOUNTING_PORT) ||
+ IS_SRC_OR_DST_PORT(RADIUS_NEW_ACCOUNTING_PORT) ||
+ IS_SRC_OR_DST_PORT(RADIUS_CISCO_COA_PORT) ||
+ IS_SRC_OR_DST_PORT(RADIUS_COA_PORT) )
+ radius_print(ndo, cp, length);
+ else if (dport == HSRP_PORT)
+ hsrp_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(LWRES_PORT))
+ lwres_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(LDP_PORT))
+ ldp_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(OLSR_PORT))
+ olsr_print(ndo, cp, length,
+ (IP_V(ip) == 6) ? 1 : 0);
+ else if (IS_SRC_OR_DST_PORT(MPLS_LSP_PING_PORT))
+ lspping_print(ndo, cp, length);
+ else if (sport == BCM_LI_PORT)
+ bcm_li_print(ndo, cp, length);
+ else if (dport == BFD_CONTROL_PORT ||
+ dport == BFD_MULTIHOP_PORT ||
+ dport == BFD_LAG_PORT ||
+ dport == BFD_ECHO_PORT )
+ bfd_print(ndo, cp, length, dport);
+ else if (IS_SRC_OR_DST_PORT(LMP_PORT))
+ lmp_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(VQP_PORT))
+ vqp_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(SFLOW_PORT))
+ sflow_print(ndo, cp, length);
+ else if (dport == LWAPP_CONTROL_PORT)
+ lwapp_control_print(ndo, cp, length, 1);
+ else if (sport == LWAPP_CONTROL_PORT)
+ lwapp_control_print(ndo, cp, length, 0);
+ else if (IS_SRC_OR_DST_PORT(LWAPP_DATA_PORT))
+ lwapp_data_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(SIP_PORT))
+ sip_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(SYSLOG_PORT))
+ syslog_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(OTV_PORT))
+ otv_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(VXLAN_PORT))
+ vxlan_print(ndo, cp, length);
+ else if (dport == GENEVE_PORT)
+ geneve_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(LISP_CONTROL_PORT))
+ lisp_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(VXLAN_GPE_PORT))
+ vxlan_gpe_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(ZEP_PORT))
+ zep_print(ndo, cp, length);
+ else if (IS_SRC_OR_DST_PORT(MPLS_PORT))
+ mpls_print(ndo, cp, length);
+ else if (ND_TTEST_1(((const struct LAP *)cp)->type) &&
+ GET_U_1(((const struct LAP *)cp)->type) == lapDDP &&
+ (atalk_port(sport) || atalk_port(dport))) {
+ if (ndo->ndo_vflag)
+ ND_PRINT("kip ");
+ llap_print(ndo, cp, length);
+ } else if (IS_SRC_OR_DST_PORT(PTP_EVENT_PORT) ||
+ IS_SRC_OR_DST_PORT(PTP_GENERAL_PORT)) {
+ ptp_print(ndo, cp, length);
+ } else if (IS_SRC_OR_DST_PORT(SOMEIP_PORT))
+ someip_print(ndo, cp, length);
+ else {
+ if (ulen > length && !fragmented)
+ ND_PRINT("UDP, bad length %u > %u",
+ ulen, length);
+ else
+ ND_PRINT("UDP, length %u", ulen);
+ }
+ } else {
+ if (ulen > length && !fragmented)
+ ND_PRINT("UDP, bad length %u > %u",
+ ulen, length);
+ else
+ ND_PRINT("UDP, length %u", ulen);
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
diff --git a/print-unsupported.c b/print-unsupported.c
new file mode 100644
index 0000000..009cf6f
--- /dev/null
+++ b/print-unsupported.c
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: unsupported link-layer protocols printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+
+void
+unsupported_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
+ const u_char *p)
+{
+ ndo->ndo_protocol = "unsupported";
+ nd_print_protocol_caps(ndo);
+ hex_and_ascii_print(ndo, "\n\t", p, h->caplen);
+}
diff --git a/print-usb.c b/print-usb.c
new file mode 100644
index 0000000..3f5937b
--- /dev/null
+++ b/print-usb.c
@@ -0,0 +1,284 @@
+/*
+ * Copyright 2009 Bert Vermeulen <bert@biot.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by Paolo Abeni.''
+ * The name of author may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Support for USB packets
+ *
+ */
+
+/* \summary: USB printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+#ifdef DLT_USB_LINUX
+/*
+ * possible transfer mode
+ */
+#define URB_TRANSFER_IN 0x80
+#define URB_ISOCHRONOUS 0x0
+#define URB_INTERRUPT 0x1
+#define URB_CONTROL 0x2
+#define URB_BULK 0x3
+
+/*
+ * possible event type
+ */
+#define URB_SUBMIT 'S'
+#define URB_COMPLETE 'C'
+#define URB_ERROR 'E'
+
+/*
+ * USB setup header as defined in USB specification.
+ * Appears at the front of each Control S-type packet in DLT_USB captures.
+ */
+typedef struct _usb_setup {
+ nd_uint8_t bmRequestType;
+ nd_uint8_t bRequest;
+ nd_uint16_t wValue;
+ nd_uint16_t wIndex;
+ nd_uint16_t wLength;
+} pcap_usb_setup;
+
+/*
+ * Information from the URB for Isochronous transfers.
+ */
+typedef struct _iso_rec {
+ nd_int32_t error_count;
+ nd_int32_t numdesc;
+} iso_rec;
+
+/*
+ * Header prepended by linux kernel to each event.
+ * Appears at the front of each packet in DLT_USB_LINUX captures.
+ */
+typedef struct _usb_header {
+ nd_uint64_t id;
+ nd_uint8_t event_type;
+ nd_uint8_t transfer_type;
+ nd_uint8_t endpoint_number;
+ nd_uint8_t device_address;
+ nd_uint16_t bus_id;
+ nd_uint8_t setup_flag;/*if !=0 the urb setup header is not present*/
+ nd_uint8_t data_flag; /*if !=0 no urb data is present*/
+ nd_int64_t ts_sec;
+ nd_int32_t ts_usec;
+ nd_int32_t status;
+ nd_uint32_t urb_len;
+ nd_uint32_t data_len; /* amount of urb data really present in this event*/
+ pcap_usb_setup setup;
+} pcap_usb_header;
+
+/*
+ * Header prepended by linux kernel to each event for the 2.6.31
+ * and later kernels; for the 2.6.21 through 2.6.30 kernels, the
+ * "iso_rec" information, and the fields starting with "interval"
+ * are zeroed-out padding fields.
+ *
+ * Appears at the front of each packet in DLT_USB_LINUX_MMAPPED captures.
+ */
+typedef struct _usb_header_mmapped {
+ nd_uint64_t id;
+ nd_uint8_t event_type;
+ nd_uint8_t transfer_type;
+ nd_uint8_t endpoint_number;
+ nd_uint8_t device_address;
+ nd_uint16_t bus_id;
+ nd_uint8_t setup_flag;/*if !=0 the urb setup header is not present*/
+ nd_uint8_t data_flag; /*if !=0 no urb data is present*/
+ nd_int64_t ts_sec;
+ nd_int32_t ts_usec;
+ nd_int32_t status;
+ nd_uint32_t urb_len;
+ nd_uint32_t data_len; /* amount of urb data really present in this event*/
+ union {
+ pcap_usb_setup setup;
+ iso_rec iso;
+ } s;
+ nd_int32_t interval; /* for Interrupt and Isochronous events */
+ nd_int32_t start_frame; /* for Isochronous events */
+ nd_uint32_t xfer_flags; /* copy of URB's transfer flags */
+ nd_uint32_t ndesc; /* number of isochronous descriptors */
+} pcap_usb_header_mmapped;
+
+/*
+ * Isochronous descriptors; for isochronous transfers there might be
+ * one or more of these at the beginning of the packet data. The
+ * number of descriptors is given by the "ndesc" field in the header;
+ * as indicated, in older kernels that don't put the descriptors at
+ * the beginning of the packet, that field is zeroed out, so that field
+ * can be trusted even in captures from older kernels.
+ */
+typedef struct _usb_isodesc {
+ nd_int32_t status;
+ nd_uint32_t offset;
+ nd_uint32_t len;
+ nd_byte pad[4];
+} usb_isodesc;
+
+
+/* returns direction: 1=inbound 2=outbound -1=invalid */
+static int
+get_direction(int transfer_type, int event_type)
+{
+ int direction;
+
+ direction = -1;
+ switch(transfer_type){
+ case URB_BULK:
+ case URB_CONTROL:
+ case URB_ISOCHRONOUS:
+ switch(event_type)
+ {
+ case URB_SUBMIT:
+ direction = 2;
+ break;
+ case URB_COMPLETE:
+ case URB_ERROR:
+ direction = 1;
+ break;
+ default:
+ direction = -1;
+ }
+ break;
+ case URB_INTERRUPT:
+ switch(event_type)
+ {
+ case URB_SUBMIT:
+ direction = 1;
+ break;
+ case URB_COMPLETE:
+ case URB_ERROR:
+ direction = 2;
+ break;
+ default:
+ direction = -1;
+ }
+ break;
+ default:
+ direction = -1;
+ }
+
+ return direction;
+}
+
+static void
+usb_header_print(netdissect_options *ndo, const pcap_usb_header *uh)
+{
+ int direction;
+ uint8_t transfer_type, event_type;
+
+ ndo->ndo_protocol = "usb";
+
+ nd_print_protocol_caps(ndo);
+ if (ndo->ndo_qflag)
+ return;
+
+ ND_PRINT(" ");
+ transfer_type = GET_U_1(uh->transfer_type);
+ switch(transfer_type)
+ {
+ case URB_ISOCHRONOUS:
+ ND_PRINT("ISOCHRONOUS");
+ break;
+ case URB_INTERRUPT:
+ ND_PRINT("INTERRUPT");
+ break;
+ case URB_CONTROL:
+ ND_PRINT("CONTROL");
+ break;
+ case URB_BULK:
+ ND_PRINT("BULK");
+ break;
+ default:
+ ND_PRINT(" ?");
+ }
+
+ event_type = GET_U_1(uh->event_type);
+ switch(event_type)
+ {
+ case URB_SUBMIT:
+ ND_PRINT(" SUBMIT");
+ break;
+ case URB_COMPLETE:
+ ND_PRINT(" COMPLETE");
+ break;
+ case URB_ERROR:
+ ND_PRINT(" ERROR");
+ break;
+ default:
+ ND_PRINT(" ?");
+ }
+
+ direction = get_direction(transfer_type, event_type);
+ if(direction == 1)
+ ND_PRINT(" from");
+ else if(direction == 2)
+ ND_PRINT(" to");
+ ND_PRINT(" %u:%u:%u", GET_HE_U_2(uh->bus_id),
+ GET_U_1(uh->device_address),
+ GET_U_1(uh->endpoint_number) & 0x7f);
+}
+
+/*
+ * This is the top level routine of the printer for captures with a
+ * 48-byte header.
+ *
+ * 'p' points to the header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+usb_linux_48_byte_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h _U_, const u_char *p)
+{
+ ndo->ndo_protocol = "usb_linux_48_byte";
+ ND_TCHECK_LEN(p, sizeof(pcap_usb_header));
+ ndo->ndo_ll_hdr_len += sizeof (pcap_usb_header);
+
+ usb_header_print(ndo, (const pcap_usb_header *) p);
+}
+
+#ifdef DLT_USB_LINUX_MMAPPED
+/*
+ * This is the top level routine of the printer for captures with a
+ * 64-byte header.
+ *
+ * 'p' points to the header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+void
+usb_linux_64_byte_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h _U_, const u_char *p)
+{
+ ndo->ndo_protocol = "usb_linux_64_byte";
+ ND_TCHECK_LEN(p, sizeof(pcap_usb_header_mmapped));
+ ndo->ndo_ll_hdr_len += sizeof (pcap_usb_header_mmapped);
+
+ usb_header_print(ndo, (const pcap_usb_header *) p);
+}
+#endif /* DLT_USB_LINUX_MMAPPED */
+
+#endif /* DLT_USB_LINUX */
+
diff --git a/print-vjc.c b/print-vjc.c
new file mode 100644
index 0000000..8303307
--- /dev/null
+++ b/print-vjc.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: PPP Van Jacobson compression printer */
+
+/* specification: RFC 1144 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "slcompress.h"
+#include "ppp.h"
+
+/*
+ * XXX - for BSD/OS PPP, what packets get supplied with a PPP header type
+ * of PPP_VJC and what packets get supplied with a PPP header type of
+ * PPP_VJNC? PPP_VJNC is for "UNCOMPRESSED_TCP" packets, and PPP_VJC
+ * is for COMPRESSED_TCP packets (PPP_IP is used for TYPE_IP packets).
+ *
+ * RFC 1144 implies that, on the wire, the packet type is *not* needed
+ * for PPP, as different PPP protocol types can be used; it only needs
+ * to be put on the wire for SLIP.
+ *
+ * It also indicates that, for compressed SLIP:
+ *
+ * If the COMPRESSED_TCP bit is set in the first byte, it's
+ * a COMPRESSED_TCP packet; that byte is the change byte, and
+ * the COMPRESSED_TCP bit, 0x80, isn't used in the change byte.
+ *
+ * If the upper 4 bits of the first byte are 7, it's an
+ * UNCOMPRESSED_TCP packet; that byte is the first byte of
+ * the UNCOMPRESSED_TCP modified IP header, with a connection
+ * number in the protocol field, and with the version field
+ * being 7, not 4.
+ *
+ * Otherwise, the packet is an IPv4 packet (where the upper 4 bits
+ * of the packet are 4).
+ *
+ * So this routine looks as if it's sort-of intended to handle
+ * compressed SLIP, although it doesn't handle UNCOMPRESSED_TCP
+ * correctly for that (it doesn't fix the version number and doesn't
+ * do anything to the protocol field), and doesn't check for COMPRESSED_TCP
+ * packets correctly for that (you only check the first bit - see
+ * B.1 in RFC 1144).
+ *
+ * But it's called for BSD/OS PPP, not SLIP - perhaps BSD/OS does weird
+ * things with the headers?
+ *
+ * Without a BSD/OS VJC-compressed PPP trace, or knowledge of what the
+ * BSD/OS VJC code does, we can't say what's the case.
+ *
+ * We therefore leave "proto" - which is the PPP protocol type - in place,
+ * *not* marked as unused, for now, so that GCC warnings about the
+ * unused argument remind us that we should fix this some day.
+ *
+ * XXX - also, it fetches the TCP checksum field in COMPRESSED_TCP
+ * packets with GET_HE_U_2, rather than with GET_BE_U_2(); RFC 1144 says
+ * it's "the unmodified TCP checksum", which would imply that it's
+ * big-endian, but perhaps, on the platform where this was developed,
+ * the packets were munged by the networking stack before being handed
+ * to the packet capture mechanism.
+ */
+int
+vjc_print(netdissect_options *ndo, const u_char *bp, u_short proto _U_)
+{
+ int i;
+
+ ndo->ndo_protocol = "vjc";
+ switch (GET_U_1(bp) & 0xf0) {
+ case TYPE_IP:
+ if (ndo->ndo_eflag)
+ ND_PRINT("(vjc type=IP) ");
+ return PPP_IP;
+ case TYPE_UNCOMPRESSED_TCP:
+ if (ndo->ndo_eflag)
+ ND_PRINT("(vjc type=raw TCP) ");
+ return PPP_IP;
+ case TYPE_COMPRESSED_TCP:
+ if (ndo->ndo_eflag)
+ ND_PRINT("(vjc type=compressed TCP) ");
+ for (i = 0; i < 8; i++) {
+ if (GET_U_1(bp + 1) & (0x80 >> i))
+ ND_PRINT("%c", "?CI?SAWU"[i]);
+ }
+ if (GET_U_1(bp + 1))
+ ND_PRINT(" ");
+ ND_PRINT("C=0x%02x ", GET_U_1(bp + 2));
+ ND_PRINT("sum=0x%04x ", GET_HE_U_2(bp + 3));
+ return -1;
+ case TYPE_ERROR:
+ if (ndo->ndo_eflag)
+ ND_PRINT("(vjc type=error) ");
+ return -1;
+ default:
+ if (ndo->ndo_eflag)
+ ND_PRINT("(vjc type=0x%02x) ", GET_U_1(bp) & 0xf0);
+ return -1;
+ }
+}
diff --git a/print-vqp.c b/print-vqp.c
new file mode 100644
index 0000000..1b2f6bf
--- /dev/null
+++ b/print-vqp.c
@@ -0,0 +1,214 @@
+/*
+ * Copyright (c) 1998-2006 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Carles Kishimoto <Carles.Kishimoto@bsc.es>
+ */
+
+/* \summary: Cisco VLAN Query Protocol (VQP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+#define VQP_VERSION 1
+
+/*
+ * VQP common header
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Constant | Packet type | Error Code | nitems |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Packet Sequence Number (4 bytes) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+struct vqp_common_header_t {
+ nd_uint8_t version;
+ nd_uint8_t msg_type;
+ nd_uint8_t error_code;
+ nd_uint8_t nitems;
+ nd_uint32_t sequence;
+};
+
+struct vqp_obj_tlv_t {
+ nd_uint32_t obj_type;
+ nd_uint16_t obj_length;
+};
+
+#define VQP_OBJ_REQ_JOIN_PORT 0x01
+#define VQP_OBJ_RESP_VLAN 0x02
+#define VQP_OBJ_REQ_RECONFIRM 0x03
+#define VQP_OBJ_RESP_RECONFIRM 0x04
+
+static const struct tok vqp_msg_type_values[] = {
+ { VQP_OBJ_REQ_JOIN_PORT, "Request, Join Port"},
+ { VQP_OBJ_RESP_VLAN, "Response, VLAN"},
+ { VQP_OBJ_REQ_RECONFIRM, "Request, Reconfirm"},
+ { VQP_OBJ_RESP_RECONFIRM, "Response, Reconfirm"},
+ { 0, NULL}
+};
+
+static const struct tok vqp_error_code_values[] = {
+ { 0x00, "No error"},
+ { 0x03, "Access denied"},
+ { 0x04, "Shutdown port"},
+ { 0x05, "Wrong VTP domain"},
+ { 0, NULL}
+};
+
+/* FIXME the heading 0x0c looks ugly - those must be flags etc. */
+#define VQP_OBJ_IP_ADDRESS 0x0c01
+#define VQP_OBJ_PORT_NAME 0x0c02
+#define VQP_OBJ_VLAN_NAME 0x0c03
+#define VQP_OBJ_VTP_DOMAIN 0x0c04
+#define VQP_OBJ_ETHERNET_PKT 0x0c05
+#define VQP_OBJ_MAC_NULL 0x0c06
+#define VQP_OBJ_MAC_ADDRESS 0x0c08
+
+static const struct tok vqp_obj_values[] = {
+ { VQP_OBJ_IP_ADDRESS, "Client IP Address" },
+ { VQP_OBJ_PORT_NAME, "Port Name" },
+ { VQP_OBJ_VLAN_NAME, "VLAN Name" },
+ { VQP_OBJ_VTP_DOMAIN, "VTP Domain" },
+ { VQP_OBJ_ETHERNET_PKT, "Ethernet Packet" },
+ { VQP_OBJ_MAC_NULL, "MAC Null" },
+ { VQP_OBJ_MAC_ADDRESS, "MAC Address" },
+ { 0, NULL}
+};
+
+void
+vqp_print(netdissect_options *ndo, const u_char *pptr, u_int len)
+{
+ const struct vqp_common_header_t *vqp_common_header;
+ const struct vqp_obj_tlv_t *vqp_obj_tlv;
+
+ const u_char *tptr;
+ uint8_t version;
+ uint16_t vqp_obj_len;
+ uint32_t vqp_obj_type;
+ u_int tlen;
+ uint8_t nitems;
+
+ ndo->ndo_protocol = "vqp";
+ tptr=pptr;
+ tlen = len;
+ vqp_common_header = (const struct vqp_common_header_t *)pptr;
+ ND_TCHECK_SIZE(vqp_common_header);
+ if (sizeof(struct vqp_common_header_t) > tlen)
+ goto invalid;
+ version = GET_U_1(vqp_common_header->version);
+
+ /*
+ * Sanity checking of the header.
+ */
+ if (version != VQP_VERSION) {
+ ND_PRINT("VQP version %u packet not supported",
+ version);
+ return;
+ }
+
+ /* in non-verbose mode just lets print the basic Message Type */
+ if (ndo->ndo_vflag < 1) {
+ ND_PRINT("VQPv%u %s Message, error-code %s (%u), length %u",
+ version,
+ tok2str(vqp_msg_type_values, "unknown (%u)",GET_U_1(vqp_common_header->msg_type)),
+ tok2str(vqp_error_code_values, "unknown", GET_U_1(vqp_common_header->error_code)),
+ GET_U_1(vqp_common_header->error_code),
+ len);
+ return;
+ }
+
+ /* ok they seem to want to know everything - lets fully decode it */
+ nitems = GET_U_1(vqp_common_header->nitems);
+ ND_PRINT("\n\tVQPv%u, %s Message, error-code %s (%u), seq 0x%08x, items %u, length %u",
+ version,
+ tok2str(vqp_msg_type_values, "unknown (%u)",GET_U_1(vqp_common_header->msg_type)),
+ tok2str(vqp_error_code_values, "unknown", GET_U_1(vqp_common_header->error_code)),
+ GET_U_1(vqp_common_header->error_code),
+ GET_BE_U_4(vqp_common_header->sequence),
+ nitems,
+ len);
+
+ /* skip VQP Common header */
+ tptr+=sizeof(struct vqp_common_header_t);
+ tlen-=sizeof(struct vqp_common_header_t);
+
+ while (nitems != 0 && tlen != 0) {
+
+ vqp_obj_tlv = (const struct vqp_obj_tlv_t *)tptr;
+ ND_TCHECK_SIZE(vqp_obj_tlv);
+ if (sizeof(struct vqp_obj_tlv_t) > tlen)
+ goto invalid;
+ vqp_obj_type = GET_BE_U_4(vqp_obj_tlv->obj_type);
+ vqp_obj_len = GET_BE_U_2(vqp_obj_tlv->obj_length);
+ tptr+=sizeof(struct vqp_obj_tlv_t);
+ tlen-=sizeof(struct vqp_obj_tlv_t);
+
+ ND_PRINT("\n\t %s Object (0x%08x), length %u, value: ",
+ tok2str(vqp_obj_values, "Unknown", vqp_obj_type),
+ vqp_obj_type, vqp_obj_len);
+
+ /* basic sanity check */
+ if (vqp_obj_type == 0 || vqp_obj_len ==0) {
+ return;
+ }
+
+ /* did we capture enough for fully decoding the object ? */
+ ND_TCHECK_LEN(tptr, vqp_obj_len);
+ if (vqp_obj_len > tlen)
+ goto invalid;
+
+ switch(vqp_obj_type) {
+ case VQP_OBJ_IP_ADDRESS:
+ if (vqp_obj_len != 4)
+ goto invalid;
+ ND_PRINT("%s (0x%08x)", GET_IPADDR_STRING(tptr),
+ GET_BE_U_4(tptr));
+ break;
+ /* those objects have similar semantics - fall through */
+ case VQP_OBJ_PORT_NAME:
+ case VQP_OBJ_VLAN_NAME:
+ case VQP_OBJ_VTP_DOMAIN:
+ case VQP_OBJ_ETHERNET_PKT:
+ nd_printjnp(ndo, tptr, vqp_obj_len);
+ break;
+ /* those objects have similar semantics - fall through */
+ case VQP_OBJ_MAC_ADDRESS:
+ case VQP_OBJ_MAC_NULL:
+ if (vqp_obj_len != MAC_ADDR_LEN)
+ goto invalid;
+ ND_PRINT("%s", GET_ETHERADDR_STRING(tptr));
+ break;
+ default:
+ if (ndo->ndo_vflag <= 1)
+ print_unknown_data(ndo,tptr, "\n\t ", vqp_obj_len);
+ break;
+ }
+ tptr += vqp_obj_len;
+ tlen -= vqp_obj_len;
+ nitems--;
+ }
+ return;
+invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-vrrp.c b/print-vrrp.c
new file mode 100644
index 0000000..7ac5955
--- /dev/null
+++ b/print-vrrp.c
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2000 William C. Fenner.
+ * All rights reserved.
+ *
+ * Kevin Steves <ks@hp.se> July 2000
+ * Modified to:
+ * - print version, type string and packet length
+ * - print IP address count if > 1 (-v)
+ * - verify checksum (-v)
+ * - print authentication string (-v)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * The name of William C. Fenner may not be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Virtual Router Redundancy Protocol (VRRP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+#include "ip.h"
+#include "ipproto.h"
+/*
+ * RFC 2338 (VRRP v2):
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Version| Type | Virtual Rtr ID| Priority | Count IP Addrs|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Auth Type | Adver Int | Checksum |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IP Address (1) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | . |
+ * | . |
+ * | . |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IP Address (n) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Authentication Data (1) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Authentication Data (2) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ *
+ * RFC 5798 (VRRP v3):
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | IPv4 Fields or IPv6 Fields |
+ * ... ...
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |Version| Type | Virtual Rtr ID| Priority |Count IPvX Addr|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |(rsvd) | Max Adver Int | Checksum |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * + +
+ * | IPvX Address(es) |
+ * + +
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+/* Type */
+#define VRRP_TYPE_ADVERTISEMENT 1
+
+static const struct tok type2str[] = {
+ { VRRP_TYPE_ADVERTISEMENT, "Advertisement" },
+ { 0, NULL }
+};
+
+/* Auth Type */
+#define VRRP_AUTH_NONE 0
+#define VRRP_AUTH_SIMPLE 1
+#define VRRP_AUTH_AH 2
+
+static const struct tok auth2str[] = {
+ { VRRP_AUTH_NONE, "none" },
+ { VRRP_AUTH_SIMPLE, "simple" },
+ { VRRP_AUTH_AH, "ah" },
+ { 0, NULL }
+};
+
+void
+vrrp_print(netdissect_options *ndo,
+ const u_char *bp, u_int len,
+ const u_char *bp2, int ttl,
+ int ver)
+{
+ int version, type, auth_type = VRRP_AUTH_NONE; /* keep compiler happy */
+ const char *type_s;
+
+ ndo->ndo_protocol = "vrrp";
+ nd_print_protocol_caps(ndo);
+ version = (GET_U_1(bp) & 0xf0) >> 4;
+ type = GET_U_1(bp) & 0x0f;
+ type_s = tok2str(type2str, "unknown type (%u)", type);
+ ND_PRINT("v%u, %s", version, type_s);
+ if (ttl != 255)
+ ND_PRINT(", (ttl %u)", ttl);
+ if (version < 2 || version > 3 || type != VRRP_TYPE_ADVERTISEMENT)
+ return;
+ ND_PRINT(", vrid %u, prio %u", GET_U_1(bp + 1), GET_U_1(bp + 2));
+
+ if (version == 2) {
+ auth_type = GET_U_1(bp + 4);
+ ND_PRINT(", authtype %s", tok2str(auth2str, NULL, auth_type));
+ ND_PRINT(", intvl %us, length %u", GET_U_1(bp + 5), len);
+ } else { /* version == 3 */
+ uint16_t intvl = (GET_U_1(bp + 4) & 0x0f) << 8 | GET_U_1(bp + 5);
+ ND_PRINT(", intvl %ucs, length %u", intvl, len);
+ }
+
+ if (ndo->ndo_vflag) {
+ u_int naddrs = GET_U_1(bp + 3);
+ u_int i;
+ char c;
+
+ if (version == 2 && ND_TTEST_LEN(bp, len)) {
+ struct cksum_vec vec[1];
+
+ vec[0].ptr = bp;
+ vec[0].len = len;
+ if (in_cksum(vec, 1))
+ ND_PRINT(", (bad vrrp cksum %x)",
+ GET_BE_U_2(bp + 6));
+ }
+
+ if (version == 3 && ND_TTEST_LEN(bp, len)) {
+ uint16_t cksum;
+
+ if (ver == 4)
+ cksum = nextproto4_cksum(ndo, (const struct ip *)bp2, bp,
+ len, len, IPPROTO_VRRP);
+ else
+ cksum = nextproto6_cksum(ndo, (const struct ip6_hdr *)bp2, bp,
+ len, len, IPPROTO_VRRP);
+ if (cksum)
+ ND_PRINT(", (bad vrrp cksum %x)",
+ GET_BE_U_2(bp + 6));
+ }
+
+ ND_PRINT(", addrs");
+ if (naddrs > 1)
+ ND_PRINT("(%u)", naddrs);
+ ND_PRINT(":");
+ c = ' ';
+ bp += 8;
+ for (i = 0; i < naddrs; i++) {
+ if (ver == 4) {
+ ND_PRINT("%c%s", c, GET_IPADDR_STRING(bp));
+ bp += 4;
+ } else {
+ ND_PRINT("%c%s", c, GET_IP6ADDR_STRING(bp));
+ bp += 16;
+ }
+ c = ',';
+ }
+ if (version == 2 && auth_type == VRRP_AUTH_SIMPLE) { /* simple text password */
+ ND_PRINT(" auth \"");
+ /*
+ * RFC 2338 Section 5.3.10: "If the configured authentication string
+ * is shorter than 8 bytes, the remaining space MUST be zero-filled.
+ */
+ nd_printjnp(ndo, bp, 8);
+ ND_PRINT("\"");
+ }
+ }
+}
diff --git a/print-vsock.c b/print-vsock.c
new file mode 100644
index 0000000..bb18c92
--- /dev/null
+++ b/print-vsock.c
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) 2016 Gerard Garcia <nouboh@gmail.com>
+ * Copyright (c) 2017 Red Hat, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. The names of the authors may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: Linux vsock printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include <stddef.h>
+
+#include "netdissect.h"
+#include "extract.h"
+
+enum af_vsockmon_transport {
+ AF_VSOCK_TRANSPORT_UNKNOWN = 0,
+ AF_VSOCK_TRANSPORT_NO_INFO = 1, /* No transport information */
+ AF_VSOCK_TRANSPORT_VIRTIO = 2, /* Virtio transport header */
+};
+
+static const struct tok vsock_transport[] = {
+ {AF_VSOCK_TRANSPORT_UNKNOWN, "UNKNOWN"},
+ {AF_VSOCK_TRANSPORT_NO_INFO, "NO_INFO"},
+ {AF_VSOCK_TRANSPORT_VIRTIO, "VIRTIO"},
+ { 0, NULL }
+};
+
+enum af_vsockmon_op {
+ AF_VSOCK_OP_UNKNOWN = 0,
+ AF_VSOCK_OP_CONNECT = 1,
+ AF_VSOCK_OP_DISCONNECT = 2,
+ AF_VSOCK_OP_CONTROL = 3,
+ AF_VSOCK_OP_PAYLOAD = 4,
+};
+
+static const struct tok vsock_op[] = {
+ {AF_VSOCK_OP_UNKNOWN, "UNKNOWN"},
+ {AF_VSOCK_OP_CONNECT, "CONNECT"},
+ {AF_VSOCK_OP_DISCONNECT, "DISCONNECT"},
+ {AF_VSOCK_OP_CONTROL, "CONTROL"},
+ {AF_VSOCK_OP_PAYLOAD, "PAYLOAD"},
+ { 0, NULL }
+};
+
+enum virtio_vsock_type {
+ VIRTIO_VSOCK_TYPE_STREAM = 1,
+};
+
+static const struct tok virtio_type[] = {
+ {VIRTIO_VSOCK_TYPE_STREAM, "STREAM"},
+ { 0, NULL }
+};
+
+enum virtio_vsock_op {
+ VIRTIO_VSOCK_OP_INVALID = 0,
+ VIRTIO_VSOCK_OP_REQUEST = 1,
+ VIRTIO_VSOCK_OP_RESPONSE = 2,
+ VIRTIO_VSOCK_OP_RST = 3,
+ VIRTIO_VSOCK_OP_SHUTDOWN = 4,
+ VIRTIO_VSOCK_OP_RW = 5,
+ VIRTIO_VSOCK_OP_CREDIT_UPDATE = 6,
+ VIRTIO_VSOCK_OP_CREDIT_REQUEST = 7,
+};
+
+static const struct tok virtio_op[] = {
+ {VIRTIO_VSOCK_OP_INVALID, "INVALID"},
+ {VIRTIO_VSOCK_OP_REQUEST, "REQUEST"},
+ {VIRTIO_VSOCK_OP_RESPONSE, "RESPONSE"},
+ {VIRTIO_VSOCK_OP_RST, "RST"},
+ {VIRTIO_VSOCK_OP_SHUTDOWN, "SHUTDOWN"},
+ {VIRTIO_VSOCK_OP_RW, "RW"},
+ {VIRTIO_VSOCK_OP_CREDIT_UPDATE, "CREDIT UPDATE"},
+ {VIRTIO_VSOCK_OP_CREDIT_REQUEST, "CREDIT REQUEST"},
+ { 0, NULL }
+};
+
+/* All fields are little-endian */
+
+struct virtio_vsock_hdr {
+ nd_uint64_t src_cid;
+ nd_uint64_t dst_cid;
+ nd_uint32_t src_port;
+ nd_uint32_t dst_port;
+ nd_uint32_t len;
+ nd_uint16_t type; /* enum virtio_vsock_type */
+ nd_uint16_t op; /* enum virtio_vsock_op */
+ nd_uint32_t flags;
+ nd_uint32_t buf_alloc;
+ nd_uint32_t fwd_cnt;
+};
+
+struct af_vsockmon_hdr {
+ nd_uint64_t src_cid;
+ nd_uint64_t dst_cid;
+ nd_uint32_t src_port;
+ nd_uint32_t dst_port;
+ nd_uint16_t op; /* enum af_vsockmon_op */
+ nd_uint16_t transport; /* enum af_vosckmon_transport */
+ nd_uint16_t len; /* size of transport header */
+ nd_uint8_t reserved[2];
+};
+
+static void
+vsock_virtio_hdr_print(netdissect_options *ndo, const struct virtio_vsock_hdr *hdr)
+{
+ uint16_t u16_v;
+ uint32_t u32_v;
+
+ u32_v = GET_LE_U_4(hdr->len);
+ ND_PRINT("len %u", u32_v);
+
+ u16_v = GET_LE_U_2(hdr->type);
+ ND_PRINT(", type %s",
+ tok2str(virtio_type, "Invalid type (%hu)", u16_v));
+
+ u16_v = GET_LE_U_2(hdr->op);
+ ND_PRINT(", op %s",
+ tok2str(virtio_op, "Invalid op (%hu)", u16_v));
+
+ u32_v = GET_LE_U_4(hdr->flags);
+ ND_PRINT(", flags %x", u32_v);
+
+ u32_v = GET_LE_U_4(hdr->buf_alloc);
+ ND_PRINT(", buf_alloc %u", u32_v);
+
+ u32_v = GET_LE_U_4(hdr->fwd_cnt);
+ ND_PRINT(", fwd_cnt %u", u32_v);
+}
+
+/*
+ * This size had better fit in a u_int.
+ */
+static u_int
+vsock_transport_hdr_size(uint16_t transport)
+{
+ switch (transport) {
+ case AF_VSOCK_TRANSPORT_VIRTIO:
+ return (u_int)sizeof(struct virtio_vsock_hdr);
+ default:
+ return 0;
+ }
+}
+
+/* Returns 0 on success, -1 on truncation */
+static int
+vsock_transport_hdr_print(netdissect_options *ndo, uint16_t transport,
+ const u_char *p, const u_int caplen)
+{
+ u_int transport_size = vsock_transport_hdr_size(transport);
+ const void *hdr;
+
+ if (caplen < sizeof(struct af_vsockmon_hdr) + transport_size) {
+ return -1;
+ }
+
+ hdr = p + sizeof(struct af_vsockmon_hdr);
+ switch (transport) {
+ case AF_VSOCK_TRANSPORT_VIRTIO:
+ ND_PRINT(" (");
+ vsock_virtio_hdr_print(ndo, hdr);
+ ND_PRINT(")");
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
+
+static void
+vsock_hdr_print(netdissect_options *ndo, const u_char *p, const u_int caplen)
+{
+ const struct af_vsockmon_hdr *hdr = (const struct af_vsockmon_hdr *)p;
+ uint16_t hdr_transport, hdr_op;
+ uint32_t hdr_src_port, hdr_dst_port;
+ uint64_t hdr_src_cid, hdr_dst_cid;
+ u_int total_hdr_size;
+ int ret = 0;
+
+ hdr_transport = GET_LE_U_2(hdr->transport);
+ ND_PRINT("%s",
+ tok2str(vsock_transport, "Invalid transport (%u)",
+ hdr_transport));
+
+ /* If verbose level is more than 0 print transport details */
+ if (ndo->ndo_vflag) {
+ ret = vsock_transport_hdr_print(ndo, hdr_transport, p, caplen);
+ if (ret == 0)
+ ND_PRINT("\n\t");
+ } else
+ ND_PRINT(" ");
+
+ hdr_src_cid = GET_LE_U_8(hdr->src_cid);
+ hdr_dst_cid = GET_LE_U_8(hdr->dst_cid);
+ hdr_src_port = GET_LE_U_4(hdr->src_port);
+ hdr_dst_port = GET_LE_U_4(hdr->dst_port);
+ hdr_op = GET_LE_U_2(hdr->op);
+ ND_PRINT("%" PRIu64 ".%u > %" PRIu64 ".%u %s, length %u",
+ hdr_src_cid, hdr_src_port,
+ hdr_dst_cid, hdr_dst_port,
+ tok2str(vsock_op, " invalid op (%u)", hdr_op),
+ caplen);
+
+ if (ret < 0)
+ goto trunc;
+
+ /* If debug level is more than 1 print payload contents */
+ /* This size had better fit in a u_int */
+ total_hdr_size = (u_int)sizeof(struct af_vsockmon_hdr) +
+ vsock_transport_hdr_size(hdr_transport);
+ if (ndo->ndo_vflag > 1 && hdr_op == AF_VSOCK_OP_PAYLOAD) {
+ if (caplen > total_hdr_size) {
+ const u_char *payload = p + total_hdr_size;
+
+ ND_PRINT("\n");
+ print_unknown_data(ndo, payload, "\t",
+ caplen - total_hdr_size);
+ } else
+ goto trunc;
+ }
+ return;
+
+trunc:
+ nd_print_trunc(ndo);
+}
+
+void
+vsock_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
+ const u_char *cp)
+{
+ u_int caplen = h->caplen;
+
+ ndo->ndo_protocol = "vsock";
+
+ if (caplen < sizeof(struct af_vsockmon_hdr)) {
+ nd_print_trunc(ndo);
+ ndo->ndo_ll_hdr_len += caplen;
+ return;
+ }
+ ndo->ndo_ll_hdr_len += sizeof(struct af_vsockmon_hdr);
+ vsock_hdr_print(ndo, cp, caplen);
+}
diff --git a/print-vtp.c b/print-vtp.c
new file mode 100644
index 0000000..bcee64c
--- /dev/null
+++ b/print-vtp.c
@@ -0,0 +1,392 @@
+/*
+ * Copyright (c) 1998-2007 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Reference documentation:
+ * https://www.cisco.com/c/en/us/support/docs/lan-switching/vtp/10558-21.html
+ * https://docstore.mik.ua/univercd/cc/td/doc/product/lan/trsrb/frames.htm
+ *
+ * Original code ode by Carles Kishimoto <carles.kishimoto@gmail.com>
+ */
+
+/* \summary: Cisco VLAN Trunking Protocol (VTP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#define VTP_HEADER_LEN 36
+#define VTP_DOMAIN_NAME_LEN 32
+#define VTP_MD5_DIGEST_LEN 16
+#define VTP_UPDATE_TIMESTAMP_LEN 12
+#define VTP_VLAN_INFO_FIXED_PART_LEN 12 /* length of VLAN info before VLAN name */
+
+#define VTP_SUMMARY_ADV 0x01
+#define VTP_SUBSET_ADV 0x02
+#define VTP_ADV_REQUEST 0x03
+#define VTP_JOIN_MESSAGE 0x04
+
+struct vtp_vlan_ {
+ nd_uint8_t len;
+ nd_uint8_t status;
+ nd_uint8_t type;
+ nd_uint8_t name_len;
+ nd_uint16_t vlanid;
+ nd_uint16_t mtu;
+ nd_uint32_t index;
+};
+
+static const struct tok vtp_message_type_values[] = {
+ { VTP_SUMMARY_ADV, "Summary advertisement"},
+ { VTP_SUBSET_ADV, "Subset advertisement"},
+ { VTP_ADV_REQUEST, "Advertisement request"},
+ { VTP_JOIN_MESSAGE, "Join message"},
+ { 0, NULL }
+};
+
+static const struct tok vtp_header_values[] = {
+ { 0x01, "Followers"}, /* On Summary advertisement, 3rd byte is Followers */
+ { 0x02, "Seq number"}, /* On Subset advertisement, 3rd byte is Sequence number */
+ { 0x03, "Rsvd"}, /* On Adver. requests 3rd byte is Rsvd */
+ { 0x04, "Rsvd"}, /* On Adver. requests 3rd byte is Rsvd */
+ { 0, NULL }
+};
+
+static const struct tok vtp_vlan_type_values[] = {
+ { 0x01, "Ethernet"},
+ { 0x02, "FDDI"},
+ { 0x03, "TrCRF"},
+ { 0x04, "FDDI-net"},
+ { 0x05, "TrBRF"},
+ { 0, NULL }
+};
+
+static const struct tok vtp_vlan_status[] = {
+ { 0x00, "Operational"},
+ { 0x01, "Suspended"},
+ { 0, NULL }
+};
+
+#define VTP_VLAN_SOURCE_ROUTING_RING_NUMBER 0x01
+#define VTP_VLAN_SOURCE_ROUTING_BRIDGE_NUMBER 0x02
+#define VTP_VLAN_STP_TYPE 0x03
+#define VTP_VLAN_PARENT_VLAN 0x04
+#define VTP_VLAN_TRANS_BRIDGED_VLAN 0x05
+#define VTP_VLAN_PRUNING 0x06
+#define VTP_VLAN_BRIDGE_TYPE 0x07
+#define VTP_VLAN_ARP_HOP_COUNT 0x08
+#define VTP_VLAN_STE_HOP_COUNT 0x09
+#define VTP_VLAN_BACKUP_CRF_MODE 0x0A
+
+static const struct tok vtp_vlan_tlv_values[] = {
+ { VTP_VLAN_SOURCE_ROUTING_RING_NUMBER, "Source-Routing Ring Number TLV"},
+ { VTP_VLAN_SOURCE_ROUTING_BRIDGE_NUMBER, "Source-Routing Bridge Number TLV"},
+ { VTP_VLAN_STP_TYPE, "STP type TLV"},
+ { VTP_VLAN_PARENT_VLAN, "Parent VLAN TLV"},
+ { VTP_VLAN_TRANS_BRIDGED_VLAN, "Translationally bridged VLANs TLV"},
+ { VTP_VLAN_PRUNING, "Pruning TLV"},
+ { VTP_VLAN_BRIDGE_TYPE, "Bridge Type TLV"},
+ { VTP_VLAN_ARP_HOP_COUNT, "Max ARP Hop Count TLV"},
+ { VTP_VLAN_STE_HOP_COUNT, "Max STE Hop Count TLV"},
+ { VTP_VLAN_BACKUP_CRF_MODE, "Backup CRF Mode TLV"},
+ { 0, NULL }
+};
+
+static const struct tok vtp_stp_type_values[] = {
+ { 1, "SRT"},
+ { 2, "SRB"},
+ { 3, "Auto"},
+ { 0, NULL }
+};
+
+void
+vtp_print(netdissect_options *ndo,
+ const u_char *pptr, const u_int length)
+{
+ u_int type, len, name_len, tlv_len, tlv_value, mgmtd_len;
+ const u_char *tptr;
+ const struct vtp_vlan_ *vtp_vlan;
+
+ ndo->ndo_protocol = "vtp";
+ if (length < VTP_HEADER_LEN)
+ goto invalid;
+
+ tptr = pptr;
+
+ ND_TCHECK_LEN(tptr, VTP_HEADER_LEN);
+
+ type = GET_U_1(tptr + 1);
+ ND_PRINT("VTPv%u, Message %s (0x%02x), length %u",
+ GET_U_1(tptr),
+ tok2str(vtp_message_type_values,"Unknown message type", type),
+ type,
+ length);
+
+ /* In non-verbose mode, just print version and message type */
+ if (ndo->ndo_vflag < 1) {
+ goto tcheck_full_packet;
+ }
+
+ /* verbose mode print all fields */
+ ND_PRINT("\n\tDomain name: ");
+ mgmtd_len = GET_U_1(tptr + 3);
+ if (mgmtd_len < 1 || mgmtd_len > VTP_DOMAIN_NAME_LEN) {
+ ND_PRINT(" [invalid MgmtD Len %u]", mgmtd_len);
+ goto invalid;
+ }
+ nd_printjnp(ndo, tptr + 4, mgmtd_len);
+ ND_PRINT(", %s: %u",
+ tok2str(vtp_header_values, "Unknown", type),
+ GET_U_1(tptr + 2));
+
+ tptr += VTP_HEADER_LEN;
+
+ switch (type) {
+
+ case VTP_SUMMARY_ADV:
+
+ /*
+ * SUMMARY ADVERTISEMENT
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Version | Code | Followers | MgmtD Len |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Management Domain Name (zero-padded to 32 bytes) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Configuration revision number |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Updater Identity IP address |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Update Timestamp (12 bytes) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | MD5 digest (16 bytes) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ */
+
+ ND_PRINT("\n\t Config Rev %x, Updater %s",
+ GET_BE_U_4(tptr),
+ GET_IPADDR_STRING(tptr+4));
+ tptr += 8;
+ ND_PRINT(", Timestamp 0x%08x 0x%08x 0x%08x",
+ GET_BE_U_4(tptr),
+ GET_BE_U_4(tptr + 4),
+ GET_BE_U_4(tptr + 8));
+ tptr += VTP_UPDATE_TIMESTAMP_LEN;
+ ND_PRINT(", MD5 digest: %08x%08x%08x%08x",
+ GET_BE_U_4(tptr),
+ GET_BE_U_4(tptr + 4),
+ GET_BE_U_4(tptr + 8),
+ GET_BE_U_4(tptr + 12));
+ tptr += VTP_MD5_DIGEST_LEN;
+ break;
+
+ case VTP_SUBSET_ADV:
+
+ /*
+ * SUBSET ADVERTISEMENT
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Version | Code | Seq number | MgmtD Len |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Management Domain Name (zero-padded to 32 bytes) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Configuration revision number |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | VLAN info field 1 |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | ................ |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | VLAN info field N |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ */
+
+ ND_PRINT(", Config Rev %x", GET_BE_U_4(tptr));
+
+ /*
+ * VLAN INFORMATION
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | V info len | Status | VLAN type | VLAN name len |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | ISL vlan id | MTU size |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | 802.10 index (SAID) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | VLAN name |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ */
+
+ tptr += 4;
+ while ((unsigned)(tptr - pptr) < length) {
+
+ len = GET_U_1(tptr);
+ if (len == 0)
+ break;
+
+ ND_TCHECK_LEN(tptr, len);
+
+ vtp_vlan = (const struct vtp_vlan_*)tptr;
+ if (len < VTP_VLAN_INFO_FIXED_PART_LEN)
+ goto invalid;
+ ND_PRINT("\n\tVLAN info status %s, type %s, VLAN-id %u, MTU %u, SAID 0x%08x, Name ",
+ tok2str(vtp_vlan_status,"Unknown",GET_U_1(vtp_vlan->status)),
+ tok2str(vtp_vlan_type_values,"Unknown",GET_U_1(vtp_vlan->type)),
+ GET_BE_U_2(vtp_vlan->vlanid),
+ GET_BE_U_2(vtp_vlan->mtu),
+ GET_BE_U_4(vtp_vlan->index));
+ len -= VTP_VLAN_INFO_FIXED_PART_LEN;
+ tptr += VTP_VLAN_INFO_FIXED_PART_LEN;
+ name_len = GET_U_1(vtp_vlan->name_len);
+ if (len < 4*((name_len + 3)/4))
+ goto invalid;
+ nd_printjnp(ndo, tptr, name_len);
+
+ /*
+ * Vlan names are aligned to 32-bit boundaries.
+ */
+ len -= 4*((name_len + 3)/4);
+ tptr += 4*((name_len + 3)/4);
+
+ /* TLV information follows */
+
+ while (len > 0) {
+
+ /*
+ * Cisco specs say 2 bytes for type + 2 bytes for length;
+ * see https://docstore.mik.ua/univercd/cc/td/doc/product/lan/trsrb/frames.htm
+ * However, actual packets on the wire appear to use 1
+ * byte for the type and 1 byte for the length, so that's
+ * what we do.
+ */
+ if (len < 2)
+ goto invalid;
+ type = GET_U_1(tptr);
+ tlv_len = GET_U_1(tptr + 1);
+
+ ND_PRINT("\n\t\t%s (0x%04x) TLV",
+ tok2str(vtp_vlan_tlv_values, "Unknown", type),
+ type);
+
+ if (len < tlv_len * 2 + 2) {
+ ND_PRINT(" (TLV goes past the end of the packet)");
+ goto invalid;
+ }
+ ND_TCHECK_LEN(tptr, tlv_len * 2 + 2);
+
+ /*
+ * We assume the value is a 2-byte integer; the length is
+ * in units of 16-bit words.
+ */
+ if (tlv_len != 1) {
+ ND_PRINT(" (invalid TLV length %u != 1)", tlv_len);
+ goto invalid;
+ } else {
+ tlv_value = GET_BE_U_2(tptr + 2);
+
+ switch (type) {
+ case VTP_VLAN_STE_HOP_COUNT:
+ ND_PRINT(", %u", tlv_value);
+ break;
+
+ case VTP_VLAN_PRUNING:
+ ND_PRINT(", %s (%u)",
+ tlv_value == 1 ? "Enabled" : "Disabled",
+ tlv_value);
+ break;
+
+ case VTP_VLAN_STP_TYPE:
+ ND_PRINT(", %s (%u)",
+ tok2str(vtp_stp_type_values, "Unknown", tlv_value),
+ tlv_value);
+ break;
+
+ case VTP_VLAN_BRIDGE_TYPE:
+ ND_PRINT(", %s (%u)",
+ tlv_value == 1 ? "SRB" : "SRT",
+ tlv_value);
+ break;
+
+ case VTP_VLAN_BACKUP_CRF_MODE:
+ ND_PRINT(", %s (%u)",
+ tlv_value == 1 ? "Backup" : "Not backup",
+ tlv_value);
+ break;
+
+ /*
+ * FIXME those are the defined TLVs that lack a decoder
+ * you are welcome to contribute code ;-)
+ */
+
+ case VTP_VLAN_SOURCE_ROUTING_RING_NUMBER:
+ case VTP_VLAN_SOURCE_ROUTING_BRIDGE_NUMBER:
+ case VTP_VLAN_PARENT_VLAN:
+ case VTP_VLAN_TRANS_BRIDGED_VLAN:
+ case VTP_VLAN_ARP_HOP_COUNT:
+ default:
+ print_unknown_data(ndo, tptr, "\n\t\t ", 2 + tlv_len*2);
+ break;
+ }
+ }
+ len -= 2 + tlv_len*2;
+ tptr += 2 + tlv_len*2;
+ }
+ }
+ break;
+
+ case VTP_ADV_REQUEST:
+
+ /*
+ * ADVERTISEMENT REQUEST
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Version | Code | Reserved | MgmtD Len |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Management Domain Name (zero-padded to 32 bytes) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Start value |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ */
+
+ ND_PRINT("\n\tStart value: %u", GET_BE_U_4(tptr));
+ break;
+
+ case VTP_JOIN_MESSAGE:
+
+ /* FIXME - Could not find message format */
+ break;
+
+ default:
+ break;
+ }
+
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+tcheck_full_packet:
+ ND_TCHECK_LEN(pptr, length);
+}
diff --git a/print-vxlan-gpe.c b/print-vxlan-gpe.c
new file mode 100644
index 0000000..13cba42
--- /dev/null
+++ b/print-vxlan-gpe.c
@@ -0,0 +1,124 @@
+/* Copyright (c) 2015, bugyo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: Generic Protocol Extension for VXLAN (VXLAN GPE) printer */
+
+/* specification: draft-ietf-nvo3-vxlan-gpe-10 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+static const struct tok vxlan_gpe_flags [] = {
+ { 0x08, "I" },
+ { 0x04, "P" },
+ { 0x02, "B" },
+ { 0x01, "O" },
+ { 0, NULL }
+};
+
+#define VXLAN_GPE_HDR_LEN 8
+
+/*
+ * VXLAN GPE header, draft-ietf-nvo3-vxlan-gpe-01
+ * Generic Protocol Extension for VXLAN
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |R|R|Ver|I|P|R|O| Reserved |Next Protocol |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | VXLAN Network Identifier (VNI) | Reserved |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+void
+vxlan_gpe_print(netdissect_options *ndo, const u_char *bp, u_int len)
+{
+ uint8_t flags;
+ uint8_t next_protocol;
+ uint32_t vni;
+
+ ndo->ndo_protocol = "vxlan_gpe";
+ ND_PRINT("VXLAN-GPE, ");
+ if (len < VXLAN_GPE_HDR_LEN) {
+ ND_PRINT(" (len %u < %u)", len, VXLAN_GPE_HDR_LEN);
+ goto invalid;
+ }
+
+ flags = GET_U_1(bp);
+ bp += 1;
+ len -= 1;
+ ND_PRINT("flags [%s], ",
+ bittok2str_nosep(vxlan_gpe_flags, "none", flags));
+
+ /* Reserved */
+ bp += 2;
+ len -= 2;
+
+ next_protocol = GET_U_1(bp);
+ bp += 1;
+ len -= 1;
+
+ vni = GET_BE_U_3(bp);
+ bp += 3;
+ len -= 3;
+
+ /* Reserved */
+ ND_TCHECK_1(bp);
+ bp += 1;
+ len -= 1;
+
+ ND_PRINT("vni %u", vni);
+ ND_PRINT(ndo->ndo_vflag ? "\n " : ": ");
+
+ switch (next_protocol) {
+ case 0x1:
+ ip_print(ndo, bp, len);
+ break;
+ case 0x2:
+ ip6_print(ndo, bp, len);
+ break;
+ case 0x3:
+ ether_print(ndo, bp, len, ND_BYTES_AVAILABLE_AFTER(bp), NULL, NULL);
+ break;
+ case 0x4:
+ nsh_print(ndo, bp, len);
+ break;
+ default:
+ ND_PRINT("ERROR: unknown-next-protocol");
+ goto invalid;
+ }
+
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
+
diff --git a/print-vxlan.c b/print-vxlan.c
new file mode 100644
index 0000000..60dcd44
--- /dev/null
+++ b/print-vxlan.c
@@ -0,0 +1,83 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Original code by Francesco Fondelli (francesco dot fondelli, gmail dot com)
+ */
+
+/* \summary: Virtual eXtensible Local Area Network (VXLAN) printer */
+
+/* specification: RFC 7348 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "extract.h"
+
+static const struct tok vxlan_flags [] = {
+ { 0x08, "I" },
+ { 0, NULL }
+};
+#define VXLAN_HDR_LEN 8
+
+/*
+ * VXLAN header, RFC7348
+ * Virtual eXtensible Local Area Network (VXLAN): A Framework
+ * for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |R|R|R|R|I|R|R|R| Reserved |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | VXLAN Network Identifier (VNI) | Reserved |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+void
+vxlan_print(netdissect_options *ndo, const u_char *bp, u_int len)
+{
+ uint8_t flags;
+ uint32_t vni;
+
+ ndo->ndo_protocol = "vxlan";
+ nd_print_protocol_caps(ndo);
+ if (len < VXLAN_HDR_LEN)
+ goto invalid;
+
+ flags = GET_U_1(bp);
+ bp += 1;
+ ND_PRINT(", flags [%s] (0x%02x), ",
+ bittok2str_nosep(vxlan_flags, "invalid", flags), flags);
+
+ /* 1st Reserved */
+ bp += 3;
+
+ vni = GET_BE_U_3(bp);
+ bp += 3;
+ ND_PRINT("vni %u\n", vni);
+
+ /* 2nd Reserved */
+ ND_TCHECK_1(bp);
+ bp += 1;
+
+ ether_print(ndo, bp, len - VXLAN_HDR_LEN, ND_BYTES_AVAILABLE_AFTER(bp), NULL, NULL);
+
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-wb.c b/print-wb.c
new file mode 100644
index 0000000..35b5a19
--- /dev/null
+++ b/print-wb.c
@@ -0,0 +1,445 @@
+/*
+ * Copyright (c) 1993, 1994, 1995, 1996
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: White Board printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+
+#if 0
+/*
+ * Largest packet size. Everything should fit within this space.
+ * For instance, multiline objects are sent piecewise.
+ */
+#define MAXFRAMESIZE 1024
+#endif
+
+/*
+ * Multiple drawing ops can be sent in one packet. Each one starts on a
+ * an even multiple of DOP_ALIGN bytes, which must be a power of two.
+ */
+#define DOP_ALIGN 4
+#define DOP_ROUNDUP(x) roundup2(x, DOP_ALIGN)
+#define DOP_NEXT(d)\
+ ((const struct dophdr *)((const u_char *)(d) + \
+ DOP_ROUNDUP(GET_BE_U_2((d)->dh_len) + sizeof(*(d)))))
+
+/*
+ * Format of the whiteboard packet header.
+ * The transport level header.
+ */
+struct pkt_hdr {
+ nd_uint32_t ph_src; /* site id of source */
+ nd_uint32_t ph_ts; /* time stamp (for skew computation) */
+ nd_uint16_t ph_version; /* version number */
+ nd_uint8_t ph_type; /* message type */
+ nd_uint8_t ph_flags; /* message flags */
+};
+
+/* Packet types */
+#define PT_DRAWOP 0 /* drawing operation */
+#define PT_ID 1 /* announcement packet */
+#define PT_RREQ 2 /* repair request */
+#define PT_RREP 3 /* repair reply */
+#define PT_KILL 4 /* terminate participation */
+#define PT_PREQ 5 /* page vector request */
+#define PT_PREP 7 /* page vector reply */
+
+#if 0
+#ifdef PF_USER
+#undef PF_USER /* {Digital,Tru64} UNIX define this, alas */
+#endif
+
+/* flags */
+#define PF_USER 0x01 /* hint that packet has interactive data */
+#define PF_VIS 0x02 /* only visible ops wanted */
+#endif
+
+struct PageID {
+ nd_uint32_t p_sid; /* session id of initiator */
+ nd_uint32_t p_uid; /* page number */
+};
+
+struct dophdr {
+ nd_uint32_t dh_ts; /* sender's timestamp */
+ nd_uint16_t dh_len; /* body length */
+ nd_uint8_t dh_flags;
+ nd_uint8_t dh_type; /* body type */
+ /* body follows */
+};
+/*
+ * Drawing op sub-types.
+ */
+#define DT_RECT 2
+#define DT_LINE 3
+#define DT_ML 4
+#define DT_DEL 5
+#define DT_XFORM 6
+#define DT_ELL 7
+#define DT_CHAR 8
+#define DT_STR 9
+#define DT_NOP 10
+#define DT_PSCODE 11
+#define DT_PSCOMP 12
+#define DT_REF 13
+#define DT_SKIP 14
+#define DT_HOLE 15
+static const struct tok dop_str[] = {
+ { DT_RECT, "RECT" },
+ { DT_LINE, "LINE" },
+ { DT_ML, "ML" },
+ { DT_DEL, "DEL" },
+ { DT_XFORM, "XFORM" },
+ { DT_ELL, "ELL" },
+ { DT_CHAR, "CHAR" },
+ { DT_STR, "STR" },
+ { DT_NOP, "NOP" },
+ { DT_PSCODE, "PSCODE" },
+ { DT_PSCOMP, "PSCOMP" },
+ { DT_REF, "REF" },
+ { DT_SKIP, "SKIP" },
+ { DT_HOLE, "HOLE" },
+ { 0, NULL }
+};
+
+/*
+ * A drawing operation.
+ */
+struct pkt_dop {
+ struct PageID pd_page; /* page that operations apply to */
+ nd_uint32_t pd_sseq; /* start sequence number */
+ nd_uint32_t pd_eseq; /* end sequence number */
+ /* drawing ops follow */
+};
+
+/*
+ * A repair request.
+ */
+struct pkt_rreq {
+ nd_uint32_t pr_id; /* source id of drawops to be repaired */
+ struct PageID pr_page; /* page of drawops */
+ nd_uint32_t pr_sseq; /* start seqno */
+ nd_uint32_t pr_eseq; /* end seqno */
+};
+
+/*
+ * A repair reply.
+ */
+struct pkt_rrep {
+ nd_uint32_t pr_id; /* original site id of ops */
+ struct pkt_dop pr_dop;
+ /* drawing ops follow */
+};
+
+struct id_off {
+ nd_uint32_t id;
+ nd_uint32_t off;
+};
+
+struct pgstate {
+ nd_uint32_t slot;
+ struct PageID page;
+ nd_uint16_t nid;
+ nd_uint16_t rsvd;
+ /* seqptr's */
+};
+
+/*
+ * An announcement packet.
+ */
+struct pkt_id {
+ nd_uint32_t pi_mslot;
+ struct PageID pi_mpage; /* current page */
+ struct pgstate pi_ps;
+ /* seqptr's */
+ /* null-terminated site name */
+};
+
+struct pkt_preq {
+ struct PageID pp_page;
+ nd_uint32_t pp_low;
+ nd_uint32_t pp_high;
+};
+
+struct pkt_prep {
+ nd_uint32_t pp_n; /* size of pageid array */
+ /* pgstate's follow */
+};
+
+static int
+wb_id(netdissect_options *ndo,
+ const struct pkt_id *id, u_int len)
+{
+ u_int i;
+ const u_char *sitename;
+ const struct id_off *io;
+ char c;
+ u_int nid;
+
+ ND_PRINT(" wb-id:");
+ if (len < sizeof(*id))
+ return (-1);
+ len -= sizeof(*id);
+
+ ND_PRINT(" %u/%s:%u (max %u/%s:%u) ",
+ GET_BE_U_4(id->pi_ps.slot),
+ GET_IPADDR_STRING(id->pi_ps.page.p_sid),
+ GET_BE_U_4(id->pi_ps.page.p_uid),
+ GET_BE_U_4(id->pi_mslot),
+ GET_IPADDR_STRING(id->pi_mpage.p_sid),
+ GET_BE_U_4(id->pi_mpage.p_uid));
+ /* now the rest of the fixed-size part of struct pkt_id */
+ ND_TCHECK_SIZE(id);
+
+ nid = GET_BE_U_2(id->pi_ps.nid);
+ if (len < sizeof(*io) * nid)
+ return (-1);
+ len -= sizeof(*io) * nid;
+ io = (const struct id_off *)(id + 1);
+ sitename = (const u_char *)(io + nid);
+
+ c = '<';
+ for (i = 0; i < nid; ++io, ++i) {
+ ND_PRINT("%c%s:%u",
+ c, GET_IPADDR_STRING(io->id), GET_BE_U_4(io->off));
+ c = ',';
+ }
+ ND_PRINT("> \"");
+ nd_printjnp(ndo, sitename, len);
+ ND_PRINT("\"");
+ return (0);
+}
+
+static int
+wb_rreq(netdissect_options *ndo,
+ const struct pkt_rreq *rreq, u_int len)
+{
+ ND_PRINT(" wb-rreq:");
+ if (len < sizeof(*rreq))
+ return (-1);
+
+ ND_PRINT(" please repair %s %s:%u<%u:%u>",
+ GET_IPADDR_STRING(rreq->pr_id),
+ GET_IPADDR_STRING(rreq->pr_page.p_sid),
+ GET_BE_U_4(rreq->pr_page.p_uid),
+ GET_BE_U_4(rreq->pr_sseq),
+ GET_BE_U_4(rreq->pr_eseq));
+ return (0);
+}
+
+static int
+wb_preq(netdissect_options *ndo,
+ const struct pkt_preq *preq, u_int len)
+{
+ ND_PRINT(" wb-preq:");
+ if (len < sizeof(*preq))
+ return (-1);
+
+ ND_PRINT(" need %u/%s:%u",
+ GET_BE_U_4(preq->pp_low),
+ GET_IPADDR_STRING(preq->pp_page.p_sid),
+ GET_BE_U_4(preq->pp_page.p_uid));
+ /* now the rest of the fixed-size part of struct pkt_req */
+ ND_TCHECK_SIZE(preq);
+ return (0);
+}
+
+static int
+wb_prep(netdissect_options *ndo,
+ const struct pkt_prep *prep, u_int len)
+{
+ u_int n;
+ const struct pgstate *ps;
+
+ ND_PRINT(" wb-prep:");
+ if (len < sizeof(*prep))
+ return (-1);
+ n = GET_BE_U_4(prep->pp_n);
+ ps = (const struct pgstate *)(prep + 1);
+ while (n != 0) {
+ const struct id_off *io, *ie;
+ char c = '<';
+
+ ND_PRINT(" %u/%s:%u",
+ GET_BE_U_4(ps->slot),
+ GET_IPADDR_STRING(ps->page.p_sid),
+ GET_BE_U_4(ps->page.p_uid));
+ /* now the rest of the fixed-size part of struct pgstate */
+ ND_TCHECK_SIZE(ps);
+ io = (const struct id_off *)(ps + 1);
+ for (ie = io + GET_U_1(ps->nid); io < ie; ++io) {
+ ND_PRINT("%c%s:%u", c, GET_IPADDR_STRING(io->id),
+ GET_BE_U_4(io->off));
+ c = ',';
+ }
+ ND_PRINT(">");
+ ps = (const struct pgstate *)io;
+ n--;
+ }
+ return 0;
+}
+
+static void
+wb_dops(netdissect_options *ndo, const struct pkt_dop *dop,
+ uint32_t ss, uint32_t es)
+{
+ const struct dophdr *dh = (const struct dophdr *)((const u_char *)dop + sizeof(*dop));
+
+ ND_PRINT(" <");
+ for ( ; ss <= es; ++ss) {
+ u_int t;
+
+ t = GET_U_1(dh->dh_type);
+
+ ND_PRINT(" %s", tok2str(dop_str, "dop-%u!", t));
+ if (t == DT_SKIP || t == DT_HOLE) {
+ uint32_t ts = GET_BE_U_4(dh->dh_ts);
+ ND_PRINT("%u", ts - ss + 1);
+ if (ss > ts || ts > es) {
+ ND_PRINT("[|]");
+ if (ts < ss)
+ return;
+ }
+ ss = ts;
+ }
+ dh = DOP_NEXT(dh);
+ }
+ ND_PRINT(" >");
+}
+
+static int
+wb_rrep(netdissect_options *ndo,
+ const struct pkt_rrep *rrep, u_int len)
+{
+ const struct pkt_dop *dop = &rrep->pr_dop;
+
+ ND_PRINT(" wb-rrep:");
+ if (len < sizeof(*rrep))
+ return (-1);
+ len -= sizeof(*rrep);
+
+ ND_PRINT(" for %s %s:%u<%u:%u>",
+ GET_IPADDR_STRING(rrep->pr_id),
+ GET_IPADDR_STRING(dop->pd_page.p_sid),
+ GET_BE_U_4(dop->pd_page.p_uid),
+ GET_BE_U_4(dop->pd_sseq),
+ GET_BE_U_4(dop->pd_eseq));
+
+ if (ndo->ndo_vflag)
+ wb_dops(ndo, dop,
+ GET_BE_U_4(dop->pd_sseq),
+ GET_BE_U_4(dop->pd_eseq));
+ return (0);
+}
+
+static int
+wb_drawop(netdissect_options *ndo,
+ const struct pkt_dop *dop, u_int len)
+{
+ ND_PRINT(" wb-dop:");
+ if (len < sizeof(*dop))
+ return (-1);
+ len -= sizeof(*dop);
+
+ ND_PRINT(" %s:%u<%u:%u>",
+ GET_IPADDR_STRING(dop->pd_page.p_sid),
+ GET_BE_U_4(dop->pd_page.p_uid),
+ GET_BE_U_4(dop->pd_sseq),
+ GET_BE_U_4(dop->pd_eseq));
+
+ if (ndo->ndo_vflag)
+ wb_dops(ndo, dop,
+ GET_BE_U_4(dop->pd_sseq),
+ GET_BE_U_4(dop->pd_eseq));
+ return (0);
+}
+
+/*
+ * Print whiteboard multicast packets.
+ */
+void
+wb_print(netdissect_options *ndo,
+ const u_char *hdr, u_int len)
+{
+ const struct pkt_hdr *ph;
+ uint8_t type;
+ int print_result;
+
+ ndo->ndo_protocol = "wb";
+ ph = (const struct pkt_hdr *)hdr;
+ if (len < sizeof(*ph))
+ goto invalid;
+ ND_TCHECK_SIZE(ph);
+ len -= sizeof(*ph);
+
+ if (GET_U_1(ph->ph_flags))
+ ND_PRINT("*");
+ type = GET_U_1(ph->ph_type);
+ switch (type) {
+
+ case PT_KILL:
+ ND_PRINT(" wb-kill");
+ return;
+
+ case PT_ID:
+ print_result = wb_id(ndo, (const struct pkt_id *)(ph + 1), len);
+ break;
+
+ case PT_RREQ:
+ print_result = wb_rreq(ndo, (const struct pkt_rreq *)(ph + 1), len);
+ break;
+
+ case PT_RREP:
+ print_result = wb_rrep(ndo, (const struct pkt_rrep *)(ph + 1), len);
+ break;
+
+ case PT_DRAWOP:
+ print_result = wb_drawop(ndo, (const struct pkt_dop *)(ph + 1), len);
+ break;
+
+ case PT_PREQ:
+ print_result = wb_preq(ndo, (const struct pkt_preq *)(ph + 1), len);
+ break;
+
+ case PT_PREP:
+ print_result = wb_prep(ndo, (const struct pkt_prep *)(ph + 1), len);
+ break;
+
+ default:
+ ND_PRINT(" wb-%u!", type);
+ print_result = -1;
+ }
+ if (print_result < 0)
+ goto invalid;
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-whois.c b/print-whois.c
new file mode 100644
index 0000000..30c254a
--- /dev/null
+++ b/print-whois.c
@@ -0,0 +1,31 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: WHOIS Protocol printer */
+
+/* RFC 3912 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+
+void
+whois_print(netdissect_options *ndo, const u_char *pptr, u_int len)
+{
+ ndo->ndo_protocol = "whois";
+ txtproto_print(ndo, pptr, len, NULL, 0);
+}
diff --git a/print-zep.c b/print-zep.c
new file mode 100644
index 0000000..52901e7
--- /dev/null
+++ b/print-zep.c
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* \summary: ZigBee Encapsulation Protocol (ZEP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#define ND_LONGJMP_FROM_TCHECK
+#include "netdissect.h"
+
+#include "extract.h"
+
+/* From wireshark packet-zep.c:
+ *
+ ***********************************************************************
+ *
+ * ZEP Packets must be received in the following format:
+ *
+ * |UDP Header| ZEP Header |IEEE 802.15.4 Packet|
+ * | 8 bytes | 16/32 bytes | <= 127 bytes |
+ *
+ ***********************************************************************
+ *
+ * ZEP v1 Header will have the following format:
+ * |Preamble|Version|Channel ID|Device ID|CRC/LQI Mode|LQI Val|Reserved|Length|
+ * |2 bytes |1 byte | 1 byte | 2 bytes | 1 byte |1 byte |7 bytes |1 byte|
+ *
+ * ZEP v2 Header will have the following format (if type=1/Data):
+ * |Prmbl|Ver |Type |ChnlID|DevID|C/L Mode|LQI|NTP TS|Seq#|Res |Len|
+ * | 2 | 1 | 1 | 1 | 2 | 1 | 1 | 8 | 4 | 10 | 1 |
+ *
+ * ZEP v2 Header will have the following format (if type=2/Ack):
+ * |Preamble|Version| Type |Sequence#|
+ * |2 bytes |1 byte |1 byte| 4 bytes |
+ *------------------------------------------------------------
+ */
+
+#define JAN_1970 2208988800U
+
+/* Print timestamp */
+static void zep_print_ts(netdissect_options *ndo, const u_char *p)
+{
+ int32_t i;
+ uint32_t uf;
+ uint32_t f;
+ float ff;
+
+ i = GET_BE_U_4(p);
+ uf = GET_BE_U_4(p + 4);
+ ff = (float) uf;
+ if (ff < 0.0) /* some compilers are buggy */
+ ff += FMAXINT;
+ ff = (float) (ff / FMAXINT); /* shift radix point by 32 bits */
+ f = (uint32_t) (ff * 1000000000.0); /* treat fraction as parts per
+ billion */
+ ND_PRINT("%u.%09d", i, f);
+
+ /*
+ * print the time in human-readable format.
+ */
+ if (i) {
+ time_t seconds = i - JAN_1970;
+ char time_buf[128];
+
+ ND_PRINT(" (%s)",
+ nd_format_time(time_buf, sizeof (time_buf), "%Y/%m/%d %H:%M:%S",
+ localtime(&seconds)));
+ }
+}
+
+/*
+ * Main function to print packets.
+ */
+
+void
+zep_print(netdissect_options *ndo,
+ const u_char *bp, u_int len)
+{
+ uint8_t version, inner_len;
+ uint32_t seq_no;
+
+ ndo->ndo_protocol = "zep";
+
+ nd_print_protocol_caps(ndo);
+
+ /* Preamble Code (must be "EX") */
+ if (GET_U_1(bp) != 'E' || GET_U_1(bp + 1) != 'X') {
+ ND_PRINT(" [Preamble Code: ");
+ fn_print_char(ndo, GET_U_1(bp));
+ fn_print_char(ndo, GET_U_1(bp + 1));
+ ND_PRINT("]");
+ nd_print_invalid(ndo);
+ return;
+ }
+
+ version = GET_U_1(bp + 2);
+ ND_PRINT("v%u ", version);
+
+ if (version == 1) {
+ /* ZEP v1 packet. */
+ ND_LCHECK_U(len, 16);
+ ND_PRINT("Channel ID %u, Device ID 0x%04x, ",
+ GET_U_1(bp + 3), GET_BE_U_2(bp + 4));
+ if (GET_U_1(bp + 6))
+ ND_PRINT("CRC, ");
+ else
+ ND_PRINT("LQI %u, ", GET_U_1(bp + 7));
+ inner_len = GET_U_1(bp + 15);
+ ND_PRINT("inner len = %u", inner_len);
+
+ bp += 16;
+ len -= 16;
+ } else {
+ /* ZEP v2 packet. */
+ if (GET_U_1(bp + 3) == 2) {
+ /* ZEP v2 ack. */
+ ND_LCHECK_U(len, 8);
+ seq_no = GET_BE_U_4(bp + 4);
+ ND_PRINT("ACK, seq# = %u", seq_no);
+ inner_len = 0;
+ bp += 8;
+ len -= 8;
+ } else {
+ /* ZEP v2 data, or some other. */
+ ND_LCHECK_U(len, 32);
+ ND_PRINT("Type %u, Channel ID %u, Device ID 0x%04x, ",
+ GET_U_1(bp + 3), GET_U_1(bp + 4),
+ GET_BE_U_2(bp + 5));
+ if (GET_U_1(bp + 7))
+ ND_PRINT("CRC, ");
+ else
+ ND_PRINT("LQI %u, ", GET_U_1(bp + 8));
+
+ zep_print_ts(ndo, bp + 9);
+ seq_no = GET_BE_U_4(bp + 17);
+ inner_len = GET_U_1(bp + 31);
+ ND_PRINT(", seq# = %u, inner len = %u",
+ seq_no, inner_len);
+ bp += 32;
+ len -= 32;
+ }
+ }
+
+ if (inner_len != 0) {
+ /* Call 802.15.4 dissector. */
+ ND_PRINT("\n\t");
+ if (ieee802_15_4_print(ndo, bp, inner_len)) {
+ ND_TCHECK_LEN(bp, len);
+ bp += len;
+ len = 0;
+ }
+ }
+
+ if (!ndo->ndo_suppress_default_print)
+ ND_DEFAULTPRINT(bp, len);
+ return;
+invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-zephyr.c b/print-zephyr.c
new file mode 100644
index 0000000..11e1e59
--- /dev/null
+++ b/print-zephyr.c
@@ -0,0 +1,348 @@
+/*
+ * Decode and print Zephyr packets.
+ *
+ * https://web.mit.edu/zephyr/doc/protocol
+ *
+ * Copyright (c) 2001 Nickolai Zeldovich <kolya@MIT.EDU>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * The name of the author(s) may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
+ */
+
+/* \summary: Zephyr printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "netdissect-ctype.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+struct z_packet {
+ const char *version;
+ int numfields;
+ int kind;
+ const char *uid;
+ int port;
+ int auth;
+ int authlen;
+ const char *authdata;
+ const char *class;
+ const char *inst;
+ const char *opcode;
+ const char *sender;
+ const char *recipient;
+ const char *format;
+ int cksum;
+ int multi;
+ const char *multi_uid;
+ /* Other fields follow here.. */
+};
+
+enum z_packet_type {
+ Z_PACKET_UNSAFE = 0,
+ Z_PACKET_UNACKED,
+ Z_PACKET_ACKED,
+ Z_PACKET_HMACK,
+ Z_PACKET_HMCTL,
+ Z_PACKET_SERVACK,
+ Z_PACKET_SERVNAK,
+ Z_PACKET_CLIENTACK,
+ Z_PACKET_STAT
+};
+
+static const struct tok z_types[] = {
+ { Z_PACKET_UNSAFE, "unsafe" },
+ { Z_PACKET_UNACKED, "unacked" },
+ { Z_PACKET_ACKED, "acked" },
+ { Z_PACKET_HMACK, "hm-ack" },
+ { Z_PACKET_HMCTL, "hm-ctl" },
+ { Z_PACKET_SERVACK, "serv-ack" },
+ { Z_PACKET_SERVNAK, "serv-nak" },
+ { Z_PACKET_CLIENTACK, "client-ack" },
+ { Z_PACKET_STAT, "stat" },
+ { 0, NULL }
+};
+
+static char z_buf[256];
+
+static const char *
+parse_field(netdissect_options *ndo, const char **pptr, int *len)
+{
+ const char *s;
+
+ /* Start of string */
+ s = *pptr;
+ /* Scan for the NUL terminator */
+ for (;;) {
+ if (*len == 0) {
+ /* Ran out of packet data without finding it */
+ return NULL;
+ }
+ if (GET_U_1(*pptr) == '\0') {
+ /* Found it */
+ break;
+ }
+ /* Keep scanning */
+ (*pptr)++;
+ (*len)--;
+ }
+ /* Skip the NUL terminator */
+ (*pptr)++;
+ (*len)--;
+ return s;
+}
+
+static const char *
+z_triple(const char *class, const char *inst, const char *recipient)
+{
+ if (!*recipient)
+ recipient = "*";
+ snprintf(z_buf, sizeof(z_buf), "<%s,%s,%s>", class, inst, recipient);
+ z_buf[sizeof(z_buf)-1] = '\0';
+ return z_buf;
+}
+
+static const char *
+str_to_lower(const char *string)
+{
+ char *zb_string;
+
+ strncpy(z_buf, string, sizeof(z_buf));
+ z_buf[sizeof(z_buf)-1] = '\0';
+
+ zb_string = z_buf;
+ while (*zb_string) {
+ *zb_string = ND_ASCII_TOLOWER(*zb_string);
+ zb_string++;
+ }
+
+ return z_buf;
+}
+
+#define ZEPHYR_PRINT(str1,str2) \
+{ ND_PRINT("%s", (str1)); fn_print_str(ndo, (const u_char *)(str2)); }
+
+void
+zephyr_print(netdissect_options *ndo, const u_char *cp, u_int length)
+{
+ struct z_packet z = {
+ NULL, /* version */
+ 0, /* numfields */
+ 0, /* kind */
+ NULL, /* uid */
+ 0, /* port */
+ 0, /* auth */
+ 0, /* authlen */
+ NULL, /* authdata */
+ NULL, /* class */
+ NULL, /* inst */
+ NULL, /* opcode */
+ NULL, /* sender */
+ NULL, /* recipient */
+ NULL, /* format */
+ 0, /* cksum */
+ 0, /* multi */
+ NULL /* multi_uid */
+ };
+ const char *parse = (const char *) cp;
+ int parselen = length;
+ const char *s;
+ int lose = 0;
+
+ ndo->ndo_protocol = "zephyr";
+ /* squelch compiler warnings */
+
+#define PARSE_STRING \
+ s = parse_field(ndo, &parse, &parselen); \
+ if (!s) lose = 1;
+
+#define PARSE_FIELD_INT(field) \
+ PARSE_STRING \
+ if (!lose) field = strtol(s, 0, 16);
+
+#define PARSE_FIELD_STR(field) \
+ PARSE_STRING \
+ if (!lose) field = s;
+
+ PARSE_FIELD_STR(z.version);
+ if (lose)
+ goto invalid;
+
+ if (strncmp(z.version, "ZEPH", 4))
+ return;
+
+ PARSE_FIELD_INT(z.numfields);
+ PARSE_FIELD_INT(z.kind);
+ PARSE_FIELD_STR(z.uid);
+ PARSE_FIELD_INT(z.port);
+ PARSE_FIELD_INT(z.auth);
+ PARSE_FIELD_INT(z.authlen);
+ PARSE_FIELD_STR(z.authdata);
+ PARSE_FIELD_STR(z.class);
+ PARSE_FIELD_STR(z.inst);
+ PARSE_FIELD_STR(z.opcode);
+ PARSE_FIELD_STR(z.sender);
+ PARSE_FIELD_STR(z.recipient);
+ PARSE_FIELD_STR(z.format);
+ PARSE_FIELD_INT(z.cksum);
+ PARSE_FIELD_INT(z.multi);
+ PARSE_FIELD_STR(z.multi_uid);
+
+ if (lose)
+ goto invalid;
+
+ ND_PRINT(" zephyr");
+ if (strncmp(z.version+4, "0.2", 3)) {
+ ZEPHYR_PRINT(" v", z.version+4)
+ return;
+ }
+
+ ND_PRINT(" %s", tok2str(z_types, "type %d", z.kind));
+ if (z.kind == Z_PACKET_SERVACK) {
+ /* Initialization to silence warnings */
+ const char *ackdata = NULL;
+ PARSE_FIELD_STR(ackdata);
+ if (!lose && strcmp(ackdata, "SENT"))
+ ZEPHYR_PRINT("/", str_to_lower(ackdata))
+ }
+ if (*z.sender) ZEPHYR_PRINT(" ", z.sender);
+
+ if (!strcmp(z.class, "USER_LOCATE")) {
+ if (!strcmp(z.opcode, "USER_HIDE"))
+ ND_PRINT(" hide");
+ else if (!strcmp(z.opcode, "USER_UNHIDE"))
+ ND_PRINT(" unhide");
+ else
+ ZEPHYR_PRINT(" locate ", z.inst);
+ return;
+ }
+
+ if (!strcmp(z.class, "ZEPHYR_ADMIN")) {
+ ZEPHYR_PRINT(" zephyr-admin ", str_to_lower(z.opcode));
+ return;
+ }
+
+ if (!strcmp(z.class, "ZEPHYR_CTL")) {
+ if (!strcmp(z.inst, "CLIENT")) {
+ if (!strcmp(z.opcode, "SUBSCRIBE") ||
+ !strcmp(z.opcode, "SUBSCRIBE_NODEFS") ||
+ !strcmp(z.opcode, "UNSUBSCRIBE")) {
+
+ ND_PRINT(" %ssub%s", strcmp(z.opcode, "SUBSCRIBE") ? "un" : "",
+ strcmp(z.opcode, "SUBSCRIBE_NODEFS") ? "" :
+ "-nodefs");
+ if (z.kind != Z_PACKET_SERVACK) {
+ /* Initialization to silence warnings */
+ const char *c = NULL, *i = NULL, *r = NULL;
+ PARSE_FIELD_STR(c);
+ PARSE_FIELD_STR(i);
+ PARSE_FIELD_STR(r);
+ if (!lose) ZEPHYR_PRINT(" ", z_triple(c, i, r));
+ }
+ return;
+ }
+
+ if (!strcmp(z.opcode, "GIMME")) {
+ ND_PRINT(" ret");
+ return;
+ }
+
+ if (!strcmp(z.opcode, "GIMMEDEFS")) {
+ ND_PRINT(" gimme-defs");
+ return;
+ }
+
+ if (!strcmp(z.opcode, "CLEARSUB")) {
+ ND_PRINT(" clear-subs");
+ return;
+ }
+
+ ZEPHYR_PRINT(" ", str_to_lower(z.opcode));
+ return;
+ }
+
+ if (!strcmp(z.inst, "HM")) {
+ ZEPHYR_PRINT(" ", str_to_lower(z.opcode));
+ return;
+ }
+
+ if (!strcmp(z.inst, "REALM")) {
+ if (!strcmp(z.opcode, "ADD_SUBSCRIBE"))
+ ND_PRINT(" realm add-subs");
+ if (!strcmp(z.opcode, "REQ_SUBSCRIBE"))
+ ND_PRINT(" realm req-subs");
+ if (!strcmp(z.opcode, "RLM_SUBSCRIBE"))
+ ND_PRINT(" realm rlm-sub");
+ if (!strcmp(z.opcode, "RLM_UNSUBSCRIBE"))
+ ND_PRINT(" realm rlm-unsub");
+ return;
+ }
+ }
+
+ if (!strcmp(z.class, "HM_CTL")) {
+ ZEPHYR_PRINT(" hm_ctl ", str_to_lower(z.inst));
+ ZEPHYR_PRINT(" ", str_to_lower(z.opcode));
+ return;
+ }
+
+ if (!strcmp(z.class, "HM_STAT")) {
+ if (!strcmp(z.inst, "HMST_CLIENT") && !strcmp(z.opcode, "GIMMESTATS")) {
+ ND_PRINT(" get-client-stats");
+ return;
+ }
+ }
+
+ if (!strcmp(z.class, "WG_CTL")) {
+ ZEPHYR_PRINT(" wg_ctl ", str_to_lower(z.inst));
+ ZEPHYR_PRINT(" ", str_to_lower(z.opcode));
+ return;
+ }
+
+ if (!strcmp(z.class, "LOGIN")) {
+ if (!strcmp(z.opcode, "USER_FLUSH")) {
+ ND_PRINT(" flush_locs");
+ return;
+ }
+
+ if (!strcmp(z.opcode, "NONE") ||
+ !strcmp(z.opcode, "OPSTAFF") ||
+ !strcmp(z.opcode, "REALM-VISIBLE") ||
+ !strcmp(z.opcode, "REALM-ANNOUNCED") ||
+ !strcmp(z.opcode, "NET-VISIBLE") ||
+ !strcmp(z.opcode, "NET-ANNOUNCED")) {
+ ZEPHYR_PRINT(" set-exposure ", str_to_lower(z.opcode));
+ return;
+ }
+ }
+
+ if (!*z.recipient)
+ z.recipient = "*";
+
+ ZEPHYR_PRINT(" to ", z_triple(z.class, z.inst, z.recipient));
+ if (*z.opcode)
+ ZEPHYR_PRINT(" op ", z.opcode);
+ return;
+
+invalid:
+ nd_print_invalid(ndo);
+}
diff --git a/print-zeromq.c b/print-zeromq.c
new file mode 100644
index 0000000..c702046
--- /dev/null
+++ b/print-zeromq.c
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 2013 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* \summary: ZeroMQ Message Transport Protocol (ZMTP) printer */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "extract.h"
+
+
+/* Maximum number of ZMTP/1.0 frame body bytes (without the flags) to dump in
+ * hex and ASCII under a single "-v" flag.
+ */
+#define VBYTES 128
+
+/*
+ * Below is an excerpt from the "13/ZMTP" specification:
+ *
+ * A ZMTP message consists of 1 or more frames.
+ *
+ * A ZMTP frame consists of a length, followed by a flags field and a frame
+ * body of (length - 1) octets. Note: the length includes the flags field, so
+ * an empty frame has a length of 1.
+ *
+ * For frames with a length of 1 to 254 octets, the length SHOULD BE encoded
+ * as a single octet. The minimum valid length of a frame is 1 octet, thus a
+ * length of 0 is invalid and such frames SHOULD be discarded silently.
+ *
+ * For frames with lengths of 255 and greater, the length SHALL BE encoded as
+ * a single octet with the value 255, followed by the length encoded as a
+ * 64-bit unsigned integer in network byte order. For frames with lengths of
+ * 1 to 254 octets this encoding MAY be also used.
+ *
+ * The flags field consists of a single octet containing various control
+ * flags. Bit 0 is the least significant bit.
+ *
+ * - Bit 0 (MORE): More frames to follow. A value of 0 indicates that there
+ * are no more frames to follow. A value of 1 indicates that more frames
+ * will follow. On messages consisting of a single frame the MORE flag MUST
+ * be 0.
+ *
+ * - Bits 1-7: Reserved. Bits 1-7 are reserved for future use and SHOULD be
+ * zero.
+ */
+
+static const u_char *
+zmtp1_print_frame(netdissect_options *ndo, const u_char *cp, const u_char *ep)
+{
+ uint64_t body_len_declared, body_len_captured, header_len;
+ uint8_t flags;
+
+ ND_PRINT("\n\t");
+
+ if (GET_U_1(cp) != 0xFF) { /* length/0xFF */
+ header_len = 1; /* length */
+ body_len_declared = GET_U_1(cp);
+ ND_PRINT(" frame flags+body (8-bit) length %" PRIu64, body_len_declared);
+ } else {
+ header_len = 1 + 8; /* 0xFF, length */
+ ND_PRINT(" frame flags+body (64-bit) length");
+ ND_TCHECK_LEN(cp, header_len); /* 0xFF, length */
+ body_len_declared = GET_BE_U_8(cp + 1);
+ ND_PRINT(" %" PRIu64, body_len_declared);
+ }
+ if (body_len_declared == 0)
+ return cp + header_len; /* skip to the next frame */
+ ND_TCHECK_LEN(cp, header_len + 1); /* ..., flags */
+ flags = GET_U_1(cp + header_len);
+
+ body_len_captured = ep - cp - header_len;
+ if (body_len_declared > body_len_captured)
+ ND_PRINT(" (%" PRIu64 " captured)", body_len_captured);
+ ND_PRINT(", flags 0x%02x", flags);
+
+ if (ndo->ndo_vflag) {
+ uint64_t body_len_printed = ND_MIN(body_len_captured, body_len_declared);
+
+ ND_PRINT(" (%s|%s|%s|%s|%s|%s|%s|%s)",
+ flags & 0x80 ? "MBZ" : "-",
+ flags & 0x40 ? "MBZ" : "-",
+ flags & 0x20 ? "MBZ" : "-",
+ flags & 0x10 ? "MBZ" : "-",
+ flags & 0x08 ? "MBZ" : "-",
+ flags & 0x04 ? "MBZ" : "-",
+ flags & 0x02 ? "MBZ" : "-",
+ flags & 0x01 ? "MORE" : "-");
+
+ if (ndo->ndo_vflag == 1)
+ body_len_printed = ND_MIN(VBYTES + 1, body_len_printed);
+ if (body_len_printed > 1) {
+ ND_PRINT(", first %" PRIu64 " byte(s) of body:", body_len_printed - 1);
+ hex_and_ascii_print(ndo, "\n\t ", cp + header_len + 1, body_len_printed - 1);
+ }
+ }
+
+ /*
+ * Do not advance cp by the sum of header_len and body_len_declared
+ * before each offset has successfully passed ND_TCHECK_LEN() as the
+ * sum can roll over (9 + 0xfffffffffffffff7 = 0) and cause an
+ * infinite loop.
+ */
+ cp += header_len;
+ ND_TCHECK_LEN(cp, body_len_declared); /* Next frame within the buffer ? */
+ return cp + body_len_declared;
+
+trunc:
+ nd_trunc_longjmp(ndo);
+}
+
+void
+zmtp1_print(netdissect_options *ndo, const u_char *cp, u_int len)
+{
+ const u_char *ep = ND_MIN(ndo->ndo_snapend, cp + len);
+
+ ndo->ndo_protocol = "zmtp1";
+ ND_PRINT(": ZMTP/1.0");
+ while (cp < ep)
+ cp = zmtp1_print_frame(ndo, cp, ep);
+}
+
+/* The functions below decode a ZeroMQ datagram, supposedly stored in the "Data"
+ * field of an ODATA/RDATA [E]PGM packet. An excerpt from zmq_pgm(7) man page
+ * follows.
+ *
+ * In order for late joining consumers to be able to identify message
+ * boundaries, each PGM datagram payload starts with a 16-bit unsigned integer
+ * in network byte order specifying either the offset of the first message frame
+ * in the datagram or containing the value 0xFFFF if the datagram contains
+ * solely an intermediate part of a larger message.
+ *
+ * Note that offset specifies where the first message begins rather than the
+ * first message part. Thus, if there are trailing message parts at the
+ * beginning of the packet the offset ignores them and points to first initial
+ * message part in the packet.
+ */
+
+static const u_char *
+zmtp1_print_intermediate_part(netdissect_options *ndo, const u_char *cp, const u_int len)
+{
+ u_int frame_offset;
+ u_int remaining_len;
+
+ frame_offset = GET_BE_U_2(cp);
+ ND_PRINT("\n\t frame offset 0x%04x", frame_offset);
+ cp += 2;
+ remaining_len = ND_BYTES_AVAILABLE_AFTER(cp); /* without the frame length */
+
+ if (frame_offset == 0xFFFF)
+ frame_offset = len - 2; /* always within the declared length */
+ else if (2 + frame_offset > len) {
+ ND_PRINT(" (exceeds datagram declared length)");
+ goto trunc;
+ }
+
+ /* offset within declared length of the datagram */
+ if (frame_offset) {
+ ND_PRINT("\n\t frame intermediate part, %u bytes", frame_offset);
+ if (frame_offset > remaining_len)
+ ND_PRINT(" (%u captured)", remaining_len);
+ if (ndo->ndo_vflag) {
+ u_int len_printed = ND_MIN(frame_offset, remaining_len);
+
+ if (ndo->ndo_vflag == 1)
+ len_printed = ND_MIN(VBYTES, len_printed);
+ if (len_printed > 1) {
+ ND_PRINT(", first %u byte(s):", len_printed);
+ hex_and_ascii_print(ndo, "\n\t ", cp, len_printed);
+ }
+ }
+ }
+ return cp + frame_offset;
+
+trunc:
+ nd_trunc_longjmp(ndo);
+}
+
+void
+zmtp1_datagram_print(netdissect_options *ndo, const u_char *cp, const u_int len)
+{
+ const u_char *ep = ND_MIN(ndo->ndo_snapend, cp + len);
+
+ ndo->ndo_protocol = "zmtp1";
+ cp = zmtp1_print_intermediate_part(ndo, cp, len);
+ while (cp < ep)
+ cp = zmtp1_print_frame(ndo, cp, ep);
+}
diff --git a/print.c b/print.c
new file mode 100644
index 0000000..9c0ab86
--- /dev/null
+++ b/print.c
@@ -0,0 +1,573 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Support for splitting captures into multiple files with a maximum
+ * file size:
+ *
+ * Copyright (c) 2001
+ * Seth Webster <swebster@sst.ll.mit.edu>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <setjmp.h>
+
+#include "netdissect-stdinc.h"
+
+#include "netdissect.h"
+#include "addrtoname.h"
+#include "print.h"
+#include "netdissect-alloc.h"
+
+#include "pcap-missing.h"
+
+struct printer {
+ if_printer f;
+ int type;
+};
+
+static const struct printer printers[] = {
+#ifdef DLT_APPLE_IP_OVER_IEEE1394
+ { ap1394_if_print, DLT_APPLE_IP_OVER_IEEE1394 },
+#endif
+ { arcnet_if_print, DLT_ARCNET },
+#ifdef DLT_ARCNET_LINUX
+ { arcnet_linux_if_print, DLT_ARCNET_LINUX },
+#endif
+ { atm_if_print, DLT_ATM_RFC1483 },
+#ifdef DLT_DSA_TAG_BRCM
+ { brcm_tag_if_print, DLT_DSA_TAG_BRCM },
+#endif
+#ifdef DLT_DSA_TAG_BRCM_PREPEND
+ { brcm_tag_prepend_if_print, DLT_DSA_TAG_BRCM_PREPEND },
+#endif
+#ifdef DLT_BLUETOOTH_HCI_H4_WITH_PHDR
+ { bt_if_print, DLT_BLUETOOTH_HCI_H4_WITH_PHDR},
+#endif
+#ifdef DLT_C_HDLC
+ { chdlc_if_print, DLT_C_HDLC },
+#endif
+#ifdef DLT_HDLC
+ { chdlc_if_print, DLT_HDLC },
+#endif
+#ifdef DLT_ATM_CLIP
+ { cip_if_print, DLT_ATM_CLIP },
+#endif
+#ifdef DLT_CIP
+ { cip_if_print, DLT_CIP },
+#endif
+#ifdef DLT_DSA_TAG_DSA
+ { dsa_if_print, DLT_DSA_TAG_DSA },
+#endif
+#ifdef DLT_DSA_TAG_EDSA
+ { edsa_if_print, DLT_DSA_TAG_EDSA },
+#endif
+#ifdef DLT_ENC
+ { enc_if_print, DLT_ENC },
+#endif
+ { ether_if_print, DLT_EN10MB },
+ { fddi_if_print, DLT_FDDI },
+#ifdef DLT_FR
+ { fr_if_print, DLT_FR },
+#endif
+#ifdef DLT_FRELAY
+ { fr_if_print, DLT_FRELAY },
+#endif
+#ifdef DLT_IEEE802_11
+ { ieee802_11_if_print, DLT_IEEE802_11},
+#endif
+#ifdef DLT_IEEE802_11_RADIO_AVS
+ { ieee802_11_radio_avs_if_print, DLT_IEEE802_11_RADIO_AVS },
+#endif
+#ifdef DLT_IEEE802_11_RADIO
+ { ieee802_11_radio_if_print, DLT_IEEE802_11_RADIO },
+#endif
+#ifdef DLT_IEEE802_15_4
+ { ieee802_15_4_if_print, DLT_IEEE802_15_4 },
+#endif
+#ifdef DLT_IEEE802_15_4_NOFCS
+ { ieee802_15_4_if_print, DLT_IEEE802_15_4_NOFCS },
+#endif
+#ifdef DLT_IEEE802_15_4_TAP
+ { ieee802_15_4_tap_if_print, DLT_IEEE802_15_4_TAP },
+#endif
+#ifdef DLT_IP_OVER_FC
+ { ipfc_if_print, DLT_IP_OVER_FC },
+#endif
+#ifdef DLT_IPNET
+ { ipnet_if_print, DLT_IPNET },
+#endif
+#ifdef DLT_IPOIB
+ { ipoib_if_print, DLT_IPOIB },
+#endif
+#ifdef DLT_JUNIPER_ATM1
+ { juniper_atm1_if_print, DLT_JUNIPER_ATM1 },
+#endif
+#ifdef DLT_JUNIPER_ATM2
+ { juniper_atm2_if_print, DLT_JUNIPER_ATM2 },
+#endif
+#ifdef DLT_JUNIPER_CHDLC
+ { juniper_chdlc_if_print, DLT_JUNIPER_CHDLC },
+#endif
+#ifdef DLT_JUNIPER_ES
+ { juniper_es_if_print, DLT_JUNIPER_ES },
+#endif
+#ifdef DLT_JUNIPER_ETHER
+ { juniper_ether_if_print, DLT_JUNIPER_ETHER },
+#endif
+#ifdef DLT_JUNIPER_FRELAY
+ { juniper_frelay_if_print, DLT_JUNIPER_FRELAY },
+#endif
+#ifdef DLT_JUNIPER_GGSN
+ { juniper_ggsn_if_print, DLT_JUNIPER_GGSN },
+#endif
+#ifdef DLT_JUNIPER_MFR
+ { juniper_mfr_if_print, DLT_JUNIPER_MFR },
+#endif
+#ifdef DLT_JUNIPER_MLFR
+ { juniper_mlfr_if_print, DLT_JUNIPER_MLFR },
+#endif
+#ifdef DLT_JUNIPER_MLPPP
+ { juniper_mlppp_if_print, DLT_JUNIPER_MLPPP },
+#endif
+#ifdef DLT_JUNIPER_MONITOR
+ { juniper_monitor_if_print, DLT_JUNIPER_MONITOR },
+#endif
+#ifdef DLT_JUNIPER_PPP
+ { juniper_ppp_if_print, DLT_JUNIPER_PPP },
+#endif
+#ifdef DLT_JUNIPER_PPPOE_ATM
+ { juniper_pppoe_atm_if_print, DLT_JUNIPER_PPPOE_ATM },
+#endif
+#ifdef DLT_JUNIPER_PPPOE
+ { juniper_pppoe_if_print, DLT_JUNIPER_PPPOE },
+#endif
+#ifdef DLT_JUNIPER_SERVICES
+ { juniper_services_if_print, DLT_JUNIPER_SERVICES },
+#endif
+#ifdef DLT_LTALK
+ { ltalk_if_print, DLT_LTALK },
+#endif
+#ifdef DLT_MFR
+ { mfr_if_print, DLT_MFR },
+#endif
+#ifdef DLT_NETANALYZER
+ { netanalyzer_if_print, DLT_NETANALYZER },
+#endif
+#ifdef DLT_NETANALYZER_TRANSPARENT
+ { netanalyzer_transparent_if_print, DLT_NETANALYZER_TRANSPARENT },
+#endif
+#ifdef DLT_NFLOG
+ { nflog_if_print, DLT_NFLOG},
+#endif
+ { null_if_print, DLT_NULL },
+#ifdef DLT_LOOP
+ { null_if_print, DLT_LOOP },
+#endif
+#ifdef DLT_PFLOG
+ { pflog_if_print, DLT_PFLOG },
+#endif
+#ifdef DLT_PKTAP
+ { pktap_if_print, DLT_PKTAP },
+#endif
+#ifdef DLT_PPI
+ { ppi_if_print, DLT_PPI },
+#endif
+#ifdef DLT_PPP_BSDOS
+ { ppp_bsdos_if_print, DLT_PPP_BSDOS },
+#endif
+#ifdef DLT_PPP_SERIAL
+ { ppp_hdlc_if_print, DLT_PPP_SERIAL },
+#endif
+ { ppp_if_print, DLT_PPP },
+#ifdef DLT_PPP_PPPD
+ { ppp_if_print, DLT_PPP_PPPD },
+#endif
+#ifdef DLT_PPP_ETHER
+ { pppoe_if_print, DLT_PPP_ETHER },
+#endif
+#ifdef DLT_PRISM_HEADER
+ { prism_if_print, DLT_PRISM_HEADER },
+#endif
+ { raw_if_print, DLT_RAW },
+#ifdef DLT_IPV4
+ { raw_if_print, DLT_IPV4 },
+#endif
+#ifdef DLT_IPV6
+ { raw_if_print, DLT_IPV6 },
+#endif
+#ifdef DLT_SLIP_BSDOS
+ { sl_bsdos_if_print, DLT_SLIP_BSDOS },
+#endif
+ { sl_if_print, DLT_SLIP },
+#ifdef DLT_LINUX_SLL
+ { sll_if_print, DLT_LINUX_SLL },
+#endif
+#ifdef DLT_LINUX_SLL2
+ { sll2_if_print, DLT_LINUX_SLL2 },
+#endif
+#ifdef DLT_SUNATM
+ { sunatm_if_print, DLT_SUNATM },
+#endif
+#ifdef DLT_SYMANTEC_FIREWALL
+ { symantec_if_print, DLT_SYMANTEC_FIREWALL },
+#endif
+ { token_if_print, DLT_IEEE802 },
+#ifdef DLT_USB_LINUX
+ { usb_linux_48_byte_if_print, DLT_USB_LINUX},
+#endif /* DLT_USB_LINUX */
+#ifdef DLT_USB_LINUX_MMAPPED
+ { usb_linux_64_byte_if_print, DLT_USB_LINUX_MMAPPED},
+#endif /* DLT_USB_LINUX_MMAPPED */
+#ifdef DLT_VSOCK
+ { vsock_if_print, DLT_VSOCK },
+#endif
+ { NULL, 0 },
+};
+
+static void ndo_default_print(netdissect_options *ndo, const u_char *bp,
+ u_int length);
+
+static void NORETURN ndo_error(netdissect_options *ndo,
+ status_exit_codes_t status,
+ FORMAT_STRING(const char *fmt), ...)
+ PRINTFLIKE(3, 4);
+static void ndo_warning(netdissect_options *ndo,
+ FORMAT_STRING(const char *fmt), ...)
+ PRINTFLIKE(2, 3);
+
+static int ndo_printf(netdissect_options *ndo,
+ FORMAT_STRING(const char *fmt), ...)
+ PRINTFLIKE(2, 3);
+
+void
+init_print(netdissect_options *ndo, uint32_t localnet, uint32_t mask)
+{
+
+ init_addrtoname(ndo, localnet, mask);
+ init_checksum();
+}
+
+if_printer
+lookup_printer(int type)
+{
+ const struct printer *p;
+
+ for (p = printers; p->f; ++p)
+ if (type == p->type)
+ return p->f;
+
+#if defined(DLT_USER2) && defined(DLT_PKTAP)
+ /*
+ * Apple incorrectly chose to use DLT_USER2 for their PKTAP
+ * header.
+ *
+ * We map DLT_PKTAP, whether it's DLT_USER2 as it is on Darwin-
+ * based OSes or the same value as LINKTYPE_PKTAP as it is on
+ * other OSes, to LINKTYPE_PKTAP, so files written with
+ * this version of libpcap for a DLT_PKTAP capture have a link-
+ * layer header type of LINKTYPE_PKTAP.
+ *
+ * However, files written on OS X Mavericks for a DLT_PKTAP
+ * capture have a link-layer header type of LINKTYPE_USER2.
+ * If we don't have a printer for DLT_USER2, and type is
+ * DLT_USER2, we look up the printer for DLT_PKTAP and use
+ * that.
+ */
+ if (type == DLT_USER2) {
+ for (p = printers; p->f; ++p)
+ if (DLT_PKTAP == p->type)
+ return p->f;
+ }
+#endif
+
+ return NULL;
+ /* NOTREACHED */
+}
+
+int
+has_printer(int type)
+{
+ return (lookup_printer(type) != NULL);
+}
+
+if_printer
+get_if_printer(int type)
+{
+ if_printer printer;
+
+ printer = lookup_printer(type);
+ if (printer == NULL)
+ printer = unsupported_if_print;
+ return printer;
+}
+
+void
+pretty_print_packet(netdissect_options *ndo, const struct pcap_pkthdr *h,
+ const u_char *sp, u_int packets_captured)
+{
+ u_int hdrlen = 0;
+ int invalid_header = 0;
+
+ if (ndo->ndo_packet_number)
+ ND_PRINT("%5u ", packets_captured);
+
+ /* Sanity checks on packet length / capture length */
+ if (h->caplen == 0) {
+ invalid_header = 1;
+ ND_PRINT("[Invalid header: caplen==0");
+ }
+ if (h->len == 0) {
+ if (!invalid_header) {
+ invalid_header = 1;
+ ND_PRINT("[Invalid header:");
+ } else
+ ND_PRINT(",");
+ ND_PRINT(" len==0");
+ } else if (h->len < h->caplen) {
+ if (!invalid_header) {
+ invalid_header = 1;
+ ND_PRINT("[Invalid header:");
+ } else
+ ND_PRINT(",");
+ ND_PRINT(" len(%u) < caplen(%u)", h->len, h->caplen);
+ }
+ if (h->caplen > MAXIMUM_SNAPLEN) {
+ if (!invalid_header) {
+ invalid_header = 1;
+ ND_PRINT("[Invalid header:");
+ } else
+ ND_PRINT(",");
+ ND_PRINT(" caplen(%u) > %u", h->caplen, MAXIMUM_SNAPLEN);
+ }
+ if (h->len > MAXIMUM_SNAPLEN) {
+ if (!invalid_header) {
+ invalid_header = 1;
+ ND_PRINT("[Invalid header:");
+ } else
+ ND_PRINT(",");
+ ND_PRINT(" len(%u) > %u", h->len, MAXIMUM_SNAPLEN);
+ }
+ if (invalid_header) {
+ ND_PRINT("]\n");
+ return;
+ }
+
+ /*
+ * At this point:
+ * capture length != 0,
+ * packet length != 0,
+ * capture length <= MAXIMUM_SNAPLEN,
+ * packet length <= MAXIMUM_SNAPLEN,
+ * packet length >= capture length.
+ *
+ * Currently, there is no D-Bus printer, thus no need for
+ * bigger lengths.
+ */
+
+ /*
+ * The header /usr/include/pcap/pcap.h in OpenBSD declares h->ts as
+ * struct bpf_timeval, not struct timeval. The former comes from
+ * /usr/include/net/bpf.h and uses 32-bit unsigned types instead of
+ * the types used in struct timeval.
+ */
+ struct timeval tvbuf;
+ tvbuf.tv_sec = h->ts.tv_sec;
+ tvbuf.tv_usec = h->ts.tv_usec;
+ ts_print(ndo, &tvbuf);
+
+ /*
+ * Printers must check that they're not walking off the end of
+ * the packet.
+ * Rather than pass it all the way down, we set this member
+ * of the netdissect_options structure.
+ */
+ ndo->ndo_snapend = sp + h->caplen;
+ ndo->ndo_packetp = sp;
+
+ ndo->ndo_protocol = "";
+ ndo->ndo_ll_hdr_len = 0;
+ switch (setjmp(ndo->ndo_early_end)) {
+ case 0:
+ /* Print the packet. */
+ (ndo->ndo_if_printer)(ndo, h, sp);
+ break;
+ case ND_TRUNCATED:
+ /* A printer quit because the packet was truncated; report it */
+ nd_print_trunc(ndo);
+ /* Print the full packet */
+ ndo->ndo_ll_hdr_len = 0;
+ break;
+ }
+ hdrlen = ndo->ndo_ll_hdr_len;
+
+ /*
+ * Empty the stack of packet information, freeing all pushed buffers;
+ * if we got here by a printer quitting, we need to release anything
+ * that didn't get released because we longjmped out of the code
+ * before it popped the packet information.
+ */
+ nd_pop_all_packet_info(ndo);
+
+ /*
+ * Restore the original snapend, as a printer might have
+ * changed it.
+ */
+ ndo->ndo_snapend = sp + h->caplen;
+ if (ndo->ndo_Xflag) {
+ /*
+ * Print the raw packet data in hex and ASCII.
+ */
+ if (ndo->ndo_Xflag > 1) {
+ /*
+ * Include the link-layer header.
+ */
+ hex_and_ascii_print(ndo, "\n\t", sp, h->caplen);
+ } else {
+ /*
+ * Don't include the link-layer header - and if
+ * we have nothing past the link-layer header,
+ * print nothing.
+ */
+ if (h->caplen > hdrlen)
+ hex_and_ascii_print(ndo, "\n\t", sp + hdrlen,
+ h->caplen - hdrlen);
+ }
+ } else if (ndo->ndo_xflag) {
+ /*
+ * Print the raw packet data in hex.
+ */
+ if (ndo->ndo_xflag > 1) {
+ /*
+ * Include the link-layer header.
+ */
+ hex_print(ndo, "\n\t", sp, h->caplen);
+ } else {
+ /*
+ * Don't include the link-layer header - and if
+ * we have nothing past the link-layer header,
+ * print nothing.
+ */
+ if (h->caplen > hdrlen)
+ hex_print(ndo, "\n\t", sp + hdrlen,
+ h->caplen - hdrlen);
+ }
+ } else if (ndo->ndo_Aflag) {
+ /*
+ * Print the raw packet data in ASCII.
+ */
+ if (ndo->ndo_Aflag > 1) {
+ /*
+ * Include the link-layer header.
+ */
+ ascii_print(ndo, sp, h->caplen);
+ } else {
+ /*
+ * Don't include the link-layer header - and if
+ * we have nothing past the link-layer header,
+ * print nothing.
+ */
+ if (h->caplen > hdrlen)
+ ascii_print(ndo, sp + hdrlen, h->caplen - hdrlen);
+ }
+ }
+
+ ND_PRINT("\n");
+ nd_free_all(ndo);
+}
+
+/*
+ * By default, print the specified data out in hex and ASCII.
+ */
+static void
+ndo_default_print(netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ hex_and_ascii_print(ndo, "\n\t", bp, length); /* pass on lf and indentation string */
+}
+
+/* VARARGS */
+static void
+ndo_error(netdissect_options *ndo, status_exit_codes_t status,
+ const char *fmt, ...)
+{
+ va_list ap;
+
+ if (ndo->program_name)
+ (void)fprintf(stderr, "%s: ", ndo->program_name);
+ va_start(ap, fmt);
+ (void)vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ if (*fmt) {
+ fmt += strlen(fmt);
+ if (fmt[-1] != '\n')
+ (void)fputc('\n', stderr);
+ }
+ nd_cleanup();
+ exit(status);
+ /* NOTREACHED */
+}
+
+/* VARARGS */
+static void
+ndo_warning(netdissect_options *ndo, const char *fmt, ...)
+{
+ va_list ap;
+
+ if (ndo->program_name)
+ (void)fprintf(stderr, "%s: ", ndo->program_name);
+ (void)fprintf(stderr, "WARNING: ");
+ va_start(ap, fmt);
+ (void)vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ if (*fmt) {
+ fmt += strlen(fmt);
+ if (fmt[-1] != '\n')
+ (void)fputc('\n', stderr);
+ }
+}
+
+static int
+ndo_printf(netdissect_options *ndo, const char *fmt, ...)
+{
+ va_list args;
+ int ret;
+
+ va_start(args, fmt);
+ ret = vfprintf(stdout, fmt, args);
+ va_end(args);
+
+ if (ret < 0)
+ ndo_error(ndo, S_ERR_ND_WRITE_FILE,
+ "Unable to write output: %s", pcap_strerror(errno));
+ return (ret);
+}
+
+void
+ndo_set_function_pointers(netdissect_options *ndo)
+{
+ ndo->ndo_default_print=ndo_default_print;
+ ndo->ndo_printf=ndo_printf;
+ ndo->ndo_error=ndo_error;
+ ndo->ndo_warning=ndo_warning;
+}
diff --git a/print.h b/print.h
new file mode 100644
index 0000000..9caba40
--- /dev/null
+++ b/print.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Support for splitting captures into multiple files with a maximum
+ * file size:
+ *
+ * Copyright (c) 2001
+ * Seth Webster <swebster@sst.ll.mit.edu>
+ */
+
+#ifndef print_h
+#define print_h
+
+void init_print(netdissect_options *ndo, uint32_t localnet, uint32_t mask);
+
+int has_printer(int type);
+
+if_printer get_if_printer(int type);
+
+void pretty_print_packet(netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *sp,
+ u_int packets_captured);
+
+void ndo_set_function_pointers(netdissect_options *ndo);
+
+#endif /* print_h */
diff --git a/rpc_auth.h b/rpc_auth.h
new file mode 100644
index 0000000..b73e3be
--- /dev/null
+++ b/rpc_auth.h
@@ -0,0 +1,71 @@
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part. Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ *
+ * from: @(#)auth.h 1.17 88/02/08 SMI
+ * from: @(#)auth.h 2.3 88/08/07 4.0 RPCSRC
+ * $FreeBSD: src/include/rpc/auth.h,v 1.14.2.1 1999/08/29 14:39:02 peter Exp $
+ */
+
+/*
+ * auth.h, Authentication interface.
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ *
+ * The data structures are completely opaque to the client. The client
+ * is required to pass a AUTH * to routines that create rpc
+ * "sessions".
+ */
+
+/*
+ * Status returned from authentication check
+ */
+enum sunrpc_auth_stat {
+ SUNRPC_AUTH_OK=0,
+ /*
+ * failed at remote end
+ */
+ SUNRPC_AUTH_BADCRED=1, /* bogus credentials (seal broken) */
+ SUNRPC_AUTH_REJECTEDCRED=2, /* client should begin new session */
+ SUNRPC_AUTH_BADVERF=3, /* bogus verifier (seal broken) */
+ SUNRPC_AUTH_REJECTEDVERF=4, /* verifier expired or was replayed */
+ SUNRPC_AUTH_TOOWEAK=5, /* rejected due to security reasons */
+ /*
+ * failed locally
+ */
+ SUNRPC_AUTH_INVALIDRESP=6, /* bogus response verifier */
+ SUNRPC_AUTH_FAILED=7 /* some unknown reason */
+};
+
+/*
+ * Authentication info. Opaque to client.
+ */
+struct sunrpc_opaque_auth {
+ nd_uint32_t oa_flavor; /* flavor of auth */
+ nd_uint32_t oa_len; /* length of opaque body */
+ /* zero or more bytes of body */
+};
diff --git a/rpc_msg.h b/rpc_msg.h
new file mode 100644
index 0000000..ecd24cb
--- /dev/null
+++ b/rpc_msg.h
@@ -0,0 +1,127 @@
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part. Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ *
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ *
+ * from: @(#)rpc_msg.h 1.7 86/07/16 SMI
+ * from: @(#)rpc_msg.h 2.1 88/07/29 4.0 RPCSRC
+ * $FreeBSD: src/include/rpc/rpc_msg.h,v 1.11.2.1 1999/08/29 14:39:07 peter Exp $
+ */
+
+/*
+ * rpc_msg.h
+ * rpc message definition
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+#define SUNRPC_MSG_VERSION ((uint32_t) 2)
+
+/*
+ * Bottom up definition of an rpc message.
+ * NOTE: call and reply use the same overall struct but
+ * different parts of unions within it.
+ */
+
+enum sunrpc_msg_type {
+ SUNRPC_CALL=0,
+ SUNRPC_REPLY=1
+};
+
+enum sunrpc_reply_stat {
+ SUNRPC_MSG_ACCEPTED=0,
+ SUNRPC_MSG_DENIED=1
+};
+
+enum sunrpc_accept_stat {
+ SUNRPC_SUCCESS=0,
+ SUNRPC_PROG_UNAVAIL=1,
+ SUNRPC_PROG_MISMATCH=2,
+ SUNRPC_PROC_UNAVAIL=3,
+ SUNRPC_GARBAGE_ARGS=4,
+ SUNRPC_SYSTEM_ERR=5
+};
+
+enum sunrpc_reject_stat {
+ SUNRPC_RPC_MISMATCH=0,
+ SUNRPC_AUTH_ERROR=1
+};
+
+/*
+ * Reply part of an rpc exchange
+ */
+
+/*
+ * Reply to an rpc request that was rejected by the server.
+ */
+struct sunrpc_rejected_reply {
+ nd_uint32_t rj_stat; /* enum reject_stat */
+ union {
+ struct {
+ nd_uint32_t low;
+ nd_uint32_t high;
+ } RJ_versions;
+ nd_uint32_t RJ_why; /* enum auth_stat - why authentication did not work */
+ } ru;
+#define rj_vers ru.RJ_versions
+#define rj_why ru.RJ_why
+};
+
+/*
+ * Body of a reply to an rpc request.
+ */
+struct sunrpc_reply_body {
+ nd_uint32_t rp_stat; /* enum reply_stat */
+ struct sunrpc_rejected_reply rp_reject; /* if rejected */
+};
+
+/*
+ * Body of an rpc request call.
+ */
+struct sunrpc_call_body {
+ nd_uint32_t cb_rpcvers; /* must be equal to two */
+ nd_uint32_t cb_prog;
+ nd_uint32_t cb_vers;
+ nd_uint32_t cb_proc;
+ struct sunrpc_opaque_auth cb_cred;
+ /* followed by opaque verifier */
+};
+
+/*
+ * The rpc message
+ */
+struct sunrpc_msg {
+ nd_uint32_t rm_xid;
+ nd_uint32_t rm_direction; /* enum msg_type */
+ union {
+ struct sunrpc_call_body RM_cmb;
+ struct sunrpc_reply_body RM_rmb;
+ } ru;
+#define rm_call ru.RM_cmb
+#define rm_reply ru.RM_rmb
+};
+#define acpted_rply ru.RM_rmb.ru.RP_ar
+#define rjcted_rply ru.RM_rmb.ru.RP_dr
diff --git a/send-ack.awk b/send-ack.awk
new file mode 100644
index 0000000..f55b7c2
--- /dev/null
+++ b/send-ack.awk
@@ -0,0 +1,68 @@
+BEGIN {
+ # we need the number of bytes in a packet to do the output
+ # in packet numbers rather than byte numbers.
+ if (packetsize <= 0)
+ packetsize = 512
+ expectNext = 1
+ lastwin = -1
+ }
+ {
+ # convert tcp trace to send/ack form.
+ n = split ($1,t,":")
+ tim = t[1]*3600 + t[2]*60 + t[3]
+ if (NR <= 1) {
+ tzero = tim
+ ltim = tim
+ OFS = "\t"
+ }
+ if ($6 != "ack") {
+ # we have a data packet record:
+ # ignore guys with syn, fin or reset 'cause we
+ # can't handle their sequence numbers. Try to
+ # detect and add a flag character for 'anomalies':
+ # * -> re-sent packet
+ # - -> packet after hole (missing packet(s))
+ # # -> odd size packet
+ if ($5 !~ /[SFR]/) {
+ i = index($6,":")
+ j = index($6,"(")
+ strtSeq = substr($6,1,i-1)
+ endSeq = substr($6,i+1,j-i-1)
+ len = endSeq - strtSeq
+ id = endSeq
+ if (! timeOf[id])
+ timeOf[id] = tim
+ if (endSeq - expectNext < 0)
+ flag = "*"
+ else {
+ if (strtSeq - expectNext > 0)
+ flag = "-"
+ else if (len != packetsize)
+ flag = "#"
+ else
+ flag = " "
+ expectNext = endSeq
+ }
+ printf "%7.2f\t%7.2f\t%s send %s %d", tim-tzero, tim-ltim,\
+ flag, $5, strtSeq
+ if (++timesSent[id] > 1)
+ printf " (%.2f) [%d]", tim - timeOf[id], timesSent[id]
+ if (len != packetsize)
+ printf " <%d>", len
+ }
+ } else {
+ id = $7
+
+ printf "%7.2f\t%7.2f\t%s ack %s %d", tim-tzero, tim-ltim,\
+ flag, $5, id
+ if ($9 != lastwin) {
+ printf " win %d", $9
+ lastwin = $9
+ }
+ printf " (%.2f)", tim - timeOf[id]
+ if (++timesAcked[id] > 1)
+ printf " [%d]", timesAcked[id]
+ }
+ printf "\n"
+ ltim = tim
+ }
diff --git a/signature.c b/signature.c
new file mode 100644
index 0000000..77d6e81
--- /dev/null
+++ b/signature.c
@@ -0,0 +1,208 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Functions for signature and digest verification.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "netdissect.h"
+#include "signature.h"
+#include "diag-control.h"
+
+#ifdef HAVE_LIBCRYPTO
+#include <openssl/md5.h>
+#endif
+
+const struct tok signature_check_values[] = {
+ { SIGNATURE_VALID, "valid"},
+ { SIGNATURE_INVALID, "invalid"},
+ { CANT_ALLOCATE_COPY, "can't allocate memory"},
+ { CANT_CHECK_SIGNATURE, "unchecked"},
+ { 0, NULL }
+};
+
+
+#ifdef HAVE_LIBCRYPTO
+/*
+ * Compute a HMAC MD5 sum.
+ * Taken from rfc2104, Appendix.
+ */
+DIAG_OFF_DEPRECATION
+static void
+signature_compute_hmac_md5(const uint8_t *text, int text_len, unsigned char *key,
+ unsigned int key_len, uint8_t *digest)
+{
+ MD5_CTX context;
+ unsigned char k_ipad[65]; /* inner padding - key XORd with ipad */
+ unsigned char k_opad[65]; /* outer padding - key XORd with opad */
+ unsigned char tk[16];
+ int i;
+
+ /* if key is longer than 64 bytes reset it to key=MD5(key) */
+ if (key_len > 64) {
+
+ MD5_CTX tctx;
+
+ MD5_Init(&tctx);
+ MD5_Update(&tctx, key, key_len);
+ MD5_Final(tk, &tctx);
+
+ key = tk;
+ key_len = 16;
+ }
+
+ /*
+ * the HMAC_MD5 transform looks like:
+ *
+ * MD5(K XOR opad, MD5(K XOR ipad, text))
+ *
+ * where K is an n byte key
+ * ipad is the byte 0x36 repeated 64 times
+ * opad is the byte 0x5c repeated 64 times
+ * and text is the data being protected
+ */
+
+ /* start out by storing key in pads */
+ memset(k_ipad, 0, sizeof(k_ipad));
+ memset(k_opad, 0, sizeof(k_opad));
+ memcpy(k_ipad, key, key_len);
+ memcpy(k_opad, key, key_len);
+
+ /* XOR key with ipad and opad values */
+ for (i=0; i<64; i++) {
+ k_ipad[i] ^= 0x36;
+ k_opad[i] ^= 0x5c;
+ }
+
+ /*
+ * perform inner MD5
+ */
+ MD5_Init(&context); /* init context for 1st pass */
+ MD5_Update(&context, k_ipad, 64); /* start with inner pad */
+ MD5_Update(&context, text, text_len); /* then text of datagram */
+ MD5_Final(digest, &context); /* finish up 1st pass */
+
+ /*
+ * perform outer MD5
+ */
+ MD5_Init(&context); /* init context for 2nd pass */
+ MD5_Update(&context, k_opad, 64); /* start with outer pad */
+ MD5_Update(&context, digest, 16); /* then results of 1st hash */
+ MD5_Final(digest, &context); /* finish up 2nd pass */
+}
+DIAG_ON_DEPRECATION
+
+/*
+ * Verify a cryptographic signature of the packet.
+ * Currently only MD5 is supported.
+ */
+int
+signature_verify(netdissect_options *ndo, const u_char *pptr, u_int plen,
+ const u_char *sig_ptr, void (*clear_rtn)(void *),
+ const void *clear_arg)
+{
+ uint8_t *packet_copy, *sig_copy;
+ uint8_t sig[16];
+ unsigned int i;
+
+ if (!ndo->ndo_sigsecret) {
+ return (CANT_CHECK_SIGNATURE);
+ }
+
+ /*
+ * Do we have all the packet data to be checked?
+ */
+ if (!ND_TTEST_LEN(pptr, plen)) {
+ /* No. */
+ return (CANT_CHECK_SIGNATURE);
+ }
+
+ /*
+ * Do we have the entire signature to check?
+ */
+ if (!ND_TTEST_LEN(sig_ptr, sizeof(sig))) {
+ /* No. */
+ return (CANT_CHECK_SIGNATURE);
+ }
+ if (sig_ptr + sizeof(sig) > pptr + plen) {
+ /* No. */
+ return (CANT_CHECK_SIGNATURE);
+ }
+
+ /*
+ * Make a copy of the packet, so we don't overwrite the original.
+ */
+ packet_copy = malloc(plen);
+ if (packet_copy == NULL) {
+ return (CANT_ALLOCATE_COPY);
+ }
+
+ memcpy(packet_copy, pptr, plen);
+
+ /*
+ * Clear the signature in the copy.
+ */
+ sig_copy = packet_copy + (sig_ptr - pptr);
+ memset(sig_copy, 0, sizeof(sig));
+
+ /*
+ * Clear anything else that needs to be cleared in the copy.
+ * Our caller is assumed to have vetted the clear_arg pointer.
+ */
+ (*clear_rtn)((void *)(packet_copy + ((const uint8_t *)clear_arg - pptr)));
+
+ /*
+ * Compute the signature.
+ */
+ signature_compute_hmac_md5(packet_copy, plen,
+ (unsigned char *)ndo->ndo_sigsecret,
+ strlen(ndo->ndo_sigsecret), sig);
+
+ /*
+ * Free the copy.
+ */
+ free(packet_copy);
+
+ /*
+ * Does the computed signature match the signature in the packet?
+ */
+ if (memcmp(sig_ptr, sig, sizeof(sig)) == 0) {
+ /* Yes. */
+ return (SIGNATURE_VALID);
+ } else {
+ /* No - print the computed signature. */
+ for (i = 0; i < sizeof(sig); ++i) {
+ ND_PRINT("%02x", sig[i]);
+ }
+
+ return (SIGNATURE_INVALID);
+ }
+}
+#else
+int
+signature_verify(netdissect_options *ndo _U_, const u_char *pptr _U_,
+ u_int plen _U_, const u_char *sig_ptr _U_,
+ void (*clear_rtn)(void *) _U_, const void *clear_arg _U_)
+{
+ return (CANT_CHECK_SIGNATURE);
+}
+#endif
diff --git a/signature.h b/signature.h
new file mode 100644
index 0000000..bbb63ed
--- /dev/null
+++ b/signature.h
@@ -0,0 +1,29 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Functions for signature and digest verification.
+ *
+ * Original code by Hannes Gredler (hannes@gredler.at)
+ */
+
+/* for netdissect_options */
+#include "netdissect.h"
+
+/* signature checking result codes */
+#define SIGNATURE_VALID 0
+#define SIGNATURE_INVALID 1
+#define CANT_ALLOCATE_COPY 2
+#define CANT_CHECK_SIGNATURE 3
+
+extern const struct tok signature_check_values[];
+extern int signature_verify(netdissect_options *, const u_char *, u_int,
+ const u_char *, void (*)(void *), const void *);
diff --git a/slcompress.h b/slcompress.h
new file mode 100644
index 0000000..ddf131e
--- /dev/null
+++ b/slcompress.h
@@ -0,0 +1,85 @@
+/*
+ * Definitions for tcp compression routines.
+ *
+ * Copyright (c) 1989, 1990, 1992, 1993 Regents of the University of
+ * California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley. The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Van Jacobson (van@ee.lbl.gov), Dec 31, 1989:
+ * - Initial distribution.
+ */
+
+/*
+ * Compressed packet format:
+ *
+ * The first octet contains the packet type (top 3 bits), TCP
+ * 'push' bit, and flags that indicate which of the 4 TCP sequence
+ * numbers have changed (bottom 5 bits). The next octet is a
+ * conversation number that associates a saved IP/TCP header with
+ * the compressed packet. The next two octets are the TCP checksum
+ * from the original datagram. The next 0 to 15 octets are
+ * sequence number changes, one change per bit set in the header
+ * (there may be no changes and there are two special cases where
+ * the receiver implicitly knows what changed -- see below).
+ *
+ * There are 5 numbers which can change (they are always inserted
+ * in the following order): TCP urgent pointer, window,
+ * acknowledgement, sequence number and IP ID. (The urgent pointer
+ * is different from the others in that its value is sent, not the
+ * change in value.) Since typical use of SLIP links is biased
+ * toward small packets (see comments on MTU/MSS below), changes
+ * use a variable length coding with one octet for numbers in the
+ * range 1 - 255 and 3 octets (0, MSB, LSB) for numbers in the
+ * range 256 - 65535 or 0. (If the change in sequence number or
+ * ack is more than 65535, an uncompressed packet is sent.)
+ */
+
+/*
+ * Packet types (must not conflict with IP protocol version)
+ *
+ * The top nibble of the first octet is the packet type. There are
+ * three possible types: IP (not proto TCP or tcp with one of the
+ * control flags set); uncompressed TCP (a normal IP/TCP packet but
+ * with the 8-bit protocol field replaced by an 8-bit connection id --
+ * this type of packet syncs the sender & receiver); and compressed
+ * TCP (described above).
+ *
+ * LSB of 4-bit field is TCP "PUSH" bit (a worthless anachronism) and
+ * is logically part of the 4-bit "changes" field that follows. Top
+ * three bits are actual packet type. For backward compatibility
+ * and in the interest of conserving bits, numbers are chosen so the
+ * IP protocol version number (4) which normally appears in this nibble
+ * means "IP packet".
+ */
+
+/* packet types */
+#define TYPE_IP 0x40
+#define TYPE_UNCOMPRESSED_TCP 0x70
+#define TYPE_COMPRESSED_TCP 0x80
+#define TYPE_ERROR 0x00
+
+/* Bits in first octet of compressed packet */
+#define NEW_C 0x40 /* flag bits for what changed in a packet */
+#define NEW_I 0x20
+#define NEW_S 0x08
+#define NEW_A 0x04
+#define NEW_W 0x02
+#define NEW_U 0x01
+
+/* reserved, special-case values of above */
+#define SPECIAL_I (NEW_S|NEW_W|NEW_U) /* echoed interactive traffic */
+#define SPECIAL_D (NEW_S|NEW_A|NEW_W|NEW_U) /* unidirectional data */
+#define SPECIALS_MASK (NEW_S|NEW_A|NEW_W|NEW_U)
+
+#define TCP_PUSH_BIT 0x10
diff --git a/smb.h b/smb.h
new file mode 100644
index 0000000..40bba50
--- /dev/null
+++ b/smb.h
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) Andrew Tridgell 1995-1999
+ *
+ * This software may be distributed either under the terms of the
+ * BSD-style license that accompanies tcpdump or the GNU GPL version 2
+ * or later
+ */
+
+/* for netdissect_options */
+#include "netdissect.h"
+
+/* the complete */
+#define SMBmkdir 0x00 /* create directory */
+#define SMBrmdir 0x01 /* delete directory */
+#define SMBopen 0x02 /* open file */
+#define SMBcreate 0x03 /* create file */
+#define SMBclose 0x04 /* close file */
+#define SMBflush 0x05 /* flush file */
+#define SMBunlink 0x06 /* delete file */
+#define SMBmv 0x07 /* rename file */
+#define SMBgetatr 0x08 /* get file attributes */
+#define SMBsetatr 0x09 /* set file attributes */
+#define SMBread 0x0A /* read from file */
+#define SMBwrite 0x0B /* write to file */
+#define SMBlock 0x0C /* lock byte range */
+#define SMBunlock 0x0D /* unlock byte range */
+#define SMBctemp 0x0E /* create temporary file */
+#define SMBmknew 0x0F /* make new file */
+#define SMBchkpth 0x10 /* check directory path */
+#define SMBexit 0x11 /* process exit */
+#define SMBlseek 0x12 /* seek */
+#define SMBtcon 0x70 /* tree connect */
+#define SMBtconX 0x75 /* tree connect and X*/
+#define SMBtdis 0x71 /* tree disconnect */
+#define SMBnegprot 0x72 /* negotiate protocol */
+#define SMBdskattr 0x80 /* get disk attributes */
+#define SMBsearch 0x81 /* search directory */
+#define SMBsplopen 0xC0 /* open print spool file */
+#define SMBsplwr 0xC1 /* write to print spool file */
+#define SMBsplclose 0xC2 /* close print spool file */
+#define SMBsplretq 0xC3 /* return print queue */
+#define SMBsends 0xD0 /* send single block message */
+#define SMBsendb 0xD1 /* send broadcast message */
+#define SMBfwdname 0xD2 /* forward user name */
+#define SMBcancelf 0xD3 /* cancel forward */
+#define SMBgetmac 0xD4 /* get machine name */
+#define SMBsendstrt 0xD5 /* send start of multi-block message */
+#define SMBsendend 0xD6 /* send end of multi-block message */
+#define SMBsendtxt 0xD7 /* send text of multi-block message */
+
+/* Core+ protocol */
+#define SMBlockread 0x13 /* Lock a range and read */
+#define SMBwriteunlock 0x14 /* Unlock a range then write */
+#define SMBreadbraw 0x1a /* read a block of data with no smb header */
+#define SMBwritebraw 0x1d /* write a block of data with no smb header */
+#define SMBwritec 0x20 /* secondary write request */
+#define SMBwriteclose 0x2c /* write a file then close it */
+
+/* dos extended protocol */
+#define SMBreadBraw 0x1A /* read block raw */
+#define SMBreadBmpx 0x1B /* read block multiplexed */
+#define SMBreadBs 0x1C /* read block (secondary response) */
+#define SMBwriteBraw 0x1D /* write block raw */
+#define SMBwriteBmpx 0x1E /* write block multiplexed */
+#define SMBwriteBs 0x1F /* write block (secondary request) */
+#define SMBwriteC 0x20 /* write complete response */
+#define SMBsetattrE 0x22 /* set file attributes expanded */
+#define SMBgetattrE 0x23 /* get file attributes expanded */
+#define SMBlockingX 0x24 /* lock/unlock byte ranges and X */
+#define SMBtrans 0x25 /* transaction - name, bytes in/out */
+#define SMBtranss 0x26 /* transaction (secondary request/response) */
+#define SMBioctl 0x27 /* IOCTL */
+#define SMBioctls 0x28 /* IOCTL (secondary request/response) */
+#define SMBcopy 0x29 /* copy */
+#define SMBmove 0x2A /* move */
+#define SMBecho 0x2B /* echo */
+#define SMBopenX 0x2D /* open and X */
+#define SMBreadX 0x2E /* read and X */
+#define SMBwriteX 0x2F /* write and X */
+#define SMBsesssetupX 0x73 /* Session Set Up & X (including User Logon) */
+#define SMBffirst 0x82 /* find first */
+#define SMBfunique 0x83 /* find unique */
+#define SMBfclose 0x84 /* find close */
+#define SMBinvalid 0xFE /* invalid command */
+
+/* Extended 2.0 protocol */
+#define SMBtrans2 0x32 /* TRANS2 protocol set */
+#define SMBtranss2 0x33 /* TRANS2 protocol set, secondary command */
+#define SMBfindclose 0x34 /* Terminate a TRANSACT2_FINDFIRST */
+#define SMBfindnclose 0x35 /* Terminate a TRANSACT2_FINDNOTIFYFIRST */
+#define SMBulogoffX 0x74 /* user logoff */
+
+/* NT SMB extensions. */
+#define SMBnttrans 0xA0 /* NT transact */
+#define SMBnttranss 0xA1 /* NT transact secondary */
+#define SMBntcreateX 0xA2 /* NT create and X */
+#define SMBntcancel 0xA4 /* NT cancel */
+
+/* pathworks special */
+#define pSETDIR '\377'
+
+
+/* these are the TRANS2 sub commands */
+#define TRANSACT2_OPEN 0
+#define TRANSACT2_FINDFIRST 1
+#define TRANSACT2_FINDNEXT 2
+#define TRANSACT2_QFSINFO 3
+#define TRANSACT2_SETFSINFO 4
+#define TRANSACT2_QPATHINFO 5
+#define TRANSACT2_SETPATHINFO 6
+#define TRANSACT2_QFILEINFO 7
+#define TRANSACT2_SETFILEINFO 8
+#define TRANSACT2_FSCTL 9
+#define TRANSACT2_IOCTL 10
+#define TRANSACT2_FINDNOTIFYFIRST 11
+#define TRANSACT2_FINDNOTIFYNEXT 12
+#define TRANSACT2_MKDIR 13
+
+/* some protos */
+void smb_reset(void);
+const u_char *smb_fdata(netdissect_options *, const u_char *, const char *, const u_char *, int);
+extern void smb_data_print(netdissect_options *, const u_char *, u_int);
+extern const char *smb_errstr(int, int);
+extern const char *nt_errstr(uint32_t);
diff --git a/smbutil.c b/smbutil.c
new file mode 100644
index 0000000..97217a8
--- /dev/null
+++ b/smbutil.c
@@ -0,0 +1,1968 @@
+/*
+ * Copyright (C) Andrew Tridgell 1995-1999
+ *
+ * This software may be distributed either under the terms of the
+ * BSD-style license that accompanies tcpdump or the GNU GPL version 2
+ * or later
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "netdissect-ctype.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "smb.h"
+
+static int stringlen_is_set;
+static uint32_t stringlen;
+extern const u_char *startbuf;
+
+/*
+ * Reset SMB state.
+ */
+void
+smb_reset(void)
+{
+ stringlen_is_set = 0;
+ stringlen = 0;
+}
+
+/*
+ * interpret a 32 bit dos packed date/time to some parameters
+ */
+static void
+interpret_dos_date(uint32_t date, struct tm *tp)
+{
+ uint32_t p0, p1, p2, p3;
+
+ p0 = date & 0xFF;
+ p1 = ((date & 0xFF00) >> 8) & 0xFF;
+ p2 = ((date & 0xFF0000) >> 16) & 0xFF;
+ p3 = ((date & 0xFF000000) >> 24) & 0xFF;
+
+ tp->tm_sec = 2 * (p0 & 0x1F);
+ tp->tm_min = ((p0 >> 5) & 0xFF) + ((p1 & 0x7) << 3);
+ tp->tm_hour = (p1 >> 3) & 0xFF;
+ tp->tm_mday = (p2 & 0x1F);
+ tp->tm_mon = ((p2 >> 5) & 0xFF) + ((p3 & 0x1) << 3) - 1;
+ tp->tm_year = ((p3 >> 1) & 0xFF) + 80;
+}
+
+/*
+ * common portion:
+ * create a unix date from a dos date
+ */
+static time_t
+int_unix_date(uint32_t dos_date)
+{
+ struct tm t;
+
+ if (dos_date == 0)
+ return(0);
+
+ interpret_dos_date(dos_date, &t);
+ t.tm_wday = 1;
+ t.tm_yday = 1;
+ t.tm_isdst = 0;
+
+ return (mktime(&t));
+}
+
+/*
+ * create a unix date from a dos date
+ * in network byte order
+ */
+static time_t
+make_unix_date(netdissect_options *ndo, const u_char *date_ptr)
+{
+ uint32_t dos_date = 0;
+
+ dos_date = GET_LE_U_4(date_ptr);
+
+ return int_unix_date(dos_date);
+}
+
+/*
+ * create a unix date from a dos date
+ * in halfword-swapped network byte order!
+ */
+static time_t
+make_unix_date2(netdissect_options *ndo, const u_char *date_ptr)
+{
+ uint32_t x, x2;
+
+ x = GET_LE_U_4(date_ptr);
+ x2 = ((x & 0xFFFF) << 16) | ((x & 0xFFFF0000) >> 16);
+ return int_unix_date(x2);
+}
+
+/*
+ * interpret an 8 byte "filetime" structure to a time_t
+ * It's originally in "100ns units since jan 1st 1601"
+ */
+static time_t
+interpret_long_date(netdissect_options *ndo, const u_char *p)
+{
+ double d;
+ time_t ret;
+
+ /* this gives us seconds since jan 1st 1601 (approx) */
+ d = (GET_LE_U_4(p + 4) * 256.0 + GET_U_1(p + 3)) * (1.0e-7 * (1 << 24));
+
+ /* now adjust by 369 years to make the secs since 1970 */
+ d -= 369.0 * 365.25 * 24 * 60 * 60;
+
+ /* and a fudge factor as we got it wrong by a few days */
+ d += (3 * 24 * 60 * 60 + 6 * 60 * 60 + 2);
+
+ if (d < 0)
+ return(0);
+
+ ret = (time_t)d;
+
+ return(ret);
+}
+
+/*
+ * interpret the weird netbios "name". Return the name type, or -1 if
+ * we run past the end of the buffer
+ */
+static int
+name_interpret(netdissect_options *ndo,
+ const u_char *in, const u_char *maxbuf, char *out)
+{
+ int ret;
+ u_int len;
+
+ if (in >= maxbuf)
+ return(-1); /* name goes past the end of the buffer */
+ len = GET_U_1(in) / 2;
+ in++;
+
+ *out=0;
+
+ if (len > 30 || len == 0)
+ return(0);
+
+ while (len) {
+ ND_TCHECK_2(in);
+ if (in + 1 >= maxbuf)
+ return(-1); /* name goes past the end of the buffer */
+ if (GET_U_1(in) < 'A' || GET_U_1(in) > 'P' ||
+ GET_U_1(in + 1) < 'A' || GET_U_1(in + 1) > 'P') {
+ *out = 0;
+ return(0);
+ }
+ *out = ((GET_U_1(in) - 'A') << 4) + (GET_U_1(in + 1) - 'A');
+ in += 2;
+ out++;
+ len--;
+ }
+ *out = 0;
+ ret = out[-1];
+
+ return(ret);
+
+trunc:
+ return(-1);
+}
+
+/*
+ * find a pointer to a netbios name
+ */
+static const u_char *
+name_ptr(netdissect_options *ndo,
+ const u_char *buf, u_int ofs, const u_char *maxbuf)
+{
+ const u_char *p;
+ u_char c;
+
+ p = buf + ofs;
+ if (p >= maxbuf)
+ return(NULL); /* name goes past the end of the buffer */
+
+ c = GET_U_1(p);
+
+ /* XXX - this should use the same code that the DNS dissector does */
+ if ((c & 0xC0) == 0xC0) {
+ uint16_t l;
+
+ ND_TCHECK_2(p);
+ if ((p + 1) >= maxbuf)
+ return(NULL); /* name goes past the end of the buffer */
+ l = GET_BE_U_2(p) & 0x3FFF;
+ if (l == 0) {
+ /* We have a pointer that points to itself. */
+ return(NULL);
+ }
+ p = buf + l;
+ if (p >= maxbuf)
+ return(NULL); /* name goes past the end of the buffer */
+ ND_TCHECK_1(p);
+ }
+ return(p);
+
+trunc:
+ return(NULL); /* name goes past the end of the buffer */
+}
+
+/*
+ * extract a netbios name from a buf
+ */
+static int
+name_extract(netdissect_options *ndo,
+ const u_char *buf, u_int ofs, const u_char *maxbuf, char *name)
+{
+ const u_char *p = name_ptr(ndo, buf, ofs, maxbuf);
+ if (p == NULL)
+ return(-1); /* error (probably name going past end of buffer) */
+ name[0] = '\0';
+ return(name_interpret(ndo, p, maxbuf, name));
+}
+
+
+/*
+ * return the total storage length of a mangled name
+ */
+static int
+name_len(netdissect_options *ndo,
+ const u_char *s, const u_char *maxbuf)
+{
+ const u_char *s0 = s;
+ unsigned char c;
+
+ if (s >= maxbuf)
+ return(-1); /* name goes past the end of the buffer */
+ c = GET_U_1(s);
+ if ((c & 0xC0) == 0xC0)
+ return(2);
+ while (GET_U_1(s)) {
+ if (s >= maxbuf)
+ return(-1); /* name goes past the end of the buffer */
+ s += GET_U_1(s) + 1;
+ ND_TCHECK_1(s);
+ }
+ return(ND_BYTES_BETWEEN(s, s0) + 1);
+
+trunc:
+ return(-1); /* name goes past the end of the buffer */
+}
+
+static void
+print_asc(netdissect_options *ndo,
+ const u_char *buf, u_int len)
+{
+ u_int i;
+ for (i = 0; i < len; i++)
+ fn_print_char(ndo, GET_U_1(buf + i));
+}
+
+static const char *
+name_type_str(int name_type)
+{
+ const char *f = NULL;
+
+ switch (name_type) {
+ case 0: f = "Workstation"; break;
+ case 0x03: f = "Client?"; break;
+ case 0x20: f = "Server"; break;
+ case 0x1d: f = "Master Browser"; break;
+ case 0x1b: f = "Domain Controller"; break;
+ case 0x1e: f = "Browser Server"; break;
+ default: f = "Unknown"; break;
+ }
+ return(f);
+}
+
+void
+smb_data_print(netdissect_options *ndo, const u_char *buf, u_int len)
+{
+ u_int i = 0;
+
+ if (len == 0)
+ return;
+ ND_PRINT("[%03X] ", i);
+ for (i = 0; i < len; /*nothing*/) {
+ ND_PRINT("%02X ", GET_U_1(buf + i) & 0xff);
+ i++;
+ if (i%8 == 0)
+ ND_PRINT(" ");
+ if (i % 16 == 0) {
+ print_asc(ndo, buf + i - 16, 8);
+ ND_PRINT(" ");
+ print_asc(ndo, buf + i - 8, 8);
+ ND_PRINT("\n");
+ if (i < len)
+ ND_PRINT("[%03X] ", i);
+ }
+ }
+ if (i % 16) {
+ int n;
+
+ n = 16 - (i % 16);
+ ND_PRINT(" ");
+ if (n>8)
+ ND_PRINT(" ");
+ while (n--)
+ ND_PRINT(" ");
+
+ n = ND_MIN(8, i % 16);
+ print_asc(ndo, buf + i - (i % 16), n);
+ ND_PRINT(" ");
+ n = (i % 16) - n;
+ if (n > 0)
+ print_asc(ndo, buf + i - n, n);
+ ND_PRINT("\n");
+ }
+}
+
+
+static void
+write_bits(netdissect_options *ndo,
+ unsigned int val, const char *fmt)
+{
+ const char *p = fmt;
+ u_int i = 0;
+
+ while ((p = strchr(fmt, '|'))) {
+ u_int l = ND_BYTES_BETWEEN(p, fmt);
+ if (l && (val & (1 << i)))
+ ND_PRINT("%.*s ", (int)l, fmt);
+ fmt = p + 1;
+ i++;
+ }
+}
+
+/* convert a UCS-2 string into an ASCII string */
+#define MAX_UNISTR_SIZE 1000
+static const u_char *
+unistr(netdissect_options *ndo, char (*buf)[MAX_UNISTR_SIZE+1],
+ const u_char *s, uint32_t strsize, int is_null_terminated,
+ int use_unicode)
+{
+ u_int c;
+ size_t l = 0;
+ const u_char *sp;
+
+ if (use_unicode) {
+ /*
+ * Skip padding that puts the string on an even boundary.
+ */
+ if (((s - startbuf) % 2) != 0) {
+ ND_TCHECK_1(s);
+ s++;
+ }
+ }
+ if (is_null_terminated) {
+ /*
+ * Null-terminated string.
+ * Find the length, counting the terminating NUL.
+ */
+ strsize = 0;
+ sp = s;
+ if (!use_unicode) {
+ for (;;) {
+ c = GET_U_1(sp);
+ sp++;
+ strsize++;
+ if (c == '\0')
+ break;
+ }
+ } else {
+ for (;;) {
+ c = GET_LE_U_2(sp);
+ sp += 2;
+ strsize += 2;
+ if (c == '\0')
+ break;
+ }
+ }
+ }
+ if (!use_unicode) {
+ while (strsize != 0) {
+ c = GET_U_1(s);
+ s++;
+ strsize--;
+ if (c == 0) {
+ /*
+ * Even counted strings may have embedded null
+ * terminators, so quit here, and skip past
+ * the rest of the data.
+ *
+ * Make sure, however, that the rest of the data
+ * is there, so we don't overflow the buffer when
+ * skipping past it.
+ */
+ ND_TCHECK_LEN(s, strsize);
+ s += strsize;
+ strsize = 0;
+ break;
+ }
+ if (l < MAX_UNISTR_SIZE) {
+ if (ND_ASCII_ISPRINT(c)) {
+ /* It's a printable ASCII character */
+ (*buf)[l] = (char)c;
+ } else {
+ /* It's a non-ASCII character or a non-printable ASCII character */
+ (*buf)[l] = '.';
+ }
+ l++;
+ }
+ }
+ } else {
+ while (strsize > 1) {
+ c = GET_LE_U_2(s);
+ s += 2;
+ strsize -= 2;
+ if (c == 0) {
+ /*
+ * Even counted strings may have embedded null
+ * terminators, so quit here, and skip past
+ * the rest of the data.
+ *
+ * Make sure, however, that the rest of the data
+ * is there, so we don't overflow the buffer when
+ * skipping past it.
+ */
+ ND_TCHECK_LEN(s, strsize);
+ s += strsize;
+ strsize = 0;
+ break;
+ }
+ if (l < MAX_UNISTR_SIZE) {
+ if (ND_ASCII_ISPRINT(c)) {
+ /* It's a printable ASCII character */
+ (*buf)[l] = (char)c;
+ } else {
+ /* It's a non-ASCII character or a non-printable ASCII character */
+ (*buf)[l] = '.';
+ }
+ l++;
+ }
+ }
+ if (strsize == 1) {
+ /* We have half of a code point; skip past it */
+ ND_TCHECK_1(s);
+ s++;
+ }
+ }
+ (*buf)[l] = 0;
+ return s;
+
+trunc:
+ (*buf)[l] = 0;
+ return NULL;
+}
+
+static const u_char *
+smb_fdata1(netdissect_options *ndo,
+ const u_char *buf, const char *fmt, const u_char *maxbuf,
+ int unicodestr)
+{
+ int reverse = 0;
+ const char *attrib_fmt = "READONLY|HIDDEN|SYSTEM|VOLUME|DIR|ARCHIVE|";
+ char strbuf[MAX_UNISTR_SIZE+1];
+
+ while (*fmt && buf<maxbuf) {
+ switch (*fmt) {
+ case 'a':
+ write_bits(ndo, GET_U_1(buf), attrib_fmt);
+ buf++;
+ fmt++;
+ break;
+
+ case 'A':
+ write_bits(ndo, GET_LE_U_2(buf), attrib_fmt);
+ buf += 2;
+ fmt++;
+ break;
+
+ case '{':
+ {
+ char bitfmt[128];
+ char *p;
+ u_int l;
+
+ p = strchr(++fmt, '}');
+ l = ND_BYTES_BETWEEN(p, fmt);
+
+ if (l > sizeof(bitfmt) - 1)
+ l = sizeof(bitfmt)-1;
+
+ strncpy(bitfmt, fmt, l);
+ bitfmt[l] = '\0';
+ fmt = p + 1;
+ write_bits(ndo, GET_U_1(buf), bitfmt);
+ buf++;
+ break;
+ }
+
+ case 'P':
+ {
+ int l = atoi(fmt + 1);
+ ND_TCHECK_LEN(buf, l);
+ buf += l;
+ fmt++;
+ while (ND_ASCII_ISDIGIT(*fmt))
+ fmt++;
+ break;
+ }
+ case 'r':
+ reverse = !reverse;
+ fmt++;
+ break;
+ case 'b':
+ {
+ unsigned int x;
+ x = GET_U_1(buf);
+ ND_PRINT("%u (0x%x)", x, x);
+ buf += 1;
+ fmt++;
+ break;
+ }
+ case 'd':
+ {
+ int x;
+ x = reverse ? GET_BE_S_2(buf) :
+ GET_LE_S_2(buf);
+ ND_PRINT("%d (0x%x)", x, x);
+ buf += 2;
+ fmt++;
+ break;
+ }
+ case 'D':
+ {
+ int x;
+ x = reverse ? GET_BE_S_4(buf) :
+ GET_LE_S_4(buf);
+ ND_PRINT("%d (0x%x)", x, x);
+ buf += 4;
+ fmt++;
+ break;
+ }
+ case 'L':
+ {
+ uint64_t x;
+ x = reverse ? GET_BE_U_8(buf) :
+ GET_LE_U_8(buf);
+ ND_PRINT("%" PRIu64 " (0x%" PRIx64 ")", x, x);
+ buf += 8;
+ fmt++;
+ break;
+ }
+ case 'u':
+ {
+ unsigned int x;
+ x = reverse ? GET_BE_U_2(buf) :
+ GET_LE_U_2(buf);
+ ND_PRINT("%u (0x%x)", x, x);
+ buf += 2;
+ fmt++;
+ break;
+ }
+ case 'U':
+ {
+ unsigned int x;
+ x = reverse ? GET_BE_U_4(buf) :
+ GET_LE_U_4(buf);
+ ND_PRINT("%u (0x%x)", x, x);
+ buf += 4;
+ fmt++;
+ break;
+ }
+ case 'M':
+ {
+ /* Weird mixed-endian length values in 64-bit locks */
+ uint32_t x1, x2;
+ uint64_t x;
+ ND_TCHECK_8(buf);
+ x1 = reverse ? GET_BE_U_4(buf) :
+ GET_LE_U_4(buf);
+ x2 = reverse ? GET_BE_U_4(buf + 4) :
+ GET_LE_U_4(buf + 4);
+ x = (((uint64_t)x1) << 32) | x2;
+ ND_PRINT("%" PRIu64 " (0x%" PRIx64 ")", x, x);
+ buf += 8;
+ fmt++;
+ break;
+ }
+ case 'B':
+ {
+ unsigned int x;
+ x = GET_U_1(buf);
+ ND_PRINT("0x%X", x);
+ buf += 1;
+ fmt++;
+ break;
+ }
+ case 'w':
+ {
+ unsigned int x;
+ x = reverse ? GET_BE_U_2(buf) :
+ GET_LE_U_2(buf);
+ ND_PRINT("0x%X", x);
+ buf += 2;
+ fmt++;
+ break;
+ }
+ case 'W':
+ {
+ unsigned int x;
+ x = reverse ? GET_BE_U_4(buf) :
+ GET_LE_U_4(buf);
+ ND_PRINT("0x%X", x);
+ buf += 4;
+ fmt++;
+ break;
+ }
+ case 'l':
+ {
+ fmt++;
+ switch (*fmt) {
+
+ case 'b':
+ stringlen = GET_U_1(buf);
+ stringlen_is_set = 1;
+ ND_PRINT("%u", stringlen);
+ buf += 1;
+ break;
+
+ case 'd':
+ case 'u':
+ stringlen = reverse ? GET_BE_U_2(buf) :
+ GET_LE_U_2(buf);
+ stringlen_is_set = 1;
+ ND_PRINT("%u", stringlen);
+ buf += 2;
+ break;
+
+ case 'D':
+ case 'U':
+ stringlen = reverse ? GET_BE_U_4(buf) :
+ GET_LE_U_4(buf);
+ stringlen_is_set = 1;
+ ND_PRINT("%u", stringlen);
+ buf += 4;
+ break;
+ }
+ fmt++;
+ break;
+ }
+ case 'S':
+ case 'R': /* like 'S', but always ASCII */
+ {
+ /*XXX unistr() */
+ buf = unistr(ndo, &strbuf, buf, 0, 1, (*fmt == 'R') ? 0 : unicodestr);
+ ND_PRINT("%s", strbuf);
+ if (buf == NULL)
+ goto trunc;
+ fmt++;
+ break;
+ }
+ case 'Z':
+ case 'Y': /* like 'Z', but always ASCII */
+ {
+ if (GET_U_1(buf) != 4 && GET_U_1(buf) != 2) {
+ ND_PRINT("Error! ASCIIZ buffer of type %u", GET_U_1(buf));
+ return maxbuf; /* give up */
+ }
+ buf = unistr(ndo, &strbuf, buf + 1, 0, 1, (*fmt == 'Y') ? 0 : unicodestr);
+ ND_PRINT("%s", strbuf);
+ if (buf == NULL)
+ goto trunc;
+ fmt++;
+ break;
+ }
+ case 's':
+ {
+ int l = atoi(fmt + 1);
+ ND_TCHECK_LEN(buf, l);
+ ND_PRINT("%-*.*s", l, l, buf);
+ buf += l;
+ fmt++;
+ while (ND_ASCII_ISDIGIT(*fmt))
+ fmt++;
+ break;
+ }
+ case 'c':
+ {
+ if (!stringlen_is_set) {
+ ND_PRINT("{stringlen not set}");
+ goto trunc;
+ }
+ ND_TCHECK_LEN(buf, stringlen);
+ ND_PRINT("%-*.*s", (int)stringlen, (int)stringlen, buf);
+ buf += stringlen;
+ fmt++;
+ while (ND_ASCII_ISDIGIT(*fmt))
+ fmt++;
+ break;
+ }
+ case 'C':
+ {
+ if (!stringlen_is_set) {
+ ND_PRINT("{stringlen not set}");
+ goto trunc;
+ }
+ buf = unistr(ndo, &strbuf, buf, stringlen, 0, unicodestr);
+ ND_PRINT("%s", strbuf);
+ if (buf == NULL)
+ goto trunc;
+ fmt++;
+ break;
+ }
+ case 'h':
+ {
+ int l = atoi(fmt + 1);
+ ND_TCHECK_LEN(buf, l);
+ while (l--) {
+ ND_PRINT("%02x", GET_U_1(buf));
+ buf++;
+ }
+ fmt++;
+ while (ND_ASCII_ISDIGIT(*fmt))
+ fmt++;
+ break;
+ }
+ case 'n':
+ {
+ int t = atoi(fmt+1);
+ char nbuf[255];
+ int name_type;
+ int len;
+
+ switch (t) {
+ case 1:
+ name_type = name_extract(ndo, startbuf, ND_BYTES_BETWEEN(buf, startbuf),
+ maxbuf, nbuf);
+ if (name_type < 0)
+ goto trunc;
+ len = name_len(ndo, buf, maxbuf);
+ if (len < 0)
+ goto trunc;
+ buf += len;
+ ND_PRINT("%-15.15s NameType=0x%02X (%s)", nbuf, name_type,
+ name_type_str(name_type));
+ break;
+ case 2:
+ name_type = GET_U_1(buf + 15);
+ ND_PRINT("%-15.15s NameType=0x%02X (%s)", buf, name_type,
+ name_type_str(name_type));
+ buf += 16;
+ break;
+ }
+ fmt++;
+ while (ND_ASCII_ISDIGIT(*fmt))
+ fmt++;
+ break;
+ }
+ case 'T':
+ {
+ time_t t;
+ const char *tstring;
+ char buffer[sizeof("Www Mmm dd hh:mm:ss yyyyy")];
+ uint32_t x;
+
+ switch (atoi(fmt + 1)) {
+ case 1:
+ x = GET_LE_U_4(buf);
+ if (x == 0 || x == 0xFFFFFFFF)
+ t = 0;
+ else
+ t = make_unix_date(ndo, buf);
+ buf += 4;
+ break;
+ case 2:
+ x = GET_LE_U_4(buf);
+ if (x == 0 || x == 0xFFFFFFFF)
+ t = 0;
+ else
+ t = make_unix_date2(ndo, buf);
+ buf += 4;
+ break;
+ case 3:
+ ND_TCHECK_8(buf);
+ t = interpret_long_date(ndo, buf);
+ buf += 8;
+ break;
+ default:
+ t = 0;
+ break;
+ }
+ if (t != 0) {
+ tstring = nd_format_time(buffer, sizeof(buffer), "%a %b %e %T %Y",
+ localtime(&t));
+ } else
+ tstring = "NULL";
+ ND_PRINT("%s\n", tstring);
+ fmt++;
+ while (ND_ASCII_ISDIGIT(*fmt))
+ fmt++;
+ break;
+ }
+ default:
+ ND_PRINT("%c", *fmt);
+ fmt++;
+ break;
+ }
+ }
+
+ if (buf >= maxbuf && *fmt)
+ ND_PRINT("END OF BUFFER\n");
+
+ return(buf);
+
+trunc:
+ nd_print_trunc(ndo);
+ return(NULL);
+}
+
+const u_char *
+smb_fdata(netdissect_options *ndo,
+ const u_char *buf, const char *fmt, const u_char *maxbuf,
+ int unicodestr)
+{
+ static int depth = 0;
+ char s[128];
+ char *p;
+
+ while (*fmt) {
+ switch (*fmt) {
+ case '*':
+ /*
+ * List of multiple instances of something described by the
+ * remainder of the string (which may itself include a list
+ * of multiple instances of something, so we recurse).
+ */
+ fmt++;
+ while (buf < maxbuf) {
+ const u_char *buf2;
+ depth++;
+ /*
+ * In order to avoid stack exhaustion recurse at most 10
+ * levels; that "should not happen", as no SMB structure
+ * should be nested *that* deeply, and we thus shouldn't
+ * have format strings with that level of nesting.
+ */
+ if (depth == 10) {
+ ND_PRINT("(too many nested levels, not recursing)");
+ buf2 = buf;
+ } else
+ buf2 = smb_fdata(ndo, buf, fmt, maxbuf, unicodestr);
+ depth--;
+ if (buf2 == NULL)
+ return(NULL);
+ if (buf2 == buf)
+ return(buf);
+ buf = buf2;
+ }
+ return(buf);
+
+ case '|':
+ /*
+ * Just do a bounds check.
+ */
+ fmt++;
+ if (buf >= maxbuf)
+ return(buf);
+ break;
+
+ case '%':
+ /*
+ * XXX - unused?
+ */
+ fmt++;
+ buf = maxbuf;
+ break;
+
+ case '#':
+ /*
+ * Done?
+ */
+ fmt++;
+ return(buf);
+ break;
+
+ case '[':
+ /*
+ * Format of an item, enclosed in square brackets; dissect
+ * the item with smb_fdata1().
+ */
+ fmt++;
+ if (buf >= maxbuf)
+ return(buf);
+ memset(s, 0, sizeof(s));
+ p = strchr(fmt, ']');
+ if ((size_t)(p - fmt + 1) > sizeof(s)) {
+ /* overrun */
+ return(buf);
+ }
+ strncpy(s, fmt, p - fmt);
+ s[p - fmt] = '\0';
+ fmt = p + 1;
+ buf = smb_fdata1(ndo, buf, s, maxbuf, unicodestr);
+ if (buf == NULL) {
+ /*
+ * Truncated.
+ * Is the next character a newline?
+ * If so, print it before quitting, so we don't
+ * get stuff in the middle of the line.
+ */
+ if (*fmt == '\n')
+ ND_PRINT("\n");
+ return(NULL);
+ }
+ break;
+
+ default:
+ /*
+ * Not a formatting character, so just print it.
+ */
+ ND_PRINT("%c", *fmt);
+ fmt++;
+ break;
+ }
+ }
+ if (!depth && buf < maxbuf) {
+ u_int len = ND_BYTES_BETWEEN(maxbuf, buf);
+ ND_PRINT("Data: (%u bytes)\n", len);
+ smb_data_print(ndo, buf, len);
+ return(buf + len);
+ }
+ return(buf);
+}
+
+typedef struct {
+ const char *name;
+ int code;
+ const char *message;
+} err_code_struct;
+
+/* DOS Error Messages */
+static const err_code_struct dos_msgs[] = {
+ { "ERRbadfunc", 1, "Invalid function." },
+ { "ERRbadfile", 2, "File not found." },
+ { "ERRbadpath", 3, "Directory invalid." },
+ { "ERRnofids", 4, "No file descriptors available" },
+ { "ERRnoaccess", 5, "Access denied." },
+ { "ERRbadfid", 6, "Invalid file handle." },
+ { "ERRbadmcb", 7, "Memory control blocks destroyed." },
+ { "ERRnomem", 8, "Insufficient server memory to perform the requested function." },
+ { "ERRbadmem", 9, "Invalid memory block address." },
+ { "ERRbadenv", 10, "Invalid environment." },
+ { "ERRbadformat", 11, "Invalid format." },
+ { "ERRbadaccess", 12, "Invalid open mode." },
+ { "ERRbaddata", 13, "Invalid data." },
+ { "ERR", 14, "reserved." },
+ { "ERRbaddrive", 15, "Invalid drive specified." },
+ { "ERRremcd", 16, "A Delete Directory request attempted to remove the server's current directory." },
+ { "ERRdiffdevice", 17, "Not same device." },
+ { "ERRnofiles", 18, "A File Search command can find no more files matching the specified criteria." },
+ { "ERRbadshare", 32, "The sharing mode specified for an Open conflicts with existing FIDs on the file." },
+ { "ERRlock", 33, "A Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process." },
+ { "ERRfilexists", 80, "The file named in a Create Directory, Make New File or Link request already exists." },
+ { "ERRbadpipe", 230, "Pipe invalid." },
+ { "ERRpipebusy", 231, "All instances of the requested pipe are busy." },
+ { "ERRpipeclosing", 232, "Pipe close in progress." },
+ { "ERRnotconnected", 233, "No process on other end of pipe." },
+ { "ERRmoredata", 234, "There is more data to be returned." },
+ { NULL, -1, NULL }
+ };
+
+/* Server Error Messages */
+static const err_code_struct server_msgs[] = {
+ { "ERRerror", 1, "Non-specific error code." },
+ { "ERRbadpw", 2, "Bad password - name/password pair in a Tree Connect or Session Setup are invalid." },
+ { "ERRbadtype", 3, "reserved." },
+ { "ERRaccess", 4, "The requester does not have the necessary access rights within the specified context for the requested function. The context is defined by the TID or the UID." },
+ { "ERRinvnid", 5, "The tree ID (TID) specified in a command was invalid." },
+ { "ERRinvnetname", 6, "Invalid network name in tree connect." },
+ { "ERRinvdevice", 7, "Invalid device - printer request made to non-printer connection or non-printer request made to printer connection." },
+ { "ERRqfull", 49, "Print queue full (files) -- returned by open print file." },
+ { "ERRqtoobig", 50, "Print queue full -- no space." },
+ { "ERRqeof", 51, "EOF on print queue dump." },
+ { "ERRinvpfid", 52, "Invalid print file FID." },
+ { "ERRsmbcmd", 64, "The server did not recognize the command received." },
+ { "ERRsrverror", 65, "The server encountered an internal error, e.g., system file unavailable." },
+ { "ERRfilespecs", 67, "The file handle (FID) and pathname parameters contained an invalid combination of values." },
+ { "ERRreserved", 68, "reserved." },
+ { "ERRbadpermits", 69, "The access permissions specified for a file or directory are not a valid combination. The server cannot set the requested attribute." },
+ { "ERRreserved", 70, "reserved." },
+ { "ERRsetattrmode", 71, "The attribute mode in the Set File Attribute request is invalid." },
+ { "ERRpaused", 81, "Server is paused." },
+ { "ERRmsgoff", 82, "Not receiving messages." },
+ { "ERRnoroom", 83, "No room to buffer message." },
+ { "ERRrmuns", 87, "Too many remote user names." },
+ { "ERRtimeout", 88, "Operation timed out." },
+ { "ERRnoresource", 89, "No resources currently available for request." },
+ { "ERRtoomanyuids", 90, "Too many UIDs active on this session." },
+ { "ERRbaduid", 91, "The UID is not known as a valid ID on this session." },
+ { "ERRusempx", 250, "Temp unable to support Raw, use MPX mode." },
+ { "ERRusestd", 251, "Temp unable to support Raw, use standard read/write." },
+ { "ERRcontmpx", 252, "Continue in MPX mode." },
+ { "ERRreserved", 253, "reserved." },
+ { "ERRreserved", 254, "reserved." },
+ { "ERRnosupport", 0xFFFF, "Function not supported." },
+ { NULL, -1, NULL }
+};
+
+/* Hard Error Messages */
+static const err_code_struct hard_msgs[] = {
+ { "ERRnowrite", 19, "Attempt to write on write-protected diskette." },
+ { "ERRbadunit", 20, "Unknown unit." },
+ { "ERRnotready", 21, "Drive not ready." },
+ { "ERRbadcmd", 22, "Unknown command." },
+ { "ERRdata", 23, "Data error (CRC)." },
+ { "ERRbadreq", 24, "Bad request structure length." },
+ { "ERRseek", 25 , "Seek error." },
+ { "ERRbadmedia", 26, "Unknown media type." },
+ { "ERRbadsector", 27, "Sector not found." },
+ { "ERRnopaper", 28, "Printer out of paper." },
+ { "ERRwrite", 29, "Write fault." },
+ { "ERRread", 30, "Read fault." },
+ { "ERRgeneral", 31, "General failure." },
+ { "ERRbadshare", 32, "A open conflicts with an existing open." },
+ { "ERRlock", 33, "A Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process." },
+ { "ERRwrongdisk", 34, "The wrong disk was found in a drive." },
+ { "ERRFCBUnavail", 35, "No FCBs are available to process request." },
+ { "ERRsharebufexc", 36, "A sharing buffer has been exceeded." },
+ { NULL, -1, NULL }
+};
+
+static const struct {
+ int code;
+ const char *class;
+ const err_code_struct *err_msgs;
+} err_classes[] = {
+ { 0, "SUCCESS", NULL },
+ { 0x01, "ERRDOS", dos_msgs },
+ { 0x02, "ERRSRV", server_msgs },
+ { 0x03, "ERRHRD", hard_msgs },
+ { 0x04, "ERRXOS", NULL },
+ { 0xE1, "ERRRMX1", NULL },
+ { 0xE2, "ERRRMX2", NULL },
+ { 0xE3, "ERRRMX3", NULL },
+ { 0xFF, "ERRCMD", NULL },
+ { -1, NULL, NULL }
+};
+
+/*
+ * return a SMB error string from a SMB buffer
+ */
+const char *
+smb_errstr(int class, int num)
+{
+ static char ret[128];
+ int i, j;
+
+ ret[0] = 0;
+
+ for (i = 0; err_classes[i].class; i++)
+ if (err_classes[i].code == class) {
+ if (err_classes[i].err_msgs) {
+ const err_code_struct *err = err_classes[i].err_msgs;
+ for (j = 0; err[j].name; j++)
+ if (num == err[j].code) {
+ snprintf(ret, sizeof(ret), "%s - %s (%s)",
+ err_classes[i].class, err[j].name, err[j].message);
+ return ret;
+ }
+ }
+
+ snprintf(ret, sizeof(ret), "%s - %d", err_classes[i].class, num);
+ return ret;
+ }
+
+ snprintf(ret, sizeof(ret), "ERROR: Unknown error (%d,%d)", class, num);
+ return(ret);
+}
+
+typedef struct {
+ uint32_t code;
+ const char *name;
+} nt_err_code_struct;
+
+/*
+ * NT Error codes
+ */
+static const nt_err_code_struct nt_errors[] = {
+ { 0x00000000, "STATUS_SUCCESS" },
+ { 0x00000000, "STATUS_WAIT_0" },
+ { 0x00000001, "STATUS_WAIT_1" },
+ { 0x00000002, "STATUS_WAIT_2" },
+ { 0x00000003, "STATUS_WAIT_3" },
+ { 0x0000003F, "STATUS_WAIT_63" },
+ { 0x00000080, "STATUS_ABANDONED" },
+ { 0x00000080, "STATUS_ABANDONED_WAIT_0" },
+ { 0x000000BF, "STATUS_ABANDONED_WAIT_63" },
+ { 0x000000C0, "STATUS_USER_APC" },
+ { 0x00000100, "STATUS_KERNEL_APC" },
+ { 0x00000101, "STATUS_ALERTED" },
+ { 0x00000102, "STATUS_TIMEOUT" },
+ { 0x00000103, "STATUS_PENDING" },
+ { 0x00000104, "STATUS_REPARSE" },
+ { 0x00000105, "STATUS_MORE_ENTRIES" },
+ { 0x00000106, "STATUS_NOT_ALL_ASSIGNED" },
+ { 0x00000107, "STATUS_SOME_NOT_MAPPED" },
+ { 0x00000108, "STATUS_OPLOCK_BREAK_IN_PROGRESS" },
+ { 0x00000109, "STATUS_VOLUME_MOUNTED" },
+ { 0x0000010A, "STATUS_RXACT_COMMITTED" },
+ { 0x0000010B, "STATUS_NOTIFY_CLEANUP" },
+ { 0x0000010C, "STATUS_NOTIFY_ENUM_DIR" },
+ { 0x0000010D, "STATUS_NO_QUOTAS_FOR_ACCOUNT" },
+ { 0x0000010E, "STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED" },
+ { 0x00000110, "STATUS_PAGE_FAULT_TRANSITION" },
+ { 0x00000111, "STATUS_PAGE_FAULT_DEMAND_ZERO" },
+ { 0x00000112, "STATUS_PAGE_FAULT_COPY_ON_WRITE" },
+ { 0x00000113, "STATUS_PAGE_FAULT_GUARD_PAGE" },
+ { 0x00000114, "STATUS_PAGE_FAULT_PAGING_FILE" },
+ { 0x00000115, "STATUS_CACHE_PAGE_LOCKED" },
+ { 0x00000116, "STATUS_CRASH_DUMP" },
+ { 0x00000117, "STATUS_BUFFER_ALL_ZEROS" },
+ { 0x00000118, "STATUS_REPARSE_OBJECT" },
+ { 0x0000045C, "STATUS_NO_SHUTDOWN_IN_PROGRESS" },
+ { 0x40000000, "STATUS_OBJECT_NAME_EXISTS" },
+ { 0x40000001, "STATUS_THREAD_WAS_SUSPENDED" },
+ { 0x40000002, "STATUS_WORKING_SET_LIMIT_RANGE" },
+ { 0x40000003, "STATUS_IMAGE_NOT_AT_BASE" },
+ { 0x40000004, "STATUS_RXACT_STATE_CREATED" },
+ { 0x40000005, "STATUS_SEGMENT_NOTIFICATION" },
+ { 0x40000006, "STATUS_LOCAL_USER_SESSION_KEY" },
+ { 0x40000007, "STATUS_BAD_CURRENT_DIRECTORY" },
+ { 0x40000008, "STATUS_SERIAL_MORE_WRITES" },
+ { 0x40000009, "STATUS_REGISTRY_RECOVERED" },
+ { 0x4000000A, "STATUS_FT_READ_RECOVERY_FROM_BACKUP" },
+ { 0x4000000B, "STATUS_FT_WRITE_RECOVERY" },
+ { 0x4000000C, "STATUS_SERIAL_COUNTER_TIMEOUT" },
+ { 0x4000000D, "STATUS_NULL_LM_PASSWORD" },
+ { 0x4000000E, "STATUS_IMAGE_MACHINE_TYPE_MISMATCH" },
+ { 0x4000000F, "STATUS_RECEIVE_PARTIAL" },
+ { 0x40000010, "STATUS_RECEIVE_EXPEDITED" },
+ { 0x40000011, "STATUS_RECEIVE_PARTIAL_EXPEDITED" },
+ { 0x40000012, "STATUS_EVENT_DONE" },
+ { 0x40000013, "STATUS_EVENT_PENDING" },
+ { 0x40000014, "STATUS_CHECKING_FILE_SYSTEM" },
+ { 0x40000015, "STATUS_FATAL_APP_EXIT" },
+ { 0x40000016, "STATUS_PREDEFINED_HANDLE" },
+ { 0x40000017, "STATUS_WAS_UNLOCKED" },
+ { 0x40000018, "STATUS_SERVICE_NOTIFICATION" },
+ { 0x40000019, "STATUS_WAS_LOCKED" },
+ { 0x4000001A, "STATUS_LOG_HARD_ERROR" },
+ { 0x4000001B, "STATUS_ALREADY_WIN32" },
+ { 0x4000001C, "STATUS_WX86_UNSIMULATE" },
+ { 0x4000001D, "STATUS_WX86_CONTINUE" },
+ { 0x4000001E, "STATUS_WX86_SINGLE_STEP" },
+ { 0x4000001F, "STATUS_WX86_BREAKPOINT" },
+ { 0x40000020, "STATUS_WX86_EXCEPTION_CONTINUE" },
+ { 0x40000021, "STATUS_WX86_EXCEPTION_LASTCHANCE" },
+ { 0x40000022, "STATUS_WX86_EXCEPTION_CHAIN" },
+ { 0x40000023, "STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE" },
+ { 0x40000024, "STATUS_NO_YIELD_PERFORMED" },
+ { 0x40000025, "STATUS_TIMER_RESUME_IGNORED" },
+ { 0x80000001, "STATUS_GUARD_PAGE_VIOLATION" },
+ { 0x80000002, "STATUS_DATATYPE_MISALIGNMENT" },
+ { 0x80000003, "STATUS_BREAKPOINT" },
+ { 0x80000004, "STATUS_SINGLE_STEP" },
+ { 0x80000005, "STATUS_BUFFER_OVERFLOW" },
+ { 0x80000006, "STATUS_NO_MORE_FILES" },
+ { 0x80000007, "STATUS_WAKE_SYSTEM_DEBUGGER" },
+ { 0x8000000A, "STATUS_HANDLES_CLOSED" },
+ { 0x8000000B, "STATUS_NO_INHERITANCE" },
+ { 0x8000000C, "STATUS_GUID_SUBSTITUTION_MADE" },
+ { 0x8000000D, "STATUS_PARTIAL_COPY" },
+ { 0x8000000E, "STATUS_DEVICE_PAPER_EMPTY" },
+ { 0x8000000F, "STATUS_DEVICE_POWERED_OFF" },
+ { 0x80000010, "STATUS_DEVICE_OFF_LINE" },
+ { 0x80000011, "STATUS_DEVICE_BUSY" },
+ { 0x80000012, "STATUS_NO_MORE_EAS" },
+ { 0x80000013, "STATUS_INVALID_EA_NAME" },
+ { 0x80000014, "STATUS_EA_LIST_INCONSISTENT" },
+ { 0x80000015, "STATUS_INVALID_EA_FLAG" },
+ { 0x80000016, "STATUS_VERIFY_REQUIRED" },
+ { 0x80000017, "STATUS_EXTRANEOUS_INFORMATION" },
+ { 0x80000018, "STATUS_RXACT_COMMIT_NECESSARY" },
+ { 0x8000001A, "STATUS_NO_MORE_ENTRIES" },
+ { 0x8000001B, "STATUS_FILEMARK_DETECTED" },
+ { 0x8000001C, "STATUS_MEDIA_CHANGED" },
+ { 0x8000001D, "STATUS_BUS_RESET" },
+ { 0x8000001E, "STATUS_END_OF_MEDIA" },
+ { 0x8000001F, "STATUS_BEGINNING_OF_MEDIA" },
+ { 0x80000020, "STATUS_MEDIA_CHECK" },
+ { 0x80000021, "STATUS_SETMARK_DETECTED" },
+ { 0x80000022, "STATUS_NO_DATA_DETECTED" },
+ { 0x80000023, "STATUS_REDIRECTOR_HAS_OPEN_HANDLES" },
+ { 0x80000024, "STATUS_SERVER_HAS_OPEN_HANDLES" },
+ { 0x80000025, "STATUS_ALREADY_DISCONNECTED" },
+ { 0x80000026, "STATUS_LONGJUMP" },
+ { 0x80040111, "MAPI_E_LOGON_FAILED" },
+ { 0x80090300, "SEC_E_INSUFFICIENT_MEMORY" },
+ { 0x80090301, "SEC_E_INVALID_HANDLE" },
+ { 0x80090302, "SEC_E_UNSUPPORTED_FUNCTION" },
+ { 0x8009030B, "SEC_E_NO_IMPERSONATION" },
+ { 0x8009030D, "SEC_E_UNKNOWN_CREDENTIALS" },
+ { 0x8009030E, "SEC_E_NO_CREDENTIALS" },
+ { 0x8009030F, "SEC_E_MESSAGE_ALTERED" },
+ { 0x80090310, "SEC_E_OUT_OF_SEQUENCE" },
+ { 0x80090311, "SEC_E_NO_AUTHENTICATING_AUTHORITY" },
+ { 0xC0000001, "STATUS_UNSUCCESSFUL" },
+ { 0xC0000002, "STATUS_NOT_IMPLEMENTED" },
+ { 0xC0000003, "STATUS_INVALID_INFO_CLASS" },
+ { 0xC0000004, "STATUS_INFO_LENGTH_MISMATCH" },
+ { 0xC0000005, "STATUS_ACCESS_VIOLATION" },
+ { 0xC0000006, "STATUS_IN_PAGE_ERROR" },
+ { 0xC0000007, "STATUS_PAGEFILE_QUOTA" },
+ { 0xC0000008, "STATUS_INVALID_HANDLE" },
+ { 0xC0000009, "STATUS_BAD_INITIAL_STACK" },
+ { 0xC000000A, "STATUS_BAD_INITIAL_PC" },
+ { 0xC000000B, "STATUS_INVALID_CID" },
+ { 0xC000000C, "STATUS_TIMER_NOT_CANCELED" },
+ { 0xC000000D, "STATUS_INVALID_PARAMETER" },
+ { 0xC000000E, "STATUS_NO_SUCH_DEVICE" },
+ { 0xC000000F, "STATUS_NO_SUCH_FILE" },
+ { 0xC0000010, "STATUS_INVALID_DEVICE_REQUEST" },
+ { 0xC0000011, "STATUS_END_OF_FILE" },
+ { 0xC0000012, "STATUS_WRONG_VOLUME" },
+ { 0xC0000013, "STATUS_NO_MEDIA_IN_DEVICE" },
+ { 0xC0000014, "STATUS_UNRECOGNIZED_MEDIA" },
+ { 0xC0000015, "STATUS_NONEXISTENT_SECTOR" },
+ { 0xC0000016, "STATUS_MORE_PROCESSING_REQUIRED" },
+ { 0xC0000017, "STATUS_NO_MEMORY" },
+ { 0xC0000018, "STATUS_CONFLICTING_ADDRESSES" },
+ { 0xC0000019, "STATUS_NOT_MAPPED_VIEW" },
+ { 0xC000001A, "STATUS_UNABLE_TO_FREE_VM" },
+ { 0xC000001B, "STATUS_UNABLE_TO_DELETE_SECTION" },
+ { 0xC000001C, "STATUS_INVALID_SYSTEM_SERVICE" },
+ { 0xC000001D, "STATUS_ILLEGAL_INSTRUCTION" },
+ { 0xC000001E, "STATUS_INVALID_LOCK_SEQUENCE" },
+ { 0xC000001F, "STATUS_INVALID_VIEW_SIZE" },
+ { 0xC0000020, "STATUS_INVALID_FILE_FOR_SECTION" },
+ { 0xC0000021, "STATUS_ALREADY_COMMITTED" },
+ { 0xC0000022, "STATUS_ACCESS_DENIED" },
+ { 0xC0000023, "STATUS_BUFFER_TOO_SMALL" },
+ { 0xC0000024, "STATUS_OBJECT_TYPE_MISMATCH" },
+ { 0xC0000025, "STATUS_NONCONTINUABLE_EXCEPTION" },
+ { 0xC0000026, "STATUS_INVALID_DISPOSITION" },
+ { 0xC0000027, "STATUS_UNWIND" },
+ { 0xC0000028, "STATUS_BAD_STACK" },
+ { 0xC0000029, "STATUS_INVALID_UNWIND_TARGET" },
+ { 0xC000002A, "STATUS_NOT_LOCKED" },
+ { 0xC000002B, "STATUS_PARITY_ERROR" },
+ { 0xC000002C, "STATUS_UNABLE_TO_DECOMMIT_VM" },
+ { 0xC000002D, "STATUS_NOT_COMMITTED" },
+ { 0xC000002E, "STATUS_INVALID_PORT_ATTRIBUTES" },
+ { 0xC000002F, "STATUS_PORT_MESSAGE_TOO_LONG" },
+ { 0xC0000030, "STATUS_INVALID_PARAMETER_MIX" },
+ { 0xC0000031, "STATUS_INVALID_QUOTA_LOWER" },
+ { 0xC0000032, "STATUS_DISK_CORRUPT_ERROR" },
+ { 0xC0000033, "STATUS_OBJECT_NAME_INVALID" },
+ { 0xC0000034, "STATUS_OBJECT_NAME_NOT_FOUND" },
+ { 0xC0000035, "STATUS_OBJECT_NAME_COLLISION" },
+ { 0xC0000037, "STATUS_PORT_DISCONNECTED" },
+ { 0xC0000038, "STATUS_DEVICE_ALREADY_ATTACHED" },
+ { 0xC0000039, "STATUS_OBJECT_PATH_INVALID" },
+ { 0xC000003A, "STATUS_OBJECT_PATH_NOT_FOUND" },
+ { 0xC000003B, "STATUS_OBJECT_PATH_SYNTAX_BAD" },
+ { 0xC000003C, "STATUS_DATA_OVERRUN" },
+ { 0xC000003D, "STATUS_DATA_LATE_ERROR" },
+ { 0xC000003E, "STATUS_DATA_ERROR" },
+ { 0xC000003F, "STATUS_CRC_ERROR" },
+ { 0xC0000040, "STATUS_SECTION_TOO_BIG" },
+ { 0xC0000041, "STATUS_PORT_CONNECTION_REFUSED" },
+ { 0xC0000042, "STATUS_INVALID_PORT_HANDLE" },
+ { 0xC0000043, "STATUS_SHARING_VIOLATION" },
+ { 0xC0000044, "STATUS_QUOTA_EXCEEDED" },
+ { 0xC0000045, "STATUS_INVALID_PAGE_PROTECTION" },
+ { 0xC0000046, "STATUS_MUTANT_NOT_OWNED" },
+ { 0xC0000047, "STATUS_SEMAPHORE_LIMIT_EXCEEDED" },
+ { 0xC0000048, "STATUS_PORT_ALREADY_SET" },
+ { 0xC0000049, "STATUS_SECTION_NOT_IMAGE" },
+ { 0xC000004A, "STATUS_SUSPEND_COUNT_EXCEEDED" },
+ { 0xC000004B, "STATUS_THREAD_IS_TERMINATING" },
+ { 0xC000004C, "STATUS_BAD_WORKING_SET_LIMIT" },
+ { 0xC000004D, "STATUS_INCOMPATIBLE_FILE_MAP" },
+ { 0xC000004E, "STATUS_SECTION_PROTECTION" },
+ { 0xC000004F, "STATUS_EAS_NOT_SUPPORTED" },
+ { 0xC0000050, "STATUS_EA_TOO_LARGE" },
+ { 0xC0000051, "STATUS_NONEXISTENT_EA_ENTRY" },
+ { 0xC0000052, "STATUS_NO_EAS_ON_FILE" },
+ { 0xC0000053, "STATUS_EA_CORRUPT_ERROR" },
+ { 0xC0000054, "STATUS_FILE_LOCK_CONFLICT" },
+ { 0xC0000055, "STATUS_LOCK_NOT_GRANTED" },
+ { 0xC0000056, "STATUS_DELETE_PENDING" },
+ { 0xC0000057, "STATUS_CTL_FILE_NOT_SUPPORTED" },
+ { 0xC0000058, "STATUS_UNKNOWN_REVISION" },
+ { 0xC0000059, "STATUS_REVISION_MISMATCH" },
+ { 0xC000005A, "STATUS_INVALID_OWNER" },
+ { 0xC000005B, "STATUS_INVALID_PRIMARY_GROUP" },
+ { 0xC000005C, "STATUS_NO_IMPERSONATION_TOKEN" },
+ { 0xC000005D, "STATUS_CANT_DISABLE_MANDATORY" },
+ { 0xC000005E, "STATUS_NO_LOGON_SERVERS" },
+ { 0xC000005F, "STATUS_NO_SUCH_LOGON_SESSION" },
+ { 0xC0000060, "STATUS_NO_SUCH_PRIVILEGE" },
+ { 0xC0000061, "STATUS_PRIVILEGE_NOT_HELD" },
+ { 0xC0000062, "STATUS_INVALID_ACCOUNT_NAME" },
+ { 0xC0000063, "STATUS_USER_EXISTS" },
+ { 0xC0000064, "STATUS_NO_SUCH_USER" },
+ { 0xC0000065, "STATUS_GROUP_EXISTS" },
+ { 0xC0000066, "STATUS_NO_SUCH_GROUP" },
+ { 0xC0000067, "STATUS_MEMBER_IN_GROUP" },
+ { 0xC0000068, "STATUS_MEMBER_NOT_IN_GROUP" },
+ { 0xC0000069, "STATUS_LAST_ADMIN" },
+ { 0xC000006A, "STATUS_WRONG_PASSWORD" },
+ { 0xC000006B, "STATUS_ILL_FORMED_PASSWORD" },
+ { 0xC000006C, "STATUS_PASSWORD_RESTRICTION" },
+ { 0xC000006D, "STATUS_LOGON_FAILURE" },
+ { 0xC000006E, "STATUS_ACCOUNT_RESTRICTION" },
+ { 0xC000006F, "STATUS_INVALID_LOGON_HOURS" },
+ { 0xC0000070, "STATUS_INVALID_WORKSTATION" },
+ { 0xC0000071, "STATUS_PASSWORD_EXPIRED" },
+ { 0xC0000072, "STATUS_ACCOUNT_DISABLED" },
+ { 0xC0000073, "STATUS_NONE_MAPPED" },
+ { 0xC0000074, "STATUS_TOO_MANY_LUIDS_REQUESTED" },
+ { 0xC0000075, "STATUS_LUIDS_EXHAUSTED" },
+ { 0xC0000076, "STATUS_INVALID_SUB_AUTHORITY" },
+ { 0xC0000077, "STATUS_INVALID_ACL" },
+ { 0xC0000078, "STATUS_INVALID_SID" },
+ { 0xC0000079, "STATUS_INVALID_SECURITY_DESCR" },
+ { 0xC000007A, "STATUS_PROCEDURE_NOT_FOUND" },
+ { 0xC000007B, "STATUS_INVALID_IMAGE_FORMAT" },
+ { 0xC000007C, "STATUS_NO_TOKEN" },
+ { 0xC000007D, "STATUS_BAD_INHERITANCE_ACL" },
+ { 0xC000007E, "STATUS_RANGE_NOT_LOCKED" },
+ { 0xC000007F, "STATUS_DISK_FULL" },
+ { 0xC0000080, "STATUS_SERVER_DISABLED" },
+ { 0xC0000081, "STATUS_SERVER_NOT_DISABLED" },
+ { 0xC0000082, "STATUS_TOO_MANY_GUIDS_REQUESTED" },
+ { 0xC0000083, "STATUS_GUIDS_EXHAUSTED" },
+ { 0xC0000084, "STATUS_INVALID_ID_AUTHORITY" },
+ { 0xC0000085, "STATUS_AGENTS_EXHAUSTED" },
+ { 0xC0000086, "STATUS_INVALID_VOLUME_LABEL" },
+ { 0xC0000087, "STATUS_SECTION_NOT_EXTENDED" },
+ { 0xC0000088, "STATUS_NOT_MAPPED_DATA" },
+ { 0xC0000089, "STATUS_RESOURCE_DATA_NOT_FOUND" },
+ { 0xC000008A, "STATUS_RESOURCE_TYPE_NOT_FOUND" },
+ { 0xC000008B, "STATUS_RESOURCE_NAME_NOT_FOUND" },
+ { 0xC000008C, "STATUS_ARRAY_BOUNDS_EXCEEDED" },
+ { 0xC000008D, "STATUS_FLOAT_DENORMAL_OPERAND" },
+ { 0xC000008E, "STATUS_FLOAT_DIVIDE_BY_ZERO" },
+ { 0xC000008F, "STATUS_FLOAT_INEXACT_RESULT" },
+ { 0xC0000090, "STATUS_FLOAT_INVALID_OPERATION" },
+ { 0xC0000091, "STATUS_FLOAT_OVERFLOW" },
+ { 0xC0000092, "STATUS_FLOAT_STACK_CHECK" },
+ { 0xC0000093, "STATUS_FLOAT_UNDERFLOW" },
+ { 0xC0000094, "STATUS_INTEGER_DIVIDE_BY_ZERO" },
+ { 0xC0000095, "STATUS_INTEGER_OVERFLOW" },
+ { 0xC0000096, "STATUS_PRIVILEGED_INSTRUCTION" },
+ { 0xC0000097, "STATUS_TOO_MANY_PAGING_FILES" },
+ { 0xC0000098, "STATUS_FILE_INVALID" },
+ { 0xC0000099, "STATUS_ALLOTTED_SPACE_EXCEEDED" },
+ { 0xC000009A, "STATUS_INSUFFICIENT_RESOURCES" },
+ { 0xC000009B, "STATUS_DFS_EXIT_PATH_FOUND" },
+ { 0xC000009C, "STATUS_DEVICE_DATA_ERROR" },
+ { 0xC000009D, "STATUS_DEVICE_NOT_CONNECTED" },
+ { 0xC000009E, "STATUS_DEVICE_POWER_FAILURE" },
+ { 0xC000009F, "STATUS_FREE_VM_NOT_AT_BASE" },
+ { 0xC00000A0, "STATUS_MEMORY_NOT_ALLOCATED" },
+ { 0xC00000A1, "STATUS_WORKING_SET_QUOTA" },
+ { 0xC00000A2, "STATUS_MEDIA_WRITE_PROTECTED" },
+ { 0xC00000A3, "STATUS_DEVICE_NOT_READY" },
+ { 0xC00000A4, "STATUS_INVALID_GROUP_ATTRIBUTES" },
+ { 0xC00000A5, "STATUS_BAD_IMPERSONATION_LEVEL" },
+ { 0xC00000A6, "STATUS_CANT_OPEN_ANONYMOUS" },
+ { 0xC00000A7, "STATUS_BAD_VALIDATION_CLASS" },
+ { 0xC00000A8, "STATUS_BAD_TOKEN_TYPE" },
+ { 0xC00000A9, "STATUS_BAD_MASTER_BOOT_RECORD" },
+ { 0xC00000AA, "STATUS_INSTRUCTION_MISALIGNMENT" },
+ { 0xC00000AB, "STATUS_INSTANCE_NOT_AVAILABLE" },
+ { 0xC00000AC, "STATUS_PIPE_NOT_AVAILABLE" },
+ { 0xC00000AD, "STATUS_INVALID_PIPE_STATE" },
+ { 0xC00000AE, "STATUS_PIPE_BUSY" },
+ { 0xC00000AF, "STATUS_ILLEGAL_FUNCTION" },
+ { 0xC00000B0, "STATUS_PIPE_DISCONNECTED" },
+ { 0xC00000B1, "STATUS_PIPE_CLOSING" },
+ { 0xC00000B2, "STATUS_PIPE_CONNECTED" },
+ { 0xC00000B3, "STATUS_PIPE_LISTENING" },
+ { 0xC00000B4, "STATUS_INVALID_READ_MODE" },
+ { 0xC00000B5, "STATUS_IO_TIMEOUT" },
+ { 0xC00000B6, "STATUS_FILE_FORCED_CLOSED" },
+ { 0xC00000B7, "STATUS_PROFILING_NOT_STARTED" },
+ { 0xC00000B8, "STATUS_PROFILING_NOT_STOPPED" },
+ { 0xC00000B9, "STATUS_COULD_NOT_INTERPRET" },
+ { 0xC00000BA, "STATUS_FILE_IS_A_DIRECTORY" },
+ { 0xC00000BB, "STATUS_NOT_SUPPORTED" },
+ { 0xC00000BC, "STATUS_REMOTE_NOT_LISTENING" },
+ { 0xC00000BD, "STATUS_DUPLICATE_NAME" },
+ { 0xC00000BE, "STATUS_BAD_NETWORK_PATH" },
+ { 0xC00000BF, "STATUS_NETWORK_BUSY" },
+ { 0xC00000C0, "STATUS_DEVICE_DOES_NOT_EXIST" },
+ { 0xC00000C1, "STATUS_TOO_MANY_COMMANDS" },
+ { 0xC00000C2, "STATUS_ADAPTER_HARDWARE_ERROR" },
+ { 0xC00000C3, "STATUS_INVALID_NETWORK_RESPONSE" },
+ { 0xC00000C4, "STATUS_UNEXPECTED_NETWORK_ERROR" },
+ { 0xC00000C5, "STATUS_BAD_REMOTE_ADAPTER" },
+ { 0xC00000C6, "STATUS_PRINT_QUEUE_FULL" },
+ { 0xC00000C7, "STATUS_NO_SPOOL_SPACE" },
+ { 0xC00000C8, "STATUS_PRINT_CANCELLED" },
+ { 0xC00000C9, "STATUS_NETWORK_NAME_DELETED" },
+ { 0xC00000CA, "STATUS_NETWORK_ACCESS_DENIED" },
+ { 0xC00000CB, "STATUS_BAD_DEVICE_TYPE" },
+ { 0xC00000CC, "STATUS_BAD_NETWORK_NAME" },
+ { 0xC00000CD, "STATUS_TOO_MANY_NAMES" },
+ { 0xC00000CE, "STATUS_TOO_MANY_SESSIONS" },
+ { 0xC00000CF, "STATUS_SHARING_PAUSED" },
+ { 0xC00000D0, "STATUS_REQUEST_NOT_ACCEPTED" },
+ { 0xC00000D1, "STATUS_REDIRECTOR_PAUSED" },
+ { 0xC00000D2, "STATUS_NET_WRITE_FAULT" },
+ { 0xC00000D3, "STATUS_PROFILING_AT_LIMIT" },
+ { 0xC00000D4, "STATUS_NOT_SAME_DEVICE" },
+ { 0xC00000D5, "STATUS_FILE_RENAMED" },
+ { 0xC00000D6, "STATUS_VIRTUAL_CIRCUIT_CLOSED" },
+ { 0xC00000D7, "STATUS_NO_SECURITY_ON_OBJECT" },
+ { 0xC00000D8, "STATUS_CANT_WAIT" },
+ { 0xC00000D9, "STATUS_PIPE_EMPTY" },
+ { 0xC00000DA, "STATUS_CANT_ACCESS_DOMAIN_INFO" },
+ { 0xC00000DB, "STATUS_CANT_TERMINATE_SELF" },
+ { 0xC00000DC, "STATUS_INVALID_SERVER_STATE" },
+ { 0xC00000DD, "STATUS_INVALID_DOMAIN_STATE" },
+ { 0xC00000DE, "STATUS_INVALID_DOMAIN_ROLE" },
+ { 0xC00000DF, "STATUS_NO_SUCH_DOMAIN" },
+ { 0xC00000E0, "STATUS_DOMAIN_EXISTS" },
+ { 0xC00000E1, "STATUS_DOMAIN_LIMIT_EXCEEDED" },
+ { 0xC00000E2, "STATUS_OPLOCK_NOT_GRANTED" },
+ { 0xC00000E3, "STATUS_INVALID_OPLOCK_PROTOCOL" },
+ { 0xC00000E4, "STATUS_INTERNAL_DB_CORRUPTION" },
+ { 0xC00000E5, "STATUS_INTERNAL_ERROR" },
+ { 0xC00000E6, "STATUS_GENERIC_NOT_MAPPED" },
+ { 0xC00000E7, "STATUS_BAD_DESCRIPTOR_FORMAT" },
+ { 0xC00000E8, "STATUS_INVALID_USER_BUFFER" },
+ { 0xC00000E9, "STATUS_UNEXPECTED_IO_ERROR" },
+ { 0xC00000EA, "STATUS_UNEXPECTED_MM_CREATE_ERR" },
+ { 0xC00000EB, "STATUS_UNEXPECTED_MM_MAP_ERROR" },
+ { 0xC00000EC, "STATUS_UNEXPECTED_MM_EXTEND_ERR" },
+ { 0xC00000ED, "STATUS_NOT_LOGON_PROCESS" },
+ { 0xC00000EE, "STATUS_LOGON_SESSION_EXISTS" },
+ { 0xC00000EF, "STATUS_INVALID_PARAMETER_1" },
+ { 0xC00000F0, "STATUS_INVALID_PARAMETER_2" },
+ { 0xC00000F1, "STATUS_INVALID_PARAMETER_3" },
+ { 0xC00000F2, "STATUS_INVALID_PARAMETER_4" },
+ { 0xC00000F3, "STATUS_INVALID_PARAMETER_5" },
+ { 0xC00000F4, "STATUS_INVALID_PARAMETER_6" },
+ { 0xC00000F5, "STATUS_INVALID_PARAMETER_7" },
+ { 0xC00000F6, "STATUS_INVALID_PARAMETER_8" },
+ { 0xC00000F7, "STATUS_INVALID_PARAMETER_9" },
+ { 0xC00000F8, "STATUS_INVALID_PARAMETER_10" },
+ { 0xC00000F9, "STATUS_INVALID_PARAMETER_11" },
+ { 0xC00000FA, "STATUS_INVALID_PARAMETER_12" },
+ { 0xC00000FB, "STATUS_REDIRECTOR_NOT_STARTED" },
+ { 0xC00000FC, "STATUS_REDIRECTOR_STARTED" },
+ { 0xC00000FD, "STATUS_STACK_OVERFLOW" },
+ { 0xC00000FE, "STATUS_NO_SUCH_PACKAGE" },
+ { 0xC00000FF, "STATUS_BAD_FUNCTION_TABLE" },
+ { 0xC0000100, "STATUS_VARIABLE_NOT_FOUND" },
+ { 0xC0000101, "STATUS_DIRECTORY_NOT_EMPTY" },
+ { 0xC0000102, "STATUS_FILE_CORRUPT_ERROR" },
+ { 0xC0000103, "STATUS_NOT_A_DIRECTORY" },
+ { 0xC0000104, "STATUS_BAD_LOGON_SESSION_STATE" },
+ { 0xC0000105, "STATUS_LOGON_SESSION_COLLISION" },
+ { 0xC0000106, "STATUS_NAME_TOO_LONG" },
+ { 0xC0000107, "STATUS_FILES_OPEN" },
+ { 0xC0000108, "STATUS_CONNECTION_IN_USE" },
+ { 0xC0000109, "STATUS_MESSAGE_NOT_FOUND" },
+ { 0xC000010A, "STATUS_PROCESS_IS_TERMINATING" },
+ { 0xC000010B, "STATUS_INVALID_LOGON_TYPE" },
+ { 0xC000010C, "STATUS_NO_GUID_TRANSLATION" },
+ { 0xC000010D, "STATUS_CANNOT_IMPERSONATE" },
+ { 0xC000010E, "STATUS_IMAGE_ALREADY_LOADED" },
+ { 0xC000010F, "STATUS_ABIOS_NOT_PRESENT" },
+ { 0xC0000110, "STATUS_ABIOS_LID_NOT_EXIST" },
+ { 0xC0000111, "STATUS_ABIOS_LID_ALREADY_OWNED" },
+ { 0xC0000112, "STATUS_ABIOS_NOT_LID_OWNER" },
+ { 0xC0000113, "STATUS_ABIOS_INVALID_COMMAND" },
+ { 0xC0000114, "STATUS_ABIOS_INVALID_LID" },
+ { 0xC0000115, "STATUS_ABIOS_SELECTOR_NOT_AVAILABLE" },
+ { 0xC0000116, "STATUS_ABIOS_INVALID_SELECTOR" },
+ { 0xC0000117, "STATUS_NO_LDT" },
+ { 0xC0000118, "STATUS_INVALID_LDT_SIZE" },
+ { 0xC0000119, "STATUS_INVALID_LDT_OFFSET" },
+ { 0xC000011A, "STATUS_INVALID_LDT_DESCRIPTOR" },
+ { 0xC000011B, "STATUS_INVALID_IMAGE_NE_FORMAT" },
+ { 0xC000011C, "STATUS_RXACT_INVALID_STATE" },
+ { 0xC000011D, "STATUS_RXACT_COMMIT_FAILURE" },
+ { 0xC000011E, "STATUS_MAPPED_FILE_SIZE_ZERO" },
+ { 0xC000011F, "STATUS_TOO_MANY_OPENED_FILES" },
+ { 0xC0000120, "STATUS_CANCELLED" },
+ { 0xC0000121, "STATUS_CANNOT_DELETE" },
+ { 0xC0000122, "STATUS_INVALID_COMPUTER_NAME" },
+ { 0xC0000123, "STATUS_FILE_DELETED" },
+ { 0xC0000124, "STATUS_SPECIAL_ACCOUNT" },
+ { 0xC0000125, "STATUS_SPECIAL_GROUP" },
+ { 0xC0000126, "STATUS_SPECIAL_USER" },
+ { 0xC0000127, "STATUS_MEMBERS_PRIMARY_GROUP" },
+ { 0xC0000128, "STATUS_FILE_CLOSED" },
+ { 0xC0000129, "STATUS_TOO_MANY_THREADS" },
+ { 0xC000012A, "STATUS_THREAD_NOT_IN_PROCESS" },
+ { 0xC000012B, "STATUS_TOKEN_ALREADY_IN_USE" },
+ { 0xC000012C, "STATUS_PAGEFILE_QUOTA_EXCEEDED" },
+ { 0xC000012D, "STATUS_COMMITMENT_LIMIT" },
+ { 0xC000012E, "STATUS_INVALID_IMAGE_LE_FORMAT" },
+ { 0xC000012F, "STATUS_INVALID_IMAGE_NOT_MZ" },
+ { 0xC0000130, "STATUS_INVALID_IMAGE_PROTECT" },
+ { 0xC0000131, "STATUS_INVALID_IMAGE_WIN_16" },
+ { 0xC0000132, "STATUS_LOGON_SERVER_CONFLICT" },
+ { 0xC0000133, "STATUS_TIME_DIFFERENCE_AT_DC" },
+ { 0xC0000134, "STATUS_SYNCHRONIZATION_REQUIRED" },
+ { 0xC0000135, "STATUS_DLL_NOT_FOUND" },
+ { 0xC0000136, "STATUS_OPEN_FAILED" },
+ { 0xC0000137, "STATUS_IO_PRIVILEGE_FAILED" },
+ { 0xC0000138, "STATUS_ORDINAL_NOT_FOUND" },
+ { 0xC0000139, "STATUS_ENTRYPOINT_NOT_FOUND" },
+ { 0xC000013A, "STATUS_CONTROL_C_EXIT" },
+ { 0xC000013B, "STATUS_LOCAL_DISCONNECT" },
+ { 0xC000013C, "STATUS_REMOTE_DISCONNECT" },
+ { 0xC000013D, "STATUS_REMOTE_RESOURCES" },
+ { 0xC000013E, "STATUS_LINK_FAILED" },
+ { 0xC000013F, "STATUS_LINK_TIMEOUT" },
+ { 0xC0000140, "STATUS_INVALID_CONNECTION" },
+ { 0xC0000141, "STATUS_INVALID_ADDRESS" },
+ { 0xC0000142, "STATUS_DLL_INIT_FAILED" },
+ { 0xC0000143, "STATUS_MISSING_SYSTEMFILE" },
+ { 0xC0000144, "STATUS_UNHANDLED_EXCEPTION" },
+ { 0xC0000145, "STATUS_APP_INIT_FAILURE" },
+ { 0xC0000146, "STATUS_PAGEFILE_CREATE_FAILED" },
+ { 0xC0000147, "STATUS_NO_PAGEFILE" },
+ { 0xC0000148, "STATUS_INVALID_LEVEL" },
+ { 0xC0000149, "STATUS_WRONG_PASSWORD_CORE" },
+ { 0xC000014A, "STATUS_ILLEGAL_FLOAT_CONTEXT" },
+ { 0xC000014B, "STATUS_PIPE_BROKEN" },
+ { 0xC000014C, "STATUS_REGISTRY_CORRUPT" },
+ { 0xC000014D, "STATUS_REGISTRY_IO_FAILED" },
+ { 0xC000014E, "STATUS_NO_EVENT_PAIR" },
+ { 0xC000014F, "STATUS_UNRECOGNIZED_VOLUME" },
+ { 0xC0000150, "STATUS_SERIAL_NO_DEVICE_INITED" },
+ { 0xC0000151, "STATUS_NO_SUCH_ALIAS" },
+ { 0xC0000152, "STATUS_MEMBER_NOT_IN_ALIAS" },
+ { 0xC0000153, "STATUS_MEMBER_IN_ALIAS" },
+ { 0xC0000154, "STATUS_ALIAS_EXISTS" },
+ { 0xC0000155, "STATUS_LOGON_NOT_GRANTED" },
+ { 0xC0000156, "STATUS_TOO_MANY_SECRETS" },
+ { 0xC0000157, "STATUS_SECRET_TOO_LONG" },
+ { 0xC0000158, "STATUS_INTERNAL_DB_ERROR" },
+ { 0xC0000159, "STATUS_FULLSCREEN_MODE" },
+ { 0xC000015A, "STATUS_TOO_MANY_CONTEXT_IDS" },
+ { 0xC000015B, "STATUS_LOGON_TYPE_NOT_GRANTED" },
+ { 0xC000015C, "STATUS_NOT_REGISTRY_FILE" },
+ { 0xC000015D, "STATUS_NT_CROSS_ENCRYPTION_REQUIRED" },
+ { 0xC000015E, "STATUS_DOMAIN_CTRLR_CONFIG_ERROR" },
+ { 0xC000015F, "STATUS_FT_MISSING_MEMBER" },
+ { 0xC0000160, "STATUS_ILL_FORMED_SERVICE_ENTRY" },
+ { 0xC0000161, "STATUS_ILLEGAL_CHARACTER" },
+ { 0xC0000162, "STATUS_UNMAPPABLE_CHARACTER" },
+ { 0xC0000163, "STATUS_UNDEFINED_CHARACTER" },
+ { 0xC0000164, "STATUS_FLOPPY_VOLUME" },
+ { 0xC0000165, "STATUS_FLOPPY_ID_MARK_NOT_FOUND" },
+ { 0xC0000166, "STATUS_FLOPPY_WRONG_CYLINDER" },
+ { 0xC0000167, "STATUS_FLOPPY_UNKNOWN_ERROR" },
+ { 0xC0000168, "STATUS_FLOPPY_BAD_REGISTERS" },
+ { 0xC0000169, "STATUS_DISK_RECALIBRATE_FAILED" },
+ { 0xC000016A, "STATUS_DISK_OPERATION_FAILED" },
+ { 0xC000016B, "STATUS_DISK_RESET_FAILED" },
+ { 0xC000016C, "STATUS_SHARED_IRQ_BUSY" },
+ { 0xC000016D, "STATUS_FT_ORPHANING" },
+ { 0xC000016E, "STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT" },
+ { 0xC0000172, "STATUS_PARTITION_FAILURE" },
+ { 0xC0000173, "STATUS_INVALID_BLOCK_LENGTH" },
+ { 0xC0000174, "STATUS_DEVICE_NOT_PARTITIONED" },
+ { 0xC0000175, "STATUS_UNABLE_TO_LOCK_MEDIA" },
+ { 0xC0000176, "STATUS_UNABLE_TO_UNLOAD_MEDIA" },
+ { 0xC0000177, "STATUS_EOM_OVERFLOW" },
+ { 0xC0000178, "STATUS_NO_MEDIA" },
+ { 0xC000017A, "STATUS_NO_SUCH_MEMBER" },
+ { 0xC000017B, "STATUS_INVALID_MEMBER" },
+ { 0xC000017C, "STATUS_KEY_DELETED" },
+ { 0xC000017D, "STATUS_NO_LOG_SPACE" },
+ { 0xC000017E, "STATUS_TOO_MANY_SIDS" },
+ { 0xC000017F, "STATUS_LM_CROSS_ENCRYPTION_REQUIRED" },
+ { 0xC0000180, "STATUS_KEY_HAS_CHILDREN" },
+ { 0xC0000181, "STATUS_CHILD_MUST_BE_VOLATILE" },
+ { 0xC0000182, "STATUS_DEVICE_CONFIGURATION_ERROR" },
+ { 0xC0000183, "STATUS_DRIVER_INTERNAL_ERROR" },
+ { 0xC0000184, "STATUS_INVALID_DEVICE_STATE" },
+ { 0xC0000185, "STATUS_IO_DEVICE_ERROR" },
+ { 0xC0000186, "STATUS_DEVICE_PROTOCOL_ERROR" },
+ { 0xC0000187, "STATUS_BACKUP_CONTROLLER" },
+ { 0xC0000188, "STATUS_LOG_FILE_FULL" },
+ { 0xC0000189, "STATUS_TOO_LATE" },
+ { 0xC000018A, "STATUS_NO_TRUST_LSA_SECRET" },
+ { 0xC000018B, "STATUS_NO_TRUST_SAM_ACCOUNT" },
+ { 0xC000018C, "STATUS_TRUSTED_DOMAIN_FAILURE" },
+ { 0xC000018D, "STATUS_TRUSTED_RELATIONSHIP_FAILURE" },
+ { 0xC000018E, "STATUS_EVENTLOG_FILE_CORRUPT" },
+ { 0xC000018F, "STATUS_EVENTLOG_CANT_START" },
+ { 0xC0000190, "STATUS_TRUST_FAILURE" },
+ { 0xC0000191, "STATUS_MUTANT_LIMIT_EXCEEDED" },
+ { 0xC0000192, "STATUS_NETLOGON_NOT_STARTED" },
+ { 0xC0000193, "STATUS_ACCOUNT_EXPIRED" },
+ { 0xC0000194, "STATUS_POSSIBLE_DEADLOCK" },
+ { 0xC0000195, "STATUS_NETWORK_CREDENTIAL_CONFLICT" },
+ { 0xC0000196, "STATUS_REMOTE_SESSION_LIMIT" },
+ { 0xC0000197, "STATUS_EVENTLOG_FILE_CHANGED" },
+ { 0xC0000198, "STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT" },
+ { 0xC0000199, "STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT" },
+ { 0xC000019A, "STATUS_NOLOGON_SERVER_TRUST_ACCOUNT" },
+ { 0xC000019B, "STATUS_DOMAIN_TRUST_INCONSISTENT" },
+ { 0xC000019C, "STATUS_FS_DRIVER_REQUIRED" },
+ { 0xC0000202, "STATUS_NO_USER_SESSION_KEY" },
+ { 0xC0000203, "STATUS_USER_SESSION_DELETED" },
+ { 0xC0000204, "STATUS_RESOURCE_LANG_NOT_FOUND" },
+ { 0xC0000205, "STATUS_INSUFF_SERVER_RESOURCES" },
+ { 0xC0000206, "STATUS_INVALID_BUFFER_SIZE" },
+ { 0xC0000207, "STATUS_INVALID_ADDRESS_COMPONENT" },
+ { 0xC0000208, "STATUS_INVALID_ADDRESS_WILDCARD" },
+ { 0xC0000209, "STATUS_TOO_MANY_ADDRESSES" },
+ { 0xC000020A, "STATUS_ADDRESS_ALREADY_EXISTS" },
+ { 0xC000020B, "STATUS_ADDRESS_CLOSED" },
+ { 0xC000020C, "STATUS_CONNECTION_DISCONNECTED" },
+ { 0xC000020D, "STATUS_CONNECTION_RESET" },
+ { 0xC000020E, "STATUS_TOO_MANY_NODES" },
+ { 0xC000020F, "STATUS_TRANSACTION_ABORTED" },
+ { 0xC0000210, "STATUS_TRANSACTION_TIMED_OUT" },
+ { 0xC0000211, "STATUS_TRANSACTION_NO_RELEASE" },
+ { 0xC0000212, "STATUS_TRANSACTION_NO_MATCH" },
+ { 0xC0000213, "STATUS_TRANSACTION_RESPONDED" },
+ { 0xC0000214, "STATUS_TRANSACTION_INVALID_ID" },
+ { 0xC0000215, "STATUS_TRANSACTION_INVALID_TYPE" },
+ { 0xC0000216, "STATUS_NOT_SERVER_SESSION" },
+ { 0xC0000217, "STATUS_NOT_CLIENT_SESSION" },
+ { 0xC0000218, "STATUS_CANNOT_LOAD_REGISTRY_FILE" },
+ { 0xC0000219, "STATUS_DEBUG_ATTACH_FAILED" },
+ { 0xC000021A, "STATUS_SYSTEM_PROCESS_TERMINATED" },
+ { 0xC000021B, "STATUS_DATA_NOT_ACCEPTED" },
+ { 0xC000021C, "STATUS_NO_BROWSER_SERVERS_FOUND" },
+ { 0xC000021D, "STATUS_VDM_HARD_ERROR" },
+ { 0xC000021E, "STATUS_DRIVER_CANCEL_TIMEOUT" },
+ { 0xC000021F, "STATUS_REPLY_MESSAGE_MISMATCH" },
+ { 0xC0000220, "STATUS_MAPPED_ALIGNMENT" },
+ { 0xC0000221, "STATUS_IMAGE_CHECKSUM_MISMATCH" },
+ { 0xC0000222, "STATUS_LOST_WRITEBEHIND_DATA" },
+ { 0xC0000223, "STATUS_CLIENT_SERVER_PARAMETERS_INVALID" },
+ { 0xC0000224, "STATUS_PASSWORD_MUST_CHANGE" },
+ { 0xC0000225, "STATUS_NOT_FOUND" },
+ { 0xC0000226, "STATUS_NOT_TINY_STREAM" },
+ { 0xC0000227, "STATUS_RECOVERY_FAILURE" },
+ { 0xC0000228, "STATUS_STACK_OVERFLOW_READ" },
+ { 0xC0000229, "STATUS_FAIL_CHECK" },
+ { 0xC000022A, "STATUS_DUPLICATE_OBJECTID" },
+ { 0xC000022B, "STATUS_OBJECTID_EXISTS" },
+ { 0xC000022C, "STATUS_CONVERT_TO_LARGE" },
+ { 0xC000022D, "STATUS_RETRY" },
+ { 0xC000022E, "STATUS_FOUND_OUT_OF_SCOPE" },
+ { 0xC000022F, "STATUS_ALLOCATE_BUCKET" },
+ { 0xC0000230, "STATUS_PROPSET_NOT_FOUND" },
+ { 0xC0000231, "STATUS_MARSHALL_OVERFLOW" },
+ { 0xC0000232, "STATUS_INVALID_VARIANT" },
+ { 0xC0000233, "STATUS_DOMAIN_CONTROLLER_NOT_FOUND" },
+ { 0xC0000234, "STATUS_ACCOUNT_LOCKED_OUT" },
+ { 0xC0000235, "STATUS_HANDLE_NOT_CLOSABLE" },
+ { 0xC0000236, "STATUS_CONNECTION_REFUSED" },
+ { 0xC0000237, "STATUS_GRACEFUL_DISCONNECT" },
+ { 0xC0000238, "STATUS_ADDRESS_ALREADY_ASSOCIATED" },
+ { 0xC0000239, "STATUS_ADDRESS_NOT_ASSOCIATED" },
+ { 0xC000023A, "STATUS_CONNECTION_INVALID" },
+ { 0xC000023B, "STATUS_CONNECTION_ACTIVE" },
+ { 0xC000023C, "STATUS_NETWORK_UNREACHABLE" },
+ { 0xC000023D, "STATUS_HOST_UNREACHABLE" },
+ { 0xC000023E, "STATUS_PROTOCOL_UNREACHABLE" },
+ { 0xC000023F, "STATUS_PORT_UNREACHABLE" },
+ { 0xC0000240, "STATUS_REQUEST_ABORTED" },
+ { 0xC0000241, "STATUS_CONNECTION_ABORTED" },
+ { 0xC0000242, "STATUS_BAD_COMPRESSION_BUFFER" },
+ { 0xC0000243, "STATUS_USER_MAPPED_FILE" },
+ { 0xC0000244, "STATUS_AUDIT_FAILED" },
+ { 0xC0000245, "STATUS_TIMER_RESOLUTION_NOT_SET" },
+ { 0xC0000246, "STATUS_CONNECTION_COUNT_LIMIT" },
+ { 0xC0000247, "STATUS_LOGIN_TIME_RESTRICTION" },
+ { 0xC0000248, "STATUS_LOGIN_WKSTA_RESTRICTION" },
+ { 0xC0000249, "STATUS_IMAGE_MP_UP_MISMATCH" },
+ { 0xC0000250, "STATUS_INSUFFICIENT_LOGON_INFO" },
+ { 0xC0000251, "STATUS_BAD_DLL_ENTRYPOINT" },
+ { 0xC0000252, "STATUS_BAD_SERVICE_ENTRYPOINT" },
+ { 0xC0000253, "STATUS_LPC_REPLY_LOST" },
+ { 0xC0000254, "STATUS_IP_ADDRESS_CONFLICT1" },
+ { 0xC0000255, "STATUS_IP_ADDRESS_CONFLICT2" },
+ { 0xC0000256, "STATUS_REGISTRY_QUOTA_LIMIT" },
+ { 0xC0000257, "STATUS_PATH_NOT_COVERED" },
+ { 0xC0000258, "STATUS_NO_CALLBACK_ACTIVE" },
+ { 0xC0000259, "STATUS_LICENSE_QUOTA_EXCEEDED" },
+ { 0xC000025A, "STATUS_PWD_TOO_SHORT" },
+ { 0xC000025B, "STATUS_PWD_TOO_RECENT" },
+ { 0xC000025C, "STATUS_PWD_HISTORY_CONFLICT" },
+ { 0xC000025E, "STATUS_PLUGPLAY_NO_DEVICE" },
+ { 0xC000025F, "STATUS_UNSUPPORTED_COMPRESSION" },
+ { 0xC0000260, "STATUS_INVALID_HW_PROFILE" },
+ { 0xC0000261, "STATUS_INVALID_PLUGPLAY_DEVICE_PATH" },
+ { 0xC0000262, "STATUS_DRIVER_ORDINAL_NOT_FOUND" },
+ { 0xC0000263, "STATUS_DRIVER_ENTRYPOINT_NOT_FOUND" },
+ { 0xC0000264, "STATUS_RESOURCE_NOT_OWNED" },
+ { 0xC0000265, "STATUS_TOO_MANY_LINKS" },
+ { 0xC0000266, "STATUS_QUOTA_LIST_INCONSISTENT" },
+ { 0xC0000267, "STATUS_FILE_IS_OFFLINE" },
+ { 0xC0000268, "STATUS_EVALUATION_EXPIRATION" },
+ { 0xC0000269, "STATUS_ILLEGAL_DLL_RELOCATION" },
+ { 0xC000026A, "STATUS_LICENSE_VIOLATION" },
+ { 0xC000026B, "STATUS_DLL_INIT_FAILED_LOGOFF" },
+ { 0xC000026C, "STATUS_DRIVER_UNABLE_TO_LOAD" },
+ { 0xC000026D, "STATUS_DFS_UNAVAILABLE" },
+ { 0xC000026E, "STATUS_VOLUME_DISMOUNTED" },
+ { 0xC000026F, "STATUS_WX86_INTERNAL_ERROR" },
+ { 0xC0000270, "STATUS_WX86_FLOAT_STACK_CHECK" },
+ { 0xC0000271, "STATUS_VALIDATE_CONTINUE" },
+ { 0xC0000272, "STATUS_NO_MATCH" },
+ { 0xC0000273, "STATUS_NO_MORE_MATCHES" },
+ { 0xC0000275, "STATUS_NOT_A_REPARSE_POINT" },
+ { 0xC0000276, "STATUS_IO_REPARSE_TAG_INVALID" },
+ { 0xC0000277, "STATUS_IO_REPARSE_TAG_MISMATCH" },
+ { 0xC0000278, "STATUS_IO_REPARSE_DATA_INVALID" },
+ { 0xC0000279, "STATUS_IO_REPARSE_TAG_NOT_HANDLED" },
+ { 0xC0000280, "STATUS_REPARSE_POINT_NOT_RESOLVED" },
+ { 0xC0000281, "STATUS_DIRECTORY_IS_A_REPARSE_POINT" },
+ { 0xC0000282, "STATUS_RANGE_LIST_CONFLICT" },
+ { 0xC0000283, "STATUS_SOURCE_ELEMENT_EMPTY" },
+ { 0xC0000284, "STATUS_DESTINATION_ELEMENT_FULL" },
+ { 0xC0000285, "STATUS_ILLEGAL_ELEMENT_ADDRESS" },
+ { 0xC0000286, "STATUS_MAGAZINE_NOT_PRESENT" },
+ { 0xC0000287, "STATUS_REINITIALIZATION_NEEDED" },
+ { 0x80000288, "STATUS_DEVICE_REQUIRES_CLEANING" },
+ { 0x80000289, "STATUS_DEVICE_DOOR_OPEN" },
+ { 0xC000028A, "STATUS_ENCRYPTION_FAILED" },
+ { 0xC000028B, "STATUS_DECRYPTION_FAILED" },
+ { 0xC000028C, "STATUS_RANGE_NOT_FOUND" },
+ { 0xC000028D, "STATUS_NO_RECOVERY_POLICY" },
+ { 0xC000028E, "STATUS_NO_EFS" },
+ { 0xC000028F, "STATUS_WRONG_EFS" },
+ { 0xC0000290, "STATUS_NO_USER_KEYS" },
+ { 0xC0000291, "STATUS_FILE_NOT_ENCRYPTED" },
+ { 0xC0000292, "STATUS_NOT_EXPORT_FORMAT" },
+ { 0xC0000293, "STATUS_FILE_ENCRYPTED" },
+ { 0x40000294, "STATUS_WAKE_SYSTEM" },
+ { 0xC0000295, "STATUS_WMI_GUID_NOT_FOUND" },
+ { 0xC0000296, "STATUS_WMI_INSTANCE_NOT_FOUND" },
+ { 0xC0000297, "STATUS_WMI_ITEMID_NOT_FOUND" },
+ { 0xC0000298, "STATUS_WMI_TRY_AGAIN" },
+ { 0xC0000299, "STATUS_SHARED_POLICY" },
+ { 0xC000029A, "STATUS_POLICY_OBJECT_NOT_FOUND" },
+ { 0xC000029B, "STATUS_POLICY_ONLY_IN_DS" },
+ { 0xC000029C, "STATUS_VOLUME_NOT_UPGRADED" },
+ { 0xC000029D, "STATUS_REMOTE_STORAGE_NOT_ACTIVE" },
+ { 0xC000029E, "STATUS_REMOTE_STORAGE_MEDIA_ERROR" },
+ { 0xC000029F, "STATUS_NO_TRACKING_SERVICE" },
+ { 0xC00002A0, "STATUS_SERVER_SID_MISMATCH" },
+ { 0xC00002A1, "STATUS_DS_NO_ATTRIBUTE_OR_VALUE" },
+ { 0xC00002A2, "STATUS_DS_INVALID_ATTRIBUTE_SYNTAX" },
+ { 0xC00002A3, "STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED" },
+ { 0xC00002A4, "STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS" },
+ { 0xC00002A5, "STATUS_DS_BUSY" },
+ { 0xC00002A6, "STATUS_DS_UNAVAILABLE" },
+ { 0xC00002A7, "STATUS_DS_NO_RIDS_ALLOCATED" },
+ { 0xC00002A8, "STATUS_DS_NO_MORE_RIDS" },
+ { 0xC00002A9, "STATUS_DS_INCORRECT_ROLE_OWNER" },
+ { 0xC00002AA, "STATUS_DS_RIDMGR_INIT_ERROR" },
+ { 0xC00002AB, "STATUS_DS_OBJ_CLASS_VIOLATION" },
+ { 0xC00002AC, "STATUS_DS_CANT_ON_NON_LEAF" },
+ { 0xC00002AD, "STATUS_DS_CANT_ON_RDN" },
+ { 0xC00002AE, "STATUS_DS_CANT_MOD_OBJ_CLASS" },
+ { 0xC00002AF, "STATUS_DS_CROSS_DOM_MOVE_FAILED" },
+ { 0xC00002B0, "STATUS_DS_GC_NOT_AVAILABLE" },
+ { 0xC00002B1, "STATUS_DIRECTORY_SERVICE_REQUIRED" },
+ { 0xC00002B2, "STATUS_REPARSE_ATTRIBUTE_CONFLICT" },
+ { 0xC00002B3, "STATUS_CANT_ENABLE_DENY_ONLY" },
+ { 0xC00002B4, "STATUS_FLOAT_MULTIPLE_FAULTS" },
+ { 0xC00002B5, "STATUS_FLOAT_MULTIPLE_TRAPS" },
+ { 0xC00002B6, "STATUS_DEVICE_REMOVED" },
+ { 0xC00002B7, "STATUS_JOURNAL_DELETE_IN_PROGRESS" },
+ { 0xC00002B8, "STATUS_JOURNAL_NOT_ACTIVE" },
+ { 0xC00002B9, "STATUS_NOINTERFACE" },
+ { 0xC00002C1, "STATUS_DS_ADMIN_LIMIT_EXCEEDED" },
+ { 0xC00002C2, "STATUS_DRIVER_FAILED_SLEEP" },
+ { 0xC00002C3, "STATUS_MUTUAL_AUTHENTICATION_FAILED" },
+ { 0xC00002C4, "STATUS_CORRUPT_SYSTEM_FILE" },
+ { 0xC00002C5, "STATUS_DATATYPE_MISALIGNMENT_ERROR" },
+ { 0xC00002C6, "STATUS_WMI_READ_ONLY" },
+ { 0xC00002C7, "STATUS_WMI_SET_FAILURE" },
+ { 0xC00002C8, "STATUS_COMMITMENT_MINIMUM" },
+ { 0xC00002C9, "STATUS_REG_NAT_CONSUMPTION" },
+ { 0xC00002CA, "STATUS_TRANSPORT_FULL" },
+ { 0xC00002CB, "STATUS_DS_SAM_INIT_FAILURE" },
+ { 0xC00002CC, "STATUS_ONLY_IF_CONNECTED" },
+ { 0xC00002CD, "STATUS_DS_SENSITIVE_GROUP_VIOLATION" },
+ { 0xC00002CE, "STATUS_PNP_RESTART_ENUMERATION" },
+ { 0xC00002CF, "STATUS_JOURNAL_ENTRY_DELETED" },
+ { 0xC00002D0, "STATUS_DS_CANT_MOD_PRIMARYGROUPID" },
+ { 0xC00002D1, "STATUS_SYSTEM_IMAGE_BAD_SIGNATURE" },
+ { 0xC00002D2, "STATUS_PNP_REBOOT_REQUIRED" },
+ { 0xC00002D3, "STATUS_POWER_STATE_INVALID" },
+ { 0xC00002D4, "STATUS_DS_INVALID_GROUP_TYPE" },
+ { 0xC00002D5, "STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN" },
+ { 0xC00002D6, "STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN" },
+ { 0xC00002D7, "STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER" },
+ { 0xC00002D8, "STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER" },
+ { 0xC00002D9, "STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER" },
+ { 0xC00002DA, "STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER" },
+ { 0xC00002DB, "STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER" },
+ { 0xC00002DC, "STATUS_DS_HAVE_PRIMARY_MEMBERS" },
+ { 0xC00002DD, "STATUS_WMI_NOT_SUPPORTED" },
+ { 0xC00002DE, "STATUS_INSUFFICIENT_POWER" },
+ { 0xC00002DF, "STATUS_SAM_NEED_BOOTKEY_PASSWORD" },
+ { 0xC00002E0, "STATUS_SAM_NEED_BOOTKEY_FLOPPY" },
+ { 0xC00002E1, "STATUS_DS_CANT_START" },
+ { 0xC00002E2, "STATUS_DS_INIT_FAILURE" },
+ { 0xC00002E3, "STATUS_SAM_INIT_FAILURE" },
+ { 0xC00002E4, "STATUS_DS_GC_REQUIRED" },
+ { 0xC00002E5, "STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY" },
+ { 0xC00002E6, "STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS" },
+ { 0xC00002E7, "STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED" },
+ { 0xC00002E8, "STATUS_MULTIPLE_FAULT_VIOLATION" },
+ { 0xC0000300, "STATUS_NOT_SUPPORTED_ON_SBS" },
+ { 0xC0009898, "STATUS_WOW_ASSERTION" },
+ { 0xC0020001, "RPC_NT_INVALID_STRING_BINDING" },
+ { 0xC0020002, "RPC_NT_WRONG_KIND_OF_BINDING" },
+ { 0xC0020003, "RPC_NT_INVALID_BINDING" },
+ { 0xC0020004, "RPC_NT_PROTSEQ_NOT_SUPPORTED" },
+ { 0xC0020005, "RPC_NT_INVALID_RPC_PROTSEQ" },
+ { 0xC0020006, "RPC_NT_INVALID_STRING_UUID" },
+ { 0xC0020007, "RPC_NT_INVALID_ENDPOINT_FORMAT" },
+ { 0xC0020008, "RPC_NT_INVALID_NET_ADDR" },
+ { 0xC0020009, "RPC_NT_NO_ENDPOINT_FOUND" },
+ { 0xC002000A, "RPC_NT_INVALID_TIMEOUT" },
+ { 0xC002000B, "RPC_NT_OBJECT_NOT_FOUND" },
+ { 0xC002000C, "RPC_NT_ALREADY_REGISTERED" },
+ { 0xC002000D, "RPC_NT_TYPE_ALREADY_REGISTERED" },
+ { 0xC002000E, "RPC_NT_ALREADY_LISTENING" },
+ { 0xC002000F, "RPC_NT_NO_PROTSEQS_REGISTERED" },
+ { 0xC0020010, "RPC_NT_NOT_LISTENING" },
+ { 0xC0020011, "RPC_NT_UNKNOWN_MGR_TYPE" },
+ { 0xC0020012, "RPC_NT_UNKNOWN_IF" },
+ { 0xC0020013, "RPC_NT_NO_BINDINGS" },
+ { 0xC0020014, "RPC_NT_NO_PROTSEQS" },
+ { 0xC0020015, "RPC_NT_CANT_CREATE_ENDPOINT" },
+ { 0xC0020016, "RPC_NT_OUT_OF_RESOURCES" },
+ { 0xC0020017, "RPC_NT_SERVER_UNAVAILABLE" },
+ { 0xC0020018, "RPC_NT_SERVER_TOO_BUSY" },
+ { 0xC0020019, "RPC_NT_INVALID_NETWORK_OPTIONS" },
+ { 0xC002001A, "RPC_NT_NO_CALL_ACTIVE" },
+ { 0xC002001B, "RPC_NT_CALL_FAILED" },
+ { 0xC002001C, "RPC_NT_CALL_FAILED_DNE" },
+ { 0xC002001D, "RPC_NT_PROTOCOL_ERROR" },
+ { 0xC002001F, "RPC_NT_UNSUPPORTED_TRANS_SYN" },
+ { 0xC0020021, "RPC_NT_UNSUPPORTED_TYPE" },
+ { 0xC0020022, "RPC_NT_INVALID_TAG" },
+ { 0xC0020023, "RPC_NT_INVALID_BOUND" },
+ { 0xC0020024, "RPC_NT_NO_ENTRY_NAME" },
+ { 0xC0020025, "RPC_NT_INVALID_NAME_SYNTAX" },
+ { 0xC0020026, "RPC_NT_UNSUPPORTED_NAME_SYNTAX" },
+ { 0xC0020028, "RPC_NT_UUID_NO_ADDRESS" },
+ { 0xC0020029, "RPC_NT_DUPLICATE_ENDPOINT" },
+ { 0xC002002A, "RPC_NT_UNKNOWN_AUTHN_TYPE" },
+ { 0xC002002B, "RPC_NT_MAX_CALLS_TOO_SMALL" },
+ { 0xC002002C, "RPC_NT_STRING_TOO_LONG" },
+ { 0xC002002D, "RPC_NT_PROTSEQ_NOT_FOUND" },
+ { 0xC002002E, "RPC_NT_PROCNUM_OUT_OF_RANGE" },
+ { 0xC002002F, "RPC_NT_BINDING_HAS_NO_AUTH" },
+ { 0xC0020030, "RPC_NT_UNKNOWN_AUTHN_SERVICE" },
+ { 0xC0020031, "RPC_NT_UNKNOWN_AUTHN_LEVEL" },
+ { 0xC0020032, "RPC_NT_INVALID_AUTH_IDENTITY" },
+ { 0xC0020033, "RPC_NT_UNKNOWN_AUTHZ_SERVICE" },
+ { 0xC0020034, "EPT_NT_INVALID_ENTRY" },
+ { 0xC0020035, "EPT_NT_CANT_PERFORM_OP" },
+ { 0xC0020036, "EPT_NT_NOT_REGISTERED" },
+ { 0xC0020037, "RPC_NT_NOTHING_TO_EXPORT" },
+ { 0xC0020038, "RPC_NT_INCOMPLETE_NAME" },
+ { 0xC0020039, "RPC_NT_INVALID_VERS_OPTION" },
+ { 0xC002003A, "RPC_NT_NO_MORE_MEMBERS" },
+ { 0xC002003B, "RPC_NT_NOT_ALL_OBJS_UNEXPORTED" },
+ { 0xC002003C, "RPC_NT_INTERFACE_NOT_FOUND" },
+ { 0xC002003D, "RPC_NT_ENTRY_ALREADY_EXISTS" },
+ { 0xC002003E, "RPC_NT_ENTRY_NOT_FOUND" },
+ { 0xC002003F, "RPC_NT_NAME_SERVICE_UNAVAILABLE" },
+ { 0xC0020040, "RPC_NT_INVALID_NAF_ID" },
+ { 0xC0020041, "RPC_NT_CANNOT_SUPPORT" },
+ { 0xC0020042, "RPC_NT_NO_CONTEXT_AVAILABLE" },
+ { 0xC0020043, "RPC_NT_INTERNAL_ERROR" },
+ { 0xC0020044, "RPC_NT_ZERO_DIVIDE" },
+ { 0xC0020045, "RPC_NT_ADDRESS_ERROR" },
+ { 0xC0020046, "RPC_NT_FP_DIV_ZERO" },
+ { 0xC0020047, "RPC_NT_FP_UNDERFLOW" },
+ { 0xC0020048, "RPC_NT_FP_OVERFLOW" },
+ { 0xC0021007, "RPC_P_RECEIVE_ALERTED" },
+ { 0xC0021008, "RPC_P_CONNECTION_CLOSED" },
+ { 0xC0021009, "RPC_P_RECEIVE_FAILED" },
+ { 0xC002100A, "RPC_P_SEND_FAILED" },
+ { 0xC002100B, "RPC_P_TIMEOUT" },
+ { 0xC002100C, "RPC_P_SERVER_TRANSPORT_ERROR" },
+ { 0xC002100E, "RPC_P_EXCEPTION_OCCURRED" },
+ { 0xC0021012, "RPC_P_CONNECTION_SHUTDOWN" },
+ { 0xC0021015, "RPC_P_THREAD_LISTENING" },
+ { 0xC0030001, "RPC_NT_NO_MORE_ENTRIES" },
+ { 0xC0030002, "RPC_NT_SS_CHAR_TRANS_OPEN_FAIL" },
+ { 0xC0030003, "RPC_NT_SS_CHAR_TRANS_SHORT_FILE" },
+ { 0xC0030004, "RPC_NT_SS_IN_NULL_CONTEXT" },
+ { 0xC0030005, "RPC_NT_SS_CONTEXT_MISMATCH" },
+ { 0xC0030006, "RPC_NT_SS_CONTEXT_DAMAGED" },
+ { 0xC0030007, "RPC_NT_SS_HANDLES_MISMATCH" },
+ { 0xC0030008, "RPC_NT_SS_CANNOT_GET_CALL_HANDLE" },
+ { 0xC0030009, "RPC_NT_NULL_REF_POINTER" },
+ { 0xC003000A, "RPC_NT_ENUM_VALUE_OUT_OF_RANGE" },
+ { 0xC003000B, "RPC_NT_BYTE_COUNT_TOO_SMALL" },
+ { 0xC003000C, "RPC_NT_BAD_STUB_DATA" },
+ { 0xC0020049, "RPC_NT_CALL_IN_PROGRESS" },
+ { 0xC002004A, "RPC_NT_NO_MORE_BINDINGS" },
+ { 0xC002004B, "RPC_NT_GROUP_MEMBER_NOT_FOUND" },
+ { 0xC002004C, "EPT_NT_CANT_CREATE" },
+ { 0xC002004D, "RPC_NT_INVALID_OBJECT" },
+ { 0xC002004F, "RPC_NT_NO_INTERFACES" },
+ { 0xC0020050, "RPC_NT_CALL_CANCELLED" },
+ { 0xC0020051, "RPC_NT_BINDING_INCOMPLETE" },
+ { 0xC0020052, "RPC_NT_COMM_FAILURE" },
+ { 0xC0020053, "RPC_NT_UNSUPPORTED_AUTHN_LEVEL" },
+ { 0xC0020054, "RPC_NT_NO_PRINC_NAME" },
+ { 0xC0020055, "RPC_NT_NOT_RPC_ERROR" },
+ { 0x40020056, "RPC_NT_UUID_LOCAL_ONLY" },
+ { 0xC0020057, "RPC_NT_SEC_PKG_ERROR" },
+ { 0xC0020058, "RPC_NT_NOT_CANCELLED" },
+ { 0xC0030059, "RPC_NT_INVALID_ES_ACTION" },
+ { 0xC003005A, "RPC_NT_WRONG_ES_VERSION" },
+ { 0xC003005B, "RPC_NT_WRONG_STUB_VERSION" },
+ { 0xC003005C, "RPC_NT_INVALID_PIPE_OBJECT" },
+ { 0xC003005D, "RPC_NT_INVALID_PIPE_OPERATION" },
+ { 0xC003005E, "RPC_NT_WRONG_PIPE_VERSION" },
+ { 0x400200AF, "RPC_NT_SEND_INCOMPLETE" },
+ { 0, NULL }
+};
+
+/*
+ * return an NT error string from a SMB buffer
+ */
+const char *
+nt_errstr(uint32_t err)
+{
+ static char ret[128];
+ int i;
+
+ ret[0] = 0;
+
+ for (i = 0; nt_errors[i].name; i++) {
+ if (err == nt_errors[i].code)
+ return nt_errors[i].name;
+ }
+
+ snprintf(ret, sizeof(ret), "0x%08x", err);
+ return ret;
+}
diff --git a/status-exit-codes.h b/status-exit-codes.h
new file mode 100644
index 0000000..34d9d16
--- /dev/null
+++ b/status-exit-codes.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2018 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef status_exit_codes_h
+#define status_exit_codes_h
+
+/* S_ERR_ND_* are libnetdissect status */
+
+typedef enum {
+ S_SUCCESS = 0, /* not a libnetdissect status */
+ S_ERR_HOST_PROGRAM = 1, /* not a libnetdissect status */
+ S_ERR_ND_NO_PRINTER = 11,
+ S_ERR_ND_MEM_ALLOC = 12,
+ S_ERR_ND_OPEN_FILE = 13,
+ S_ERR_ND_WRITE_FILE = 14,
+ S_ERR_ND_ESP_SECRET = 15
+} status_exit_codes_t;
+
+#endif /* status_exit_codes_h */
diff --git a/stime.awk b/stime.awk
new file mode 100644
index 0000000..429cf01
--- /dev/null
+++ b/stime.awk
@@ -0,0 +1,19 @@
+$6 !~ /^ack/ && $5 !~ /[SFR]/ {
+ # given a tcpdump ftp trace, output one line for each send
+ # in the form
+ # <send time> <seq no>
+ # where <send time> is the time packet was sent (in seconds with
+ # zero at time of first packet) and <seq no> is the tcp sequence
+ # number of the packet divided by 1024 (i.e., Kbytes sent).
+ #
+ # convert time to seconds
+ n = split ($1,t,":")
+ tim = t[1]*3600 + t[2]*60 + t[3]
+ if (! tzero) {
+ tzero = tim
+ OFS = "\t"
+ }
+ # get packet sequence number
+ i = index($6,":")
+ printf "%7.2f\t%g\n", tim-tzero, substr($6,1,i-1)/1024
+ }
diff --git a/strtoaddr.c b/strtoaddr.c
new file mode 100644
index 0000000..c6f79d9
--- /dev/null
+++ b/strtoaddr.c
@@ -0,0 +1,235 @@
+/*
+ * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (c) 1996,1999 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+#include <stddef.h>
+#include <string.h>
+
+#include "netdissect-ctype.h"
+
+#include "strtoaddr.h"
+
+#ifndef NS_INADDRSZ
+#define NS_INADDRSZ 4 /* IPv4 T_A */
+#endif
+
+#ifndef NS_IN6ADDRSZ
+#define NS_IN6ADDRSZ 16 /* IPv6 T_AAAA */
+#endif
+
+#ifndef NS_INT16SZ
+#define NS_INT16SZ 2 /* #/bytes of data in a uint16_t */
+#endif
+
+/*%
+ * WARNING: Don't even consider trying to compile this on a system where
+ * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
+ */
+
+/* int
+ * strtoaddr(src, dst)
+ * convert presentation level IPv4 address to network order binary form.
+ * return:
+ * 1 if `src' is a valid input, else 0.
+ * notice:
+ * does not touch `dst' unless it's returning 1.
+ * author:
+ * Paul Vixie, 1996.
+ */
+int
+strtoaddr(const char *src, void *dst)
+{
+ uint32_t val;
+ u_int digit;
+ ptrdiff_t n;
+ unsigned char c;
+ u_int parts[4];
+ u_int *pp = parts;
+
+ c = *src;
+ for (;;) {
+ /*
+ * Collect number up to ``.''.
+ * Values are specified as for C:
+ * 0x=hex, 0=octal, isdigit=decimal.
+ */
+ if (!ND_ASCII_ISDIGIT(c))
+ return (0);
+ val = 0;
+ if (c == '0') {
+ c = *++src;
+ if (c == 'x' || c == 'X')
+ return (0);
+ else if (ND_ASCII_ISDIGIT(c) && c != '9')
+ return (0);
+ }
+ for (;;) {
+ if (ND_ASCII_ISDIGIT(c)) {
+ digit = c - '0';
+ val = (val * 10) + digit;
+ c = *++src;
+ } else
+ break;
+ }
+ if (c == '.') {
+ /*
+ * Internet format:
+ * a.b.c.d
+ * a.b.c (with c treated as 16 bits)
+ * a.b (with b treated as 24 bits)
+ * a (with a treated as 32 bits)
+ */
+ if (pp >= parts + 3)
+ return (0);
+ *pp++ = val;
+ c = *++src;
+ } else
+ break;
+ }
+ /*
+ * Check for trailing characters.
+ */
+ if (c != '\0' && c != ' ' && c != '\t')
+ return (0);
+ /*
+ * Find the number of parts specified.
+ * It must be 4; we only support dotted quads, we don't
+ * support shorthand.
+ */
+ n = pp - parts + 1;
+ if (n != 4)
+ return (0);
+ /*
+ * parts[0-2] were set to the first 3 parts of the address;
+ * val was set to the 4th part.
+ *
+ * Check if any part is bigger than 255.
+ */
+ if ((parts[0] | parts[1] | parts[2] | val) > 0xff)
+ return (0);
+ /*
+ * Add the other three parts to val.
+ */
+ val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
+ if (dst) {
+ val = htonl(val);
+ memcpy(dst, &val, NS_INADDRSZ);
+ }
+ return (1);
+}
+
+/* int
+ * strtoaddr6(src, dst)
+ * convert presentation level IPv6 address to network order binary form.
+ * return:
+ * 1 if `src' is a valid [RFC1884 2.2] address, else 0.
+ * notice:
+ * (1) does not touch `dst' unless it's returning 1.
+ * (2) :: in a full address is silently ignored.
+ * credit:
+ * inspired by Mark Andrews.
+ * author:
+ * Paul Vixie, 1996.
+ */
+int
+strtoaddr6(const char *src, void *dst)
+{
+ static const char xdigits_l[] = "0123456789abcdef",
+ xdigits_u[] = "0123456789ABCDEF";
+ u_char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp;
+ const char *xdigits, *curtok;
+ int ch, seen_xdigits;
+ u_int val;
+
+ memset((tp = tmp), '\0', NS_IN6ADDRSZ);
+ endp = tp + NS_IN6ADDRSZ;
+ colonp = NULL;
+ /* Leading :: requires some special handling. */
+ if (*src == ':')
+ if (*++src != ':')
+ return (0);
+ curtok = src;
+ seen_xdigits = 0;
+ val = 0;
+ while ((ch = *src++) != '\0') {
+ const char *pch;
+
+ if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
+ pch = strchr((xdigits = xdigits_u), ch);
+ if (pch != NULL) {
+ val <<= 4;
+ val |= (int)(pch - xdigits);
+ if (++seen_xdigits > 4)
+ return (0);
+ continue;
+ }
+ if (ch == ':') {
+ curtok = src;
+ if (!seen_xdigits) {
+ if (colonp)
+ return (0);
+ colonp = tp;
+ continue;
+ } else if (*src == '\0')
+ return (0);
+ if (tp + NS_INT16SZ > endp)
+ return (0);
+ *tp++ = (u_char) (val >> 8) & 0xff;
+ *tp++ = (u_char) val & 0xff;
+ seen_xdigits = 0;
+ val = 0;
+ continue;
+ }
+ if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) &&
+ strtoaddr(curtok, tp) > 0) {
+ tp += NS_INADDRSZ;
+ seen_xdigits = 0;
+ break; /*%< '\\0' was seen by strtoaddr(). */
+ }
+ return (0);
+ }
+ if (seen_xdigits) {
+ if (tp + NS_INT16SZ > endp)
+ return (0);
+ *tp++ = (u_char) (val >> 8) & 0xff;
+ *tp++ = (u_char) val & 0xff;
+ }
+ if (colonp != NULL) {
+ /*
+ * Since some memmove()'s erroneously fail to handle
+ * overlapping regions, we'll do the shift by hand.
+ */
+ const ptrdiff_t n = tp - colonp;
+ int i;
+
+ if (tp == endp)
+ return (0);
+ for (i = 1; i <= n; i++) {
+ endp[- i] = colonp[n - i];
+ colonp[n - i] = 0;
+ }
+ tp = endp;
+ }
+ if (tp != endp)
+ return (0);
+ memcpy(dst, tmp, NS_IN6ADDRSZ);
+ return (1);
+}
diff --git a/strtoaddr.h b/strtoaddr.h
new file mode 100644
index 0000000..8bd22c7
--- /dev/null
+++ b/strtoaddr.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (c) 1996,1999 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* Text string to address translation routines. */
+
+int strtoaddr(const char *src, void *dst);
+int strtoaddr6(const char *src, void *dst);
+
+
diff --git a/tcp.h b/tcp.h
new file mode 100644
index 0000000..491157b
--- /dev/null
+++ b/tcp.h
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 1982, 1986, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)tcp.h 8.1 (Berkeley) 6/10/93
+ */
+
+/*
+ * TCP header.
+ * Per RFC 793, September, 1981.
+ */
+struct tcphdr {
+ nd_uint16_t th_sport; /* source port */
+ nd_uint16_t th_dport; /* destination port */
+ nd_uint32_t th_seq; /* sequence number */
+ nd_uint32_t th_ack; /* acknowledgement number */
+ nd_uint8_t th_offx2; /* data offset, rsvd */
+ nd_uint8_t th_flags;
+ nd_uint16_t th_win; /* window */
+ nd_uint16_t th_sum; /* checksum */
+ nd_uint16_t th_urp; /* urgent pointer */
+};
+
+#define TH_OFF(th) ((GET_U_1((th)->th_offx2) & 0xf0) >> 4)
+
+/* TCP flags */
+#define TH_FIN 0x01
+#define TH_SYN 0x02
+#define TH_RST 0x04
+#define TH_PUSH 0x08
+#define TH_ACK 0x10
+#define TH_URG 0x20
+#define TH_ECNECHO 0x40 /* ECN Echo */
+#define TH_CWR 0x80 /* ECN Cwnd Reduced */
+
+
+#define TCPOPT_EOL 0
+#define TCPOPT_NOP 1
+#define TCPOPT_MAXSEG 2
+#define TCPOLEN_MAXSEG 4
+#define TCPOPT_WSCALE 3 /* window scale factor (rfc1323) */
+#define TCPOPT_SACKOK 4 /* selective ack ok (rfc2018) */
+#define TCPOPT_SACK 5 /* selective ack (rfc2018) */
+#define TCPOPT_ECHO 6 /* echo (rfc1072) */
+#define TCPOPT_ECHOREPLY 7 /* echo (rfc1072) */
+#define TCPOPT_TIMESTAMP 8 /* timestamp (rfc1323) */
+#define TCPOLEN_TIMESTAMP 10
+#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */
+#define TCPOPT_CC 11 /* T/TCP CC options (rfc1644) */
+#define TCPOPT_CCNEW 12 /* T/TCP CC options (rfc1644) */
+#define TCPOPT_CCECHO 13 /* T/TCP CC options (rfc1644) */
+#define TCPOPT_SIGNATURE 19 /* Keyed MD5 (rfc2385) */
+#define TCPOLEN_SIGNATURE 18
+#define TCP_SIGLEN 16 /* length of an option 19 digest */
+#define TCPOPT_SCPS 20 /* SCPS-TP (CCSDS 714.0-B-2) */
+#define TCPOPT_UTO 28 /* tcp user timeout (rfc5482) */
+#define TCPOLEN_UTO 4
+#define TCPOPT_TCPAO 29 /* TCP authentication option (rfc5925) */
+#define TCPOPT_MPTCP 30 /* MPTCP options */
+#define TCPOPT_FASTOPEN 34 /* TCP Fast Open (rfc7413) */
+#define TCPOPT_EXPERIMENT2 254 /* experimental headers (rfc4727) */
+
+#define TCPOPT_TSTAMP_HDR \
+ (TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP)
+
+#ifndef FTP_PORT
+#define FTP_PORT 21
+#endif
+#ifndef SSH_PORT
+#define SSH_PORT 22
+#endif
+#ifndef TELNET_PORT
+#define TELNET_PORT 23
+#endif
+#ifndef SMTP_PORT
+#define SMTP_PORT 25
+#endif
+#ifndef WHOIS_PORT
+#define WHOIS_PORT 43
+#endif
+#ifndef NAMESERVER_PORT
+#define NAMESERVER_PORT 53
+#endif
+#ifndef HTTP_PORT
+#define HTTP_PORT 80
+#endif
+#ifndef NETBIOS_SSN_PORT
+#define NETBIOS_SSN_PORT 139 /* RFC 1001, RFC 1002 */
+#endif
+#ifndef BGP_PORT
+#define BGP_PORT 179
+#endif
+#ifndef RPKI_RTR_PORT
+#define RPKI_RTR_PORT 323
+#endif
+#ifndef SMB_PORT
+#define SMB_PORT 445
+#endif
+#ifndef RTSP_PORT
+#define RTSP_PORT 554
+#endif
+#ifndef MSDP_PORT
+#define MSDP_PORT 639
+#endif
+#ifndef LDP_PORT
+#define LDP_PORT 646
+#endif
+#ifndef PPTP_PORT
+#define PPTP_PORT 1723
+#endif
+#ifndef NFS_PORT
+#define NFS_PORT 2049
+#endif
+#ifndef OPENFLOW_PORT_OLD
+#define OPENFLOW_PORT_OLD 6633
+#endif
+#ifndef OPENFLOW_PORT_IANA
+#define OPENFLOW_PORT_IANA 6653
+#endif
+#ifndef HTTP_PORT_ALT
+#define HTTP_PORT_ALT 8080
+#endif
+#ifndef RTSP_PORT_ALT
+#define RTSP_PORT_ALT 8554
+#endif
+#ifndef BEEP_PORT
+#define BEEP_PORT 10288
+#endif
+#ifndef REDIS_PORT
+#define REDIS_PORT 6379
+#endif
diff --git a/tcpdump.1.in b/tcpdump.1.in
new file mode 100644
index 0000000..87e0fbb
--- /dev/null
+++ b/tcpdump.1.in
@@ -0,0 +1,2090 @@
+.\" $NetBSD: tcpdump.8,v 1.9 2003/03/31 00:18:17 perry Exp $
+.\"
+.\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997
+.\" The Regents of the University of California. All rights reserved.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that: (1) source code distributions
+.\" retain the above copyright notice and this paragraph in its entirety, (2)
+.\" distributions including binary code include the above copyright notice and
+.\" this paragraph in its entirety in the documentation or other materials
+.\" provided with the distribution, and (3) all advertising materials mentioning
+.\" features or use of this software display the following acknowledgement:
+.\" ``This product includes software developed by the University of California,
+.\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+.\" the University nor the names of its contributors may be used to endorse
+.\" or promote products derived from this software without specific prior
+.\" written permission.
+.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+.\"
+.TH TCPDUMP 1 "12 March 2023"
+.SH NAME
+tcpdump \- dump traffic on a network
+.SH SYNOPSIS
+.na
+.B tcpdump
+[
+.B \-AbdDefhHIJKlLnNOpqStuUvxX#
+] [
+.B \-B
+.I buffer_size
+]
+.br
+.ti +8
+[
+.B \-c
+.I count
+]
+[
+.B \-\-count
+]
+[
+.B \-C
+.I file_size
+]
+.ti +8
+[
+.B \-E
+.I spi@ipaddr algo:secret,...
+]
+.ti +8
+[
+.B \-F
+.I file
+]
+[
+.B \-G
+.I rotate_seconds
+]
+[
+.B \-i
+.I interface
+]
+.ti +8
+[
+.B \-\-immediate\-mode
+]
+[
+.B \-j
+.I tstamp_type
+]
+[
+.B \-m
+.I module
+]
+.ti +8
+[
+.B \-M
+.I secret
+]
+[
+.B \-\-number
+]
+[
+.B \-\-print
+]
+[
+.B \-Q
+.I in|out|inout
+]
+.ti +8
+[
+.B \-r
+.I file
+]
+[
+.B \-s
+.I snaplen
+]
+[
+.B \-T
+.I type
+]
+[
+.B \-\-version
+]
+.ti +8
+[
+.B \-V
+.I file
+]
+[
+.B \-w
+.I file
+]
+[
+.B \-W
+.I filecount
+]
+[
+.B \-y
+.I datalinktype
+]
+.ti +8
+[
+.B \-z
+.I postrotate-command
+]
+[
+.B \-Z
+.I user
+]
+.ti +8
+[
+.BI \-\-time\-stamp\-precision= tstamp_precision
+]
+.ti +8
+[
+.BI \-\-micro
+]
+[
+.BI \-\-nano
+]
+.ti +8
+[
+.I expression
+]
+.br
+.ad
+.SH DESCRIPTION
+.LP
+\fITcpdump\fP prints out a description of the contents of packets on a
+network interface that match the Boolean \fIexpression\fP (see
+.BR \%pcap-filter (@MAN_MISC_INFO@)
+for the \fIexpression\fP syntax); the
+description is preceded by a time stamp, printed, by default, as hours,
+minutes, seconds, and fractions of a second since midnight. It can also
+be run with the
+.B \-w
+flag, which causes it to save the packet data to a file for later
+analysis, and/or with the
+.B \-r
+flag, which causes it to read from a saved packet file rather than to
+read packets from a network interface. It can also be run with the
+.B \-V
+flag, which causes it to read a list of saved packet files. In all cases,
+only packets that match
+.I expression
+will be processed by
+.IR tcpdump .
+.LP
+.I Tcpdump
+will, if not run with the
+.B \-c
+flag, continue capturing packets until it is interrupted by a SIGINT
+signal (generated, for example, by typing your interrupt character,
+typically control-C) or a SIGTERM signal (typically generated with the
+.BR kill (1)
+command); if run with the
+.B \-c
+flag, it will capture packets until it is interrupted by a SIGINT or
+SIGTERM signal or the specified number of packets have been processed.
+.LP
+When
+.I tcpdump
+finishes capturing packets, it will report counts of:
+.IP
+packets ``captured'' (this is the number of packets that
+.I tcpdump
+has received and processed);
+.IP
+packets ``received by filter'' (the meaning of this depends on the OS on
+which you're running
+.IR tcpdump ,
+and possibly on the way the OS was configured - if a filter was
+specified on the command line, on some OSes it counts packets regardless
+of whether they were matched by the filter expression and, even if they
+were matched by the filter expression, regardless of whether
+.I tcpdump
+has read and processed them yet, on other OSes it counts only packets that were
+matched by the filter expression regardless of whether
+.I tcpdump
+has read and processed them yet, and on other OSes it counts only
+packets that were matched by the filter expression and were processed by
+.IR tcpdump );
+.IP
+packets ``dropped by kernel'' (this is the number of packets that were
+dropped, due to a lack of buffer space, by the packet capture mechanism
+in the OS on which
+.I tcpdump
+is running, if the OS reports that information to applications; if not,
+it will be reported as 0).
+.LP
+On platforms that support the SIGINFO signal, such as most BSDs
+(including macOS) and Digital/Tru64 UNIX, it will report those counts
+when it receives a SIGINFO signal (generated, for example, by typing
+your ``status'' character, typically control-T, although on some
+platforms, such as macOS, the ``status'' character is not set by
+default, so you must set it with
+.BR stty (1)
+in order to use it) and will continue capturing packets. On platforms that
+do not support the SIGINFO signal, the same can be achieved by using the
+SIGUSR1 signal.
+.LP
+Using the SIGUSR2 signal along with the
+.B \-w
+flag will forcibly flush the packet buffer into the output file.
+.LP
+Reading packets from a network interface may require that you have
+special privileges; see the
+.BR pcap (3PCAP)
+man page for details. Reading a saved packet file doesn't require
+special privileges.
+.SH OPTIONS
+.TP
+.B \-A
+Print each packet (minus its link level header) in ASCII. Handy for
+capturing web pages.
+.TP
+.B \-b
+Print the AS number in BGP packets in ASDOT notation rather than ASPLAIN
+notation.
+.TP
+.BI \-B " buffer_size"
+.PD 0
+.TP
+.BI \-\-buffer\-size= buffer_size
+.PD
+Set the operating system capture buffer size to \fIbuffer_size\fP, in
+units of KiB (1024 bytes).
+.TP
+.BI \-c " count"
+Exit after receiving \fIcount\fP packets.
+.TP
+.BI \-\-count
+Print only on stdout the packet count when reading capture file(s) instead
+of parsing/printing the packets. If a filter is specified on the command
+line, \fItcpdump\fP counts only packets that were matched by the filter
+expression.
+.TP
+.BI \-C " file_size"
+Before writing a raw packet to a savefile, check whether the file is
+currently larger than \fIfile_size\fP and, if so, close the current
+savefile and open a new one. Savefiles after the first savefile will
+have the name specified with the
+.B \-w
+flag, with a number after it, starting at 1 and continuing upward.
+The units of \fIfile_size\fP are millions of bytes (1,000,000 bytes,
+not 1,048,576 bytes).
+.TP
+.B \-d
+Dump the compiled packet-matching code in a human readable form to
+standard output and stop.
+.IP
+Please mind that although code compilation is always DLT-specific,
+typically it is impossible (and unnecessary) to specify which DLT to use
+for the dump because \fItcpdump\fP uses either the DLT of the input pcap
+file specified with
+.BR -r ,
+or the default DLT of the network interface specified with
+.BR -i ,
+or the particular DLT of the network interface specified with
+.B -y
+and
+.B -i
+respectively. In these cases the dump shows the same exact code that
+would filter the input file or the network interface without
+.BR -d .
+.IP
+However, when neither
+.B -r
+nor
+.B -i
+is specified, specifying
+.B -d
+prevents \fItcpdump\fP from guessing a suitable network interface (see
+.BR -i ).
+In this case the DLT defaults to EN10MB and can be set to another valid
+value manually with
+.BR -y .
+.TP
+.B \-dd
+Dump packet-matching code as a
+.B C
+program fragment.
+.TP
+.B \-ddd
+Dump packet-matching code as decimal numbers (preceded with a count).
+.TP
+.B \-D
+.PD 0
+.TP
+.B \-\-list\-interfaces
+.PD
+Print the list of the network interfaces available on the system and on
+which
+.I tcpdump
+can capture packets. For each network interface, a number and an
+interface name, possibly followed by a text description of the
+interface, are printed. The interface name or the number can be supplied
+to the
+.B \-i
+flag to specify an interface on which to capture.
+.IP
+This can be useful on systems that don't have a command to list them
+(e.g., Windows systems, or UNIX systems lacking
+.BR "ifconfig \-a" );
+the number can be useful on Windows 2000 and later systems, where the
+interface name is a somewhat complex string.
+.IP
+The
+.B \-D
+flag will not be supported if
+.I tcpdump
+was built with an older version of
+.I libpcap
+that lacks the
+.BR pcap_findalldevs (3PCAP)
+function.
+.TP
+.B \-e
+Print the link-level header on each dump line. This can be used, for
+example, to print MAC layer addresses for protocols such as Ethernet and
+IEEE 802.11.
+.TP
+.B \-E
+Use \fIspi@ipaddr algo:secret\fP for decrypting IPsec ESP packets that
+are addressed to \fIaddr\fP and contain Security Parameter Index value
+\fIspi\fP. This combination may be repeated with comma or newline separation.
+.IP
+Note that setting the secret for IPv4 ESP packets is supported at this time.
+.IP
+Algorithms may be
+\fBdes-cbc\fP,
+\fB3des-cbc\fP,
+\fBblowfish-cbc\fP,
+\fBrc3-cbc\fP,
+\fBcast128-cbc\fP, or
+\fBnone\fP.
+The default is \fBdes-cbc\fP.
+The ability to decrypt packets is only present if \fItcpdump\fP was compiled
+with cryptography enabled.
+.IP
+\fIsecret\fP is the ASCII text for ESP secret key.
+If preceded by 0x, then a hex value will be read.
+.IP
+The option assumes RFC 2406 ESP, not RFC 1827 ESP.
+The option is only for debugging purposes, and
+the use of this option with a true `secret' key is discouraged.
+By presenting IPsec secret key onto command line
+you make it visible to others, via
+.IR ps (1)
+and other occasions.
+.IP
+In addition to the above syntax, the syntax \fIfile name\fP may be used
+to have tcpdump read the provided file in. The file is opened upon
+receiving the first ESP packet, so any special permissions that tcpdump
+may have been given should already have been given up.
+.TP
+.B \-f
+Print `foreign' IPv4 addresses numerically rather than symbolically
+(this option is intended to get around serious brain damage in
+Sun's NIS server \(em usually it hangs forever translating non-local
+internet numbers).
+.IP
+The test for `foreign' IPv4 addresses is done using the IPv4 address and
+netmask of the interface on that capture is being done. If that
+address or netmask are not available, either because the
+interface on that capture is being done has no address or netmask or
+because it is the "any" pseudo-interface, which is
+available in Linux and in recent versions of macOS and Solaris, and which
+can capture on more than one interface, this option will not work
+correctly.
+.TP
+.BI \-F " file"
+Use \fIfile\fP as input for the filter expression.
+An additional expression given on the command line is ignored.
+.TP
+.BI \-G " rotate_seconds"
+If specified, rotates the dump file specified with the
+.B \-w
+option every \fIrotate_seconds\fP seconds.
+Savefiles will have the name specified by
+.B \-w
+which should include a time format as defined by
+.BR strftime (3).
+If no time format is specified, each new file will overwrite the previous.
+Whenever a generated filename is not unique, tcpdump will overwrite the
+pre-existing data; providing a time specification that is coarser than the
+capture period is therefore not advised.
+.IP
+If used in conjunction with the
+.B \-C
+option, filenames will take the form of `\fIfile\fP<count>'.
+.TP
+.B \-h
+.PD 0
+.TP
+.B \-\-help
+.PD
+Print the tcpdump and libpcap version strings, print a usage message,
+and exit.
+.TP
+.B \-\-version
+.PD
+Print the tcpdump and libpcap version strings and exit.
+.TP
+.B \-H
+Attempt to detect 802.11s draft mesh headers.
+.TP
+.BI \-i " interface"
+.PD 0
+.TP
+.BI \-\-interface= interface
+.PD
+Listen, report the list of link-layer types, report the list of time
+stamp types, or report the results of compiling a filter expression on
+\fIinterface\fP. If unspecified and if the
+.B -d
+flag is not given, \fItcpdump\fP searches the system
+interface list for the lowest numbered, configured up interface
+(excluding loopback), which may turn out to be, for example, ``eth0''.
+.IP
+On Linux systems with 2.2 or later kernels and on recent versions of macOS
+and Solaris, an
+.I interface
+argument of ``any'' can be used to capture packets from all interfaces.
+Note that captures on the ``any'' pseudo-interface will not be done in promiscuous
+mode.
+.IP
+If the
+.B \-D
+flag is supported, an interface number as printed by that flag can be
+used as the
+.I interface
+argument, if no interface on the system has that number as a name.
+.TP
+.B \-I
+.PD 0
+.TP
+.B \-\-monitor\-mode
+.PD
+Put the interface in "monitor mode"; this is supported only on IEEE
+802.11 Wi-Fi interfaces, and supported only on some operating systems.
+.IP
+Note that in monitor mode the adapter might disassociate from the
+network with which it's associated, so that you will not be able to use
+any wireless networks with that adapter. This could prevent accessing
+files on a network server, or resolving host names or network addresses,
+if you are capturing in monitor mode and are not connected to another
+network with another adapter.
+.IP
+This flag will affect the output of the
+.B \-L
+flag. If
+.B \-I
+isn't specified, only those link-layer types available when not in
+monitor mode will be shown; if
+.B \-I
+is specified, only those link-layer types available when in monitor mode
+will be shown.
+.TP
+.BI \-\-immediate\-mode
+Capture in "immediate mode". In this mode, packets are delivered to
+tcpdump as soon as they arrive, rather than being buffered for
+efficiency. This is the default when printing packets rather than
+saving packets to a ``savefile'' if the packets are being printed to a
+terminal rather than to a file or pipe.
+.TP
+.BI \-j " tstamp_type"
+.PD 0
+.TP
+.BI \-\-time\-stamp\-type= tstamp_type
+.PD
+Set the time stamp type for the capture to \fItstamp_type\fP. The names
+to use for the time stamp types are given in
+.BR \%pcap-tstamp (@MAN_MISC_INFO@);
+not all the types listed there will necessarily be valid for any given
+interface.
+.TP
+.B \-J
+.PD 0
+.TP
+.B \-\-list\-time\-stamp\-types
+.PD
+List the supported time stamp types for the interface and exit. If the
+time stamp type cannot be set for the interface, no time stamp types are
+listed.
+.TP
+.BI \-\-time\-stamp\-precision= tstamp_precision
+When capturing, set the time stamp precision for the capture to
+\fItstamp_precision\fP. Note that availability of high precision time
+stamps (nanoseconds) and their actual accuracy is platform and hardware
+dependent. Also note that when writing captures made with nanosecond
+accuracy to a savefile, the time stamps are written with nanosecond
+resolution, and the file is written with a different magic number, to
+indicate that the time stamps are in seconds and nanoseconds; not all
+programs that read pcap savefiles will be able to read those captures.
+.IP
+When reading a savefile, convert time stamps to the precision specified
+by \fItimestamp_precision\fP, and display them with that resolution. If
+the precision specified is less than the precision of time stamps in the
+file, the conversion will lose precision.
+.IP
+The supported values for \fItimestamp_precision\fP are \fBmicro\fP for
+microsecond resolution and \fBnano\fP for nanosecond resolution. The
+default is microsecond resolution.
+.TP
+.B \-\-micro
+.PD 0
+.TP
+.B \-\-nano
+.PD
+Shorthands for \fB\-\-time\-stamp\-precision=micro\fP or
+\fB\-\-time\-stamp\-precision=nano\fP, adjusting the time stamp
+precision accordingly. When reading packets from a savefile, using
+\fB\-\-micro\fP truncates time stamps if the savefile was created with
+nanosecond precision. In contrast, a savefile created with microsecond
+precision will have trailing zeroes added to the time stamp when
+\fB\-\-nano\fP is used.
+.TP
+.B \-K
+.PD 0
+.TP
+.B \-\-dont\-verify\-checksums
+.PD
+Don't attempt to verify IP, TCP, or UDP checksums. This is useful for
+interfaces that perform some or all of those checksum calculation in
+hardware; otherwise, all outgoing TCP checksums will be flagged as bad.
+.TP
+.B \-l
+Make stdout line buffered.
+Useful if you want to see the data
+while capturing it.
+E.g.,
+.IP
+.RS
+.RS
+.nf
+\fBtcpdump \-l | tee dat\fP
+.fi
+.RE
+.RE
+.IP
+or
+.IP
+.RS
+.RS
+.nf
+\fBtcpdump \-l > dat & tail \-f dat\fP
+.fi
+.RE
+.RE
+.IP
+Note that on Windows,``line buffered'' means ``unbuffered'', so that
+WinDump will write each character individually if
+.B \-l
+is specified.
+.IP
+.B \-U
+is similar to
+.B \-l
+in its behavior, but it will cause output to be ``packet-buffered'', so
+that the output is written to stdout at the end of each packet rather
+than at the end of each line; this is buffered on all platforms,
+including Windows.
+.TP
+.B \-L
+.PD 0
+.TP
+.B \-\-list\-data\-link\-types
+.PD
+List the known data link types for the interface, in the specified mode,
+and exit. The list of known data link types may be dependent on the
+specified mode; for example, on some platforms, a Wi-Fi interface might
+support one set of data link types when not in monitor mode (for
+example, it might support only fake Ethernet headers, or might support
+802.11 headers but not support 802.11 headers with radio information)
+and another set of data link types when in monitor mode (for example, it
+might support 802.11 headers, or 802.11 headers with radio information,
+only in monitor mode).
+.TP
+.BI \-m " module"
+Load SMI MIB module definitions from file \fImodule\fR.
+This option
+can be used several times to load several MIB modules into \fItcpdump\fP.
+.TP
+.BI \-M " secret"
+Use \fIsecret\fP as a shared secret for validating the digests found in
+TCP segments with the TCP-MD5 option (RFC 2385), if present.
+.TP
+.B \-n
+Don't convert addresses (i.e., host addresses, port numbers, etc.) to names.
+.TP
+.B \-N
+Don't print domain name qualification of host names.
+E.g.,
+if you give this flag then \fItcpdump\fP will print ``nic''
+instead of ``nic.ddn.mil''.
+.TP
+.B \-#
+.PD 0
+.TP
+.B \-\-number
+.PD
+Print an optional packet number at the beginning of the line.
+.TP
+.B \-O
+.PD 0
+.TP
+.B \-\-no\-optimize
+.PD
+Do not run the packet-matching code optimizer.
+This is useful only
+if you suspect a bug in the optimizer.
+.TP
+.B \-p
+.PD 0
+.TP
+.B \-\-no\-promiscuous\-mode
+.PD
+\fIDon't\fP put the interface
+into promiscuous mode.
+Note that the interface might be in promiscuous
+mode for some other reason; hence, `-p' cannot be used as an abbreviation for
+`ether host {local-hw-addr} or ether broadcast'.
+.TP
+.BI \-\-print
+Print parsed packet output, even if the raw packets are being saved to a
+file with the
+.B \-w
+flag.
+.TP
+.BI \-Q " direction"
+.PD 0
+.TP
+.BI \-\-direction= direction
+.PD
+Choose send/receive direction \fIdirection\fR for which packets should be
+captured. Possible values are `in', `out' and `inout'. Not available
+on all platforms.
+.TP
+.B \-q
+Quick (quiet?) output.
+Print less protocol information so output
+lines are shorter.
+.TP
+.BI \-r " file"
+Read packets from \fIfile\fR (which was created with the
+.B \-w
+option or by other tools that write pcap or pcapng files).
+Standard input is used if \fIfile\fR is ``-''.
+.TP
+.B \-S
+.PD 0
+.TP
+.B \-\-absolute\-tcp\-sequence\-numbers
+.PD
+Print absolute, rather than relative, TCP sequence numbers.
+.TP
+.BI \-s " snaplen"
+.PD 0
+.TP
+.BI \-\-snapshot\-length= snaplen
+.PD
+Snarf \fIsnaplen\fP bytes of data from each packet rather than the
+default of 262144 bytes.
+Packets truncated because of a limited snapshot
+are indicated in the output with ``[|\fIproto\fP]'', where \fIproto\fP
+is the name of the protocol level at which the truncation has occurred.
+.IP
+Note that taking larger snapshots both increases
+the amount of time it takes to process packets and, effectively,
+decreases the amount of packet buffering.
+This may cause packets to be
+lost.
+Note also that taking smaller snapshots will discard data from protocols
+above the transport layer, which loses information that may be
+important. NFS and AFS requests and replies, for example, are very
+large, and much of the detail won't be available if a too-short snapshot
+length is selected.
+.IP
+If you need to reduce the snapshot size below the default, you should
+limit \fIsnaplen\fP to the smallest number that will capture the
+protocol information you're interested in. Setting
+\fIsnaplen\fP to 0 sets it to the default of 262144,
+for backwards compatibility with recent older versions of
+.IR tcpdump .
+.TP
+.BI \-T " type"
+Force packets selected by "\fIexpression\fP" to be interpreted the
+specified \fItype\fR.
+Currently known types are
+\fBaodv\fR (Ad-hoc On-demand Distance Vector protocol),
+\fBcarp\fR (Common Address Redundancy Protocol),
+\fBcnfp\fR (Cisco NetFlow protocol),
+\fBdomain\fR (Domain Name System),
+\fBlmp\fR (Link Management Protocol),
+\fBpgm\fR (Pragmatic General Multicast),
+\fBpgm_zmtp1\fR (ZMTP/1.0 inside PGM/EPGM),
+\fBptp\fR (Precision Time Protocol),
+\fBradius\fR (RADIUS),
+\fBresp\fR (REdis Serialization Protocol),
+\fBrpc\fR (Remote Procedure Call),
+\fBrtcp\fR (Real-Time Applications control protocol),
+\fBrtp\fR (Real-Time Applications protocol),
+\fBsnmp\fR (Simple Network Management Protocol),
+\fBsomeip\fR (SOME/IP),
+\fBtftp\fR (Trivial File Transfer Protocol),
+\fBvat\fR (Visual Audio Tool),
+\fBvxlan\fR (Virtual eXtensible Local Area Network),
+\fBwb\fR (distributed White Board)
+and
+\fBzmtp1\fR (ZeroMQ Message Transport Protocol 1.0).
+.IP
+Note that the \fBpgm\fR type above affects UDP interpretation only, the native
+PGM is always recognised as IP protocol 113 regardless. UDP-encapsulated PGM is
+often called "EPGM" or "PGM/UDP".
+.IP
+Note that the \fBpgm_zmtp1\fR type above affects interpretation of both native
+PGM and UDP at once. During the native PGM decoding the application data of an
+ODATA/RDATA packet would be decoded as a ZeroMQ datagram with ZMTP/1.0 frames.
+During the UDP decoding in addition to that any UDP packet would be treated as
+an encapsulated PGM packet.
+.TP
+.B \-t
+\fIDon't\fP print a timestamp on each dump line.
+.TP
+.B \-tt
+Print the timestamp, as seconds since January 1, 1970, 00:00:00, UTC, and
+fractions of a second since that time, on each dump line.
+.TP
+.B \-ttt
+Print a delta (microsecond or nanosecond resolution depending on the
+.B \-\-time\-stamp-precision
+option) between current and previous line on each dump line.
+The default is microsecond resolution.
+.TP
+.B \-tttt
+Print a timestamp, as hours, minutes, seconds, and fractions of a second
+since midnight, preceded by the date, on each dump line.
+.TP
+.B \-ttttt
+Print a delta (microsecond or nanosecond resolution depending on the
+.B \-\-time\-stamp-precision
+option) between current and first line on each dump line.
+The default is microsecond resolution.
+.TP
+.B \-u
+Print undecoded NFS handles.
+.TP
+.B \-U
+.PD 0
+.TP
+.B \-\-packet\-buffered
+.PD
+If the
+.B \-w
+option is not specified, or if it is specified but the
+.B \-\-print
+flag is also specified, make the printed packet output
+``packet-buffered''; i.e., as the description of the contents of each
+packet is printed, it will be written to the standard output, rather
+than, when not writing to a terminal, being written only when the output
+buffer fills.
+.IP
+If the
+.B \-w
+option is specified, make the saved raw packet output
+``packet-buffered''; i.e., as each packet is saved, it will be written
+to the output file, rather than being written only when the output
+buffer fills.
+.IP
+The
+.B \-U
+flag will not be supported if
+.I tcpdump
+was built with an older version of
+.I libpcap
+that lacks the
+.BR pcap_dump_flush (3PCAP)
+function.
+.TP
+.B \-v
+When parsing and printing, produce (slightly more) verbose output.
+For example, the time to live,
+identification, total length and options in an IP packet are printed.
+Also enables additional packet integrity checks such as verifying the
+IP and ICMP header checksum.
+.IP
+When writing to a file with the
+.B \-w
+option and at the same time not reading from a file with the
+.B \-r
+option, report to stderr, once per second, the number of packets captured. In
+Solaris, FreeBSD and possibly other operating systems this periodic update
+currently can cause loss of captured packets on their way from the kernel to
+tcpdump.
+.TP
+.B \-vv
+Even more verbose output.
+For example, additional fields are
+printed from NFS reply packets, and SMB packets are fully decoded.
+.TP
+.B \-vvv
+Even more verbose output.
+For example,
+telnet \fBSB\fP ... \fBSE\fP options
+are printed in full.
+With
+.B \-X
+Telnet options are printed in hex as well.
+.TP
+.BI \-V " file"
+Read a list of filenames from \fIfile\fR. Standard input is used
+if \fIfile\fR is ``-''.
+.TP
+.BI \-w " file"
+Write the raw packets to \fIfile\fR rather than parsing and printing
+them out.
+They can later be printed with the \-r option.
+Standard output is used if \fIfile\fR is ``-''.
+.IP
+This output will be buffered if written to a file or pipe, so a program
+reading from the file or pipe may not see packets for an arbitrary
+amount of time after they are received. Use the
+.B \-U
+flag to cause packets to be written as soon as they are received.
+.IP
+The MIME type \fIapplication/vnd.tcpdump.pcap\fP has been registered
+with IANA for \fIpcap\fP files. The filename extension \fI.pcap\fP
+appears to be the most commonly used along with \fI.cap\fP and
+\fI.dmp\fP. \fITcpdump\fP itself doesn't check the extension when
+reading capture files and doesn't add an extension when writing them
+(it uses magic numbers in the file header instead). However, many
+operating systems and applications will use the extension if it is
+present and adding one (e.g. .pcap) is recommended.
+.IP
+See
+.BR \%pcap-savefile (@MAN_FILE_FORMATS@)
+for a description of the file format.
+.TP
+.BI \-W " filecount"
+Used in conjunction with the
+.B \-C
+option, this will limit the number
+of files created to the specified number, and begin overwriting files
+from the beginning, thus creating a 'rotating' buffer.
+In addition, it will name
+the files with enough leading 0s to support the maximum number of
+files, allowing them to sort correctly.
+.IP
+Used in conjunction with the
+.B \-G
+option, this will limit the number of rotated dump files that get
+created, exiting with status 0 when reaching the limit.
+.IP
+If used in conjunction with both
+.B \-C
+and
+.B \-G,
+the
+.B \-W
+option will currently be ignored, and will only affect the file name.
+.TP
+.B \-x
+When parsing and printing,
+in addition to printing the headers of each packet, print the data of
+each packet (minus its link level header) in hex.
+The smaller of the entire packet or
+.I snaplen
+bytes will be printed. Note that this is the entire link-layer
+packet, so for link layers that pad (e.g. Ethernet), the padding bytes
+will also be printed when the higher layer packet is shorter than the
+required padding.
+In the current implementation this flag may have the same effect as
+.B \-xx
+if the packet is truncated.
+.TP
+.B \-xx
+When parsing and printing,
+in addition to printing the headers of each packet, print the data of
+each packet,
+.I including
+its link level header, in hex.
+.TP
+.B \-X
+When parsing and printing,
+in addition to printing the headers of each packet, print the data of
+each packet (minus its link level header) in hex and ASCII.
+This is very handy for analysing new protocols.
+In the current implementation this flag may have the same effect as
+.B \-XX
+if the packet is truncated.
+.TP
+.B \-XX
+When parsing and printing,
+in addition to printing the headers of each packet, print the data of
+each packet,
+.I including
+its link level header, in hex and ASCII.
+.TP
+.BI \-y " datalinktype"
+.PD 0
+.TP
+.BI \-\-linktype= datalinktype
+.PD
+Set the data link type to use while capturing packets (see
+.BR -L )
+or just compiling and dumping packet-matching code (see
+.BR -d )
+to \fIdatalinktype\fP.
+.TP
+.BI \-z " postrotate-command"
+Used in conjunction with the
+.B -C
+or
+.B -G
+options, this will make
+.I tcpdump
+run "
+.I postrotate-command file
+" where
+.I file
+is the savefile being closed after each rotation. For example, specifying
+.B \-z gzip
+or
+.B \-z bzip2
+will compress each savefile using gzip or bzip2.
+.IP
+Note that tcpdump will run the command in parallel to the capture, using
+the lowest priority so that this doesn't disturb the capture process.
+.IP
+And in case you would like to use a command that itself takes flags or
+different arguments, you can always write a shell script that will take the
+savefile name as the only argument, make the flags & arguments arrangements
+and execute the command that you want.
+.TP
+.BI \-Z " user"
+.PD 0
+.TP
+.BI \-\-relinquish\-privileges= user
+.PD
+If
+.I tcpdump
+is running as root, after opening the capture device or input savefile,
+but before opening any savefiles for output, change the user ID to
+.I user
+and the group ID to the primary group of
+.IR user .
+.IP
+This behavior can also be enabled by default at compile time.
+.IP "\fI expression\fP"
+.RS
+selects which packets will be dumped.
+If no \fIexpression\fP
+is given, all packets on the net will be dumped.
+Otherwise,
+only packets for which \fIexpression\fP is `true' will be dumped.
+.LP
+For the \fIexpression\fP syntax, see
+.BR \%pcap-filter (@MAN_MISC_INFO@).
+.LP
+The \fIexpression\fP argument can be passed to \fItcpdump\fP as either a single
+Shell argument, or as multiple Shell arguments, whichever is more convenient.
+Generally, if the expression contains Shell metacharacters, such as
+backslashes used to escape protocol names, it is easier to pass it as
+a single, quoted argument rather than to escape the Shell
+metacharacters.
+Multiple arguments are concatenated with spaces before being parsed.
+.SH EXAMPLES
+.LP
+To print all packets arriving at or departing from \fIsundown\fP:
+.RS
+.nf
+\fBtcpdump host sundown\fP
+.fi
+.RE
+.LP
+To print traffic between \fIhelios\fR and either \fIhot\fR or \fIace\fR:
+.RS
+.nf
+\fBtcpdump host helios and \\( hot or ace \\)\fP
+.fi
+.RE
+.LP
+To print all IP packets between \fIace\fR and any host except \fIhelios\fR:
+.RS
+.nf
+\fBtcpdump ip host ace and not helios\fP
+.fi
+.RE
+.LP
+To print all traffic between local hosts and hosts at Berkeley:
+.RS
+.nf
+.B
+tcpdump net ucb-ether
+.fi
+.RE
+.LP
+To print all ftp traffic through internet gateway \fIsnup\fP:
+(note that the expression is quoted to prevent the shell from
+(mis-)interpreting the parentheses):
+.RS
+.nf
+.B
+tcpdump 'gateway snup and (port ftp or ftp-data)'
+.fi
+.RE
+.LP
+To print traffic neither sourced from nor destined for local hosts
+(if you gateway to one other net, this stuff should never make it
+onto your local net).
+.RS
+.nf
+.B
+tcpdump ip and not net \fIlocalnet\fP
+.fi
+.RE
+.LP
+To print the start and end packets (the SYN and FIN packets) of each
+TCP conversation that involves a non-local host.
+.RS
+.nf
+.B
+tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net \fIlocalnet\fP'
+.fi
+.RE
+.LP
+To print the TCP packets with flags RST and ACK both set.
+(i.e. select only the RST and ACK flags in the flags field, and if the result
+is "RST and ACK both set", match)
+.RS
+.nf
+.B
+tcpdump 'tcp[tcpflags] & (tcp-rst|tcp-ack) == (tcp-rst|tcp-ack)'
+.fi
+.RE
+.LP
+To print all IPv4 HTTP packets to and from port 80, i.e. print only
+packets that contain data, not, for example, SYN and FIN packets and
+ACK-only packets. (IPv6 is left as an exercise for the reader.)
+.RS
+.nf
+.B
+tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
+.fi
+.RE
+.LP
+To print IP packets longer than 576 bytes sent through gateway \fIsnup\fP:
+.RS
+.nf
+.B
+tcpdump 'gateway snup and ip[2:2] > 576'
+.fi
+.RE
+.LP
+To print IP broadcast or multicast packets that were
+.I not
+sent via Ethernet broadcast or multicast:
+.RS
+.nf
+.B
+tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
+.fi
+.RE
+.LP
+To print all ICMP packets that are not echo requests/replies (i.e., not
+ping packets):
+.RS
+.nf
+.B
+tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
+.fi
+.RE
+.SH OUTPUT FORMAT
+.LP
+The output of \fItcpdump\fP is protocol dependent.
+The following
+gives a brief description and examples of most of the formats.
+.de HD
+.sp 1.5
+.B
+..
+.HD
+Timestamps
+.LP
+By default, all output lines are preceded by a timestamp.
+The timestamp
+is the current clock time in the form
+.RS
+.nf
+\fIhh:mm:ss.frac\fP
+.fi
+.RE
+and is as accurate as the kernel's clock.
+The timestamp reflects the time the kernel applied a time stamp to the packet.
+No attempt is made to account for the time lag between when the network
+interface finished receiving the packet from the network and when the
+kernel applied a time stamp to the packet; that time lag could include a
+delay between the time when the network interface finished receiving a
+packet from the network and the time when an interrupt was delivered to
+the kernel to get it to read the packet and a delay between the time
+when the kernel serviced the `new packet' interrupt and the time when it
+applied a time stamp to the packet.
+.HD
+Link Level Headers
+.LP
+If the '-e' option is given, the link level header is printed out.
+On Ethernets, the source and destination addresses, protocol,
+and packet length are printed.
+.LP
+On FDDI networks, the '-e' option causes \fItcpdump\fP to print
+the `frame control' field, the source and destination addresses,
+and the packet length.
+(The `frame control' field governs the
+interpretation of the rest of the packet.
+Normal packets (such
+as those containing IP datagrams) are `async' packets, with a priority
+value between 0 and 7; for example, `\fBasync4\fR'.
+Such packets
+are assumed to contain an 802.2 Logical Link Control (LLC) packet;
+the LLC header is printed if it is \fInot\fR an ISO datagram or a
+so-called SNAP packet.
+.LP
+On Token Ring networks, the '-e' option causes \fItcpdump\fP to print
+the `access control' and `frame control' fields, the source and
+destination addresses, and the packet length.
+As on FDDI networks,
+packets are assumed to contain an LLC packet.
+Regardless of whether
+the '-e' option is specified or not, the source routing information is
+printed for source-routed packets.
+.LP
+On 802.11 networks, the '-e' option causes \fItcpdump\fP to print
+the `frame control' fields, all of the addresses in the 802.11 header,
+and the packet length.
+As on FDDI networks,
+packets are assumed to contain an LLC packet.
+.LP
+\fI(N.B.: The following description assumes familiarity with
+the SLIP compression algorithm described in RFC 1144.)\fP
+.LP
+On SLIP links, a direction indicator (``I'' for inbound, ``O'' for outbound),
+packet type, and compression information are printed out.
+The packet type is printed first.
+The three types are \fIip\fP, \fIutcp\fP, and \fIctcp\fP.
+No further link information is printed for \fIip\fR packets.
+For TCP packets, the connection identifier is printed following the type.
+If the packet is compressed, its encoded header is printed out.
+The special cases are printed out as
+\fB*S+\fIn\fR and \fB*SA+\fIn\fR, where \fIn\fR is the amount by which
+the sequence number (or sequence number and ack) has changed.
+If it is not a special case,
+zero or more changes are printed.
+A change is indicated by U (urgent pointer), W (window), A (ack),
+S (sequence number), and I (packet ID), followed by a delta (+n or -n),
+or a new value (=n).
+Finally, the amount of data in the packet and compressed header length
+are printed.
+.LP
+For example, the following line shows an outbound compressed TCP packet,
+with an implicit connection identifier; the ack has changed by 6,
+the sequence number by 49, and the packet ID by 6; there are 3 bytes of
+data and 6 bytes of compressed header:
+.RS
+.nf
+\fBO ctcp * A+6 S+49 I+6 3 (6)\fP
+.fi
+.RE
+.HD
+ARP/RARP Packets
+.LP
+ARP/RARP output shows the type of request and its arguments.
+The
+format is intended to be self explanatory.
+Here is a short sample taken from the start of an `rlogin' from
+host \fIrtsg\fP to host \fIcsam\fP:
+.RS
+.nf
+.sp .5
+\f(CWarp who-has csam tell rtsg
+arp reply csam is-at CSAM\fR
+.sp .5
+.fi
+.RE
+The first line says that rtsg sent an ARP packet asking
+for the Ethernet address of internet host csam.
+Csam
+replies with its Ethernet address (in this example, Ethernet addresses
+are in caps and internet addresses in lower case).
+.LP
+This would look less redundant if we had done \fItcpdump \-n\fP:
+.RS
+.nf
+.sp .5
+\f(CWarp who-has 128.3.254.6 tell 128.3.254.68
+arp reply 128.3.254.6 is-at 02:07:01:00:01:c4\fP
+.fi
+.RE
+.LP
+If we had done \fItcpdump \-e\fP, the fact that the first packet is
+broadcast and the second is point-to-point would be visible:
+.RS
+.nf
+.sp .5
+\f(CWRTSG Broadcast 0806 64: arp who-has csam tell rtsg
+CSAM RTSG 0806 64: arp reply csam is-at CSAM\fR
+.sp .5
+.fi
+.RE
+For the first packet this says the Ethernet source address is RTSG, the
+destination is the Ethernet broadcast address, the type field
+contained hex 0806 (type ETHER_ARP) and the total length was 64 bytes.
+.HD
+IPv4 Packets
+.LP
+If the link-layer header is not being printed, for IPv4 packets,
+\fBIP\fP is printed after the time stamp.
+.LP
+If the
+.B \-v
+flag is specified, information from the IPv4 header is shown in
+parentheses after the \fBIP\fP or the link-layer header.
+The general format of this information is:
+.RS
+.nf
+.sp .5
+tos \fItos\fP, ttl \fIttl\fP, id \fIid\fP, offset \fIoffset\fP, flags [\fIflags\fP], proto \fIproto\fP, length \fIlength\fP, options (\fIoptions\fP)
+.sp .5
+.fi
+.RE
+\fItos\fP is the type of service field; if the ECN bits are non-zero,
+those are reported as \fBECT(1)\fP, \fBECT(0)\fP, or \fBCE\fP.
+\fIttl\fP is the time-to-live; it is not reported if it is zero.
+\fIid\fP is the IP identification field.
+\fIoffset\fP is the fragment offset field; it is printed whether this is
+part of a fragmented datagram or not.
+\fIflags\fP are the MF and DF flags; \fB+\fP is reported if MF is set,
+and \fBDF\fP is reported if F is set. If neither are set, \fB.\fP is
+reported.
+\fIproto\fP is the protocol ID field.
+\fIlength\fP is the total length field.
+\fIoptions\fP are the IP options, if any.
+.LP
+Next, for TCP and UDP packets, the source and destination IP addresses
+and TCP or UDP ports, with a dot between each IP address and its
+corresponding port, will be printed, with a > separating the source and
+destination. For other protocols, the addresses will be printed, with
+a > separating the source and destination. Higher level protocol
+information, if any, will be printed after that.
+.LP
+For fragmented IP datagrams, the first fragment contains the higher
+level protocol header; fragments after the first contain no higher level
+protocol header. Fragmentation information will be printed only with
+the
+.B \-v
+flag, in the IP header information, as described above.
+.HD
+TCP Packets
+.LP
+\fI(N.B.:The following description assumes familiarity with
+the TCP protocol described in RFC 793.
+If you are not familiar
+with the protocol, this description will not
+be of much use to you.)\fP
+.LP
+The general format of a TCP protocol line is:
+.RS
+.nf
+.sp .5
+\fIsrc\fP > \fIdst\fP: Flags [\fItcpflags\fP], seq \fIdata-seqno\fP, ack \fIackno\fP, win \fIwindow\fP, urg \fIurgent\fP, options [\fIopts\fP], length \fIlen\fP
+.sp .5
+.fi
+.RE
+\fISrc\fP and \fIdst\fP are the source and destination IP
+addresses and ports.
+\fITcpflags\fP are some combination of S (SYN),
+F (FIN), P (PSH), R (RST), U (URG), W (CWR), E (ECE) or
+`.' (ACK), or `none' if no flags are set.
+\fIData-seqno\fP describes the portion of sequence space covered
+by the data in this packet (see example below).
+\fIAckno\fP is sequence number of the next data expected the other
+direction on this connection.
+\fIWindow\fP is the number of bytes of receive buffer space available
+the other direction on this connection.
+\fIUrg\fP indicates there is `urgent' data in the packet.
+\fIOpts\fP are TCP options (e.g., mss 1024).
+\fILen\fP is the length of payload data.
+.LP
+\fIIptype\fR, \fISrc\fP, \fIdst\fP, and \fIflags\fP are always present.
+The other fields
+depend on the contents of the packet's TCP protocol header and
+are output only if appropriate.
+.LP
+Here is the opening portion of an rlogin from host \fIrtsg\fP to
+host \fIcsam\fP.
+.RS
+.nf
+.sp .5
+\f(CWIP rtsg.1023 > csam.login: Flags [S], seq 768512:768512, win 4096, opts [mss 1024]
+IP csam.login > rtsg.1023: Flags [S.], seq, 947648:947648, ack 768513, win 4096, opts [mss 1024]
+IP rtsg.1023 > csam.login: Flags [.], ack 1, win 4096
+IP rtsg.1023 > csam.login: Flags [P.], seq 1:2, ack 1, win 4096, length 1
+IP csam.login > rtsg.1023: Flags [.], ack 2, win 4096
+IP rtsg.1023 > csam.login: Flags [P.], seq 2:21, ack 1, win 4096, length 19
+IP csam.login > rtsg.1023: Flags [P.], seq 1:2, ack 21, win 4077, length 1
+IP csam.login > rtsg.1023: Flags [P.], seq 2:3, ack 21, win 4077, urg 1, length 1
+IP csam.login > rtsg.1023: Flags [P.], seq 3:4, ack 21, win 4077, urg 1, length 1\fR
+.sp .5
+.fi
+.RE
+The first line says that TCP port 1023 on rtsg sent a packet
+to port \fIlogin\fP
+on csam.
+The \fBS\fP indicates that the \fISYN\fP flag was set.
+The packet sequence number was 768512 and it contained no data.
+(The notation is `first:last' which means `sequence
+numbers \fIfirst\fP
+up to but not including \fIlast\fP'.)
+There was no piggy-backed ACK, the available receive window was 4096
+bytes and there was a max-segment-size option requesting an MSS of
+1024 bytes.
+.LP
+Csam replies with a similar packet except it includes a piggy-backed
+ACK for rtsg's SYN.
+Rtsg then ACKs csam's SYN.
+The `.' means the ACK flag was set.
+The packet contained no data so there is no data sequence number or length.
+Note that the ACK sequence
+number is a small integer (1).
+The first time \fItcpdump\fP sees a
+TCP `conversation', it prints the sequence number from the packet.
+On subsequent packets of the conversation, the difference between
+the current packet's sequence number and this initial sequence number
+is printed.
+This means that sequence numbers after the
+first can be interpreted
+as relative byte positions in the conversation's data stream (with the
+first data byte each direction being `1').
+`-S' will override this
+feature, causing the original sequence numbers to be output.
+.LP
+On the 6th line, rtsg sends csam 19 bytes of data (bytes 2 through 20
+in the rtsg \(-> csam side of the conversation).
+The PSH flag is set in the packet.
+On the 7th line, csam says it's received data sent by rtsg up to
+but not including byte 21.
+Most of this data is apparently sitting in the
+socket buffer since csam's receive window has gotten 19 bytes smaller.
+Csam also sends one byte of data to rtsg in this packet.
+On the 8th and 9th lines,
+csam sends two bytes of urgent, pushed data to rtsg.
+.LP
+If the snapshot was small enough that \fItcpdump\fP didn't capture
+the full TCP header, it interprets as much of the header as it can
+and then reports ``[|\fItcp\fP]'' to indicate the remainder could not
+be interpreted.
+If the header contains a bogus option (one with a length
+that's either too small or beyond the end of the header), \fItcpdump\fP
+reports it as ``[\fIbad opt\fP]'' and does not interpret any further
+options (since it's impossible to tell where they start).
+If the header
+length indicates options are present but the IP datagram length is not
+long enough for the options to actually be there, \fItcpdump\fP reports
+it as ``[\fIbad hdr length\fP]''.
+.HD
+.B Capturing TCP packets with particular flag combinations (SYN-ACK, URG-ACK, etc.)
+.PP
+There are 8 bits in the control bits section of the TCP header:
+.IP
+.I CWR | ECE | URG | ACK | PSH | RST | SYN | FIN
+.PP
+Let's assume that we want to watch packets used in establishing
+a TCP connection.
+Recall that TCP uses a 3-way handshake protocol
+when it initializes a new connection; the connection sequence with
+regard to the TCP control bits is
+.PP
+.RS
+1) Caller sends SYN
+.RE
+.RS
+2) Recipient responds with SYN, ACK
+.RE
+.RS
+3) Caller sends ACK
+.RE
+.PP
+Now we're interested in capturing packets that have only the
+SYN bit set (Step 1).
+Note that we don't want packets from step 2
+(SYN-ACK), just a plain initial SYN.
+What we need is a correct filter
+expression for \fItcpdump\fP.
+.PP
+Recall the structure of a TCP header without options:
+.PP
+.nf
+ 0 15 31
+-----------------------------------------------------------------
+| source port | destination port |
+-----------------------------------------------------------------
+| sequence number |
+-----------------------------------------------------------------
+| acknowledgment number |
+-----------------------------------------------------------------
+| HL | rsvd |C|E|U|A|P|R|S|F| window size |
+-----------------------------------------------------------------
+| TCP checksum | urgent pointer |
+-----------------------------------------------------------------
+.fi
+.PP
+A TCP header usually holds 20 octets of data, unless options are
+present.
+The first line of the graph contains octets 0 - 3, the
+second line shows octets 4 - 7 etc.
+.PP
+Starting to count with 0, the relevant TCP control bits are contained
+in octet 13:
+.PP
+.nf
+ 0 7| 15| 23| 31
+----------------|---------------|---------------|----------------
+| HL | rsvd |C|E|U|A|P|R|S|F| window size |
+----------------|---------------|---------------|----------------
+| | 13th octet | | |
+.fi
+.PP
+Let's have a closer look at octet no. 13:
+.PP
+.nf
+ | |
+ |---------------|
+ |C|E|U|A|P|R|S|F|
+ |---------------|
+ |7 5 3 0|
+.fi
+.PP
+These are the TCP control bits we are interested
+in.
+We have numbered the bits in this octet from 0 to 7, right to
+left, so the PSH bit is bit number 3, while the URG bit is number 5.
+.PP
+Recall that we want to capture packets with only SYN set.
+Let's see what happens to octet 13 if a TCP datagram arrives
+with the SYN bit set in its header:
+.PP
+.nf
+ |C|E|U|A|P|R|S|F|
+ |---------------|
+ |0 0 0 0 0 0 1 0|
+ |---------------|
+ |7 6 5 4 3 2 1 0|
+.fi
+.PP
+Looking at the
+control bits section we see that only bit number 1 (SYN) is set.
+.PP
+Assuming that octet number 13 is an 8-bit unsigned integer in
+network byte order, the binary value of this octet is
+.IP
+00000010
+.PP
+and its decimal representation is
+.PP
+.nf
+ 7 6 5 4 3 2 1 0
+0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2
+.fi
+.PP
+We're almost done, because now we know that if only SYN is set,
+the value of the 13th octet in the TCP header, when interpreted
+as a 8-bit unsigned integer in network byte order, must be exactly 2.
+.PP
+This relationship can be expressed as
+.RS
+.B
+tcp[13] == 2
+.RE
+.PP
+We can use this expression as the filter for \fItcpdump\fP in order
+to watch packets which have only SYN set:
+.RS
+.B
+tcpdump -i xl0 tcp[13] == 2
+.RE
+.PP
+The expression says "let the 13th octet of a TCP datagram have
+the decimal value 2", which is exactly what we want.
+.PP
+Now, let's assume that we need to capture SYN packets, but we
+don't care if ACK or any other TCP control bit is set at the
+same time.
+Let's see what happens to octet 13 when a TCP datagram
+with SYN-ACK set arrives:
+.PP
+.nf
+ |C|E|U|A|P|R|S|F|
+ |---------------|
+ |0 0 0 1 0 0 1 0|
+ |---------------|
+ |7 6 5 4 3 2 1 0|
+.fi
+.PP
+Now bits 1 and 4 are set in the 13th octet.
+The binary value of
+octet 13 is
+.IP
+ 00010010
+.PP
+which translates to decimal
+.PP
+.nf
+ 7 6 5 4 3 2 1 0
+0*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18
+.fi
+.PP
+Now we can't just use 'tcp[13] == 18' in the \fItcpdump\fP filter
+expression, because that would select only those packets that have
+SYN-ACK set, but not those with only SYN set.
+Remember that we don't care
+if ACK or any other control bit is set as long as SYN is set.
+.PP
+In order to achieve our goal, we need to logically AND the
+binary value of octet 13 with some other value to preserve
+the SYN bit.
+We know that we want SYN to be set in any case,
+so we'll logically AND the value in the 13th octet with
+the binary value of a SYN:
+.PP
+.nf
+
+ 00010010 SYN-ACK 00000010 SYN
+ AND 00000010 (we want SYN) AND 00000010 (we want SYN)
+ -------- --------
+ = 00000010 = 00000010
+.fi
+.PP
+We see that this AND operation delivers the same result
+regardless whether ACK or another TCP control bit is set.
+The decimal representation of the AND value as well as
+the result of this operation is 2 (binary 00000010),
+so we know that for packets with SYN set the following
+relation must hold true:
+.IP
+( ( value of octet 13 ) AND ( 2 ) ) == ( 2 )
+.PP
+This points us to the \fItcpdump\fP filter expression
+.RS
+.B
+ tcpdump -i xl0 'tcp[13] & 2 == 2'
+.RE
+.PP
+Some offsets and field values may be expressed as names
+rather than as numeric values. For example tcp[13] may
+be replaced with tcp[tcpflags]. The following TCP flag
+field values are also available: tcp-fin, tcp-syn, tcp-rst,
+tcp-push, tcp-ack, tcp-urg, tcp-ece and tcp-cwr.
+.PP
+This can be demonstrated as:
+.RS
+.B
+ tcpdump -i xl0 'tcp[tcpflags] & tcp-push != 0'
+.RE
+.PP
+Note that you should use single quotes or a backslash
+in the expression to hide the AND ('&') special character
+from the shell.
+.HD
+.B
+UDP Packets
+.LP
+UDP format is illustrated by this rwho packet:
+.RS
+.nf
+.sp .5
+\f(CWactinide.who > broadcast.who: udp 84\fP
+.sp .5
+.fi
+.RE
+This says that port \fIwho\fP on host \fIactinide\fP sent a UDP
+datagram to port \fIwho\fP on host \fIbroadcast\fP, the Internet
+broadcast address.
+The packet contained 84 bytes of user data.
+.LP
+Some UDP services are recognized (from the source or destination
+port number) and the higher level protocol information printed.
+In particular, Domain Name service requests (RFC 1034/1035) and Sun
+RPC calls (RFC 1050) to NFS.
+.HD
+TCP or UDP Name Server Requests
+.LP
+\fI(N.B.:The following description assumes familiarity with
+the Domain Service protocol described in RFC 1035.
+If you are not familiar
+with the protocol, the following description will appear to be written
+in Greek.)\fP
+.LP
+Name server requests are formatted as
+.RS
+.nf
+.sp .5
+\fIsrc > dst: id op? flags qtype qclass name (len)\fP
+.sp .5
+\f(CWh2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)\fR
+.sp .5
+.fi
+.RE
+Host \fIh2opolo\fP asked the domain server on \fIhelios\fP for an
+address record (qtype=A) associated with the name \fIucbvax.berkeley.edu.\fP
+The query id was `3'.
+The `+' indicates the \fIrecursion desired\fP flag
+was set.
+The query length was 37 bytes, excluding the TCP or UDP and
+IP protocol headers.
+The query operation was the normal one, \fIQuery\fP,
+so the op field was omitted.
+If the op had been anything else, it would
+have been printed between the `3' and the `+'.
+Similarly, the qclass was the normal one,
+\fIC_IN\fP, and omitted.
+Any other qclass would have been printed
+immediately after the `A'.
+.LP
+A few anomalies are checked and may result in extra fields enclosed in
+square brackets: If a query contains an answer, authority records or
+additional records section,
+.IR ancount ,
+.IR nscount ,
+or
+.I arcount
+are printed as `[\fIn\fPa]', `[\fIn\fPn]' or `[\fIn\fPau]' where \fIn\fP
+is the appropriate count.
+If any of the response bits are set (AA, RA or rcode) or any of the
+`must be zero' bits are set in bytes two and three, `[b2&3=\fIx\fP]'
+is printed, where \fIx\fP is the hex value of header bytes two and three.
+.HD
+TCP or UDP Name Server Responses
+.LP
+Name server responses are formatted as
+.RS
+.nf
+.sp .5
+\fIsrc > dst: id op rcode flags a/n/au type class data (len)\fP
+.sp .5
+\f(CWhelios.domain > h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273)
+helios.domain > h2opolo.1537: 2 NXDomain* 0/1/0 (97)\fR
+.sp .5
+.fi
+.RE
+In the first example, \fIhelios\fP responds to query id 3 from \fIh2opolo\fP
+with 3 answer records, 3 name server records and 7 additional records.
+The first answer record is type A (address) and its data is internet
+address 128.32.137.3.
+The total size of the response was 273 bytes,
+excluding TCP or UDP and IP headers.
+The op (Query) and response code
+(NoError) were omitted, as was the class (C_IN) of the A record.
+.LP
+In the second example, \fIhelios\fP responds to query 2 with a
+response code of non-existent domain (NXDomain) with no answers,
+one name server and no authority records.
+The `*' indicates that
+the \fIauthoritative answer\fP bit was set.
+Since there were no
+answers, no type, class or data were printed.
+.LP
+Other flag characters that might appear are `\-' (recursion available,
+RA, \fInot\fP set) and `|' (truncated message, TC, set).
+If the
+`question' section doesn't contain exactly one entry, `[\fIn\fPq]'
+is printed.
+.HD
+SMB/CIFS decoding
+.LP
+\fItcpdump\fP now includes fairly extensive SMB/CIFS/NBT decoding for data
+on UDP/137, UDP/138 and TCP/139.
+Some primitive decoding of IPX and
+NetBEUI SMB data is also done.
+.LP
+By default a fairly minimal decode is done, with a much more detailed
+decode done if -v is used.
+Be warned that with -v a single SMB packet
+may take up a page or more, so only use -v if you really want all the
+gory details.
+.LP
+For information on SMB packet formats and what all the fields mean see
+\%https://download.samba.org/pub/samba/specs/ and other online resources.
+The SMB patches were written by Andrew Tridgell
+(tridge@samba.org).
+.HD
+NFS Requests and Replies
+.LP
+Sun NFS (Network File System) requests and replies are printed as:
+.RS
+.nf
+.sp .5
+\fIsrc.sport > dst.nfs: NFS request xid xid len op args\fP
+\fIsrc.nfs > dst.dport: NFS reply xid xid reply stat len op results\fP
+.sp .5
+\f(CW
+sushi.1023 > wrl.nfs: NFS request xid 26377
+ 112 readlink fh 21,24/10.73165
+wrl.nfs > sushi.1023: NFS reply xid 26377
+ reply ok 40 readlink "../var"
+sushi.1022 > wrl.nfs: NFS request xid 8219
+ 144 lookup fh 9,74/4096.6878 "xcolors"
+wrl.nfs > sushi.1022: NFS reply xid 8219
+ reply ok 128 lookup fh 9,74/4134.3150
+\fR
+.sp .5
+.fi
+.RE
+In the first line, host \fIsushi\fP sends a transaction with id \fI26377\fP
+to \fIwrl\fP.
+The request was 112 bytes,
+excluding the UDP and IP headers.
+The operation was a \fIreadlink\fP
+(read symbolic link) on file handle (\fIfh\fP) 21,24/10.731657119.
+(If one is lucky, as in this case, the file handle can be interpreted
+as a major,minor device number pair, followed by the inode number and
+generation number.) In the second line, \fIwrl\fP replies `ok' with
+the same transaction id and the contents of the link.
+.LP
+In the third line, \fIsushi\fP asks (using a new transaction id) \fIwrl\fP
+to lookup the name `\fIxcolors\fP' in directory file 9,74/4096.6878. In
+the fourth line, \fIwrl\fP sends a reply with the respective transaction id.
+.LP
+Note that the data printed
+depends on the operation type.
+The format is intended to be self
+explanatory if read in conjunction with
+an NFS protocol spec.
+Also note that older versions of tcpdump printed NFS packets in a
+slightly different format: the transaction id (xid) would be printed
+instead of the non-NFS port number of the packet.
+.LP
+If the \-v (verbose) flag is given, additional information is printed.
+For example:
+.RS
+.nf
+.sp .5
+\f(CW
+sushi.1023 > wrl.nfs: NFS request xid 79658
+ 148 read fh 21,11/12.195 8192 bytes @ 24576
+wrl.nfs > sushi.1023: NFS reply xid 79658
+ reply ok 1472 read REG 100664 ids 417/0 sz 29388
+\fP
+.sp .5
+.fi
+.RE
+(\-v also prints the IP header TTL, ID, length, and fragmentation fields,
+which have been omitted from this example.) In the first line,
+\fIsushi\fP asks \fIwrl\fP to read 8192 bytes from file 21,11/12.195,
+at byte offset 24576.
+\fIWrl\fP replies `ok'; the packet shown on the
+second line is the first fragment of the reply, and hence is only 1472
+bytes long (the other bytes will follow in subsequent fragments, but
+these fragments do not have NFS or even UDP headers and so might not be
+printed, depending on the filter expression used).
+Because the \-v flag
+is given, some of the file attributes (which are returned in addition
+to the file data) are printed: the file type (``REG'', for regular file),
+the file mode (in octal), the UID and GID, and the file size.
+.LP
+If the \-v flag is given more than once, even more details are printed.
+.LP
+NFS reply packets do not explicitly identify the RPC operation.
+Instead,
+\fItcpdump\fP keeps track of ``recent'' requests, and matches them to the
+replies using the transaction ID.
+If a reply does not closely follow the
+corresponding request, it might not be parsable.
+.HD
+AFS Requests and Replies
+.LP
+Transarc AFS (Andrew File System) requests and replies are printed
+as:
+.HD
+.RS
+.nf
+.sp .5
+\fIsrc.sport > dst.dport: rx packet-type\fP
+\fIsrc.sport > dst.dport: rx packet-type service call call-name args\fP
+\fIsrc.sport > dst.dport: rx packet-type service reply call-name args\fP
+.sp .5
+\f(CW
+elvis.7001 > pike.afsfs:
+ rx data fs call rename old fid 536876964/1/1 ".newsrc.new"
+ new fid 536876964/1/1 ".newsrc"
+pike.afsfs > elvis.7001: rx data fs reply rename
+\fR
+.sp .5
+.fi
+.RE
+In the first line, host elvis sends a RX packet to pike.
+This was
+a RX data packet to the fs (fileserver) service, and is the start of
+an RPC call.
+The RPC call was a rename, with the old directory file id
+of 536876964/1/1 and an old filename of `.newsrc.new', and a new directory
+file id of 536876964/1/1 and a new filename of `.newsrc'.
+The host pike
+responds with a RPC reply to the rename call (which was successful, because
+it was a data packet and not an abort packet).
+.LP
+In general, all AFS RPCs are decoded at least by RPC call name.
+Most
+AFS RPCs have at least some of the arguments decoded (generally only
+the `interesting' arguments, for some definition of interesting).
+.LP
+The format is intended to be self-describing, but it will probably
+not be useful to people who are not familiar with the workings of
+AFS and RX.
+.LP
+If the -v (verbose) flag is given twice, acknowledgement packets and
+additional header information is printed, such as the RX call ID,
+call number, sequence number, serial number, and the RX packet flags.
+.LP
+If the -v flag is given twice, additional information is printed,
+such as the RX call ID, serial number, and the RX packet flags.
+The MTU negotiation information is also printed from RX ack packets.
+.LP
+If the -v flag is given three times, the security index and service id
+are printed.
+.LP
+Error codes are printed for abort packets, with the exception of Ubik
+beacon packets (because abort packets are used to signify a yes vote
+for the Ubik protocol).
+.LP
+AFS reply packets do not explicitly identify the RPC operation.
+Instead,
+\fItcpdump\fP keeps track of ``recent'' requests, and matches them to the
+replies using the call number and service ID.
+If a reply does not closely
+follow the
+corresponding request, it might not be parsable.
+
+.HD
+KIP AppleTalk (DDP in UDP)
+.LP
+AppleTalk DDP packets encapsulated in UDP datagrams are de-encapsulated
+and dumped as DDP packets (i.e., all the UDP header information is
+discarded).
+The file
+.I /etc/atalk.names
+is used to translate AppleTalk net and node numbers to names.
+Lines in this file have the form
+.RS
+.nf
+.sp .5
+\fInumber name\fP
+
+\f(CW1.254 ether
+16.1 icsd-net
+1.254.110 ace\fR
+.sp .5
+.fi
+.RE
+The first two lines give the names of AppleTalk networks.
+The third
+line gives the name of a particular host (a host is distinguished
+from a net by the 3rd octet in the number \-
+a net number \fImust\fP have two octets and a host number \fImust\fP
+have three octets.) The number and name should be separated by
+whitespace (blanks or tabs).
+The
+.I /etc/atalk.names
+file may contain blank lines or comment lines (lines starting with
+a `#').
+.LP
+AppleTalk addresses are printed in the form
+.RS
+.nf
+.sp .5
+\fInet.host.port\fP
+
+\f(CW144.1.209.2 > icsd-net.112.220
+office.2 > icsd-net.112.220
+jssmag.149.235 > icsd-net.2\fR
+.sp .5
+.fi
+.RE
+(If the
+.I /etc/atalk.names
+doesn't exist or doesn't contain an entry for some AppleTalk
+host/net number, addresses are printed in numeric form.)
+In the first example, NBP (DDP port 2) on net 144.1 node 209
+is sending to whatever is listening on port 220 of net icsd node 112.
+The second line is the same except the full name of the source node
+is known (`office').
+The third line is a send from port 235 on
+net jssmag node 149 to broadcast on the icsd-net NBP port (note that
+the broadcast address (255) is indicated by a net name with no host
+number \- for this reason it's a good idea to keep node names and
+net names distinct in /etc/atalk.names).
+.LP
+NBP (name binding protocol) and ATP (AppleTalk transaction protocol)
+packets have their contents interpreted.
+Other protocols just dump
+the protocol name (or number if no name is registered for the
+protocol) and packet size.
+
+\fBNBP packets\fP are formatted like the following examples:
+.RS
+.nf
+.sp .5
+\f(CWicsd-net.112.220 > jssmag.2: nbp-lkup 190: "=:LaserWriter@*"
+jssmag.209.2 > icsd-net.112.220: nbp-reply 190: "RM1140:LaserWriter@*" 250
+techpit.2 > icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@*" 186\fR
+.sp .5
+.fi
+.RE
+The first line is a name lookup request for laserwriters sent by net icsd host
+112 and broadcast on net jssmag.
+The nbp id for the lookup is 190.
+The second line shows a reply for this request (note that it has the
+same id) from host jssmag.209 saying that it has a laserwriter
+resource named "RM1140" registered on port 250.
+The third line is
+another reply to the same request saying host techpit has laserwriter
+"techpit" registered on port 186.
+
+\fBATP packet\fP formatting is demonstrated by the following example:
+.RS
+.nf
+.sp .5
+\f(CWjssmag.209.165 > helios.132: atp-req 12266<0-7> 0xae030001
+helios.132 > jssmag.209.165: atp-resp 12266:0 (512) 0xae040000
+helios.132 > jssmag.209.165: atp-resp 12266:1 (512) 0xae040000
+helios.132 > jssmag.209.165: atp-resp 12266:2 (512) 0xae040000
+helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000
+helios.132 > jssmag.209.165: atp-resp 12266:4 (512) 0xae040000
+helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000
+helios.132 > jssmag.209.165: atp-resp 12266:6 (512) 0xae040000
+helios.132 > jssmag.209.165: atp-resp*12266:7 (512) 0xae040000
+jssmag.209.165 > helios.132: atp-req 12266<3,5> 0xae030001
+helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000
+helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000
+jssmag.209.165 > helios.132: atp-rel 12266<0-7> 0xae030001
+jssmag.209.133 > helios.132: atp-req* 12267<0-7> 0xae030002\fR
+.sp .5
+.fi
+.RE
+Jssmag.209 initiates transaction id 12266 with host helios by requesting
+up to 8 packets (the `<0-7>').
+The hex number at the end of the line
+is the value of the `userdata' field in the request.
+.LP
+Helios responds with 8 512-byte packets.
+The `:digit' following the
+transaction id gives the packet sequence number in the transaction
+and the number in parens is the amount of data in the packet,
+excluding the ATP header.
+The `*' on packet 7 indicates that the
+EOM bit was set.
+.LP
+Jssmag.209 then requests that packets 3 & 5 be retransmitted.
+Helios
+resends them then jssmag.209 releases the transaction.
+Finally,
+jssmag.209 initiates the next request.
+The `*' on the request
+indicates that XO (`exactly once') was \fInot\fP set.
+
+.SH BACKWARD COMPATIBILITY
+The TCP flag names
+.B tcp-ece
+and
+.B tcp-cwr
+became available when linking with libpcap 1.9.0 or later.
+
+.SH "SEE ALSO"
+.BR stty (1),
+.BR pcap (3PCAP),
+.BR bpf (4),
+.BR nit (4P),
+.BR \%pcap-savefile (@MAN_FILE_FORMATS@),
+.BR \%pcap-filter (@MAN_MISC_INFO@),
+.BR \%pcap-tstamp (@MAN_MISC_INFO@)
+.LP
+.RS
+.na
+.I https://www.iana.org/assignments/media-types/application/vnd.tcpdump.pcap
+.ad
+.RE
+.LP
+.SH AUTHORS
+The original authors are:
+.LP
+Van Jacobson,
+Craig Leres and
+Steven McCanne, all of the
+Lawrence Berkeley National Laboratory, University of California, Berkeley, CA.
+.LP
+It is currently maintained by The Tcpdump Group.
+.LP
+The current version is available via HTTPS:
+.LP
+.RS
+.I https://www.tcpdump.org/
+.RE
+.LP
+The original distribution is available via anonymous ftp:
+.LP
+.RS
+.I ftp://ftp.ee.lbl.gov/old/tcpdump.tar.Z
+.RE
+.LP
+IPv6/IPsec support is added by WIDE/KAME project.
+This program uses OpenSSL/LibreSSL, under specific configurations.
+.SH BUGS
+To report a security issue please send an e-mail to \%security@tcpdump.org.
+.LP
+To report bugs and other problems, contribute patches, request a
+feature, provide generic feedback etc. please see the file
+.I CONTRIBUTING.md
+in the tcpdump source tree root.
+.LP
+NIT doesn't let you watch your own outbound traffic, BPF will.
+We recommend that you use the latter.
+.LP
+On Linux systems with 2.0[.x] kernels:
+.IP
+packets on the loopback device will be seen twice;
+.IP
+packet filtering cannot be done in the kernel, so that all packets must
+be copied from the kernel in order to be filtered in user mode;
+.IP
+all of a packet, not just the part that's within the snapshot length,
+will be copied from the kernel (the 2.0[.x] packet capture mechanism, if
+asked to copy only part of a packet to userspace, will not report the
+true length of the packet; this would cause most IP packets to get an
+error from
+.BR tcpdump );
+.IP
+capturing on some PPP devices won't work correctly.
+.LP
+We recommend that you upgrade to a 2.2 or later kernel.
+.LP
+Some attempt should be made to reassemble IP fragments or, at least
+to compute the right length for the higher level protocol.
+.LP
+Name server inverse queries are not dumped correctly: the (empty)
+question section is printed rather than real query in the answer
+section.
+Some believe that inverse queries are themselves a bug and
+prefer to fix the program generating them rather than \fItcpdump\fP.
+.LP
+A packet trace that crosses a daylight savings time change will give
+skewed time stamps (the time change is ignored).
+.LP
+Filter expressions on fields other than those in Token Ring headers will
+not correctly handle source-routed Token Ring packets.
+.LP
+Filter expressions on fields other than those in 802.11 headers will not
+correctly handle 802.11 data packets with both To DS and From DS set.
+.LP
+.BR "ip6 proto"
+should chase header chain, but at this moment it does not.
+.BR "ip6 protochain"
+is supplied for this behavior.
+.LP
+Arithmetic expression against transport layer headers, like \fBtcp[0]\fP,
+does not work against IPv6 packets.
+It only looks at IPv4 packets.
diff --git a/tcpdump.c b/tcpdump.c
new file mode 100644
index 0000000..0b65415
--- /dev/null
+++ b/tcpdump.c
@@ -0,0 +1,3252 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Support for splitting captures into multiple files with a maximum
+ * file size:
+ *
+ * Copyright (c) 2001
+ * Seth Webster <swebster@sst.ll.mit.edu>
+ */
+
+/*
+ * tcpdump - dump traffic on a network
+ *
+ * First written in 1987 by Van Jacobson, Lawrence Berkeley Laboratory.
+ * Mercilessly hacked and occasionally improved since then via the
+ * combined efforts of Van, Steve McCanne and Craig Leres of LBL.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+/*
+ * Some older versions of Mac OS X may ship pcap.h from libpcap 0.6 with a
+ * libpcap based on 0.8. That means it has pcap_findalldevs() but the
+ * header doesn't define pcap_if_t, meaning that we can't actually *use*
+ * pcap_findalldevs().
+ */
+#ifdef HAVE_PCAP_FINDALLDEVS
+#ifndef HAVE_PCAP_IF_T
+#undef HAVE_PCAP_FINDALLDEVS
+#endif
+#endif
+
+#include "netdissect-stdinc.h"
+
+/*
+ * This must appear after including netdissect-stdinc.h, so that _U_ is
+ * defined.
+ */
+#ifndef lint
+static const char copyright[] _U_ =
+ "@(#) Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000\n\
+The Regents of the University of California. All rights reserved.\n";
+#endif
+
+#include <sys/stat.h>
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#ifdef HAVE_LIBCRYPTO
+#include <openssl/crypto.h>
+#endif
+
+#ifdef HAVE_GETOPT_LONG
+#include <getopt.h>
+#else
+#include "missing/getopt_long.h"
+#endif
+/* Capsicum-specific code requires macros from <net/bpf.h>, which will fail
+ * to compile if <pcap.h> has already been included; including the headers
+ * in the opposite order works fine. For the most part anyway, because in
+ * FreeBSD <pcap/pcap.h> declares bpf_dump() instead of <net/bpf.h>. Thus
+ * interface.h takes care of it later to avoid a compiler warning.
+ */
+#ifdef HAVE_CAPSICUM
+#include <sys/capsicum.h>
+#include <sys/ioccom.h>
+#include <net/bpf.h>
+#include <libgen.h>
+#ifdef HAVE_CASPER
+#include <libcasper.h>
+#include <casper/cap_dns.h>
+#include <sys/nv.h>
+#endif /* HAVE_CASPER */
+#endif /* HAVE_CAPSICUM */
+#ifdef HAVE_PCAP_OPEN
+/*
+ * We found pcap_open() in the capture library, so we'll be using
+ * the remote capture APIs; define PCAP_REMOTE before we include pcap.h,
+ * so we get those APIs declared, and the types and #defines that they
+ * use defined.
+ *
+ * WinPcap's headers require that PCAP_REMOTE be defined in order to get
+ * remote-capture APIs declared and types and #defines that they use
+ * defined.
+ *
+ * (Versions of libpcap with those APIs, and thus Npcap, which is based on
+ * those versions of libpcap, don't require it.)
+ */
+#define HAVE_REMOTE
+#endif
+#include <pcap.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#ifdef _WIN32
+#include <windows.h>
+#else
+#include <sys/time.h>
+#include <sys/wait.h>
+#include <sys/resource.h>
+#include <pwd.h>
+#include <grp.h>
+#endif /* _WIN32 */
+
+/*
+ * Pathname separator.
+ * Use this in pathnames, but do *not* use it in URLs.
+ */
+#ifdef _WIN32
+#define PATH_SEPARATOR '\\'
+#else
+#define PATH_SEPARATOR '/'
+#endif
+
+/* capabilities convenience library */
+/* If a code depends on HAVE_LIBCAP_NG, it depends also on HAVE_CAP_NG_H.
+ * If HAVE_CAP_NG_H is not defined, undefine HAVE_LIBCAP_NG.
+ * Thus, the later tests are done only on HAVE_LIBCAP_NG.
+ */
+#ifdef HAVE_LIBCAP_NG
+#ifdef HAVE_CAP_NG_H
+#include <cap-ng.h>
+#else
+#undef HAVE_LIBCAP_NG
+#endif /* HAVE_CAP_NG_H */
+#endif /* HAVE_LIBCAP_NG */
+
+#ifdef __FreeBSD__
+#include <sys/sysctl.h>
+#endif /* __FreeBSD__ */
+
+#include "netdissect-stdinc.h"
+#include "netdissect.h"
+#include "interface.h"
+#include "addrtoname.h"
+#include "machdep.h"
+#include "pcap-missing.h"
+#include "ascii_strcasecmp.h"
+
+#include "print.h"
+
+#include "diag-control.h"
+
+#include "fptype.h"
+
+#ifndef PATH_MAX
+#define PATH_MAX 1024
+#endif
+
+#if defined(SIGINFO)
+#define SIGNAL_REQ_INFO SIGINFO
+#elif defined(SIGUSR1)
+#define SIGNAL_REQ_INFO SIGUSR1
+#endif
+
+#if defined(HAVE_PCAP_DUMP_FLUSH) && defined(SIGUSR2)
+#define SIGNAL_FLUSH_PCAP SIGUSR2
+#endif
+
+#if defined(HAVE_PCAP_CREATE) || defined(_WIN32)
+static int Bflag; /* buffer size */
+#endif
+#ifdef HAVE_PCAP_DUMP_FTELL64
+static int64_t Cflag; /* rotate dump files after this many bytes */
+#else
+static long Cflag; /* rotate dump files after this many bytes */
+#endif
+static int Cflag_count; /* Keep track of which file number we're writing */
+#ifdef HAVE_PCAP_FINDALLDEVS
+static int Dflag; /* list available devices and exit */
+#endif
+#ifdef HAVE_PCAP_FINDALLDEVS_EX
+static char *remote_interfaces_source; /* list available devices from this source and exit */
+#endif
+
+/*
+ * This is exported because, in some versions of libpcap, if libpcap
+ * is built with optimizer debugging code (which is *NOT* the default
+ * configuration!), the library *imports*(!) a variable named dflag,
+ * under the expectation that tcpdump is exporting it, to govern
+ * how much debugging information to print when optimizing
+ * the generated BPF code.
+ *
+ * This is a horrible hack; newer versions of libpcap don't import
+ * dflag but, instead, *if* built with optimizer debugging code,
+ * *export* a routine to set that flag.
+ */
+extern int dflag;
+int dflag; /* print filter code */
+static int Gflag; /* rotate dump files after this many seconds */
+static int Gflag_count; /* number of files created with Gflag rotation */
+static time_t Gflag_time; /* The last time_t the dump file was rotated. */
+static int Lflag; /* list available data link types and exit */
+static int Iflag; /* rfmon (monitor) mode */
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+static int Jflag; /* list available time stamp types */
+static int jflag = -1; /* packet time stamp source */
+#endif
+static int lflag; /* line-buffered output */
+static int pflag; /* don't go promiscuous */
+#ifdef HAVE_PCAP_SETDIRECTION
+static int Qflag = -1; /* restrict captured packet by send/receive direction */
+#endif
+#ifdef HAVE_PCAP_DUMP_FLUSH
+static int Uflag; /* "unbuffered" output of dump files */
+#endif
+static int Wflag; /* recycle output files after this number of files */
+static int WflagChars;
+static char *zflag = NULL; /* compress each savefile using a specified command (like gzip or bzip2) */
+static int timeout = 1000; /* default timeout = 1000 ms = 1 s */
+#ifdef HAVE_PCAP_SET_IMMEDIATE_MODE
+static int immediate_mode;
+#endif
+static int count_mode;
+
+static int infodelay;
+static int infoprint;
+
+char *program_name;
+
+/* Forwards */
+static NORETURN void error(FORMAT_STRING(const char *), ...) PRINTFLIKE(1, 2);
+static void warning(FORMAT_STRING(const char *), ...) PRINTFLIKE(1, 2);
+static NORETURN void exit_tcpdump(int);
+static void (*setsignal (int sig, void (*func)(int)))(int);
+static void cleanup(int);
+static void child_cleanup(int);
+static void print_version(FILE *);
+static void print_usage(FILE *);
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+static NORETURN void show_tstamp_types_and_exit(pcap_t *, const char *device);
+#endif
+static NORETURN void show_dlts_and_exit(pcap_t *, const char *device);
+#ifdef HAVE_PCAP_FINDALLDEVS
+static NORETURN void show_devices_and_exit(void);
+#endif
+#ifdef HAVE_PCAP_FINDALLDEVS_EX
+static NORETURN void show_remote_devices_and_exit(void);
+#endif
+
+static void print_packet(u_char *, const struct pcap_pkthdr *, const u_char *);
+static void dump_packet_and_trunc(u_char *, const struct pcap_pkthdr *, const u_char *);
+static void dump_packet(u_char *, const struct pcap_pkthdr *, const u_char *);
+static void droproot(const char *, const char *);
+
+#ifdef SIGNAL_REQ_INFO
+static void requestinfo(int);
+#endif
+
+#ifdef SIGNAL_FLUSH_PCAP
+static void flushpcap(int);
+#endif
+
+#ifdef _WIN32
+ static HANDLE timer_handle = INVALID_HANDLE_VALUE;
+ static void CALLBACK verbose_stats_dump(PVOID param, BOOLEAN timer_fired);
+#else /* _WIN32 */
+ static void verbose_stats_dump(int sig);
+#endif /* _WIN32 */
+
+static void info(int);
+static u_int packets_captured;
+
+#ifdef HAVE_PCAP_FINDALLDEVS
+static const struct tok status_flags[] = {
+#ifdef PCAP_IF_UP
+ { PCAP_IF_UP, "Up" },
+#endif
+#ifdef PCAP_IF_RUNNING
+ { PCAP_IF_RUNNING, "Running" },
+#endif
+ { PCAP_IF_LOOPBACK, "Loopback" },
+#ifdef PCAP_IF_WIRELESS
+ { PCAP_IF_WIRELESS, "Wireless" },
+#endif
+ { 0, NULL }
+};
+#endif
+
+static pcap_t *pd;
+static pcap_dumper_t *pdd = NULL;
+
+static int supports_monitor_mode;
+
+extern int optind;
+extern int opterr;
+extern char *optarg;
+
+struct dump_info {
+ char *WFileName;
+ char *CurrentFileName;
+ pcap_t *pd;
+ pcap_dumper_t *pdd;
+ netdissect_options *ndo;
+#ifdef HAVE_CAPSICUM
+ int dirfd;
+#endif
+};
+
+#if defined(HAVE_PCAP_SET_PARSER_DEBUG)
+/*
+ * We have pcap_set_parser_debug() in libpcap; declare it (it's not declared
+ * by any libpcap header, because it's a special hack, only available if
+ * libpcap was configured to include it, and only intended for use by
+ * libpcap developers trying to debug the parser for filter expressions).
+ */
+#ifdef _WIN32
+__declspec(dllimport)
+#else /* _WIN32 */
+extern
+#endif /* _WIN32 */
+void pcap_set_parser_debug(int);
+#elif defined(HAVE_PCAP_DEBUG) || defined(HAVE_YYDEBUG)
+/*
+ * We don't have pcap_set_parser_debug() in libpcap, but we do have
+ * pcap_debug or yydebug. Make a local version of pcap_set_parser_debug()
+ * to set the flag, and define HAVE_PCAP_SET_PARSER_DEBUG.
+ */
+static void
+pcap_set_parser_debug(int value)
+{
+#ifdef HAVE_PCAP_DEBUG
+ extern int pcap_debug;
+
+ pcap_debug = value;
+#else /* HAVE_PCAP_DEBUG */
+ extern int yydebug;
+
+ yydebug = value;
+#endif /* HAVE_PCAP_DEBUG */
+}
+
+#define HAVE_PCAP_SET_PARSER_DEBUG
+#endif
+
+#if defined(HAVE_PCAP_SET_OPTIMIZER_DEBUG)
+/*
+ * We have pcap_set_optimizer_debug() in libpcap; declare it (it's not declared
+ * by any libpcap header, because it's a special hack, only available if
+ * libpcap was configured to include it, and only intended for use by
+ * libpcap developers trying to debug the optimizer for filter expressions).
+ */
+#ifdef _WIN32
+__declspec(dllimport)
+#else /* _WIN32 */
+extern
+#endif /* _WIN32 */
+void pcap_set_optimizer_debug(int);
+#endif
+
+/* VARARGS */
+static void
+error(const char *fmt, ...)
+{
+ va_list ap;
+
+ (void)fprintf(stderr, "%s: ", program_name);
+ va_start(ap, fmt);
+ (void)vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ if (*fmt) {
+ fmt += strlen(fmt);
+ if (fmt[-1] != '\n')
+ (void)fputc('\n', stderr);
+ }
+ exit_tcpdump(S_ERR_HOST_PROGRAM);
+ /* NOTREACHED */
+}
+
+/* VARARGS */
+static void
+warning(const char *fmt, ...)
+{
+ va_list ap;
+
+ (void)fprintf(stderr, "%s: WARNING: ", program_name);
+ va_start(ap, fmt);
+ (void)vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ if (*fmt) {
+ fmt += strlen(fmt);
+ if (fmt[-1] != '\n')
+ (void)fputc('\n', stderr);
+ }
+}
+
+static void
+exit_tcpdump(int status)
+{
+ nd_cleanup();
+ exit(status);
+}
+
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+static void
+show_tstamp_types_and_exit(pcap_t *pc, const char *device)
+{
+ int n_tstamp_types;
+ int *tstamp_types = 0;
+ const char *tstamp_type_name;
+ int i;
+
+ n_tstamp_types = pcap_list_tstamp_types(pc, &tstamp_types);
+ if (n_tstamp_types < 0)
+ error("%s", pcap_geterr(pc));
+
+ if (n_tstamp_types == 0) {
+ fprintf(stderr, "Time stamp type cannot be set for %s\n",
+ device);
+ exit_tcpdump(S_SUCCESS);
+ }
+ fprintf(stderr, "Time stamp types for %s (use option -j to set):\n",
+ device);
+ for (i = 0; i < n_tstamp_types; i++) {
+ tstamp_type_name = pcap_tstamp_type_val_to_name(tstamp_types[i]);
+ if (tstamp_type_name != NULL) {
+ (void) fprintf(stderr, " %s (%s)\n", tstamp_type_name,
+ pcap_tstamp_type_val_to_description(tstamp_types[i]));
+ } else {
+ (void) fprintf(stderr, " %d\n", tstamp_types[i]);
+ }
+ }
+ pcap_free_tstamp_types(tstamp_types);
+ exit_tcpdump(S_SUCCESS);
+}
+#endif
+
+static void
+show_dlts_and_exit(pcap_t *pc, const char *device)
+{
+ int n_dlts, i;
+ int *dlts = 0;
+ const char *dlt_name;
+
+ n_dlts = pcap_list_datalinks(pc, &dlts);
+ if (n_dlts < 0)
+ error("%s", pcap_geterr(pc));
+ else if (n_dlts == 0 || !dlts)
+ error("No data link types.");
+
+ /*
+ * If the interface is known to support monitor mode, indicate
+ * whether these are the data link types available when not in
+ * monitor mode, if -I wasn't specified, or when in monitor mode,
+ * when -I was specified (the link-layer types available in
+ * monitor mode might be different from the ones available when
+ * not in monitor mode).
+ */
+ if (supports_monitor_mode)
+ (void) fprintf(stderr, "Data link types for %s %s (use option -y to set):\n",
+ device,
+ Iflag ? "when in monitor mode" : "when not in monitor mode");
+ else
+ (void) fprintf(stderr, "Data link types for %s (use option -y to set):\n",
+ device);
+
+ for (i = 0; i < n_dlts; i++) {
+ dlt_name = pcap_datalink_val_to_name(dlts[i]);
+ if (dlt_name != NULL) {
+ (void) fprintf(stderr, " %s (%s)", dlt_name,
+ pcap_datalink_val_to_description(dlts[i]));
+
+ /*
+ * OK, does tcpdump handle that type?
+ */
+ if (!has_printer(dlts[i]))
+ (void) fprintf(stderr, " (printing not supported)");
+ fprintf(stderr, "\n");
+ } else {
+ (void) fprintf(stderr, " DLT %d (printing not supported)\n",
+ dlts[i]);
+ }
+ }
+#ifdef HAVE_PCAP_FREE_DATALINKS
+ pcap_free_datalinks(dlts);
+#endif
+ exit_tcpdump(S_SUCCESS);
+}
+
+#ifdef HAVE_PCAP_FINDALLDEVS
+static void
+show_devices_and_exit(void)
+{
+ pcap_if_t *dev, *devlist;
+ char ebuf[PCAP_ERRBUF_SIZE];
+ int i;
+
+ if (pcap_findalldevs(&devlist, ebuf) < 0)
+ error("%s", ebuf);
+ for (i = 0, dev = devlist; dev != NULL; i++, dev = dev->next) {
+ printf("%d.%s", i+1, dev->name);
+ if (dev->description != NULL)
+ printf(" (%s)", dev->description);
+ if (dev->flags != 0) {
+ printf(" [");
+ printf("%s", bittok2str(status_flags, "none", dev->flags));
+#ifdef PCAP_IF_WIRELESS
+ if (dev->flags & PCAP_IF_WIRELESS) {
+ switch (dev->flags & PCAP_IF_CONNECTION_STATUS) {
+
+ case PCAP_IF_CONNECTION_STATUS_UNKNOWN:
+ printf(", Association status unknown");
+ break;
+
+ case PCAP_IF_CONNECTION_STATUS_CONNECTED:
+ printf(", Associated");
+ break;
+
+ case PCAP_IF_CONNECTION_STATUS_DISCONNECTED:
+ printf(", Not associated");
+ break;
+
+ case PCAP_IF_CONNECTION_STATUS_NOT_APPLICABLE:
+ break;
+ }
+ } else {
+ switch (dev->flags & PCAP_IF_CONNECTION_STATUS) {
+
+ case PCAP_IF_CONNECTION_STATUS_UNKNOWN:
+ printf(", Connection status unknown");
+ break;
+
+ case PCAP_IF_CONNECTION_STATUS_CONNECTED:
+ printf(", Connected");
+ break;
+
+ case PCAP_IF_CONNECTION_STATUS_DISCONNECTED:
+ printf(", Disconnected");
+ break;
+
+ case PCAP_IF_CONNECTION_STATUS_NOT_APPLICABLE:
+ break;
+ }
+ }
+#endif
+ printf("]");
+ }
+ printf("\n");
+ }
+ pcap_freealldevs(devlist);
+ exit_tcpdump(S_SUCCESS);
+}
+#endif /* HAVE_PCAP_FINDALLDEVS */
+
+#ifdef HAVE_PCAP_FINDALLDEVS_EX
+static void
+show_remote_devices_and_exit(void)
+{
+ pcap_if_t *dev, *devlist;
+ char ebuf[PCAP_ERRBUF_SIZE];
+ int i;
+
+ if (pcap_findalldevs_ex(remote_interfaces_source, NULL, &devlist,
+ ebuf) < 0)
+ error("%s", ebuf);
+ for (i = 0, dev = devlist; dev != NULL; i++, dev = dev->next) {
+ printf("%d.%s", i+1, dev->name);
+ if (dev->description != NULL)
+ printf(" (%s)", dev->description);
+ if (dev->flags != 0)
+ printf(" [%s]", bittok2str(status_flags, "none", dev->flags));
+ printf("\n");
+ }
+ pcap_freealldevs(devlist);
+ exit_tcpdump(S_SUCCESS);
+}
+#endif /* HAVE_PCAP_FINDALLDEVS */
+
+/*
+ * Short options.
+ *
+ * Note that there we use all letters for short options except for g, k,
+ * o, and P, and those are used by other versions of tcpdump, and we should
+ * only use them for the same purposes that the other versions of tcpdump
+ * use them:
+ *
+ * macOS tcpdump uses -g to force non--v output for IP to be on one
+ * line, making it more "g"repable;
+ *
+ * macOS tcpdump uses -k to specify that packet comments in pcapng files
+ * should be printed;
+ *
+ * OpenBSD tcpdump uses -o to indicate that OS fingerprinting should be done
+ * for hosts sending TCP SYN packets;
+ *
+ * macOS tcpdump uses -P to indicate that -w should write pcapng rather
+ * than pcap files.
+ *
+ * macOS tcpdump also uses -Q to specify expressions that match packet
+ * metadata, including but not limited to the packet direction.
+ * The expression syntax is different from a simple "in|out|inout",
+ * and those expressions aren't accepted by macOS tcpdump, but the
+ * equivalents would be "in" = "dir=in", "out" = "dir=out", and
+ * "inout" = "dir=in or dir=out", and the parser could conceivably
+ * special-case "in", "out", and "inout" as expressions for backwards
+ * compatibility, so all is not (yet) lost.
+ */
+
+/*
+ * Set up flags that might or might not be supported depending on the
+ * version of libpcap we're using.
+ */
+#if defined(HAVE_PCAP_CREATE) || defined(_WIN32)
+#define B_FLAG "B:"
+#define B_FLAG_USAGE " [ -B size ]"
+#else /* defined(HAVE_PCAP_CREATE) || defined(_WIN32) */
+#define B_FLAG
+#define B_FLAG_USAGE
+#endif /* defined(HAVE_PCAP_CREATE) || defined(_WIN32) */
+
+#ifdef HAVE_PCAP_FINDALLDEVS
+#define D_FLAG "D"
+#else
+#define D_FLAG
+#endif
+
+#ifdef HAVE_PCAP_CREATE
+#define I_FLAG "I"
+#else /* HAVE_PCAP_CREATE */
+#define I_FLAG
+#endif /* HAVE_PCAP_CREATE */
+
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+#define j_FLAG "j:"
+#define j_FLAG_USAGE " [ -j tstamptype ]"
+#define J_FLAG "J"
+#else /* PCAP_ERROR_TSTAMP_TYPE_NOTSUP */
+#define j_FLAG
+#define j_FLAG_USAGE
+#define J_FLAG
+#endif /* PCAP_ERROR_TSTAMP_TYPE_NOTSUP */
+
+#ifdef USE_LIBSMI
+#define m_FLAG_USAGE "[ -m module ] ..."
+#endif
+
+#ifdef HAVE_PCAP_SETDIRECTION
+#define Q_FLAG "Q:"
+#define Q_FLAG_USAGE " [ -Q in|out|inout ]"
+#else
+#define Q_FLAG
+#define Q_FLAG_USAGE
+#endif
+
+#ifdef HAVE_PCAP_DUMP_FLUSH
+#define U_FLAG "U"
+#else
+#define U_FLAG
+#endif
+
+#define SHORTOPTS "aAb" B_FLAG "c:C:d" D_FLAG "eE:fF:G:hHi:" I_FLAG j_FLAG J_FLAG "KlLm:M:nNOpq" Q_FLAG "r:s:StT:u" U_FLAG "vV:w:W:xXy:Yz:Z:#"
+
+/*
+ * Long options.
+ *
+ * We do not currently have long options corresponding to all short
+ * options; we should probably pick appropriate option names for them.
+ *
+ * However, the short options where the number of times the option is
+ * specified matters, such as -v and -d and -t, should probably not
+ * just map to a long option, as saying
+ *
+ * tcpdump --verbose --verbose
+ *
+ * doesn't make sense; it should be --verbosity={N} or something such
+ * as that.
+ *
+ * For long options with no corresponding short options, we define values
+ * outside the range of ASCII graphic characters, make that the last
+ * component of the entry for the long option, and have a case for that
+ * option in the switch statement.
+ */
+#define OPTION_VERSION 128
+#define OPTION_TSTAMP_PRECISION 129
+#define OPTION_IMMEDIATE_MODE 130
+#define OPTION_PRINT 131
+#define OPTION_LIST_REMOTE_INTERFACES 132
+#define OPTION_TSTAMP_MICRO 133
+#define OPTION_TSTAMP_NANO 134
+#define OPTION_FP_TYPE 135
+#define OPTION_COUNT 136
+
+static const struct option longopts[] = {
+#if defined(HAVE_PCAP_CREATE) || defined(_WIN32)
+ { "buffer-size", required_argument, NULL, 'B' },
+#endif
+ { "list-interfaces", no_argument, NULL, 'D' },
+#ifdef HAVE_PCAP_FINDALLDEVS_EX
+ { "list-remote-interfaces", required_argument, NULL, OPTION_LIST_REMOTE_INTERFACES },
+#endif
+ { "help", no_argument, NULL, 'h' },
+ { "interface", required_argument, NULL, 'i' },
+#ifdef HAVE_PCAP_CREATE
+ { "monitor-mode", no_argument, NULL, 'I' },
+#endif
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+ { "time-stamp-type", required_argument, NULL, 'j' },
+ { "list-time-stamp-types", no_argument, NULL, 'J' },
+#endif
+#ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
+ { "micro", no_argument, NULL, OPTION_TSTAMP_MICRO},
+ { "nano", no_argument, NULL, OPTION_TSTAMP_NANO},
+ { "time-stamp-precision", required_argument, NULL, OPTION_TSTAMP_PRECISION},
+#endif
+ { "dont-verify-checksums", no_argument, NULL, 'K' },
+ { "list-data-link-types", no_argument, NULL, 'L' },
+ { "no-optimize", no_argument, NULL, 'O' },
+ { "no-promiscuous-mode", no_argument, NULL, 'p' },
+#ifdef HAVE_PCAP_SETDIRECTION
+ { "direction", required_argument, NULL, 'Q' },
+#endif
+ { "snapshot-length", required_argument, NULL, 's' },
+ { "absolute-tcp-sequence-numbers", no_argument, NULL, 'S' },
+#ifdef HAVE_PCAP_DUMP_FLUSH
+ { "packet-buffered", no_argument, NULL, 'U' },
+#endif
+ { "linktype", required_argument, NULL, 'y' },
+#ifdef HAVE_PCAP_SET_IMMEDIATE_MODE
+ { "immediate-mode", no_argument, NULL, OPTION_IMMEDIATE_MODE },
+#endif
+#ifdef HAVE_PCAP_SET_PARSER_DEBUG
+ { "debug-filter-parser", no_argument, NULL, 'Y' },
+#endif
+ { "relinquish-privileges", required_argument, NULL, 'Z' },
+ { "count", no_argument, NULL, OPTION_COUNT },
+ { "fp-type", no_argument, NULL, OPTION_FP_TYPE },
+ { "number", no_argument, NULL, '#' },
+ { "print", no_argument, NULL, OPTION_PRINT },
+ { "version", no_argument, NULL, OPTION_VERSION },
+ { NULL, 0, NULL, 0 }
+};
+
+#ifdef HAVE_PCAP_FINDALLDEVS_EX
+#define LIST_REMOTE_INTERFACES_USAGE "[ --list-remote-interfaces remote-source ]"
+#else
+#define LIST_REMOTE_INTERFACES_USAGE
+#endif
+
+#ifdef HAVE_PCAP_SET_IMMEDIATE_MODE
+#define IMMEDIATE_MODE_USAGE " [ --immediate-mode ]"
+#else
+#define IMMEDIATE_MODE_USAGE ""
+#endif
+
+#ifndef _WIN32
+/* Drop root privileges and chroot if necessary */
+static void
+droproot(const char *username, const char *chroot_dir)
+{
+ struct passwd *pw = NULL;
+
+ if (chroot_dir && !username)
+ error("Chroot without dropping root is insecure");
+
+ pw = getpwnam(username);
+ if (pw) {
+ if (chroot_dir) {
+ if (chroot(chroot_dir) != 0 || chdir ("/") != 0)
+ error("Couldn't chroot/chdir to '%.64s': %s",
+ chroot_dir, pcap_strerror(errno));
+ }
+#ifdef HAVE_LIBCAP_NG
+ {
+ int ret = capng_change_id(pw->pw_uid, pw->pw_gid, CAPNG_NO_FLAG);
+ if (ret < 0)
+ error("capng_change_id(): return %d\n", ret);
+ else
+ fprintf(stderr, "dropped privs to %s\n", username);
+ }
+#else
+ if (initgroups(pw->pw_name, pw->pw_gid) != 0 ||
+ setgid(pw->pw_gid) != 0 || setuid(pw->pw_uid) != 0)
+ error("Couldn't change to '%.32s' uid=%lu gid=%lu: %s",
+ username,
+ (unsigned long)pw->pw_uid,
+ (unsigned long)pw->pw_gid,
+ pcap_strerror(errno));
+ else {
+ fprintf(stderr, "dropped privs to %s\n", username);
+ }
+#endif /* HAVE_LIBCAP_NG */
+ } else
+ error("Couldn't find user '%.32s'", username);
+#ifdef HAVE_LIBCAP_NG
+ /* We don't need CAP_SETUID, CAP_SETGID and CAP_SYS_CHROOT any more. */
+DIAG_OFF_ASSIGN_ENUM
+ capng_updatev(
+ CAPNG_DROP,
+ CAPNG_EFFECTIVE | CAPNG_PERMITTED,
+ CAP_SETUID,
+ CAP_SETGID,
+ CAP_SYS_CHROOT,
+ -1);
+DIAG_ON_ASSIGN_ENUM
+ capng_apply(CAPNG_SELECT_BOTH);
+#endif /* HAVE_LIBCAP_NG */
+
+}
+#endif /* _WIN32 */
+
+static int
+getWflagChars(int x)
+{
+ int c = 0;
+
+ x -= 1;
+ while (x > 0) {
+ c += 1;
+ x /= 10;
+ }
+
+ return c;
+}
+
+
+static void
+MakeFilename(char *buffer, char *orig_name, int cnt, int max_chars)
+{
+ char *filename = malloc(PATH_MAX + 1);
+ if (filename == NULL)
+ error("%s: malloc", __func__);
+ if (strlen(orig_name) == 0)
+ error("an empty string is not a valid file name");
+
+ /* Process with strftime if Gflag is set. */
+ if (Gflag != 0) {
+ struct tm *local_tm;
+
+ /* Convert Gflag_time to a usable format */
+ if ((local_tm = localtime(&Gflag_time)) == NULL) {
+ error("%s: localtime", __func__);
+ }
+
+ /* There's no good way to detect an error in strftime since a return
+ * value of 0 isn't necessarily failure; if orig_name is an empty
+ * string, the formatted string will be empty.
+ *
+ * However, the C90 standard says that, if there *is* a
+ * buffer overflow, the content of the buffer is undefined,
+ * so we must check for a buffer overflow.
+ *
+ * So we check above for an empty orig_name, and only call
+ * strftime() if it's non-empty, in which case the return
+ * value will only be 0 if the formatted date doesn't fit
+ * in the buffer.
+ *
+ * (We check above because, even if we don't use -G, we
+ * want a better error message than "tcpdump: : No such
+ * file or directory" for this case.)
+ */
+ if (strftime(filename, PATH_MAX, orig_name, local_tm) == 0) {
+ error("%s: strftime", __func__);
+ }
+ } else {
+ strncpy(filename, orig_name, PATH_MAX);
+ }
+
+ if (cnt == 0 && max_chars == 0)
+ strncpy(buffer, filename, PATH_MAX + 1);
+ else
+ if (snprintf(buffer, PATH_MAX + 1, "%s%0*d", filename, max_chars, cnt) > PATH_MAX)
+ /* Report an error if the filename is too large */
+ error("too many output files or filename is too long (> %d)", PATH_MAX);
+ free(filename);
+}
+
+static char *
+get_next_file(FILE *VFile, char *ptr)
+{
+ char *ret;
+ size_t len;
+
+ ret = fgets(ptr, PATH_MAX, VFile);
+ if (!ret)
+ return NULL;
+
+ len = strlen (ptr);
+ if (len > 0 && ptr[len - 1] == '\n')
+ ptr[len - 1] = '\0';
+
+ return ret;
+}
+
+#ifdef HAVE_CASPER
+static cap_channel_t *
+capdns_setup(void)
+{
+ cap_channel_t *capcas, *capdnsloc;
+ const char *types[1];
+ int families[2];
+
+ capcas = cap_init();
+ if (capcas == NULL)
+ error("unable to create casper process");
+ capdnsloc = cap_service_open(capcas, "system.dns");
+ /* Casper capability no longer needed. */
+ cap_close(capcas);
+ if (capdnsloc == NULL)
+ error("unable to open system.dns service");
+ /* Limit system.dns to reverse DNS lookups. */
+ types[0] = "ADDR";
+ if (cap_dns_type_limit(capdnsloc, types, 1) < 0)
+ error("unable to limit access to system.dns service");
+ families[0] = AF_INET;
+ families[1] = AF_INET6;
+ if (cap_dns_family_limit(capdnsloc, families, 2) < 0)
+ error("unable to limit access to system.dns service");
+
+ return (capdnsloc);
+}
+#endif /* HAVE_CASPER */
+
+#ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
+static int
+tstamp_precision_from_string(const char *precision)
+{
+ if (strncmp(precision, "nano", strlen("nano")) == 0)
+ return PCAP_TSTAMP_PRECISION_NANO;
+
+ if (strncmp(precision, "micro", strlen("micro")) == 0)
+ return PCAP_TSTAMP_PRECISION_MICRO;
+
+ return -EINVAL;
+}
+
+static const char *
+tstamp_precision_to_string(int precision)
+{
+ switch (precision) {
+
+ case PCAP_TSTAMP_PRECISION_MICRO:
+ return "micro";
+
+ case PCAP_TSTAMP_PRECISION_NANO:
+ return "nano";
+
+ default:
+ return "unknown";
+ }
+}
+#endif
+
+#ifdef HAVE_CAPSICUM
+/*
+ * Ensure that, on a dump file's descriptor, we have all the rights
+ * necessary to make the standard I/O library work with an fdopen()ed
+ * FILE * from that descriptor.
+ *
+ * A long time ago in a galaxy far, far away, AT&T decided that, instead
+ * of providing separate APIs for getting and setting the FD_ flags on a
+ * descriptor, getting and setting the O_ flags on a descriptor, and
+ * locking files, they'd throw them all into a kitchen-sink fcntl() call
+ * along the lines of ioctl(), the fact that ioctl() operations are
+ * largely specific to particular character devices but fcntl() operations
+ * are either generic to all descriptors or generic to all descriptors for
+ * regular files nonwithstanding.
+ *
+ * The Capsicum people decided that fine-grained control of descriptor
+ * operations was required, so that you need to grant permission for
+ * reading, writing, seeking, and fcntl-ing. The latter, courtesy of
+ * AT&T's decision, means that "fcntl-ing" isn't a thing, but a motley
+ * collection of things, so there are *individual* fcntls for which
+ * permission needs to be granted.
+ *
+ * The FreeBSD standard I/O people implemented some optimizations that
+ * requires that the standard I/O routines be able to determine whether
+ * the descriptor for the FILE * is open append-only or not; as that
+ * descriptor could have come from an open() rather than an fopen(),
+ * that requires that it be able to do an F_GETFL fcntl() to read
+ * the O_ flags.
+ *
+ * Tcpdump uses ftell() to determine how much data has been written
+ * to a file in order to, when used with -C, determine when it's time
+ * to rotate capture files. ftell() therefore needs to do an lseek()
+ * to find out the file offset and must, thanks to the aforementioned
+ * optimization, also know whether the descriptor is open append-only
+ * or not.
+ *
+ * The net result of all the above is that we need to grant CAP_SEEK,
+ * CAP_WRITE, and CAP_FCNTL with the CAP_FCNTL_GETFL subcapability.
+ *
+ * Perhaps this is the universe's way of saying that either
+ *
+ * 1) there needs to be an fopenat() call and a pcap_dump_openat() call
+ * using it, so that Capsicum-capable tcpdump wouldn't need to do
+ * an fdopen()
+ *
+ * or
+ *
+ * 2) there needs to be a cap_fdopen() call in the FreeBSD standard
+ * I/O library that knows what rights are needed by the standard
+ * I/O library, based on the open mode, and assigns them, perhaps
+ * with an additional argument indicating, for example, whether
+ * seeking should be allowed, so that tcpdump doesn't need to know
+ * what the standard I/O library happens to require this week.
+ */
+static void
+set_dumper_capsicum_rights(pcap_dumper_t *p)
+{
+ int fd = fileno(pcap_dump_file(p));
+ cap_rights_t rights;
+
+ cap_rights_init(&rights, CAP_SEEK, CAP_WRITE, CAP_FCNTL);
+ if (cap_rights_limit(fd, &rights) < 0 && errno != ENOSYS) {
+ error("unable to limit dump descriptor");
+ }
+ if (cap_fcntls_limit(fd, CAP_FCNTL_GETFL) < 0 && errno != ENOSYS) {
+ error("unable to limit dump descriptor fcntls");
+ }
+}
+#endif
+
+/*
+ * Copy arg vector into a new buffer, concatenating arguments with spaces.
+ */
+static char *
+copy_argv(char **argv)
+{
+ char **p;
+ size_t len = 0;
+ char *buf;
+ char *src, *dst;
+
+ p = argv;
+ if (*p == NULL)
+ return 0;
+
+ while (*p)
+ len += strlen(*p++) + 1;
+
+ buf = (char *)malloc(len);
+ if (buf == NULL)
+ error("%s: malloc", __func__);
+
+ p = argv;
+ dst = buf;
+ while ((src = *p++) != NULL) {
+ while ((*dst++ = *src++) != '\0')
+ ;
+ dst[-1] = ' ';
+ }
+ dst[-1] = '\0';
+
+ return buf;
+}
+
+/*
+ * On Windows, we need to open the file in binary mode, so that
+ * we get all the bytes specified by the size we get from "fstat()".
+ * On UNIX, that's not necessary. O_BINARY is defined on Windows;
+ * we define it as 0 if it's not defined, so it does nothing.
+ */
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+static char *
+read_infile(char *fname)
+{
+ int i, fd;
+ ssize_t cc;
+ char *cp;
+ our_statb buf;
+
+ fd = open(fname, O_RDONLY|O_BINARY);
+ if (fd < 0)
+ error("can't open %s: %s", fname, pcap_strerror(errno));
+
+ if (our_fstat(fd, &buf) < 0)
+ error("can't stat %s: %s", fname, pcap_strerror(errno));
+
+ /*
+ * Reject files whose size doesn't fit into an int; a filter
+ * *that* large will probably be too big.
+ */
+ if (buf.st_size > INT_MAX)
+ error("%s is too large", fname);
+
+ cp = malloc((u_int)buf.st_size + 1);
+ if (cp == NULL)
+ error("malloc(%d) for %s: %s", (u_int)buf.st_size + 1,
+ fname, pcap_strerror(errno));
+ cc = read(fd, cp, (u_int)buf.st_size);
+ if (cc < 0)
+ error("read %s: %s", fname, pcap_strerror(errno));
+ if (cc != buf.st_size)
+ error("short read %s (%d != %d)", fname, (int) cc,
+ (int)buf.st_size);
+
+ close(fd);
+ /* replace "# comment" with spaces */
+ for (i = 0; i < cc; i++) {
+ if (cp[i] == '#')
+ while (i < cc && cp[i] != '\n')
+ cp[i++] = ' ';
+ }
+ cp[cc] = '\0';
+ return (cp);
+}
+
+#ifdef HAVE_PCAP_FINDALLDEVS
+static long
+parse_interface_number(const char *device)
+{
+ const char *p;
+ long devnum;
+ char *end;
+
+ /*
+ * Search for a colon, terminating any scheme at the beginning
+ * of the device.
+ */
+ p = strchr(device, ':');
+ if (p != NULL) {
+ /*
+ * We found it. Is it followed by "//"?
+ */
+ p++; /* skip the : */
+ if (strncmp(p, "//", 2) == 0) {
+ /*
+ * Yes. Search for the next /, at the end of the
+ * authority part of the URL.
+ */
+ p += 2; /* skip the // */
+ p = strchr(p, '/');
+ if (p != NULL) {
+ /*
+ * OK, past the / is the path.
+ */
+ device = p + 1;
+ }
+ }
+ }
+ devnum = strtol(device, &end, 10);
+ if (device != end && *end == '\0') {
+ /*
+ * It's all-numeric, but is it a valid number?
+ */
+ if (devnum <= 0) {
+ /*
+ * No, it's not an ordinal.
+ */
+ error("Invalid adapter index");
+ }
+ return (devnum);
+ } else {
+ /*
+ * It's not all-numeric; return -1, so our caller
+ * knows that.
+ */
+ return (-1);
+ }
+}
+
+static char *
+find_interface_by_number(const char *url
+#ifndef HAVE_PCAP_FINDALLDEVS_EX
+_U_
+#endif
+, long devnum)
+{
+ pcap_if_t *dev, *devlist;
+ long i;
+ char ebuf[PCAP_ERRBUF_SIZE];
+ char *device;
+#ifdef HAVE_PCAP_FINDALLDEVS_EX
+ const char *endp;
+ char *host_url;
+#endif
+ int status;
+
+#ifdef HAVE_PCAP_FINDALLDEVS_EX
+ /*
+ * Search for a colon, terminating any scheme at the beginning
+ * of the URL.
+ */
+ endp = strchr(url, ':');
+ if (endp != NULL) {
+ /*
+ * We found it. Is it followed by "//"?
+ */
+ endp++; /* skip the : */
+ if (strncmp(endp, "//", 2) == 0) {
+ /*
+ * Yes. Search for the next /, at the end of the
+ * authority part of the URL.
+ */
+ endp += 2; /* skip the // */
+ endp = strchr(endp, '/');
+ } else
+ endp = NULL;
+ }
+ if (endp != NULL) {
+ /*
+ * OK, everything from device to endp is a URL to hand
+ * to pcap_findalldevs_ex().
+ */
+ endp++; /* Include the trailing / in the URL; pcap_findalldevs_ex() requires it */
+ host_url = malloc(endp - url + 1);
+ if (host_url == NULL && (endp - url + 1) > 0)
+ error("Invalid allocation for host");
+
+ memcpy(host_url, url, endp - url);
+ host_url[endp - url] = '\0';
+ status = pcap_findalldevs_ex(host_url, NULL, &devlist, ebuf);
+ free(host_url);
+ } else
+#endif
+ status = pcap_findalldevs(&devlist, ebuf);
+ if (status < 0)
+ error("%s", ebuf);
+ /*
+ * Look for the devnum-th entry in the list of devices (1-based).
+ */
+ for (i = 0, dev = devlist; i < devnum-1 && dev != NULL;
+ i++, dev = dev->next)
+ ;
+ if (dev == NULL)
+ error("Invalid adapter index");
+ device = strdup(dev->name);
+ pcap_freealldevs(devlist);
+ return (device);
+}
+#endif
+
+#ifdef HAVE_PCAP_OPEN
+/*
+ * Prefixes for rpcap URLs.
+ */
+static char rpcap_prefix[] = "rpcap://";
+static char rpcap_ssl_prefix[] = "rpcaps://";
+#endif
+
+static pcap_t *
+open_interface(const char *device, netdissect_options *ndo, char *ebuf)
+{
+ pcap_t *pc;
+#ifdef HAVE_PCAP_CREATE
+ int status;
+ char *cp;
+#endif
+
+#ifdef HAVE_PCAP_OPEN
+ /*
+ * Is this an rpcap URL?
+ */
+ if (strncmp(device, rpcap_prefix, sizeof(rpcap_prefix) - 1) == 0 ||
+ strncmp(device, rpcap_ssl_prefix, sizeof(rpcap_ssl_prefix) - 1) == 0) {
+ /*
+ * Yes. Open it with pcap_open().
+ */
+ *ebuf = '\0';
+ pc = pcap_open(device, ndo->ndo_snaplen,
+ pflag ? 0 : PCAP_OPENFLAG_PROMISCUOUS, timeout, NULL,
+ ebuf);
+ if (pc == NULL) {
+ /*
+ * If this failed with "No such device" or "The system
+ * cannot find the device specified", that means
+ * the interface doesn't exist; return NULL, so that
+ * the caller can see whether the device name is
+ * actually an interface index.
+ */
+ if (strstr(ebuf, "No such device") != NULL ||
+ strstr(ebuf, "The system cannot find the device specified") != NULL)
+ return (NULL);
+ error("%s", ebuf);
+ }
+ if (*ebuf)
+ warning("%s", ebuf);
+ return (pc);
+ }
+#endif /* HAVE_PCAP_OPEN */
+
+#ifdef HAVE_PCAP_CREATE
+ pc = pcap_create(device, ebuf);
+ if (pc == NULL) {
+ /*
+ * If this failed with "No such device", that means
+ * the interface doesn't exist; return NULL, so that
+ * the caller can see whether the device name is
+ * actually an interface index.
+ */
+ if (strstr(ebuf, "No such device") != NULL)
+ return (NULL);
+ error("%s", ebuf);
+ }
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+ if (Jflag)
+ show_tstamp_types_and_exit(pc, device);
+#endif
+#ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
+ status = pcap_set_tstamp_precision(pc, ndo->ndo_tstamp_precision);
+ if (status != 0)
+ error("%s: Can't set %ssecond time stamp precision: %s",
+ device,
+ tstamp_precision_to_string(ndo->ndo_tstamp_precision),
+ pcap_statustostr(status));
+#endif
+
+#ifdef HAVE_PCAP_SET_IMMEDIATE_MODE
+ if (immediate_mode) {
+ status = pcap_set_immediate_mode(pc, 1);
+ if (status != 0)
+ error("%s: Can't set immediate mode: %s",
+ device, pcap_statustostr(status));
+ }
+#endif
+ /*
+ * Is this an interface that supports monitor mode?
+ */
+ if (pcap_can_set_rfmon(pc) == 1)
+ supports_monitor_mode = 1;
+ else
+ supports_monitor_mode = 0;
+ if (ndo->ndo_snaplen != 0) {
+ /*
+ * A snapshot length was explicitly specified;
+ * use it.
+ */
+ status = pcap_set_snaplen(pc, ndo->ndo_snaplen);
+ if (status != 0)
+ error("%s: Can't set snapshot length: %s",
+ device, pcap_statustostr(status));
+ }
+ status = pcap_set_promisc(pc, !pflag);
+ if (status != 0)
+ error("%s: Can't set promiscuous mode: %s",
+ device, pcap_statustostr(status));
+ if (Iflag) {
+ status = pcap_set_rfmon(pc, 1);
+ if (status != 0)
+ error("%s: Can't set monitor mode: %s",
+ device, pcap_statustostr(status));
+ }
+ status = pcap_set_timeout(pc, timeout);
+ if (status != 0)
+ error("%s: pcap_set_timeout failed: %s",
+ device, pcap_statustostr(status));
+ if (Bflag != 0) {
+ status = pcap_set_buffer_size(pc, Bflag);
+ if (status != 0)
+ error("%s: Can't set buffer size: %s",
+ device, pcap_statustostr(status));
+ }
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+ if (jflag != -1) {
+ status = pcap_set_tstamp_type(pc, jflag);
+ if (status < 0)
+ error("%s: Can't set time stamp type: %s",
+ device, pcap_statustostr(status));
+ else if (status > 0)
+ warning("When trying to set timestamp type '%s' on %s: %s",
+ pcap_tstamp_type_val_to_name(jflag), device,
+ pcap_statustostr(status));
+ }
+#endif
+ status = pcap_activate(pc);
+ if (status < 0) {
+ /*
+ * pcap_activate() failed.
+ */
+ cp = pcap_geterr(pc);
+ if (status == PCAP_ERROR)
+ error("%s", cp);
+ else if (status == PCAP_ERROR_NO_SUCH_DEVICE) {
+ /*
+ * Return an error for our caller to handle.
+ */
+ snprintf(ebuf, PCAP_ERRBUF_SIZE, "%s: %s\n(%s)",
+ device, pcap_statustostr(status), cp);
+ } else if (status == PCAP_ERROR_PERM_DENIED && *cp != '\0')
+ error("%s: %s\n(%s)", device,
+ pcap_statustostr(status), cp);
+#ifdef __FreeBSD__
+ else if (status == PCAP_ERROR_RFMON_NOTSUP &&
+ strncmp(device, "wlan", 4) == 0) {
+ char parent[8], newdev[8];
+ char sysctl[32];
+ size_t s = sizeof(parent);
+
+ snprintf(sysctl, sizeof(sysctl),
+ "net.wlan.%d.%%parent", atoi(device + 4));
+ sysctlbyname(sysctl, parent, &s, NULL, 0);
+ strlcpy(newdev, device, sizeof(newdev));
+ /* Suggest a new wlan device. */
+ /* FIXME: incrementing the index this way is not going to work well
+ * when the index is 9 or greater but the only consequence in this
+ * specific case would be an error message that looks a bit odd.
+ */
+ newdev[strlen(newdev)-1]++;
+ error("%s is not a monitor mode VAP\n"
+ "To create a new monitor mode VAP use:\n"
+ " ifconfig %s create wlandev %s wlanmode monitor\n"
+ "and use %s as the tcpdump interface",
+ device, newdev, parent, newdev);
+ }
+#endif
+ else
+ error("%s: %s", device,
+ pcap_statustostr(status));
+ pcap_close(pc);
+ return (NULL);
+ } else if (status > 0) {
+ /*
+ * pcap_activate() succeeded, but it's warning us
+ * of a problem it had.
+ */
+ cp = pcap_geterr(pc);
+ if (status == PCAP_WARNING)
+ warning("%s", cp);
+ else if (status == PCAP_WARNING_PROMISC_NOTSUP &&
+ *cp != '\0')
+ warning("%s: %s\n(%s)", device,
+ pcap_statustostr(status), cp);
+ else
+ warning("%s: %s", device,
+ pcap_statustostr(status));
+ }
+#ifdef HAVE_PCAP_SETDIRECTION
+ if (Qflag != -1) {
+ status = pcap_setdirection(pc, Qflag);
+ if (status != 0)
+ error("%s: pcap_setdirection() failed: %s",
+ device, pcap_geterr(pc));
+ }
+#endif /* HAVE_PCAP_SETDIRECTION */
+#else /* HAVE_PCAP_CREATE */
+ *ebuf = '\0';
+ /*
+ * If no snapshot length was specified, or a length of 0 was
+ * specified, default to 256KB.
+ */
+ if (ndo->ndo_snaplen == 0)
+ ndo->ndo_snaplen = MAXIMUM_SNAPLEN;
+ pc = pcap_open_live(device, ndo->ndo_snaplen, !pflag, timeout, ebuf);
+ if (pc == NULL) {
+ /*
+ * If this failed with "No such device", that means
+ * the interface doesn't exist; return NULL, so that
+ * the caller can see whether the device name is
+ * actually an interface index.
+ */
+ if (strstr(ebuf, "No such device") != NULL)
+ return (NULL);
+ error("%s", ebuf);
+ }
+ if (*ebuf)
+ warning("%s", ebuf);
+#endif /* HAVE_PCAP_CREATE */
+
+ return (pc);
+}
+
+int
+main(int argc, char **argv)
+{
+ int cnt, op, i;
+ bpf_u_int32 localnet = 0, netmask = 0;
+ char *cp, *infile, *cmdbuf, *device, *RFileName, *VFileName, *WFileName;
+ char *endp;
+ pcap_handler callback;
+ int dlt;
+ const char *dlt_name;
+ struct bpf_program fcode;
+#ifndef _WIN32
+ void (*oldhandler)(int);
+#endif
+ struct dump_info dumpinfo;
+ u_char *pcap_userdata;
+ char ebuf[PCAP_ERRBUF_SIZE];
+ char VFileLine[PATH_MAX + 1];
+ const char *username = NULL;
+#ifndef _WIN32
+ const char *chroot_dir = NULL;
+#endif
+ char *ret = NULL;
+ char *end;
+#ifdef HAVE_PCAP_FINDALLDEVS
+ pcap_if_t *devlist;
+ long devnum;
+#endif
+ int status;
+ FILE *VFile;
+#ifdef HAVE_CAPSICUM
+ cap_rights_t rights;
+ int cansandbox;
+#endif /* HAVE_CAPSICUM */
+ int Oflag = 1; /* run filter code optimizer */
+ int yflag_dlt = -1;
+ const char *yflag_dlt_name = NULL;
+ int print = 0;
+
+ netdissect_options Ndo;
+ netdissect_options *ndo = &Ndo;
+
+ /*
+ * Initialize the netdissect code.
+ */
+ if (nd_init(ebuf, sizeof(ebuf)) == -1)
+ error("%s", ebuf);
+
+ memset(ndo, 0, sizeof(*ndo));
+ ndo_set_function_pointers(ndo);
+
+ cnt = -1;
+ device = NULL;
+ infile = NULL;
+ RFileName = NULL;
+ VFileName = NULL;
+ VFile = NULL;
+ WFileName = NULL;
+ dlt = -1;
+ if ((cp = strrchr(argv[0], PATH_SEPARATOR)) != NULL)
+ ndo->program_name = program_name = cp + 1;
+ else
+ ndo->program_name = program_name = argv[0];
+
+#if defined(HAVE_PCAP_WSOCKINIT)
+ if (pcap_wsockinit() != 0)
+ error("Attempting to initialize Winsock failed");
+#elif defined(HAVE_WSOCKINIT)
+ if (wsockinit() != 0)
+ error("Attempting to initialize Winsock failed");
+#endif
+
+ /*
+ * On platforms where the CPU doesn't support unaligned loads,
+ * force unaligned accesses to abort with SIGBUS, rather than
+ * being fixed up (slowly) by the OS kernel; on those platforms,
+ * misaligned accesses are bugs, and we want tcpdump to crash so
+ * that the bugs are reported.
+ */
+ if (abort_on_misalignment(ebuf, sizeof(ebuf)) < 0)
+ error("%s", ebuf);
+
+ while (
+ (op = getopt_long(argc, argv, SHORTOPTS, longopts, NULL)) != -1)
+ switch (op) {
+
+ case 'a':
+ /* compatibility for old -a */
+ break;
+
+ case 'A':
+ ++ndo->ndo_Aflag;
+ break;
+
+ case 'b':
+ ++ndo->ndo_bflag;
+ break;
+
+#if defined(HAVE_PCAP_CREATE) || defined(_WIN32)
+ case 'B':
+ Bflag = atoi(optarg)*1024;
+ if (Bflag <= 0)
+ error("invalid packet buffer size %s", optarg);
+ break;
+#endif /* defined(HAVE_PCAP_CREATE) || defined(_WIN32) */
+
+ case 'c':
+ cnt = atoi(optarg);
+ if (cnt <= 0)
+ error("invalid packet count %s", optarg);
+ break;
+
+ case 'C':
+ errno = 0;
+#ifdef HAVE_PCAP_DUMP_FTELL64
+ Cflag = strtoint64_t(optarg, &endp, 10);
+#else
+ Cflag = strtol(optarg, &endp, 10);
+#endif
+ if (endp == optarg || *endp != '\0' || errno != 0
+ || Cflag <= 0)
+ error("invalid file size %s", optarg);
+ /*
+ * Will multiplying it by 1000000 overflow?
+ */
+#ifdef HAVE_PCAP_DUMP_FTELL64
+ if (Cflag > INT64_T_CONSTANT(0x7fffffffffffffff) / 1000000)
+#else
+ if (Cflag > LONG_MAX / 1000000)
+#endif
+ error("file size %s is too large", optarg);
+ Cflag *= 1000000;
+ break;
+
+ case 'd':
+ ++dflag;
+ break;
+
+#ifdef HAVE_PCAP_FINDALLDEVS
+ case 'D':
+ Dflag++;
+ break;
+#endif
+
+#ifdef HAVE_PCAP_FINDALLDEVS_EX
+ case OPTION_LIST_REMOTE_INTERFACES:
+ remote_interfaces_source = optarg;
+ break;
+#endif
+
+ case 'L':
+ Lflag++;
+ break;
+
+ case 'e':
+ ++ndo->ndo_eflag;
+ break;
+
+ case 'E':
+#ifndef HAVE_LIBCRYPTO
+ warning("crypto code not compiled in");
+#endif
+ ndo->ndo_espsecret = optarg;
+ break;
+
+ case 'f':
+ ++ndo->ndo_fflag;
+ break;
+
+ case 'F':
+ infile = optarg;
+ break;
+
+ case 'G':
+ Gflag = atoi(optarg);
+ if (Gflag < 0)
+ error("invalid number of seconds %s", optarg);
+
+ /* We will create one file initially. */
+ Gflag_count = 0;
+
+ /* Grab the current time for rotation use. */
+ if ((Gflag_time = time(NULL)) == (time_t)-1) {
+ error("%s: can't get current time: %s",
+ __func__, pcap_strerror(errno));
+ }
+ break;
+
+ case 'h':
+ print_usage(stdout);
+ exit_tcpdump(S_SUCCESS);
+ break;
+
+ case 'H':
+ ++ndo->ndo_Hflag;
+ break;
+
+ case 'i':
+ device = optarg;
+ break;
+
+#ifdef HAVE_PCAP_CREATE
+ case 'I':
+ ++Iflag;
+ break;
+#endif /* HAVE_PCAP_CREATE */
+
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+ case 'j':
+ jflag = pcap_tstamp_type_name_to_val(optarg);
+ if (jflag < 0)
+ error("invalid time stamp type %s", optarg);
+ break;
+
+ case 'J':
+ Jflag++;
+ break;
+#endif
+
+ case 'l':
+#ifdef _WIN32
+ /*
+ * _IOLBF is the same as _IOFBF in Microsoft's C
+ * libraries; the only alternative they offer
+ * is _IONBF.
+ *
+ * XXX - this should really be checking for MSVC++,
+ * not _WIN32, if, for example, MinGW has its own
+ * C library that is more UNIX-compatible.
+ */
+ setvbuf(stdout, NULL, _IONBF, 0);
+#else /* _WIN32 */
+#ifdef HAVE_SETLINEBUF
+ setlinebuf(stdout);
+#else
+ setvbuf(stdout, NULL, _IOLBF, 0);
+#endif
+#endif /* _WIN32 */
+ lflag = 1;
+ break;
+
+ case 'K':
+ ++ndo->ndo_Kflag;
+ break;
+
+ case 'm':
+ if (nd_have_smi_support()) {
+ if (nd_load_smi_module(optarg, ebuf, sizeof(ebuf)) == -1)
+ error("%s", ebuf);
+ } else {
+ (void)fprintf(stderr, "%s: ignoring option `-m %s' ",
+ program_name, optarg);
+ (void)fprintf(stderr, "(no libsmi support)\n");
+ }
+ break;
+
+ case 'M':
+ /* TCP-MD5 shared secret */
+#ifndef HAVE_LIBCRYPTO
+ warning("crypto code not compiled in");
+#endif
+ ndo->ndo_sigsecret = optarg;
+ break;
+
+ case 'n':
+ ++ndo->ndo_nflag;
+ break;
+
+ case 'N':
+ ++ndo->ndo_Nflag;
+ break;
+
+ case 'O':
+ Oflag = 0;
+ break;
+
+ case 'p':
+ ++pflag;
+ break;
+
+ case 'q':
+ ++ndo->ndo_qflag;
+ ++ndo->ndo_suppress_default_print;
+ break;
+
+#ifdef HAVE_PCAP_SETDIRECTION
+ case 'Q':
+ if (ascii_strcasecmp(optarg, "in") == 0)
+ Qflag = PCAP_D_IN;
+ else if (ascii_strcasecmp(optarg, "out") == 0)
+ Qflag = PCAP_D_OUT;
+ else if (ascii_strcasecmp(optarg, "inout") == 0)
+ Qflag = PCAP_D_INOUT;
+ else
+ error("unknown capture direction `%s'", optarg);
+ break;
+#endif /* HAVE_PCAP_SETDIRECTION */
+
+ case 'r':
+ RFileName = optarg;
+ break;
+
+ case 's':
+ ndo->ndo_snaplen = (int)strtol(optarg, &end, 0);
+ if (optarg == end || *end != '\0'
+ || ndo->ndo_snaplen < 0 || ndo->ndo_snaplen > MAXIMUM_SNAPLEN)
+ error("invalid snaplen %s (must be >= 0 and <= %d)",
+ optarg, MAXIMUM_SNAPLEN);
+ break;
+
+ case 'S':
+ ++ndo->ndo_Sflag;
+ break;
+
+ case 't':
+ ++ndo->ndo_tflag;
+ break;
+
+ case 'T':
+ if (ascii_strcasecmp(optarg, "vat") == 0)
+ ndo->ndo_packettype = PT_VAT;
+ else if (ascii_strcasecmp(optarg, "wb") == 0)
+ ndo->ndo_packettype = PT_WB;
+ else if (ascii_strcasecmp(optarg, "rpc") == 0)
+ ndo->ndo_packettype = PT_RPC;
+ else if (ascii_strcasecmp(optarg, "rtp") == 0)
+ ndo->ndo_packettype = PT_RTP;
+ else if (ascii_strcasecmp(optarg, "rtcp") == 0)
+ ndo->ndo_packettype = PT_RTCP;
+ else if (ascii_strcasecmp(optarg, "snmp") == 0)
+ ndo->ndo_packettype = PT_SNMP;
+ else if (ascii_strcasecmp(optarg, "cnfp") == 0)
+ ndo->ndo_packettype = PT_CNFP;
+ else if (ascii_strcasecmp(optarg, "tftp") == 0)
+ ndo->ndo_packettype = PT_TFTP;
+ else if (ascii_strcasecmp(optarg, "aodv") == 0)
+ ndo->ndo_packettype = PT_AODV;
+ else if (ascii_strcasecmp(optarg, "carp") == 0)
+ ndo->ndo_packettype = PT_CARP;
+ else if (ascii_strcasecmp(optarg, "radius") == 0)
+ ndo->ndo_packettype = PT_RADIUS;
+ else if (ascii_strcasecmp(optarg, "zmtp1") == 0)
+ ndo->ndo_packettype = PT_ZMTP1;
+ else if (ascii_strcasecmp(optarg, "vxlan") == 0)
+ ndo->ndo_packettype = PT_VXLAN;
+ else if (ascii_strcasecmp(optarg, "pgm") == 0)
+ ndo->ndo_packettype = PT_PGM;
+ else if (ascii_strcasecmp(optarg, "pgm_zmtp1") == 0)
+ ndo->ndo_packettype = PT_PGM_ZMTP1;
+ else if (ascii_strcasecmp(optarg, "lmp") == 0)
+ ndo->ndo_packettype = PT_LMP;
+ else if (ascii_strcasecmp(optarg, "resp") == 0)
+ ndo->ndo_packettype = PT_RESP;
+ else if (ascii_strcasecmp(optarg, "ptp") == 0)
+ ndo->ndo_packettype = PT_PTP;
+ else if (ascii_strcasecmp(optarg, "someip") == 0)
+ ndo->ndo_packettype = PT_SOMEIP;
+ else if (ascii_strcasecmp(optarg, "domain") == 0)
+ ndo->ndo_packettype = PT_DOMAIN;
+ else
+ error("unknown packet type `%s'", optarg);
+ break;
+
+ case 'u':
+ ++ndo->ndo_uflag;
+ break;
+
+#ifdef HAVE_PCAP_DUMP_FLUSH
+ case 'U':
+ ++Uflag;
+ break;
+#endif
+
+ case 'v':
+ ++ndo->ndo_vflag;
+ break;
+
+ case 'V':
+ VFileName = optarg;
+ break;
+
+ case 'w':
+ WFileName = optarg;
+ break;
+
+ case 'W':
+ Wflag = atoi(optarg);
+ if (Wflag <= 0)
+ error("invalid number of output files %s", optarg);
+ WflagChars = getWflagChars(Wflag);
+ break;
+
+ case 'x':
+ ++ndo->ndo_xflag;
+ ++ndo->ndo_suppress_default_print;
+ break;
+
+ case 'X':
+ ++ndo->ndo_Xflag;
+ ++ndo->ndo_suppress_default_print;
+ break;
+
+ case 'y':
+ yflag_dlt_name = optarg;
+ yflag_dlt =
+ pcap_datalink_name_to_val(yflag_dlt_name);
+ if (yflag_dlt < 0)
+ error("invalid data link type %s", yflag_dlt_name);
+ break;
+
+#ifdef HAVE_PCAP_SET_PARSER_DEBUG
+ case 'Y':
+ {
+ /* Undocumented flag */
+ pcap_set_parser_debug(1);
+ }
+ break;
+#endif
+ case 'z':
+ zflag = optarg;
+ break;
+
+ case 'Z':
+ username = optarg;
+ break;
+
+ case '#':
+ ndo->ndo_packet_number = 1;
+ break;
+
+ case OPTION_VERSION:
+ print_version(stdout);
+ exit_tcpdump(S_SUCCESS);
+ break;
+
+#ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
+ case OPTION_TSTAMP_PRECISION:
+ ndo->ndo_tstamp_precision = tstamp_precision_from_string(optarg);
+ if (ndo->ndo_tstamp_precision < 0)
+ error("unsupported time stamp precision");
+ break;
+#endif
+
+#ifdef HAVE_PCAP_SET_IMMEDIATE_MODE
+ case OPTION_IMMEDIATE_MODE:
+ immediate_mode = 1;
+ break;
+#endif
+
+ case OPTION_PRINT:
+ print = 1;
+ break;
+
+#ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
+ case OPTION_TSTAMP_MICRO:
+ ndo->ndo_tstamp_precision = PCAP_TSTAMP_PRECISION_MICRO;
+ break;
+
+ case OPTION_TSTAMP_NANO:
+ ndo->ndo_tstamp_precision = PCAP_TSTAMP_PRECISION_NANO;
+ break;
+#endif
+
+ case OPTION_FP_TYPE:
+ /*
+ * Print out the type of floating-point arithmetic
+ * we're doing; it's probably IEEE, unless somebody
+ * tries to run this on a VAX, but the precision
+ * may differ (e.g., it might be 32-bit, 64-bit,
+ * or 80-bit).
+ */
+ float_type_check(0x4e93312d);
+ return 0;
+
+ case OPTION_COUNT:
+ count_mode = 1;
+ break;
+
+ default:
+ print_usage(stderr);
+ exit_tcpdump(S_ERR_HOST_PROGRAM);
+ /* NOTREACHED */
+ }
+
+#ifdef HAVE_PCAP_FINDALLDEVS
+ if (Dflag)
+ show_devices_and_exit();
+#endif
+#ifdef HAVE_PCAP_FINDALLDEVS_EX
+ if (remote_interfaces_source != NULL)
+ show_remote_devices_and_exit();
+#endif
+
+#if defined(DLT_LINUX_SLL2) && defined(HAVE_PCAP_SET_DATALINK)
+/* Set default linktype DLT_LINUX_SLL2 when capturing on the "any" device */
+ if (device != NULL &&
+ strncmp (device, "any", strlen("any")) == 0
+ && yflag_dlt == -1)
+ yflag_dlt = DLT_LINUX_SLL2;
+#endif
+
+ switch (ndo->ndo_tflag) {
+
+ case 0: /* Default */
+ case 1: /* No time stamp */
+ case 2: /* Unix timeval style */
+ case 3: /* Microseconds/nanoseconds since previous packet */
+ case 4: /* Date + Default */
+ case 5: /* Microseconds/nanoseconds since first packet */
+ break;
+
+ default: /* Not supported */
+ error("only -t, -tt, -ttt, -tttt and -ttttt are supported");
+ break;
+ }
+
+ if (ndo->ndo_fflag != 0 && (VFileName != NULL || RFileName != NULL))
+ error("-f can not be used with -V or -r");
+
+ if (VFileName != NULL && RFileName != NULL)
+ error("-V and -r are mutually exclusive.");
+
+ /*
+ * If we're printing dissected packets to the standard output,
+ * and either the standard output is a terminal or we're doing
+ * "line" buffering, set the capture timeout to .1 second rather
+ * than 1 second, as the user's probably expecting to see packets
+ * pop up immediately shortly after they arrive.
+ *
+ * XXX - would there be some value appropriate for all cases,
+ * based on, say, the buffer size and packet input rate?
+ */
+ if ((WFileName == NULL || print) && (isatty(1) || lflag))
+ timeout = 100;
+
+#ifdef WITH_CHROOT
+ /* if run as root, prepare for chrooting */
+ if (getuid() == 0 || geteuid() == 0) {
+ /* future extensibility for cmd-line arguments */
+ if (!chroot_dir)
+ chroot_dir = WITH_CHROOT;
+ }
+#endif
+
+#ifdef WITH_USER
+ /* if run as root, prepare for dropping root privileges */
+ if (getuid() == 0 || geteuid() == 0) {
+ /* Run with '-Z root' to restore old behaviour */
+ if (!username)
+ username = WITH_USER;
+ }
+#endif
+
+ if (RFileName != NULL || VFileName != NULL) {
+ /*
+ * If RFileName is non-null, it's the pathname of a
+ * savefile to read. If VFileName is non-null, it's
+ * the pathname of a file containing a list of pathnames
+ * (one per line) of savefiles to read.
+ *
+ * In either case, we're reading a savefile, not doing
+ * a live capture.
+ */
+#ifndef _WIN32
+ /*
+ * We don't need network access, so relinquish any set-UID
+ * or set-GID privileges we have (if any).
+ *
+ * We do *not* want set-UID privileges when opening a
+ * trace file, as that might let the user read other
+ * people's trace files (especially if we're set-UID
+ * root).
+ */
+ if (setgid(getgid()) != 0 || setuid(getuid()) != 0 )
+ fprintf(stderr, "Warning: setgid/setuid failed !\n");
+#endif /* _WIN32 */
+ if (VFileName != NULL) {
+ if (VFileName[0] == '-' && VFileName[1] == '\0')
+ VFile = stdin;
+ else
+ VFile = fopen(VFileName, "r");
+
+ if (VFile == NULL)
+ error("Unable to open file: %s\n", pcap_strerror(errno));
+
+ ret = get_next_file(VFile, VFileLine);
+ if (!ret)
+ error("Nothing in %s\n", VFileName);
+ RFileName = VFileLine;
+ }
+
+#ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
+ pd = pcap_open_offline_with_tstamp_precision(RFileName,
+ ndo->ndo_tstamp_precision, ebuf);
+#else
+ pd = pcap_open_offline(RFileName, ebuf);
+#endif
+
+ if (pd == NULL)
+ error("%s", ebuf);
+#ifdef HAVE_CAPSICUM
+ cap_rights_init(&rights, CAP_READ);
+ if (cap_rights_limit(fileno(pcap_file(pd)), &rights) < 0 &&
+ errno != ENOSYS) {
+ error("unable to limit pcap descriptor");
+ }
+#endif
+ dlt = pcap_datalink(pd);
+ dlt_name = pcap_datalink_val_to_name(dlt);
+ fprintf(stderr, "reading from file %s", RFileName);
+ if (dlt_name == NULL) {
+ fprintf(stderr, ", link-type %u", dlt);
+ } else {
+ fprintf(stderr, ", link-type %s (%s)", dlt_name,
+ pcap_datalink_val_to_description(dlt));
+ }
+ fprintf(stderr, ", snapshot length %d\n", pcap_snapshot(pd));
+#ifdef DLT_LINUX_SLL2
+ if (dlt == DLT_LINUX_SLL2)
+ fprintf(stderr, "Warning: interface names might be incorrect\n");
+#endif
+ } else if (dflag && !device) {
+ int dump_dlt = DLT_EN10MB;
+ /*
+ * We're dumping the compiled code without an explicit
+ * device specification. (If a device is specified, we
+ * definitely want to open it to use the DLT of that device.)
+ * Either default to DLT_EN10MB with a warning, or use
+ * the user-specified value if supplied.
+ */
+ /*
+ * If no snapshot length was specified, or a length of 0 was
+ * specified, default to 256KB.
+ */
+ if (ndo->ndo_snaplen == 0)
+ ndo->ndo_snaplen = MAXIMUM_SNAPLEN;
+ /*
+ * If a DLT was specified with the -y flag, use that instead.
+ */
+ if (yflag_dlt != -1)
+ dump_dlt = yflag_dlt;
+ else
+ fprintf(stderr, "Warning: assuming Ethernet\n");
+ pd = pcap_open_dead(dump_dlt, ndo->ndo_snaplen);
+ } else {
+ /*
+ * We're doing a live capture.
+ */
+ if (device == NULL) {
+ /*
+ * No interface was specified. Pick one.
+ */
+#ifdef HAVE_PCAP_FINDALLDEVS
+ /*
+ * Find the list of interfaces, and pick
+ * the first interface.
+ */
+ if (pcap_findalldevs(&devlist, ebuf) == -1)
+ error("%s", ebuf);
+ if (devlist == NULL)
+ error("no interfaces available for capture");
+ device = strdup(devlist->name);
+ pcap_freealldevs(devlist);
+#else /* HAVE_PCAP_FINDALLDEVS */
+ /*
+ * Use whatever interface pcap_lookupdev()
+ * chooses.
+ */
+ device = pcap_lookupdev(ebuf);
+ if (device == NULL)
+ error("%s", ebuf);
+#endif
+ }
+
+ /*
+ * Try to open the interface with the specified name.
+ */
+ pd = open_interface(device, ndo, ebuf);
+ if (pd == NULL) {
+ /*
+ * That failed. If we can get a list of
+ * interfaces, and the interface name
+ * is purely numeric, try to use it as
+ * a 1-based index in the list of
+ * interfaces.
+ */
+#ifdef HAVE_PCAP_FINDALLDEVS
+ devnum = parse_interface_number(device);
+ if (devnum == -1) {
+ /*
+ * It's not a number; just report
+ * the open error and fail.
+ */
+ error("%s", ebuf);
+ }
+
+ /*
+ * OK, it's a number; try to find the
+ * interface with that index, and try
+ * to open it.
+ *
+ * find_interface_by_number() exits if it
+ * couldn't be found.
+ */
+ device = find_interface_by_number(device, devnum);
+ pd = open_interface(device, ndo, ebuf);
+ if (pd == NULL)
+ error("%s", ebuf);
+#else /* HAVE_PCAP_FINDALLDEVS */
+ /*
+ * We can't get a list of interfaces; just
+ * fail.
+ */
+ error("%s", ebuf);
+#endif /* HAVE_PCAP_FINDALLDEVS */
+ }
+
+ /*
+ * Let user own process after capture device has
+ * been opened.
+ */
+#ifndef _WIN32
+ if (setgid(getgid()) != 0 || setuid(getuid()) != 0)
+ fprintf(stderr, "Warning: setgid/setuid failed !\n");
+#endif /* _WIN32 */
+#if !defined(HAVE_PCAP_CREATE) && defined(_WIN32)
+ if(Bflag != 0)
+ if(pcap_setbuff(pd, Bflag)==-1){
+ error("%s", pcap_geterr(pd));
+ }
+#endif /* !defined(HAVE_PCAP_CREATE) && defined(_WIN32) */
+ if (Lflag)
+ show_dlts_and_exit(pd, device);
+ if (yflag_dlt >= 0) {
+#ifdef HAVE_PCAP_SET_DATALINK
+ if (pcap_set_datalink(pd, yflag_dlt) < 0)
+ error("%s", pcap_geterr(pd));
+#else
+ /*
+ * We don't actually support changing the
+ * data link type, so we only let them
+ * set it to what it already is.
+ */
+ if (yflag_dlt != pcap_datalink(pd)) {
+ error("%s is not one of the DLTs supported by this device\n",
+ yflag_dlt_name);
+ }
+#endif
+ (void)fprintf(stderr, "%s: data link type %s\n",
+ program_name,
+ pcap_datalink_val_to_name(yflag_dlt));
+ (void)fflush(stderr);
+ }
+ i = pcap_snapshot(pd);
+ if (ndo->ndo_snaplen < i) {
+ if (ndo->ndo_snaplen != 0)
+ warning("snaplen raised from %d to %d", ndo->ndo_snaplen, i);
+ ndo->ndo_snaplen = i;
+ } else if (ndo->ndo_snaplen > i) {
+ warning("snaplen lowered from %d to %d", ndo->ndo_snaplen, i);
+ ndo->ndo_snaplen = i;
+ }
+ if(ndo->ndo_fflag != 0) {
+ if (pcap_lookupnet(device, &localnet, &netmask, ebuf) < 0) {
+ warning("foreign (-f) flag used but: %s", ebuf);
+ }
+ }
+
+ }
+ if (infile)
+ cmdbuf = read_infile(infile);
+ else
+ cmdbuf = copy_argv(&argv[optind]);
+
+#ifdef HAVE_PCAP_SET_OPTIMIZER_DEBUG
+ pcap_set_optimizer_debug(dflag);
+#endif
+ if (pcap_compile(pd, &fcode, cmdbuf, Oflag, netmask) < 0)
+ error("%s", pcap_geterr(pd));
+ if (dflag) {
+ bpf_dump(&fcode, dflag);
+ pcap_close(pd);
+ free(cmdbuf);
+ pcap_freecode(&fcode);
+ exit_tcpdump(S_SUCCESS);
+ }
+
+#ifdef HAVE_CASPER
+ if (!ndo->ndo_nflag)
+ capdns = capdns_setup();
+#endif /* HAVE_CASPER */
+
+ init_print(ndo, localnet, netmask);
+
+#ifndef _WIN32
+ (void)setsignal(SIGPIPE, cleanup);
+ (void)setsignal(SIGTERM, cleanup);
+#endif /* _WIN32 */
+ (void)setsignal(SIGINT, cleanup);
+#if defined(HAVE_FORK) || defined(HAVE_VFORK)
+ (void)setsignal(SIGCHLD, child_cleanup);
+#endif
+ /* Cooperate with nohup(1) */
+#ifndef _WIN32
+ if ((oldhandler = setsignal(SIGHUP, cleanup)) != SIG_DFL)
+ (void)setsignal(SIGHUP, oldhandler);
+#endif /* _WIN32 */
+
+#ifndef _WIN32
+ /*
+ * If a user name was specified with "-Z", attempt to switch to
+ * that user's UID. This would probably be used with sudo,
+ * to allow tcpdump to be run in a special restricted
+ * account (if you just want to allow users to open capture
+ * devices, and can't just give users that permission,
+ * you'd make tcpdump set-UID or set-GID).
+ *
+ * Tcpdump doesn't necessarily write only to one savefile;
+ * the general only way to allow a -Z instance to write to
+ * savefiles as the user under whose UID it's run, rather
+ * than as the user specified with -Z, would thus be to switch
+ * to the original user ID before opening a capture file and
+ * then switch back to the -Z user ID after opening the savefile.
+ * Switching to the -Z user ID only after opening the first
+ * savefile doesn't handle the general case.
+ */
+
+ if (getuid() == 0 || geteuid() == 0) {
+#ifdef HAVE_LIBCAP_NG
+ /* Initialize capng */
+ capng_clear(CAPNG_SELECT_BOTH);
+ if (username) {
+DIAG_OFF_ASSIGN_ENUM
+ capng_updatev(
+ CAPNG_ADD,
+ CAPNG_PERMITTED | CAPNG_EFFECTIVE,
+ CAP_SETUID,
+ CAP_SETGID,
+ -1);
+DIAG_ON_ASSIGN_ENUM
+ }
+ if (chroot_dir) {
+DIAG_OFF_ASSIGN_ENUM
+ capng_update(
+ CAPNG_ADD,
+ CAPNG_PERMITTED | CAPNG_EFFECTIVE,
+ CAP_SYS_CHROOT
+ );
+DIAG_ON_ASSIGN_ENUM
+ }
+
+ if (WFileName) {
+DIAG_OFF_ASSIGN_ENUM
+ capng_update(
+ CAPNG_ADD,
+ CAPNG_PERMITTED | CAPNG_EFFECTIVE,
+ CAP_DAC_OVERRIDE
+ );
+DIAG_ON_ASSIGN_ENUM
+ }
+ capng_apply(CAPNG_SELECT_BOTH);
+#endif /* HAVE_LIBCAP_NG */
+ if (username || chroot_dir)
+ droproot(username, chroot_dir);
+
+ }
+#endif /* _WIN32 */
+
+ if (pcap_setfilter(pd, &fcode) < 0)
+ error("%s", pcap_geterr(pd));
+#ifdef HAVE_CAPSICUM
+ if (RFileName == NULL && VFileName == NULL && pcap_fileno(pd) != -1) {
+ static const unsigned long cmds[] = { BIOCGSTATS, BIOCROTZBUF };
+
+ /*
+ * The various libpcap devices use a combination of
+ * read (bpf), ioctl (bpf, netmap), poll (netmap)
+ * so we add the relevant access rights.
+ */
+ cap_rights_init(&rights, CAP_IOCTL, CAP_READ, CAP_EVENT);
+ if (cap_rights_limit(pcap_fileno(pd), &rights) < 0 &&
+ errno != ENOSYS) {
+ error("unable to limit pcap descriptor");
+ }
+ if (cap_ioctls_limit(pcap_fileno(pd), cmds,
+ sizeof(cmds) / sizeof(cmds[0])) < 0 && errno != ENOSYS) {
+ error("unable to limit ioctls on pcap descriptor");
+ }
+ }
+#endif
+ if (WFileName) {
+ /* Do not exceed the default PATH_MAX for files. */
+ dumpinfo.CurrentFileName = (char *)malloc(PATH_MAX + 1);
+
+ if (dumpinfo.CurrentFileName == NULL)
+ error("malloc of dumpinfo.CurrentFileName");
+
+ /* We do not need numbering for dumpfiles if Cflag isn't set. */
+ if (Cflag != 0)
+ MakeFilename(dumpinfo.CurrentFileName, WFileName, 0, WflagChars);
+ else
+ MakeFilename(dumpinfo.CurrentFileName, WFileName, 0, 0);
+
+ pdd = pcap_dump_open(pd, dumpinfo.CurrentFileName);
+#ifdef HAVE_LIBCAP_NG
+ /* Give up CAP_DAC_OVERRIDE capability.
+ * Only allow it to be restored if the -C or -G flag have been
+ * set since we may need to create more files later on.
+ */
+ capng_update(
+ CAPNG_DROP,
+ (Cflag || Gflag ? 0 : CAPNG_PERMITTED)
+ | CAPNG_EFFECTIVE,
+ CAP_DAC_OVERRIDE
+ );
+ capng_apply(CAPNG_SELECT_BOTH);
+#endif /* HAVE_LIBCAP_NG */
+ if (pdd == NULL)
+ error("%s", pcap_geterr(pd));
+#ifdef HAVE_CAPSICUM
+ set_dumper_capsicum_rights(pdd);
+#endif
+ if (Cflag != 0 || Gflag != 0) {
+#ifdef HAVE_CAPSICUM
+ /*
+ * basename() and dirname() may modify their input buffer
+ * and they do since FreeBSD 12.0, but they didn't before.
+ * Hence use the return value only, but always assume the
+ * input buffer has been modified and would need to be
+ * reset before the next use.
+ */
+ char *WFileName_copy;
+
+ if ((WFileName_copy = strdup(WFileName)) == NULL) {
+ error("Unable to allocate memory for file %s",
+ WFileName);
+ }
+ DIAG_OFF_C11_EXTENSIONS
+ dumpinfo.WFileName = strdup(basename(WFileName_copy));
+ DIAG_ON_C11_EXTENSIONS
+ if (dumpinfo.WFileName == NULL) {
+ error("Unable to allocate memory for file %s",
+ WFileName);
+ }
+ free(WFileName_copy);
+
+ if ((WFileName_copy = strdup(WFileName)) == NULL) {
+ error("Unable to allocate memory for file %s",
+ WFileName);
+ }
+ DIAG_OFF_C11_EXTENSIONS
+ char *WFileName_dirname = dirname(WFileName_copy);
+ DIAG_ON_C11_EXTENSIONS
+ dumpinfo.dirfd = open(WFileName_dirname,
+ O_DIRECTORY | O_RDONLY);
+ if (dumpinfo.dirfd < 0) {
+ error("unable to open directory %s",
+ WFileName_dirname);
+ }
+ free(WFileName_dirname);
+ free(WFileName_copy);
+
+ cap_rights_init(&rights, CAP_CREATE, CAP_FCNTL,
+ CAP_FTRUNCATE, CAP_LOOKUP, CAP_SEEK, CAP_WRITE);
+ if (cap_rights_limit(dumpinfo.dirfd, &rights) < 0 &&
+ errno != ENOSYS) {
+ error("unable to limit directory rights");
+ }
+ if (cap_fcntls_limit(dumpinfo.dirfd, CAP_FCNTL_GETFL) < 0 &&
+ errno != ENOSYS) {
+ error("unable to limit dump descriptor fcntls");
+ }
+#else /* !HAVE_CAPSICUM */
+ dumpinfo.WFileName = WFileName;
+#endif
+ callback = dump_packet_and_trunc;
+ dumpinfo.pd = pd;
+ dumpinfo.pdd = pdd;
+ pcap_userdata = (u_char *)&dumpinfo;
+ } else {
+ callback = dump_packet;
+ dumpinfo.WFileName = WFileName;
+ dumpinfo.pd = pd;
+ dumpinfo.pdd = pdd;
+ pcap_userdata = (u_char *)&dumpinfo;
+ }
+ if (print) {
+ dlt = pcap_datalink(pd);
+ ndo->ndo_if_printer = get_if_printer(dlt);
+ dumpinfo.ndo = ndo;
+ } else
+ dumpinfo.ndo = NULL;
+
+#ifdef HAVE_PCAP_DUMP_FLUSH
+ if (Uflag)
+ pcap_dump_flush(pdd);
+#endif
+ } else {
+ dlt = pcap_datalink(pd);
+ ndo->ndo_if_printer = get_if_printer(dlt);
+ callback = print_packet;
+ pcap_userdata = (u_char *)ndo;
+ }
+
+#ifdef SIGNAL_REQ_INFO
+ /*
+ * We can't get statistics when reading from a file rather
+ * than capturing from a device.
+ */
+ if (RFileName == NULL)
+ (void)setsignal(SIGNAL_REQ_INFO, requestinfo);
+#endif
+#ifdef SIGNAL_FLUSH_PCAP
+ (void)setsignal(SIGNAL_FLUSH_PCAP, flushpcap);
+#endif
+
+ if (ndo->ndo_vflag > 0 && WFileName && RFileName == NULL && !print) {
+ /*
+ * When capturing to a file, if "--print" wasn't specified,
+ *"-v" means tcpdump should, once per second,
+ * "v"erbosely report the number of packets captured.
+ * Except when reading from a file, because -r, -w and -v
+ * together used to make a corner case, in which pcap_loop()
+ * errored due to EINTR (see GH #155 for details).
+ */
+#ifdef _WIN32
+ /*
+ * https://blogs.msdn.microsoft.com/oldnewthing/20151230-00/?p=92741
+ *
+ * suggests that this dates back to W2K.
+ *
+ * I don't know what a "long wait" is, but we'll assume
+ * that printing the stats could be a "long wait".
+ */
+ CreateTimerQueueTimer(&timer_handle, NULL,
+ verbose_stats_dump, NULL, 1000, 1000,
+ WT_EXECUTEDEFAULT|WT_EXECUTELONGFUNCTION);
+ setvbuf(stderr, NULL, _IONBF, 0);
+#else /* _WIN32 */
+ /*
+ * Assume this is UN*X, and that it has setitimer(); that
+ * dates back to UNIX 95.
+ */
+ struct itimerval timer;
+ (void)setsignal(SIGALRM, verbose_stats_dump);
+ timer.it_interval.tv_sec = 1;
+ timer.it_interval.tv_usec = 0;
+ timer.it_value.tv_sec = 1;
+ timer.it_value.tv_usec = 1;
+ setitimer(ITIMER_REAL, &timer, NULL);
+#endif /* _WIN32 */
+ }
+
+ if (RFileName == NULL) {
+ /*
+ * Live capture (if -V was specified, we set RFileName
+ * to a file from the -V file). Print a message to
+ * the standard error on UN*X.
+ */
+ if (!ndo->ndo_vflag && !WFileName) {
+ (void)fprintf(stderr,
+ "%s: verbose output suppressed, use -v[v]... for full protocol decode\n",
+ program_name);
+ } else
+ (void)fprintf(stderr, "%s: ", program_name);
+ dlt = pcap_datalink(pd);
+ dlt_name = pcap_datalink_val_to_name(dlt);
+ (void)fprintf(stderr, "listening on %s", device);
+ if (dlt_name == NULL) {
+ (void)fprintf(stderr, ", link-type %u", dlt);
+ } else {
+ (void)fprintf(stderr, ", link-type %s (%s)", dlt_name,
+ pcap_datalink_val_to_description(dlt));
+ }
+ (void)fprintf(stderr, ", snapshot length %d bytes\n", ndo->ndo_snaplen);
+ (void)fflush(stderr);
+ }
+
+#ifdef HAVE_CAPSICUM
+ cansandbox = (VFileName == NULL && zflag == NULL);
+#ifdef HAVE_CASPER
+ cansandbox = (cansandbox && (ndo->ndo_nflag || capdns != NULL));
+#else
+ cansandbox = (cansandbox && ndo->ndo_nflag);
+#endif /* HAVE_CASPER */
+ if (cansandbox && cap_enter() < 0 && errno != ENOSYS)
+ error("unable to enter the capability mode");
+#endif /* HAVE_CAPSICUM */
+
+ do {
+ status = pcap_loop(pd, cnt, callback, pcap_userdata);
+ if (WFileName == NULL) {
+ /*
+ * We're printing packets. Flush the printed output,
+ * so it doesn't get intermingled with error output.
+ */
+ if (status == -2) {
+ /*
+ * We got interrupted, so perhaps we didn't
+ * manage to finish a line we were printing.
+ * Print an extra newline, just in case.
+ */
+ putchar('\n');
+ }
+ (void)fflush(stdout);
+ }
+ if (status == -2) {
+ /*
+ * We got interrupted. If we are reading multiple
+ * files (via -V) set these so that we stop.
+ */
+ VFileName = NULL;
+ ret = NULL;
+ }
+ if (status == -1) {
+ /*
+ * Error. Report it.
+ */
+ (void)fprintf(stderr, "%s: pcap_loop: %s\n",
+ program_name, pcap_geterr(pd));
+ }
+ if (RFileName == NULL) {
+ /*
+ * We're doing a live capture. Report the capture
+ * statistics.
+ */
+ info(1);
+ }
+ pcap_close(pd);
+ if (VFileName != NULL) {
+ ret = get_next_file(VFile, VFileLine);
+ if (ret) {
+ int new_dlt;
+
+ RFileName = VFileLine;
+ pd = pcap_open_offline(RFileName, ebuf);
+ if (pd == NULL)
+ error("%s", ebuf);
+#ifdef HAVE_CAPSICUM
+ cap_rights_init(&rights, CAP_READ);
+ if (cap_rights_limit(fileno(pcap_file(pd)),
+ &rights) < 0 && errno != ENOSYS) {
+ error("unable to limit pcap descriptor");
+ }
+#endif
+ new_dlt = pcap_datalink(pd);
+ if (new_dlt != dlt) {
+ /*
+ * The new file has a different
+ * link-layer header type from the
+ * previous one.
+ */
+ if (WFileName != NULL) {
+ /*
+ * We're writing raw packets
+ * that match the filter to
+ * a pcap file. pcap files
+ * don't support multiple
+ * different link-layer
+ * header types, so we fail
+ * here.
+ */
+ error("%s: new dlt does not match original", RFileName);
+ }
+
+ /*
+ * We're printing the decoded packets;
+ * switch to the new DLT.
+ *
+ * To do that, we need to change
+ * the printer, change the DLT name,
+ * and recompile the filter with
+ * the new DLT.
+ */
+ dlt = new_dlt;
+ ndo->ndo_if_printer = get_if_printer(dlt);
+ if (pcap_compile(pd, &fcode, cmdbuf, Oflag, netmask) < 0)
+ error("%s", pcap_geterr(pd));
+ }
+
+ /*
+ * Set the filter on the new file.
+ */
+ if (pcap_setfilter(pd, &fcode) < 0)
+ error("%s", pcap_geterr(pd));
+
+ /*
+ * Report the new file.
+ */
+ dlt_name = pcap_datalink_val_to_name(dlt);
+ fprintf(stderr, "reading from file %s", RFileName);
+ if (dlt_name == NULL) {
+ fprintf(stderr, ", link-type %u", dlt);
+ } else {
+ fprintf(stderr, ", link-type %s (%s)",
+ dlt_name,
+ pcap_datalink_val_to_description(dlt));
+ }
+ fprintf(stderr, ", snapshot length %d\n", pcap_snapshot(pd));
+ }
+ }
+ }
+ while (ret != NULL);
+
+ if (count_mode && RFileName != NULL)
+ fprintf(stdout, "%u packet%s\n", packets_captured,
+ PLURAL_SUFFIX(packets_captured));
+
+ free(cmdbuf);
+ pcap_freecode(&fcode);
+ exit_tcpdump(status == -1 ? S_ERR_HOST_PROGRAM : S_SUCCESS);
+}
+
+/*
+ * Catch a signal.
+ */
+static void
+(*setsignal (int sig, void (*func)(int)))(int)
+{
+#ifdef _WIN32
+ return (signal(sig, func));
+#else
+ struct sigaction old, new;
+
+ memset(&new, 0, sizeof(new));
+ new.sa_handler = func;
+ if ((sig == SIGCHLD)
+# ifdef SIGNAL_REQ_INFO
+ || (sig == SIGNAL_REQ_INFO)
+# endif
+# ifdef SIGNAL_FLUSH_PCAP
+ || (sig == SIGNAL_FLUSH_PCAP)
+# endif
+ )
+ new.sa_flags = SA_RESTART;
+ if (sigaction(sig, &new, &old) < 0)
+ return (SIG_ERR);
+ return (old.sa_handler);
+#endif
+}
+
+/* make a clean exit on interrupts */
+static void
+cleanup(int signo _U_)
+{
+#ifdef _WIN32
+ if (timer_handle != INVALID_HANDLE_VALUE) {
+ DeleteTimerQueueTimer(NULL, timer_handle, NULL);
+ CloseHandle(timer_handle);
+ timer_handle = INVALID_HANDLE_VALUE;
+ }
+#else /* _WIN32 */
+ struct itimerval timer;
+
+ timer.it_interval.tv_sec = 0;
+ timer.it_interval.tv_usec = 0;
+ timer.it_value.tv_sec = 0;
+ timer.it_value.tv_usec = 0;
+ setitimer(ITIMER_REAL, &timer, NULL);
+#endif /* _WIN32 */
+
+#ifdef HAVE_PCAP_BREAKLOOP
+ /*
+ * We have "pcap_breakloop()"; use it, so that we do as little
+ * as possible in the signal handler (it's probably not safe
+ * to do anything with standard I/O streams in a signal handler -
+ * the ANSI C standard doesn't say it is).
+ */
+ pcap_breakloop(pd);
+#else
+ /*
+ * We don't have "pcap_breakloop()"; this isn't safe, but
+ * it's the best we can do. Print the summary if we're
+ * not reading from a savefile - i.e., if we're doing a
+ * live capture - and exit.
+ */
+ if (pd != NULL && pcap_file(pd) == NULL) {
+ /*
+ * We got interrupted, so perhaps we didn't
+ * manage to finish a line we were printing.
+ * Print an extra newline, just in case.
+ */
+ putchar('\n');
+ (void)fflush(stdout);
+ info(1);
+ }
+ exit_tcpdump(S_SUCCESS);
+#endif
+}
+
+/*
+ On windows, we do not use a fork, so we do not care less about
+ waiting a child processes to die
+ */
+#if defined(HAVE_FORK) || defined(HAVE_VFORK)
+static void
+child_cleanup(int signo _U_)
+{
+ wait(NULL);
+}
+#endif /* HAVE_FORK && HAVE_VFORK */
+
+static void
+info(int verbose)
+{
+ struct pcap_stat stats;
+
+ /*
+ * Older versions of libpcap didn't set ps_ifdrop on some
+ * platforms; initialize it to 0 to handle that.
+ */
+ stats.ps_ifdrop = 0;
+ if (pcap_stats(pd, &stats) < 0) {
+ (void)fprintf(stderr, "pcap_stats: %s\n", pcap_geterr(pd));
+ infoprint = 0;
+ return;
+ }
+
+ if (!verbose)
+ fprintf(stderr, "%s: ", program_name);
+
+ (void)fprintf(stderr, "%u packet%s captured", packets_captured,
+ PLURAL_SUFFIX(packets_captured));
+ if (!verbose)
+ fputs(", ", stderr);
+ else
+ putc('\n', stderr);
+ (void)fprintf(stderr, "%u packet%s received by filter", stats.ps_recv,
+ PLURAL_SUFFIX(stats.ps_recv));
+ if (!verbose)
+ fputs(", ", stderr);
+ else
+ putc('\n', stderr);
+ (void)fprintf(stderr, "%u packet%s dropped by kernel", stats.ps_drop,
+ PLURAL_SUFFIX(stats.ps_drop));
+ if (stats.ps_ifdrop != 0) {
+ if (!verbose)
+ fputs(", ", stderr);
+ else
+ putc('\n', stderr);
+ (void)fprintf(stderr, "%u packet%s dropped by interface\n",
+ stats.ps_ifdrop, PLURAL_SUFFIX(stats.ps_ifdrop));
+ } else
+ putc('\n', stderr);
+ infoprint = 0;
+}
+
+#if defined(HAVE_FORK) || defined(HAVE_VFORK)
+#ifdef HAVE_FORK
+#define fork_subprocess() fork()
+#else
+#define fork_subprocess() vfork()
+#endif
+static void
+compress_savefile(const char *filename)
+{
+ pid_t child;
+
+ child = fork_subprocess();
+ if (child == -1) {
+ fprintf(stderr,
+ "compress_savefile: fork failed: %s\n",
+ pcap_strerror(errno));
+ return;
+ }
+ if (child != 0) {
+ /* Parent process. */
+ return;
+ }
+
+ /*
+ * Child process.
+ * Set to lowest priority so that this doesn't disturb the capture.
+ */
+#ifdef NZERO
+ setpriority(PRIO_PROCESS, 0, NZERO - 1);
+#else
+ setpriority(PRIO_PROCESS, 0, 19);
+#endif
+ if (execlp(zflag, zflag, filename, (char *)NULL) == -1)
+ fprintf(stderr,
+ "compress_savefile: execlp(%s, %s) failed: %s\n",
+ zflag,
+ filename,
+ pcap_strerror(errno));
+#ifdef HAVE_FORK
+ exit(S_ERR_HOST_PROGRAM);
+#else
+ _exit(S_ERR_HOST_PROGRAM);
+#endif
+}
+#else /* HAVE_FORK && HAVE_VFORK */
+static void
+compress_savefile(const char *filename)
+{
+ fprintf(stderr,
+ "compress_savefile failed. Functionality not implemented under your system\n");
+}
+#endif /* HAVE_FORK && HAVE_VFORK */
+
+static void
+dump_packet_and_trunc(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
+{
+ struct dump_info *dump_info;
+
+ ++packets_captured;
+
+ ++infodelay;
+
+ dump_info = (struct dump_info *)user;
+
+ /*
+ * XXX - this won't force the file to rotate on the specified time
+ * boundary, but it will rotate on the first packet received after the
+ * specified Gflag number of seconds. Note: if a Gflag time boundary
+ * and a Cflag size boundary coincide, the time rotation will occur
+ * first thereby cancelling the Cflag boundary (since the file should
+ * be 0).
+ */
+ if (Gflag != 0) {
+ /* Check if it is time to rotate */
+ time_t t;
+
+ /* Get the current time */
+ if ((t = time(NULL)) == (time_t)-1) {
+ error("%s: can't get current_time: %s",
+ __func__, pcap_strerror(errno));
+ }
+
+
+ /* If the time is greater than the specified window, rotate */
+ if (t - Gflag_time >= Gflag) {
+#ifdef HAVE_CAPSICUM
+ FILE *fp;
+ int fd;
+#endif
+
+ /* Update the Gflag_time */
+ Gflag_time = t;
+ /* Update Gflag_count */
+ Gflag_count++;
+ /*
+ * Close the current file and open a new one.
+ */
+ pcap_dump_close(dump_info->pdd);
+
+ /*
+ * Compress the file we just closed, if the user asked for it
+ */
+ if (zflag != NULL)
+ compress_savefile(dump_info->CurrentFileName);
+
+ /*
+ * Check to see if we've exceeded the Wflag (when
+ * not using Cflag).
+ */
+ if (Cflag == 0 && Wflag > 0 && Gflag_count >= Wflag) {
+ (void)fprintf(stderr, "Maximum file limit reached: %d\n",
+ Wflag);
+ info(1);
+ exit_tcpdump(S_SUCCESS);
+ /* NOTREACHED */
+ }
+ if (dump_info->CurrentFileName != NULL)
+ free(dump_info->CurrentFileName);
+ /* Allocate space for max filename + \0. */
+ dump_info->CurrentFileName = (char *)malloc(PATH_MAX + 1);
+ if (dump_info->CurrentFileName == NULL)
+ error("dump_packet_and_trunc: malloc");
+ /*
+ * Gflag was set otherwise we wouldn't be here. Reset the count
+ * so multiple files would end with 1,2,3 in the filename.
+ * The counting is handled with the -C flow after this.
+ */
+ Cflag_count = 0;
+
+ /*
+ * This is always the first file in the Cflag
+ * rotation: e.g. 0
+ * We also don't need numbering if Cflag is not set.
+ */
+ if (Cflag != 0)
+ MakeFilename(dump_info->CurrentFileName, dump_info->WFileName, 0,
+ WflagChars);
+ else
+ MakeFilename(dump_info->CurrentFileName, dump_info->WFileName, 0, 0);
+
+#ifdef HAVE_LIBCAP_NG
+ capng_update(CAPNG_ADD, CAPNG_EFFECTIVE, CAP_DAC_OVERRIDE);
+ capng_apply(CAPNG_SELECT_BOTH);
+#endif /* HAVE_LIBCAP_NG */
+#ifdef HAVE_CAPSICUM
+ fd = openat(dump_info->dirfd,
+ dump_info->CurrentFileName,
+ O_CREAT | O_WRONLY | O_TRUNC, 0644);
+ if (fd < 0) {
+ error("unable to open file %s",
+ dump_info->CurrentFileName);
+ }
+ fp = fdopen(fd, "w");
+ if (fp == NULL) {
+ error("unable to fdopen file %s",
+ dump_info->CurrentFileName);
+ }
+ dump_info->pdd = pcap_dump_fopen(dump_info->pd, fp);
+#else /* !HAVE_CAPSICUM */
+ dump_info->pdd = pcap_dump_open(dump_info->pd, dump_info->CurrentFileName);
+#endif
+#ifdef HAVE_LIBCAP_NG
+ capng_update(CAPNG_DROP, CAPNG_EFFECTIVE, CAP_DAC_OVERRIDE);
+ capng_apply(CAPNG_SELECT_BOTH);
+#endif /* HAVE_LIBCAP_NG */
+ if (dump_info->pdd == NULL)
+ error("%s", pcap_geterr(pd));
+#ifdef HAVE_CAPSICUM
+ set_dumper_capsicum_rights(dump_info->pdd);
+#endif
+ }
+ }
+
+ /*
+ * XXX - this won't prevent capture files from getting
+ * larger than Cflag - the last packet written to the
+ * file could put it over Cflag.
+ */
+ if (Cflag != 0) {
+#ifdef HAVE_PCAP_DUMP_FTELL64
+ int64_t size = pcap_dump_ftell64(dump_info->pdd);
+#else
+ /*
+ * XXX - this only handles a Cflag value > 2^31-1 on
+ * LP64 platforms; to handle ILP32 (32-bit UN*X and
+ * Windows) or LLP64 (64-bit Windows) would require
+ * a version of libpcap with pcap_dump_ftell64().
+ */
+ long size = pcap_dump_ftell(dump_info->pdd);
+#endif
+
+ if (size == -1)
+ error("ftell fails on output file");
+ if (size > Cflag) {
+#ifdef HAVE_CAPSICUM
+ FILE *fp;
+ int fd;
+#endif
+
+ /*
+ * Close the current file and open a new one.
+ */
+ pcap_dump_close(dump_info->pdd);
+
+ /*
+ * Compress the file we just closed, if the user
+ * asked for it.
+ */
+ if (zflag != NULL)
+ compress_savefile(dump_info->CurrentFileName);
+
+ Cflag_count++;
+ if (Wflag > 0) {
+ if (Cflag_count >= Wflag)
+ Cflag_count = 0;
+ }
+ if (dump_info->CurrentFileName != NULL)
+ free(dump_info->CurrentFileName);
+ dump_info->CurrentFileName = (char *)malloc(PATH_MAX + 1);
+ if (dump_info->CurrentFileName == NULL)
+ error("%s: malloc", __func__);
+ MakeFilename(dump_info->CurrentFileName, dump_info->WFileName, Cflag_count, WflagChars);
+#ifdef HAVE_LIBCAP_NG
+ capng_update(CAPNG_ADD, CAPNG_EFFECTIVE, CAP_DAC_OVERRIDE);
+ capng_apply(CAPNG_SELECT_BOTH);
+#endif /* HAVE_LIBCAP_NG */
+#ifdef HAVE_CAPSICUM
+ fd = openat(dump_info->dirfd, dump_info->CurrentFileName,
+ O_CREAT | O_WRONLY | O_TRUNC, 0644);
+ if (fd < 0) {
+ error("unable to open file %s",
+ dump_info->CurrentFileName);
+ }
+ fp = fdopen(fd, "w");
+ if (fp == NULL) {
+ error("unable to fdopen file %s",
+ dump_info->CurrentFileName);
+ }
+ dump_info->pdd = pcap_dump_fopen(dump_info->pd, fp);
+#else /* !HAVE_CAPSICUM */
+ dump_info->pdd = pcap_dump_open(dump_info->pd, dump_info->CurrentFileName);
+#endif
+#ifdef HAVE_LIBCAP_NG
+ capng_update(CAPNG_DROP, CAPNG_EFFECTIVE, CAP_DAC_OVERRIDE);
+ capng_apply(CAPNG_SELECT_BOTH);
+#endif /* HAVE_LIBCAP_NG */
+ if (dump_info->pdd == NULL)
+ error("%s", pcap_geterr(pd));
+#ifdef HAVE_CAPSICUM
+ set_dumper_capsicum_rights(dump_info->pdd);
+#endif
+ }
+ }
+
+ pcap_dump((u_char *)dump_info->pdd, h, sp);
+#ifdef HAVE_PCAP_DUMP_FLUSH
+ if (Uflag)
+ pcap_dump_flush(dump_info->pdd);
+#endif
+
+ if (dump_info->ndo != NULL)
+ pretty_print_packet(dump_info->ndo, h, sp, packets_captured);
+
+ --infodelay;
+ if (infoprint)
+ info(0);
+}
+
+static void
+dump_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
+{
+ struct dump_info *dump_info;
+
+ ++packets_captured;
+
+ ++infodelay;
+
+ dump_info = (struct dump_info *)user;
+
+ pcap_dump((u_char *)dump_info->pdd, h, sp);
+#ifdef HAVE_PCAP_DUMP_FLUSH
+ if (Uflag)
+ pcap_dump_flush(dump_info->pdd);
+#endif
+
+ if (dump_info->ndo != NULL)
+ pretty_print_packet(dump_info->ndo, h, sp, packets_captured);
+
+ --infodelay;
+ if (infoprint)
+ info(0);
+}
+
+static void
+print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
+{
+ ++packets_captured;
+
+ ++infodelay;
+
+ if (!count_mode)
+ pretty_print_packet((netdissect_options *)user, h, sp, packets_captured);
+
+ --infodelay;
+ if (infoprint)
+ info(0);
+}
+
+#ifdef SIGNAL_REQ_INFO
+static void
+requestinfo(int signo _U_)
+{
+ if (infodelay)
+ ++infoprint;
+ else
+ info(0);
+}
+#endif
+
+#ifdef SIGNAL_FLUSH_PCAP
+static void
+flushpcap(int signo _U_)
+{
+ if (pdd != NULL)
+ pcap_dump_flush(pdd);
+}
+#endif
+
+static void
+print_packets_captured (void)
+{
+ static u_int prev_packets_captured, first = 1;
+
+ if (infodelay == 0 && (first || packets_captured != prev_packets_captured)) {
+ fprintf(stderr, "Got %u\r", packets_captured);
+ first = 0;
+ prev_packets_captured = packets_captured;
+ }
+}
+
+/*
+ * Called once each second in verbose mode while dumping to file
+ */
+#ifdef _WIN32
+static void CALLBACK verbose_stats_dump(PVOID param _U_,
+ BOOLEAN timer_fired _U_)
+{
+ print_packets_captured();
+}
+#else /* _WIN32 */
+static void verbose_stats_dump(int sig _U_)
+{
+ print_packets_captured();
+}
+#endif /* _WIN32 */
+
+DIAG_OFF_DEPRECATION
+static void
+print_version(FILE *f)
+{
+#ifndef HAVE_PCAP_LIB_VERSION
+ #ifdef HAVE_PCAP_VERSION
+ extern char pcap_version[];
+ #else /* HAVE_PCAP_VERSION */
+ static char pcap_version[] = "unknown";
+ #endif /* HAVE_PCAP_VERSION */
+#endif /* HAVE_PCAP_LIB_VERSION */
+ const char *smi_version_string;
+
+ (void)fprintf(f, "%s version " PACKAGE_VERSION "\n", program_name);
+#ifdef HAVE_PCAP_LIB_VERSION
+ (void)fprintf(f, "%s\n", pcap_lib_version());
+#else /* HAVE_PCAP_LIB_VERSION */
+ (void)fprintf(f, "libpcap version %s\n", pcap_version);
+#endif /* HAVE_PCAP_LIB_VERSION */
+
+#if defined(HAVE_LIBCRYPTO) && defined(SSLEAY_VERSION)
+ (void)fprintf (f, "%s\n", SSLeay_version(SSLEAY_VERSION));
+#endif
+
+ smi_version_string = nd_smi_version_string();
+ if (smi_version_string != NULL)
+ (void)fprintf (f, "SMI-library: %s\n", smi_version_string);
+
+#if defined(__SANITIZE_ADDRESS__)
+ (void)fprintf (f, "Compiled with AddressSanitizer/GCC.\n");
+#elif defined(__has_feature)
+# if __has_feature(address_sanitizer)
+ (void)fprintf (f, "Compiled with AddressSanitizer/Clang.\n");
+# elif __has_feature(memory_sanitizer)
+ (void)fprintf (f, "Compiled with MemorySanitizer/Clang.\n");
+# endif
+#endif /* __SANITIZE_ADDRESS__ or __has_feature */
+}
+DIAG_ON_DEPRECATION
+
+static void
+print_usage(FILE *f)
+{
+ print_version(f);
+ (void)fprintf(f,
+"Usage: %s [-Abd" D_FLAG "efhH" I_FLAG J_FLAG "KlLnNOpqStu" U_FLAG "vxX#]" B_FLAG_USAGE " [ -c count ] [--count]\n", program_name);
+ (void)fprintf(f,
+"\t\t[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]\n");
+ (void)fprintf(f,
+"\t\t[ -i interface ]" IMMEDIATE_MODE_USAGE j_FLAG_USAGE "\n");
+#ifdef HAVE_PCAP_FINDALLDEVS_EX
+ (void)fprintf(f,
+"\t\t" LIST_REMOTE_INTERFACES_USAGE "\n");
+#endif
+#ifdef USE_LIBSMI
+ (void)fprintf(f,
+"\t\t" m_FLAG_USAGE "\n");
+#endif
+ (void)fprintf(f,
+"\t\t[ -M secret ] [ --number ] [ --print ]" Q_FLAG_USAGE "\n");
+ (void)fprintf(f,
+"\t\t[ -r file ] [ -s snaplen ] [ -T type ] [ --version ]\n");
+ (void)fprintf(f,
+"\t\t[ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ]\n");
+#ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
+ (void)fprintf(f,
+"\t\t[ --time-stamp-precision precision ] [ --micro ] [ --nano ]\n");
+#endif
+ (void)fprintf(f,
+"\t\t[ -z postrotate-command ] [ -Z user ] [ expression ]\n");
+}
diff --git a/tests/02-sunrise-sunset-esp.pcap b/tests/02-sunrise-sunset-esp.pcap
new file mode 100644
index 0000000..e52af98
--- /dev/null
+++ b/tests/02-sunrise-sunset-esp.pcap
Binary files differ
diff --git a/tests/08-sunrise-sunset-aes.pcap b/tests/08-sunrise-sunset-aes.pcap
new file mode 100644
index 0000000..1ebe3de
--- /dev/null
+++ b/tests/08-sunrise-sunset-aes.pcap
Binary files differ
diff --git a/tests/08-sunrise-sunset-esp2.pcap b/tests/08-sunrise-sunset-esp2.pcap
new file mode 100644
index 0000000..c3e54cb
--- /dev/null
+++ b/tests/08-sunrise-sunset-esp2.pcap
Binary files differ
diff --git a/tests/3560_CDP.pcap b/tests/3560_CDP.pcap
new file mode 100644
index 0000000..f29fd50
--- /dev/null
+++ b/tests/3560_CDP.pcap
Binary files differ
diff --git a/tests/802.1D_spanning_tree.pcap b/tests/802.1D_spanning_tree.pcap
new file mode 100644
index 0000000..b21f71c
--- /dev/null
+++ b/tests/802.1D_spanning_tree.pcap
Binary files differ
diff --git a/tests/802.1w_rapid_STP.pcap b/tests/802.1w_rapid_STP.pcap
new file mode 100644
index 0000000..db85a45
--- /dev/null
+++ b/tests/802.1w_rapid_STP.pcap
Binary files differ
diff --git a/tests/802_15_4-data.out b/tests/802_15_4-data.out
new file mode 100644
index 0000000..54c530e
--- /dev/null
+++ b/tests/802_15_4-data.out
@@ -0,0 +1 @@
+ 1 04:15:33.623120 IEEE 802.15.4 Data packet v2 AR, seq 01 ab4d:10:05:00:81:00:01:00:01 < -:[ERROR: Truncated before dst_addr]
diff --git a/tests/802_15_4-data.pcap b/tests/802_15_4-data.pcap
new file mode 100644
index 0000000..4a32784
--- /dev/null
+++ b/tests/802_15_4-data.pcap
Binary files differ
diff --git a/tests/802_15_4-oobr-1.out b/tests/802_15_4-oobr-1.out
new file mode 100644
index 0000000..31edabe
--- /dev/null
+++ b/tests/802_15_4-oobr-1.out
@@ -0,0 +1 @@
+ 1 11:30:55.515816 IEEE 802.15.4 Beacon packet v2 Sequence Number Suppression, IE present, seq suppressed abcd:[ERROR: Truncated before dst_addr]
diff --git a/tests/802_15_4-oobr-1.pcap b/tests/802_15_4-oobr-1.pcap
new file mode 100644
index 0000000..b2a0182
--- /dev/null
+++ b/tests/802_15_4-oobr-1.pcap
Binary files differ
diff --git a/tests/802_15_4-oobr-2.out b/tests/802_15_4-oobr-2.out
new file mode 100644
index 0000000..9eb6aa9
--- /dev/null
+++ b/tests/802_15_4-oobr-2.out
@@ -0,0 +1 @@
+ 1 03:07:17.623120 IEEE 802.15.4 Data packet v2 AR, seq 01 [ERROR: Truncated before dst_pan]
diff --git a/tests/802_15_4-oobr-2.pcap b/tests/802_15_4-oobr-2.pcap
new file mode 100644
index 0000000..7542fc1
--- /dev/null
+++ b/tests/802_15_4-oobr-2.pcap
Binary files differ
diff --git a/tests/802_15_4_beacon.out b/tests/802_15_4_beacon.out
new file mode 100644
index 0000000..c7d1f83
--- /dev/null
+++ b/tests/802_15_4_beacon.out
@@ -0,0 +1 @@
+ 1 11:30:55.515816 IEEE 802.15.4 Beacon packet v2 Sequence Number Suppression, IE present, seq suppressed abcd:ffff < -:[ERROR: Truncated before dst_addr]
diff --git a/tests/802_15_4_beacon.pcap b/tests/802_15_4_beacon.pcap
new file mode 100644
index 0000000..9e6aafe
--- /dev/null
+++ b/tests/802_15_4_beacon.pcap
Binary files differ
diff --git a/tests/AoE_Linux.pcap b/tests/AoE_Linux.pcap
new file mode 100644
index 0000000..de5c744
--- /dev/null
+++ b/tests/AoE_Linux.pcap
Binary files differ
diff --git a/tests/DECnet_Phone.pcap b/tests/DECnet_Phone.pcap
new file mode 100644
index 0000000..20ff167
--- /dev/null
+++ b/tests/DECnet_Phone.pcap
Binary files differ
diff --git a/tests/DTP.pcap b/tests/DTP.pcap
new file mode 100644
index 0000000..9f0c5f4
--- /dev/null
+++ b/tests/DTP.pcap
Binary files differ
diff --git a/tests/EIGRP_adjacency.pcap b/tests/EIGRP_adjacency.pcap
new file mode 100644
index 0000000..a0966b6
--- /dev/null
+++ b/tests/EIGRP_adjacency.pcap
Binary files differ
diff --git a/tests/EIGRP_goodbye.pcap b/tests/EIGRP_goodbye.pcap
new file mode 100644
index 0000000..6a73f5d
--- /dev/null
+++ b/tests/EIGRP_goodbye.pcap
Binary files differ
diff --git a/tests/EIGRP_ipv6.pcap b/tests/EIGRP_ipv6.pcap
new file mode 100644
index 0000000..a0daca3
--- /dev/null
+++ b/tests/EIGRP_ipv6.pcap
Binary files differ
diff --git a/tests/EIGRP_subnet_down.pcap b/tests/EIGRP_subnet_down.pcap
new file mode 100644
index 0000000..a85579d
--- /dev/null
+++ b/tests/EIGRP_subnet_down.pcap
Binary files differ
diff --git a/tests/EIGRP_subnet_up.pcap b/tests/EIGRP_subnet_up.pcap
new file mode 100644
index 0000000..49f53ef
--- /dev/null
+++ b/tests/EIGRP_subnet_up.pcap
Binary files differ
diff --git a/tests/HDLC.pcap b/tests/HDLC.pcap
new file mode 100644
index 0000000..0d94d3f
--- /dev/null
+++ b/tests/HDLC.pcap
Binary files differ
diff --git a/tests/HSRP_coup.pcap b/tests/HSRP_coup.pcap
new file mode 100644
index 0000000..41f8ef0
--- /dev/null
+++ b/tests/HSRP_coup.pcap
Binary files differ
diff --git a/tests/HSRP_election.pcap b/tests/HSRP_election.pcap
new file mode 100644
index 0000000..72ccdfb
--- /dev/null
+++ b/tests/HSRP_election.pcap
Binary files differ
diff --git a/tests/HSRP_failover.pcap b/tests/HSRP_failover.pcap
new file mode 100644
index 0000000..cad4e61
--- /dev/null
+++ b/tests/HSRP_failover.pcap
Binary files differ
diff --git a/tests/IGMP_V1.pcap b/tests/IGMP_V1.pcap
new file mode 100644
index 0000000..2a6e90d
--- /dev/null
+++ b/tests/IGMP_V1.pcap
Binary files differ
diff --git a/tests/IGMP_V2.pcap b/tests/IGMP_V2.pcap
new file mode 100644
index 0000000..6d1d8db
--- /dev/null
+++ b/tests/IGMP_V2.pcap
Binary files differ
diff --git a/tests/ISAKMP_sa_setup.pcap b/tests/ISAKMP_sa_setup.pcap
new file mode 100644
index 0000000..28c5d61
--- /dev/null
+++ b/tests/ISAKMP_sa_setup.pcap
Binary files differ
diff --git a/tests/ISIS_external_lsp.pcap b/tests/ISIS_external_lsp.pcap
new file mode 100644
index 0000000..5fbf975
--- /dev/null
+++ b/tests/ISIS_external_lsp.pcap
Binary files differ
diff --git a/tests/ISIS_level1_adjacency.pcap b/tests/ISIS_level1_adjacency.pcap
new file mode 100644
index 0000000..9614218
--- /dev/null
+++ b/tests/ISIS_level1_adjacency.pcap
Binary files differ
diff --git a/tests/ISIS_level2_adjacency.pcap b/tests/ISIS_level2_adjacency.pcap
new file mode 100644
index 0000000..9d8a329
--- /dev/null
+++ b/tests/ISIS_level2_adjacency.pcap
Binary files differ
diff --git a/tests/ISIS_p2p_adjacency.pcap b/tests/ISIS_p2p_adjacency.pcap
new file mode 100644
index 0000000..a065ad7
--- /dev/null
+++ b/tests/ISIS_p2p_adjacency.pcap
Binary files differ
diff --git a/tests/LACP.pcap b/tests/LACP.pcap
new file mode 100644
index 0000000..9681961
--- /dev/null
+++ b/tests/LACP.pcap
Binary files differ
diff --git a/tests/LLDP_and_CDP.pcap b/tests/LLDP_and_CDP.pcap
new file mode 100644
index 0000000..ebbf49e
--- /dev/null
+++ b/tests/LLDP_and_CDP.pcap
Binary files differ
diff --git a/tests/MSTP_Intra-Region_BPDUs.pcap b/tests/MSTP_Intra-Region_BPDUs.pcap
new file mode 100644
index 0000000..559b234
--- /dev/null
+++ b/tests/MSTP_Intra-Region_BPDUs.pcap
Binary files differ
diff --git a/tests/OLSRv1_HNA_sgw_1.out b/tests/OLSRv1_HNA_sgw_1.out
new file mode 100644
index 0000000..6294f87
--- /dev/null
+++ b/tests/OLSRv1_HNA_sgw_1.out
@@ -0,0 +1,13 @@
+ 1 12:13:10.538099 IP (tos 0x10, ttl 1, id 25245, offset 0, flags [DF], proto UDP (17), length 100)
+ 172.29.175.220.698 > 255.255.255.255.698: OLSRv4, seq 0xce93, length 72
+ HNA Message (0x04), originator 172.31.175.220, ttl 255, hop 0
+ vtime 288.000s, msg-seq 0x6ce5, length 28
+ Advertised networks (total 2)
+ Smart-Gateway: LINKSPEED IPV4 IPV4-NAT 10000/10000, 10.175.220.0/24
+ Hello-LQ Message (0xc9), originator 172.31.175.220, ttl 1, hop 0
+ vtime 3.000s, msg-seq 0x6ce6, length 40
+ hello-time 1.000s, MPR willingness 3
+ link-type Symmetric, neighbor-type Symmetric, len 12
+ neighbor 172.29.175.221, link-quality 0.00%, neighbor-link-quality 0.00%
+ link-type Unspecified, neighbor-type Symmetric, len 12
+ neighbor 172.31.175.221, link-quality 0.00%, neighbor-link-quality 0.00%
diff --git a/tests/OLSRv1_HNA_sgw_1.pcap b/tests/OLSRv1_HNA_sgw_1.pcap
new file mode 100644
index 0000000..f975d8f
--- /dev/null
+++ b/tests/OLSRv1_HNA_sgw_1.pcap
Binary files differ
diff --git a/tests/OSPFv3_NBMA_adjacencies.pcap b/tests/OSPFv3_NBMA_adjacencies.pcap
new file mode 100644
index 0000000..7aa8fae
--- /dev/null
+++ b/tests/OSPFv3_NBMA_adjacencies.pcap
Binary files differ
diff --git a/tests/OSPFv3_broadcast_adjacency.pcap b/tests/OSPFv3_broadcast_adjacency.pcap
new file mode 100644
index 0000000..15cb2dd
--- /dev/null
+++ b/tests/OSPFv3_broadcast_adjacency.pcap
Binary files differ
diff --git a/tests/OSPFv3_multipoint_adjacencies.pcap b/tests/OSPFv3_multipoint_adjacencies.pcap
new file mode 100644
index 0000000..9ba7698
--- /dev/null
+++ b/tests/OSPFv3_multipoint_adjacencies.pcap
Binary files differ
diff --git a/tests/OSPFv3_with_AH.pcap b/tests/OSPFv3_with_AH.pcap
new file mode 100644
index 0000000..6c647b4
--- /dev/null
+++ b/tests/OSPFv3_with_AH.pcap
Binary files differ
diff --git a/tests/PIM-DM_pruning.pcap b/tests/PIM-DM_pruning.pcap
new file mode 100644
index 0000000..ad0f80d
--- /dev/null
+++ b/tests/PIM-DM_pruning.pcap
Binary files differ
diff --git a/tests/PIM-SM_join_prune.pcap b/tests/PIM-SM_join_prune.pcap
new file mode 100644
index 0000000..12396bf
--- /dev/null
+++ b/tests/PIM-SM_join_prune.pcap
Binary files differ
diff --git a/tests/PIM_register_register-stop.pcap b/tests/PIM_register_register-stop.pcap
new file mode 100644
index 0000000..e2419ad
--- /dev/null
+++ b/tests/PIM_register_register-stop.pcap
Binary files differ
diff --git a/tests/PIMv2_bootstrap.pcap b/tests/PIMv2_bootstrap.pcap
new file mode 100644
index 0000000..1bc0ae9
--- /dev/null
+++ b/tests/PIMv2_bootstrap.pcap
Binary files differ
diff --git a/tests/PIMv2_hellos.pcap b/tests/PIMv2_hellos.pcap
new file mode 100644
index 0000000..6a5f49d
--- /dev/null
+++ b/tests/PIMv2_hellos.pcap
Binary files differ
diff --git a/tests/QinQpacket.out b/tests/QinQpacket.out
new file mode 100644
index 0000000..96c9991
--- /dev/null
+++ b/tests/QinQpacket.out
@@ -0,0 +1,249 @@
+ 1 15:55:17.641254 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 2 15:55:25.441414 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 3 15:55:29.441370 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 4 15:55:32.161340 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 5 15:55:37.441460 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 6 15:55:53.441321 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 7 15:56:24.440875 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 8 15:56:28.440910 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 9 15:56:35.440867 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 10 15:56:51.440763 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 11 15:57:00.136842 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 12 15:57:01.920598 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 13 15:57:03.840588 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 14 15:57:05.760581 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 15 15:57:07.680617 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 16 15:57:30.440456 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 17 15:57:33.440534 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 18 15:57:35.160490 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 19 15:57:40.440561 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 20 15:57:56.440434 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 21 15:58:27.440414 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 22 15:58:30.440357 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 23 15:58:38.440327 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 24 15:58:54.440258 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 25 15:59:03.136496 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 26 15:59:04.920093 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 27 15:59:06.840085 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 28 15:59:08.760077 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 29 15:59:10.680101 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 30 15:59:33.439999 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 31 15:59:37.440121 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 32 15:59:38.160016 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 33 15:59:45.439990 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 34 16:00:01.439974 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 35 16:00:33.439852 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 36 16:00:36.439843 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 37 16:00:44.439835 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 38 16:00:59.439756 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 39 16:01:02.850230 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 40 16:01:06.137864 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 41 16:01:07.849671 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 42 16:01:09.839585 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 43 16:01:26.639582 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 44 16:01:40.439500 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 45 16:01:41.159492 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 (6f:6e:02:63:61:00) tell 172.17.0.20, length 46
+ 46 16:01:44.439517 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 47 16:01:51.439486 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 48 16:02:06.439417 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 49 16:02:37.439455 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 50 16:02:41.439344 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 51 16:02:49.439358 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 52 16:03:05.439237 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 53 16:03:09.135391 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 54 16:03:10.919116 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 55 16:03:12.839114 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 56 16:03:14.759070 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 57 16:03:16.679098 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 58 16:03:43.439034 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 59 16:03:44.159007 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 60 16:03:47.439043 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 61 16:03:54.438972 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 62 16:04:09.438915 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 63 16:04:41.438856 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 64 16:04:45.438835 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 65 16:04:52.438856 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 66 16:05:08.438751 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 67 16:05:13.134813 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 68 16:05:14.878591 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 69 16:05:16.798585 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 70 16:05:18.718569 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 71 16:05:20.638595 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 72 16:05:47.438441 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 73 16:05:48.118482 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 74 16:05:50.438514 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 75 16:05:58.438530 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 76 16:06:14.438564 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 77 16:06:46.438700 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 78 16:06:49.438688 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 79 16:06:57.438462 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 80 16:07:12.438398 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 81 16:07:17.134624 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 82 16:07:18.898272 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 83 16:07:20.818258 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 84 16:07:22.738261 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 85 16:07:37.618208 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 86 16:07:45.438125 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 87 16:07:49.438248 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 88 16:07:52.138147 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 89 16:07:57.438194 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 90 16:08:13.438144 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 91 16:08:45.438035 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 92 16:08:49.438061 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 93 16:08:56.437977 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 94 16:09:12.437965 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 95 16:09:12.858347 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 96 16:09:17.857857 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 97 16:09:21.133560 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 98 16:09:22.857881 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 99 16:09:41.637710 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 100 16:09:47.437619 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 101 16:09:51.437675 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 102 16:09:56.157626 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 (6f:6e:02:63:61:00) tell 172.17.0.20, length 46
+ 103 16:09:59.437646 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 104 16:10:14.437582 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 105 16:10:45.437520 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 106 16:10:49.437557 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 107 16:10:57.437519 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 108 16:11:13.437458 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 109 16:11:25.133036 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 110 16:11:26.877222 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 111 16:11:28.797232 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 112 16:11:30.717225 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 113 16:11:32.637255 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 114 16:11:51.437098 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 115 16:11:55.437221 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 116 16:12:00.117115 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 117 16:12:02.437142 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 118 16:12:17.437081 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 119 16:12:49.437124 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 120 16:12:52.437050 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 121 16:13:00.436963 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 122 16:13:15.436904 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 123 16:13:28.132541 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 124 16:13:29.876721 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 125 16:13:31.796714 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 126 16:13:33.716705 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 127 16:13:48.596678 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 128 16:13:52.436697 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 129 16:13:56.436709 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 130 16:14:03.116604 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 131 16:14:03.436636 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 132 16:14:18.436579 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 133 16:14:50.436519 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 134 16:14:53.436509 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 135 16:15:00.436477 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 136 16:15:15.436418 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 137 16:15:32.132037 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 138 16:15:33.896220 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 139 16:15:35.816205 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 140 16:15:48.436148 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 141 16:15:51.436219 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 142 16:15:52.616186 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 143 16:15:58.436243 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 144 16:16:07.136222 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 145 16:16:14.436254 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 146 16:16:46.436521 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 147 16:16:50.436365 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 148 16:16:57.436387 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 149 16:17:13.436441 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 150 16:17:27.866802 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 151 16:17:32.865842 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 152 16:17:36.131974 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 153 16:17:37.865778 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 154 16:17:39.835707 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 155 16:17:51.435633 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 156 16:17:54.435693 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 157 16:17:56.635656 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 158 16:18:01.435717 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 159 16:18:11.155632 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 160 16:18:16.435664 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 161 16:18:47.435594 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 162 16:18:51.435518 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 163 16:18:58.435543 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 164 16:19:13.435487 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 165 16:19:40.131536 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 166 16:19:41.875196 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 167 16:19:43.795196 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 168 16:19:45.715183 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 169 16:19:47.635200 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 170 16:19:49.555195 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 171 16:19:52.435221 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 172 16:19:55.435302 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 173 16:20:02.435180 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 174 16:20:15.115100 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 175 16:20:17.435132 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 176 16:20:49.435104 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 177 16:20:52.435095 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 178 16:20:59.435019 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 179 16:21:15.434942 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 180 16:21:43.130995 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 181 16:21:44.874731 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 182 16:21:46.794699 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 183 16:21:48.434667 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 184 16:21:48.714680 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 185 16:21:52.434783 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 186 16:22:00.434701 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 187 16:22:03.594655 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 188 16:22:16.434721 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 189 16:22:18.114617 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 190 16:22:47.434564 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 191 16:22:50.434580 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 192 16:22:57.434566 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 193 16:23:12.434474 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 194 16:23:47.130389 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 195 16:23:48.894199 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 196 16:23:50.814183 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 197 16:23:52.434214 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 198 16:23:52.734172 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 199 16:23:54.654194 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 200 16:23:56.434220 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 201 16:24:03.434217 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 202 16:24:18.434125 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 203 16:24:22.134082 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 204 16:24:49.434125 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 205 16:24:53.434048 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 206 16:25:00.434021 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 207 16:25:16.434042 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 208 16:25:42.874259 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 209 16:25:47.873820 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 210 16:25:49.433771 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 211 16:25:51.129874 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 212 16:25:52.433842 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 213 16:25:52.873806 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 214 16:25:54.833708 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 215 16:25:59.433718 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 216 16:26:11.633639 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 217 16:26:15.433662 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 218 16:26:26.153612 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 219 16:26:46.433649 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 220 16:26:49.433641 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 221 16:26:56.433551 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 222 16:27:11.433578 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 223 16:27:51.433169 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 224 16:27:54.129602 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 225 16:27:54.433239 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 226 16:27:55.913176 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 227 16:27:57.833164 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 228 16:28:01.433271 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 229 16:28:14.633138 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 230 16:28:17.433175 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 231 16:28:29.153064 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 232 16:28:48.433104 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 233 16:28:52.433149 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 234 16:28:59.433029 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 235 16:29:15.432967 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 236 16:29:50.432685 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 237 16:29:54.432749 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 238 16:29:57.128503 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 239 16:29:58.912672 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 240 16:30:00.832683 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 241 16:30:01.432800 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 242 16:30:02.752675 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 243 16:30:04.672698 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 244 16:30:16.432714 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+ 245 16:30:32.152568 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 246 16:30:47.432614 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 247 16:30:50.432591 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 248 16:30:57.432565 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+ 249 16:31:13.432576 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
diff --git a/tests/QinQpacket.pcap b/tests/QinQpacket.pcap
new file mode 100644
index 0000000..eeabfe4
--- /dev/null
+++ b/tests/QinQpacket.pcap
Binary files differ
diff --git a/tests/QinQpacketv.out b/tests/QinQpacketv.out
new file mode 100644
index 0000000..fd411f6
--- /dev/null
+++ b/tests/QinQpacketv.out
@@ -0,0 +1,1977 @@
+ 1 15:55:17.641254 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 2 15:55:25.441414 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51417, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a090, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 3 15:55:29.441370 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51427, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a090, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 4 15:55:32.161340 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 5 15:55:37.441460 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51435, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a090, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 6 15:55:53.441321 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51451, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a090, secs 28, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 7 15:56:24.440875 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51482, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a090, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 8 15:56:28.440910 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51486, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a090, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 9 15:56:35.440867 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51493, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a090, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 10 15:56:51.440763 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51509, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a090, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 11 15:57:00.136842 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 12 15:57:01.920598 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 13 15:57:03.840588 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 14 15:57:05.760581 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 15 15:57:07.680617 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 16 15:57:30.440456 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51540, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a015, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 17 15:57:33.440534 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51551, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a015, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 18 15:57:35.160490 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 19 15:57:40.440561 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51558, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a015, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 20 15:57:56.440434 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51574, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a015, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 21 15:58:27.440414 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51605, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a015, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 22 15:58:30.440357 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51608, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a015, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 23 15:58:38.440327 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51616, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a015, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 24 15:58:54.440258 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51632, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a015, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 25 15:59:03.136496 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 26 15:59:04.920093 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 27 15:59:06.840085 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 28 15:59:08.760077 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 29 15:59:10.680101 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 30 15:59:33.439999 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51664, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f99, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 31 15:59:37.440121 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51675, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f99, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 32 15:59:38.160016 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 33 15:59:45.439990 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51683, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f99, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 34 16:00:01.439974 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51699, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f99, secs 28, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 35 16:00:33.439852 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51731, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f99, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 36 16:00:36.439843 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51734, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f99, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 37 16:00:44.439835 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51742, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f99, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 38 16:00:59.439756 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51757, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f99, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 39 16:01:02.850230 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 40 16:01:06.137864 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 41 16:01:07.849671 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 42 16:01:09.839585 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 43 16:01:26.639582 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 44 16:01:40.439500 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51788, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f1d, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 45 16:01:41.159492 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (6f:6e:02:63:61:00) tell 172.17.0.20, length 46
+ 46 16:01:44.439517 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51802, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f1d, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 47 16:01:51.439486 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51809, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f1d, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 48 16:02:06.439417 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51824, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f1d, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 49 16:02:37.439455 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51855, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f1d, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 50 16:02:41.439344 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51859, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f1d, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 51 16:02:49.439358 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51867, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f1d, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 52 16:03:05.439237 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51883, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f1d, secs 28, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 53 16:03:09.135391 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 54 16:03:10.919116 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 55 16:03:12.839114 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 56 16:03:14.759070 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 57 16:03:16.679098 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 58 16:03:43.439034 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51915, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e9e, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 59 16:03:44.159007 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 60 16:03:47.439043 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51925, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e9e, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 61 16:03:54.438972 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51932, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e9e, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 62 16:04:09.438915 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51947, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e9e, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 63 16:04:41.438856 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51979, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e9e, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 64 16:04:45.438835 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51983, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e9e, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 65 16:04:52.438856 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 51990, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e9e, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 66 16:05:08.438751 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52006, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e9e, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 67 16:05:13.134813 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 68 16:05:14.878591 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 69 16:05:16.798585 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 70 16:05:18.718569 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 71 16:05:20.638595 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 72 16:05:47.438441 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52037, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e24, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 73 16:05:48.118482 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 74 16:05:50.438514 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52048, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e24, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 75 16:05:58.438530 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52056, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e24, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 76 16:06:14.438564 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52072, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e24, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 77 16:06:46.438700 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52104, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e24, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 78 16:06:49.438688 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52107, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e24, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 79 16:06:57.438462 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52115, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e24, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 80 16:07:12.438398 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52130, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e24, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 81 16:07:17.134624 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 82 16:07:18.898272 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 83 16:07:20.818258 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 84 16:07:22.738261 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 85 16:07:37.618208 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 86 16:07:45.438125 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52162, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969da7, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 87 16:07:49.438248 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52167, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969da7, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 88 16:07:52.138147 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 89 16:07:57.438194 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52175, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969da7, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 90 16:08:13.438144 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52191, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969da7, secs 28, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 91 16:08:45.438035 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52223, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969da7, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 92 16:08:49.438061 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52227, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969da7, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 93 16:08:56.437977 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52234, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969da7, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 94 16:09:12.437965 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52250, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969da7, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 95 16:09:12.858347 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 96 16:09:17.857857 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 97 16:09:21.133560 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 98 16:09:22.857881 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 99 16:09:41.637710 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 100 16:09:47.437619 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52281, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969d30, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 101 16:09:51.437675 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52289, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969d30, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 102 16:09:56.157626 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (6f:6e:02:63:61:00) tell 172.17.0.20, length 46
+ 103 16:09:59.437646 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52297, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969d30, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 104 16:10:14.437582 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52312, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969d30, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 105 16:10:45.437520 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52343, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969d30, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 106 16:10:49.437557 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52347, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969d30, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 107 16:10:57.437519 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52355, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969d30, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 108 16:11:13.437458 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52371, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969d30, secs 28, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 109 16:11:25.133036 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 110 16:11:26.877222 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 111 16:11:28.797232 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 112 16:11:30.717225 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 113 16:11:32.637255 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 114 16:11:51.437098 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52403, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969cb6, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 115 16:11:55.437221 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52413, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969cb6, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 116 16:12:00.117115 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 117 16:12:02.437142 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52420, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969cb6, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 118 16:12:17.437081 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52435, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969cb6, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 119 16:12:49.437124 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52467, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969cb6, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 120 16:12:52.437050 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52470, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969cb6, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 121 16:13:00.436963 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52478, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969cb6, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 122 16:13:15.436904 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52493, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969cb6, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 123 16:13:28.132541 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 124 16:13:29.876721 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 125 16:13:31.796714 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 126 16:13:33.716705 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 127 16:13:48.596678 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 128 16:13:52.436697 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52524, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969c3d, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 129 16:13:56.436709 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52534, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969c3d, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 130 16:14:03.116604 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 131 16:14:03.436636 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52541, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969c3d, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 132 16:14:18.436579 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52556, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969c3d, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 133 16:14:50.436519 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52588, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969c3d, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 134 16:14:53.436509 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52591, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969c3d, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 135 16:15:00.436477 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52598, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969c3d, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 136 16:15:15.436418 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52613, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969c3d, secs 25, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 137 16:15:32.132037 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 138 16:15:33.896220 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 139 16:15:35.816205 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 140 16:15:48.436148 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52645, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969bc4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 141 16:15:51.436219 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52649, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969bc4, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 142 16:15:52.616186 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 143 16:15:58.436243 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52656, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969bc4, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 144 16:16:07.136222 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 145 16:16:14.436254 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52672, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969bc4, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 146 16:16:46.436521 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52704, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969bc4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 147 16:16:50.436365 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52708, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969bc4, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 148 16:16:57.436387 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52715, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969bc4, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 149 16:17:13.436441 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52731, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969bc4, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 150 16:17:27.866802 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 151 16:17:32.865842 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 152 16:17:36.131974 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 153 16:17:37.865778 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 154 16:17:39.835707 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 155 16:17:51.435633 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52762, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969b4f, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 156 16:17:54.435693 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52772, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969b4f, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 157 16:17:56.635656 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 158 16:18:01.435717 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52779, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969b4f, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 159 16:18:11.155632 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 160 16:18:16.435664 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52794, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969b4f, secs 25, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 161 16:18:47.435594 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52825, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969b4f, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 162 16:18:51.435518 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52829, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969b4f, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 163 16:18:58.435543 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52836, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969b4f, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 164 16:19:13.435487 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52851, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969b4f, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 165 16:19:40.131536 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 166 16:19:41.875196 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 167 16:19:43.795196 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 168 16:19:45.715183 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 169 16:19:47.635200 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 170 16:19:49.555195 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 171 16:19:52.435221 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52882, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969ad7, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 172 16:19:55.435302 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52893, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969ad7, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 173 16:20:02.435180 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52900, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969ad7, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 174 16:20:15.115100 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 175 16:20:17.435132 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52915, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969ad7, secs 25, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 176 16:20:49.435104 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52947, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969ad7, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 177 16:20:52.435095 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52950, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969ad7, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 178 16:20:59.435019 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52957, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969ad7, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 179 16:21:15.434942 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 52973, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969ad7, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 180 16:21:43.130995 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 181 16:21:44.874731 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 182 16:21:46.794699 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 183 16:21:48.434667 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53004, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969a5d, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 184 16:21:48.714680 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 185 16:21:52.434783 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53010, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969a5d, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 186 16:22:00.434701 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53018, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969a5d, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 187 16:22:03.594655 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 188 16:22:16.434721 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53034, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969a5d, secs 28, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 189 16:22:18.114617 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 190 16:22:47.434564 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53065, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969a5d, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 191 16:22:50.434580 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53068, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969a5d, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 192 16:22:57.434566 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53075, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969a5d, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 193 16:23:12.434474 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53090, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969a5d, secs 25, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 194 16:23:47.130389 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 195 16:23:48.894199 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 196 16:23:50.814183 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 197 16:23:52.434214 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53122, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969699e7, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 198 16:23:52.734172 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 199 16:23:54.654194 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 200 16:23:56.434220 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53134, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969699e7, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 201 16:24:03.434217 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53141, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969699e7, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 202 16:24:18.434125 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53156, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969699e7, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 203 16:24:22.134082 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 204 16:24:49.434125 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53187, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969699e7, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 205 16:24:53.434048 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53191, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969699e7, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 206 16:25:00.434021 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53198, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969699e7, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 207 16:25:16.434042 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53214, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969699e7, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 208 16:25:42.874259 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 209 16:25:47.873820 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 210 16:25:49.433771 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53246, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696996b, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 211 16:25:51.129874 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+ 212 16:25:52.433842 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53250, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696996b, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 213 16:25:52.873806 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 214 16:25:54.833708 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 215 16:25:59.433718 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53257, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696996b, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 216 16:26:11.633639 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 217 16:26:15.433662 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53273, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696996b, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 218 16:26:26.153612 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 219 16:26:46.433649 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53304, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696996b, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 220 16:26:49.433641 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53307, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696996b, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 221 16:26:56.433551 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53314, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696996b, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 222 16:27:11.433578 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53329, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696996b, secs 25, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 223 16:27:51.433169 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53360, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969698f9, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 224 16:27:54.129602 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 225 16:27:54.433239 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53372, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969698f9, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 226 16:27:55.913176 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 227 16:27:57.833164 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 228 16:28:01.433271 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53379, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969698f9, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 229 16:28:14.633138 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 230 16:28:17.433175 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53395, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969698f9, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 231 16:28:29.153064 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 232 16:28:48.433104 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53426, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969698f9, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 233 16:28:52.433149 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53430, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969698f9, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 234 16:28:59.433029 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53437, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969698f9, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 235 16:29:15.432967 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53453, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969698f9, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 236 16:29:50.432685 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53485, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696987c, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 237 16:29:54.432749 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53492, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696987c, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 238 16:29:57.128503 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 239 16:29:58.912672 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 240 16:30:00.832683 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 241 16:30:01.432800 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53499, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696987c, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 242 16:30:02.752675 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 243 16:30:04.672698 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 244 16:30:16.432714 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53514, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696987c, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 245 16:30:32.152568 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP (0x0806), Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+ 246 16:30:47.432614 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53545, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696987c, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 247 16:30:50.432591 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53548, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696987c, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 248 16:30:57.432565 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53555, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696987c, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
+ 249 16:31:13.432576 00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 32, id 53571, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696987c, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ MSZ (57), length 2: 1500
+ Parameter-Request (55), length 9:
+ Subnet-Mask (1), Default-Gateway (3), Domain-Name-Server (6), NTP (42)
+ Vendor-Option (43), Time-Zone (2), TFTP (66), Unknown (159)
+ Unknown (160)
+ Hostname (12), length 17: "6731i00085D230C3F"
+ Vendor-Class (60), length 18: "AastraIPPhone6731i"
diff --git a/tests/RADIUS-RFC3162.pcap b/tests/RADIUS-RFC3162.pcap
new file mode 100644
index 0000000..b41d67c
--- /dev/null
+++ b/tests/RADIUS-RFC3162.pcap
Binary files differ
diff --git a/tests/RADIUS-RFC4675.pcap b/tests/RADIUS-RFC4675.pcap
new file mode 100644
index 0000000..a5d7505
--- /dev/null
+++ b/tests/RADIUS-RFC4675.pcap
Binary files differ
diff --git a/tests/RADIUS-RFC5176-2.pcap b/tests/RADIUS-RFC5176-2.pcap
new file mode 100644
index 0000000..9c2a455
--- /dev/null
+++ b/tests/RADIUS-RFC5176-2.pcap
Binary files differ
diff --git a/tests/RADIUS-RFC5176.pcap b/tests/RADIUS-RFC5176.pcap
new file mode 100644
index 0000000..2ef19f2
--- /dev/null
+++ b/tests/RADIUS-RFC5176.pcap
Binary files differ
diff --git a/tests/RADIUS-RFC5447.pcap b/tests/RADIUS-RFC5447.pcap
new file mode 100644
index 0000000..9e586e8
--- /dev/null
+++ b/tests/RADIUS-RFC5447.pcap
Binary files differ
diff --git a/tests/RADIUS-RFC5580.pcap b/tests/RADIUS-RFC5580.pcap
new file mode 100644
index 0000000..5867125
--- /dev/null
+++ b/tests/RADIUS-RFC5580.pcap
Binary files differ
diff --git a/tests/RADIUS-port1700.pcap b/tests/RADIUS-port1700.pcap
new file mode 100644
index 0000000..aa7b24e
--- /dev/null
+++ b/tests/RADIUS-port1700.pcap
Binary files differ
diff --git a/tests/RADIUS.pcap b/tests/RADIUS.pcap
new file mode 100644
index 0000000..2e902e4
--- /dev/null
+++ b/tests/RADIUS.pcap
Binary files differ
diff --git a/tests/TESTLIST b/tests/TESTLIST
new file mode 100644
index 0000000..e6a6446
--- /dev/null
+++ b/tests/TESTLIST
@@ -0,0 +1,857 @@
+# The options -# and -n are useless in TESTLIST. They are already set
+# in TESTrun.
+
+# Various flags applied to a TCP session.
+#
+# We cannot rely on, for example, "print-x.out" and
+# "print-X.out" being different files - we might be running
+# this on a case-insensitive file system, e.g. a Windows
+# file system or a case-insensitive HFS+ file system on
+# macOS.
+#
+# Therefore, for "X" and "XX", we have "print-capX.out"
+# and "print-capXX.out".
+#
+print-x print-flags.pcap print-x.out -x
+print-xx print-flags.pcap print-xx.out -xx
+print-X print-flags.pcap print-capX.out -X
+print-XX print-flags.pcap print-capXX.out -XX
+print-A print-flags.pcap print-A.out -A
+print-AA print-flags.pcap print-AA.out -AA
+
+# BGP tests
+bgp_vpn_attrset bgp_vpn_attrset.pcap bgp_vpn_attrset.out -v
+mpbgp-linklocal-nexthop mpbgp-linklocal-nexthop.pcap mpbgp-linklocal-nexthop.out -v
+bgp_infloop-v bgp-infinite-loop.pcap bgp_infloop-v.out -v
+bgp-aigp bgp-aigp.pcap bgp-aigp.out -v
+bgp-aigp-2 bgp-aigp-2.pcap bgp-aigp-2.out -v
+bgp-large-community bgp-large-community.pcap bgp-large-community.out -v
+bgp-shutdown-communication bgp-shutdown-communication.pcapng bgp-shutdown-communication.out -v
+bgp-addpath bgp-addpath.pcap bgp-addpath.out -v
+bgp-4byte-asn bgp-4byte-asn.pcap bgp-4byte-asn.out -v
+bgp-4byte-asdot bgp-4byte-asn.pcap bgp-4byte-asdot.out -vb
+bgp-lu-multiple-labels bgp-lu-multiple-labels.pcap bgp-lu-multiple-labels.out -v
+bgp-evpn bgp-evpn.pcap bgp-evpn.out -v
+bgp-llgr bgp-evpn.pcap bgp-llgr.out -v
+bgp-encap bgp-encap.pcap bgp-encap.out -v
+bgp-rt-prefix bgp-rt-prefix.pcap bgp-rt-prefix.out -v
+bgp-extended-shutdown-msg bgp-extended-shutdown-msg.pcapng bgp-extended-shutdown-msg.out -v
+bgp-link-bw-extcommunity bgp-link-bw-extcommunity.pcapng bgp-link-bw-extcommunity.out -v
+
+# Broadcom tag tests
+brcmtag brcm-tag.pcap brcm-tag.out
+brcmtag-e brcm-tag.pcap brcm-tag-e.out -e
+brcmtagprepend brcm-tag-prepend.pcap brcm-tag-prepend.out -e
+
+# Broadcom LI
+bcm-li bcm-li.pcap bcm-li.out
+bcm-li-v bcm-li.pcap bcm-li-v.out -v
+
+# Marvell DSA tag tests
+dsa dsa.pcap dsa.out
+dsa-e dsa.pcap dsa-e.out -e
+dsa-high-vid dsa-high-vid.pcap dsa-high-vid.out
+dsa-high-vid-e dsa-high-vid.pcap dsa-high-vid-e.out -e
+
+# EAP tests
+# now in smb.tests
+
+# Marvell DSA tag tests
+edsa edsa.pcap edsa.out
+edsa-e edsa.pcap edsa-e.out -e
+edsa-high-vid edsa-high-vid.pcap edsa-high-vid.out
+edsa-high-vid-e edsa-high-vid.pcap edsa-high-vid-e.out -e
+
+# ESP tests
+esp0 02-sunrise-sunset-esp.pcap esp0.out
+# more ESP tests in crypto.tests
+
+# ISAKMP tests
+isakmp1 isakmp-delete-segfault.pcap isakmp1.out
+isakmp2 isakmp-pointer-loop.pcap isakmp2.out
+isakmp3 isakmp-identification-segfault.pcap isakmp3.out -v
+# isakmp4 is in crypto.tests
+isakmp5-v ISAKMP_sa_setup.pcap isakmp5-v.out -v
+
+# Link Management Protocol tests
+lmp lmp.pcap lmp.out -T lmp
+# lmp-v is now conditionally handled by lmp-v.tests
+
+# MPLS tests
+mpls-ldp-hello mpls-ldp-hello.pcap mpls-ldp-hello.out -v
+ldp_infloop ldp-infinite-loop.pcap ldp_infloop.out
+lspping-fec-ldp lspping-fec-ldp.pcap lspping-fec-ldp.out
+lspping-fec-ldp-v lspping-fec-ldp.pcap lspping-fec-ldp-v.out -v
+lspping-fec-ldp-vv lspping-fec-ldp.pcap lspping-fec-ldp-vv.out -vv
+lspping-fec-rsvp lspping-fec-rsvp.pcap lspping-fec-rsvp.out
+lspping-fec-rsvp-v lspping-fec-rsvp.pcap lspping-fec-rsvp-v.out -v
+lspping-fec-rsvp-vv lspping-fec-rsvp.pcap lspping-fec-rsvp-vv.out -vv
+mpls-traceroute mpls-traceroute.pcap mpls-traceroute.out
+mpls-traceroute-v mpls-traceroute.pcap mpls-traceroute-v.out -v
+mpls-over-udp mpls-over-udp.pcap mpls-over-udp.out
+mpls-over-udp-v mpls-over-udp.pcap mpls-over-udp-v.out -v
+
+# OSPF tests
+# In printf_z.tests:
+# ospf-gmpls
+# ospf-nssa-bitnt
+# ospf3_ah-vv
+# ospf3_bc-vv
+# ospf3_mp-vv
+# ospf3_nbma-vv
+# ospf2-seg-fault-1-v (fuzzed pcap)
+ospf3_auth-vv ospf3_auth.pcapng ospf3_auth-vv.out -v -v
+
+# IKEv2 tests
+ikev2four ikev2four.pcap ikev2four.out -v
+ikev2fourv ikev2four.pcap ikev2fourv.out -v -v -v
+ikev2fourv4 ikev2four.pcap ikev2fourv4.out -v -v -v -v
+# ikev2pI2 test in crypto.tests
+ikev2pI2-segfault ikev2pI2-segfault.pcapng ikev2pI2-segfault.out
+ikev2pI2-segfault-v ikev2pI2-segfault.pcapng ikev2pI2-segfault-v.out -v
+
+# IETF ROLL RPL packets
+dio02 rpl-19-pickdag.pcap rpl-19-pickdag.out -v -v
+dio03 rpl-19-pickdag.pcap rpl-19-pickdagvvv.out -v -v -v
+dao01 rpl-14-dao.pcap rpl-14-daovvv.out -v -v -v
+daoack01 rpl-26-senddaoack.pcap rpl-26-senddaovv.out -v -v -v
+
+# IPNET encapsulated site
+e1000g e1000g.pcap e1000g.out
+e1000g-e e1000g.pcap e1000g-e.out -e
+
+# IPX/Netware packets
+# now in smb.tests
+
+# IPX/Netware invalid
+ipx-invalid-length ipx-invalid-length.pcap ipx-invalid-length.out
+
+# IETF FORCES WG packets and printer
+forces01 forces1.pcap forces1.out
+forces01vvv forces1.pcap forces1vvv.out -v -v -v
+forces01vvvv forces1.pcap forces1vvvv.out -v -v -v -v
+# need new pcap file, not sure what the differences were?
+#forces02 forces2.pcap forces2.out
+#forces02v forces2.pcap forces2v.out -v
+#forces02vv forces2.pcap forces2vv.out -v -v
+
+# 802.1ad, QinQ tests
+qinq QinQpacket.pcap QinQpacket.out -e
+qinqv QinQpacket.pcap QinQpacketv.out -e -v
+
+# now SFLOW tests
+sflow1 sflow_multiple_counter_30_pdus.pcap sflow_multiple_counter_30_pdus.out -v
+sflow2 sflow_multiple_counter_30_pdus.pcap sflow_multiple_counter_30_pdus-nv.out
+# ipv6 sflow support
+sflow-v6 sflow-print-v6.pcap sflow-print-v6.out -vvv
+
+# AHCP and Babel tests
+ahcp-vv ahcp.pcapng ahcp-vv.out -vv
+babel1 babel.pcap babel1.out
+babel1v babel.pcap babel1v.out -v
+babel_auth babel_auth.pcap babel_auth.out -v
+babel_pad1 babel_pad1.pcap babel_pad1.out
+babel_rtt babel_rtt.pcap babel_rtt.out -v
+babel_rfc6126bis babel_rfc6126bis.pcap babel_rfc6126bis.out -v
+
+# PPPoE tests
+pppoe pppoe.pcap pppoe.out
+pppoes pppoes.pcap pppoes.out
+pppoes_id pppoes.pcap pppoes_id.out pppoes 0x3b
+
+# PPP invalid
+truncated_aack truncated-aack.pcap trunc_aack.out
+ppp-invalid-lengths ppp-invalid-lengths.pcap ppp-invalid-lengths.out -v
+
+# IGMP tests
+igmpv1 IGMP_V1.pcap igmpv1.out
+igmpv2 IGMP_V2.pcap igmpv2.out
+igmpv3-queries igmpv3-queries.pcap igmpv3-queries.out
+mtrace mtrace.pcap mtrace.out
+dvmrp mrinfo_query.pcap dvmrp.out
+
+# ICMPv6
+icmpv6 icmpv6.pcap icmpv6.out -vv
+icmpv6_opt24-v icmpv6_opt24.pcap icmpv6_opt24-v.out -v
+icmpv6-length-zero icmpv6-length-zero.pcapng icmpv6-length-zero.out
+icmpv6-rfc7112 icmpv6-rfc7112.pcap icmpv6-rfc7112.out
+icmpv6-RFC2894-RR icmpv6-RFC2894-RR.pcap icmpv6-RFC2894-RR.out
+icmpv6-RFC2894-RR-v icmpv6-RFC2894-RR.pcap icmpv6-RFC2894-RR-v.out -v
+icmpv6-ni-flags icmpv6-ni-flags.pcap icmpv6-ni-flags.out
+
+# SPB tests
+spb spb.pcap spb.out
+
+# SPB BPDUv4 tests
+spb_bpduv4 spb_bpduv4.pcap spb_bpduv4.out
+spb_bpduv4-v spb_bpduv4.pcap spb_bpduv4-v.out -v
+
+# DCB Tests
+dcb_ets dcb_ets.pcap dcb_ets.out -vv
+dcb_pfc dcb_pfc.pcap dcb_pfc.out -vv
+dcb_qcn dcb_qcn.pcap dcb_qcn.out -vv
+
+# EVB tests
+evb evb.pcap evb.out -vv
+
+# STP tests
+mstp-v MSTP_Intra-Region_BPDUs.pcap mstp-v.out -v
+stp-v 802.1D_spanning_tree.pcap stp-v.out -v
+rstp-v 802.1w_rapid_STP.pcap rstp-v.out -v
+rpvst-v rpvstp-trunk-native-vid5.pcap rpvst-v.out -v
+
+# RIP tests
+ripv1v2 ripv1v2.pcap ripv1v2.out -v
+ripv2_auth ripv2_auth.pcap ripv2_auth.out -v
+
+# RIP invalid
+ripv2-invalid-length ripv2-invalid-length.pcap ripv2-invalid-length.out -v
+
+# DHCPv6 tests
+dhcpv6-aftr-name dhcpv6-AFTR-Name-RFC6334.pcap dhcpv6-AFTR-Name-RFC6334.out -v
+dhcpv6-ia-na dhcpv6-ia-na.pcap dhcpv6-ia-na.out -v
+dhcpv6-ia-pd dhcpv6-ia-pd.pcap dhcpv6-ia-pd.out -v
+dhcpv6-ia-ta dhcpv6-ia-ta.pcap dhcpv6-ia-ta.out -v
+dhcpv6-ntp-server dhcpv6-ntp-server.pcap dhcpv6-ntp-server.out -v
+dhcpv6-sip-server-d dhcpv6-sip-server-d.pcap dhcpv6-sip-server-d.out -v
+dhcpv6-domain-list dhcpv6-domain-list.pcap dhcpv6-domain-list.out -v
+dhcpv6-mud dhcpv6-mud.pcap dhcpv6-mud.out -vv
+
+# ZeroMQ/PGM tests
+# ZMTP/1.0 over TCP
+zmtp1v zmtp1.pcap zmtp1.out -v -T zmtp1
+# native PGM
+pgmv pgm_zmtp1.pcap pgmv.out -v
+# UDP-encapsulated PGM
+epgmv epgm_zmtp1.pcap epgmv.out -v -T pgm
+# ZMTP/1.0 inside native PGM
+pgm_zmtp1v pgm_zmtp1.pcap pgm_zmtp1v.out -v -T pgm_zmtp1
+# ZMTP/1.0 inside UDP-encapsulated PGM
+epgm_zmtp1v epgm_zmtp1.pcap epgm_zmtp1v.out -v -T pgm_zmtp1
+# fuzzed pcap
+zmtp1-inf-loop-1 zmtp1-inf-loop-1.pcapng zmtp1-inf-loop-1.out -T zmtp1
+
+# native PGM POLL/POLR
+pgm_poll_polr pgm_poll_polr.pcap pgm_poll_polr.out -v
+
+# MS NLB tests
+msnlb msnlb.pcap msnlb.out
+msnlb2 msnlb2.pcapng msnlb2.out
+
+# MPTCP tests
+mptcp-v0 mptcp-v0.pcap mptcp-v0.out
+mptcp-v1 mptcp-v1.pcap mptcp-v1.out
+mptcp-fclose mptcp-fclose.pcap mptcp-fclose.out
+mptcp-aa-v1 mptcp-aa-v1.pcap mptcp-aa-v1.out
+mptcp-aa-echo mptcp-aa-echo.pcap mptcp-aa-echo.out
+
+# TFO tests
+tfo tfo-5c1fa7f9ae91.pcap tfo.out
+# SCPS
+scps_invalid scps_invalid.pcap scps_invalid.out
+
+# IEEE 802.11 tests
+802.11_exthdr ieee802.11_exthdr.pcap ieee802.11_exthdr.out -v
+802.11_rx-stbc ieee802.11_rx-stbc.pcap ieee802.11_rx-stbc.out
+
+# OpenFlow tests
+of10_p3295-vv of10_p3295.pcap of10_p3295-vv.out -vv
+of10_s4810-vvvv of10_s4810.pcap of10_s4810-vvvv.out -vvvv
+of10_pf5240-vv of10_pf5240.pcap of10_pf5240-vv.out -vv
+of10_7050q-v of10_7050q.pcapng of10_7050q-v.out -v
+of10_7050sx_bsn-vv of10_7050sx_bsn.pcap of10_7050sx_bsn-vv.out -vv
+of10_7050sx_bsn-oobr of10_7050sx_bsn-oobr.pcap of10_7050sx_bsn-oobr.out -v
+of13_ericsson of13_ericsson.pcapng of13_ericsson.out
+of13_ericsson-v of13_ericsson.pcapng of13_ericsson-v.out -v
+of13_ericsson-vv of13_ericsson.pcapng of13_ericsson-vv.out -vv
+
+# GeoNetworking and CALM FAST tests
+geonet-calm-fast geonet_and_calm_fast.pcap geonet_and_calm_fast.out -vv
+
+# M3UA tests
+m3ua isup.pcap isup.out
+# In printf_z.tests:
+# m3ua-vv
+
+# NFLOG test case
+nflog-e nflog.pcap nflog-e.out -e
+
+# syslog test case
+syslog-v syslog_udp.pcap syslog-v.out -v
+
+# DNS test cases
+dns_tcp dns_tcp.pcap dns_tcp.out
+dns_tcp-v dns_tcp.pcap dns_tcp-v.out -v
+dns_tcp-vv dns_tcp.pcap dns_tcp-vv.out -vv
+dns_tcp-vvv dns_tcp.pcap dns_tcp-vvv.out -vvv
+dns_udp dns_udp.pcap dns_udp.out
+dns_udp-v dns_udp.pcap dns_udp-v.out -v
+dns_udp-vv dns_udp.pcap dns_udp-vv.out -vv
+dns_udp-vvv dns_udp.pcap dns_udp-vvv.out -vvv
+
+# DNS on non-standard ports.
+dns_tcp_8053 dns_tcp_8053.pcap dns_tcp_8053.out -vv
+dns_tcp_8053-T dns_tcp_8053.pcap dns_tcp_8053-T.out -vv -T domain
+dns_udp_8053 dns_udp_8053.pcap dns_udp_8053.out -vv
+dns_udp_8053-T dns_udp_8053.pcap dns_udp_8053-T.out -vv -T domain
+
+# DNSSEC from https://bugzilla.redhat.com/show_bug.cgi?id=205842, -vv exposes EDNS DO
+dnssec-vv dnssec.pcap dnssec-vv.out -vv
+
+#IPv6 tests
+ipv6-bad-version ipv6-bad-version.pcap ipv6-bad-version.out
+ipv6-routing-header ipv6-routing-header.pcap ipv6-routing-header.out -v
+ipv6-srh-ext-header ipv6-srh-ext-header.pcap ipv6-srh-ext-header.out -v
+ipv6-srh-insert-cksum ipv6-srh-insert-cksum.pcap ipv6-srh-insert-cksum.out -v
+ipv6-srh-ipproto-ether-v ipv6-srh-ipproto-ether.pcap ipv6-srh-ipproto-ether-v.out -v
+ipv6-srh-ipproto-ether-ev ipv6-srh-ipproto-ether.pcap ipv6-srh-ipproto-ether-ev.out -ev
+ipv6-too-long-jumbo ipv6-too-long-jumbo.pcap ipv6-too-long-jumbo.out -v
+
+# Loopback/CTP test case
+loopback loopback.pcap loopback.out
+
+# DCCP partial checksums tests
+dccp_partial_csum_v4_simple dccp_partial_csum_v4_simple.pcap dccp_partial_csum_v4_simple.out -vv
+dccp_partial_csum_v4_longer dccp_partial_csum_v4_longer.pcap dccp_partial_csum_v4_longer.out -vv
+dccp_partial_csum_v6_simple dccp_partial_csum_v6_simple.pcap dccp_partial_csum_v6_simple.out -vv
+dccp_partial_csum_v6_longer dccp_partial_csum_v6_longer.pcap dccp_partial_csum_v6_longer.out -vv
+
+# VRRP tests
+vrrp vrrp.pcap vrrp.out
+vrrp-v vrrp.pcap vrrp-v.out -v
+
+# HSRP tests
+hsrp_1 HSRP_coup.pcap hsrp_1.out
+hsrp_1-v HSRP_coup.pcap hsrp_1-v.out -v
+hsrp_2-v HSRP_election.pcap hsrp_2-v.out -v
+hsrp_3-v HSRP_failover.pcap hsrp_3-v.out -v
+
+# PIMv2 tests
+pimv2_dm-v PIM-DM_pruning.pcap pimv2_dm-v.out -v
+pimv2_register-v PIM_register_register-stop.pcap pimv2_register-v.out -v
+pimv2_sm-v PIM-SM_join_prune.pcap pimv2_sm-v.out -v
+pimv2_bootstrap-v PIMv2_bootstrap.pcap pimv2_bootstrap-v.out -v
+pimv2_hellos-v PIMv2_hellos.pcap pimv2_hellos-v.out -v
+pim-packet-assortment pim-packet-assortment.pcap pim-packet-assortment.out
+pim-packet-assortment-v pim-packet-assortment.pcap pim-packet-assortment-v.out -v
+pim-packet-assortment-vv pim-packet-assortment.pcap pim-packet-assortment-vv.out -vv
+
+# IS-IS tests
+isis_infloop-v isis-infinite-loop.pcap isis_infloop-v.out -v
+isis_poi-v isis_poi.pcap isis_poi.out -v
+isis_poi2-v isis_poi2.pcap isis_poi2.out -v
+isis_1 ISIS_external_lsp.pcap isis_1.out
+isis_1-v ISIS_external_lsp.pcap isis_1-v.out -v
+isis_2-v ISIS_level1_adjacency.pcap isis_2-v.out -v
+isis_3-v ISIS_level2_adjacency.pcap isis_3-v.out -v
+isis_4-v ISIS_p2p_adjacency.pcap isis_4-v.out -v
+isis_cap_tlv isis_cap_tlv.pcap isis_cap_tlv.out -v
+isis_iid-v isis_iid_tlv.pcap isis_iid_tlv.out -v
+isis_sr-v isis_sr.pcapng isis_sr.out -v
+# fuzzed pcap
+# isis-seg-fault-1-v is now conditionally handled by isis-seg-fault-1-v.tests
+isis-seg-fault-2-v isis-seg-fault-2.pcapng isis-seg-fault-2-v.out -v
+isis-seg-fault-3-v isis-seg-fault-3.pcapng isis-seg-fault-3-v.out -v
+isis_sid isis_sid.pcap isis_sid.out -v
+
+# RSVP tests
+# In printf_z.tests:
+# rsvp_infloop-v
+rsvp_cap rsvp_cap.pcap rsvp_cap.out -v
+# fuzzed pcap
+rsvp-inf-loop-2-v rsvp-inf-loop-2.pcapng rsvp-inf-loop-2-v.out -v
+
+# HDLC tests
+hdlc1 chdlc-slarp.pcap hdlc1.out
+hdlc2 chdlc-slarp-short.pcap hdlc2.out
+hdlc3 HDLC.pcap hdlc3.out
+hdlc4 hdlc_slarp.pcapng hdlc4.out
+
+# DECnet test case
+# In printf_z.tests:
+# decnet
+
+# RADIUS tests
+radius-v RADIUS.pcap radius-v.out -v
+radius-rfc3162 RADIUS-RFC3162.pcap radius-rfc3162-v.out -v
+radius-rfc4675 RADIUS-RFC4675.pcap radius-rfc4675-v.out -v
+radius-rfc5176 RADIUS-RFC5176.pcap radius-rfc5176-v.out -v
+radius-port1700 RADIUS-port1700.pcap radius-port1700-v.out -v
+radius-rfc5176-2 RADIUS-RFC5176-2.pcap radius-rfc5176-2-v.out -v
+radius-rfc5447 RADIUS-RFC5447.pcap radius-rfc5447-v.out -v
+radius-rfc5580 RADIUS-RFC5580.pcap radius-rfc5580-v.out -v
+
+# link-level protocols
+dtp-v DTP.pcap dtp-v.out -v
+lacp-ev LACP.pcap lacp-ev.out -e -v
+lldp_cdp-ev LLDP_and_CDP.pcap lldp_cdp-ev.out -e -v
+cdp-v 3560_CDP.pcap cdp-v.out -v
+udld-v UDLD.pcap udld-v.out -v
+lldp_mud-v lldp_mudurl.pcap lldp_mudurl-v.out -e -v
+lldp_mud-vv lldp_mudurl.pcap lldp_mudurl-vv.out -e -vv
+lldp_8021_linkagg-v lldp_8021_linkagg.pcap lldp_8021_linkagg-v.out -v
+lldp_8021_linkagg-vv lldp_8021_linkagg.pcap lldp_8021_linkagg-vv.out -vv
+# fuzzed pcap
+udld-inf-loop-1-v udld-inf-loop-1.pcapng udld-inf-loop-1-v.out -v
+
+# EIGRP tests
+eigrp1-v EIGRP_adjacency.pcap eigrp1-v.out -v
+eigrp2-v EIGRP_goodbye.pcap eigrp2-v.out -v
+eigrp3-v EIGRP_subnet_down.pcap eigrp3-v.out -v
+eigrp4-v EIGRP_subnet_up.pcap eigrp4-v.out -v
+eigrp5 EIGRP_ipv6.pcap eigrp5.out
+
+# ATA-over-Ethernet tests
+aoe_1 AoE_Linux.pcap aoe_1.out
+aoe_1-v AoE_Linux.pcap aoe_1-v.out -v
+
+# Geneve tests
+geneve-vv geneve.pcap geneve-vv.out -vv
+geneve-vni geneve.pcap geneve-vni.out geneve 0xb
+geneve-tcp geneve.pcap geneve-tcp.out "geneve && tcp"
+
+# DHCP tests
+dhcp-rfc3004 dhcp-rfc3004.pcap dhcp-rfc3004-v.out -v
+dhcp-rfc4388 dhcp-rfc4388.pcap dhcp-rfc4388.out -v
+dhcp-rfc5859 dhcp-rfc5859.pcap dhcp-rfc5859-v.out -v
+dhcp-mud dhcp-mud.pcap dhcp-mud.out -vv
+
+# VXLAN tests
+vxlan vxlan.pcap vxlan.out -e
+
+# PPTP tests
+pptp pptp.pcap pptp.out
+pptp-v pptp.pcap pptp-v.out -v
+
+# CVEs 2014 malformed packets from Steffen Bauch
+cve-2014-8767-OLSR cve-2014-8767-OLSR.pcap cve-2014-8767-OLSR.out -v
+cve-2014-8768-Geonet cve-2014-8768-Geonet.pcap cve-2014-8768-Geonet.out -v
+cve-2014-8769-AODV cve-2014-8769-AODV.pcap cve-2014-8769-AODV.out -v
+
+# bad packets from Kevin Day
+# cve-2015-2155 -- fuzz testing on FORCES printer
+kday1 kday1.pcap kday1.out -v
+# cve-2015-2153 -- fuzz testing on TCP printer
+kday2 kday2.pcap kday2.out -v
+# cve-2015-2153 -- fuzz testing on TCP printer
+kday3 kday3.pcap kday3.out -v
+# cve-2015-2153 -- fuzz testing on TCP printer
+kday4 kday4.pcap kday4.out -v
+# cve-2015-2153 -- fuzz testing on TCP printer
+kday5 kday5.pcap kday5.out -v
+# cve-2015-2154 -- ethernet printer
+kday6 kday6.pcap kday6.out -v
+# cve-2015-2153 -- fuzz testing on TCP printer
+kday7 kday7.pcap kday7.out -v
+# cve-2015-2153 -- fuzz testing on TCP printer
+kday8 kday8.pcap kday8.out -v
+
+# bad packets from reversex86.
+cve2015-0261_01 cve2015-0261-ipv6.pcap cve2015-0261-ipv6.out -v
+cve2015-0261_02 cve2015-0261-crash.pcap cve2015-0261-crash.out -v
+
+# OLSRv1 tests
+olsrv1_1 OLSRv1_HNA_sgw_1.pcap OLSRv1_HNA_sgw_1.out -v
+
+# tests with unaligned data, to make sure they work on SPARC
+unaligned-nfs-1 unaligned-nfs-1.pcap unaligned-nfs-1.out -v
+
+# LISP tests
+lisp_eid_notify lisp_eid_notify.pcap lisp_eid_notify.out -v
+lisp_eid_register lisp_eid_register.pcap lisp_eid_register.out -v
+lisp_ipv6_eid lisp_ipv6.pcap lisp_ipv6.out -v
+
+# NSH tests
+nsh nsh.pcap nsh.out
+nsh-vvv nsh.pcap nsh-vvv.out -vvv
+nsh-over-vxlan-gpe nsh-over-vxlan-gpe.pcap nsh-over-vxlan-gpe.out
+nsh-over-vxlan-gpe-v nsh-over-vxlan-gpe.pcap nsh-over-vxlan-gpe-v.out -v
+nsh-over-vxlan-gpe-vv nsh-over-vxlan-gpe.pcap nsh-over-vxlan-gpe-vv.out -vv
+nsh-over-vxlan-gpe-vvv nsh-over-vxlan-gpe.pcap nsh-over-vxlan-gpe-vvv.out -vvv
+
+# RESP tests
+resp_1 resp_1_benchmark.pcap resp_1.out
+resp_2 resp_2_inline.pcap resp_2.out
+resp_3 resp_3_malicious.pcap resp_3.out
+
+# TFTP tests
+tftp tftp.pcap tftp.out
+tftp-T tftp.pcap tftp-T.out -T tftp
+
+# WHOIS tests
+whois whois.pcap whois.out
+whois-v whois.pcap whois-v.out -v
+
+# HNCP tests
+hncp hncp.pcap hncp.out -vvv
+
+# BFD tests with authentication fields
+bfd-raw-auth-simple bfd-raw-auth-simple.pcap bfd-raw-auth-simple.out
+bfd-raw-auth-simple-v bfd-raw-auth-simple.pcap bfd-raw-auth-simple-v.out -v
+bfd-raw-auth-md5 bfd-raw-auth-md5.pcap bfd-raw-auth-md5.out
+bfd-raw-auth-md5-v bfd-raw-auth-md5.pcap bfd-raw-auth-md5-v.out -v
+bfd-raw-auth-sha1 bfd-raw-auth-sha1.pcap bfd-raw-auth-sha1.out
+bfd-raw-auth-sha1-v bfd-raw-auth-sha1.pcap bfd-raw-auth-sha1-v.out -v
+
+# bad packets from Hanno Böck
+# heap-overflow-1 is in non-bsd.tests
+heap-overflow-2 heap-overflow-2.pcap heap-overflow-2.out -v
+heapoverflow-atalk_print heapoverflow-atalk_print.pcap heapoverflow-atalk_print.out -v
+heapoverflow-atalk_2 heapoverflow-atalk_2.pcap heapoverflow-atalk_2.out -v
+heapoverflow-ppp_hdlc_if_print heapoverflow-ppp_hdlc_if_print.pcap heapoverflow-ppp_hdlc_if_print.out -v
+heapoverflow-q933_printq heapoverflow-q933_printq.pcap heapoverflow-q933_printq.out -v
+heapoverflow-sl_if_print heapoverflow-sl_if_print.pcap heapoverflow-sl_if_print.out -v
+heapoverflow-ip_demux_print heapoverflow-ip_demux_print.pcap heapoverflow-ip_demux_print.out -v
+heapoverflow-in_checksum heapoverflow-in_checksum.pcap heapoverflow-in_checksum.out -v
+heapoverflow-tcp_print heapoverflow-tcp_print.pcap heapoverflow-tcp_print.out -v
+gre-heapoverflow-1 gre-heapoverflow-1.pcap gre-heapoverflow-1.out -v
+gre-heapoverflow-2 gre-heapoverflow-2.pcap gre-heapoverflow-2.out -v
+calm-fast-mac-lookup-heapoverflow calm-fast-mac-lookup-heapoverflow.pcap calm-fast-mac-lookup-heapoverflow.out -v
+geonet-mac-lookup-heapoverflow geonet-mac-lookup-heapoverflow.pcap geonet-mac-lookup-heapoverflow.out -v
+radiotap-heapoverflow radiotap-heapoverflow.pcap radiotap-heapoverflow.out -v
+isoclns-heapoverflow isoclns-heapoverflow.pcap isoclns-heapoverflow.out -v
+tcp-auth-heapoverflow tcp-auth-heapoverflow.pcap tcp-auth-heapoverflow.out -v
+frf15-heapoverflow frf15-heapoverflow.pcap frf15-heapoverflow.out -v
+atm-oam-heapoverflow atm-oam-heapoverflow.pcap atm-oam-heapoverflow.out -v
+tcp_header_heapoverflow tcp_header_heapoverflow.pcap tcp_header_heapoverflow.out -v
+ipcomp-heapoverflow ipcomp-heapoverflow.pcap ipcomp-heapoverflow.out -v
+llc-xid-heapoverflow llc-xid-heapoverflow.pcap llc-xid-heapoverflow.out -v
+udp-length-heapoverflow udp-length-heapoverflow.pcap udp-length-heapoverflow.out -v
+aarp-heapoverflow-1 aarp-heapoverflow-1.pcap aarp-heapoverflow-1.out -v
+aarp-heapoverflow-2 aarp-heapoverflow-2.pcap aarp-heapoverflow-2.out -v
+mpls-label-heapoverflow mpls-label-heapoverflow.pcap mpls-label-heapoverflow.out -v
+bad-ipv4-version-pgm-heapoverflow bad-ipv4-version-pgm-heapoverflow.pcap bad-ipv4-version-pgm-heapoverflow.out -v
+stp-heapoverflow-1 stp-heapoverflow-1.pcap stp-heapoverflow-1.out -v
+stp-heapoverflow-2 stp-heapoverflow-2.pcap stp-heapoverflow-2.out -v
+stp-heapoverflow-3 stp-heapoverflow-3.pcap stp-heapoverflow-3.out -v
+stp-heapoverflow-4 stp-heapoverflow-4.pcap stp-heapoverflow-4.out -v
+arp-too-long-tha arp-too-long-tha.pcap arp-too-long-tha.out -v
+juniper_header-heapoverflow juniper_header-heapoverflow.pcap juniper_header-heapoverflow.out -v
+tftp-heapoverflow tftp-heapoverflow.pcap tftp-heapoverflow.out -v
+relts-0x80000000 relts-0x80000000.pcap relts-0x80000000.out -v
+
+# bad packets from Brian Carpenter
+ipv6hdr-heapoverflow ipv6hdr-heapoverflow.pcap ipv6hdr-heapoverflow.out
+ipv6hdr-heapoverflow-v ipv6hdr-heapoverflow.pcap ipv6hdr-heapoverflow-v.out -v
+otv-heapoverflow-1 otv-heapoverflow-1.pcap otv-heapoverflow-1.out
+otv-heapoverflow-2 otv-heapoverflow-2.pcap otv-heapoverflow-2.out
+q933-heapoverflow-2 q933-heapoverflow-2.pcap q933-heapoverflow-2.out
+atm-heapoverflow atm-heapoverflow.pcap atm-heapoverflow.out -e
+ipv6-next-header-oobr-1 ipv6-next-header-oobr-1.pcap ipv6-next-header-oobr-1.out
+ipv6-next-header-oobr-2 ipv6-next-header-oobr-2.pcap ipv6-next-header-oobr-2.out
+ipv6-rthdr-oobr ipv6-rthdr-oobr.pcap ipv6-rthdr-oobr.out
+ieee802.11_tim_ie_oobr ieee802.11_tim_ie_oobr.pcap ieee802.11_tim_ie_oobr.out
+decnet-shorthdr-oobr decnet-shorthdr-oobr.pcap decnet-shorthdr-oobr.out
+isakmp-3948-oobr-2 isakmp-3948-oobr-2.pcap isakmp-3948-oobr-2.out
+ieee802.11_rates_oobr ieee802.11_rates_oobr.pcap ieee802.11_rates_oobr.out
+ipv6-mobility-header-oobr ipv6-mobility-header-oobr.pcap ipv6-mobility-header-oobr.out
+beep-oobr beep-oobr.pcap beep-oobr.out
+
+# bad packets from Kamil Frankowicz
+snmp-heapoverflow-1 snmp-heapoverflow-1.pcap snmp-heapoverflow-1.out
+snmp-heapoverflow-2 snmp-heapoverflow-2.pcap snmp-heapoverflow-2.out
+isoclns-heapoverflow-2 isoclns-heapoverflow-2.pcap isoclns-heapoverflow-2.out -e
+isoclns-heapoverflow-3 isoclns-heapoverflow-3.pcap isoclns-heapoverflow-3.out -e
+stp-v4-length-sigsegv stp-v4-length-sigsegv.pcap stp-v4-length-sigsegv.out
+hoobr_pimv1 hoobr_pimv1.pcap hoobr_pimv1.out
+hoobr_safeputs hoobr_safeputs.pcap hoobr_safeputs.out
+isakmp-rfc3948-oobr isakmp-rfc3948-oobr.pcap isakmp-rfc3948-oobr.out
+isoclns-oobr isoclns-oobr.pcap isoclns-oobr.out
+nfs-attr-oobr nfs-attr-oobr.pcap nfs-attr-oobr.out
+decnet-oobr decnet-oobr.pcap decnet-oobr.out
+ieee802.11_parse_elements_oobr ieee802.11_parse_elements_oobr.pcap ieee802.11_parse_elements_oobr.out
+hoobr_ripng_print hoobr_ripng_print.pcap hoobr_ripng_print.out
+hoobr_juniper hoobr_juniper.pcap hoobr_juniper.out
+hoobr_juniper2 hoobr_juniper2.pcap hoobr_juniper2.out
+hoobr_juniper3 hoobr_juniper3.pcap hoobr_juniper3.out
+hoobr_juniper4 hoobr_juniper4.pcap hoobr_juniper4.out
+hoobr_parse_field hoobr_parse_field.pcap hoobr_parse_field.out
+hoobr_chdlc_print hoobr_chdlc_print.pcap hoobr_chdlc_print.out
+hoobr_lookup_nsap hoobr_lookup_nsap.pcap hoobr_lookup_nsap.out
+hoobr_rt6_print hoobr_rt6_print.pcap hoobr_rt6_print.out
+hoobr_nfs_printfh hoobr_nfs_printfh.pcap hoobr_nfs_printfh.out
+hoobr_aodv_extension hoobr_aodv_extension.pcap hoobr_aodv_extension.out
+hoobr_nfs_xid_map_enter hoobr_nfs_xid_map_enter.pcap hoobr_nfs_xid_map_enter.out
+hoobr_bfd_print hoobr_bfd_print.pcap hoobr_bfd_print.out
+
+# bad packets from Wilfried Kirsch
+slip-bad-direction slip-bad-direction.pcap slip-bad-direction.out -ve
+
+# bad packets from GitHub issues #676 and #677
+slip-compressed_sl_print-oobr slip-compressed_sl_print-oobr.pcap slip-compressed_sl_print-oobr.out -e
+slip-sliplink_print-oobr slip-sliplink_print-oobr.pcap slip-sliplink_print-oobr.out -e
+
+# bad packets from Otto Airamo and Antti Levomäki
+# one more in smb.tests
+arp-oobr arp-oobr.pcap arp-oobr.out -vvv -e
+icmp-cksum-oobr-1 icmp-cksum-oobr-1.pcap icmp-cksum-oobr-1.out -vvv -e
+icmp-cksum-oobr-2 icmp-cksum-oobr-2.pcap icmp-cksum-oobr-2.out -vvv -e
+icmp-cksum-oobr-3 icmp-cksum-oobr-3.pcapng icmp-cksum-oobr-3.out -vvv -e
+icmp-cksum-oobr-4 icmp-cksum-oobr-4.pcapng icmp-cksum-oobr-4.out -vvv -e
+tok2str-oobr-1 tok2str-oobr-1.pcap tok2str-oobr-1.out -vvv -e
+tok2str-oobr-2 tok2str-oobr-2.pcap tok2str-oobr-2.out -vvv -e
+# In printf_z.tests:
+#eigrp-tlv-oobr
+zephyr-oobr zephyr-oobr.pcap zephyr-oobr.out -vvv -e
+isakmp-no-none-np isakmp-no-none-np.pcapng isakmp-no-none-np.out -vvv -e
+telnet-iac-check-oobr telnet-iac-check-oobr.pcap telnet-iac-check-oobr.out -vvv -e
+resp_4_infiniteloop resp_4_infiniteloop.pcapng resp_4_infiniteloop.out -vvv -e
+dns_fwdptr dns_fwdptr.pcap dns_fwdptr.out -vvv -e
+# In printf_z.tests:
+# isis-areaaddr-oobr-1
+# isis-areaaddr-oobr-2
+isis-extd-ipreach-oobr isis-extd-ipreach-oobr.pcap isis-extd-ipreach-oobr.out -vvv -e
+lldp-infinite-loop-1 lldp-infinite-loop-1.pcap lldp-infinite-loop-1.out -vvv -e
+lldp-infinite-loop-2 lldp-infinite-loop-2.pcap lldp-infinite-loop-2.out -vvv -e
+pimv2-oobr-1 pimv2-oobr-1.pcap pimv2-oobr-1.out -vvv -e
+pimv2-oobr-2 pimv2-oobr-2.pcap pimv2-oobr-2.out -vvv -e
+pimv2-oobr-3 pimv2-oobr-3.pcap pimv2-oobr-3.out -vvv -e
+pimv2-oobr-4 pimv2-oobr-4.pcap pimv2-oobr-4.out -vvv -e
+802_15_4-oobr-1 802_15_4-oobr-1.pcap 802_15_4-oobr-1.out -vvv -e
+802_15_4-oobr-2 802_15_4-oobr-2.pcap 802_15_4-oobr-2.out -vvv -e
+802_15_4-data 802_15_4-data.pcap 802_15_4-data.out -vvv -e
+802_15_4_beacon 802_15_4_beacon.pcap 802_15_4_beacon.out -vvv -e
+lmpv1_busyloop lmpv1_busyloop.pcap lmpv1_busyloop.out -vvv -e
+juniper_atm1_oobr juniper_atm1_oobr.pcap juniper_atm1_oobr.out -vvv -e
+juniper_es_oobr juniper_es_oobr.pcap juniper_es_oobr.out -vvv -e
+
+# bad packets from Yannick Formaggio
+l2tp-avp-overflow l2tp-avp-overflow.pcap l2tp-avp-overflow.out -v
+# In printf_z.tests:
+# pktap-heap-overflow
+wb-oobr wb-oobr.pcap wb-oobr.out -v
+
+# bad packets from Bhargava Shastry
+lldp_asan lldp_asan.pcap lldp_asan.out -v
+extract_read2_asan extract_read2_asan.pcap extract_read2_asan.out -v
+getname_2_read4_asan getname_2_read4_asan.pcap getname_2_read4_asan.out -v
+eap_extract_read2_asan eap_extract_read2_asan.pcap eap_extract_read2_asan.out -v
+esis_snpa_asan esis_snpa_asan.pcap esis_snpa_asan.out -v
+esis_snpa_asan-2 esis_snpa_asan-2.pcap esis_snpa_asan-2.out -v
+esis_snpa_asan-3 esis_snpa_asan-3.pcap esis_snpa_asan-3.out -v
+esis_snpa_asan-4 esis_snpa_asan-4.pcap esis_snpa_asan-4.out -v
+esis_snpa_asan-5 esis_snpa_asan-5.pcap esis_snpa_asan-5.out -v
+dhcp6_reconf_asan dhcp6_reconf_asan.pcap dhcp6_reconf_asan.out -v
+pgm_opts_asan pgm_opts_asan.pcap pgm_opts_asan.out -v
+pgm_opts_asan_2 pgm_opts_asan_2.pcap pgm_opts_asan_2.out -v
+pgm_opts_asan_3 pgm_opts_asan_3.pcap pgm_opts_asan_3.out -v
+pgm_group_addr_asan pgm_group_addr_asan.pcap pgm_group_addr_asan.out -v
+vtp_asan vtp_asan.pcap vtp_asan.out -v
+vtp_asan-2 vtp_asan-2.pcap vtp_asan-2.out -v
+vtp_asan-3 vtp_asan-3.pcap vtp_asan-3.out -v
+icmp6_mobileprefix_asan icmp6_mobileprefix_asan.pcap icmp6_mobileprefix_asan.out -v
+ip_printroute_asan ip_printroute_asan.pcap ip_printroute_asan.out -v
+mobility_opt_asan mobility_opt_asan.pcap mobility_opt_asan.out -v
+mobility_opt_asan_2 mobility_opt_asan_2.pcap mobility_opt_asan_2.out -v
+mobility_opt_asan_3 mobility_opt_asan_3.pcap mobility_opt_asan_3.out -v
+mobility_opt_asan_4 mobility_opt_asan_4.pcap mobility_opt_asan_4.out -v
+mobility_opt_asan_5 mobility_opt_asan_5.pcap mobility_opt_asan_5.out -v
+mobility_opt_asan_6 mobility_opt_asan_6.pcap mobility_opt_asan_6.out -v
+mobility_opt_asan_7 mobility_opt_asan_7.pcap mobility_opt_asan_7.out -v
+mobility_opt_asan_8 mobility_opt_asan_8.pcap mobility_opt_asan_8.out -v
+isis_stlv_asan isis_stlv_asan.pcap isis_stlv_asan.out -v
+isis_stlv_asan-2 isis_stlv_asan-2.pcap isis_stlv_asan-2.out -v
+isis_stlv_asan-3 isis_stlv_asan-3.pcap isis_stlv_asan-3.out -v
+isis_stlv_asan-4 isis_stlv_asan-4.pcap isis_stlv_asan-4.out -v
+isis_sysid_asan isis_sysid_asan.pcap isis_sysid_asan.out -v
+lldp_mgmt_addr_tlv_asan lldp_mgmt_addr_tlv_asan.pcap lldp_mgmt_addr_tlv_asan.out -v
+bootp_asan bootp_asan.pcap bootp_asan.out -v
+bootp_asan-2 bootp_asan-2.pcap bootp_asan-2.out -v
+ppp_ccp_config_deflate_option_asan ppp_ccp_config_deflate_option_asan.pcap ppp_ccp_config_deflate_option_asan.out -v
+pim_header_asan pim_header_asan.pcap pim_header_asan.out -v
+pim_header_asan-2 pim_header_asan-2.pcap pim_header_asan-2.out -v
+pim_header_asan-3 pim_header_asan-3.pcap pim_header_asan-3.out -v
+pim_header_asan-4 pim_header_asan-4.pcap pim_header_asan-4.out -v
+ip6_frag_asan ip6_frag_asan.pcap ip6_frag_asan.out -v
+radius_attr_asan radius_attr_asan.pcap radius_attr_asan.out -v
+ospf6_decode_v3_asan ospf6_decode_v3_asan.pcap ospf6_decode_v3_asan.out -v
+ip_ts_opts_asan ip_ts_opts_asan.pcap ip_ts_opts_asan.out -v
+isakmpv1-attr-oobr isakmpv1-attr-oobr.pcap isakmpv1-attr-oobr.out -v
+isakmp-ikev1_n_print-oobr isakmp-ikev1_n_print-oobr.pcap isakmp-ikev1_n_print-oobr.out -v
+ldp-ldp_tlv_print-oobr ldp-ldp_tlv_print-oobr.pcap ldp-ldp_tlv_print-oobr.out -v
+icmp-icmp_print-oobr-1 icmp-icmp_print-oobr-1.pcap icmp-icmp_print-oobr-1.out -v
+icmp-icmp_print-oobr-2 icmp-icmp_print-oobr-2.pcap icmp-icmp_print-oobr-2.out -v
+rsvp-rsvp_obj_print-oobr rsvp-rsvp_obj_print-oobr.pcap rsvp-rsvp_obj_print-oobr.out -v
+vrrp-vrrp_print-oobr vrrp-vrrp_print-oobr.pcap vrrp-vrrp_print-oobr.out -v
+vrrp-vrrp_print-oobr-2 vrrp-vrrp_print-oobr-2.pcap vrrp-vrrp_print-oobr-2.out -v
+bgp-bgp_capabilities_print-oobr-1 bgp-bgp_capabilities_print-oobr-1.pcap bgp-bgp_capabilities_print-oobr-1.out -v
+bgp-bgp_capabilities_print-oobr-2 bgp-bgp_capabilities_print-oobr-2.pcap bgp-bgp_capabilities_print-oobr-2.out -v
+lmp-lmp_print_data_link_subobjs-oobr lmp-lmp_print_data_link_subobjs-oobr.pcap lmp-lmp_print_data_link_subobjs-oobr.out -v
+# The .pcap file is truncated after the 1st packet.
+hncp_dhcpv6data-oobr hncp_dhcpv6data-oobr.pcap hncp_dhcpv6data-oobr.out -v
+hncp_dhcpv4data-oobr hncp_dhcpv4data-oobr.pcap hncp_dhcpv4data-oobr.out -v
+vqp-oobr vqp-oobr.pcap vqp-oobr.out -v
+bgp_pmsi_tunnel-oobr bgp_pmsi_tunnel-oobr.pcap bgp_pmsi_tunnel-oobr.out -v
+bgp_mvpn_6_and_7_oobr bgp_mvpn_6_and_7_oobr.pcap bgp_mvpn_6_and_7_oobr.out -v
+rsvp_fast_reroute-oobr rsvp_fast_reroute-oobr.pcap rsvp_fast_reroute-oobr.out -v
+esis_opt_prot-oobr esis_opt_prot-oobr.pcap esis_opt_prot-oobr.out -v
+rsvp_uni-oobr-1 rsvp_uni-oobr-1.pcap rsvp_uni-oobr-1.out -v
+rsvp_uni-oobr-2 rsvp_uni-oobr-2.pcap rsvp_uni-oobr-2.out -v
+rsvp_uni-oobr-3 rsvp_uni-oobr-3.pcap rsvp_uni-oobr-3.out -v
+rpki-rtr-oobr rpki-rtr-oobr.pcap rpki-rtr-oobr.out -v
+lldp_8023_mtu-oobr lldp_8023_mtu-oobr.pcap lldp_8023_mtu-oobr.out -v
+bgp_vpn_rt-oobr bgp_vpn_rt-oobr.pcap bgp_vpn_rt-oobr.out -v -c1
+cfm_sender_id-oobr cfm_sender_id-oobr.pcap cfm_sender_id-oobr.out -v
+isis-extd-isreach-oobr isis-extd-isreach-oobr.pcap isis-extd-isreach-oobr.out -v
+olsr-oobr-1 olsr-oobr-1.pcap olsr-oobr-1.out -v
+olsr-oobr-2 olsr-oobr-2.pcap olsr-oobr-2.out -v
+ikev1_id_ipv6_addr_subnet-oobr ikev1_id_ipv6_addr_subnet-oobr.pcap ikev1_id_ipv6_addr_subnet-oobr.out -v
+isakmp-various-oobr isakmp-various-oobr.pcap isakmp-various-oobr.out -v
+aoe-oobr-1 aoe-oobr-1.pcap aoe-oobr-1.out -v
+frf16_magic_ie-oobr frf16_magic_ie-oobr.pcap frf16_magic_ie-oobr.out -v
+rx_serviceid_oobr rx_serviceid_oobr.pcap rx_serviceid_oobr.out
+bgp_mp_reach_nlri-oobr bgp_mp_reach_nlri-oobr.pcap bgp_mp_reach_nlri-oobr.out -v
+
+# bad packets from Katie Holly
+mlppp-oobr mlppp-oobr.pcap mlppp-oobr.out
+kh-timed-001-oobr kh-timed-001-oobr.pcap kh-timed-001-oobr.out
+kh-timed-002-oobr kh-timed-002-oobr.pcap kh-timed-002-oobr.out
+kh-timed-004-oobr kh-timed-004-oobr.pcap kh-timed-004-oobr.out
+
+# bad packets from Kim Gwan Yeong
+mptcp-dss-oobr mptcp-dss-oobr.pcap mptcp-dss-oobr.out -v
+icmp6_nodeinfo_oobr icmp6_nodeinfo_oobr.pcap icmp6_nodeinfo_oobr.out
+
+# bad packets from Henri Salo
+rx_ubik-oobr rx_ubik-oobr.pcap rx_ubik-oobr.out
+babel_update_oobr babel_update_oobr.pcap babel_update_oobr.out
+
+# bad packets from Junjie Wang
+ospf6_print_lshdr-oobr ospf6_print_lshdr-oobr.pcap ospf6_print_lshdr-oobr.out -vv
+rpl-dao-oobr rpl-dao-oobr.pcap rpl-dao-oobr.out -vv
+hncp_prefix-oobr hncp_prefix-oobr.pcap hncp_prefix-oobr.out -vvv
+# one more in smb.tests
+
+# bad packets from Ryan Ackroyd
+ieee802.11_meshhdr-oobr ieee802.11_meshhdr-oobr.pcap ieee802.11_meshhdr-oobr.out -H
+dccp_options-oobr dccp_options-oobr.pcap dccp_options-oobr.out -vv
+
+# bad packets from Philippe Antoine
+# now in smb.tests
+
+# RTP tests
+# fuzzed pcap
+rtp-seg-fault-1 rtp-seg-fault-1.pcapng rtp-seg-fault-1.out -v -T rtp
+rtp-seg-fault-2 rtp-seg-fault-2.pcapng rtp-seg-fault-2.out -v -T rtp
+
+# SSH tests
+ssh ssh.pcap ssh.out
+
+# MACsec
+macsec-encrypted macsec-encrypted.pcap macsec-encrypted.out -e
+macsec-changed macsec-changed.pcap macsec-changed.out -e
+macsec-integonly macsec-integonly.pcap macsec-integonly.out -e
+macsec-snap macsec-snap.pcap macsec-snap.out -e
+macsec-short-shorter macsec-short-shorter.pcap macsec-short-shorter.out -e
+macsec-short-longer macsec-short-longer.pcap macsec-short-longer.out -e
+macsec-short-valid macsec-short-valid.pcap macsec-short-valid.out -e
+
+# NFS tests
+# fuzzed pcap
+nfs-write-verf-cookie nfs-write-verf-cookie.pcapng nfs-write-verf-cookie.out -vv
+
+# NFS fuzzed
+nfs-seg-fault-1 nfs-seg-fault-1.pcapng nfs-seg-fault-1.out
+# NFS invalid
+nfs-cannot-pad-32-bit nfs-cannot-pad-32-bit.pcap nfs-cannot-pad-32-bit.out
+
+# DNS infinite loop tests
+#
+# See http://marc.info/?l=tcpdump-workers&m=95552439022555
+#
+# In printf_z.tests:
+# dns-zlip-1
+# dns-zlip-2
+# dns-zlip-3
+
+# NTP tests
+ntp ntp.pcap ntp.out
+ntp-v ntp.pcap ntp-v.out -v
+ntp-time ntp-time.pcap ntp-time.out
+ntp-time--v ntp-time.pcap ntp-time--v.out -v
+ntp-time--vv ntp-time.pcap ntp-time--vv.out -vv
+ntp-time--vvv ntp-time.pcap ntp-time--vvv.out -vvv
+ntp-control ntp-control.pcap ntp-control.out
+ntp-control--v ntp-control.pcap ntp-control--v.out -v
+ntp-control--vv ntp-control.pcap ntp-control--vv.out -vv
+ntp-control--vvv ntp-control.pcap ntp-control--vvv.out -vvv
+ntp-mode7 ntp-mode7.pcap ntp-mode7.out
+ntp-mode7--v ntp-mode7.pcap ntp-mode7--v.out -v
+ntp-mode7--vv ntp-mode7.pcap ntp-mode7--vv.out -vv
+ntp-mode7--vvv ntp-mode7.pcap ntp-mode7--vvv.out -vvv
+
+# RX/AFS
+rx afs.pcap rx.out
+rx-v afs.pcap rx-v.out -v
+
+# Empty pcap/pcapng tests
+empty-pcap empty.pcap empty.out
+empty-pcapng empty.pcapng empty.out
+
+# DNS Extended rcode tests
+dns-badcookie dns-badcookie.pcap dns-badcookie.out
+dns-badvers dns-badvers.pcap dns-badvers.out
+
+# LLDP
+lldp-app-priority lldp-app-priority.pcap lldp-app-priority.out -v
+
+# DNS URI RR support tests
+dns-uri dns-uri.pcap dns-uri.out
+
+# AF_VSOCK tests
+vsock-1 vsock-1.pcapng vsock-1.out
+vsock-1-v vsock-1.pcapng vsock-1-v.out -v
+vsock-1-vv vsock-1.pcapng vsock-1-vv.out -vv
+#IP over infinband (ipoib)
+ipoib ipoib.pcap ipoib.out
+ipoib-e ipoib.pcap ipoib-e.out -e
+
+# BFD multihop and lag (RFC5883 & 7130)
+bfd-multihop bfd-multihop.pcap bfd-multihop.out
+bfd-multihop-v bfd-multihop.pcap bfd-multihop-v.out -v
+bfd-lag bfd-lag.pcap bfd-lag.out
+bfd-lag-v bfd-lag.pcap bfd-lag-v.out -v
+
+# Arista Vendor Specific Tests
+arista-ether arista_ether.pcap arista_ether.out
+arista-ether-e arista_ether.pcap arista_ether-e.out -e
+arista-ether-ev arista_ether.pcap arista_ether-ev.out -ev
+
+# TIPC length field test
+huge-tipc-messages huge-tipc-messages.pcap huge-tipc-messages.out
+
+# CVE-2018-10105 bad packets from Luis Rocha
+# In printf_z.tests:
+# sflow_print-segv
+# two more in smb.tests
+
+#ptp tests
+ptp ptp.pcap ptp.out
+ptp_ethernet ptp_ethernet.pcap ptp_ethernet.out -e
+ptp_corrections ptp_corrections.pcap ptp_corrections.out
+
+# bad packets from Jason Xiaole
+ldp_tlv_print-oobr ldp_tlv_print-oobr.pcap ldp_tlv_print-oobr.out -v
+
+# bad packets from Hardik Shah
+dns-badlabel dns-badlabel.pcap dns-badlabel.out -vv
+igrp-oobr igrp-oobr.pcap igrp-oobr.out -v
+
+#someip tests
+someip1 someip1.pcap someip1.out
+someip2 someip2.pcap someip2.out
+
+# EDNS Options
+edns-opts edns-opts.pcap edns-opts.out
+edns-opts-v edns-opts.pcap edns-opts-v.out -v
+edns-opts-vv edns-opts.pcap edns-opts-vv.out -vv
+
+# unsupported link types
+unsupported-link-type-160 unsupported-link-type-160.pcap unsupported-link-type-160.out
+unsupported-link-type-dbus unsupported-link-type-dbus.pcap unsupported-link-type-dbus.out
+
+# LSP Ping
+lsp-ping-timestamp lsp-ping-timestamp.pcap lsp-ping-timestamp.out -vv
+
+# lwres with "extra" bytes
+lwres_with_extra lwres_with_extra.pcap lwres_with_extra.out
diff --git a/tests/TESTrun b/tests/TESTrun
new file mode 100755
index 0000000..1843bc5
--- /dev/null
+++ b/tests/TESTrun
@@ -0,0 +1,502 @@
+#!/usr/bin/env perl
+
+#
+# Were we told where to find tcpdump?
+#
+if (!($TCPDUMP = $ENV{TCPDUMP_BIN})) {
+ #
+ # No. Use the appropriate path.
+ #
+ if ($^O eq 'MSWin32') {
+ #
+ # XXX - assume, for now, a Visual Studio debug build, so that
+ # tcpdump is in the Debug subdirectory.
+ #
+ $TCPDUMP = "Debug\\tcpdump"
+ } else {
+ $TCPDUMP = "./tcpdump"
+ }
+}
+
+#
+# Make true and false work as Booleans.
+#
+use constant true => 1;
+use constant false => 0;
+
+use File::Basename;
+use POSIX qw( WEXITSTATUS WIFEXITED);
+use Cwd qw(abs_path getcwd);
+use File::Path qw(mkpath); # mkpath works with ancient perl, as well as newer perl
+use File::Spec;
+use Data::Dumper; # for debugging.
+
+# these are created in the directory where we are run, which might be
+# a build directory.
+my $newdir = "tests/NEW";
+my $diffdir= "tests/DIFF";
+mkpath($newdir);
+mkpath($diffdir);
+my $origdir = getcwd();
+my $srcdir = $ENV{'srcdir'} || ".";
+# Default to unified diff and allow to fall back to basic diff if necessary.
+my $diff_flags = defined $ENV{'DIFF_FLAGS'} ? $ENV{'DIFF_FLAGS'} : '-u';
+
+#
+# Force UTC, so time stamps are printed in a standard time zone, and
+# tests don't have to be run in the time zone in which the output
+# file was generated.
+#
+$ENV{'TZ'}='GMT0';
+
+#
+# Get the tests directory from $0.
+#
+my $testsdir = dirname($0);
+
+#
+# Convert it to an absolute path, so it works even after we do a cd.
+#
+$testsdir = abs_path($testsdir);
+print "Running tests from ${testsdir}\n";
+print "with ${TCPDUMP}, version:\n";
+system "${TCPDUMP} --version";
+
+unshift(@INC, $testsdir);
+
+$passedcount = 0;
+$failedcount = 0;
+#
+my $failureoutput=$origdir . "/tests/failure-outputs.txt";
+
+# truncate the output file
+open(FAILUREOUTPUT, ">" . $failureoutput);
+close(FAILUREOUTPUT);
+
+$confighhash = undef;
+
+sub showfile {
+ local($path) = @_;
+
+ #
+ # XXX - just do this directly in Perl?
+ #
+ if ($^O eq 'MSWin32') {
+ my $winpath = File::Spec->canonpath($path);
+ system "type $winpath";
+ } else {
+ system "cat $path";
+ }
+}
+
+sub runtest {
+ local($name, $input, $output, $options) = @_;
+ my $r;
+
+ $outputbase = basename($output);
+ my $coredump = false;
+ my $status = 0;
+ my $linecount = 0;
+ my $rawstderrlog = "tests/NEW/${outputbase}.raw.stderr";
+ my $stderrlog = "tests/NEW/${outputbase}.stderr";
+ my $diffstat = 0;
+ my $errdiffstat = 0;
+
+ # we used to do this as a nice pipeline, but the problem is that $r fails to
+ # to be set properly if the tcpdump core dumps.
+ #
+ # Furthermore, on Windows, fc can't read the standard input, so we
+ # can't do it as a pipeline in any case.
+ $r = system "$TCPDUMP -# -n -r $input $options >tests/NEW/${outputbase} 2>${rawstderrlog}";
+ if($r != 0) {
+ #
+ # Something other than "tcpdump opened the file, read it, and
+ # dissected all the packets". What happened?
+ #
+ # We write out an exit status after whatever the subprocess
+ # wrote out, so it shows up when we diff the expected output
+ # with it.
+ #
+ open(OUTPUT, ">>"."tests/NEW/$outputbase") || die "fail to open $outputbase\n";
+ if($r == -1) {
+ # failed to start due to error.
+ $status = $!;
+ printf OUTPUT "FAILED TO RUN: status: %d\n", $status;
+ } else {
+ if ($^O eq 'MSWin32' or $^O eq 'msys') {
+ #
+ # On Windows, the return value of system is the lower 8
+ # bits of the exit status of the process, shifted left
+ # 8 bits.
+ #
+ # If the process crashed, rather than exiting, the
+ # exit status will be one of the EXCEPTION_ values
+ # listed in the documentation for the GetExceptionCode()
+ # macro.
+ #
+ # Those are defined as STATUS_ values, which should have
+ # 0xC in the topmost 4 bits (being fatal error
+ # statuses); some of them have a value that fits in
+ # the lower 8 bits. We could, I guess, assume that
+ # any value that 1) isn't returned by tcpdump and 2)
+ # corresponds to the lower 8 bits of a STATUS_ value
+ # used as an EXCEPTION_ value indicates that tcpdump
+ # exited with that exception.
+ #
+ # However, as we're running tcpdump with system, which
+ # runs the command through cmd.exe, and as cmd.exe
+ # doesn't map the command's exit code to its own exit
+ # code in any straightforward manner, we can't get
+ # that information in any case, so there's no point
+ # in trying to interpret it in that fashion.
+ #
+ $status = $r >> 8;
+ } else {
+ #
+ # On UN*Xes, the return status is a POSIX as filled in
+ # by wait() or waitpid().
+ #
+ # POSIX offers some calls for analyzing it, such as
+ # WIFSIGNALED() to test whether it indicates that the
+ # process was terminated by a signal, WTERMSIG() to
+ # get the signal number from it, WIFEXITED() to test
+ # whether it indicates that the process exited normally,
+ # and WEXITSTATUS() to get the exit status from it.
+ #
+ # POSIX doesn't standardize core dumps, so the POSIX
+ # calls can't test whether a core dump occurred.
+ # However, all the UN*Xes we are likely to encounter
+ # follow Research UNIX in this regard, with the exit
+ # status containing either 0 or a signal number in
+ # the lower 7 bits, with 0 meaning "exited rather
+ # than being terminated by a signal", the "core dumped"
+ # flag in the 0x80 bit, and, if the signal number is
+ # 0, the exit status in the next 8 bits up.
+ #
+ # This should be cleaned up to use the POSIX calls
+ # from the Perl library - and to define an additional
+ # WCOREDUMP() call to test the "core dumped" bit and
+ # use that.
+ #
+ # But note also that, as we're running tcpdump with
+ # system, which runs the command through a shell, if
+ # tcpdump crashes, we'll only know that if the shell
+ # maps the signal indication and uses that as its
+ # exit status.
+ #
+ # The good news is that the Bourne shell, and compatible
+ # shells, have traditionally done that. If the process
+ # for which the shell reports the exit status terminates
+ # with a signal, it adds 128 to the signal number and
+ # returns that as its exit status. (This is why the
+ # "this is now working right" behavior described in a
+ # comment below is occurring.)
+ #
+ # As tcpdump itself never returns with an exit status
+ # >= 128, we can try checking for an exit status with
+ # the 0x80 bit set and, if we have one, get the signal
+ # number from the lower 7 bits of the exit status. We
+ # can't get the "core dumped" indication from the
+ # shell's exit status; all we can do is check whether
+ # there's a core file.
+ #
+ if( $r & 128 ) {
+ $coredump = $r & 127;
+ }
+ if( WIFEXITED($r)) {
+ $status = WEXITSTATUS($r);
+ }
+ }
+
+ if($coredump || $status) {
+ printf OUTPUT "EXIT CODE %08x: dump:%d code: %d\n", $r, $coredump, $status;
+ } else {
+ printf OUTPUT "EXIT CODE %08x\n", $r;
+ }
+ $r = 0;
+ }
+ close(OUTPUT);
+ }
+ if($r == 0) {
+ #
+ # Compare tcpdump's output with what we think it should be.
+ # If tcpdump failed to produce output, we've produced our own
+ # "output" above, with the exit status.
+ #
+ if ($^O eq 'MSWin32') {
+ my $winoutput = File::Spec->canonpath($output);
+ $r = system "fc /lb1000 /t /1 $winoutput tests\\NEW\\$outputbase >tests\\DIFF\\$outputbase.diff";
+ $diffstat = $r >> 8;
+ } else {
+ $r = system "diff $diff_flags $output tests/NEW/$outputbase >tests/DIFF/$outputbase.diff";
+ $diffstat = WEXITSTATUS($r);
+ }
+ }
+
+ # process the standard error file, sanitize "reading from" line,
+ # and count lines
+ $linecount = 0;
+ open(ERRORRAW, "<" . $rawstderrlog);
+ open(ERROROUT, ">" . $stderrlog);
+ while(<ERRORRAW>) {
+ next if /^$/; # blank lines are boring
+ if(/^(reading from file )(.*)(,.*)$/) {
+ my $filename = basename($2);
+ print ERROROUT "${1}${filename}${3}\n";
+ next;
+ }
+ print ERROROUT;
+ $linecount++;
+ }
+ close(ERROROUT);
+ close(ERRORRAW);
+
+ if ( -f "$output.stderr" ) {
+ #
+ # Compare the standard error with what we think it should be.
+ #
+ if ($^O eq 'MSWin32') {
+ my $winoutput = File::Spec->canonpath($output);
+ my $canonstderrlog = File::Spec->canonpath($stderrlog);
+ $nr = system "fc /lb1000 /t /1 $winoutput.stderr $canonstderrlog >tests\DIFF\$outputbase.stderr.diff";
+ $errdiffstat = $nr >> 8;
+ } else {
+ $nr = system "diff $output.stderr $stderrlog >tests/DIFF/$outputbase.stderr.diff";
+ $errdiffstat = WEXITSTATUS($nr);
+ }
+ if($r == 0) {
+ $r = $nr;
+ }
+ }
+
+ if($r == 0) {
+ if($linecount == 0 && $status == 0) {
+ unlink($stderrlog);
+ } else {
+ $errdiffstat = 1;
+ }
+ }
+
+ #print sprintf("END: %08x\n", $r);
+
+ if($r == 0) {
+ if($linecount == 0) {
+ printf " %-40s: passed\n", $name;
+ } else {
+ printf " %-40s: passed with error messages:\n", $name;
+ showfile($stderrlog);
+ }
+ unlink "tests/DIFF/$outputbase.diff";
+ return 0;
+ }
+ # must have failed!
+ printf " %-40s: TEST FAILED(exit core=%d/diffstat=%d,%d/r=%d)", $name, $coredump, $diffstat, $errdiffstat, $r;
+ open FOUT, '>>tests/failure-outputs.txt';
+ printf FOUT "\nFailed test: $name\n\n";
+ close FOUT;
+ if(-f "tests/DIFF/$outputbase.diff") {
+ #
+ # XXX - just do this directly in Perl?
+ #
+ if ($^O eq 'MSWin32') {
+ system "type tests\\DIFF\\$outputbase.diff >> tests\\failure-outputs.txt";
+ } else {
+ system "cat tests/DIFF/$outputbase.diff >> tests/failure-outputs.txt";
+ }
+ }
+
+ if($r == -1) {
+ print " (failed to execute: $!)\n";
+ return(30);
+ }
+
+ # this is not working right, $r == 0x8b00 when there is a core dump.
+ # clearly, we need some platform specific perl magic to take this apart, so look for "core"
+ # too.
+ # In particular, on Solaris 10 SPARC an alignment problem results in SIGILL,
+ # a core dump and $r set to 0x00008a00 ($? == 138 in the shell).
+ if($r & 127 || -f "core") {
+ my $with = ($r & 128) ? 'with' : 'without';
+ if(-f "core") {
+ $with = "with";
+ }
+ printf " (terminated with signal %u, %s coredump)", ($r & 127), $with;
+ if($linecount == 0) {
+ print "\n";
+ } else {
+ print " with error messages:\n";
+ showfile($stderrlog);
+ }
+ return(($r & 128) ? 10 : 20);
+ }
+ if($linecount == 0) {
+ print "\n";
+ } else {
+ print " with error messages:\n";
+ showfile($stderrlog);
+ }
+ return(5);
+}
+
+sub loadconfighash {
+ if(defined($confighhash)) {
+ return $confighhash;
+ }
+
+ $main::confighhash = {};
+
+ # this could be loaded once perhaps.
+ open(CONFIG_H, "config.h") || die "Can not open config.h: $!\n";
+ while(<CONFIG_H>) {
+ chomp;
+ if(/^\#define (.*) 1/) {
+ #print "Setting $1\n";
+ $main::confighhash->{$1} = 1;
+ }
+ }
+ close(CONFIG_H);
+ #print Dumper($main::confighhash);
+
+ # also run tcpdump --fp-type to get the type of floating-point
+ # arithmetic we're doing, setting a HAVE_{fptype} key based
+ # on the value it prints
+ open(FPTYPE_PIPE, "$TCPDUMP --fp-type |") or die("piping tcpdump --fp-type failed\n");
+ my $fptype_val = <FPTYPE_PIPE>;
+ close(FPTYPE_PIPE);
+ my $have_fptype;
+ if($fptype_val == "9877.895") {
+ $have_fptype = "HAVE_FPTYPE1";
+ } else {
+ $have_fptype = "HAVE_FPTYPE2";
+ }
+ $main::confighhash->{$have_fptype} = 1;
+
+ # and check whether this is OpenBSD, as one test fails in OpenBSD
+ # due to the sad hellscape of low-numbered DLT_ values, due to
+ # 12 meaning "OpenBSD loopback" rather than "raw IP" on OpenBSD
+ if($^O eq "openbsd") {
+ $main::confighhash->{"IS_OPENBSD"} = 1;
+ }
+
+ return $main::confighhash;
+}
+
+
+sub runOneComplexTest {
+ local($testconfig) = @_;
+
+ my $output = $testconfig->{output};
+ my $input = $testconfig->{input};
+ my $name = $testconfig->{name};
+ my $options= $testconfig->{args};
+ my $foundit = 1;
+ my $unfoundit=1;
+
+ my $configset = $testconfig->{config_set};
+ my $configunset = $testconfig->{config_unset};
+ my $ch = loadconfighash();
+ #print Dumper($ch);
+
+ if(defined($configset)) {
+ $foundit = ($ch->{$configset} == 1);
+ }
+ if(defined($configunset)) {
+ $unfoundit=($ch->{$configunset} != 1);
+ }
+
+ if(!$foundit) {
+ printf " %-40s: skipped (%s not set)\n", $name, $configset;
+ return 0;
+ }
+
+ if(!$unfoundit) {
+ printf " %-40s: skipped (%s set)\n", $name, $configunset;
+ return 0;
+ }
+
+ #use Data::Dumper;
+ #print Dumper($testconfig);
+
+ # EXPAND any occurrences of @TESTDIR@ to $testsdir
+ $options =~ s/\@TESTDIR\@/$testsdir/;
+
+ my $result = runtest($name,
+ $testsdir . "/" . $input,
+ $testsdir . "/" . $output,
+ $options);
+
+ if($result == 0) {
+ $passedcount++;
+ } else {
+ $failedcount++;
+ }
+}
+
+# *.tests files are PERL hash definitions. They should create an array of hashes
+# one per test, and place it into the variable @testlist.
+sub runComplexTests {
+ my @files = glob( $testsdir . '/*.tests' );
+ foreach $file (@files) {
+ my @testlist = undef;
+ my $definitions;
+ print "FILE: ${file}\n";
+ open(FILE, "<".$file) || die "can not open $file: $!";
+ {
+ local $/ = undef;
+ $definitions = <FILE>;
+ }
+ close(FILE);
+ #print "STUFF: ${definitions}\n";
+ eval $definitions;
+ if(defined($testlist)) {
+ #use Data::Dumper;
+ #print Dumper($testlist);
+ foreach $test (@$testlist) {
+ runOneComplexTest($test);
+ }
+ } else {
+ warn "File: ${file} could not be loaded as PERL: $!";
+ }
+ }
+}
+
+sub runSimpleTests {
+
+ local($only)=@_;
+
+ open(TESTLIST, "<" . "${testsdir}/TESTLIST") || die "no ${testsdir}/TESTFILE: $!\n";
+ while(<TESTLIST>) {
+ next if /^\#/;
+ next if /^$/;
+
+ unlink("core");
+ ($name, $input, $output, @options) = split;
+ #print "processing ${only} vs ${name}\n";
+ next if(defined($only) && $only ne $name);
+
+ my $options = join(" ", @options);
+ #print "@{options} becomes ${options}\n";
+
+ my $hash = { name => $name,
+ input=> $input,
+ output=>$output,
+ args => $options };
+
+ runOneComplexTest($hash);
+ }
+}
+
+if(scalar(@ARGV) == 0) {
+ runSimpleTests();
+ runComplexTests();
+} else {
+ runSimpleTests($ARGV[0]);
+}
+
+# exit with number of failing tests.
+print "------------------------------------------------\n";
+printf("%4u tests failed\n",$failedcount);
+printf("%4u tests passed\n",$passedcount);
+
+showfile(${failureoutput});
+exit $failedcount;
diff --git a/tests/UDLD.pcap b/tests/UDLD.pcap
new file mode 100644
index 0000000..d8d3ff6
--- /dev/null
+++ b/tests/UDLD.pcap
Binary files differ
diff --git a/tests/aarp-heapoverflow-1.out b/tests/aarp-heapoverflow-1.out
new file mode 100644
index 0000000..72ffd42
--- /dev/null
+++ b/tests/aarp-heapoverflow-1.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 aarp [|aarp]
diff --git a/tests/aarp-heapoverflow-1.pcap b/tests/aarp-heapoverflow-1.pcap
new file mode 100644
index 0000000..be84f53
--- /dev/null
+++ b/tests/aarp-heapoverflow-1.pcap
Binary files differ
diff --git a/tests/aarp-heapoverflow-2.out b/tests/aarp-heapoverflow-2.out
new file mode 100644
index 0000000..72ffd42
--- /dev/null
+++ b/tests/aarp-heapoverflow-2.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 aarp [|aarp]
diff --git a/tests/aarp-heapoverflow-2.pcap b/tests/aarp-heapoverflow-2.pcap
new file mode 100644
index 0000000..f029521
--- /dev/null
+++ b/tests/aarp-heapoverflow-2.pcap
Binary files differ
diff --git a/tests/afs.pcap b/tests/afs.pcap
new file mode 100644
index 0000000..86fd66c
--- /dev/null
+++ b/tests/afs.pcap
Binary files differ
diff --git a/tests/ahcp-vv.out b/tests/ahcp-vv.out
new file mode 100644
index 0000000..8acc875
--- /dev/null
+++ b/tests/ahcp-vv.out
@@ -0,0 +1,76 @@
+ 1 07:59:42.537363 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 60) fe80::6aa3:c4ff:fef4:841e.5359 > ff02::cca6:c0f9:e182:5359.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0x7ce31135, Source Id 6a:a3:c4:ff:fe:f4:84:1e, Destination Id ff:ff:ff:ff:ff:ff:ff:ff
+ Discover, Length 24
+ Origin Time: 2013-11-10 07:59:42 UTC
+ Expires: 418s
+ IPv4 Address: 0.0.0.0
+ IPv6 Prefix
+ Name Server
+ NTP Server
+ 2 07:59:42.589548 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 193) fe80::22cf:30ff:fe02:b052.5359 > fe80::6aa3:c4ff:fef4:841e.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0x9dccbd40, Source Id 08:4b:37:1e:f3:6e:1e:dc, Destination Id 6a:a3:c4:ff:fe:f4:84:1e
+ Offer, Length 157
+ Origin Time: 2013-11-10 07:59:44 UTC
+ Mandatory
+ Expires: 512s
+ IPv4 Address: 10.100.0.1
+ Name Server: ::ffff:89.233.43.71, ::ffff:89.104.194.142, 2002:d596:2a92:1:71:53::, 2002:5968:c28e::53
+ NTP Server: ::ffff:195.234.155.124, ::ffff:78.156.97.78, ::ffff:80.71.132.103, ::ffff:83.151.158.44
+ My-IPv4-Address: 10.0.0.80
+ 3 07:59:42.589691 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 56) fe80::6aa3:c4ff:fef4:841e.5359 > ff02::cca6:c0f9:e182:5359.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0x7de31135, Source Id 6a:a3:c4:ff:fe:f4:84:1e, Destination Id 08:4b:37:1e:f3:6e:1e:dc
+ Request, Length 20
+ Origin Time: 2013-11-10 07:59:42 UTC
+ Expires: 405s
+ IPv4 Address
+ IPv6 Prefix
+ Name Server
+ NTP Server
+ 4 07:59:42.674120 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 193) fe80::22cf:30ff:fe02:b052.5359 > fe80::6aa3:c4ff:fef4:841e.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0x9eccbd40, Source Id 08:4b:37:1e:f3:6e:1e:dc, Destination Id 6a:a3:c4:ff:fe:f4:84:1e
+ Ack, Length 157
+ Origin Time: 2013-11-10 07:59:44 UTC
+ Mandatory
+ Expires: 524s
+ IPv4 Address: 10.100.0.1
+ Name Server: ::ffff:89.233.43.71, ::ffff:89.104.194.142, 2002:d596:2a92:1:71:53::, 2002:5968:c28e::53
+ NTP Server: ::ffff:195.234.155.124, ::ffff:78.156.97.78, ::ffff:80.71.132.103, ::ffff:83.151.158.44
+ My-IPv4-Address: 10.0.0.80
+ 5 08:00:09.404899 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 56) fe80::6aa3:c4ff:fef4:841e.5359 > ff02::cca6:c0f9:e182:5359.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0x7ee31135, Source Id 6a:a3:c4:ff:fe:f4:84:1e, Destination Id ff:ff:ff:ff:ff:ff:ff:ff
+ Discover, Length 20
+ Origin Time: 2013-11-10 08:00:09 UTC
+ Expires: 415s
+ IPv4 Address
+ IPv6 Prefix
+ Name Server
+ NTP Server
+ 6 08:00:09.446713 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 193) fe80::22cf:30ff:fe02:b052.5359 > fe80::6aa3:c4ff:fef4:841e.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0x9fccbd40, Source Id 08:4b:37:1e:f3:6e:1e:dc, Destination Id 6a:a3:c4:ff:fe:f4:84:1e
+ Offer, Length 157
+ Origin Time: 2013-11-10 08:00:11 UTC
+ Mandatory
+ Expires: 505s
+ IPv4 Address: 10.100.0.1
+ Name Server: ::ffff:89.233.43.71, ::ffff:89.104.194.142, 2002:d596:2a92:1:71:53::, 2002:5968:c28e::53
+ NTP Server: ::ffff:195.234.155.124, ::ffff:78.156.97.78, ::ffff:80.71.132.103, ::ffff:83.151.158.44
+ My-IPv4-Address: 10.0.0.80
+ 7 08:00:09.745687 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 56) fe80::6aa3:c4ff:fef4:841e.5359 > ff02::cca6:c0f9:e182:5359.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0x7fe31135, Source Id 6a:a3:c4:ff:fe:f4:84:1e, Destination Id 08:4b:37:1e:f3:6e:1e:dc
+ Request, Length 20
+ Origin Time: 2013-11-10 08:00:09 UTC
+ Expires: 409s
+ IPv4 Address
+ IPv6 Prefix
+ Name Server
+ NTP Server
+ 8 08:00:10.149315 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 193) fe80::22cf:30ff:fe02:b052.5359 > fe80::6aa3:c4ff:fef4:841e.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0xa0ccbd40, Source Id 08:4b:37:1e:f3:6e:1e:dc, Destination Id 6a:a3:c4:ff:fe:f4:84:1e
+ Ack, Length 157
+ Origin Time: 2013-11-10 08:00:12 UTC
+ Mandatory
+ Expires: 518s
+ IPv4 Address: 10.100.0.1
+ Name Server: ::ffff:89.233.43.71, ::ffff:89.104.194.142, 2002:d596:2a92:1:71:53::, 2002:5968:c28e::53
+ NTP Server: ::ffff:195.234.155.124, ::ffff:78.156.97.78, ::ffff:80.71.132.103, ::ffff:83.151.158.44
+ My-IPv4-Address: 10.0.0.80
diff --git a/tests/ahcp.pcapng b/tests/ahcp.pcapng
new file mode 100644
index 0000000..e3bfdf1
--- /dev/null
+++ b/tests/ahcp.pcapng
Binary files differ
diff --git a/tests/aoe-oobr-1.out b/tests/aoe-oobr-1.out
new file mode 100644
index 0000000..602fe01
--- /dev/null
+++ b/tests/aoe-oobr-1.out
@@ -0,0 +1,3 @@
+ 1 06:58:21.1048579 AoE length 18, Ver 1, Flags: [Response, MBZ-1, MBZ-0]
+ Major: 0x40f6, Minor: 0x02, Command: Reserve/Release, Tag: 0x01010101
+ RCmd: Set reserve list, NMacs: 1 [|aoe]
diff --git a/tests/aoe-oobr-1.pcap b/tests/aoe-oobr-1.pcap
new file mode 100644
index 0000000..6070d9f
--- /dev/null
+++ b/tests/aoe-oobr-1.pcap
Binary files differ
diff --git a/tests/aoe_1-v.out b/tests/aoe_1-v.out
new file mode 100644
index 0000000..9b0bf03
--- /dev/null
+++ b/tests/aoe_1-v.out
@@ -0,0 +1,888 @@
+ 1 14:05:53.740897 AoE length 18, Ver 1, Flags: [none]
+ Major: 0xffff, Minor: 0xff, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 0, Firmware Version: 0, Sector Count: 0, AoE: 0, CCmd: read config string
+ 2 14:05:57.521114 AoE length 46, Ver 1, Flags: [none]
+ Major: 0xffff, Minor: 0xff, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 0, Firmware Version: 0, Sector Count: 0, AoE: 0, CCmd: read config string
+ 3 14:06:15.673311 AoE length 18, Ver 0
+ 4 14:06:15.676287 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0001cd4a
+ AFlags: [none], Err/Feature: 0, Sector Count: 1, Cmd/Status: 236
+ lba0: 0, lba1: 0, lba2: 0, lba3: 160, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 5 14:06:15.676394 AoE length 534, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0001cd4a
+ AFlags: [none], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 0, lba1: 0, lba2: 0, lba3: 160, lba4: 0, lba5: 0
+ Data: 512 bytes
+ 6 14:06:15.703380 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0002cd63
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 0, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 7 14:06:15.703405 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0003cd63
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 8 14:06:15.703414 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0004cd63
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 4, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 9 14:06:15.703423 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0005cd64
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 6, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 10 14:06:15.703499 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0002cd63
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 0, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 11 14:06:15.703606 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0003cd63
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 12 14:06:15.703650 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0004cd63
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 4, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 13 14:06:15.703690 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0005cd64
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 6, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 14 14:06:15.708883 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0006cd68
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 8, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 15 14:06:15.708910 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0007cd68
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 10, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 16 14:06:15.708917 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0008cd68
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 12, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 17 14:06:15.708924 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0009cd68
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 14, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 18 14:06:15.708978 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0006cd68
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 8, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 19 14:06:15.709048 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0007cd68
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 10, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 20 14:06:15.709089 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0008cd68
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 12, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 21 14:06:15.709134 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0009cd68
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 14, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 22 14:06:15.715637 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x000acd71
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 0, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 23 14:06:15.715702 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x000acd71
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 0, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 24 14:06:15.716249 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x000bcd71
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 25 14:06:15.716266 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x000ccd71
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 4, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 26 14:06:15.716274 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x000dcd71
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 6, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 27 14:06:15.716281 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x000bcd71
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 28 14:06:15.716340 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x000ccd71
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 4, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 29 14:06:15.716402 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x000dcd71
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 6, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 30 14:06:15.721716 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x000ecd74
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 24, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 31 14:06:15.721739 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x000fcd74
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 26, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 32 14:06:15.721747 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0010cd74
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 28, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 33 14:06:15.721773 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x000ecd74
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 24, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 34 14:06:15.721846 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x000fcd74
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 26, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 35 14:06:15.721905 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0010cd74
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 28, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 36 14:06:15.722515 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0011cd74
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 30, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 37 14:06:15.722542 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0011cd74
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 30, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 38 14:06:15.725905 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0012cd7b
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 8, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 39 14:06:15.725931 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0013cd7b
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 10, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 40 14:06:15.725938 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0014cd7b
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 12, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 41 14:06:15.725945 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0015cd7b
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 14, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 42 14:06:15.725966 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0012cd7b
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 8, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 43 14:06:15.726039 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0013cd7b
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 10, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 44 14:06:15.726099 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0014cd7b
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 12, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 45 14:06:15.726174 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0015cd7b
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 14, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 46 14:06:15.747546 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0016cd8f
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 56, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 47 14:06:15.747569 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0017cd8f
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 58, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 48 14:06:15.747578 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0018cd8f
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 60, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 49 14:06:15.747587 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0019cd8f
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 62, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 50 14:06:15.747599 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0016cd8f
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 56, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 51 14:06:15.747693 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0017cd8f
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 58, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 52 14:06:15.747746 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0018cd8f
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 60, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 53 14:06:15.747795 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0019cd8f
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 62, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 54 14:06:15.749550 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 0, Firmware Version: 0, Sector Count: 0, AoE: 0, CCmd: read config string
+ 55 14:06:15.749585 AoE length 18, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 16, Firmware Version: 16405, Sector Count: 2, AoE: 1, CCmd: read config string
+ 56 14:06:15.753713 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x001acd97
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 120, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 57 14:06:15.753731 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x001bcd97
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 122, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 58 14:06:15.753740 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x001ccd97
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 124, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 59 14:06:15.753749 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x001dcd97
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 126, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 60 14:06:15.753871 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x001acd97
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 120, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 61 14:06:15.753967 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x001bcd97
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 122, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 62 14:06:15.754040 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x001ccd97
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 124, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 63 14:06:15.754092 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x001dcd97
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 126, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 64 14:06:15.850804 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 0, Firmware Version: 0, Sector Count: 0, AoE: 0, CCmd: read config string
+ 65 14:06:15.850900 AoE length 18, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 16, Firmware Version: 16405, Sector Count: 2, AoE: 1, CCmd: read config string
+ 66 14:06:15.853891 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x001ecdfb
+ AFlags: [none], Err/Feature: 0, Sector Count: 1, Cmd/Status: 236
+ lba0: 0, lba1: 0, lba2: 0, lba3: 160, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 67 14:06:15.853967 AoE length 534, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x001ecdfb
+ AFlags: [none], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 0, lba1: 0, lba2: 0, lba3: 160, lba4: 0, lba5: 0
+ Data: 512 bytes
+ 68 14:06:53.920254 AoE length 18, Ver 1, Flags: [none]
+ Major: 0xffff, Minor: 0xff, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 0, Firmware Version: 0, Sector Count: 0, AoE: 0, CCmd: read config string
+ 69 14:06:57.052891 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x001f6eeb
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 8, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 70 14:06:57.052931 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x001f6eeb
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 8, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 71 14:06:57.054276 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00206eeb
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 10, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 72 14:06:57.054293 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00216eeb
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 12, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 73 14:06:57.054301 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00226eeb
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 14, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 74 14:06:57.054308 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00206eeb
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 10, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 75 14:06:57.054376 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00216eeb
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 12, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 76 14:06:57.054439 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00226eeb
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 14, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 77 14:06:57.058307 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00236ef0
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 0, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 78 14:06:57.058370 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00236ef0
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 0, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 79 14:06:57.058498 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00246ef0
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 80 14:06:57.058512 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00256ef0
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 4, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 81 14:06:57.058520 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00266ef0
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 6, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 82 14:06:57.058523 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00246ef0
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 83 14:06:57.058578 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00256ef0
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 4, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 84 14:06:57.058628 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00266ef0
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 6, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 85 14:06:57.061880 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00276ef3
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 24, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 86 14:06:57.061904 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00286ef3
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 26, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 87 14:06:57.061915 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00296ef3
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 28, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 88 14:06:57.061926 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x002a6ef3
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 30, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 89 14:06:57.061929 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00276ef3
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 24, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 90 14:06:57.062001 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00286ef3
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 26, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 91 14:06:57.062056 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00296ef3
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 28, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 92 14:06:57.062107 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x002a6ef3
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 30, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 93 14:06:57.065273 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x002b6ef7
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 56, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 94 14:06:57.065339 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x002b6ef7
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 56, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 95 14:06:57.065573 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x002c6ef7
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 58, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 96 14:06:57.065596 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x002d6ef7
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 60, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 97 14:06:57.065606 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x002e6ef7
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 62, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 98 14:06:57.065617 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x002c6ef7
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 58, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 99 14:06:57.065682 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x002d6ef7
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 60, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 100 14:06:57.065729 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x002e6ef7
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 62, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 101 14:06:57.071854 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x002f6efa
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 120, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 102 14:06:57.071890 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00306efa
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 122, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 103 14:06:57.071904 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00316efa
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 124, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 104 14:06:57.071925 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00326efa
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 126, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 105 14:06:57.071940 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x002f6efa
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 120, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 106 14:06:57.072013 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00306efa
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 122, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 107 14:06:57.072061 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00316efa
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 124, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 108 14:06:57.072105 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00326efa
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 126, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 109 14:06:57.076203 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00336f01
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 110 14:06:57.077847 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00336f01
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 111 14:06:57.081156 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00346f07
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 4, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 112 14:06:57.081195 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00346f07
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 4, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 113 14:06:57.083668 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00356f09
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 18, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 114 14:06:57.083691 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00366f09
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 20, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 115 14:06:57.083702 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00376f09
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 22, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 116 14:06:57.083711 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00386f09
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 24, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 117 14:06:57.083718 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00356f09
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 18, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 118 14:06:57.083729 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00396f09
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 26, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 119 14:06:57.083738 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x003a6f09
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 28, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 120 14:06:57.083746 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x003b6f0a
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 30, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 121 14:06:57.083754 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x003c6f0a
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 32, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 122 14:06:57.083800 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00366f09
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 20, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 123 14:06:57.083848 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00376f09
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 22, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 124 14:06:57.083892 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00386f09
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 24, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 125 14:06:57.083937 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00396f09
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 26, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 126 14:06:57.083980 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x003a6f09
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 28, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 127 14:06:57.084021 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x003b6f0a
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 30, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 128 14:06:57.084099 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x003c6f0a
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 32, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 129 14:06:57.093630 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x003d6f0f
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 34, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 130 14:06:57.093647 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x003e6f12
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 16, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 131 14:06:57.093654 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x003f6f12
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 36, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 132 14:06:57.093668 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x003d6f0f
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 34, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 133 14:06:57.093724 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x003e6f12
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 16, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 134 14:06:57.093764 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x003f6f12
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 36, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 135 14:06:57.093850 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00406f12
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 38, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 136 14:06:57.093861 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00416f12
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 40, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 137 14:06:57.093867 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00406f12
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 38, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 138 14:06:57.093869 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00426f13
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 42, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 139 14:06:57.093903 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00436f13
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 44, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 140 14:06:57.093912 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00446f13
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 46, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 141 14:06:57.093916 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00416f12
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 40, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 142 14:06:57.093954 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00426f13
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 42, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 143 14:06:57.093994 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00436f13
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 44, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 144 14:06:57.094032 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00446f13
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 46, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 145 14:06:57.096275 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00456f15
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 48, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 146 14:06:57.096306 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00456f15
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 48, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 147 14:06:57.096357 AoE length 1046, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00466f16
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 2, Cmd/Status: 52
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 148 14:06:57.096390 AoE length 46, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00466f16
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 149 14:06:57.118256 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 0, Firmware Version: 0, Sector Count: 0, AoE: 0, CCmd: read config string
+ 150 14:06:57.118328 AoE length 18, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 16, Firmware Version: 16405, Sector Count: 2, AoE: 1, CCmd: read config string
+ 151 14:06:57.632737 AoE length 46, Ver 1, Flags: [none]
+ Major: 0xffff, Minor: 0xff, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 0, Firmware Version: 0, Sector Count: 0, AoE: 0, CCmd: read config string
+ 152 14:06:57.632837 AoE length 18, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 16, Firmware Version: 16405, Sector Count: 2, AoE: 1, CCmd: read config string
+ 153 14:07:27.139035 AoE length 1046, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0047e470
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 2, Cmd/Status: 52
+ lba0: 4, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 154 14:07:27.139134 AoE length 46, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x0047e470
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 4, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 155 14:07:54.080263 AoE length 18, Ver 1, Flags: [none]
+ Major: 0xffff, Minor: 0xff, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 0, Firmware Version: 0, Sector Count: 0, AoE: 0, CCmd: read config string
+ 156 14:07:57.841818 AoE length 46, Ver 1, Flags: [none]
+ Major: 0xffff, Minor: 0xff, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 0, Firmware Version: 0, Sector Count: 0, AoE: 0, CCmd: read config string
+ 157 14:07:57.841915 AoE length 18, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 16, Firmware Version: 16405, Sector Count: 2, AoE: 1, CCmd: read config string
+ 158 14:08:54.240271 AoE length 18, Ver 1, Flags: [none]
+ Major: 0xffff, Minor: 0xff, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 0, Firmware Version: 0, Sector Count: 0, AoE: 0, CCmd: read config string
+ 159 14:08:57.950989 AoE length 46, Ver 1, Flags: [none]
+ Major: 0xffff, Minor: 0xff, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 0, Firmware Version: 0, Sector Count: 0, AoE: 0, CCmd: read config string
+ 160 14:08:57.951090 AoE length 18, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 16, Firmware Version: 16405, Sector Count: 2, AoE: 1, CCmd: read config string
+ 161 14:08:58.897872 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00484ae0
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 14, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 162 14:08:58.897935 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00484ae0
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 14, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 163 14:08:58.901128 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00494ae2
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 2, Cmd/Status: 36
+ lba0: 12, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 164 14:08:58.901198 AoE length 1046, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00494ae2
+ AFlags: [Ext48], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 12, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 165 14:09:03.999471 AoE length 1046, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x004a5ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 2, Cmd/Status: 52
+ lba0: 76, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 166 14:09:03.999585 AoE length 46, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x004a5ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 76, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 167 14:09:03.999609 AoE length 1046, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x004b5ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 2, Cmd/Status: 52
+ lba0: 48, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 168 14:09:03.999677 AoE length 46, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x004b5ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 48, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 169 14:09:03.999710 AoE length 1046, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x004c5ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 2, Cmd/Status: 52
+ lba0: 12, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 170 14:09:03.999741 AoE length 46, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x004c5ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 12, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 171 14:09:03.999795 AoE length 1046, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x004d5ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 2, Cmd/Status: 52
+ lba0: 14, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 172 14:09:03.999845 AoE length 46, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x004d5ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 14, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 173 14:09:03.999907 AoE length 1046, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x004e5ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 2, Cmd/Status: 52
+ lba0: 16, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 174 14:09:03.999957 AoE length 46, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x004e5ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 16, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 175 14:09:04.000663 AoE length 1046, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x004f5ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 2, Cmd/Status: 52
+ lba0: 18, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 176 14:09:04.000720 AoE length 46, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x004f5ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 18, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 177 14:09:04.000776 AoE length 1046, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00505ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 2, Cmd/Status: 52
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 178 14:09:04.000799 AoE length 46, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00505ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 179 14:09:04.000839 AoE length 1046, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00515ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 2, Cmd/Status: 52
+ lba0: 4, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 180 14:09:04.000860 AoE length 46, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00515ecd
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 4, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 181 14:09:04.005498 AoE length 1046, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00525ed2
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 2, Cmd/Status: 52
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 1024 bytes
+ 182 14:09:04.005578 AoE length 46, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00525ed2
+ AFlags: [Ext48, Write], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 2, lba1: 0, lba2: 0, lba3: 0, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 183 14:09:04.095771 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 0, Firmware Version: 0, Sector Count: 0, AoE: 0, CCmd: read config string
+ 184 14:09:04.095832 AoE length 18, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Query Config Information, Tag: 0x00000000
+ Buffer Count: 16, Firmware Version: 16405, Sector Count: 2, AoE: 1, CCmd: read config string
+ 185 14:09:04.097287 AoE length 46, Ver 1, Flags: [none]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00535f2f
+ AFlags: [none], Err/Feature: 0, Sector Count: 1, Cmd/Status: 236
+ lba0: 0, lba1: 0, lba2: 0, lba3: 160, lba4: 0, lba5: 0
+ Data: 24 bytes
+ 186 14:09:04.097327 AoE length 534, Ver 1, Flags: [Response]
+ Major: 0x0014, Minor: 0x00, Command: Issue ATA Command, Tag: 0x00535f2f
+ AFlags: [none], Err/Feature: 0, Sector Count: 0, Cmd/Status: 64
+ lba0: 0, lba1: 0, lba2: 0, lba3: 160, lba4: 0, lba5: 0
+ Data: 512 bytes
diff --git a/tests/aoe_1.out b/tests/aoe_1.out
new file mode 100644
index 0000000..d07c137
--- /dev/null
+++ b/tests/aoe_1.out
@@ -0,0 +1,186 @@
+ 1 14:05:53.740897 AoE length 18, Ver 1, Flags: [none]
+ 2 14:05:57.521114 AoE length 46, Ver 1, Flags: [none]
+ 3 14:06:15.673311 AoE length 18, Ver 0
+ 4 14:06:15.676287 AoE length 46, Ver 1, Flags: [none]
+ 5 14:06:15.676394 AoE length 534, Ver 1, Flags: [Response]
+ 6 14:06:15.703380 AoE length 46, Ver 1, Flags: [none]
+ 7 14:06:15.703405 AoE length 46, Ver 1, Flags: [none]
+ 8 14:06:15.703414 AoE length 46, Ver 1, Flags: [none]
+ 9 14:06:15.703423 AoE length 46, Ver 1, Flags: [none]
+ 10 14:06:15.703499 AoE length 1046, Ver 1, Flags: [Response]
+ 11 14:06:15.703606 AoE length 1046, Ver 1, Flags: [Response]
+ 12 14:06:15.703650 AoE length 1046, Ver 1, Flags: [Response]
+ 13 14:06:15.703690 AoE length 1046, Ver 1, Flags: [Response]
+ 14 14:06:15.708883 AoE length 46, Ver 1, Flags: [none]
+ 15 14:06:15.708910 AoE length 46, Ver 1, Flags: [none]
+ 16 14:06:15.708917 AoE length 46, Ver 1, Flags: [none]
+ 17 14:06:15.708924 AoE length 46, Ver 1, Flags: [none]
+ 18 14:06:15.708978 AoE length 1046, Ver 1, Flags: [Response]
+ 19 14:06:15.709048 AoE length 1046, Ver 1, Flags: [Response]
+ 20 14:06:15.709089 AoE length 1046, Ver 1, Flags: [Response]
+ 21 14:06:15.709134 AoE length 1046, Ver 1, Flags: [Response]
+ 22 14:06:15.715637 AoE length 46, Ver 1, Flags: [none]
+ 23 14:06:15.715702 AoE length 1046, Ver 1, Flags: [Response]
+ 24 14:06:15.716249 AoE length 46, Ver 1, Flags: [none]
+ 25 14:06:15.716266 AoE length 46, Ver 1, Flags: [none]
+ 26 14:06:15.716274 AoE length 46, Ver 1, Flags: [none]
+ 27 14:06:15.716281 AoE length 1046, Ver 1, Flags: [Response]
+ 28 14:06:15.716340 AoE length 1046, Ver 1, Flags: [Response]
+ 29 14:06:15.716402 AoE length 1046, Ver 1, Flags: [Response]
+ 30 14:06:15.721716 AoE length 46, Ver 1, Flags: [none]
+ 31 14:06:15.721739 AoE length 46, Ver 1, Flags: [none]
+ 32 14:06:15.721747 AoE length 46, Ver 1, Flags: [none]
+ 33 14:06:15.721773 AoE length 1046, Ver 1, Flags: [Response]
+ 34 14:06:15.721846 AoE length 1046, Ver 1, Flags: [Response]
+ 35 14:06:15.721905 AoE length 1046, Ver 1, Flags: [Response]
+ 36 14:06:15.722515 AoE length 46, Ver 1, Flags: [none]
+ 37 14:06:15.722542 AoE length 1046, Ver 1, Flags: [Response]
+ 38 14:06:15.725905 AoE length 46, Ver 1, Flags: [none]
+ 39 14:06:15.725931 AoE length 46, Ver 1, Flags: [none]
+ 40 14:06:15.725938 AoE length 46, Ver 1, Flags: [none]
+ 41 14:06:15.725945 AoE length 46, Ver 1, Flags: [none]
+ 42 14:06:15.725966 AoE length 1046, Ver 1, Flags: [Response]
+ 43 14:06:15.726039 AoE length 1046, Ver 1, Flags: [Response]
+ 44 14:06:15.726099 AoE length 1046, Ver 1, Flags: [Response]
+ 45 14:06:15.726174 AoE length 1046, Ver 1, Flags: [Response]
+ 46 14:06:15.747546 AoE length 46, Ver 1, Flags: [none]
+ 47 14:06:15.747569 AoE length 46, Ver 1, Flags: [none]
+ 48 14:06:15.747578 AoE length 46, Ver 1, Flags: [none]
+ 49 14:06:15.747587 AoE length 46, Ver 1, Flags: [none]
+ 50 14:06:15.747599 AoE length 1046, Ver 1, Flags: [Response]
+ 51 14:06:15.747693 AoE length 1046, Ver 1, Flags: [Response]
+ 52 14:06:15.747746 AoE length 1046, Ver 1, Flags: [Response]
+ 53 14:06:15.747795 AoE length 1046, Ver 1, Flags: [Response]
+ 54 14:06:15.749550 AoE length 46, Ver 1, Flags: [none]
+ 55 14:06:15.749585 AoE length 18, Ver 1, Flags: [Response]
+ 56 14:06:15.753713 AoE length 46, Ver 1, Flags: [none]
+ 57 14:06:15.753731 AoE length 46, Ver 1, Flags: [none]
+ 58 14:06:15.753740 AoE length 46, Ver 1, Flags: [none]
+ 59 14:06:15.753749 AoE length 46, Ver 1, Flags: [none]
+ 60 14:06:15.753871 AoE length 1046, Ver 1, Flags: [Response]
+ 61 14:06:15.753967 AoE length 1046, Ver 1, Flags: [Response]
+ 62 14:06:15.754040 AoE length 1046, Ver 1, Flags: [Response]
+ 63 14:06:15.754092 AoE length 1046, Ver 1, Flags: [Response]
+ 64 14:06:15.850804 AoE length 46, Ver 1, Flags: [none]
+ 65 14:06:15.850900 AoE length 18, Ver 1, Flags: [Response]
+ 66 14:06:15.853891 AoE length 46, Ver 1, Flags: [none]
+ 67 14:06:15.853967 AoE length 534, Ver 1, Flags: [Response]
+ 68 14:06:53.920254 AoE length 18, Ver 1, Flags: [none]
+ 69 14:06:57.052891 AoE length 46, Ver 1, Flags: [none]
+ 70 14:06:57.052931 AoE length 1046, Ver 1, Flags: [Response]
+ 71 14:06:57.054276 AoE length 46, Ver 1, Flags: [none]
+ 72 14:06:57.054293 AoE length 46, Ver 1, Flags: [none]
+ 73 14:06:57.054301 AoE length 46, Ver 1, Flags: [none]
+ 74 14:06:57.054308 AoE length 1046, Ver 1, Flags: [Response]
+ 75 14:06:57.054376 AoE length 1046, Ver 1, Flags: [Response]
+ 76 14:06:57.054439 AoE length 1046, Ver 1, Flags: [Response]
+ 77 14:06:57.058307 AoE length 46, Ver 1, Flags: [none]
+ 78 14:06:57.058370 AoE length 1046, Ver 1, Flags: [Response]
+ 79 14:06:57.058498 AoE length 46, Ver 1, Flags: [none]
+ 80 14:06:57.058512 AoE length 46, Ver 1, Flags: [none]
+ 81 14:06:57.058520 AoE length 46, Ver 1, Flags: [none]
+ 82 14:06:57.058523 AoE length 1046, Ver 1, Flags: [Response]
+ 83 14:06:57.058578 AoE length 1046, Ver 1, Flags: [Response]
+ 84 14:06:57.058628 AoE length 1046, Ver 1, Flags: [Response]
+ 85 14:06:57.061880 AoE length 46, Ver 1, Flags: [none]
+ 86 14:06:57.061904 AoE length 46, Ver 1, Flags: [none]
+ 87 14:06:57.061915 AoE length 46, Ver 1, Flags: [none]
+ 88 14:06:57.061926 AoE length 46, Ver 1, Flags: [none]
+ 89 14:06:57.061929 AoE length 1046, Ver 1, Flags: [Response]
+ 90 14:06:57.062001 AoE length 1046, Ver 1, Flags: [Response]
+ 91 14:06:57.062056 AoE length 1046, Ver 1, Flags: [Response]
+ 92 14:06:57.062107 AoE length 1046, Ver 1, Flags: [Response]
+ 93 14:06:57.065273 AoE length 46, Ver 1, Flags: [none]
+ 94 14:06:57.065339 AoE length 1046, Ver 1, Flags: [Response]
+ 95 14:06:57.065573 AoE length 46, Ver 1, Flags: [none]
+ 96 14:06:57.065596 AoE length 46, Ver 1, Flags: [none]
+ 97 14:06:57.065606 AoE length 46, Ver 1, Flags: [none]
+ 98 14:06:57.065617 AoE length 1046, Ver 1, Flags: [Response]
+ 99 14:06:57.065682 AoE length 1046, Ver 1, Flags: [Response]
+ 100 14:06:57.065729 AoE length 1046, Ver 1, Flags: [Response]
+ 101 14:06:57.071854 AoE length 46, Ver 1, Flags: [none]
+ 102 14:06:57.071890 AoE length 46, Ver 1, Flags: [none]
+ 103 14:06:57.071904 AoE length 46, Ver 1, Flags: [none]
+ 104 14:06:57.071925 AoE length 46, Ver 1, Flags: [none]
+ 105 14:06:57.071940 AoE length 1046, Ver 1, Flags: [Response]
+ 106 14:06:57.072013 AoE length 1046, Ver 1, Flags: [Response]
+ 107 14:06:57.072061 AoE length 1046, Ver 1, Flags: [Response]
+ 108 14:06:57.072105 AoE length 1046, Ver 1, Flags: [Response]
+ 109 14:06:57.076203 AoE length 46, Ver 1, Flags: [none]
+ 110 14:06:57.077847 AoE length 1046, Ver 1, Flags: [Response]
+ 111 14:06:57.081156 AoE length 46, Ver 1, Flags: [none]
+ 112 14:06:57.081195 AoE length 1046, Ver 1, Flags: [Response]
+ 113 14:06:57.083668 AoE length 46, Ver 1, Flags: [none]
+ 114 14:06:57.083691 AoE length 46, Ver 1, Flags: [none]
+ 115 14:06:57.083702 AoE length 46, Ver 1, Flags: [none]
+ 116 14:06:57.083711 AoE length 46, Ver 1, Flags: [none]
+ 117 14:06:57.083718 AoE length 1046, Ver 1, Flags: [Response]
+ 118 14:06:57.083729 AoE length 46, Ver 1, Flags: [none]
+ 119 14:06:57.083738 AoE length 46, Ver 1, Flags: [none]
+ 120 14:06:57.083746 AoE length 46, Ver 1, Flags: [none]
+ 121 14:06:57.083754 AoE length 46, Ver 1, Flags: [none]
+ 122 14:06:57.083800 AoE length 1046, Ver 1, Flags: [Response]
+ 123 14:06:57.083848 AoE length 1046, Ver 1, Flags: [Response]
+ 124 14:06:57.083892 AoE length 1046, Ver 1, Flags: [Response]
+ 125 14:06:57.083937 AoE length 1046, Ver 1, Flags: [Response]
+ 126 14:06:57.083980 AoE length 1046, Ver 1, Flags: [Response]
+ 127 14:06:57.084021 AoE length 1046, Ver 1, Flags: [Response]
+ 128 14:06:57.084099 AoE length 1046, Ver 1, Flags: [Response]
+ 129 14:06:57.093630 AoE length 46, Ver 1, Flags: [none]
+ 130 14:06:57.093647 AoE length 46, Ver 1, Flags: [none]
+ 131 14:06:57.093654 AoE length 46, Ver 1, Flags: [none]
+ 132 14:06:57.093668 AoE length 1046, Ver 1, Flags: [Response]
+ 133 14:06:57.093724 AoE length 1046, Ver 1, Flags: [Response]
+ 134 14:06:57.093764 AoE length 1046, Ver 1, Flags: [Response]
+ 135 14:06:57.093850 AoE length 46, Ver 1, Flags: [none]
+ 136 14:06:57.093861 AoE length 46, Ver 1, Flags: [none]
+ 137 14:06:57.093867 AoE length 1046, Ver 1, Flags: [Response]
+ 138 14:06:57.093869 AoE length 46, Ver 1, Flags: [none]
+ 139 14:06:57.093903 AoE length 46, Ver 1, Flags: [none]
+ 140 14:06:57.093912 AoE length 46, Ver 1, Flags: [none]
+ 141 14:06:57.093916 AoE length 1046, Ver 1, Flags: [Response]
+ 142 14:06:57.093954 AoE length 1046, Ver 1, Flags: [Response]
+ 143 14:06:57.093994 AoE length 1046, Ver 1, Flags: [Response]
+ 144 14:06:57.094032 AoE length 1046, Ver 1, Flags: [Response]
+ 145 14:06:57.096275 AoE length 46, Ver 1, Flags: [none]
+ 146 14:06:57.096306 AoE length 1046, Ver 1, Flags: [Response]
+ 147 14:06:57.096357 AoE length 1046, Ver 1, Flags: [none]
+ 148 14:06:57.096390 AoE length 46, Ver 1, Flags: [Response]
+ 149 14:06:57.118256 AoE length 46, Ver 1, Flags: [none]
+ 150 14:06:57.118328 AoE length 18, Ver 1, Flags: [Response]
+ 151 14:06:57.632737 AoE length 46, Ver 1, Flags: [none]
+ 152 14:06:57.632837 AoE length 18, Ver 1, Flags: [Response]
+ 153 14:07:27.139035 AoE length 1046, Ver 1, Flags: [none]
+ 154 14:07:27.139134 AoE length 46, Ver 1, Flags: [Response]
+ 155 14:07:54.080263 AoE length 18, Ver 1, Flags: [none]
+ 156 14:07:57.841818 AoE length 46, Ver 1, Flags: [none]
+ 157 14:07:57.841915 AoE length 18, Ver 1, Flags: [Response]
+ 158 14:08:54.240271 AoE length 18, Ver 1, Flags: [none]
+ 159 14:08:57.950989 AoE length 46, Ver 1, Flags: [none]
+ 160 14:08:57.951090 AoE length 18, Ver 1, Flags: [Response]
+ 161 14:08:58.897872 AoE length 46, Ver 1, Flags: [none]
+ 162 14:08:58.897935 AoE length 1046, Ver 1, Flags: [Response]
+ 163 14:08:58.901128 AoE length 46, Ver 1, Flags: [none]
+ 164 14:08:58.901198 AoE length 1046, Ver 1, Flags: [Response]
+ 165 14:09:03.999471 AoE length 1046, Ver 1, Flags: [none]
+ 166 14:09:03.999585 AoE length 46, Ver 1, Flags: [Response]
+ 167 14:09:03.999609 AoE length 1046, Ver 1, Flags: [none]
+ 168 14:09:03.999677 AoE length 46, Ver 1, Flags: [Response]
+ 169 14:09:03.999710 AoE length 1046, Ver 1, Flags: [none]
+ 170 14:09:03.999741 AoE length 46, Ver 1, Flags: [Response]
+ 171 14:09:03.999795 AoE length 1046, Ver 1, Flags: [none]
+ 172 14:09:03.999845 AoE length 46, Ver 1, Flags: [Response]
+ 173 14:09:03.999907 AoE length 1046, Ver 1, Flags: [none]
+ 174 14:09:03.999957 AoE length 46, Ver 1, Flags: [Response]
+ 175 14:09:04.000663 AoE length 1046, Ver 1, Flags: [none]
+ 176 14:09:04.000720 AoE length 46, Ver 1, Flags: [Response]
+ 177 14:09:04.000776 AoE length 1046, Ver 1, Flags: [none]
+ 178 14:09:04.000799 AoE length 46, Ver 1, Flags: [Response]
+ 179 14:09:04.000839 AoE length 1046, Ver 1, Flags: [none]
+ 180 14:09:04.000860 AoE length 46, Ver 1, Flags: [Response]
+ 181 14:09:04.005498 AoE length 1046, Ver 1, Flags: [none]
+ 182 14:09:04.005578 AoE length 46, Ver 1, Flags: [Response]
+ 183 14:09:04.095771 AoE length 46, Ver 1, Flags: [none]
+ 184 14:09:04.095832 AoE length 18, Ver 1, Flags: [Response]
+ 185 14:09:04.097287 AoE length 46, Ver 1, Flags: [none]
+ 186 14:09:04.097327 AoE length 534, Ver 1, Flags: [Response]
diff --git a/tests/arista_ether-e.out b/tests/arista_ether-e.out
new file mode 100644
index 0000000..6530bac
--- /dev/null
+++ b/tests/arista_ether-e.out
@@ -0,0 +1,16 @@
+ 1 20:36:40.091512 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale TAI (0), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:36:39.944724424: ethertype IPv4 (0x0800), length 110: 10.136.1.32 > 10.2.23.24: ip-proto-63 62
+ 2 20:36:40.579036 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale TAI (0), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:36:40.432245804: ethertype 802.1Q (0x8100), length 110: vlan 100, p 0, ethertype IPv4 (0x0800), 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 3 20:36:41.063992 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale TAI (0), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:36:40.917204604: ethertype MPLS unicast (0x8847), length 110: MPLS (label 1024, tc 0, [S], ttl 64) 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 4 20:36:42.247930 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale TAI (0), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:36:42.101121660: ethertype 802.1Q (0x8100), length 110: vlan 100, p 0, ethertype MPLS unicast (0x8847), MPLS (label 1024, tc 0, [S], ttl 64) 10.136.1.32 > 10.2.23.24: ip-proto-63 54
+ 5 20:37:16.595961 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale UTC (1), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:37:16.448931747: ethertype IPv4 (0x0800), length 110: 10.136.1.32 > 10.2.23.24: ip-proto-63 62
+ 6 20:37:17.083084 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale UTC (1), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:37:16.936057586: ethertype 802.1Q (0x8100), length 110: vlan 100, p 0, ethertype IPv4 (0x0800), 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 7 20:37:17.567747 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale UTC (1), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:37:17.420710691: ethertype MPLS unicast (0x8847), length 110: MPLS (label 1024, tc 0, [S], ttl 64) 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 8 20:37:18.749419 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale UTC (1), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:37:18.602381189: ethertype 802.1Q (0x8100), length 110: vlan 100, p 0, ethertype MPLS unicast (0x8847), MPLS (label 1024, tc 0, [S], ttl 64) 10.136.1.32 > 10.2.23.24: ip-proto-63 54
+ 9 20:37:41.551225 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale TAI (0), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60821.404038772: ethertype IPv4 (0x0800), length 108: 10.136.1.32 > 10.2.23.24: ip-proto-63 62
+ 10 20:37:42.040995 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale TAI (0), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60821.893796872: ethertype 802.1Q (0x8100), length 108: vlan 100, p 0, ethertype IPv4 (0x0800), 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 11 20:37:42.525213 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale TAI (0), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60822.378011624: ethertype MPLS unicast (0x8847), length 108: MPLS (label 1024, tc 0, [S], ttl 64) 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 12 20:37:43.556891 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale TAI (0), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60823.409682672: ethertype 802.1Q (0x8100), length 108: vlan 100, p 0, ethertype MPLS unicast (0x8847), MPLS (label 1024, tc 0, [S], ttl 64) 10.136.1.32 > 10.2.23.24: ip-proto-63 54
+ 13 20:37:53.102297 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale UTC (1), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60832.954995144: ethertype IPv4 (0x0800), length 108: 10.136.1.32 > 10.2.23.24: ip-proto-63 62
+ 14 20:37:53.590942 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale UTC (1), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60833.443648960: ethertype 802.1Q (0x8100), length 108: vlan 100, p 0, ethertype IPv4 (0x0800), 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 15 20:37:54.077234 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale UTC (1), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60833.929943729: ethertype MPLS unicast (0x8847), length 108: MPLS (label 1024, tc 0, [S], ttl 64) 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 16 20:37:55.188367 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale UTC (1), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60835.041072639: ethertype 802.1Q (0x8100), length 108: vlan 100, p 0, ethertype MPLS unicast (0x8847), MPLS (label 1024, tc 0, [S], ttl 64) 10.136.1.32 > 10.2.23.24: ip-proto-63 54
diff --git a/tests/arista_ether-ev.out b/tests/arista_ether-ev.out
new file mode 100644
index 0000000..18e0731
--- /dev/null
+++ b/tests/arista_ether-ev.out
@@ -0,0 +1,40 @@
+ 1 20:36:40.091512 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale TAI (0), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:36:39.944724424: ethertype IPv4 (0x0800), length 110: (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 82)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 62
+ 2 20:36:40.579036 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale TAI (0), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:36:40.432245804: ethertype 802.1Q (0x8100), length 110: vlan 100, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 78)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 3 20:36:41.063992 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale TAI (0), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:36:40.917204604: ethertype MPLS unicast (0x8847), length 110: MPLS (label 1024, tc 0, [S], ttl 64)
+ (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 78)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 4 20:36:42.247930 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale TAI (0), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:36:42.101121660: ethertype 802.1Q (0x8100), length 110: vlan 100, p 0, ethertype MPLS unicast (0x8847), MPLS (label 1024, tc 0, [S], ttl 64)
+ (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 74)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 54
+ 5 20:37:16.595961 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale UTC (1), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:37:16.448931747: ethertype IPv4 (0x0800), length 110: (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 82)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 62
+ 6 20:37:17.083084 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale UTC (1), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:37:16.936057586: ethertype 802.1Q (0x8100), length 110: vlan 100, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 78)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 7 20:37:17.567747 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale UTC (1), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:37:17.420710691: ethertype MPLS unicast (0x8847), length 110: MPLS (label 1024, tc 0, [S], ttl 64)
+ (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 78)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 8 20:37:18.749419 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale UTC (1), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:37:18.602381189: ethertype 802.1Q (0x8100), length 110: vlan 100, p 0, ethertype MPLS unicast (0x8847), MPLS (label 1024, tc 0, [S], ttl 64)
+ (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 74)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 54
+ 9 20:37:41.551225 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale TAI (0), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60821.404038772: ethertype IPv4 (0x0800), length 108: (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 82)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 62
+ 10 20:37:42.040995 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale TAI (0), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60821.893796872: ethertype 802.1Q (0x8100), length 108: vlan 100, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 78)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 11 20:37:42.525213 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale TAI (0), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60822.378011624: ethertype MPLS unicast (0x8847), length 108: MPLS (label 1024, tc 0, [S], ttl 64)
+ (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 78)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 12 20:37:43.556891 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale TAI (0), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60823.409682672: ethertype 802.1Q (0x8100), length 108: vlan 100, p 0, ethertype MPLS unicast (0x8847), MPLS (label 1024, tc 0, [S], ttl 64)
+ (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 74)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 54
+ 13 20:37:53.102297 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale UTC (1), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60832.954995144: ethertype IPv4 (0x0800), length 108: (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 82)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 62
+ 14 20:37:53.590942 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale UTC (1), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60833.443648960: ethertype 802.1Q (0x8100), length 108: vlan 100, p 0, ethertype IPv4 (0x0800), (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 78)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 15 20:37:54.077234 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale UTC (1), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60833.929943729: ethertype MPLS unicast (0x8847), length 108: MPLS (label 1024, tc 0, [S], ttl 64)
+ (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 78)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 16 20:37:55.188367 00:11:22:33:44:55 > 00:00:00:00:00:01, ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale UTC (1), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60835.041072639: ethertype 802.1Q (0x8100), length 108: vlan 100, p 0, ethertype MPLS unicast (0x8847), MPLS (label 1024, tc 0, [S], ttl 64)
+ (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto unknown (63), length 74)
+ 10.136.1.32 > 10.2.23.24: ip-proto-63 54
diff --git a/tests/arista_ether.out b/tests/arista_ether.out
new file mode 100644
index 0000000..f386cea
--- /dev/null
+++ b/tests/arista_ether.out
@@ -0,0 +1,16 @@
+ 1 20:36:40.091512 ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale TAI (0), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:36:39.944724424: IP 10.136.1.32 > 10.2.23.24: ip-proto-63 62
+ 2 20:36:40.579036 ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale TAI (0), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:36:40.432245804: IP 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 3 20:36:41.063992 ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale TAI (0), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:36:40.917204604: MPLS (label 1024, tc 0, [S], ttl 64) IP 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 4 20:36:42.247930 ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale TAI (0), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:36:42.101121660: MPLS (label 1024, tc 0, [S], ttl 64) IP 10.136.1.32 > 10.2.23.24: ip-proto-63 54
+ 5 20:37:16.595961 ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale UTC (1), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:37:16.448931747: IP 10.136.1.32 > 10.2.23.24: ip-proto-63 62
+ 6 20:37:17.083084 ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale UTC (1), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:37:16.936057586: IP 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 7 20:37:17.567747 ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale UTC (1), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:37:17.420710691: MPLS (label 1024, tc 0, [S], ttl 64) IP 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 8 20:37:18.749419 ethertype Arista Vendor Specific Protocol (0xd28b), length 110: SubType Timestamp (0x0001), Timescale UTC (1), Format 64-bit (1), HwInfo R/R2 (0), Timestamp 2019-05-29 20:37:18.602381189: MPLS (label 1024, tc 0, [S], ttl 64) IP 10.136.1.32 > 10.2.23.24: ip-proto-63 54
+ 9 20:37:41.551225 ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale TAI (0), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60821.404038772: IP 10.136.1.32 > 10.2.23.24: ip-proto-63 62
+ 10 20:37:42.040995 ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale TAI (0), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60821.893796872: IP 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 11 20:37:42.525213 ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale TAI (0), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60822.378011624: MPLS (label 1024, tc 0, [S], ttl 64) IP 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 12 20:37:43.556891 ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale TAI (0), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60823.409682672: MPLS (label 1024, tc 0, [S], ttl 64) IP 10.136.1.32 > 10.2.23.24: ip-proto-63 54
+ 13 20:37:53.102297 ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale UTC (1), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60832.954995144: IP 10.136.1.32 > 10.2.23.24: ip-proto-63 62
+ 14 20:37:53.590942 ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale UTC (1), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60833.443648960: IP 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 15 20:37:54.077234 ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale UTC (1), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60833.929943729: MPLS (label 1024, tc 0, [S], ttl 64) IP 10.136.1.32 > 10.2.23.24: ip-proto-63 58
+ 16 20:37:55.188367 ethertype Arista Vendor Specific Protocol (0xd28b), length 108: SubType Timestamp (0x0001), Timescale UTC (1), Format 48-bit (2), HwInfo R/R2 (0), Timestamp 60835.041072639: MPLS (label 1024, tc 0, [S], ttl 64) IP 10.136.1.32 > 10.2.23.24: ip-proto-63 54
diff --git a/tests/arista_ether.pcap b/tests/arista_ether.pcap
new file mode 100644
index 0000000..a620a94
--- /dev/null
+++ b/tests/arista_ether.pcap
Binary files differ
diff --git a/tests/arp-oobr.out b/tests/arp-oobr.out
new file mode 100644
index 0000000..7e5bb91
--- /dev/null
+++ b/tests/arp-oobr.out
@@ -0,0 +1,2512 @@
+ 1 22:14:54.558191 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2 22:14:58.554481 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:55:00:00:00:00) tell 192.168.1.104, length 46
+ 3 22:15:01.871827 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (00:13:00:00:00:00) tell 192.168.0.37, length 46
+ 4 22:15:02.554459 00:1f:29:da:2d:79 > ff:ff:ff:ff:6b:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 5 22:15:21.806524 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.212.1 tell 192.168.1.104, length 46
+ 6 22:15:30.551946 00:13:20:13:db:6d > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 7 22:15:33.807107 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 8 22:15:37.804169 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 9 22:15:41.804091 00:1f:29:da:2d:79 > ff:ff:84:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 10 22:15:42.069118 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 11 22:15:42.069443 00:21:d8:35:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 12 22:15:42.394609 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 13 22:15:47.244689 00:61:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 14 22:15:47.992392 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.37 tell 192.168.0.37, length 46
+ 15 22:15:48.992464 00:1f:29:da:f8:fb > ff:ff:ff:ff:fb:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (29953)
+ 0x0000: 0001 0800 0604 7501 001f 29da f8fb c0a8 ......u...).....
+ 0x0010: 0025 0000 0000 0000 c0a8 0025 0000 0000 .%.........%....
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 16 22:15:50.009690 00:1f:29:da:f8:fb > ff:ff:67:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.128.1 (00:10:00:00:00:00) tell 192.168.0.37, length 46
+ 17 22:15:53.806346 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 18 22:15:57.803933 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 19 22:16:01.788341 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 20 22:16:03.060121 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:4f:00:00) tell 192.168.129.104, length 46
+ 21 22:16:04.788256 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 22 22:16:07.053880 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 23 22:16:08.788215 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 24 22:16:10.053836 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (22785)
+ 0x0000: 0001 0800 0604 5901 001f 29da 2d79 c0a8 ......Y...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0200 0000 0000 0000 ..............
+ 25 22:16:12.053807 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 26 22:16:16.053788 00:33:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.209 tell 192.168.1.104, length 46
+ 27 22:16:20.307491 00:1f:29:da:2d:4e > 48:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 28 22:16:24.303826 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 14), IPv4 (len 4), Request who-has 0.0.0.0 (01:01:10:18:00:10:00:00:00:00:00:00:00:00) tell 0.0.192.168, length 46
+ 29 22:16:28.303661 00:35:29:da:2d:79 > ff:ff:ff:ef:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 30 22:16:32.306257 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 31 22:16:36.303561 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 32 22:16:40.303555 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 33 22:16:41.746045 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 34 22:16:47.555933 00:1f:29:da:2d:79 > ff:ff:fd:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (12289)
+ 0x0000: 0001 0800 0604 3001 001f 29da 2d79 c0a8 ......0...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 35 22:16:51.553500 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 36 22:16:59.556409 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (30465)
+ 0x0000: 0001 0800 0604 7701 001f 29da 2d79 c0a8 ......w...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 37 22:17:03.553431 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 38 22:17:07.553336 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 39 22:17:19.555372 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 40 22:17:23.553207 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (37) (len 6), Unknown Protocol (0x0000) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 41 22:17:26.777651 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 42 22:17:28.771940 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 43 22:17:29.803210 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 44 22:17:34.771835 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 208.168.1.104, length 46
+ 45 22:17:46.056743 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 46 22:17:50.052979 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 47 22:17:54.052939 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 48 22:18:11.783100 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 49 22:18:13.305136 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 50 22:18:17.302719 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 51 22:18:21.302682 00:1f:29:da:2d:79 > ff:ff:ff:ff:34:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 52 22:18:25.305488 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 53 22:18:29.302581 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 54 22:18:33.302589 00:1f:29:da:2d:79 > ff:ff:ff:ff:fa:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), 802.1Q-9200 (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 55 22:18:45.304614 00:1f:29:de:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 56 22:18:49.302489 00:1f:29:da:2d:79 > ff:69:fe:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 57 22:18:53.302405 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 14), IPv4 (len 4), Request who-has 0.0.0.0 (01:01:00:00:00:00:00:00:00:00:00:00:00:00) tell 0.162.192.168, length 46
+ 58 22:18:54.557054 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:d9:00) tell 192.168.1.104, length 46
+ 59 22:18:55.786826 00:1f:29:da:2d:79 > ff:ff:ff:ff:8e:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 60 22:19:01.926262 55:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.121.35 tell 192.168.0.35, length 46
+ 61 22:19:02.019470 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.35 tell 192.168.0.35, length 46
+ 62 22:19:02.552388 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 63 22:19:04.022851 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.35, length 46
+ 64 22:19:11.806163 00:1f:29:da:2d:79 > ff:ff:25:00:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 65 22:19:19.802209 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 66 22:19:39.054562 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 67 22:19:43.052013 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 68 22:19:51.054805 00:1f:29:da:25:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x2500) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 69 22:19:52.963043 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 70 22:19:55.051909 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 71 22:19:59.051861 00:1f:29:da:2d:79 > ef:ff:ff:ff:6e:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.37.0.104, length 46
+ 72 22:20:11.054061 00:1f:29:da:2d:79 > ff:df:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 73 22:20:15.051752 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:4a) tell 192.168.1.104, length 46
+ 74 22:20:19.051695 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 75 22:20:20.306262 00:1f:29:da:c7:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.72 tell 192.168.1.0, length 46
+ 76 22:20:21.848573 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 77 22:20:24.301621 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 78 22:20:28.301692 00:1f:29:da:2d:79 > ff:ff:f7:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (513) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 79 22:20:37.555314 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 80 22:20:45.551771 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (80:00:00:64:00:00) tell 192.168.1.104, length 46
+ 81 22:21:04.803638 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.109.1.104, length 46
+ 82 22:21:08.801227 00:1f:29:31:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 83 22:21:11.867199 00:6d:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Unknown Hardware (9472) (len 6), IPv4 (len 4), Request who-has 192.251.0.1 (00:00:00:00:00:10) tell 196.168.0.30, length 28
+ 84 22:21:11.867544 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 85 22:21:12.801222 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 86 22:21:16.804118 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 87 22:21:20.801247 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 88 22:21:24.801130 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 194.168.1.117, length 46
+ 89 22:21:30.792997 00:13:20:13:d9:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 90 22:21:36.803125 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 91 22:21:44.800935 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 92 22:21:46.055536 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (81) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 93 22:21:47.863467 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 94 22:21:50.051341 00:1f:29:da:2d:59 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x4b00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 95 22:21:54.050947 25:00:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 96 22:22:03.304615 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 97 22:22:07.300753 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.111.1.1 tell 192.170.1.104, length 46
+ 98 22:22:11.300709 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 99 22:22:11.537782 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.198.1 tell 192.168.0.32, length 46
+ 100 22:22:21.023485 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 101 22:22:30.552941 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 102 22:22:34.550521 00:1f:25:00:2d:79 > ff:30:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 103 22:22:38.550508 70:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.149.104, length 46
+ 104 22:22:41.914091 6a:16:17:e0:67:e7 > ff:ff:ff:fe:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 105 22:22:42.553310 00:1f:29:da:25:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x3100) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 106 22:22:46.550441 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 107 22:22:50.550370 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 108 22:23:02.552431 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:77) tell 192.168.1.104, length 46
+ 109 22:23:06.550250 00:1f:29:da:2d:79 > ff:ff:54:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 110 22:23:10.550197 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 111 22:23:11.804826 00:1f:29:da:2d:79 > d4:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 112 22:23:12.235219 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 113 22:23:12.884204 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:4a:00:00:00:00) tell 192.168.1.104, length 46
+ 114 22:23:16.878263 00:25:00:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 115 22:23:20.878208 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 116 22:23:29.054528 00:1f:29:da:2d:79 > ff:ff:49:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 117 22:23:33.050072 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 118 22:23:37.049993 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 119 22:23:43.006969 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.33 tell 192.168.0.31, length 46
+ 120 22:23:56.302257 00:1f:46:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 121 22:24:00.299743 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (34) (len 6), Unknown Protocol (0x0849) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 122 22:24:04.299976 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0841) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 123 22:24:08.302496 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 124 22:24:12.299640 00:1f:29:da:2d:69 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 125 22:24:16.299504 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0xda00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 126 22:24:28.301667 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 64.168.1.104, length 46
+ 127 22:24:32.299363 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (61:00:00:00:00:00) tell 192.168.1.104, length 46
+ 128 22:24:36.299457 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:68:00:00:00) tell 192.168.1.104, length 46
+ 129 22:24:37.554095 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 130 22:24:40.893211 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 131 22:24:43.893152 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 132 22:24:45.549440 00:1f:29:da:2d:d1 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 133 22:24:47.893129 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 134 22:24:58.799293 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 135 22:25:02.799236 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:cc:00) tell 192.168.1.104, length 46
+ 136 22:25:22.051469 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 137 22:25:26.049020 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 138 22:25:30.048985 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 37.0.1.104, length 46
+ 139 22:25:34.051745 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 140 22:25:38.048930 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.53.1.104, length 46
+ 141 22:25:42.048910 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 142 22:25:53.073765 00:1f:2d:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 143 22:25:54.050878 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (37)
+ 0x0000: 0001 0800 0604 0025 001f 29da 2d79 c0a8 .......%..).-y..
+ 0x0010: 0168 0000 6200 0000 c0a8 0101 0000 0000 .h..b...........
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 144 22:25:58.048755 00:1f:a4:da:2d:79 > ff:ff:6b:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 145 22:26:02.048728 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 146 22:26:03.303330 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 147 22:26:05.298703 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 148 22:26:06.945363 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 7), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 149 22:26:08.302974 6e:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 150 22:26:10.298660 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 151 22:26:14.939489 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 152 22:26:16.298572 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.97, length 46
+ 153 22:26:20.552435 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (65)
+ 0x0000: 0001 0800 0604 0041 001f 29da 2500 c0a8 .......A..).%...
+ 0x0010: 0168 0000 0000 8000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0020 0000 0000 0000 0000 0000 ..............
+ 154 22:26:24.548563 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 155 22:26:28.548507 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 156 22:26:32.550782 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 157 22:26:36.548433 00:1f:29:da:25:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.172.1.1 tell 192.168.1.104, length 46
+ 158 22:26:40.548383 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.226.1 tell 192.168.1.104, length 46
+ 159 22:26:42.200754 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 160 22:26:42.201087 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 161 22:26:47.800719 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.170.170 tell 192.168.1.104, length 46
+ 162 22:26:51.798332 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 163 22:26:55.798241 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:01:00:00) tell 192.168.37.0, length 46
+ 164 22:26:59.801241 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 165 22:27:03.798195 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (f5:00:00:00:00:00) tell 192.168.37.0, length 46
+ 166 22:27:07.798148 00:70:29:da:2d:79 > ff:ff:25:00:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 167 22:27:09.703316 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 168 22:27:19.800341 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0xbc00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 169 22:27:23.798018 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 170 22:27:27.797977 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 171 22:27:29.052575 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (117) (len 6), IPv4 (len 4), Unknown (9472)
+ 0x0000: 0075 0800 0604 2500 001f 29da 2d79 c0a8 .u....%...).-y..
+ 0x0010: 0168 0000 0000 0000 c0ac 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 172 22:27:30.536600 00:13:20:13:db:6f > ff:ff:ff:ff:39:25, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 173 22:27:33.047932 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 174 22:27:34.975713 00:1f:29:da:2d:31 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x7a00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 175 22:27:36.969770 00:1f:29:da:2d:78 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 176 22:27:41.485835 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 177 22:27:41.868026 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (16385)
+ 0x0000: 0001 0800 0604 4001 0016 17e0 67e7 c0a8 ......@.....g...
+ 0x0010: 0021 0000 0000 0000 c0a8 0001 0000 0000 .!..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0020 ..............
+ 178 22:27:42.969765 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 179 22:27:46.301633 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 180 22:27:54.297766 00:1f:29:da:2d:79 > 00:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 181 22:28:13.549906 00:1f:29:9b:2d:79 > ff:ff:ff:ea:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 182 22:28:17.547554 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 183 22:28:21.547709 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 184 22:28:25.550256 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (20:00:00:00:00:00) tell 192.168.1.104, length 46
+ 185 22:28:29.547474 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 186 22:28:33.547415 00:1f:29:da:2d:79 > df:f7:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (3) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 187 22:28:45.549404 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 188 22:28:49.547314 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 189 22:28:53.547257 00:1f:29:9a:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.40.1.1 (79:00:00:00:00:00) tell 192.168.1.104, length 46
+ 190 22:28:54.801906 00:1f:29:da:2d:79 > ff:ff:ff:fe:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 191 22:28:58.797213 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 192 22:29:02.053090 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 193 22:29:04.047118 00:1f:29:da:2d:79 > ff:ff:ff:d5:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 194 22:29:07.076129 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (57)
+ 0x0000: 0001 0800 0604 0039 0021 5a21 9efd c0a8 .......9.!Z!....
+ 0x0010: 0023 0000 0000 0000 c0a8 0001 0000 0000 .#..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 195 22:29:10.047095 00:1f:29:da:84:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 196 22:29:14.047089 63:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 197 22:29:39.299148 00:1f:29:9a:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 198 22:29:43.296803 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 199 22:29:47.296795 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.159, length 46
+ 200 22:29:51.299550 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 201 22:29:55.296747 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 202 22:29:59.296651 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 4), IPv4 (len 4), Request who-has 0.0.0.0 (01:68:00:00) tell 45.121.192.168, length 46
+ 203 22:30:11.298683 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (45:00:00:00:00:00) tell 192.168.1.104, length 46
+ 204 22:30:15.296546 00:1f:29:da:2d:79 > ff:ff:ff:fb:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (37) (len 6), Unknown Protocol (0x0000) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 205 22:30:19.296482 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 206 22:30:20.551139 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.184.1.104, length 46
+ 207 22:30:28.546468 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 208 22:30:30.083572 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:32:00:00:00:00) tell 192.168.1.104, length 46
+ 209 22:30:34.077597 00:25:00:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 210 22:30:37.800032 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.33 tell 192.168.1.104, length 46
+ 211 22:30:41.796336 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 212 22:30:45.796285 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 213 22:31:09.046077 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 214 22:31:13.046036 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 215 22:31:17.048877 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 216 22:31:21.045950 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 217 22:31:25.045938 00:1f:29:da:2d:e9 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 218 22:31:33.931516 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.35 tell 192.168.0.35, length 46
+ 219 22:31:34.323433 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.35 tell 192.168.0.35, length 46
+ 220 22:31:35.323433 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (155) (len 6), IPv4 (len 4), Request who-has 192.168.0.35 tell 192.168.0.35, length 46
+ 221 22:31:37.048078 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:b8) tell 192.168.1.104, length 46
+ 222 22:31:43.353288 00:19:db:2b:57:d7 > ff:ff:ff:ae:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 223 22:31:45.045747 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 224 22:31:45.361842 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.35, length 46
+ 225 22:31:46.300377 00:1f:29:da:2d:79 > ff:70:fe:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.68 (00:00:94:00:00:00) tell 192.168.1.104, length 46
+ 226 22:31:48.295664 00:1f:29:da:29:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 227 22:31:54.295753 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.113.1 tell 192.168.1.104, length 46
+ 228 22:31:58.145164 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 229 22:32:00.139363 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 230 22:32:03.549761 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.37.0 tell 192.168.1.104, length 46
+ 231 22:32:07.545603 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 232 22:32:08.087716 00:21:5a:21:9e:fd > 73:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 233 22:32:08.527007 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.35 tell 192.168.0.35, length 46
+ 234 22:32:09.527100 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (8193)
+ 0x0000: 0001 0800 0604 2001 0021 5a21 9efd c0a8 .........!Z!....
+ 0x0010: 0023 0000 0000 0000 c0a8 0023 0000 0000 .#.........#....
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 235 22:32:10.582529 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0854) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 236 22:32:11.545534 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:aa:aa:aa:aa:aa) tell 192.168.1.104, length 46
+ 237 22:32:12.004730 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 224.168.0.30, length 28
+ 238 22:32:12.005055 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 239 22:32:34.795331 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 240 22:32:38.795299 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 241 22:32:42.798146 00:1f:29:da:2d:59 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 242 22:32:46.795349 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 243 22:32:50.795210 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 244 22:33:02.797267 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (49) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 245 22:33:06.795051 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 246 22:33:10.795003 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (70)
+ 0x0000: 0001 0800 0604 0046 001f 29da 2d79 c0a8 .......F..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 247 22:33:11.184036 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 248 22:33:12.049652 1e:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 249 22:33:16.044962 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 250 22:33:20.044988 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 251 22:33:21.849806 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 252 22:33:24.207027 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 253 22:33:28.201107 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 254 22:33:30.573840 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 255 22:33:33.294882 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 256 22:33:37.294793 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 257 22:33:56.546973 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 258 22:34:00.544588 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 259 22:34:04.089303 00:1f:f3:55:65:66 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.38, length 46
+ 260 22:34:04.544546 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 261 22:34:08.547181 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.37.0.1 tell 192.168.1.104, length 46
+ 262 22:34:11.866569 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 263 22:34:12.544462 00:1f:29:da:0d:79 > 71:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 264 22:34:16.544453 00:1f:29:da:2d:79 > ff:ff:ff:ff:e4:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 265 22:34:28.546500 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 266 22:34:36.544263 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 267 22:34:37.798852 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:82) tell 192.168.1.104, length 46
+ 268 22:34:41.794229 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 269 22:34:41.800184 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 270 22:34:45.794225 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (43690)
+ 0x0000: 0001 0800 0604 aaaa aaaa aaaa aaaa aaaa ................
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 271 22:34:49.326346 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.70.1 tell 192.168.1.104, length 46
+ 272 22:34:51.221928 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 273 22:34:53.215945 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (96) (len 6), IPv4 (len 4), Unknown (74)
+ 0x0000: 0060 0800 0604 004a 001f 29da 2d79 c0a8 .`.....J..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 274 22:34:55.047793 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 275 22:34:59.044107 00:1f:29:25:00:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 276 22:35:03.044048 00:1f:29:da:2d:79 > ff:ff:ff:ef:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 277 22:35:22.296359 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.17 tell 192.168.1.104, length 46
+ 278 22:35:26.293854 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 279 22:35:30.293788 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 280 22:35:34.296726 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 281 22:35:38.293753 00:1f:29:da:2d:79 > ff:ff:ff:ff:df:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.87, length 46
+ 282 22:35:42.293738 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:08:00:00) tell 192.168.1.104, length 46
+ 283 22:35:43.026413 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.33 tell 192.168.0.31, length 46
+ 284 22:35:54.295708 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 285 22:35:56.022883 00:1f:29:da:f8:fb > ff:ff:39:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 286 22:35:58.293749 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:6c:00) tell 60.168.1.104, length 46
+ 287 22:36:02.293518 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 288 22:36:03.548092 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 289 22:36:07.543491 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 290 22:36:11.543498 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 291 22:36:16.543378 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 292 22:36:20.262196 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 293 22:36:21.793442 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 294 22:36:23.262132 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.45.104, length 46
+ 295 22:36:24.793321 00:0f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 296 22:36:27.262085 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:aa:00:00) tell 192.168.1.104, length 46
+ 297 22:36:28.793310 00:1f:29:da:2d:79 > ff:4b:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:04:00:10:00:00) tell 192.168.1.104, length 46
+ 298 22:36:32.795730 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:4c:00) tell 192.168.1.104, length 46
+ 299 22:36:36.793241 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 300 22:36:40.793189 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 301 22:36:48.045715 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 302 22:36:52.043119 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 303 22:36:56.043076 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 304 22:37:00.046022 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:40:00:00:00:00) tell 192.168.1.104, length 46
+ 305 22:37:04.042989 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 12), Request who-has <wrong len> (01:01:00:00:00:00) tell <wrong len>, length 46
+ 306 22:37:08.043256 40:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 307 22:37:20.044962 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 308 22:37:24.042815 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.37.0 tell 192.168.1.104, length 46
+ 309 22:37:28.042796 00:1f:29:ca:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 310 22:37:29.298706 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.88 tell 192.168.1.104, length 46
+ 311 22:37:31.292732 00:1f:29:da:2d:79 > ff:63:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:00:00:00:aa) tell 192.168.1.104, length 46
+ 312 22:37:37.292752 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 313 22:37:41.827606 00:08:02:7e:b2:b6 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 314 22:37:41.827924 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 315 22:37:46.546291 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 316 22:37:50.542639 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 317 22:37:54.542546 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (97) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:81:00) tell 192.168.1.104, length 46
+ 318 22:38:13.794811 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.33.1 tell 192.168.1.104, length 46
+ 319 22:38:17.792359 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 320 22:38:21.435513 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 321 22:38:21.792289 01:1f:4d:e7:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 322 22:38:23.557982 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 0.168.1.104, length 46
+ 323 22:38:25.795046 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 324 22:38:29.792253 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (80:00:00:00:00:00) tell 192.168.1.104, length 46
+ 325 22:38:33.792226 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 326 22:38:40.359763 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 327 22:38:43.370177 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.136.1.1 tell 192.168.1.104, length 46
+ 328 22:38:45.794273 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.122.1.104, length 46
+ 329 22:38:49.385774 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 330 22:38:53.792050 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 205.168.1.104, length 46
+ 331 22:38:57.812212 00:1f:29:da:2d:79 > ff:ff:ff:25:00:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (170)
+ 0x0000: 0001 0800 0604 00aa aaaa aaaa aaaa aaaa ................
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 332 22:39:01.807584 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 333 22:39:05.807560 00:37:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 334 22:39:10.468460 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 335 22:39:11.843582 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 336 22:39:14.385647 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:fe:00:00:00) tell 192.168.1.104, length 46
+ 337 22:39:16.057574 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:40) tell 192.168.1.104, length 46
+ 338 22:39:17.385586 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 339 22:39:19.057773 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 340 22:39:21.385548 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 341 22:39:23.057422 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:bf, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 342 22:39:31.923091 00:1f:39:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0801) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 343 22:39:35.916711 00:1f:29:da:2d:79 > ff:ff:25:00:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 344 22:39:39.916628 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 345 22:39:41.855120 00:19:db:2b:57:d7 > ff:ff:ff:ff:f7:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 346 22:39:43.307242 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 347 22:39:50.307207 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 348 22:39:54.309972 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 104.168.1.1 tell 192.168.1.104, length 46
+ 349 22:39:58.307090 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 350 22:40:00.545483 00:13:20:13:db:6f > ff:ff:bf:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 351 22:40:02.307088 00:1f:29:da:2d:79 > ff:32:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 352 22:40:14.309116 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 353 22:40:18.306946 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 354 22:40:22.307043 00:1f:29:da:2d:79 > ff:ff:25:00:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 355 22:40:23.561485 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 356 22:40:27.556843 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 357 22:40:31.556857 00:1f:45:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 358 22:40:39.406435 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 359 22:40:40.810488 00:1f:29:da:2d:79 > 81:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 360 22:40:44.806732 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 361 22:40:48.806588 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 48.168.1.1 tell 192.168.1.104, length 46
+ 362 22:41:08.058802 00:1f:29:da:2d:79 > ff:36:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:9b:00) tell 192.168.1.104, length 46
+ 363 22:41:10.392663 00:0f:fe:3a:7f:20 > 25:00:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 364 22:41:12.056453 00:1f:29:da:2d:96 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 365 22:41:16.056452 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 366 22:41:20.059160 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 367 22:41:24.056379 00:1f:29:da:2d:79 > ff:ff:ff:ff:bc:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 368 22:41:28.056325 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 369 22:41:40.058408 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 370 22:41:44.056194 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:39, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.0.104, length 46
+ 371 22:41:48.056134 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 372 22:41:49.310752 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 373 22:41:51.306167 00:d5:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 374 22:41:57.306132 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 375 22:42:00.548537 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 376 22:42:06.421196 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 377 22:42:07.556037 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 378 22:42:08.738724 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (10:00:20:00:00:00) tell 192.168.0.30, length 28
+ 379 22:42:08.739181 56:21:d8:01:03:c5 > 00:08:02:7e:72:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.108.1 is-at 00:21:d8:01:03:41, length 46
+ 380 22:42:13.535104 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.35, length 46
+ 381 22:42:14.415307 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (129)
+ 0x0000: 0001 0800 0604 0081 001f 29da 2d36 c0a8 ..........).-6..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 382 22:42:33.808185 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 383 22:42:37.805739 00:1f:29:da:78:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x08ae) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 384 22:42:39.352780 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 385 22:42:41.805675 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 386 22:42:45.808434 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 387 22:42:53.805549 00:1f:29:da:2d:79 > ff:ff:ff:ff:33:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 388 22:43:05.807552 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 389 22:43:09.805440 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 390 22:43:13.805416 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (9472) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 391 22:43:15.060010 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (20225)
+ 0x0000: 0001 0800 0604 4f01 001f 29da 2d79 c0a8 ......O...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0075 0000 ...........u..
+ 392 22:43:19.055374 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 393 22:43:23.055379 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:66:00:00:00:00) tell 192.168.1.104, length 46
+ 394 22:43:33.461481 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 395 22:43:40.305486 00:1f:29:da:2d:79 > ff:ff:fd:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 396 22:43:59.557432 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 397 22:44:03.554972 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 398 22:44:07.554937 00:1f:29:25:00:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 399 22:44:11.557720 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:20) tell 192.168.1.104, length 46
+ 400 22:44:19.554838 00:1f:82:da:2d:79 > ff:ff:ff:ff:77:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:69:00:00:00:00) tell 192.168.1.104, length 46
+ 401 22:44:31.556834 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 402 22:44:35.554715 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 403 22:44:39.554661 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (37)
+ 0x0000: 0001 0800 0604 0025 001f 29da 2d79 c0a8 .......%..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0008 0000 0000 0000 0000 ..............
+ 404 22:44:40.809286 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:08:00) tell 192.168.1.104, length 46
+ 405 22:44:44.804728 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (57089)
+ 0x0000: 0001 0800 0604 df01 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 406 22:44:48.804638 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 407 22:44:58.058238 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 113.168.1.104, length 46
+ 408 22:45:06.054452 00:1f:29:41:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 409 22:45:15.411375 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 410 22:45:19.398069 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.37, length 46
+ 411 22:45:23.398037 00:1f:62:da:2d:79 > ff:4c:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 412 22:45:25.306660 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 413 22:45:27.304288 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (02:00:00:00:00:00) tell 192.168.1.104, length 46
+ 414 22:45:30.400504 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 415 22:45:30.584458 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (8193) (len 6), IPv4 (len 4), Request who-has 192.122.0.38 tell 192.168.0.31, length 46
+ 416 22:45:32.022992 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.109.1 tell 192.168.1.104, length 46
+ 417 22:45:33.304204 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 418 22:45:36.023001 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (86)
+ 0x0000: 0001 0800 0604 0056 001f 29da 2d79 c0a8 .......V..).-y..
+ 0x0010: 0168 0000 0000 2500 c0a8 0101 0000 0000 .h....%.........
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 419 22:45:37.307194 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 420 22:45:38.397937 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.37.0, length 46
+ 421 22:45:41.304181 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.72, length 46
+ 422 22:45:41.748284 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.112.0.31, length 46
+ 423 22:45:43.022905 00:1f:29:da:2d:79 > ff:ff:ff:ff:43:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 424 22:45:47.022864 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.242.1.104, length 46
+ 425 22:45:48.647906 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 426 22:45:50.022885 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 427 22:45:51.054092 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 428 22:45:54.022767 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 4), IPv4 (len 4), Unknown (7169)
+ 0x0000: 0001 0800 0404 1c01 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 429 22:45:55.647750 00:1f:2b:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 430 22:45:57.306144 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 431 22:45:59.058333 00:1f:29:da:f8:fb > ff:ff:ef:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 432 22:46:01.304034 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:aa:aa:aa:aa) tell 192.168.1.104, length 46
+ 433 22:46:02.649596 00:1f:29:da:2d:79 > ff:ff:ff:ff:0c:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 434 22:46:06.053981 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0801) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 435 22:46:07.553953 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 436 22:46:09.053937 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 437 22:46:10.553893 00:1f:29:da:2d:79 > ff:ff:ff:ff:af:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 438 22:46:12.553910 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 2), IPv4 (len 4), Request who-has 1.104.0.0 (c0:a8) tell 41.218.45.121, length 46
+ 439 22:46:19.553805 00:1f:29:da:25:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 440 22:46:21.053851 00:1f:29:da:6a:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:00:00:00:aa) tell 192.168.1.104, length 46
+ 441 22:46:24.803843 00:1f:29:da:2d:79 > ff:ff:37:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 442 22:46:28.053887 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 443 22:46:30.918712 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 0), Unknown Protocol (0x0825) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 444 22:46:34.913071 00:1f:9f:88:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 445 22:46:36.069357 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (36) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 446 22:46:37.803657 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 447 22:46:38.913023 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 448 22:46:43.069250 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 449 22:46:46.913018 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:10) tell 192.168.1.104, length 46
+ 450 22:46:51.055929 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 37.0.1.104, length 46
+ 451 22:46:55.053498 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (9698)
+ 0x0000: 0001 0800 0604 25e2 001f 29da 2d79 c0a8 ......%...).-y..
+ 0x0010: 0168 0000 0000 0025 00a8 0101 0000 0000 .h.....%........
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 452 22:46:59.053493 00:1f:29:6c:2d:79 > 73:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 453 22:47:02.084710 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (43690)
+ 0x0000: 0001 0800 0604 aaaa aaaa aaaa aaaa aaaa ................
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 454 22:47:03.169849 00:1f:73:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 455 22:47:05.053418 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:25, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 456 22:47:09.084608 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 457 22:47:11.053347 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 458 22:47:22.162655 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 459 22:47:24.053294 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.230.1.1 tell 192.168.1.104, length 46
+ 460 22:47:31.053181 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 461 22:47:32.307903 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:aa:aa:aa:aa) tell 192.168.1.104, length 46
+ 462 22:47:34.303176 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 463 22:47:40.303158 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 464 22:47:43.045611 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.33 tell 192.168.0.31, length 46
+ 465 22:47:49.556733 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 466 22:47:53.553013 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 467 22:47:57.552991 00:1f:21:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (222)
+ 0x0000: 0001 0800 0604 00de 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 7c00 0000 0000 0000 ......|.......
+ 468 22:48:10.450495 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 469 22:48:10.450974 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 470 22:48:16.805196 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.84.1.1 tell 192.168.1.104, length 46
+ 471 22:48:20.802774 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 472 22:48:24.802723 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:df, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 473 22:48:28.115261 00:1f:29:da:2d:79 > ff:fd:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 474 22:48:29.802762 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 475 22:48:32.802665 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (74)
+ 0x0000: 0001 0800 0604 004a 001f 29da 2d79 c0a8 .......J..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 476 22:48:35.115126 00:1f:29:da:2d:79 > ff:71:ff:ff:ff:b8, ethertype ARP (0x0806), length 60: [|arp]
+ 477 22:48:36.802626 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 478 22:48:48.804622 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.37 tell 192.168.1.104, length 46
+ 479 22:48:52.802523 00:1f:29:da:2f:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 480 22:48:58.057040 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 481 22:49:02.052411 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 482 22:49:15.306201 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 483 22:49:19.302305 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 484 22:49:23.302228 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (58:00:00:00:00:00) tell 192.168.1.104, length 46
+ 485 22:49:27.814844 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 486 22:49:42.246589 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 487 22:49:42.554420 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 488 22:49:46.552070 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (2049) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 489 22:49:54.130129 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x2500) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 490 22:49:55.552015 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 491 22:49:57.130066 00:1f:29:30:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:25:00:00:00) tell 192.168.1.104, length 46
+ 492 22:49:58.551911 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 493 22:50:01.130044 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 494 22:50:02.551913 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 224.168.1.104, length 46
+ 495 22:50:14.553998 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:4c) tell 192.168.1.108, length 46
+ 496 22:50:18.551772 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 497 22:50:22.551748 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 498 22:50:23.806331 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 499 22:50:27.801682 00:1f:29:da:2d:79 > ff:b9:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 500 22:50:31.801712 00:1f:29:da:2c:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 501 22:50:41.055253 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 502 22:50:41.604345 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 503 22:50:45.051546 00:1f:29:da:2d:78 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 504 22:50:49.051516 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 119.168.1.1 tell 192.168.1.104, length 46
+ 505 22:51:08.303659 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 506 22:51:11.659904 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.108.0.1 tell 192.168.0.31, length 46
+ 507 22:51:12.301310 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 508 22:51:16.301443 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 509 22:51:20.145280 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 510 22:51:21.301320 00:1f:29:da:2d:79 > ff:ff:ff:ff:79:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 511 22:51:24.301213 00:1f:46:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:38:00) tell 192.168.1.104, length 46
+ 512 22:51:27.144910 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 99.168.1.104, length 46
+ 513 22:51:28.301160 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.9 tell 192.168.1.104, length 46
+ 514 22:51:30.827146 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.70, length 46
+ 515 22:51:40.303226 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 516 22:51:44.301004 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 517 22:51:48.300946 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (c4:00:00:00:00:00) tell 192.168.1.104, length 46
+ 518 22:51:49.555659 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 519 22:51:53.550929 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 5), Request who-has <wrong len> (00:00:00:00:00:c0) tell <wrong len>, length 46
+ 520 22:51:57.550955 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.4.1 tell 192.168.1.104, length 46
+ 521 22:52:06.804750 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0880) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 522 22:52:10.800795 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:80:00:00) tell 192.168.1.104, length 46
+ 523 22:52:14.800777 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 524 22:52:16.623489 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 525 22:52:34.052917 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:25:00) tell 192.168.1.104, length 46
+ 526 22:52:38.050603 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 527 22:52:42.050563 00:1f:29:da:25:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 528 22:52:46.053310 00:1f:29:da:2d:79 > ff:fb:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 529 22:52:47.159886 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 530 22:52:50.050516 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 531 22:52:54.050502 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 532 22:53:06.052456 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 533 22:53:10.050384 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 534 22:53:14.050311 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 535 22:53:15.304831 00:1f:29:da:2d:79 > ff:ff:75:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 536 22:53:17.300218 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 537 22:53:23.300211 00:1f:29:da:2d:79 > ff:ff:ff:ff:8e:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 538 22:53:32.554078 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:02:00:7e:00:00) tell 192.168.1.104, length 46
+ 539 22:53:36.550055 00:1f:29:da:2d:79 > ff:ff:ff:ff:7f:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 540 22:53:40.550046 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 541 22:53:59.802231 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 542 22:54:03.799840 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 543 22:54:04.107976 00:1f:f3:55:65:66 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.38, length 46
+ 544 22:54:07.799923 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 545 22:54:11.802630 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x2500) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 546 22:54:13.196150 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.250.104, length 46
+ 547 22:54:15.190443 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 548 22:54:19.799660 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.84 (00:00:5f:00:00:00) tell 192.168.1.104, length 46
+ 549 22:54:21.190322 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 550 22:54:31.801974 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 551 22:54:35.799681 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 0), Unknown Protocol (0x0825) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 552 22:54:39.799439 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 553 22:54:41.054185 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 554 22:54:45.049489 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 555 22:54:58.303141 00:1f:29:da:2d:79 > 35:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:04:00:00:00) tell 192.168.1.104, length 46
+ 556 22:55:02.299323 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.136.1.104, length 46
+ 557 22:55:06.299345 00:1f:29:da:2d:79 > ff:25:00:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 558 22:55:12.054044 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 559 22:55:14.500575 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 560 22:55:18.294167 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 561 22:55:25.551619 00:1f:76:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 224.168.1.1 tell 192.168.1.104, length 46
+ 562 22:55:29.548998 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 563 22:55:33.548968 00:1f:29:da:2d:79 > ff:ff:65:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 564 22:55:37.551736 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (32769) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 565 22:55:41.242587 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 566 22:55:45.236367 00:1f:29:db:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.170 tell 192.168.1.104, length 46
+ 567 22:55:49.236487 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 568 22:55:57.550989 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 569 22:56:01.548832 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 0), Unknown Protocol (0x0825) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 570 22:56:02.075675 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.37, length 46
+ 571 22:56:05.548786 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:32) tell 192.168.1.104, length 46
+ 572 22:56:06.803389 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 573 22:56:10.798752 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 574 22:56:11.493690 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.32.1 tell 192.168.0.34, length 46
+ 575 22:56:14.798782 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (5)
+ 0x0000: 0001 0800 0604 0005 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 576 22:56:19.798684 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 577 22:56:24.052338 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:f7, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.5.104, length 46
+ 578 22:56:28.048655 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 579 22:56:32.048564 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.56.1 tell 192.168.1.104, length 46
+ 580 22:56:36.051057 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 581 22:56:40.048516 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 582 22:56:44.048459 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 583 22:56:51.300837 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 584 22:56:55.298445 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 585 22:56:59.298359 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 586 22:57:03.301342 00:1f:29:da:2d:79 > ff:ff:ff:71:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 587 22:57:07.298318 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 588 22:57:11.298344 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 589 22:57:15.298232 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x4800) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 590 22:57:23.300233 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 591 22:57:27.298185 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 592 22:57:30.555703 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0855) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 593 22:57:31.298196 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 594 22:57:32.552671 00:1f:29:da:2d:79 > ff:ff:ff:6d:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (cf:00:00:00:00:00) tell 192.184.77.104, length 46
+ 595 22:57:36.547889 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 596 22:57:40.548005 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:61:00:00:00:00) tell 192.168.1.104, length 46
+ 597 22:57:49.801663 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 598 22:57:53.797893 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 599 22:57:57.797854 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:44:00:00:00) tell 192.168.1.104, length 46
+ 600 22:58:17.050063 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 601 22:58:21.047647 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.106, length 46
+ 602 22:58:25.047608 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 603 22:58:29.050662 00:1f:29:da:2d:79 > ff:ff:ff:73:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (57:66:00:00:00:00) tell 192.168.1.104, length 46
+ 604 22:58:33.047542 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 605 22:58:34.319083 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0884) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 606 22:58:36.313145 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 607 22:58:37.575613 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 608 22:58:37.576072 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 609 22:58:42.313147 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 610 22:58:49.049551 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:00:00:00:aa) tell 192.168.1.104, length 46
+ 611 22:58:53.047423 00:32:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.232.1.1 (14:00:00:00:00:00) tell 224.168.1.104, length 46
+ 612 22:58:57.047919 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (74)
+ 0x0000: 0001 0800 0604 004a 001f 29da 2d79 c0a8 .......J..).-y..
+ 0x0010: 0168 0000 0100 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0025 0000 0000 0038 0000 0000 ...%.....8....
+ 613 22:58:58.303276 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 614 22:59:00.297335 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 615 22:59:06.297344 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 616 22:59:15.550970 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 192.168.1.104, length 46
+ 617 22:59:19.547240 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 618 22:59:23.547194 00:1f:29:da:2d:79 > ff:ff:ff:1e:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.3 tell 192.168.1.104, length 46
+ 619 22:59:42.799234 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 620 22:59:43.080965 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.33 tell 192.168.0.31, length 46
+ 621 22:59:46.796908 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 105.168.1.1 tell 192.168.1.104, length 46
+ 622 22:59:50.796916 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 623 22:59:52.343782 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 624 22:59:54.799665 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 625 22:59:58.796804 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 626 23:00:02.344349 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 627 23:00:09.343573 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 628 23:00:14.798740 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 629 23:00:18.796623 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 630 23:00:22.796609 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:00:00:00:aa) tell 192.168.1.104, length 46
+ 631 23:00:24.051178 00:86:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 632 23:00:28.046565 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:42:00:00:00) tell 192.168.1.104, length 46
+ 633 23:00:32.046563 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (32769)
+ 0x0000: 0001 0800 0604 8001 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0079 0000 0000 0001 .......y......
+ 634 23:00:41.300398 00:1f:29:5a:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 635 23:00:41.814879 00:42:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 636 23:00:45.296399 00:1f:29:9a:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 637 23:00:49.296395 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 638 23:01:08.548678 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 639 23:01:11.802005 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.109, length 46
+ 640 23:01:12.546250 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.89, length 46
+ 641 23:01:16.546209 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.62.1.1 (00:00:00:4d:00:00) tell 192.168.1.104, length 46
+ 642 23:01:24.546119 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x085a) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 643 23:01:28.546071 00:1f:29:da:2d:79 > ff:ff:f6:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 644 23:01:30.389851 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 57.168.1.1 (00:00:00:00:5a:00) tell 192.168.1.104, length 46
+ 645 23:01:33.389738 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.105.1.1 tell 192.168.1.104, length 46
+ 646 23:01:37.389675 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 647 23:01:40.548072 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 648 23:01:42.545987 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 649 23:01:48.545925 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 650 23:01:49.800641 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 651 23:01:57.795820 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 652 23:02:07.049584 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 653 23:02:11.045680 00:1f:29:da:2d:79 > ff:ff:ff:ff:72:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 654 23:02:15.045663 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.33 tell 192.168.1.104, length 46
+ 655 23:02:19.552957 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.35, length 46
+ 656 23:02:38.295458 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 657 23:02:42.295404 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:25:00:00:00) tell 192.168.1.104, length 46
+ 658 23:02:46.298227 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 659 23:02:50.295326 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 660 23:02:54.295306 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 661 23:02:57.457244 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 662 23:02:59.451534 00:1f:29:25:00:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 663 23:03:05.451470 00:1f:29:da:2d:79 > ff:fc:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:52:00:00:00:00) tell 192.168.1.104, length 46
+ 664 23:03:07.295219 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x08f3) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 665 23:03:10.295164 10:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x080a) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 666 23:03:14.295121 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 667 23:03:15.549933 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 668 23:03:19.545399 00:1f:29:da:2d:79 > 55:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 669 23:03:23.545102 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 670 23:03:31.783215 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.8.250, length 46
+ 671 23:03:32.798777 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.105.1.1 tell 192.168.1.104, length 46
+ 672 23:03:36.794963 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (57) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 673 23:03:40.794906 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 674 23:04:00.047080 00:1f:29:d8:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 675 23:04:04.044697 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 676 23:04:08.044657 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 677 23:04:12.047442 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 678 23:04:16.044579 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 679 23:04:20.044545 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 680 23:04:25.519302 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 681 23:04:29.513239 00:1f:29:e8:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 682 23:04:33.044478 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 683 23:04:36.044423 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 684 23:04:41.299174 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:25:00:00) tell 192.168.1.104, length 46
+ 685 23:04:43.294345 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 686 23:04:49.294351 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:20:00:00:00) tell 192.168.1.104, length 46
+ 687 23:05:02.544223 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 688 23:05:06.544192 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 689 23:05:07.768358 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.136, length 46
+ 690 23:05:08.812112 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 691 23:05:17.271297 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (00:00:00:25:00:00) tell 192.168.0.33, length 46
+ 692 23:05:25.796628 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 693 23:05:29.793978 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 694 23:05:33.794172 00:1f:70:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (43690)
+ 0x0000: 0001 0800 0604 aaaa aaaa aaaa aaaa aaaa ................
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 695 23:05:37.796764 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0873) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 696 23:05:41.793851 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (42753) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:7f) tell 192.168.1.104, length 46
+ 697 23:05:45.793826 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 698 23:05:51.580969 00:25:00:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 699 23:05:55.575016 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 700 23:05:58.793734 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 701 23:06:01.793689 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 702 23:06:05.016227 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.37, length 46
+ 703 23:06:05.793654 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 704 23:06:07.048226 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 705 23:06:11.043637 00:1f:29:da:2d:79 > ff:ff:78:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 706 23:06:12.561763 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 707 23:06:12.562203 00:21:79:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 708 23:06:15.043599 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x6800) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 709 23:06:20.043554 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 200.168.1.1 tell 192.168.1.104, length 46
+ 710 23:06:28.293440 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 711 23:06:32.293418 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 712 23:06:36.296199 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 713 23:06:40.293349 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 714 23:06:44.293280 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.0 tell 192.168.1.104, length 46
+ 715 23:06:51.545561 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (25:00:00:00:00:00) tell 192.168.1.104, length 46
+ 716 23:06:55.543258 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 717 23:06:59.543210 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 718 23:07:03.546290 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 719 23:07:11.273609 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 720 23:07:11.543168 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reverse Request who-is 00:00:00:00:00:00 tell 00:65:29:da:2d:79, length 46
+ 721 23:07:18.595497 00:1f:29:ec:2d:79 > ff:ff:ff:25:00:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (79)
+ 0x0000: 0001 0800 0604 004f 001f 29da 2d79 c0a8 .......O..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 722 23:07:22.589845 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 723 23:07:24.543022 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 724 23:07:26.589696 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 725 23:07:31.542961 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 726 23:07:32.797781 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 727 23:07:36.792882 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 728 23:07:40.793459 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 128.168.1.104, length 46
+ 729 23:07:50.046680 00:1f:29:da:2d:79 > ff:ff:2c:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.98.1 tell 192.168.1.104, length 46
+ 730 23:07:54.042808 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 731 23:08:17.294904 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 732 23:08:25.292453 00:1f:29:da:2c:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 733 23:08:29.295407 00:1f:29:1a:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 734 23:08:33.292326 00:1f:29:da:2d:79 > ff:ff:ff:69:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 735 23:08:37.292311 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.87.1.1 (00:20:00:00:00:00) tell 192.168.1.104, length 46
+ 736 23:08:46.641840 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 737 23:08:50.292285 00:1f:2d:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0810) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 738 23:08:54.635977 00:1f:29:da:2d:79 > ff:eb:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 739 23:08:58.546867 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 740 23:09:02.542150 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (37) (len 6), Unknown Protocol (0x0000) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 741 23:09:06.542208 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 742 23:09:15.795771 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 743 23:09:19.791979 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:00:00:00:aa) tell 192.168.1.104, length 46
+ 744 23:09:23.791952 00:64:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 745 23:09:32.952206 00:13:20:13:db:6f > ff:ff:ff:ff:ff:25, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 746 23:09:43.044120 00:1f:29:6e:2d:79 > 25:00:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 747 23:09:47.041719 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 748 23:09:51.041746 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 749 23:09:55.044507 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 750 23:09:59.041600 00:1f:29:da:2d:69 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 751 23:10:03.041571 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (37) (len 6), Unknown Protocol (0x0000) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 752 23:10:12.704583 00:1f:29:da:2d:79 > df:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (32769)
+ 0x0000: 0001 0800 0604 8001 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 3e00 0000 0000 0000 0000 0000 0000 >.............
+ 753 23:10:16.041495 00:1f:2b:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 754 23:10:20.697704 00:1f:29:da:2d:79 > ff:ff:ff:41:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.5.1 tell 192.168.1.104, length 46
+ 755 23:10:23.041398 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 756 23:10:24.296143 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 757 23:10:32.291366 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 758 23:10:41.544912 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 759 23:10:45.541301 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 760 23:10:49.541272 00:1f:2d:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 761 23:11:08.793433 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 762 23:11:12.791010 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 763 23:11:16.790965 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 764 23:11:20.793909 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 765 23:11:24.790885 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 766 23:11:28.790846 00:1f:29:ca:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 767 23:11:40.719855 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.54.104, length 46
+ 768 23:11:41.523698 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (17921)
+ 0x0000: 0001 0800 0604 4601 000f fe3a 7f20 c0a8 ......F....:....
+ 0x0010: 0020 0000 0000 0000 c0a8 0001 0000 0000 ................
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 769 23:11:41.790746 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (16385) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 770 23:11:42.046633 00:08:02:7e:b2:36 > ff:ff:4e:60:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 771 23:11:42.046940 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 772 23:11:43.116074 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x084e) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 773 23:11:48.712645 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.181.1.1 tell 192.168.1.104, length 46
+ 774 23:11:50.045433 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 775 23:11:54.040622 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.17.1 tell 192.168.1.104, length 46
+ 776 23:12:06.898791 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 777 23:12:07.294171 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 243.168.1.104, length 46
+ 778 23:12:11.290483 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:80:00) tell 192.168.1.104, length 46
+ 779 23:12:11.971151 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (00:00:00:00:25:00) tell 192.168.0.33, length 46
+ 780 23:12:15.290470 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.113.1.104, length 46
+ 781 23:12:22.633496 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (30977) (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.35, length 46
+ 782 23:12:34.542674 25:00:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 0), Unknown Protocol (0x0825) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 783 23:12:38.540252 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:6f:00:00:00:00) tell 192.168.1.104, length 46
+ 784 23:12:41.272880 00:19:db:2b:57:d7 > ff:45:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 785 23:12:42.540224 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 786 23:12:46.543016 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 787 23:12:50.540165 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 788 23:12:54.540126 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.122.104, length 46
+ 789 23:13:06.542201 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 790 23:13:09.780469 00:1f:29:da:2d:41 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 791 23:13:15.794663 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 792 23:13:19.789907 00:1f:29:72:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.115.1 tell 192.168.1.104, length 46
+ 793 23:13:33.043532 00:1f:29:da:2d:79 > ff:ff:ff:ff:f0:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 64.168.1.46 tell 192.168.1.104, length 46
+ 794 23:13:37.039731 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 795 23:13:41.039715 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 68.168.1.1 tell 192.168.1.104, length 46
+ 796 23:14:00.291852 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 797 23:14:04.116574 00:1f:f3:55:65:66 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.38, length 46
+ 798 23:14:04.289506 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 799 23:14:08.289470 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:a0:00) tell 192.168.1.104, length 46
+ 800 23:14:12.292441 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 801 23:14:16.289584 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 802 23:14:20.289363 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:00:aa:aa:aa) tell 192.168.1.104, length 46
+ 803 23:14:32.291456 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 804 23:14:36.289282 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0xd000) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 805 23:14:37.607388 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 806 23:14:41.543938 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 807 23:14:45.539214 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 808 23:14:49.539191 00:1f:29:da:2d:79 > ff:ff:ff:ff:25:00, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (36097)
+ 0x0000: 0001 0800 0604 8d01 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 6b00 0000 0000 0000 0000 0000 0000 k.............
+ 809 23:14:58.792680 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 810 23:15:02.789006 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:38) tell 192.168.1.104, length 46
+ 811 23:15:06.788976 00:1f:29:da:2d:79 > ff:ff:ff:f7:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 812 23:15:26.023931 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 813 23:15:26.041149 70:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 814 23:15:29.818069 00:16:31:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 815 23:15:30.038723 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 816 23:15:30.838833 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 4), IPv4 (len 4), Request who-has 0.0.0.0 (00:1f:00:00) tell 219.111.192.168, length 46
+ 817 23:15:34.038704 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:63:00) tell 192.168.1.104, length 46
+ 818 23:15:38.041544 00:1f:29:da:2d:79 > ff:ff:ff:87:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 819 23:15:42.038637 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.37.0, length 46
+ 820 23:15:58.040689 00:1f:29:54:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 821 23:16:02.038476 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:25:00:00:00:00) tell 192.168.1.104, length 46
+ 822 23:16:03.669429 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 157.168.1.1 tell 192.168.1.104, length 46
+ 823 23:16:05.663426 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 824 23:16:07.293401 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 825 23:16:07.997569 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.37, length 46
+ 826 23:16:09.288397 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 827 23:16:13.288426 46:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 828 23:16:20.288302 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 829 23:16:24.542172 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 830 23:16:28.538323 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:25:00:00:00:00) tell 192.168.1.104, length 46
+ 831 23:16:32.538305 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 832 23:16:36.540758 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 833 23:16:40.538191 00:1f:29:da:2d:79 > ff:ff:fd:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 834 23:16:44.538128 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 835 23:16:51.790494 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 836 23:16:55.788022 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 837 23:16:59.788003 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 838 23:17:03.790902 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 192.168.1.170, length 46
+ 839 23:17:07.787915 da:1f:29:76:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 49.168.1.1 (00:00:25:00:00:00) tell 192.168.1.104, length 46
+ 840 23:17:11.787877 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:fe, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 841 23:17:23.789971 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 842 23:17:27.787733 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 843 23:17:31.700419 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 844 23:17:33.042473 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (53761) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 845 23:17:37.037625 00:1f:29:da:71:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 846 23:17:41.037641 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 847 23:17:54.287509 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 242.168.1.104, length 46
+ 848 23:17:58.287486 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 849 23:18:11.147267 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 850 23:18:17.539655 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 851 23:18:21.537309 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 37.0.1.104, length 46
+ 852 23:18:25.537273 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 853 23:18:29.540017 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (33) (len 6), IPv4 (len 4), Request who-has 192.168.1.65 tell 192.168.1.104, length 46
+ 854 23:18:33.537265 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.120 tell 192.168.1.104, length 46
+ 855 23:18:37.537151 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:37:00:00:00:00) tell 192.168.1.104, length 46
+ 856 23:18:42.012181 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 857 23:18:49.539197 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 858 23:18:53.537068 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 859 23:18:56.761673 00:1f:29:da:2d:79 > ff:ff:61:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0801) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 860 23:18:58.755676 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:7b:00:00:00:00) tell 192.168.1.104, length 46
+ 861 23:18:59.787002 54:1f:29:da:2d:79 > ff:71:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 862 23:19:04.755636 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 863 23:19:16.040483 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 864 23:19:20.036800 00:1f:29:da:2d:b8 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 865 23:19:24.036738 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 866 23:19:43.288836 00:1f:29:da:2d:79 > ff:ff:ff:ff:fe:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 867 23:19:47.286527 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.0 tell 192.168.1.104, length 46
+ 868 23:19:51.286535 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x5700) (len 4), Request who-has <wrong proto type> (00:00:ab:00:00:00) tell <wrong proto type>, length 46
+ 869 23:19:59.286394 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (12289) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:20) tell 192.168.1.104, length 46
+ 870 23:20:03.286383 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.170.1.1 tell 192.168.1.104, length 46
+ 871 23:20:10.391802 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 872 23:20:15.288440 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 873 23:20:19.286255 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x086d) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 874 23:20:24.542162 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 875 23:20:25.739378 00:1f:29:da:2d:78 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.3.104, length 46
+ 876 23:20:41.789770 d6:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 877 23:20:45.786058 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (2049)
+ 0x0000: 0001 0800 0604 0801 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 878 23:20:49.786147 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 879 23:21:09.038111 00:1f:29:da:2d:79 > ff:54:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 880 23:21:13.035812 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 57.168.1.1 tell 192.168.1.104, length 46
+ 881 23:21:17.035733 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:70:00:00:00:00) tell 192.168.1.104, length 46
+ 882 23:21:21.038564 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 883 23:21:25.035693 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 222.168.1.1 tell 0.168.1.104, length 46
+ 884 23:21:29.035632 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 885 23:21:31.006085 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 886 23:21:41.037604 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 887 23:21:45.035472 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 888 23:21:49.035453 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 889 23:21:51.785444 00:1f:29:da:2d:79 > ff:fc:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 890 23:21:53.785435 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (30209)
+ 0x0000: 0001 0800 0604 7601 001f 29da 2d79 c0a8 ......v...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0051 0000 ...........Q..
+ 891 23:21:57.785395 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (28417)
+ 0x0000: 0001 0800 0604 6f01 001f 29da 2d79 c0a8 ......o...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 892 23:22:07.538981 00:1f:29:da:2d:79 > 65:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:dd:00:00) tell 192.168.1.104, length 46
+ 893 23:22:11.535309 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.37.0.1 (04:00:00:00:00:00) tell 192.168.1.104, length 46
+ 894 23:22:15.535282 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:34, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 895 23:22:25.573748 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.35, length 46
+ 896 23:22:34.787477 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 897 23:22:38.785034 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 898 23:22:41.029225 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.184.0.37 tell 192.168.0.32, length 46
+ 899 23:22:41.880999 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 900 23:22:41.881310 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x081a) (len 4), Reply <wrong proto type> is-at 00:21:d8:01:03:45, length 46
+ 901 23:22:42.785016 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 902 23:22:46.787769 10:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 903 23:22:50.784911 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 904 23:22:54.785055 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0835) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 905 23:23:06.786893 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 906 23:23:10.784765 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.232.1.104, length 46
+ 907 23:23:14.784720 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 908 23:23:16.039325 00:1f:eb:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 909 23:23:17.806177 00:1f:29:da:2d:79 > ff:ff:66:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 910 23:23:19.800311 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 911 23:23:24.034675 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 118.168.1.1 tell 192.168.1.104, length 46
+ 912 23:23:25.800274 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 913 23:23:33.288396 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 914 23:23:37.284552 00:1f:29:da:72:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 915 23:23:41.162115 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 916 23:23:41.284504 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.190, length 46
+ 917 23:23:43.151475 00:13:20:13:db:6f > ff:ff:ff:30:ff:50, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.33 tell 192.168.0.31, length 46
+ 918 23:24:04.534288 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 919 23:24:08.534279 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 920 23:24:11.992481 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.78, length 46
+ 921 23:24:12.537019 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (38:00:00:00:00:00) tell 192.168.1.104, length 46
+ 922 23:24:16.534208 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 923 23:24:20.534174 00:1e:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:39) tell 192.168.1.104, length 46
+ 924 23:24:32.536176 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 925 23:24:36.534086 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (ed:00:00:00:00:00) tell 192.168.1.104, length 46
+ 926 23:24:40.534022 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 927 23:24:41.788645 00:1f:29:da:87:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 928 23:24:45.783943 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:32:00:00:00:00) tell 192.184.1.104, length 46
+ 929 23:24:46.862126 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 930 23:24:53.862028 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 931 23:24:59.037475 00:1f:29:da:2d:79 > ff:ff:ff:ff:3f:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 932 23:25:03.033809 00:1f:29:da:2d:79 > ff:ff:ff:c6:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 933 23:25:07.033777 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 934 23:25:26.286090 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 935 23:25:30.283579 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 936 23:25:34.283569 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 87.168.1.104, length 46
+ 937 23:25:38.286302 00:1f:29:da:2d:79 > 28:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (22017)
+ 0x0000: 0001 0800 0604 5601 001f 29da 2d79 c0a8 ......V...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 938 23:25:42.283502 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 939 23:25:46.283513 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 940 23:25:58.285496 00:1f:29:da:2d:79 > ff:ff:ff:7f:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 7), IPv4 (len 4), Request who-has 1.1.0.0 (00:00:00:00:00:1b:a8) tell 168.1.104.0, length 46
+ 941 23:26:02.283359 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 76.168.1.1 tell 192.168.1.104, length 46
+ 942 23:26:06.283336 00:1f:29:da:2d:79 > ff:ff:ff:ef:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 943 23:26:07.537924 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 944 23:26:10.987573 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.37, length 46
+ 945 23:26:14.929908 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 946 23:26:16.533191 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:6d:00) tell 192.168.1.104, length 46
+ 947 23:26:20.533143 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:10:00:00:00:00) tell 192.168.1.104, length 46
+ 948 23:26:32.783037 00:1f:29:da:2d:79 > ff:ff:ff:f8:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 949 23:26:36.785275 00:1f:29:da:3d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:77:00:00) tell 192.168.1.104, length 46
+ 950 23:26:40.782947 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:ee) tell 192.168.1.104, length 46
+ 951 23:26:44.782941 00:1f:29:da:2d:79 > ff:ff:ff:bf:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.170 (00:3f:00:00:00:00) tell 192.168.1.104, length 46
+ 952 23:26:52.035248 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0802) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 953 23:26:56.032856 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 954 23:27:00.032784 00:1f:29:da:67:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0855) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 955 23:27:04.035765 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 956 23:27:08.032784 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 957 23:27:12.032695 00:1f:ba:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 958 23:27:23.558659 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (41985) (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 959 23:27:24.034663 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (9472)
+ 0x0000: 0001 0800 0604 2500 001f 29da 2d79 c0a8 ......%...).-y..
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 960 23:27:28.032567 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:30) tell 192.168.1.104, length 46
+ 961 23:27:30.609058 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 962 23:27:32.032520 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 963 23:27:33.287117 0d:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:98:00:00:00:00) tell 192.168.1.104, length 46
+ 964 23:27:35.282443 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 965 23:27:41.282668 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 966 23:27:43.016840 00:c2:29:da:2d:79 > 25:00:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 37.0.1.1 tell 192.168.1.104, length 46
+ 967 23:27:50.016732 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 968 23:27:51.412814 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.42, length 46
+ 969 23:27:51.532405 00:1f:29:da:6e:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 970 23:27:54.532371 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 194.168.1.1 tell 192.168.1.104, length 46
+ 971 23:27:58.532352 00:1f:2b:da:2d:79 > fd:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 972 23:28:05.544491 00:16:17:e0:67:e7 > ff:ff:ff:92:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 973 23:28:10.946012 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 974 23:28:12.390570 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 975 23:28:17.784649 00:1f:29:da:2d:79 > ff:ff:25:00:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 976 23:28:21.782372 00:1f:29:c6:2d:79 > ff:4b:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 977 23:28:25.782199 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 978 23:28:29.784893 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 979 23:28:33.781984 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 980 23:28:37.781948 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 981 23:28:49.784125 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 982 23:28:53.781805 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.83 (00:00:00:61:00:00) tell 192.168.1.104, length 46
+ 983 23:28:57.781775 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 984 23:28:59.036394 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 985 23:29:03.031715 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 205.168.1.1 tell 192.168.1.104, length 46
+ 986 23:29:07.031730 00:1f:29:da:2d:79 > ff:ff:ff:ff:ef:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 987 23:29:13.047275 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 988 23:29:16.285493 00:1f:29:da:2d:79 > fb:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 989 23:29:20.281572 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 990 23:29:24.281537 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 991 23:29:42.365395 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 992 23:29:43.533677 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 993 23:29:47.531348 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 14), IPv4 (len 4), Unknown (43690)
+ 0x0000: 0001 0800 0e04 aaaa aaaa aaaa aaaa aaaa ................
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 994 23:29:51.531374 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 995 23:29:55.534291 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 996 23:29:59.531261 00:1f:29:da:2d:69 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 997 23:30:03.531248 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.180.1 tell 192.168.1.104, length 46
+ 998 23:30:15.533555 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (62:00:00:00:00:00) tell 192.168.1.104, length 46
+ 999 23:30:19.531100 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:10) tell 192.168.1.104, length 46
+ 1000 23:30:23.531058 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1001 23:30:24.785597 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1002 23:30:28.780995 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1003 23:30:32.781017 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.5.1 tell 192.168.1.104, length 46
+ 1004 23:30:36.099577 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.4.1.104, length 46
+ 1005 23:30:38.093398 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1006 23:30:42.034658 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1007 23:30:46.030808 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1008 23:30:50.030738 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:80:00:00) tell 192.168.1.104, length 46
+ 1009 23:31:09.283126 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1010 23:31:13.280525 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 1011 23:31:21.283719 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1012 23:31:25.280504 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 1013 23:31:29.280453 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.136.1.1 tell 192.168.1.104, length 46
+ 1014 23:31:41.282537 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1015 23:31:45.280340 00:1f:29:da:2d:19 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1016 23:31:49.280284 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.170.170.170 tell 192.168.1.104, length 46
+ 1017 23:31:50.535049 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (246) (len 6), IPv4 (len 4), Request who-has 192.104.1.1 tell 192.168.1.104, length 46
+ 1018 23:31:54.530296 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1019 23:31:58.530297 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1020 23:32:03.129798 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1021 23:32:07.123875 00:1f:29:da:2d:cb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1022 23:32:08.780198 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1023 23:32:11.123858 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1024 23:32:15.780079 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0a00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1025 23:32:28.691618 00:21:5a:21:9e:fd > ff:e8:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.35, length 46
+ 1026 23:32:35.032198 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:40:00:00:00:00) tell 192.37.0.104, length 46
+ 1027 23:32:39.029877 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (8193) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:04:00:00) tell 192.168.1.104, length 46
+ 1028 23:32:43.029986 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1029 23:32:47.032557 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x2500) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1030 23:32:51.029744 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1031 23:32:55.029724 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:01:00:00:00:00) tell 192.168.1.104, length 46
+ 1032 23:33:07.031780 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (139) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1033 23:33:11.029619 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1034 23:33:15.029524 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1035 23:33:16.284384 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (19969) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1036 23:33:18.279479 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1037 23:33:24.279506 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:d3:00:00:00) tell 192.168.1.104, length 46
+ 1038 23:33:30.176042 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1039 23:33:30.608670 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.104.0.38 tell 192.168.0.31, length 46
+ 1040 23:33:33.533270 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (25:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1041 23:33:35.529434 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1042 23:33:35.897941 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 1043 23:33:41.529346 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1044 23:34:00.781544 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (28161)
+ 0x0000: 0001 0800 0604 6e01 001f 29da 2d79 c0a8 ......n...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1045 23:34:04.128586 00:1f:f3:55:65:66 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.38, length 46
+ 1046 23:34:04.779146 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1047 23:34:08.779135 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:72:00:00:00) tell 192.168.1.104, length 46
+ 1048 23:34:12.781930 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1049 23:34:16.779048 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1050 23:34:20.778991 00:1f:29:da:2d:79 > ff:ef:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.5 tell 192.168.1.104, length 46
+ 1051 23:34:32.781056 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.70.1 tell 192.168.1.104, length 46
+ 1052 23:34:36.778858 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1053 23:34:40.778829 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:f5:00:00:00:00) tell 192.168.1.104, length 46
+ 1054 23:34:41.957562 00:19:db:2b:ad:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 1055 23:34:42.033347 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1056 23:34:46.028821 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1057 23:34:49.279261 00:1f:29:da:36:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.120, length 46
+ 1058 23:34:53.278711 00:1f:29:da:2d:79 > ff:ff:ff:ff:c0:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 0.168.1.104, length 46
+ 1059 23:34:57.206485 00:1f:29:da:2d:62 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1060 23:35:00.278799 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1061 23:35:03.278641 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1062 23:35:05.200437 00:1f:29:da:2d:79 > ff:ff:25:00:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:55) tell 192.168.1.104, length 46
+ 1063 23:35:07.278632 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1064 23:35:12.183188 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.40.1 (00:00:80:00:00:00) tell 192.168.0.31, length 46
+ 1065 23:35:26.530919 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reverse Request who-is 00:00:00:00:00:00 tell 00:1f:29:da:2d:79, length 46
+ 1066 23:35:30.528390 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1067 23:35:34.528364 00:30:09:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.77.1.1 tell 192.168.1.104, length 46
+ 1068 23:35:38.531158 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (18689)
+ 0x0000: 0001 0800 0604 4901 701f 29da 2d79 c0a8 ......I.p.).-y..
+ 0x0010: 0168 0000 8c00 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1069 23:35:42.528336 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1070 23:35:43.186385 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.33 tell 192.168.0.31, length 46
+ 1071 23:35:46.528270 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.37 tell 192.168.1.104, length 46
+ 1072 23:36:02.528202 00:1f:29:da:97:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (16641)
+ 0x0000: 0001 0800 0604 4101 001f 29da 2d79 c0a8 ......A...).-y..
+ 0x0010: 6368 0000 0000 0000 c0a8 0101 0000 0000 ch..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1073 23:36:06.528089 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1074 23:36:07.782705 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (5a:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1075 23:36:11.778000 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1076 23:36:14.222851 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.54.0.37, length 46
+ 1077 23:36:15.778010 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.17.1 tell 192.168.109.104, length 46
+ 1078 23:36:20.777972 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (769) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1079 23:36:24.246689 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1080 23:36:26.027956 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1081 23:36:27.043488 00:1f:29:da:2d:79 > ff:ff:63:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (32769) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1082 23:36:29.027894 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1083 23:36:31.246589 00:1f:29:da:2d:79 > 62:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1084 23:36:33.027829 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1085 23:36:37.010089 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 1086 23:36:37.010535 00:21:d8:01:03:45 > 40:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 1087 23:36:37.030244 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.90 tell 192.168.1.104, length 46
+ 1088 23:36:41.027768 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1089 23:36:45.027751 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:33:00:00:00:00) tell 70.168.1.104, length 46
+ 1090 23:36:52.295689 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1091 23:36:56.293285 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1092 23:37:04.296276 00:1f:29:da:2d:79 > ff:3d:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1093 23:37:08.293103 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 0.168.1.104, length 46
+ 1094 23:37:12.293159 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1095 23:37:24.295191 00:1f:29:da:2d:79 > 61:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1096 23:37:28.292975 00:1f:29:d2:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1097 23:37:32.292944 00:25:00:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:e0:00) tell 192.168.1.104, length 46
+ 1098 23:37:33.547598 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1099 23:37:37.542957 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1100 23:37:41.542936 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1101 23:37:50.267468 40:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1102 23:37:58.261466 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1103 23:38:18.045051 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.107, length 46
+ 1104 23:38:22.042535 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (87)
+ 0x0000: 0001 0800 0604 0057 001f 29da 2d79 c0a8 .......W..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 5400 0000 ..........T...
+ 1105 23:38:26.042497 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1106 23:38:30.045290 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1107 23:38:34.042422 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1108 23:38:38.042407 00:1f:29:da:25:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:56:00) tell 192.168.1.104, length 46
+ 1109 23:38:50.044341 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1110 23:38:54.042268 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0xf300) (len 4), Request who-has <wrong proto type> (58:00:00:00:00:00) tell <wrong proto type>, length 46
+ 1111 23:38:58.042245 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1112 23:38:59.296835 00:1f:29:da:2d:79 > b2:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x4c00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1113 23:39:01.292184 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1114 23:39:07.292143 00:1f:29:da:2d:79 > ff:ff:a3:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1115 23:39:10.935921 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 1116 23:39:11.861605 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 33.168.0.30, length 28
+ 1117 23:39:11.861913 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 1118 23:39:16.545763 00:25:00:da:2d:79 > ff:25:00:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1119 23:39:18.292073 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (37) (len 6), Unknown Protocol (0x0000) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1120 23:39:20.542318 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1121 23:39:24.542013 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1122 23:39:32.881795 00:13:20:13:10:6f > ff:ff:ff:7f:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 1123 23:39:43.794215 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 4), IPv4 (len 4), Request who-has 0.0.0.0 (01:68:00:54) tell 45.121.192.168, length 46
+ 1124 23:39:55.794630 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0801) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1125 23:39:59.791675 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.110.1.1 tell 192.168.1.104, length 46
+ 1126 23:40:03.791724 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.232.1.1 tell 192.168.1.104, length 46
+ 1127 23:40:15.793693 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1128 23:40:19.791530 76:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1129 23:40:23.791660 00:1f:29:da:65:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1130 23:40:25.046650 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1131 23:40:29.041441 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1132 23:40:33.041450 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1133 23:40:42.294978 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1134 23:40:43.344103 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.119.1.1 tell 192.168.1.104, length 46
+ 1135 23:40:47.338129 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (44545)
+ 0x0000: 0001 0800 0604 ae01 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0077 0000 0000 0000 0000 0000 0000 .w............
+ 1136 23:40:51.338106 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1137 23:41:09.543584 00:1f:29:da:2d:79 > f7:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1138 23:41:13.541087 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:aa:aa:aa:aa) tell 192.168.1.104, length 46
+ 1139 23:41:17.541052 00:17:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1140 23:41:21.543842 70:1f:29:da:89:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1141 23:41:25.540986 51:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (21505) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1142 23:41:29.540934 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1143 23:41:41.542916 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:80:00:00:00:00) tell 192.168.1.104, length 46
+ 1144 23:41:45.540783 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1145 23:41:49.540763 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 0.168.1.104, length 46
+ 1146 23:41:50.796650 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (43009) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1147 23:41:54.790692 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1148 23:42:08.044423 00:1f:29:da:2d:79 > ff:ff:ff:62:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1149 23:42:11.358957 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0810) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1150 23:42:15.353029 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:48) tell 192.168.1.104, length 46
+ 1151 23:42:19.352982 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1152 23:42:31.588798 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (00:00:00:04:00:00) tell 192.168.0.35, length 46
+ 1153 23:42:35.292778 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1154 23:42:39.290331 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (9472)
+ 0x0000: 0001 0800 0604 2500 5d1f 29da 2d79 c0a8 ......%.].).-y..
+ 0x0010: 0168 0000 0200 0000 c0a8 0101 00b9 c325 .h.............%
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1155 23:42:39.347382 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 1156 23:42:43.290309 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1157 23:42:45.087171 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1158 23:42:48.290268 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1159 23:42:52.087048 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1160 23:42:59.089062 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0875) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1161 23:43:01.086980 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (13569) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1162 23:43:07.086906 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.17 tell 192.168.1.104, length 46
+ 1163 23:43:08.290121 00:1f:09:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1164 23:43:11.290037 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1165 23:43:15.289976 00:1f:2d:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1166 23:43:16.544683 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1167 23:43:20.539979 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.72.104, length 46
+ 1168 23:43:24.539964 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x08b2) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1169 23:43:28.352467 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1170 23:43:33.793217 00:1f:28:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:43:00:00:00) tell 192.168.1.104, length 46
+ 1171 23:43:35.352308 00:1f:29:da:2d:79 > ff:ff:fe:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (103) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1172 23:43:37.789802 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1173 23:43:41.790095 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1174 23:43:43.352326 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:05) tell 192.168.1.104, length 46
+ 1175 23:43:50.352249 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1176 23:43:59.609287 00:1f:75:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1177 23:44:01.041970 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1178 23:44:05.039549 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1179 23:44:08.352145 00:1f:29:da:25:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 192.170.170.170, length 46
+ 1180 23:44:11.408811 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (5)
+ 0x0000: 0001 0800 0604 0005 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0016 0000 0000 0000 0000 ..............
+ 1181 23:44:12.602050 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1182 23:44:14.603919 00:1f:29:da:6d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1183 23:44:18.601955 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 192.168.170.170, length 46
+ 1184 23:44:22.355555 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1185 23:44:26.351962 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1186 23:44:27.429927 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1187 23:44:31.604072 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1188 23:44:35.601819 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.57.1 tell 192.168.1.104, length 46
+ 1189 23:44:39.601786 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1190 23:44:40.856409 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1191 23:44:42.213963 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 1192 23:44:42.214291 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (4098)
+ 0x0000: 0001 0800 0604 1002 0021 d801 0345 c057 .........!...E.W
+ 0x0010: 0001 0008 027e b236 c0a8 001e 0000 0000 .....~.6........
+ 0x0020: 0000 0000 0000 0000 0000 007d 0000 ...........}..
+ 1193 23:44:42.216171 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 1194 23:44:42.429877 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.115.1 tell 192.168.1.104, length 46
+ 1195 23:44:43.867494 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1196 23:44:45.429854 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.65 tell 192.168.1.104, length 46
+ 1197 23:44:46.867551 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1198 23:44:48.851882 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.11.1 tell 192.168.1.104, length 46
+ 1199 23:44:50.867322 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1200 23:44:56.443048 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1201 23:44:57.869220 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1202 23:44:59.101629 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1203 23:45:00.429680 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1204 23:45:01.867191 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.129.104, length 46
+ 1205 23:45:04.429688 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1206 23:45:05.867135 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1207 23:45:11.445588 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 174.168.9.1 tell 49.168.1.104, length 46
+ 1208 23:45:15.445264 00:1f:29:da:2d:79 > ff:ff:f7:43:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (513) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1209 23:45:19.445169 00:1f:29:da:2d:79 > bf:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1210 23:45:25.353792 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0856) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1211 23:45:29.351368 00:1f:29:da:2d:79 > ff:ff:ff:ff:19:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 48.168.1.1 tell 192.168.1.104, length 46
+ 1212 23:45:30.620554 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.32.31, length 46
+ 1213 23:45:33.351236 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1214 23:45:37.214112 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:80) tell 192.168.1.104, length 46
+ 1215 23:45:38.351348 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1216 23:45:41.860320 20:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 1217 23:45:45.210562 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1218 23:45:57.353441 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x081e) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1219 23:46:01.351085 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1220 23:46:05.351047 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1221 23:46:06.605730 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1222 23:46:10.600972 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x4e00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1223 23:46:11.681929 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 1224 23:46:14.600973 00:1f:fa:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1225 23:46:17.024371 00:1f:29:da:1e:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.37, length 46
+ 1226 23:46:18.600898 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1227 23:46:23.854769 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1228 23:46:27.850823 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1229 23:46:45.100662 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1230 23:46:49.100633 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1231 23:46:53.100600 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1232 23:46:59.100572 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1233 23:47:03.103322 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.42.1 tell 192.168.1.104, length 46
+ 1234 23:47:06.241170 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1235 23:47:11.100437 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1236 23:47:23.102526 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1237 23:47:27.100299 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1238 23:47:31.100265 00:1f:29:da:99:79 > ff:ff:ff:ff:ff:7f, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x08b5) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1239 23:47:34.350384 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1240 23:47:40.350237 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1241 23:47:43.221390 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.33 tell 192.168.0.31, length 46
+ 1242 23:47:49.603873 00:1f:29:da:2d:56 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1243 23:47:53.600085 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1244 23:47:57.600057 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 1245 23:48:16.852289 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1246 23:48:20.849854 07:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1247 23:48:24.849815 64:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1248 23:48:28.852627 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1249 23:48:30.488747 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 1250 23:48:30.489174 00:21:f7:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 1251 23:48:32.849737 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ef, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.136.1.1 tell 192.168.1.104, length 46
+ 1252 23:48:34.302889 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:5b:00:00:00) tell 192.168.1.104, length 46
+ 1253 23:48:36.849711 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1254 23:48:41.302830 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1255 23:48:42.552980 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 1256 23:48:48.851746 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:58:00:00:00) tell 192.168.1.104, length 46
+ 1257 23:48:51.376502 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 1258 23:48:52.849575 00:46:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (166) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1259 23:48:56.849530 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:41:00) tell 192.168.1.104, length 46
+ 1260 23:48:58.229943 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (25:00:00:00:00:00) tell 192.168.0.33, length 46
+ 1261 23:49:02.099566 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1262 23:49:06.099490 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.37.0.104, length 46
+ 1263 23:49:15.353160 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1264 23:49:19.349325 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (1b:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1265 23:49:23.349319 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (16897) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.226.1.104, length 46
+ 1266 23:49:26.195574 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 1267 23:49:46.599083 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1268 23:49:50.599064 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0808) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1269 23:49:54.601899 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (40:00:00:e2:00:00) tell 192.168.1.104, length 46
+ 1270 23:49:58.599013 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (16897) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1271 23:50:00.370448 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1272 23:50:02.364589 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1273 23:50:14.601106 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:4d) tell 192.168.1.104, length 46
+ 1274 23:50:18.598900 00:1f:29:da:2d:79 > ff:ff:5a:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1275 23:50:22.598821 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1276 23:50:23.853435 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.1.104, length 46
+ 1277 23:50:27.848739 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:4c:00:00:00:00) tell 192.168.1.104, length 46
+ 1278 23:50:31.848759 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1279 23:50:41.102470 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1280 23:50:45.098590 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1281 23:50:49.098581 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1282 23:51:08.350943 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1283 23:51:12.348391 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:02:00:00) tell 192.168.1.104, length 46
+ 1284 23:51:16.348396 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1285 23:51:20.351799 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1286 23:51:20.711822 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 1287 23:51:24.348542 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1288 23:51:27.416542 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1289 23:51:29.410681 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (5a:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1290 23:51:31.206134 00:13:20:13:db:6f > ff:ff:ff:ff:ff:fb, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 1291 23:51:35.410546 00:1f:29:da:2d:79 > ff:ff:ff:ff:bf:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1292 23:51:40.350447 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1293 23:51:44.348189 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1294 23:51:49.602685 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:b3:00:00) tell 192.168.1.104, length 46
+ 1295 23:51:53.597995 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1296 23:51:57.598001 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:08) tell 192.168.1.104, length 46
+ 1297 23:52:06.851606 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 192.168.170.170, length 46
+ 1298 23:52:10.847843 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1299 23:52:14.847829 25:00:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1300 23:52:34.099958 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1301 23:52:34.583088 00:21:5a:21:9e:fd > fe:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.2.1 tell 192.168.0.35, length 46
+ 1302 23:52:38.097597 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1303 23:52:42.097615 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1304 23:52:46.100347 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1305 23:52:50.097484 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1306 23:52:53.447035 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1307 23:52:57.441198 02:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0880) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1308 23:53:01.441139 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1309 23:53:10.097336 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 1310 23:53:14.097309 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.170 tell 192.168.43.104, length 46
+ 1311 23:53:15.351964 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1312 23:53:17.347305 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x086a) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1313 23:53:23.347287 00:1f:29:da:2d:7b > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1314 23:53:32.601229 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:80:00:00) tell 192.168.1.104, length 46
+ 1315 23:53:36.597110 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1316 23:53:40.597076 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (170)
+ 0x0000: 0001 0800 0604 00aa aaaa aaaa aaaa aaaa ................
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 1317 23:53:41.014571 00:08:02:7e:b2:36 > ff:ff:ff:4b:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 102.168.0.1 tell 192.168.0.30, length 28
+ 1318 23:53:41.015003 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 170.170.170.170 is-at 00:21:aa:aa:aa:aa, length 46
+ 1319 23:53:59.849185 00:1f:29:da:2d:79 > ff:ff:ff:ff:25:00, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1320 23:54:03.846886 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 1321 23:54:04.090629 00:1f:f3:55:65:66 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (130) (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.38, length 46
+ 1322 23:54:07.846843 00:1f:29:da:2d:79 > ff:4d:ff:ff:ef:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1323 23:54:11.849777 00:1f:29:da:57:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1324 23:54:15.846818 00:1f:29:da:2d:79 > ff:52:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1325 23:54:19.461989 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1326 23:54:23.456055 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.120, length 46
+ 1327 23:54:27.456023 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1328 23:54:31.848803 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1329 23:54:35.846592 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1330 23:54:39.846554 00:1f:29:3b:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1331 23:54:41.101164 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1332 23:54:45.096489 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1333 23:54:49.096510 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1334 23:54:58.350285 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1335 23:55:02.346499 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1336 23:55:06.346409 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1337 23:55:25.598506 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1338 23:55:29.596117 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1339 23:55:33.596098 40:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1340 23:55:37.598882 00:1f:29:da:2d:79 > 52:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Inverse Reply 00:1f:29:da:2d:79 at 192.168.1.104, length 46
+ 1341 23:55:41.596013 00:1f:29:5a:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1342 23:55:41.839286 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 1343 23:55:45.471018 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1344 23:55:52.470945 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (257) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1345 23:55:57.597995 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1346 23:56:01.595837 25:00:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1347 23:56:05.595820 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1348 23:56:06.850440 00:4d:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1349 23:56:10.845762 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 0), Unknown Protocol (0x0825) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1350 23:56:12.230194 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 1351 23:56:12.230529 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 1352 23:56:14.845777 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:aa:aa:aa:aa) tell 192.168.1.104, length 46
+ 1353 23:56:18.845680 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1354 23:56:20.108537 00:1f:29:da:f8:fb > ff:62:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.37, length 46
+ 1355 23:56:24.099818 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:6b, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:02:00) tell 192.168.1.72, length 46
+ 1356 23:56:28.095644 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.77, length 46
+ 1357 23:56:32.095568 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (52:00:00:63:00:00) tell 192.168.1.104, length 46
+ 1358 23:56:41.348006 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1359 23:56:41.845957 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 1360 23:56:45.345611 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0870) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1361 23:56:49.345548 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1362 23:56:53.345376 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1363 23:56:59.345346 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (2049)
+ 0x0000: 0001 0800 0604 0801 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 4101 0000 0000 .h........A.....
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1364 23:57:03.348352 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1365 23:57:07.345279 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1366 23:57:11.345259 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:4d:25:00:00) tell 192.168.1.104, length 46
+ 1367 23:57:11.845642 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 1368 23:57:12.476237 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1369 23:57:20.470167 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (215) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1370 23:57:24.345199 00:1f:57:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1371 23:57:30.593949 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 1372 23:57:31.345164 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1373 23:57:32.599733 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1374 23:57:36.595043 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1375 23:57:40.595068 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1376 23:57:53.844917 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1377 23:57:57.844940 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1378 23:58:17.097212 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1379 23:58:21.094683 62:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1380 23:58:25.094721 00:1f:29:da:2d:79 > ff:ff:ff:ff:fe:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1381 23:58:29.097512 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:6e:00:00:00:00) tell 192.168.1.104, length 46
+ 1382 23:58:33.094544 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1383 23:58:37.094497 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1384 23:58:40.532009 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1385 23:58:47.531939 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1386 23:58:49.096503 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:27) tell 192.168.1.104, length 46
+ 1387 23:58:53.094378 00:1f:29:da:2d:79 > ff:ff:ff:ff:02:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1388 23:58:57.094326 00:1f:29:46:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1389 23:58:58.349171 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1390 23:59:00.344295 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1391 23:59:00.591333 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 1392 23:59:06.344502 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1393 23:59:15.598055 48:1f:29:da:2d:79 > ff:ff:6c:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1394 23:59:19.594135 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1395 23:59:22.413397 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:25:00, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 1396 23:59:23.594114 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.17 tell 192.168.1.104, length 46
+ 1397 23:59:42.846235 00:1f:29:da:4c:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1398 23:59:43.255861 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.33 tell 192.168.0.31, length 46
+ 1399 23:59:46.843897 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (80:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1400 23:59:50.843857 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1401 23:59:54.846641 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1402 23:59:58.843759 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1403 00:00:02.843750 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1404 00:00:07.568291 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.136.1.1 tell 192.168.1.104, length 46
+ 1405 00:00:11.562424 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:4f:00:00:00:00) tell 192.168.1.104, length 46
+ 1406 00:00:14.845779 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (76) (len 6), IPv4 (len 4), Unknown (37)
+ 0x0000: 004c 0800 0604 0025 001f 29da 2d79 c0a8 .L.....%..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1407 00:00:16.843624 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1408 00:00:22.843554 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1409 00:00:24.098250 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1410 00:00:28.093521 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1411 00:00:41.347170 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1412 00:00:45.343376 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1413 00:00:49.343338 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1414 00:01:12.593153 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1415 00:01:16.593129 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1416 00:01:20.595907 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1417 00:01:24.593053 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1418 00:01:28.593000 00:5a:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:25:00:00:00) tell 192.168.1.104, length 46
+ 1419 00:01:33.629982 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1420 00:01:37.624169 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1421 00:01:41.592934 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1422 00:01:42.110143 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (de:00:00:00:00:00) tell 192.168.0.30, length 28
+ 1423 00:01:42.110465 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 1424 00:01:48.592829 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.37.0.1 (00:00:00:00:00:46) tell 192.168.1.104, length 46
+ 1425 00:01:49.847487 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x5700) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1426 00:01:57.842810 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1427 00:02:07.096332 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1428 00:02:11.092646 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1429 00:02:11.861554 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 1430 00:02:15.092633 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1431 00:02:34.345073 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (14081)
+ 0x0000: 0001 0800 0604 3701 001f 29da 2d79 c0a8 ......7...).-y..
+ 0x0010: 0168 0000 0000 0000 b6a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1432 00:02:37.954913 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (8193)
+ 0x0000: 0001 0800 0604 2001 0021 5a21 9efd c0a8 .........!Z!....
+ 0x0010: 0023 0000 0000 0000 c0a8 0001 0000 0000 .#..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1433 00:02:38.342564 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1434 00:02:42.342458 00:1f:29:fa:2d:79 > ff:ff:ff:48:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1435 00:02:46.345528 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1436 00:02:50.342326 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 53.168.1.104, length 46
+ 1437 00:02:54.342336 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.121.1 tell 192.168.1.104, length 46
+ 1438 00:02:59.644822 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1439 00:03:03.639032 00:1f:29:64:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1440 00:03:07.342129 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:65:00) tell 192.168.1.104, length 46
+ 1441 00:03:14.342206 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0a00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1442 00:03:15.598004 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 1443 00:03:19.592066 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1444 00:03:23.592064 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1445 00:03:30.872686 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.37.0.31, length 46
+ 1446 00:03:32.845867 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:25:00:00) tell 192.168.1.104, length 46
+ 1447 00:03:36.841936 55:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (89) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1448 00:03:40.841869 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.162 tell 192.168.1.104, length 46
+ 1449 00:04:00.094151 00:1f:29:da:2d:79 > ff:ff:ff:ff:15:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1450 00:04:04.091665 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1451 00:04:08.091629 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:66:00:00:00) tell 192.168.1.104, length 46
+ 1452 00:04:12.094610 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (257)
+ 0x0000: 0001 0800 0604 0101 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0010 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 001d ..............
+ 1453 00:04:16.091540 00:1f:29:db:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1454 00:04:20.091519 00:1f:29:da:2d:56 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1455 00:04:26.675582 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.113.1.104, length 46
+ 1456 00:04:30.669603 00:1f:29:da:2d:79 > 70:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1457 00:04:32.093604 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1458 00:04:36.091387 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.120.1 tell 192.168.1.104, length 46
+ 1459 00:04:40.091370 00:1f:29:da:2d:79 > ff:ff:ff:ff:ef:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1460 00:04:41.346290 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1461 00:04:43.341300 00:1f:29:da:2d:79 > e8:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1462 00:04:49.341547 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1463 00:04:55.693410 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 1464 00:04:58.595077 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1465 00:05:02.591171 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1466 00:05:06.591155 00:4d:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1467 00:05:25.843579 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1468 00:05:29.841188 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1469 00:05:33.840938 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1470 00:05:37.843716 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1471 00:05:45.840821 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1472 00:05:54.706732 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1473 00:05:57.842879 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:f2) tell 192.168.1.104, length 46
+ 1474 00:05:59.840692 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:38:00:00:00) tell 192.168.1.104, length 46
+ 1475 00:06:05.840653 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1476 00:06:07.095377 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1477 00:06:11.090569 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1478 00:06:15.090574 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1479 00:06:19.090525 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1480 00:06:23.330984 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (19201) (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (00:00:00:00:6f:00) tell 192.168.0.37, length 46
+ 1481 00:06:24.344436 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1482 00:06:28.538749 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 1483 00:06:32.340300 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 64.168.122.1 tell 192.168.1.104, length 46
+ 1484 00:06:41.592930 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.204 tell 192.168.1.104, length 46
+ 1485 00:06:45.590275 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (110) (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 1486 00:06:46.986923 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1487 00:06:48.711723 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1488 00:06:49.590134 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.170 tell 192.168.1.104, length 46
+ 1489 00:06:49.711749 00:21:d8:01:03:45 > ff:ff:ff:ff:fb:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.184.0.1, length 46
+ 1490 00:06:53.590201 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1491 00:06:53.712136 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1492 00:06:58.712625 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1493 00:06:59.590160 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1494 00:07:03.592847 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.71, length 46
+ 1495 00:07:03.713022 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 98.168.0.160 tell 192.168.0.1, length 46
+ 1496 00:07:07.590085 00:1f:29:da:2d:79 > ff:ff:ff:67:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1497 00:07:08.713454 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1498 00:07:11.590064 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1499 00:07:11.929692 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 1500 00:07:11.930001 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.114 is-at 00:21:d8:01:03:45, length 46
+ 1501 00:07:13.713886 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1502 00:07:18.714417 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1503 00:07:21.767565 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1504 00:07:23.592148 00:1f:36:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1505 00:07:23.714736 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.225.160 tell 192.168.0.1, length 46
+ 1506 00:07:25.589948 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (37)
+ 0x0000: 0001 0800 0604 0025 001f 29da 2d79 c0a8 .......%..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1507 00:07:28.715205 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1508 00:07:29.761764 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1509 00:07:31.589892 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1510 00:07:32.844674 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1511 00:07:33.715647 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1512 00:07:34.839871 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1513 00:07:38.716052 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1514 00:07:40.839884 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:00:00:aa:aa) tell 192.37.0.104, length 46
+ 1515 00:07:41.875444 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 1516 00:07:43.716770 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1517 00:07:48.716929 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x4800) (len 4), Request who-has <wrong proto type> (00:00:36:00:00:00) tell <wrong proto type>, length 46
+ 1518 00:07:50.093469 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:77:00:00:00) tell 192.168.1.104, length 46
+ 1519 00:07:54.089713 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:08:00:00) tell 192.168.1.104, length 46
+ 1520 00:07:58.089682 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.37.0 tell 192.168.1.104, length 46
+ 1521 00:08:08.002136 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1522 00:08:09.718790 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1523 00:08:10.718880 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x7100) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1524 00:08:11.609146 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 37.0.0.1 tell 192.168.0.31, length 46
+ 1525 00:08:14.719227 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1526 00:08:17.342096 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1527 00:08:21.339494 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1528 00:08:24.720097 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 194.168.0.160 tell 192.168.0.1, length 46
+ 1529 00:08:25.339421 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1530 00:08:29.720535 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1531 00:08:33.339344 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:25:00) tell 192.168.1.104, length 46
+ 1532 00:08:34.720952 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.84.0.160 tell 192.168.0.1, length 46
+ 1533 00:08:37.339204 00:1f:29:da:2d:7d > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (25:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1534 00:08:39.721411 82:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 37.0.0.160 tell 192.168.0.1, length 46
+ 1535 00:08:44.721864 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1536 00:08:48.814172 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1537 00:08:49.722343 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0871) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1538 00:08:50.339359 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1539 00:08:52.807938 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:5b:00) tell 192.168.1.104, length 46
+ 1540 00:08:54.722723 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1541 00:08:56.807887 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1542 00:08:58.593903 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1543 00:09:00.589137 00:1f:29:da:2d:79 > 48:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1544 00:09:04.723598 00:21:6e:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 tell 192.168.0.1, length 46
+ 1545 00:09:06.589129 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1546 00:09:09.724041 00:21:50:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.160 (00:00:00:32:00:00) tell 192.168.0.1, length 46
+ 1547 00:09:15.842955 00:1f:29:da:75:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:77:00:00) tell 192.168.1.104, length 46
+ 1548 00:09:19.838975 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1549 00:09:23.839011 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1550 00:09:34.775136 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 1551 00:09:43.091169 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1552 00:09:47.088714 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1553 00:09:51.088754 ce:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1554 00:09:55.091386 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1555 00:09:59.088626 25:00:29:da:35:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 76.168.1.1 tell 192.168.1.104, length 46
+ 1556 00:10:03.088571 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1557 00:10:15.090650 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1558 00:10:16.838502 00:1f:29:da:2d:79 > ff:ff:25:00:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.140 tell 192.168.1.104, length 46
+ 1559 00:10:19.088457 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (207)
+ 0x0000: 0001 0800 0604 00cf 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1560 00:10:23.088385 00:1f:7a:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1561 00:10:24.343324 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1562 00:10:26.338480 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x5800) (len 4), Request who-has <wrong proto type> (00:00:00:00:80:00) tell <wrong proto type>, length 46
+ 1563 00:10:32.338367 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:7f, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1564 00:10:41.592010 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1565 00:10:45.588274 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1566 00:11:08.840439 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (e7:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1567 00:11:12.838032 00:1f:29:da:2d:79 > ff:f3:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1568 00:11:16.838005 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1569 00:11:20.840871 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1570 00:11:24.837924 00:1f:29:da:2d:79 > ee:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1571 00:11:28.837898 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:66:00:00:00:00) tell 192.168.1.104, length 46
+ 1572 00:11:40.840014 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 12), Request who-has <wrong len> (01:01:00:00:00:00) tell <wrong len>, length 46
+ 1573 00:11:43.275374 00:13:20:13:db:6f > ff:18:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 110.168.0.33 tell 192.168.0.31, length 46
+ 1574 00:11:48.837716 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1575 00:11:50.092435 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.229.1 tell 192.168.1.104, length 46
+ 1576 00:11:54.087647 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1577 00:11:58.087669 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.37, length 46
+ 1578 00:12:07.341532 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 50.168.1.1 (00:00:00:76:00:00) tell 192.168.1.104, length 46
+ 1579 00:12:11.337516 71:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1580 00:12:15.337473 00:1f:29:da:2d:79 > ff:ff:32:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:01:00:00:00:00) tell 192.168.1.104, length 46
+ 1581 00:12:34.589636 00:6c:29:da:2d:79 > ff:ff:ff:ff:ff:df, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1582 00:12:34.855248 00:33:20:6d:db:6f > 25:00:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (71) (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 1583 00:12:38.587238 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 66.168.1.1 (00:00:00:10:00:00) tell 192.168.1.104, length 46
+ 1584 00:12:41.768076 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 1585 00:12:41.768509 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 128.168.0.1 is-at 00:21:d8:01:7a:45, length 46
+ 1586 00:12:42.587244 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1587 00:12:46.590020 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:25:00:00:00) tell 192.168.1.104, length 46
+ 1588 00:12:50.587196 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1589 00:12:54.587074 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1590 00:13:07.874175 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.37.0 tell 192.168.1.104, length 46
+ 1591 00:13:11.747828 00:19:6c:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (75:00:00:00:00:00) tell 192.168.0.34, length 46
+ 1592 00:13:11.868207 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 110.168.1.104, length 46
+ 1593 00:13:15.841757 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.37.0.104, length 46
+ 1594 00:13:19.836926 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1595 00:13:23.836960 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1596 00:13:33.090576 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1597 00:13:37.086744 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (27649) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1598 00:13:41.086705 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1599 00:14:00.339123 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1600 00:14:04.336599 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1601 00:14:08.336563 00:1f:29:da:2d:79 > ff:25:00:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1602 00:14:16.336623 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (32769) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:44:00:00:00) tell 192.168.1.104, length 46
+ 1603 00:14:20.336507 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1604 00:14:32.338705 00:1f:29:da:2d:79 > ff:ff:7f:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0840) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1605 00:14:35.914401 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (75:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1606 00:14:38.914320 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1607 00:14:40.336282 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.40.1.104, length 46
+ 1608 00:14:41.590841 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1609 00:14:45.586105 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1610 00:14:49.586155 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1611 00:14:58.839890 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1612 00:15:02.836055 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1613 00:15:06.836005 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (16385) (len 6), IPv4 (len 4), Request who-has 192.168.1.117 tell 192.168.1.104, length 46
+ 1614 00:15:26.088103 00:1f:29:da:2d:79 > ff:ff:ff:ff:7f:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1615 00:15:30.085783 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1616 00:15:30.606939 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 1617 00:15:34.085758 00:1f:ef:da:2d:79 > ff:ff:ff:ff:ff:df, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1618 00:15:38.088564 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0900) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1619 00:15:46.085611 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1620 00:15:58.087680 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1621 00:16:02.085544 00:1f:29:da:2d:79 > ff:ff:ff:ff:25:00, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1622 00:16:03.950786 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1623 00:16:05.944853 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1624 00:16:07.340264 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1625 00:16:09.335475 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1626 00:16:15.335412 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1627 00:16:19.335361 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1628 00:16:24.589413 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1629 00:16:28.585305 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (52993)
+ 0x0000: 0001 0800 0604 cf01 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1630 00:16:32.585278 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1631 00:16:41.837771 00:1f:29:da:2d:79 > fe:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1632 00:16:45.835150 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.9.104, length 46
+ 1633 00:16:49.835056 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:43:00:00:00:00) tell 192.168.1.104, length 46
+ 1634 00:16:53.835084 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1635 00:17:03.837763 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:53, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1636 00:17:07.834983 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (d7:00:00:9d:00:00) tell 192.168.1.104, length 46
+ 1637 00:17:11.834956 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1638 00:17:23.836963 00:1f:29:da:2d:79 > ad:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1639 00:17:27.834833 00:17:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (28673) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1640 00:17:29.793612 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1641 00:17:31.787937 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1642 00:17:33.089295 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.193.104, length 46
+ 1643 00:17:37.084697 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1644 00:17:41.084706 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1645 00:17:50.338310 00:1f:29:da:2d:79 > ff:ff:ff:b0:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1646 00:17:54.334542 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1647 00:17:58.334532 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (17921) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1648 00:18:12.070941 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 1649 00:18:12.071245 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 1650 00:18:17.586765 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1651 00:18:21.584313 00:1f:29:da:2d:7d > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1652 00:18:25.584270 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0801) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1653 00:18:29.587123 00:1f:29:da:2d:76 > ff:ff:ff:ff:ff:17, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1654 00:18:33.584199 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1655 00:18:37.584169 00:1f:29:da:2d:79 > ff:38:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.109.1.1 tell 192.168.1.104, length 46
+ 1656 00:18:41.811840 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 1657 00:18:49.586224 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1658 00:18:53.584047 00:1f:29:da:2d:79 > ff:ff:87:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0804) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1659 00:18:54.808639 00:17:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1660 00:18:58.802739 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (104)
+ 0x0000: 0001 0800 0604 0068 001f 29da 2d79 c0a8 .......h..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 00aa aaaa aaaa aaaa aaaa aaaa ..............
+ 1661 00:18:59.834053 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1662 00:19:06.834009 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1663 00:19:11.588362 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 1664 00:19:12.063692 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.37, length 46
+ 1665 00:19:12.664212 37:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.35, length 46
+ 1666 00:19:16.087683 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1667 00:19:20.083820 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1668 00:19:20.410294 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 1669 00:19:24.083776 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1670 00:19:27.600896 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.85.104, length 46
+ 1671 00:19:32.599541 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:12:00:00:00:00) tell 192.168.1.104, length 46
+ 1672 00:19:40.599452 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0820) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1673 00:19:51.333584 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1674 00:19:55.336527 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1675 00:19:59.333452 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1676 00:20:03.333439 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 37.0.1.104, length 46
+ 1677 00:20:15.335506 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1678 00:20:19.333304 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1679 00:20:20.055660 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.193.32, length 46
+ 1680 00:20:20.792178 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (9472) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1681 00:20:24.588079 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1682 00:20:28.583189 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 200.168.1.104, length 46
+ 1683 00:20:32.583220 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.121.104, length 46
+ 1684 00:20:41.836926 00:1f:29:da:2d:79 > ff:ff:ff:25:00:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1685 00:20:45.833068 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1686 00:20:49.833039 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1687 00:21:09.085125 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1688 00:21:13.082836 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1689 00:21:21.085683 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (10:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1690 00:21:25.082696 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.106, length 46
+ 1691 00:21:29.082727 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1692 00:21:30.611602 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 1693 00:21:41.084761 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.37.0.1 tell 192.168.1.104, length 46
+ 1694 00:21:45.082547 00:1f:29:da:2d:79 > ff:ff:ff:ff:28:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1695 00:21:48.807138 00:1f:29:da:2d:79 > ef:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1696 00:21:50.337538 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:80:00:00:00) tell 192.168.1.104, length 46
+ 1697 00:21:52.332560 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1698 00:21:56.801189 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:10:00:00) tell 192.168.1.104, length 46
+ 1699 00:21:58.332536 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1700 00:22:07.586187 91:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1701 00:22:11.582342 00:1f:29:da:2d:66 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1702 00:22:15.582286 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (4b:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1703 00:22:19.166397 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1704 00:22:28.066497 00:1f:29:da:e1:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1705 00:22:34.834497 00:1f:29:da:2d:46 > ff:ff:ff:45:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1706 00:22:38.832111 00:45:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1707 00:22:40.744458 00:23:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1708 00:22:42.738291 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1709 00:22:46.835022 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:31) tell 192.168.1.104, length 46
+ 1710 00:22:48.738288 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1711 00:22:50.831977 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.37 tell 192.168.65.104, length 46
+ 1712 00:22:54.832084 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0844) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1713 00:23:06.834010 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (41:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1714 00:23:10.831821 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1715 00:23:14.831784 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (be:00:00:00:00:4c) tell 192.168.1.104, length 46
+ 1716 00:23:15.868788 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1717 00:23:17.081785 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1718 00:23:23.862938 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 37.0.1.1 tell 192.168.1.104, length 46
+ 1719 00:23:32.551577 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 1720 00:23:33.335412 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:76) tell 192.168.1.104, length 46
+ 1721 00:23:37.331574 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1722 00:23:41.331568 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1723 00:23:41.823867 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: [|arp]
+ 1724 00:23:41.824153 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 1725 00:23:43.310811 00:13:20:13:db:6f > ff:ff:71:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 0), Unknown Protocol (0x0825) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1726 00:24:00.583893 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1727 00:24:08.581334 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1728 00:24:11.639300 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 1729 00:24:12.584112 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1730 00:24:16.581249 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1731 00:24:20.581247 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1732 00:24:32.583316 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1733 00:24:36.581068 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 0.67.1.104, length 46
+ 1734 00:24:40.581055 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1735 00:24:41.653243 00:13:20:13:db:6f > ff:ff:ff:ff:ff:31, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (02:00:00:00:00:00) tell 192.168.0.86, length 46
+ 1736 00:24:41.836955 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 0.168.1.104, length 46
+ 1737 00:24:42.915202 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1738 00:24:46.909113 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1739 00:24:50.909050 00:3f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1740 00:25:03.080834 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (70)
+ 0x0000: 0001 0800 0604 0046 001f 29da 2d79 c0a8 .......F..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1741 00:25:07.080815 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1742 00:25:26.333263 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1743 00:25:34.330669 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1744 00:25:38.333779 00:1f:29:da:2d:2b > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1745 00:25:42.330721 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:00:00:00:aa) tell 192.168.1.104, length 46
+ 1746 00:25:46.330538 00:1f:29:da:6d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:32:00:00:00) tell 192.168.1.104, length 46
+ 1747 00:25:58.332818 00:1f:29:da:78:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1748 00:26:02.330664 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1749 00:26:06.330357 00:1f:29:da:2d:60 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1750 00:26:07.584840 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 37.1.1.104, length 46
+ 1751 00:26:10.976967 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1752 00:26:12.970848 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (84)
+ 0x0000: 0001 0800 0604 0054 001f 29da 2d79 c0a8 .......T..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0069 .h.............i
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1753 00:26:18.970820 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1754 00:26:24.834124 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1755 00:26:28.830123 00:1f:29:da:2d:79 > ff:ff:29:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1756 00:26:32.830088 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (9) (len 6), IPv4 (len 4), Unknown (65)
+ 0x0000: 0009 0800 0604 0041 001f 29da 2d79 c0a8 .......A..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 6a39 ............j9
+ 1757 00:26:42.082446 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1758 00:26:46.080058 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1759 00:26:50.079899 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.37, length 46
+ 1760 00:26:54.079917 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:02:00) tell 192.168.1.104, length 46
+ 1761 00:27:00.079824 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1762 00:27:04.082652 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x2d00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1763 00:27:08.079765 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.117.1.1 tell 192.168.1.104, length 46
+ 1764 00:27:12.079764 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:6e:00:00:00) tell 192.168.1.104, length 46
+ 1765 00:27:24.081813 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (40:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1766 00:27:28.079601 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1767 00:27:30.614058 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0873) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1768 00:27:32.079592 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1769 00:27:33.334223 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x7000) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1770 00:27:35.329540 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (77)
+ 0x0000: 0001 0800 0604 004d 001f 29da 2d79 c0a8 .......M..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1771 00:27:37.023201 00:1f:29:da:2d:79 > ff:ff:ff:ff:bf:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1772 00:27:45.016922 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1773 00:27:49.117083 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Unknown (85)
+ 0x0000: 0001 0800 0604 0055 0008 027e b236 c0a8 .......U...~.6..
+ 0x0010: 001e 0000 0000 0000 c0a8 0001 ............
+ 1774 00:27:49.117497 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.55 is-at 00:21:d8:01:03:45, length 46
+ 1775 00:27:50.583253 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1776 00:27:54.579379 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1777 00:27:58.579345 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1778 00:28:17.831572 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1779 00:28:18.827538 00:16:17:e0:67:e7 > 54:55:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 1780 00:28:21.829283 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1781 00:28:25.829090 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1782 00:28:29.832009 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (43690)
+ 0x0000: 0001 0800 0604 aaaa aaaa aaaa aaaa aaaa ................
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 1783 00:28:33.829054 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1784 00:28:37.574349 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 1785 00:28:37.828980 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1786 00:28:49.831066 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1787 00:28:53.828871 00:1f:29:da:2d:79 > 25:00:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1788 00:28:57.828821 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1789 00:28:59.083464 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1790 00:29:02.374603 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.159 tell 192.168.0.32, length 46
+ 1791 00:29:03.037814 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.169.1.84, length 46
+ 1792 00:29:07.031872 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (27649)
+ 0x0000: 0001 0800 0604 6c01 001f 29da 2d79 c0a8 ......l...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 1793 00:29:09.104284 00:1f:f3:55:65:66 > ff:25:00:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.38, length 46
+ 1794 00:29:11.031817 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1795 00:29:15.280374 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.37, length 46
+ 1796 00:29:15.619957 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.35, length 46
+ 1797 00:29:16.332441 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1798 00:29:20.328711 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (08:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1799 00:29:24.328679 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1800 00:29:43.580803 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1801 00:29:47.578377 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:4b:00) tell 192.168.1.104, length 46
+ 1802 00:29:51.578346 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:20:00:00:00) tell 192.168.1.104, length 46
+ 1803 00:29:55.581080 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1804 00:29:59.578288 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1805 00:30:03.578254 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1806 00:30:11.442733 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x2800) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1807 00:30:15.580243 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.37.0, length 46
+ 1808 00:30:19.578119 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1809 00:30:23.578082 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1810 00:30:24.832677 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:25:00) tell 192.168.1.104, length 46
+ 1811 00:30:28.828039 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1812 00:30:35.046699 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1813 00:30:42.081935 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1814 00:30:44.077909 00:1f:29:8b:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1815 00:30:50.077845 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1816 00:31:09.330047 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1817 00:31:13.327640 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1818 00:31:17.327533 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:a9:00) tell 192.168.1.104, length 46
+ 1819 00:31:17.856651 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.37 tell 192.169.0.37, length 46
+ 1820 00:31:19.188317 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.37 tell 192.168.0.37, length 46
+ 1821 00:31:20.197027 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.37, length 46
+ 1822 00:31:21.330306 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1823 00:31:25.327554 00:1f:29:da:29:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (120) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1824 00:31:29.327486 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:7a, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1825 00:31:45.327417 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1826 00:31:49.327369 00:1f:29:da:2d:c8 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1827 00:31:50.581940 00:49:29:da:2d:79 > ff:ff:ff:ff:ff:ef, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1828 00:31:58.577176 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:c9:00) tell 192.168.1.104, length 46
+ 1829 00:32:00.108550 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x6c00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1830 00:32:03.108440 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1831 00:32:07.108278 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1832 00:32:08.827231 00:1f:29:da:2d:79 > ff:ff:ff:25:00:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1833 00:32:15.827101 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1834 00:32:35.079201 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1835 00:32:39.076901 00:1f:29:77:2d:79 > ff:ff:ff:50:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1836 00:32:43.076856 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1837 00:32:47.079637 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1838 00:32:51.076802 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1839 00:32:55.076774 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.209 tell 192.168.1.104, length 46
+ 1840 00:33:07.078795 00:1f:29:da:33:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1841 00:33:11.076609 00:1f:29:da:2d:79 > ff:ff:ff:58:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1842 00:33:15.076598 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1843 00:33:16.331461 00:1f:29:da:2d:79 > ff:fb:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:45:00) tell 192.168.1.104, length 46
+ 1844 00:33:18.326645 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1845 00:33:24.326811 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1846 00:33:26.176088 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1847 00:33:28.170205 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1848 00:33:30.617346 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 (00:00:00:00:00:10) tell 192.168.0.31, length 46
+ 1849 00:33:33.580340 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (170)
+ 0x0000: 0001 0800 0604 00aa aaaa aaaa aaaa aaaa ................
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 1850 00:33:41.576360 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1851 00:34:00.828573 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1852 00:34:04.826162 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1853 00:34:08.826140 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1854 00:34:12.828935 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1855 00:34:16.826047 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1856 00:34:20.826023 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1857 00:34:22.443475 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (af:00:00:00:00:00) tell 192.168.0.32, length 46
+ 1858 00:34:32.828093 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1859 00:34:40.825838 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1860 00:34:42.080502 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1861 00:34:42.316198 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 1862 00:34:57.263300 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1863 00:34:59.450710 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:aa:aa:aa:aa) tell 192.168.0.31, length 46
+ 1864 00:35:00.325892 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.105, length 46
+ 1865 00:35:03.325663 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1866 00:35:07.325601 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:94) tell 192.168.1.40, length 46
+ 1867 00:35:11.879302 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 1868 00:35:26.577990 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1869 00:35:30.575435 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1870 00:35:34.575383 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1871 00:35:42.575281 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1872 00:35:43.345726 00:13:51:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.33 (00:00:20:38:00:00) tell 192.168.0.31, length 46
+ 1873 00:35:46.575248 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1874 00:35:58.577388 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1875 00:36:02.575151 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:00:00:aa:aa) tell 192.168.1.104, length 46
+ 1876 00:36:06.575097 00:1f:29:da:2d:79 > 42:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1877 00:36:07.829725 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1878 00:36:11.825046 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1879 00:36:15.825075 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1880 00:36:19.215648 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1881 00:36:25.078696 00:1f:29:da:2d:79 > ff:7f:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (35:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1882 00:36:26.215537 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1883 00:36:29.074883 00:1f:29:da:2d:79 > ff:ff:ff:ff:52:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (4097)
+ 0x0000: 0001 0800 0604 1001 001f 29da 2d79 aaaa ..........).-y..
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 1884 00:36:33.074891 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1885 00:36:42.327417 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1886 00:36:46.324813 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1887 00:36:50.324801 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.232.1.1 tell 192.168.1.104, length 46
+ 1888 00:36:54.324767 00:1f:29:da:2d:79 > ff:ff:ff:25:00:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1889 00:37:00.324819 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1890 00:37:04.327936 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1891 00:37:08.324580 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1892 00:37:12.324867 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1893 00:37:24.326849 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1894 00:37:28.324463 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1895 00:37:32.324415 00:5f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1896 00:37:33.578976 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1897 00:37:37.574316 00:1f:29:da:2d:79 > 76:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1898 00:37:41.574319 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1899 00:37:45.236453 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1900 00:37:49.230453 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1901 00:37:50.828176 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1902 00:37:54.824185 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1903 00:37:58.824173 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 81.168.1.104, length 46
+ 1904 00:38:18.076292 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1905 00:38:22.073985 00:1f:29:da:2d:79 > ff:ff:ff:43:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1906 00:38:30.076695 00:1f:29:da:2d:79 > ff:ff:ff:ff:4e:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (50) (len 6), Unknown Protocol (0x0820) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1907 00:38:34.073810 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1908 00:38:38.073809 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1909 00:38:50.075945 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1910 00:38:54.073684 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (23809) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1911 00:38:58.073618 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.97.104, length 46
+ 1912 00:38:59.328272 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:40:00:00) tell 192.168.1.104, length 46
+ 1913 00:39:07.323584 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0833) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1914 00:39:11.276671 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1915 00:39:18.276566 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1916 00:39:18.619372 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.37, length 46
+ 1917 00:39:20.573463 00:1f:29:da:2d:79 > 46:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.101, length 46
+ 1918 00:39:24.573664 00:1f:29:5a:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1919 00:39:30.623767 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ba, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0870) (len 4), Request who-has <wrong proto type> (00:00:00:d0:00:00) tell <wrong proto type>, length 46
+ 1920 00:39:43.825654 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:c5:00:00) tell 192.168.1.104, length 46
+ 1921 00:39:47.823200 00:1f:29:da:25:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1922 00:39:51.823168 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1923 00:39:55.826072 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1924 00:39:59.823095 00:1f:29:da:2d:79 > ff:8a:f7:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1925 00:40:02.692647 6a:2f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1926 00:40:03.823061 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1927 00:40:11.850281 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 1928 00:40:11.850599 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 1929 00:40:11.852570 00:05:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 1930 00:40:15.825095 00:1f:29:7a:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.170 tell 192.168.1.104, length 46
+ 1931 00:40:19.822945 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1932 00:40:23.822874 00:1f:29:da:2d:79 > ff:c9:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.3.1 tell 192.168.1.104, length 46
+ 1933 00:40:25.077516 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1934 00:40:33.072838 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1935 00:40:41.840032 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 1936 00:40:42.326715 00:1f:29:da:2d:6d > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.77 (00:00:64:00:00:00) tell 192.168.1.104, length 46
+ 1937 00:40:44.322820 00:1f:29:da:2d:b7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1938 00:40:50.322765 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 200.168.1.97, length 46
+ 1939 00:41:09.574894 00:1f:29:da:2d:79 > ff:ff:ff:ff:fd:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1940 00:41:11.906611 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (00:00:00:00:60:00) tell 192.168.0.31, length 46
+ 1941 00:41:17.572447 00:1f:29:da:2d:79 > ff:ff:32:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1942 00:41:21.575235 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1943 00:41:23.223316 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (14081)
+ 0x0000: 0001 0800 0604 3701 001f 29da f8fb c0a8 ......7...).....
+ 0x0010: 0025 0000 0000 00aa aaaa aaaa aaaa aaaa .%..............
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 1944 00:41:25.572378 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.107, length 46
+ 1945 00:41:29.572301 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1946 00:41:41.574363 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 0), Unknown Protocol (0x0825) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1947 00:41:49.572138 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (6f:00:00:00:00:00) tell 192.168.1.104, length 46
+ 1948 00:41:50.826795 00:1f:29:75:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:74:00:00:00) tell 192.168.1.104, length 46
+ 1949 00:41:54.822098 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.37.0 tell 192.168.1.104, length 46
+ 1950 00:41:58.822111 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x1f00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1951 00:42:04.109081 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.5 tell 192.168.1.104, length 46
+ 1952 00:42:08.075413 00:1f:29:da:2d:79 > aa:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:87:00:00:00:53) tell 192.168.1.104, length 46
+ 1953 00:42:10.071967 00:1f:29:da:2d:79 > ff:ff:25:00:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1954 00:42:16.071930 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1955 00:42:34.119127 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (9472) (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 1956 00:42:35.324056 00:1f:29:da:2d:79 > ff:ff:ff:ff:fe:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1957 00:42:39.321712 00:1f:29:da:2d:79 > 2d:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1958 00:42:39.550599 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 1959 00:42:39.551031 00:21:d8:01:03:45 > 02:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 1960 00:42:43.321675 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1961 00:42:47.324669 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 tell 192.168.1.104, length 46
+ 1962 00:42:51.321592 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.30 tell 192.168.1.104, length 46
+ 1963 00:42:55.321584 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1964 00:43:07.323703 00:1f:29:6e:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1965 00:43:11.321454 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1966 00:43:15.321407 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1967 00:43:16.576024 00:1f:29:da:2d:79 > ff:ff:ff:fe:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 43.168.1.1 tell 192.168.1.104, length 46
+ 1968 00:43:24.571349 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 1969 00:43:31.092891 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:aa:aa:aa:aa:aa) tell 192.168.1.104, length 46
+ 1970 00:43:34.821302 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0a00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 1971 00:43:39.086937 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1972 00:44:01.073382 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1973 00:44:05.070945 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1974 00:44:09.070926 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1975 00:44:13.073653 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:38) tell 192.168.1.104, length 46
+ 1976 00:44:33.072938 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (9472) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1977 00:44:37.070697 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1978 00:44:41.070648 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1979 00:44:42.325648 00:1f:29:da:2d:79 > ff:ff:0e:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 7), IPv4 (len 4), Request who-has 1.1.85.0 (00:00:00:00:00:c0:a8) tell 168.1.104.0, length 46
+ 1980 00:44:44.320654 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1981 00:44:50.320803 00:1f:29:9e:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:38:00:00:00:00) tell 192.168.1.104, length 46
+ 1982 00:44:57.139445 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1983 00:45:00.570560 00:1f:29:da:2d:79 > ff:ff:ff:ff:70:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (13057) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:04) tell 192.168.1.104, length 46
+ 1984 00:45:03.570472 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1985 00:45:05.132936 00:1f:09:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1986 00:45:07.570447 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1987 00:45:11.289202 00:1f:29:da:49:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1988 00:45:18.289602 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1989 00:45:25.291113 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.66, length 46
+ 1990 00:45:26.822602 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1991 00:45:30.626293 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 1992 00:45:30.820248 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1993 00:45:32.007775 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1994 00:45:33.289014 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (9472) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1995 00:45:34.820213 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:54:00) tell 192.168.1.104, length 46
+ 1996 00:45:36.007747 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1997 00:45:38.823261 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 1998 00:45:42.149019 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 1999 00:45:42.149367 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: [|arp]
+ 2000 00:45:42.545795 00:1f:29:da:2d:79 > ff:ff:ff:7a:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2001 00:45:46.011017 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2002 00:45:48.007621 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:49) tell 192.168.1.104, length 46
+ 2003 00:45:51.023287 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.3.104, length 46
+ 2004 00:45:54.007570 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (40:00:00:00:00:00) tell 192.168.1.104, length 46
+ 2005 00:45:57.540663 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.69.1.1 tell 192.168.1.104, length 46
+ 2006 00:45:58.822208 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2007 00:46:02.819976 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2008 00:46:03.921769 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 2009 00:46:06.023106 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2010 00:46:08.075935 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.113.1.1 tell 192.168.1.104, length 46
+ 2011 00:46:12.069889 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2012 00:46:16.069852 00:1f:29:da:ad:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:62:55) tell 192.168.1.104, length 46
+ 2013 00:46:20.035780 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2014 00:46:24.022963 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2015 00:46:25.323721 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:5b:00:00:00:00) tell 192.168.1.104, length 46
+ 2016 00:46:27.319803 00:38:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2017 00:46:28.809863 00:1f:29:da:25:00 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2018 00:46:32.804069 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2019 00:46:36.038474 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:80:00:00:00:00) tell 192.168.1.104, length 46
+ 2020 00:46:39.038385 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2021 00:46:41.869451 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 2022 00:46:42.572243 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 2023 00:46:43.805929 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2024 00:46:47.803941 00:1f:29:da:2d:79 > ff:45:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:66:00:00:00:00) tell 192.168.1.104, length 46
+ 2025 00:46:51.803925 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2026 00:46:53.569581 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2027 00:47:00.569607 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2028 00:47:02.022607 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2029 00:47:03.053757 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2030 00:47:04.572339 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:5b) tell 192.168.1.104, length 46
+ 2031 00:47:06.569408 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2032 00:47:12.569346 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2033 00:47:16.055643 00:1f:29:da:61:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (43690)
+ 0x0000: 0001 0800 0604 aaaa aaaa aaaa aaaa aaaa ................
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 2034 00:47:24.053632 00:1f:29:da:3d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2035 00:47:25.569307 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2036 00:47:28.569239 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2037 00:47:32.569048 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2038 00:47:33.823822 00:1f:f0:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.50, length 46
+ 2039 00:47:41.819151 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2040 00:47:43.380528 00:13:20:13:db:6f > ff:ff:ff:67:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.4.33 tell 192.168.0.31, length 46
+ 2041 00:47:51.072919 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0900) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 2042 00:47:55.068984 00:1f:29:da:2d:6a > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2043 00:47:59.068962 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2044 00:48:18.321668 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2045 00:48:22.318782 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2046 00:48:26.318773 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2047 00:48:31.318757 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.37.0 tell 192.168.1.104, length 46
+ 2048 00:48:36.053004 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2049 00:48:42.948977 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 2050 00:48:42.949431 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 2051 00:48:50.321029 00:3f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2052 00:48:54.318531 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (11521) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:40:00:00:00) tell 192.168.1.104, length 46
+ 2053 00:48:58.318485 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2054 00:48:59.573157 00:1f:29:da:2d:79 > ff:ff:3a:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0840) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 2055 00:49:03.568389 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2056 00:49:07.568419 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2057 00:49:09.091385 00:1f:f3:55:65:66 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.38, length 46
+ 2058 00:49:16.822191 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0874) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 2059 00:49:20.818281 00:1f:29:da:2d:79 > ff:ff:fb:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2060 00:49:21.677763 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.35, length 46
+ 2061 00:49:24.818222 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0xce00) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 2062 00:49:44.070350 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2063 00:49:48.068021 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2064 00:49:52.068053 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2065 00:49:55.083803 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (170)
+ 0x0000: 0001 0800 0604 00aa aaaa aaaa aaaa aaaa ................
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 2066 00:49:57.067983 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:25, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2067 00:49:58.083518 00:1f:29:da:2d:22 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2068 00:50:00.067922 00:1f:29:da:2d:79 > ff:ff:ff:ff:73:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.69.1.85 tell 192.168.1.104, length 46
+ 2069 00:50:02.083533 6a:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:9a:00:00:00) tell 192.168.1.104, length 46
+ 2070 00:50:04.067962 00:1f:29:da:ec:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.129.1 tell 117.168.1.104, length 46
+ 2071 00:50:16.069932 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2072 00:50:20.067858 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2073 00:50:24.067719 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:66, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2074 00:50:25.322424 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2075 00:50:27.317704 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2076 00:50:29.078022 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 2077 00:50:33.317663 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.0.104, length 46
+ 2078 00:50:42.571304 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2079 00:50:46.567553 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2080 00:50:50.567525 00:1f:51:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2081 00:50:55.929765 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (0)
+ 0x0000: 0001 0800 0604 0000 0019 db2b 57d7 c0a8 ...........+W...
+ 0x0010: 0022 0000 0000 0000 c0a8 0001 0000 0000 ."..............
+ 0x0020: 00aa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 2082 00:51:09.819700 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2083 00:51:11.971373 00:08:02:7e:b2:36 > ff:ff:fd:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.30, length 28
+ 2084 00:51:11.971697 00:21:d8:01:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.1 is-at 00:21:d8:01:03:45, length 46
+ 2085 00:51:13.817295 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (16385)
+ 0x0000: 0001 0800 0604 4001 001f 29da 2d79 c0a8 ......@...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 2086 00:51:17.817247 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:25:00:00:00:00) tell 192.168.1.104, length 46
+ 2087 00:51:21.104297 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 141.168.1.104, length 46
+ 2088 00:51:26.184922 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.37, length 46
+ 2089 00:51:29.098394 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2090 00:51:30.629456 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 2091 00:51:41.819168 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2092 00:51:45.817025 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:80:00:00) tell 192.168.1.104, length 46
+ 2093 00:51:49.816990 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:39:00) tell 192.168.1.104, length 46
+ 2094 00:51:51.071591 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.40.1.1 tell 192.168.1.104, length 46
+ 2095 00:51:55.066957 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2096 00:51:59.066910 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (16385) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2097 00:52:08.320824 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (25:00:00:00:00:00) tell 192.168.1.104, length 46
+ 2098 00:52:12.316814 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (40:00:00:00:00:00) tell 192.168.1.104, length 46
+ 2099 00:52:16.316812 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:04:00:00:00:00) tell 192.168.1.104, length 46
+ 2100 00:52:35.569006 00:1f:29:da:2d:79 > ff:f0:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2101 00:52:39.566541 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2102 00:52:43.566524 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 114.168.1.104, length 46
+ 2103 00:52:49.144608 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2104 00:52:51.566474 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2105 00:52:55.566433 00:1f:29:da:2d:79 > bf:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:25:00:00) tell 192.168.1.104, length 46
+ 2106 00:53:07.568388 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2107 00:53:11.566282 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2108 00:53:15.566230 00:1f:29:da:2d:79 > ff:ff:bf:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.37.0.1 tell 192.168.1.104, length 46
+ 2109 00:53:16.820843 25:80:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (46:00:00:00:00:00) tell 192.168.1.104, length 46
+ 2110 00:53:20.816207 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.9.1 tell 192.168.1.104, length 46
+ 2111 00:53:24.816250 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2112 00:53:34.070042 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2113 00:53:38.066071 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2114 00:53:42.066147 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2115 00:54:01.318359 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (0) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2116 00:54:05.315828 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2117 00:54:09.315890 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2118 00:54:13.181082 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2119 00:54:14.315931 00:1f:29:da:2d:f9 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0xb200) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 2120 00:54:21.175117 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2121 00:54:33.317692 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2122 00:54:37.315602 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2123 00:54:41.315784 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2124 00:54:46.565443 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 2125 00:54:50.565483 00:1f:4d:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:00:aa:aa:aa) tell 192.168.1.104, length 46
+ 2126 00:54:59.819122 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:eb:42:00) tell 192.168.1.104, length 46
+ 2127 00:55:03.815332 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2128 00:55:07.815280 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2129 00:55:27.067619 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2130 00:55:31.065079 00:83:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2131 00:55:35.065062 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (29697)
+ 0x0000: 0001 0800 0604 7401 001f 29da 2d79 c0a8 ......t...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 8000 0000 0000 ..............
+ 2132 00:55:39.067857 00:1f:29:7a:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2133 00:55:40.174381 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2134 00:55:43.064996 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2135 00:55:47.064945 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2136 00:55:59.066956 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2137 00:56:03.064844 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2138 00:56:07.064785 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:df, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:00:00:00:00:aa) tell 192.168.1.104, length 46
+ 2139 00:56:08.319732 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2140 00:56:10.314808 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2141 00:56:16.314844 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2142 00:56:20.314724 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.129 tell 192.168.1.104, length 46
+ 2143 00:56:25.568724 00:1f:29:da:2d:79 > fb:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (36865)
+ 0x0000: 0001 0800 0604 9001 001f 29da 2d79 c0a8 ..........).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 2144 00:56:29.564583 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2145 00:56:33.564563 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2146 00:56:41.697973 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 2147 00:56:42.816991 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (8193) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2148 00:56:46.814563 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2149 00:56:50.814549 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2150 00:56:54.814365 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2151 00:57:00.814325 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.85.1.104, length 46
+ 2152 00:57:04.427198 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 (00:00:55:00:00:00) tell 192.168.0.32, length 46
+ 2153 00:57:06.189317 00:1f:29:da:2d:79 > ff:ff:ff:bf:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.114.1 (00:00:00:00:20:00) tell 192.168.1.104, length 46
+ 2154 00:57:08.814259 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2155 00:57:11.338072 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 2156 00:57:12.814211 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2157 00:57:24.816220 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2158 00:57:28.814085 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2159 00:57:30.632819 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 192.168.0.31, length 46
+ 2160 00:57:32.814045 00:1f:29:da:2d:79 > ff:ff:ff:25:00:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2161 00:57:34.068623 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2162 00:57:38.063976 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2163 00:57:41.954084 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (12545)
+ 0x0000: 0001 0800 0604 3101 0013 2013 db6f c0a8 ......1......o..
+ 0x0010: 001f 0000 0000 0000 c0a8 0001 0000 0000 ................
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 2164 00:57:42.063978 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2165 00:57:51.317804 00:1f:29:da:2d:79 > 9a:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2166 00:57:59.313795 00:1f:29:da:2d:79 > ff:ff:0c:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2167 00:58:18.566072 af:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (5) (len 6), IPv4 (len 4), Unknown (16385)
+ 0x0000: 0005 0800 0604 4001 001f 29da 2d79 c0a8 ......@...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 2168 00:58:22.563579 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2169 00:58:26.563559 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 0), Unknown Protocol (0x0825) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 2170 00:58:30.566381 00:0f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2171 00:58:34.204193 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2172 00:58:38.563452 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.229.1 tell 192.168.1.104, length 46
+ 2173 00:58:50.565481 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2174 00:58:54.563337 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2175 00:58:58.563323 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2176 00:58:59.817993 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:fd, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2177 00:59:03.813533 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2178 00:59:07.813247 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2179 00:59:08.821686 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 2180 00:59:17.066900 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2181 00:59:19.805272 00:08:02:7e:b2:36 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: [|arp]
+ 2182 00:59:19.805710 00:21:d8:ee:03:45 > 00:08:02:7e:b2:36, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reply 170.170.170.170 is-at 00:21:d8:01:03:aa, length 46
+ 2183 00:59:21.063175 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2184 00:59:24.713775 00:21:5a:21:9e:fd > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.35, length 46
+ 2185 00:59:25.063144 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2186 00:59:43.399641 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.33 tell 192.168.0.31, length 46
+ 2187 00:59:44.315506 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2188 00:59:48.312806 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2189 00:59:56.315804 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2190 01:00:00.312773 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:20:00) tell 192.168.1.104, length 46
+ 2191 01:00:04.312748 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 2192 01:00:09.265816 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa) tell 170.170.170.170, length 46
+ 2193 01:00:16.315052 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x2500) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 2194 01:00:20.312645 00:1f:29:da:2d:39 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 2195 01:00:24.312656 00:1f:47:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0808) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 2196 01:00:25.567200 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x086f) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 2197 01:00:29.562516 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2198 01:00:33.562531 00:1f:29:44:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2199 01:00:42.816254 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2200 01:00:46.812391 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2201 01:00:50.812357 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:00:00:00:7e) tell 192.168.1.104, length 46
+ 2202 01:01:10.064649 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.5.1.1 tell 192.168.1.104, length 46
+ 2203 01:01:14.062246 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2204 01:01:18.062085 00:1f:29:da:2d:79 > e3:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2205 01:01:22.064996 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2206 01:01:26.061993 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 2207 01:01:27.333690 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2208 01:01:29.237987 00:1f:29:da:f8:fb > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.37, length 46
+ 2209 01:01:29.327584 00:1f:29:da:2d:79 > ff:ff:ff:ff:49:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2210 01:01:35.327569 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2211 01:01:40.387506 00:16:17:e0:67:e7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.33, length 46
+ 2212 01:01:41.633919 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.31, length 46
+ 2213 01:01:42.064199 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2214 01:01:46.061842 00:1f:29:d2:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:10:00:00:00) tell 192.168.1.104, length 46
+ 2215 01:01:50.061812 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2216 01:01:51.316412 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2217 01:01:53.311784 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2218 01:01:59.311773 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reverse Request who-is 00:00:00:00:00:00 tell 00:1f:29:da:2d:79, length 46
+ 2219 01:02:08.565661 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2220 01:02:12.561640 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (25:00:00:00:00:00) tell 192.168.1.104, length 46
+ 2221 01:02:16.561604 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2222 01:02:34.265915 00:0f:fe:3a:fb:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.32, length 46
+ 2223 01:02:35.813709 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2224 01:02:39.811398 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (22273)
+ 0x0000: 0001 0800 0604 5701 001f 29da 2d79 c0a8 ......W...).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0010 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 2225 01:02:41.306154 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.0.34, length 46
+ 2226 01:02:43.811398 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 2227 01:02:47.814258 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2228 01:02:51.811304 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2229 01:02:55.342504 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2230 01:03:02.342432 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2231 01:03:11.811117 00:1f:29:da:2d:79 > ff:ff:ff:1a:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2232 01:03:15.811071 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2233 01:03:17.065899 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2234 01:03:21.061022 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (54273) (len 6), IPv4 (len 4), Request who-has 170.170.170.170 (00:aa:aa:aa:aa:aa) tell 192.168.1.104, length 46
+ 2235 01:03:25.061148 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2236 01:03:30.637804 00:13:20:13:db:6f > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.38 tell 194.168.0.31, length 46
+ 2237 01:03:34.314837 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2238 01:03:38.311018 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2239 01:03:42.310914 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2240 01:04:01.563050 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 2241 01:04:05.560619 00:1f:2d:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2242 01:04:09.560577 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2243 01:04:13.563376 00:1f:29:da:2d:47 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Unknown (33)
+ 0x0000: 0001 0800 0604 0021 001f 29da 2d79 c0a8 .......!..).-y..
+ 0x0010: 0168 0000 0000 0000 c0a8 0101 0000 0000 .h..............
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 ..............
+ 2244 01:04:17.560494 00:1f:29:da:2d:79 > ff:ff:25:00:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2245 01:04:19.394504 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2246 01:04:21.388606 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2247 01:04:27.388561 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2248 01:04:33.562533 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2249 01:04:37.560357 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x0802) (len 4), Request who-has <wrong proto type> (00:6a:00:00:00:00) tell <wrong proto type>, length 46
+ 2250 01:04:41.560312 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2251 01:04:42.814939 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2252 01:04:46.810284 00:1f:29:da:2d:79 > ff:ff:ff:ff:25:00, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Reverse Request who-is 00:00:00:00:00:00 tell 00:1f:29:da:2d:79, length 46
+ 2253 01:04:50.810301 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2254 01:05:00.064223 00:1f:29:fa:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2255 01:05:04.060140 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:48:00:00:00:00) tell 192.168.1.104, length 46
+ 2256 01:05:08.060025 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2257 01:05:27.312518 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2258 01:05:30.779756 00:0f:fe:3a:7f:20 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 2259 01:05:31.309919 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2260 01:05:35.309896 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2261 01:05:36.822896 00:19:db:2b:57:d7 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.1 tell 192.168.68.34, length 46
+ 2262 01:05:39.312796 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2263 01:05:46.372317 00:1f:29:da:2d:a8 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2264 01:05:49.372246 00:1f:29:da:2d:79 > ff:ff:ff:ff:6e:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (186) (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2265 01:05:53.372199 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2266 01:05:59.311875 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (ab:00:00:00:00:00) tell 192.168.1.104, length 46
+ 2267 01:06:03.309642 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.17.1 (00:00:02:00:00:00) tell 192.168.1.104, length 46
+ 2268 01:06:07.309597 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: [|arp]
+ 2269 01:06:08.564127 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2270 01:06:12.559548 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2271 01:06:16.559535 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x082e) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 2272 01:06:20.559483 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2273 01:06:25.813454 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2274 01:06:29.809397 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2275 01:06:33.809376 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Unknown Hardware (37) (len 6), Unknown Protocol (0x0000) (len 4), Request who-has <wrong proto type> tell <wrong proto type>, length 46
+ 2276 01:06:39.036037 00:21:d8:01:03:45 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), Unknown Protocol (0x7500) (len 4), Unknown (161)
+ 0x0000: 0001 7500 0604 00a1 0021 d801 0345 c0a8 ..u......!...E..
+ 0x0010: 0001 00aa aaaa aaaa aaaa aaaa aaaa aaaa ................
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa ..............
+ 2277 01:06:43.061813 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2278 01:06:47.059263 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2279 01:06:51.059204 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:5a:00:00:00) tell 192.168.1.104, length 46
+ 2280 01:07:01.059110 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 (00:00:40:00:00:00) tell 192.168.1.104, length 46
+ 2281 01:07:05.062084 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.104, length 46
+ 2282 01:07:09.059036 00:1f:29:da:2d:79 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 14), IPv4 (len 4), Request who-has 170.170.170.170 (aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa) tell 0.170.170.170, length 46
diff --git a/tests/arp-oobr.pcap b/tests/arp-oobr.pcap
new file mode 100644
index 0000000..954369e
--- /dev/null
+++ b/tests/arp-oobr.pcap
Binary files differ
diff --git a/tests/arp-too-long-tha.out b/tests/arp-too-long-tha.out
new file mode 100644
index 0000000..7691655
--- /dev/null
+++ b/tests/arp-too-long-tha.out
@@ -0,0 +1 @@
+ 1 01:10:59.680304 ARP, Unknown Hardware (12336) (len 14), IPv4 (len 4), Request who-has 48.48.48.48 (30:30:30:30:30:30:30:30:30:30:30:30:30:30) tell 48.48.48.48, length 262126
diff --git a/tests/arp-too-long-tha.pcap b/tests/arp-too-long-tha.pcap
new file mode 100644
index 0000000..503754b
--- /dev/null
+++ b/tests/arp-too-long-tha.pcap
Binary files differ
diff --git a/tests/atm-heapoverflow.out b/tests/atm-heapoverflow.out
new file mode 100644
index 0000000..99df0c4
--- /dev/null
+++ b/tests/atm-heapoverflow.out
@@ -0,0 +1 @@
+ 1 00:01:24.872469723 Rx: VPI:0 VCI:5 [|atm]
diff --git a/tests/atm-heapoverflow.pcap b/tests/atm-heapoverflow.pcap
new file mode 100644
index 0000000..f8bd118
--- /dev/null
+++ b/tests/atm-heapoverflow.pcap
Binary files differ
diff --git a/tests/atm-oam-heapoverflow.out b/tests/atm-oam-heapoverflow.out
new file mode 100644
index 0000000..db35568
--- /dev/null
+++ b/tests/atm-oam-heapoverflow.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 [|oam]
diff --git a/tests/atm-oam-heapoverflow.pcap b/tests/atm-oam-heapoverflow.pcap
new file mode 100644
index 0000000..a0691e0
--- /dev/null
+++ b/tests/atm-oam-heapoverflow.pcap
Binary files differ
diff --git a/tests/babel.pcap b/tests/babel.pcap
new file mode 100644
index 0000000..a9ab2b8
--- /dev/null
+++ b/tests/babel.pcap
Binary files differ
diff --git a/tests/babel1.out b/tests/babel1.out
new file mode 100644
index 0000000..2e18155
--- /dev/null
+++ b/tests/babel1.out
@@ -0,0 +1,25 @@
+ 1 19:44:19.518440 IP6 fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: babel 2 (8) hello
+ 2 19:44:30.528850 IP6 fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: babel 2 (8) hello
+ 3 19:44:34.648170 IP6 fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: babel 2 (110) update/prefix/id nh update update/prefix/id update update
+ 4 19:44:39.419154 IP6 fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: babel 2 (24) hello ihu
+ 5 19:44:51.916853 IP6 fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: babel 2 (8) hello
+ 6 19:45:00.318823 IP6 fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: babel 2 (8) hello
+ 7 19:45:11.864852 IP6 fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: babel 2 (24) hello ihu
+ 8 19:45:16.008864 IP6 fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: babel 2 (8) hello
+ 9 19:45:27.868910 IP6 fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: babel 2 (8) hello
+ 10 19:45:31.077442 IP6 fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: babel 2 (52) update/prefix/id update/prefix update/prefix
+ 11 19:45:31.088831 IP6 fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: babel 2 (32) seqno-request
+ 12 19:45:31.268214 IP6 fe80::68d3:1235:d068:1f9e.5359 > ff02::cca6:c0f9:e182:5359.5359: AHCP Version 1
+ 13 19:45:32.068699 IP6 fe80::68d3:1235:d068:1f9e.5359 > ff02::cca6:c0f9:e182:5359.5359: AHCP Version 1
+ 14 19:45:32.636373 IP6 fe80::3428:af91:251:d626.5359 > fe80::68d3:1235:d068:1f9e.5359: AHCP Version 1
+ 15 19:45:32.638108 IP6 fe80::68d3:1235:d068:1f9e.5359 > ff02::cca6:c0f9:e182:5359.5359: AHCP Version 1
+ 16 19:45:32.655976 IP6 fe80::3428:af91:251:d626.5359 > ff02::cca6:c0f9:e182:5359.5359: AHCP Version 1
+ 17 19:45:33.066768 IP6 fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: babel 2 (28) update/prefix/id
+ 18 19:45:33.204835 IP6 fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: babel 2 (32) seqno-request
+ 19 19:45:34.024965 IP6 fe80::3428:af91:251:d626.5359 > fe80::68d3:1235:d068:1f9e.5359: AHCP Version 1
+ 20 19:45:34.028257 IP6 fe80::68d3:1235:d068:1f9e.5359 > ff02::cca6:c0f9:e182:5359.5359: AHCP Version 1
+ 21 19:45:34.726727 IP6 fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: babel 2 (24) hello ihu
+ 22 19:45:35.096873 IP6 fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: babel 2 (28) update/prefix/id
+ 23 19:45:35.192868 IP6 fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: babel 2 (32) seqno-request
+ 24 19:45:35.388520 IP6 fe80::3428:af91:251:d626.5359 > fe80::68d3:1235:d068:1f9e.5359: AHCP Version 1
+ 25 19:45:35.537445 IP6 fe80::68d3:1235:d068:1f9e > ff02::16: HBH ICMP6, multicast listener report v2, 2 group record(s), length 48
diff --git a/tests/babel1v.out b/tests/babel1v.out
new file mode 100644
index 0000000..0f6d39a
--- /dev/null
+++ b/tests/babel1v.out
@@ -0,0 +1,67 @@
+ 1 19:44:19.518440 IP6 (hlim 1, next-header UDP (17) payload length: 20) fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (8)
+ Hello seqno 8042 interval 20.00s
+ 2 19:44:30.528850 IP6 (hlim 1, next-header UDP (17) payload length: 20) fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (8)
+ Hello seqno 40102 interval 20.00s
+ 3 19:44:34.648170 IP6 (hlim 1, next-header UDP (17) payload length: 122) fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (110)
+ Update/prefix/id 2001:660:3301:8063:218:84ff:fe1a:615d/128 metric 1 seqno 32272 interval 80.00s sub-diversity 6
+ Next Hop 192.168.4.25
+ Update 192.168.4.195/32 metric 1 seqno 32272 interval 80.00s sub-diversity 6
+ Update/prefix/id 2001:660:3301:8063:218:f3ff:fea9:914e/128 metric 0 seqno 40149 interval 80.00s sub-diversity empty
+ Update ::/0 metric 196 seqno 40149 interval 80.00s sub-diversity empty
+ Update 192.168.4.25/32 metric 0 seqno 40149 interval 80.00s sub-diversity empty
+ 4 19:44:39.419154 IP6 (hlim 1, next-header UDP (17) payload length: 36) fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (24)
+ Hello seqno 8043 interval 20.00s
+ IHU fe80::3428:af91:251:d626 rxcost 96 interval 60.00s
+ 5 19:44:51.916853 IP6 (hlim 1, next-header UDP (17) payload length: 20) fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (8)
+ Hello seqno 40103 interval 20.00s
+ 6 19:45:00.318823 IP6 (hlim 1, next-header UDP (17) payload length: 20) fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (8)
+ Hello seqno 8044 interval 20.00s
+ 7 19:45:11.864852 IP6 (hlim 1, next-header UDP (17) payload length: 36) fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (24)
+ Hello seqno 40104 interval 20.00s
+ IHU fe80::68d3:1235:d068:1f9e rxcost 96 interval 60.00s
+ 8 19:45:16.008864 IP6 (hlim 1, next-header UDP (17) payload length: 20) fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (8)
+ Hello seqno 8045 interval 20.00s
+ 9 19:45:27.868910 IP6 (hlim 1, next-header UDP (17) payload length: 20) fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (8)
+ Hello seqno 40105 interval 20.00s
+ 10 19:45:31.077442 IP6 (hlim 1, next-header UDP (17) payload length: 64) fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (52)
+ Update/prefix/id 2001:660:3301:8063:218:f3ff:fea9:914e/128 metric 65535 seqno 40149 interval 80.00s
+ Update/prefix 2001:660:3301:8063:218:f3ff:fea9:914e/128 metric 65535 seqno 40149 interval 80.00s
+ Update/prefix 2001:660:3301:8063:218:f3ff:fea9:914e/128 metric 65535 seqno 40149 interval 80.00s
+ 11 19:45:31.088831 IP6 (hlim 1, next-header UDP (17) payload length: 44) fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (32)
+ Seqno Request (127 hops) for 2001:660:3301:8063:218:f3ff:fea9:914e/128 seqno 40150 id 02:18:f3:ff:fe:a9:91:4e
+ 12 19:45:31.268214 IP6 (hlim 1, next-header UDP (17) payload length: 50) fe80::68d3:1235:d068:1f9e.5359 > ff02::cca6:c0f9:e182:5359.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0xde3e5127, Source Id 02:18:f3:ff:fe:a9:91:4e, Destination Id ff:ff:ff:ff:ff:ff:ff:ff
+ Discover, Length 14
+ 13 19:45:32.068699 IP6 (hlim 1, next-header UDP (17) payload length: 50) fe80::68d3:1235:d068:1f9e.5359 > ff02::cca6:c0f9:e182:5359.5359: [udp sum ok] AHCP Version 1
+ Hopcount 2, Original Hopcount 2, Nonce 0xdf3e5127, Source Id 02:18:f3:ff:fe:a9:91:4e, Destination Id ff:ff:ff:ff:ff:ff:ff:ff
+ Discover, Length 14
+ 14 19:45:32.636373 IP6 (hlim 64, next-header UDP (17) payload length: 188) fe80::3428:af91:251:d626.5359 > fe80::68d3:1235:d068:1f9e.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0xc9b83d0d, Source Id 79:40:14:7f:b6:6d:c3:29, Destination Id 02:18:f3:ff:fe:a9:91:4e
+ Offer, Length 152
+ 15 19:45:32.638108 IP6 (hlim 1, next-header UDP (17) payload length: 50) fe80::68d3:1235:d068:1f9e.5359 > ff02::cca6:c0f9:e182:5359.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0xe03e5127, Source Id 02:18:f3:ff:fe:a9:91:4e, Destination Id 79:40:14:7f:b6:6d:c3:29
+ Request, Length 14
+ 16 19:45:32.655976 IP6 (hlim 1, next-header UDP (17) payload length: 50) fe80::3428:af91:251:d626.5359 > ff02::cca6:c0f9:e182:5359.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 2, Nonce 0xdf3e5127, Source Id 02:18:f3:ff:fe:a9:91:4e, Destination Id ff:ff:ff:ff:ff:ff:ff:ff
+ Discover, Length 14
+ 17 19:45:33.066768 IP6 (hlim 1, next-header UDP (17) payload length: 40) fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (28)
+ Update/prefix/id 2001:660:3301:8063:218:f3ff:fea9:914e/128 metric 65535 seqno 40149 interval 80.00s
+ 18 19:45:33.204835 IP6 (hlim 1, next-header UDP (17) payload length: 44) fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (32)
+ Seqno Request (127 hops) for 2001:660:3301:8063:218:f3ff:fea9:914e/128 seqno 40150 id 02:18:f3:ff:fe:a9:91:4e
+ 19 19:45:34.024965 IP6 (hlim 64, next-header UDP (17) payload length: 188) fe80::3428:af91:251:d626.5359 > fe80::68d3:1235:d068:1f9e.5359: [udp sum ok] AHCP Version 1
+ Hopcount 2, Original Hopcount 2, Nonce 0xcab83d0d, Source Id 79:40:14:7f:b6:6d:c3:29, Destination Id 02:18:f3:ff:fe:a9:91:4e
+ Offer, Length 152
+ 20 19:45:34.028257 IP6 (hlim 1, next-header UDP (17) payload length: 50) fe80::68d3:1235:d068:1f9e.5359 > ff02::cca6:c0f9:e182:5359.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0xe13e5127, Source Id 02:18:f3:ff:fe:a9:91:4e, Destination Id 79:40:14:7f:b6:6d:c3:29
+ Request, Length 14
+ 21 19:45:34.726727 IP6 (hlim 1, next-header UDP (17) payload length: 36) fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (24)
+ Hello seqno 8046 interval 20.00s
+ IHU fe80::3428:af91:251:d626 rxcost 96 interval 60.00s
+ 22 19:45:35.096873 IP6 (hlim 1, next-header UDP (17) payload length: 40) fe80::68d3:1235:d068:1f9e.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (28)
+ Update/prefix/id 2001:660:3301:8063:218:f3ff:fea9:914e/128 metric 65535 seqno 40149 interval 80.00s
+ 23 19:45:35.192868 IP6 (hlim 1, next-header UDP (17) payload length: 44) fe80::3428:af91:251:d626.6697 > ff02::1:6.6697: [udp sum ok] babel 2 (32)
+ Seqno Request (127 hops) for 2001:660:3301:8063:218:f3ff:fea9:914e/128 seqno 40150 id 02:18:f3:ff:fe:a9:91:4e
+ 24 19:45:35.388520 IP6 (hlim 64, next-header UDP (17) payload length: 188) fe80::3428:af91:251:d626.5359 > fe80::68d3:1235:d068:1f9e.5359: [udp sum ok] AHCP Version 1
+ Hopcount 1, Original Hopcount 1, Nonce 0xcbb83d0d, Source Id 79:40:14:7f:b6:6d:c3:29, Destination Id 02:18:f3:ff:fe:a9:91:4e
+ Ack, Length 152
+ 25 19:45:35.537445 IP6 (hlim 1, next-header Options (0) payload length: 56) fe80::68d3:1235:d068:1f9e > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 2 group record(s) [gaddr ff02::1:6 to_ex, 0 source(s)] [gaddr ff02::cca6:c0f9:e182:5359 to_ex, 0 source(s)]
diff --git a/tests/babel_auth.out b/tests/babel_auth.out
new file mode 100644
index 0000000..fe4233d
--- /dev/null
+++ b/tests/babel_auth.out
@@ -0,0 +1,13 @@
+ 1 12:40:23.226395 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 436) fe80::b299:28ff:fec8:d646.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (424)
+ Hello seqno 58134 interval 4.00s
+ Update/id any metric 65535 seqno 41391 interval infinity
+ Route Request for any
+ TS/PC timestamp 1339081200 packetcounter 2
+ HMAC key-id 30 digest-20 AD0FA7CD8D5A1898EC5409C8EDDA68B3ACA21B80
+ HMAC key-id 50 digest-32 8239F283D985047FA4B88597FDE3246455C6E4DD917B1441C2F3A82B9F737674
+ HMAC key-id 1000 digest-64 6718CB4C2BB0976C127AB3CCCBFA1105A1D158F035BC9FAD86B0610A7ACD27E5A3D5A3090FFB0312D7CBB31834E5D3EA2B68CD1FEC3CFB9CE731D16BA8FEBA8C
+ HMAC key-id 1000 digest-48 D2A5B80FF9D006907E3B6601C0C255D7D12D6EC61815E413A334E2A0D9271C75AFBC086C070C714E3EFF3496C20C56FB
+ HMAC key-id 100 digest-20 7213CED66FE7154034EC64CD14AE4142A092DF33
+ HMAC key-id 2000 digest-64 2A5D9D55393B19E440FAC49BDA521E18A7FE77F7AB4A90377009E46E2FFE49336435C7E4E7BE215996DF4F59C167EA1CCCDB4FF788DA29A30E34D974307ADFF4
+ HMAC key-id 2000 digest-48 FE91AF27EEE137EF489F37FEE449100CDA8CCB3E794D0C4A225D12724A8CE2FFC85811B879CC566FD172269847091ED1
+ HMAC key-id 3000 digest-64 38C4D82883A5778500D728D1E243E7579DE96FA726C9DB7F0805C52E96FEFDCE7A5FB9AF2CB845703926EAAB43C3E44989D6CCB158FC06DB455E9F8D0550B54F
diff --git a/tests/babel_auth.pcap b/tests/babel_auth.pcap
new file mode 100644
index 0000000..941e628
--- /dev/null
+++ b/tests/babel_auth.pcap
Binary files differ
diff --git a/tests/babel_pad1.out b/tests/babel_pad1.out
new file mode 100644
index 0000000..9d01f0d
--- /dev/null
+++ b/tests/babel_pad1.out
@@ -0,0 +1,2 @@
+ 1 11:31:30.306841 IP6 fe80::b299:28ff:fec8:d646.6696 > ff02::1:6.6696: babel 2 (9) hello pad1
+ 2 11:31:35.126176 IP6 fe80::b299:28ff:fec8:d646.6696 > ff02::1:6.6696: babel 2 (60) hello pad1 nh pad1 router-id pad1 update pad1 update pad1
diff --git a/tests/babel_pad1.pcap b/tests/babel_pad1.pcap
new file mode 100644
index 0000000..0e87911
--- /dev/null
+++ b/tests/babel_pad1.pcap
Binary files differ
diff --git a/tests/babel_rfc6126bis.out b/tests/babel_rfc6126bis.out
new file mode 100644
index 0000000..5f488c3
--- /dev/null
+++ b/tests/babel_rfc6126bis.out
@@ -0,0 +1,913 @@
+ 1 16:32:33.277870 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 68) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc98d -> 0x1c5e!] babel 2 (22)
+ Hello seqno 56843 interval 4.00s
+ PC value 3 index len 8
+ ----
+ MAC len 32
+ 2 16:32:35.140129 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3348 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 3 16:32:36.815622 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xbdc0!] babel 2 (38)
+ Hello seqno 56844 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 4 index len 8
+ ----
+ MAC len 32
+ 4 16:32:39.427155 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3349 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 341 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 341 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 341 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 341 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 341 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 5 16:32:41.947957 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x262d!] babel 2 (38)
+ Hello seqno 56845 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 5 index len 8
+ ----
+ MAC len 32
+ 6 16:32:44.319302 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3350 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 7 16:32:45.501482 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x4209!] babel 2 (38)
+ Hello seqno 56846 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 6 index len 8
+ ----
+ MAC len 32
+ 8 16:32:47.277144 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3351 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 9 16:32:49.351252 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0x3ba0!] babel 2 (98)
+ Hello seqno 56847 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 7 index len 8
+ ----
+ MAC len 32
+ 10 16:32:51.099638 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3352 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 11 16:32:53.852527 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xe41c!] babel 2 (38)
+ Hello seqno 56848 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 8 index len 8
+ ----
+ MAC len 32
+ 12 16:32:54.558995 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3353 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 13 16:32:57.508863 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x45ca!] babel 2 (38)
+ Hello seqno 56849 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 9 index len 8
+ ----
+ MAC len 32
+ 14 16:32:59.082277 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3354 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 264 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 264 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 264 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 264 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 264 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 15 16:33:01.457796 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x6fda!] babel 2 (38)
+ Hello seqno 56850 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 10 index len 8
+ ----
+ MAC len 32
+ 16 16:33:02.208454 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3355 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 17 16:33:05.074402 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0x6b89!] babel 2 (98)
+ Hello seqno 56851 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 11 index len 8
+ ----
+ MAC len 32
+ 18 16:33:06.910470 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3356 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 19 16:33:10.031734 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xce2f!] babel 2 (38)
+ Hello seqno 56852 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 12 index len 8
+ ----
+ MAC len 32
+ 20 16:33:11.517671 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3357 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 257 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 257 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 257 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 257 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 257 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 21 16:33:13.679177 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x483c!] babel 2 (38)
+ Hello seqno 56853 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 13 index len 8
+ ----
+ MAC len 32
+ 22 16:33:14.845361 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3358 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 23 16:33:17.615133 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3359 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 24 16:33:17.674768 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0x3273!] babel 2 (98)
+ Hello seqno 56854 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 14 index len 8
+ ----
+ MAC len 32
+ 25 16:33:21.779718 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xcb32!] babel 2 (38)
+ Hello seqno 56855 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 15 index len 8
+ ----
+ MAC len 32
+ 26 16:33:22.356417 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3360 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 27 16:33:24.891551 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x4753!] babel 2 (38)
+ Hello seqno 56856 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 16 index len 8
+ ----
+ MAC len 32
+ 28 16:33:25.614261 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3361 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 292 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 292 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 292 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 292 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 292 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 29 16:33:29.136954 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3362 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 30 16:33:29.490901 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0xa436!] babel 2 (98)
+ Hello seqno 56857 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 17 index len 8
+ ----
+ MAC len 32
+ 31 16:33:32.655444 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3363 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 32 16:33:33.018790 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x0069!] babel 2 (38)
+ Hello seqno 56858 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 18 index len 8
+ ----
+ MAC len 32
+ 33 16:33:35.890115 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3364 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 34 16:33:37.988056 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xa5cb!] babel 2 (38)
+ Hello seqno 56859 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 19 index len 8
+ ----
+ MAC len 32
+ 35 16:33:40.435664 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3365 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 257 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 257 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 257 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 257 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 257 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 36 16:33:42.681282 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x363f!] babel 2 (38)
+ Hello seqno 56860 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 20 index len 8
+ ----
+ MAC len 32
+ 37 16:33:45.178909 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3366 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 38 16:33:46.498608 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0x7e27!] babel 2 (98)
+ Hello seqno 56861 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 21 index len 8
+ ----
+ MAC len 32
+ 39 16:33:48.948627 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3367 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 40 16:33:50.430431 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xc772!] babel 2 (38)
+ Hello seqno 56862 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 22 index len 8
+ ----
+ MAC len 32
+ 41 16:33:52.044623 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3368 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 42 16:33:54.099377 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xd3ed!] babel 2 (38)
+ Hello seqno 56863 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 23 index len 8
+ ----
+ MAC len 32
+ 43 16:33:55.185879 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3369 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 341 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 341 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 341 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 341 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 341 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 44 16:33:58.496209 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0x4ec7!] babel 2 (98)
+ Hello seqno 56864 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 24 index len 8
+ ----
+ MAC len 32
+ 45 16:34:00.293327 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3370 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 46 16:34:02.002362 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xa12e!] babel 2 (38)
+ Hello seqno 56865 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 25 index len 8
+ ----
+ MAC len 32
+ 47 16:34:04.421100 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3371 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 48 16:34:06.654638 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xe298!] babel 2 (38)
+ Hello seqno 56866 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 26 index len 8
+ ----
+ MAC len 32
+ 49 16:34:07.702426 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 294) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (282)
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 364 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 364 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 364 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 364 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 364 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 50 16:34:09.180588 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3372 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 51 16:34:11.052100 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x4635!] babel 2 (38)
+ Hello seqno 56867 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 27 index len 8
+ ----
+ MAC len 32
+ 52 16:34:13.696747 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3373 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 53 16:34:15.433804 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x7785!] babel 2 (38)
+ Hello seqno 56868 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 28 index len 8
+ ----
+ MAC len 32
+ 54 16:34:16.949172 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3374 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 55 16:34:18.748771 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0x60bf!] babel 2 (98)
+ Hello seqno 56869 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 29 index len 8
+ ----
+ MAC len 32
+ 56 16:34:20.181984 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3375 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 266 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 266 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 266 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 266 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 266 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 57 16:34:21.847966 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x86ff!] babel 2 (38)
+ Hello seqno 56870 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 30 index len 8
+ ----
+ MAC len 32
+ 58 16:34:25.010516 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3376 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 59 16:34:26.826451 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x5742!] babel 2 (38)
+ Hello seqno 56871 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 31 index len 8
+ ----
+ MAC len 32
+ 60 16:34:28.033759 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3377 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 61 16:34:29.983309 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xae5e!] babel 2 (38)
+ Hello seqno 56872 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 32 index len 8
+ ----
+ MAC len 32
+ 62 16:34:31.545364 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3378 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 63 16:34:34.092622 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xed48!] babel 2 (38)
+ Hello seqno 56873 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 33 index len 8
+ ----
+ MAC len 32
+ 64 16:34:34.780956 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3379 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 65 16:34:37.745827 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0xf62f!] babel 2 (98)
+ Hello seqno 56874 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 34 index len 8
+ ----
+ MAC len 32
+ 66 16:34:38.061063 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3380 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 258 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 258 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 258 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 258 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 258 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 67 16:34:41.636580 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x1541!] babel 2 (38)
+ Hello seqno 56875 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 35 index len 8
+ ----
+ MAC len 32
+ 68 16:34:42.423299 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3381 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 69 16:34:45.154733 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x96be!] babel 2 (38)
+ Hello seqno 56876 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 36 index len 8
+ ----
+ MAC len 32
+ 70 16:34:45.787738 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3382 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 71 16:34:48.946460 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xe708!] babel 2 (38)
+ Hello seqno 56877 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 37 index len 8
+ ----
+ MAC len 32
+ 72 16:34:49.645866 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3383 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 73 16:34:53.913428 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0x6fba!] babel 2 (98)
+ Hello seqno 56878 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 38 index len 8
+ ----
+ MAC len 32
+ 74 16:34:54.380930 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3384 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 256 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 75 16:34:57.031403 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xb303!] babel 2 (38)
+ Hello seqno 56879 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 39 index len 8
+ ----
+ MAC len 32
+ 76 16:34:58.238159 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3385 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 77 16:35:01.893993 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xc4be!] babel 2 (38)
+ Hello seqno 56880 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 40 index len 8
+ ----
+ MAC len 32
+ 78 16:35:03.793788 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3386 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 79 16:35:06.429775 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x2e87!] babel 2 (38)
+ Hello seqno 56881 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 41 index len 8
+ ----
+ MAC len 32
+ 80 16:35:07.136397 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3387 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 256 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 81 16:35:09.295933 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xf8fc!] babel 2 (38)
+ Hello seqno 56882 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 42 index len 8
+ ----
+ MAC len 32
+ 82 16:35:11.788998 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3388 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 83 16:35:12.499013 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0x058f!] babel 2 (98)
+ Hello seqno 56883 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 43 index len 8
+ ----
+ MAC len 32
+ 84 16:35:15.594124 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3389 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 85 16:35:16.703098 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xe587!] babel 2 (38)
+ Hello seqno 56884 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 44 index len 8
+ ----
+ MAC len 32
+ 86 16:35:18.604211 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3390 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 87 16:35:20.680644 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xd437!] babel 2 (38)
+ Hello seqno 56885 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 45 index len 8
+ ----
+ MAC len 32
+ 88 16:35:21.867171 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3391 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 256 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 89 16:35:25.562650 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0x0b23!] babel 2 (98)
+ Hello seqno 56886 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 46 index len 8
+ ----
+ MAC len 32
+ 90 16:35:25.698580 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3392 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 91 16:35:29.868626 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x89a7!] babel 2 (38)
+ Hello seqno 56887 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 47 index len 8
+ ----
+ MAC len 32
+ 92 16:35:30.592752 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3393 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 93 16:35:33.617445 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x41f4!] babel 2 (38)
+ Hello seqno 56888 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 48 index len 8
+ ----
+ MAC len 32
+ 94 16:35:34.267770 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3394 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 95 16:35:37.478907 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xb8f6!] babel 2 (38)
+ Hello seqno 56889 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 49 index len 8
+ ----
+ MAC len 32
+ 96 16:35:37.538729 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3395 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 256 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 97 16:35:41.416641 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3396 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 98 16:35:41.425953 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0xa17a!] babel 2 (98)
+ Hello seqno 56890 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 50 index len 8
+ ----
+ MAC len 32
+ 99 16:35:45.200059 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x560f!] babel 2 (38)
+ Hello seqno 56891 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 51 index len 8
+ ----
+ MAC len 32
+ 100 16:35:45.995443 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3397 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 101 16:35:48.402937 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xd068!] babel 2 (38)
+ Hello seqno 56892 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 52 index len 8
+ ----
+ MAC len 32
+ 102 16:35:49.228766 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3398 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 256 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 103 16:35:51.457213 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xa383!] babel 2 (38)
+ Hello seqno 56893 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 53 index len 8
+ ----
+ MAC len 32
+ 104 16:35:53.449040 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3399 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 105 16:35:55.749773 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x5339!] babel 2 (38)
+ Hello seqno 56894 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 54 index len 8
+ ----
+ MAC len 32
+ 106 16:35:57.046008 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3400 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 107 16:36:00.465199 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0x0af1!] babel 2 (98)
+ Hello seqno 56895 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 55 index len 8
+ ----
+ MAC len 32
+ 108 16:36:01.709973 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3401 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 109 16:36:05.400055 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x7016!] babel 2 (38)
+ Hello seqno 56896 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 56 index len 8
+ ----
+ MAC len 32
+ 110 16:36:05.513000 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3402 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 111 16:36:09.691370 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3403 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 256 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 112 16:36:09.778883 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0xc73b!] babel 2 (38)
+ Hello seqno 56897 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 57 index len 8
+ ----
+ MAC len 32
+ 113 16:36:12.928142 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 68) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc98d -> 0x060d!] babel 2 (22)
+ Hello seqno 56898 interval 4.00s
+ PC value 58 index len 8
+ ----
+ MAC len 32
+ 114 16:36:12.944852 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3404 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 115 16:36:16.421603 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0xdc05!] babel 2 (98)
+ Hello seqno 56899 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 59 index len 8
+ ----
+ MAC len 32
+ 116 16:36:17.012623 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3405 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 117 16:36:20.854588 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x0040!] babel 2 (38)
+ Hello seqno 56900 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 60 index len 8
+ ----
+ MAC len 32
+ 118 16:36:21.240929 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3406 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 119 16:36:25.112054 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x0af5!] babel 2 (38)
+ Hello seqno 56901 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 61 index len 8
+ ----
+ MAC len 32
+ 120 16:36:26.283463 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 318) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (306)
+ Hello seqno 3407 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 256 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 121 16:36:29.352769 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0xbc4b!] babel 2 (98)
+ Hello seqno 56902 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 62 index len 8
+ ----
+ MAC len 32
+ 122 16:36:29.832565 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3408 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 123 16:36:33.636746 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x5f4b!] babel 2 (38)
+ Hello seqno 56903 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 63 index len 8
+ ----
+ MAC len 32
+ 124 16:36:34.584989 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3409 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 125 16:36:37.767841 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3410 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 126 16:36:38.127935 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x313e!] babel 2 (38)
+ Hello seqno 56904 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 64 index len 8
+ ----
+ MAC len 32
+ 127 16:36:41.034141 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 144) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc9d9 -> 0x98f5!] babel 2 (98)
+ Hello seqno 56905 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 0 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 0 seqno 12716 interval 16.00s
+ PC value 65 index len 8
+ ----
+ MAC len 32
+ 128 16:36:41.493691 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 294) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (282)
+ Router Id d6:81:d7:ff:fe:ba:91:11
+ Update/prefix fd77:e11e:3d73::151/128 metric 65535 seqno 12716 interval 16.00s
+ Update/prefix fd77:e11e:3d73:0:dee3:dca3:2244:7264/128 metric 65535 seqno 12716 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update/prefix fd13:442a:5766::1/128 metric 256 seqno 31397 interval 16.00s
+ Next Hop 192.168.1.30
+ Update 192.168.1.31/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.5.31/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update 192.168.99.1/32 metric 0 seqno 42753 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:01
+ Update 192.168.99.1/32 metric 256 seqno 31397 interval 16.00s
+ Update 192.168.99.247/32 metric 256 seqno 31397 interval 16.00s
+ Router Id e2:91:f5:ff:fe:cc:7a:be
+ Update/prefix fd77:e11e:3d73::1/128 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.1.30/32 metric 0 seqno 42753 interval 16.00s
+ Update 192.168.5.30/32 metric 0 seqno 42753 interval 16.00s
+ 129 16:36:42.615681 IP6 (class 0xc0, flowlabel 0xbead2, hlim 1, next-header UDP (17) payload length: 36) fe80::e091:f5ff:fecc:7abd.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (24)
+ Hello seqno 3411 interval 4.00s
+ IHU fe80::8d84:d538:a212:c6dd rxcost 96 interval 12.00s
+ 130 16:36:45.587533 IP6 (class 0xc0, flowlabel 0x83068, hlim 1, next-header UDP (17) payload length: 84) fe80::8d84:d538:a212:c6dd.6696 > ff02::1:6.6696: [bad udp cksum 0xc99d -> 0x9bda!] babel 2 (38)
+ Hello seqno 56906 interval 4.00s
+ IHU fe80::e091:f5ff:fecc:7abd rxcost 65535 interval 12.00s
+ PC value 66 index len 8
+ ----
+ MAC len 32
diff --git a/tests/babel_rfc6126bis.pcap b/tests/babel_rfc6126bis.pcap
new file mode 100644
index 0000000..c7c35ed
--- /dev/null
+++ b/tests/babel_rfc6126bis.pcap
Binary files differ
diff --git a/tests/babel_rtt.out b/tests/babel_rtt.out
new file mode 100644
index 0000000..192a417
--- /dev/null
+++ b/tests/babel_rtt.out
@@ -0,0 +1,25 @@
+ 1 15:42:42.968288 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 26) fe80::5054:ff:fe85:5da9.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (14)
+ Hello seqno 58805 interval 4.00s sub-timestamp 2222.954827s
+ 2 15:42:46.255938 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 52) fe80::5054:ff:fe23:4567.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (40)
+ Hello seqno 15585 interval 4.00s sub-timestamp 94.665527s
+ IHU fe80::5054:ff:fe85:5da9 rxcost 96 interval 12.00s sub-timestamp 2222.954827s|91.378052s
+ 3 15:42:46.465555 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 52) fe80::5054:ff:fe85:5da9.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (40)
+ Hello seqno 58806 interval 4.00s sub-timestamp 2226.449854s
+ IHU fe80::5054:ff:fe23:4567 rxcost 96 interval 12.00s sub-timestamp 90.173759s|2222.137366s
+ 4 15:42:49.741156 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 26) fe80::5054:ff:fe85:5da9.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (14)
+ Hello seqno 58807 interval 4.00s sub-timestamp 2229.725353s
+ 5 15:42:50.547169 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 26) fe80::5054:ff:fe23:4567.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (14)
+ Hello seqno 15586 interval 4.00s sub-timestamp 98.956759s
+ 6 15:42:54.148744 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 26) fe80::5054:ff:fe23:4567.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (14)
+ Hello seqno 15587 interval 4.00s sub-timestamp 102.558329s
+ 7 15:42:54.624767 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 26) fe80::5054:ff:fe85:5da9.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (14)
+ Hello seqno 58808 interval 4.00s sub-timestamp 2234.612063s
+ 8 15:42:58.082419 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 52) fe80::5054:ff:fe23:4567.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (40)
+ Hello seqno 15588 interval 4.00s sub-timestamp 106.492002s
+ IHU fe80::5054:ff:fe85:5da9 rxcost 96 interval 12.00s sub-timestamp 2234.612063s|103.034525s
+ 9 15:42:59.287088 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 88) fe80::5054:ff:fe85:5da9.6696 > ff02::1:6.6696: [udp sum ok] babel 2 (76)
+ Hello seqno 58809 interval 4.00s sub-timestamp 2239.274046s
+ IHU fe80::5054:ff:fe23:4567 rxcost 96 interval 12.00s sub-timestamp 98.956759s|2230.863572s
+ Next Hop 192.168.42.1
+ Router Id 48:5f:08:26:dc:36:6d:ad
+ Update 192.168.42.1/32 metric 0 seqno 61070 interval 16.00s
diff --git a/tests/babel_rtt.pcap b/tests/babel_rtt.pcap
new file mode 100644
index 0000000..b48d161
--- /dev/null
+++ b/tests/babel_rtt.pcap
Binary files differ
diff --git a/tests/babel_update_oobr.out b/tests/babel_update_oobr.out
new file mode 100644
index 0000000..a6749d7
--- /dev/null
+++ b/tests/babel_update_oobr.out
@@ -0,0 +1,125 @@
+ 1 19:46:40.000128 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^O^O^O^O^DM-2M-!M-1M-1M-1M-1M-1M-1M-1M-1M-,.M-0^Vn [|krb]
+ 2 21:47:44.000000 IP 10.0.0.1 > 0.234.154.214: ip-proto-17
+ 3 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.179.24191: v4 be KDC_REQUEST: ^O^O^O^O^O^DM-2 .*^C@>M-z}M-uM-tM-+M-_M-{S^PM-=OM-^Y [|krb]
+ 4 00:00:00.8454143 58:5e:0a:02:f4:0a > 02:8e:00:50:6a:e1, ethertype Unknown (0xb104), length 262144:
+ 0x0000: 020f 0f0f 0f0f 0f0f 0f0f 04b2 a1b1 b1b1 ................
+ 0x0010: b1b1 b1b1 b158 5e0a 02f4 0ab1 0402 0f0f .....X^.........
+ 0x0020: ff80 0f0f 0f0f 0f00 80a1 00b2 b2b2 b20d ................
+ 0x0030: 0d3a 3400 0001 00 .:4....
+ 5 20:26:40.2097152 IP 6.3.218.255.6379 > 0.1.31.99.639: Flags [S.UW], seq 2751463404:2751463426, ack 1006637056, win 45746, urg 25778, length 22: RESP [|resp]
+ 6 20:27:12.000000 IP 6.3.208.255.6379 > 0.1.31.99.639: Flags [S.UW], seq 2751463404:2751463426, ack 1006640128, win 45746, urg 25778, length 22: RESP "M-2M-2M-2M-2M-2M-7dM-2M-2M-2M-2M-2" [|resp]
+ 7 20:27:12.000000 IP 208.21.10.1.654 > 31.99.100.232.80: aodv rrep 34 prefix 4 hops 11
+ dst 237.34.38.84 dseq 32203525 src 232.11.2.0 67108864 ms
+ ext 0 0
+ 8 00:08:32.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^O^O^O^O^DM-WM-WM-WM-WM-WM-WM-W.@ 680min [|krb]
+ 9 00:02:54.000000 IP 10.0.253.1.88 > 0.234.154.214.24073: v4 be KDC_REQUEST: .M-^?M-^?^AM-^@M-^?M-^@M-V@M-WM-WM-sM-WM-WM-WM-WM-W 880min ^VM-^H [|krb]
+ 10 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?.d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 11 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24073: v4 be KDC_REQUEST: .M-^?M-^?^AM-^@M-^?M-^@M-V@M-WM-WM-sM-WM-WM-WM-WM-W 880min ^VM-^H [|krb]
+ 12 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?.d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 13 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-W^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 14 00:00:00.000000 IP 10.0.242.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O'^O^O@@.@^Qjp^J@ 1070min .X^^J^B [|krb]
+ 15 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^U.@^O^D^O^O^O^O^O^O^O^O^O^O^O^O [|krb]
+ 16 00:00:00.000000 IP 10.0.222.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^DM-2 .M-g^C@>M-y}M-uM-tM-+M-` 680min [|krb]
+ 17 00:00:00.000000 01:01:ed:83:e3:ff > 02:8e:00:50:6d:e1, ethertype Unknown (0x0700), length 262144:
+ 0x0000: 4508 8834 d940 4000 4011 4a70 0a00 0001 E..4.@@.@.Jp....
+ 0x0010: 00ea 9ad6 0058 5e0a 02f4 0ab1 0402 0f0f .....X^.........
+ 0x0020: 0f0f 0f0f 0f0f 0f04 b2a1 b1b1 b1b1 b1b1 ................
+ 0x0030: b1b1 b100 b016 6e ......n
+ 18 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^U.@ ^D^R^O^O^O^O^O^O^O^O^O^O^O [|krb]
+ 19 00:00:00.000000 IP 10.0.255.127.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^DM-2 .M-g^C@>M-z}M-uM-tM-^\M-`^VM-^?^?M-=OM-^Y [|krb]
+ 20 00:00:00.8454143 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O.^B^O^O^O^O^DM-2M-!M-1M-1M-1M-1M-1M-1M-1M-1M-1M-^@M-0^VM-^H [|krb]
+ 21 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?M-^@^D^O^O^O^O^O^P.M-^?M-^?^O^O^O@^VM-^H [|krb]
+ 22 00:34:08.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-#M-^?M-^?d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 23 09:18:56.000000 IP 0.0.1.0 > 234.154.214.0: ip-proto-106
+ 24 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?M-^@^D^O^O^O^O^O^P.M-^?M-^?^O^O^O@^VM-^H [|krb]
+ 25 00:34:08.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-^@M-^?M-^?M-^?^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 26 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^O^O^O^O^DM-WM-WM-WM-WM-WM-WM-W.@ 680min [|krb]
+ 27 00:02:54.000000 IP 10.0.253.1.8280 > 0.234.154.214.24073: UDP, bad length 60652 > 32792
+ 28 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?.d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 29 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-W^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 30 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O'^O^O@@.@^Qjp^J@ 1070min .X^^J^B [|krb]
+ 31 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 le APPL_REQUEST_MUTUAL: (unknown)
+ 32 00:00:00.000000 01:00:01:00:00:00 > 02:8e:00:50:6a:e1, ethertype Unknown (0x08e8), length 262144:
+ 0x0000: 4408 8034 d92b 4000 4011 3b70 0a00 0001 D..4.+@.@.;p....
+ 0x0010: 00ea 9ad6 0058 5e0a 02f4 0ab1 0402 ffff .....X^.........
+ 0x0020: ff7f 80ff 80d6 00c3 0880 34d9 4040 0040 ..........4.@@.@
+ 0x0030: 114a 700a 0016 88 .Jp....
+ 33 00:02:54.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: .M-oM-^?M-^?@M-^?M-^@M-V M-WM-WM-WM-WM-WM-WM-WM-W 0min ^VM-^H [|krb]
+ 34 [Error converting time] IP 10.0.0.1.88 > 0.234.154.210.24073: v4 be KDC_REQUEST: .M-^?M-^?^AM-^@M-^?M-^@M-V@M-WM-WM-sM-WM-WM-WM-WM-W 880min ^VM-^H [|krb]
+ 35 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?.d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 36 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-WM-^?M-!^B^O^O^P@M-^?M-^?^O^O^O [|krb]
+ 37 00:34:08.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-#M-^?M-^?d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 38 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-W^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 39 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074:
+ 40 00:34:08.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-^@M-^?M-^?M-^?^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 41 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074:
+ 42 00:02:54.000000 IP 10.0.253.1.88 > 0.234.154.214.24073: v4 be KDC_REQUEST: .M-^?M-^?^AM-^@M-^?M-^@M-V@M-WM-WM-sM-WM-WM-WM-WM-W 880min ^VM-^H [|krb]
+ 43 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?.d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 44 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-W^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 45 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O'^O^O@@.@^Qjp^J@ 1070min .X^^J^B [|krb]
+ 46 00:00:00.000000 IP 64.0.0.1.88 > 0.234.154.214.24074: v4 le APPL_REQUEST_MUTUAL: (unknown)
+ 47 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: M-^?M-^?M-^?^?M-^@M-^?M-^@M-V.M-C^HM-^@4M-Y@@@@^QJp^J [|krb]
+ 48 00:02:54.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: .M-oM-^?M-^?@M-^?M-^@M-V 75min ^O^O^O^O^O^O^O^O.^VM-^H [|krb]
+ 49 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-W^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 50 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?M-^@^D^O^O^O^O^O^P.M-^?M-^?^O^O^O@^VM-^H [|krb]
+ 51 00:34:08.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-^@M-^?M-^?M-^?^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 52 18:12:16.000000 IP 208.21.42.58.6697 > 110.228.104.254.30952: babel 2 (2056) (invalid)
+ 53 00:00:07.008320 IP 208.21.2.184.1512 > 10.1.1.99.496: auto-rp candidate-advert Hold 16m16s RP 1.235.99.5 PIMv? [rsvd=0xe8] 4.0.0.31/0 bidir,255.0.0.0/33[rsvd=0x14] [|cisco_autorp]
+ 54 [Error converting time] IP 41.0.0.1.88 > 32.235.154.214.24074: v4 be KDC_REQUEST: M-h^AM-p.PQM-a^QM-x^CM-P^U^BM-8^J^AM-kc^EM-h^K^B@^D [|krb]
+ 55 00:00:00.000000 IP 208.21.2.184.1512 > 10.1.1.99.496: auto-rp candidate-advert Hold 16m16s RP 1.235.99.5 PIMv? [rsvd=0xe8] 4.0.100.177/0 bidir,!172.0.176.22/177[rsvd=0xb0] [|cisco_autorp]
+ 56 00:00:00.000000 IP 208.21.2.184.1512 > 10.1.1.99.496: auto-rp candidate-advert Hold 16m16s RP 1.235.99.5 PIMv? [rsvd=0xe8] 4.0.0.31/0 bidir,255.0.3.0/33[rsvd=0x14] [|cisco_autorp]
+ 57 [Error converting time] IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O.^O^O^O^O^O^DM-2M-!M-1@ 885min M-,.M-0^Vn [|krb]
+ 58 00:00:00.000000 IP 208.20.225.184.1512 > 10.1.1.99.496: auto-rp candidate-advert Hold 16m16s RP 1.235.99.5 PIMv? [rsvd=0xe8] 4.0.0.0/0 bidir,0.0.0.0/0 [|cisco_autorp]
+ 59 00:08:32.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^O^O^O^O^DM-WM-WM-WM-WM-WM-WM-W.@ 680min [|krb]
+ 60 00:02:54.000000 IP 10.0.253.1.88 > 0.234.154.214.24073: v4 be KDC_REQUEST: .M-^?M-^?^AM-^@M-^?M-^@M-V@M-WM-WM-sM-WM-WM-WM-WM-W 880min ^VM-^H [|krb]
+ 61 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?.d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 62 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24073: v4 be KDC_REQUEST: .M-^?M-^?^AM-^@M-^?M-^@M-V@M-WM-WM-sM-WM-WM-WM-WM-W 880min ^VM-^H [|krb]
+ 63 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?.d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 64 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-W^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 65 00:00:00.000000 IP 10.0.242.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O'^O^O@@.@^Qjp^J@ 1070min .X^^J^B [|krb]
+ 66 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^U.@^O^D^O^O^O^O^O^O^O^O^O^O^O^O [|krb]
+ 67 00:00:00.000000 IP 10.0.222.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^DM-2 .M-g^C@>M-y}M-uM-tM-+M-` 680min [|krb]
+ 68 00:00:00.000000 01:01:ed:83:e3:ff > 02:8e:00:50:6d:e1, ethertype Unknown (0x0700), length 262144:
+ 0x0000: 4508 8834 d940 4000 4011 4a70 0a00 0001 E..4.@@.@.Jp....
+ 0x0010: 00ea 9ad6 0058 5e0a 02f4 0ab1 0402 0f0f .....X^.........
+ 0x0020: 0f0f 0f0f 0f0f 0f04 b2a1 b1b1 b1b1 b1b1 ................
+ 0x0030: b1b1 b100 b016 6e ......n
+ 69 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^U.@ ^D^R^O^O^O^O^O^O^O^O^O^O^O [|krb]
+ 70 00:00:00.000000 IP 10.0.255.127.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^DM-2 .M-g^C@>M-z}M-uM-tM-^\M-`^VM-^?^?M-=OM-^Y [|krb]
+ 71 00:00:00.8454143 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O.^B^O^O^O^O^DM-2M-!M-1M-1M-1M-1M-1M-1M-1M-1M-1M-^@M-0^VM-^H [|krb]
+ 72 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?M-^@^D^O^O^O^O^O^P.M-^?M-^?^O^O^O@^VM-^H [|krb]
+ 73 00:34:08.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-#M-^?M-^?d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 74 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-W^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 75 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?M-^@^D^O^O^O^O^O^P.M-^?M-^?^O^O^O@^VM-^H [|krb]
+ 76 00:34:08.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-^@M-^?M-^?M-^?^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 77 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O^O^O^O^O^DM-WM-WM-WM-WM-WM-WM-W.@ 680min [|krb]
+ 78 00:02:54.000000 IP 10.0.253.1.88 > 0.234.154.214.24073: v4 be KDC_REQUEST: .M-^?M-^?^AM-^@M-^?M-^@M-V@M-WM-WM-sM-WM-WM-WM-WM-W 880min ^VM-^H [|krb]
+ 79 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?.d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 80 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-W^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 81 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O'^O^O@@.@^Qjp^J@ 1070min .X^^J^B [|krb]
+ 82 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 le APPL_REQUEST_MUTUAL: (unknown)
+ 83 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: M-^?M-^?M-^?^?M-^@M-^?M-^@M-V.M-C^HM-^@4M-Y@@@@^QJp^J [|krb]
+ 84 00:02:54.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: .M-oM-^?M-^?@M-^?M-^@M-V M-WM-WM-WM-WM-WM-WM-WM-W 0min ^VM-^H [|krb]
+ 85 [Error converting time] IP 10.0.0.1.88 > 0.234.154.210.24073: v4 be KDC_REQUEST: .M-^?M-^?^AM-^@M-^?M-^@M-V@M-WM-WM-sM-WM-WM-WM-WM-W 880min ^VM-^H [|krb]
+ 86 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?.d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 87 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-WM-^?M-!^B^O^O^P@M-^?M-^?^O^O^O [|krb]
+ 88 00:34:08.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-#M-^?M-^?d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 89 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-W^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 90 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074:
+ 91 00:34:08.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-^@M-^?M-^?M-^?^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 92 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074:
+ 93 00:02:54.000000 IP 10.0.253.1.88 > 0.234.154.214.24073: v4 be KDC_REQUEST: .M-^?M-^?^AM-^@M-^?M-^@M-V@M-WM-WM-sM-WM-WM-WM-WM-W 880min ^VM-^H [|krb]
+ 94 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?.d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 95 09:18:56.000002 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-W^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 96 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O'^O^O@@.@^Qjp^J@ 1070min .X^^J^B [|krb]
+ 97 00:00:00.000000 IP 64.0.0.1.88 > 0.234.154.214.24074: v4 le APPL_REQUEST_MUTUAL: (unknown)
+ 98 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: M-^?M-^?M-^?^?M-^@M-^?M-^@M-V.M-C^HM-^@4M-Y@@@@^QJp^J [|krb]
+ 99 00:02:54.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: .M-oM-^?M-^?@M-^?M-^@M-V 75min ^O^O^O^O^O^O^O^O.^VM-^H [|krb]
+ 100 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-W^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 101 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?M-^@^D^O^O^O^O^O^P.M-^?M-^?^O^O^O@^VM-^H [|krb]
+ 102 00:34:08.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-^@M-^?M-^?M-^?^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 103 00:00:00.000000 IP 10.0.253.1.88 > 0.234.154.214.24073: v4 be KDC_REQUEST: .M-^?M-^?^AM-^@M-^?M-^@M-V@M-WM-WM-sM-WM-WM-WM-WM-W 880min ^VM-^H [|krb]
+ 104 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O^O7M-^@M-^?.d^O^O^O^O^O^O^O^O^O^O^O^O@^VM-^H [|krb]
+ 105 09:18:56.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O^O^O.^DM-2M-!^BM-W^CM-!^B@^D 0min ^P.^VM-^H [|krb]
+ 106 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 be KDC_REQUEST: ^O^O'^O^O@@.@^Qjp^J@ 1070min .X^^J^B [|krb]
+ 107 00:00:00.000000 IP 10.0.0.1.88 > 0.234.154.214.24074: v4 le APPL_REQUEST_MUTUAL: (unknown)
diff --git a/tests/babel_update_oobr.pcap b/tests/babel_update_oobr.pcap
new file mode 100644
index 0000000..0553cc3
--- /dev/null
+++ b/tests/babel_update_oobr.pcap
Binary files differ
diff --git a/tests/bad-ipv4-version-pgm-heapoverflow.out b/tests/bad-ipv4-version-pgm-heapoverflow.out
new file mode 100644
index 0000000..1380374
--- /dev/null
+++ b/tests/bad-ipv4-version-pgm-heapoverflow.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 IP6, wrong link-layer encapsulation (invalid)
diff --git a/tests/bad-ipv4-version-pgm-heapoverflow.pcap b/tests/bad-ipv4-version-pgm-heapoverflow.pcap
new file mode 100644
index 0000000..116e401
--- /dev/null
+++ b/tests/bad-ipv4-version-pgm-heapoverflow.pcap
Binary files differ
diff --git a/tests/bcm-li-v.out b/tests/bcm-li-v.out
new file mode 100644
index 0000000..bbfb156
--- /dev/null
+++ b/tests/bcm-li-v.out
@@ -0,0 +1,352 @@
+ 1 07:58:19.865946 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 70)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ unknown payload
+ 2 07:58:21.884122 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 98)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 57427, offset 0, flags [DF], proto UDP (17), length 66)
+ 9.182.64.0.36264 > 217.89.31.49.53: 44388+ A? iperf3.xlab.t-iot.de. (38)
+ 3 07:58:21.884291 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 98)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 57428, offset 0, flags [DF], proto UDP (17), length 66)
+ 9.182.64.0.36264 > 217.89.31.49.53: 15746+ AAAA? iperf3.xlab.t-iot.de. (38)
+ 4 07:58:21.886344 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 205)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 22283, offset 0, flags [none], proto UDP (17), length 143)
+ 217.89.31.49.53 > 9.182.64.0.36264: 44388* 1/1/2 iperf3.xlab.t-iot.de. A 217.89.31.229 (115)
+ 5 07:58:21.886389 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 217)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 22284, offset 0, flags [none], proto UDP (17), length 155)
+ 217.89.31.49.53 > 9.182.64.0.36264: 15746* 1/1/2 iperf3.xlab.t-iot.de. AAAA 2003:4:f007:a01a:217:89:31:229 (127)
+ 6 07:58:21.886872 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 92)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51720, offset 0, flags [DF], proto TCP (6), length 60)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [S], cksum 0x534b (correct), seq 2040003902, win 65340, options [mss 1452,sackOK,TS val 3167220488 ecr 0,nop,wscale 7], length 0
+ 7 07:58:21.889698 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 122)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [S.], cksum 0x2850 (correct), seq 1682249933, ack 2040003903, win 28960, options [mss 1460,sackOK,TS val 1713100238 ecr 3167220488,nop,wscale 9], length 0
+ 8 07:58:21.889745 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 84)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51721, offset 0, flags [DF], proto TCP (6), length 52)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [.], cksum 0xc63d (correct), ack 1, win 511, options [nop,nop,TS val 3167220490 ecr 1713100238], length 0
+ 9 07:58:21.889750 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 121)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51722, offset 0, flags [DF], proto TCP (6), length 89)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [P.], cksum 0xf6de (correct), seq 1:38, ack 1, win 511, options [nop,nop,TS val 3167220490 ecr 1713100238], length 37
+ 10 07:58:21.891444 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 114)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58009, offset 0, flags [DF], proto TCP (6), length 52)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [.], cksum 0xc7db (correct), ack 38, win 57, options [nop,nop,TS val 1713100241 ecr 3167220490], length 0
+ 11 07:58:21.891451 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 115)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58010, offset 0, flags [DF], proto TCP (6), length 53)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [P.], cksum 0xbed2 (correct), seq 1:2, ack 38, win 57, options [nop,nop,TS val 1713100241 ecr 3167220490], length 1
+ 12 07:58:21.891455 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 84)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51723, offset 0, flags [DF], proto TCP (6), length 52)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [.], cksum 0xc612 (correct), ack 2, win 511, options [nop,nop,TS val 3167220492 ecr 1713100241], length 0
+ 13 07:58:21.891458 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 88)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51724, offset 0, flags [DF], proto TCP (6), length 56)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [P.], cksum 0xc57f (correct), seq 38:42, ack 2, win 511, options [nop,nop,TS val 3167220493 ecr 1713100241], length 4
+ 14 07:58:21.934258 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 114)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58011, offset 0, flags [DF], proto TCP (6), length 52)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [.], cksum 0xc7a8 (correct), ack 42, win 57, options [nop,nop,TS val 1713100284 ecr 3167220493], length 0
+ 15 07:58:21.934313 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 218)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51725, offset 0, flags [DF], proto TCP (6), length 186)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [P.], cksum 0x8f88 (correct), seq 42:176, ack 2, win 511, options [nop,nop,TS val 3167220535 ecr 1713100284], length 134
+ 16 07:58:21.935738 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 114)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58012, offset 0, flags [DF], proto TCP (6), length 52)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [.], cksum 0xc6f5 (correct), ack 176, win 59, options [nop,nop,TS val 1713100285 ecr 3167220535], length 0
+ 17 07:58:21.935753 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 115)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58013, offset 0, flags [DF], proto TCP (6), length 53)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [P.], cksum 0xbcec (correct), seq 2:3, ack 176, win 59, options [nop,nop,TS val 1713100285 ecr 3167220535], length 1
+ 18 07:58:21.935941 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 84)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51726, offset 0, flags [DF], proto TCP (6), length 52)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [.], cksum 0xc52e (correct), ack 3, win 511, options [nop,nop,TS val 3167220537 ecr 1713100285], length 0
+ 19 07:58:21.935949 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 98)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 57438, offset 0, flags [DF], proto UDP (17), length 66)
+ 9.182.64.0.38748 > 217.89.31.49.53: 55721+ A? iperf3.xlab.t-iot.de. (38)
+ 20 07:58:21.935953 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 98)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 57439, offset 0, flags [DF], proto UDP (17), length 66)
+ 9.182.64.0.38748 > 217.89.31.49.53: 17081+ AAAA? iperf3.xlab.t-iot.de. (38)
+ 21 07:58:21.938124 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 205)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 22288, offset 0, flags [none], proto UDP (17), length 143)
+ 217.89.31.49.53 > 9.182.64.0.38748: 55721* 1/1/2 iperf3.xlab.t-iot.de. A 217.89.31.229 (115)
+ 22 07:58:21.938140 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 217)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 22289, offset 0, flags [none], proto UDP (17), length 155)
+ 217.89.31.49.53 > 9.182.64.0.38748: 17081* 1/1/2 iperf3.xlab.t-iot.de. AAAA 2003:4:f007:a01a:217:89:31:229 (127)
+ 23 07:58:21.938469 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 70)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 46854, offset 0, flags [DF], proto UDP (17), length 32)
+ 9.182.64.0.45432 > 217.89.31.229.50003: UDP, length 4
+ 24 07:58:21.940595 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 108)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 49957, offset 0, flags [DF], proto UDP (17), length 32)
+ 217.89.31.229.50003 > 9.182.64.0.45432: UDP, length 4
+ 25 07:58:21.940607 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 115)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58014, offset 0, flags [DF], proto TCP (6), length 53)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [P.], cksum 0xc5e4 (correct), seq 3:4, ack 176, win 59, options [nop,nop,TS val 1713100290 ecr 3167220537], length 1
+ 26 07:58:21.940744 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 84)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51727, offset 0, flags [DF], proto TCP (6), length 52)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [.], cksum 0xc523 (correct), ack 4, win 511, options [nop,nop,TS val 3167220542 ecr 1713100290], length 0
+ 27 07:58:21.942383 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 115)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58015, offset 0, flags [DF], proto TCP (6), length 53)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [P.], cksum 0xc4dc (correct), seq 4:5, ack 176, win 59, options [nop,nop,TS val 1713100292 ecr 3167220542], length 1
+ 28 07:58:21.942555 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 84)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51728, offset 0, flags [DF], proto TCP (6), length 52)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [.], cksum 0xc51e (correct), ack 5, win 511, options [nop,nop,TS val 3167220544 ecr 1713100292], length 0
+ 29 07:58:24.994569 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 70)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ unknown payload
+ 30 07:58:31.941428 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 85)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51729, offset 0, flags [DF], proto TCP (6), length 53)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [P.], cksum 0x9a07 (correct), seq 176:177, ack 5, win 511, options [nop,nop,TS val 3167230542 ecr 1713100292], length 1
+ 31 07:58:31.943351 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 115)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58016, offset 0, flags [DF], proto TCP (6), length 53)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [P.], cksum 0x6bba (correct), seq 5:6, ack 177, win 59, options [nop,nop,TS val 1713110292 ecr 3167230542], length 1
+ 32 07:58:31.943375 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 84)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51730, offset 0, flags [DF], proto TCP (6), length 52)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [.], cksum 0x76fc (correct), ack 6, win 511, options [nop,nop,TS val 3167230544 ecr 1713110292], length 0
+ 33 07:58:31.943457 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 88)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51731, offset 0, flags [DF], proto TCP (6), length 56)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [P.], cksum 0x75d1 (correct), seq 177:181, ack 6, win 511, options [nop,nop,TS val 3167230544 ecr 1713110292], length 4
+ 34 07:58:31.986337 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 114)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58017, offset 0, flags [DF], proto TCP (6), length 52)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [.], cksum 0x7890 (correct), ack 181, win 59, options [nop,nop,TS val 1713110336 ecr 3167230544], length 0
+ 35 07:58:31.986588 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 371)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51732, offset 0, flags [DF], proto TCP (6), length 339)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [P.], cksum 0x2327 (correct), seq 181:468, ack 6, win 511, options [nop,nop,TS val 3167230588 ecr 1713110336], length 287
+ 36 07:58:31.987833 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 114)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58018, offset 0, flags [DF], proto TCP (6), length 52)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [.], cksum 0x7741 (correct), ack 468, win 61, options [nop,nop,TS val 1713110338 ecr 3167230588], length 0
+ 37 07:58:31.988009 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 118)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58019, offset 0, flags [DF], proto TCP (6), length 56)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [P.], cksum 0x7617 (correct), seq 6:10, ack 468, win 61, options [nop,nop,TS val 1713110338 ecr 3167230588], length 4
+ 38 07:58:31.988224 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 84)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51733, offset 0, flags [DF], proto TCP (6), length 52)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [.], cksum 0x757a (correct), ack 10, win 511, options [nop,nop,TS val 3167230589 ecr 1713110338], length 0
+ 39 07:58:31.989654 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 401)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58020, offset 0, flags [DF], proto TCP (6), length 339)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [P.], cksum 0x7388 (correct), seq 10:297, ack 468, win 61, options [nop,nop,TS val 1713110339 ecr 3167230589], length 287
+ 40 07:58:31.989815 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 84)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51734, offset 0, flags [DF], proto TCP (6), length 52)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [.], cksum 0x745a (correct), ack 297, win 509, options [nop,nop,TS val 3167230591 ecr 1713110339], length 0
+ 41 07:58:31.990893 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 85)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51735, offset 0, flags [DF], proto TCP (6), length 53)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [P.], cksum 0x6451 (correct), seq 468:469, ack 297, win 509, options [nop,nop,TS val 3167230591 ecr 1713110339], length 1
+ 42 07:58:31.990899 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 84)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51736, offset 0, flags [DF], proto TCP (6), length 52)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [F.], cksum 0x7458 (correct), seq 469, ack 297, win 509, options [nop,nop,TS val 3167230591 ecr 1713110339], length 0
+ 43 07:58:31.992738 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 114)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 58021, offset 0, flags [DF], proto TCP (6), length 52)
+ 217.89.31.229.50003 > 9.182.64.0.51344: Flags [F.], cksum 0x7614 (correct), seq 297, ack 470, win 61, options [nop,nop,TS val 1713110342 ecr 3167230591], length 0
+ 44 07:58:31.992745 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 84)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 51737, offset 0, flags [DF], proto TCP (6), length 52)
+ 9.182.64.0.51344 > 217.89.31.229.50003: Flags [.], cksum 0x7451 (correct), ack 298, win 509, options [nop,nop,TS val 3167230594 ecr 1713110342], length 0
+ 45 07:58:39.024283 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 98)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 58211, offset 0, flags [DF], proto UDP (17), length 66)
+ 9.182.64.0.48091 > 217.89.31.49.53: 45741+ A? iperf3.xlab.t-iot.de. (38)
+ 46 07:58:39.024389 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 98)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 58212, offset 0, flags [DF], proto UDP (17), length 66)
+ 9.182.64.0.48091 > 217.89.31.49.53: 27076+ AAAA? iperf3.xlab.t-iot.de. (38)
+ 47 07:58:39.026369 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 205)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 25040, offset 0, flags [none], proto UDP (17), length 143)
+ 217.89.31.49.53 > 9.182.64.0.48091: 45741* 1/1/2 iperf3.xlab.t-iot.de. A 217.89.31.229 (115)
+ 48 07:58:39.026394 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 217)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 25041, offset 0, flags [none], proto UDP (17), length 155)
+ 217.89.31.49.53 > 9.182.64.0.48091: 27076* 1/1/2 iperf3.xlab.t-iot.de. AAAA 2003:4:f007:a01a:217:89:31:229 (127)
+ 49 07:58:39.027060 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 116)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 32748, offset 0, flags [DF], proto ICMP (1), length 84)
+ 9.182.64.0 > 217.89.31.229: ICMP echo request, id 10671, seq 1, length 64
+ 50 07:58:39.028124 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 146)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 20005, offset 0, flags [none], proto ICMP (1), length 84)
+ 217.89.31.229 > 9.182.64.0: ICMP echo reply, id 10671, seq 1, length 64
+ 51 07:58:39.028667 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 104)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 58213, offset 0, flags [DF], proto UDP (17), length 72)
+ 9.182.64.0.33490 > 217.89.31.49.53: 58760+ PTR? 229.31.89.217.in-addr.arpa. (44)
+ 52 07:58:39.030411 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 229)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 25042, offset 0, flags [none], proto UDP (17), length 167)
+ 217.89.31.49.53 > 9.182.64.0.33490: 58760* 1/1/2 229.31.89.217.in-addr.arpa. PTR iperf3.xlab.t-iot.de. (139)
+ 53 07:58:40.029018 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 116)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 32947, offset 0, flags [DF], proto ICMP (1), length 84)
+ 9.182.64.0 > 217.89.31.229: ICMP echo request, id 10671, seq 2, length 64
+ 54 07:58:40.030624 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 146)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 20253, offset 0, flags [none], proto ICMP (1), length 84)
+ 217.89.31.229 > 9.182.64.0: ICMP echo reply, id 10671, seq 2, length 64
+ 55 07:58:41.029333 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 116)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 33164, offset 0, flags [DF], proto ICMP (1), length 84)
+ 9.182.64.0 > 217.89.31.229: ICMP echo request, id 10671, seq 3, length 64
+ 56 07:58:41.031600 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 146)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 20265, offset 0, flags [none], proto ICMP (1), length 84)
+ 217.89.31.229 > 9.182.64.0: ICMP echo reply, id 10671, seq 3, length 64
+ 57 07:58:42.031874 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 116)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 33200, offset 0, flags [DF], proto ICMP (1), length 84)
+ 9.182.64.0 > 217.89.31.229: ICMP echo request, id 10671, seq 4, length 64
+ 58 07:58:42.033340 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 146)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 20350, offset 0, flags [none], proto ICMP (1), length 84)
+ 217.89.31.229 > 9.182.64.0: ICMP echo reply, id 10671, seq 4, length 64
+ 59 07:58:43.033048 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 116)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 33423, offset 0, flags [DF], proto ICMP (1), length 84)
+ 9.182.64.0 > 217.89.31.229: ICMP echo request, id 10671, seq 5, length 64
+ 60 07:58:43.034662 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 146)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 20439, offset 0, flags [none], proto ICMP (1), length 84)
+ 217.89.31.229 > 9.182.64.0: ICMP echo reply, id 10671, seq 5, length 64
+ 61 07:58:44.033555 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 116)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 33671, offset 0, flags [DF], proto ICMP (1), length 84)
+ 9.182.64.0 > 217.89.31.229: ICMP echo request, id 10671, seq 6, length 64
+ 62 07:58:44.034828 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 146)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 20496, offset 0, flags [none], proto ICMP (1), length 84)
+ 217.89.31.229 > 9.182.64.0: ICMP echo reply, id 10671, seq 6, length 64
+ 63 07:58:45.035245 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 116)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 33820, offset 0, flags [DF], proto ICMP (1), length 84)
+ 9.182.64.0 > 217.89.31.229: ICMP echo request, id 10671, seq 7, length 64
+ 64 07:58:45.037339 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 146)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 20743, offset 0, flags [none], proto ICMP (1), length 84)
+ 217.89.31.229 > 9.182.64.0: ICMP echo reply, id 10671, seq 7, length 64
+ 65 07:58:46.037016 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 116)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 33862, offset 0, flags [DF], proto ICMP (1), length 84)
+ 9.182.64.0 > 217.89.31.229: ICMP echo request, id 10671, seq 8, length 64
+ 66 07:58:46.038606 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 146)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 20757, offset 0, flags [none], proto ICMP (1), length 84)
+ 217.89.31.229 > 9.182.64.0: ICMP echo reply, id 10671, seq 8, length 64
+ 67 07:58:47.038464 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 116)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 33934, offset 0, flags [DF], proto ICMP (1), length 84)
+ 9.182.64.0 > 217.89.31.229: ICMP echo request, id 10671, seq 9, length 64
+ 68 07:58:47.040130 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 146)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 20817, offset 0, flags [none], proto ICMP (1), length 84)
+ 217.89.31.229 > 9.182.64.0: ICMP echo reply, id 10671, seq 9, length 64
+ 69 07:58:48.039521 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 116)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ IP (tos 0x0, ttl 64, id 34121, offset 0, flags [DF], proto ICMP (1), length 84)
+ 9.182.64.0 > 217.89.31.229: ICMP echo request, id 10671, seq 10, length 64
+ 70 07:58:48.041049 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 146)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ PPPoE [ses 0xc3] IP (tos 0x0, ttl 60, id 20978, offset 0, flags [none], proto ICMP (1), length 84)
+ 217.89.31.229 > 9.182.64.0: ICMP echo reply, id 10671, seq 10, length 64
+ 71 07:58:48.862660 IP (tos 0x2,ECT(0), ttl 59, id 0, offset 0, flags [none], proto UDP (17), length 70)
+ 217.89.30.176.49152 > 217.89.29.22.49153:
+ BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ unknown payload
diff --git a/tests/bcm-li.out b/tests/bcm-li.out
new file mode 100644
index 0000000..8b39d22
--- /dev/null
+++ b/tests/bcm-li.out
@@ -0,0 +1,71 @@
+ 1 07:58:19.865946 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 2 07:58:21.884122 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 3 07:58:21.884291 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 4 07:58:21.886344 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 5 07:58:21.886389 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 6 07:58:21.886872 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 7 07:58:21.889698 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 8 07:58:21.889745 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 9 07:58:21.889750 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 10 07:58:21.891444 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 11 07:58:21.891451 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 12 07:58:21.891455 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 13 07:58:21.891458 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 14 07:58:21.934258 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 15 07:58:21.934313 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 16 07:58:21.935738 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 17 07:58:21.935753 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 18 07:58:21.935941 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 19 07:58:21.935949 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 20 07:58:21.935953 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 21 07:58:21.938124 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 22 07:58:21.938140 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 23 07:58:21.938469 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 24 07:58:21.940595 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 25 07:58:21.940607 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 26 07:58:21.940744 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 27 07:58:21.942383 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 28 07:58:21.942555 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 29 07:58:24.994569 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 30 07:58:31.941428 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 31 07:58:31.943351 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 32 07:58:31.943375 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 33 07:58:31.943457 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 34 07:58:31.986337 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 35 07:58:31.986588 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 36 07:58:31.987833 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 37 07:58:31.988009 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 38 07:58:31.988224 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 39 07:58:31.989654 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 40 07:58:31.989815 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 41 07:58:31.990893 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 42 07:58:31.990899 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 43 07:58:31.992738 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 44 07:58:31.992745 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 45 07:58:39.024283 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 46 07:58:39.024389 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 47 07:58:39.026369 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 48 07:58:39.026394 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 49 07:58:39.027060 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 50 07:58:39.028124 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 51 07:58:39.028667 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 52 07:58:39.030411 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 53 07:58:40.029018 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 54 07:58:40.030624 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 55 07:58:41.029333 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 56 07:58:41.031600 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 57 07:58:42.031874 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 58 07:58:42.033340 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 59 07:58:43.033048 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 60 07:58:43.034662 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 61 07:58:44.033555 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 62 07:58:44.034828 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 63 07:58:45.035245 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 64 07:58:45.037339 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 65 07:58:46.037016 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 66 07:58:46.038606 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 67 07:58:47.038464 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 68 07:58:47.040130 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 69 07:58:48.039521 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
+ 70 07:58:48.041049 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction egress, pkt-type ethernet, pkt-subtype double VLAN tag, li-id 66666
+ 71 07:58:48.862660 IP 217.89.30.176.49152 > 217.89.29.22.49153: BCM-LI-SHIM: direction ingress, pkt-type undecided, pkt-subtype double VLAN tag, li-id 66666
diff --git a/tests/bcm-li.pcap b/tests/bcm-li.pcap
new file mode 100644
index 0000000..ca31a9a
--- /dev/null
+++ b/tests/bcm-li.pcap
Binary files differ
diff --git a/tests/beep-oobr.out b/tests/beep-oobr.out
new file mode 100644
index 0000000..d495ad7
--- /dev/null
+++ b/tests/beep-oobr.out
@@ -0,0 +1,2 @@
+ 1 05:27:12.808464432 unknown ip 3
+ 2 05:27:12.808464432 IP6 3030:3030:3030:3030:3030:3030:3030:3030.10288 > 3030:3030:3030:3030:3030:3030:3030:3030.12336: Flags [.U], seq 808464432:808476740, ack 808464432, win 12336, urg 12336, options [eol], length 12308 [remaining caplen(24) < header length(28)] [|tcp]
diff --git a/tests/beep-oobr.pcap b/tests/beep-oobr.pcap
new file mode 100644
index 0000000..a1db143
--- /dev/null
+++ b/tests/beep-oobr.pcap
Binary files differ
diff --git a/tests/bfd-lag-v.out b/tests/bfd-lag-v.out
new file mode 100644
index 0000000..38246fe
--- /dev/null
+++ b/tests/bfd-lag-v.out
@@ -0,0 +1,40 @@
+ 1 17:19:29.162992 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.0.2.51255 > 10.0.0.1.6784: BFDv1, length: 24
+ Lag, State Down, Flags: [Poll], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (3000 ms Detection time), BFD Length: 24
+ My Discriminator: 0x0de60837, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 2 17:19:30.154937 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.0.2.51255 > 10.0.0.1.6784: BFDv1, length: 24
+ Lag, State Down, Flags: [Poll], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (3000 ms Detection time), BFD Length: 24
+ My Discriminator: 0x0de60837, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 3 17:19:31.146839 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.0.2.51255 > 10.0.0.1.6784: BFDv1, length: 24
+ Lag, State Down, Flags: [Poll], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (3000 ms Detection time), BFD Length: 24
+ My Discriminator: 0x0de60837, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 4 17:19:32.074819 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.0.2.51255 > 10.0.0.1.6784: BFDv1, length: 24
+ Lag, State Down, Flags: [Poll], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (3000 ms Detection time), BFD Length: 24
+ My Discriminator: 0x0de60837, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 5 17:19:32.842739 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.0.2.51255 > 10.0.0.1.6784: BFDv1, length: 24
+ Lag, State Down, Flags: [Poll], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (3000 ms Detection time), BFD Length: 24
+ My Discriminator: 0x0de60837, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
diff --git a/tests/bfd-lag.out b/tests/bfd-lag.out
new file mode 100644
index 0000000..a6e2fb0
--- /dev/null
+++ b/tests/bfd-lag.out
@@ -0,0 +1,5 @@
+ 1 17:19:29.162992 IP 10.0.0.2.51255 > 10.0.0.1.6784: BFDv1, Lag, State Down, Flags: [Poll], length: 24
+ 2 17:19:30.154937 IP 10.0.0.2.51255 > 10.0.0.1.6784: BFDv1, Lag, State Down, Flags: [Poll], length: 24
+ 3 17:19:31.146839 IP 10.0.0.2.51255 > 10.0.0.1.6784: BFDv1, Lag, State Down, Flags: [Poll], length: 24
+ 4 17:19:32.074819 IP 10.0.0.2.51255 > 10.0.0.1.6784: BFDv1, Lag, State Down, Flags: [Poll], length: 24
+ 5 17:19:32.842739 IP 10.0.0.2.51255 > 10.0.0.1.6784: BFDv1, Lag, State Down, Flags: [Poll], length: 24
diff --git a/tests/bfd-lag.pcap b/tests/bfd-lag.pcap
new file mode 100644
index 0000000..4d5cd30
--- /dev/null
+++ b/tests/bfd-lag.pcap
Binary files differ
diff --git a/tests/bfd-multihop-v.out b/tests/bfd-multihop-v.out
new file mode 100644
index 0000000..957b603
--- /dev/null
+++ b/tests/bfd-multihop-v.out
@@ -0,0 +1,320 @@
+ 1 15:32:49.715242 IP (tos 0xc0, ttl 255, id 53796, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 2 15:32:49.725449 IP (tos 0xc0, ttl 255, id 24067, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (1200 ms Detection time), BFD Length: 24
+ My Discriminator: 0x89860b19, Your Discriminator: 0x457f7451
+ Desired min Tx Interval: 400 ms
+ Required min Rx Interval: 400 ms
+ Required min Echo Interval: 400 ms
+ 3 15:32:49.771212 IP (tos 0xc0, ttl 255, id 42520, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x457f7451, Your Discriminator: 0x89860b19
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 4 15:32:49.963242 IP (tos 0xc0, ttl 255, id 53821, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 5 15:32:50.077458 IP (tos 0xc0, ttl 255, id 24116, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (1200 ms Detection time), BFD Length: 24
+ My Discriminator: 0x89860b19, Your Discriminator: 0x457f7451
+ Desired min Tx Interval: 400 ms
+ Required min Rx Interval: 400 ms
+ Required min Echo Interval: 400 ms
+ 6 15:32:50.123245 IP (tos 0xc0, ttl 255, id 42545, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x457f7451, Your Discriminator: 0x89860b19
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 7 15:32:50.251236 IP (tos 0xc0, ttl 255, id 53849, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 8 15:32:50.429453 IP (tos 0xc0, ttl 255, id 24181, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (1200 ms Detection time), BFD Length: 24
+ My Discriminator: 0x89860b19, Your Discriminator: 0x457f7451
+ Desired min Tx Interval: 400 ms
+ Required min Rx Interval: 400 ms
+ Required min Echo Interval: 400 ms
+ 9 15:32:50.443240 IP (tos 0xc0, ttl 255, id 42625, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x457f7451, Your Discriminator: 0x89860b19
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 10 15:32:50.495231 IP (tos 0xc0, ttl 255, id 53880, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 11 15:32:50.763252 IP (tos 0xc0, ttl 255, id 53916, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 12 15:32:50.781440 IP (tos 0xc0, ttl 255, id 24228, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (1200 ms Detection time), BFD Length: 24
+ My Discriminator: 0x89860b19, Your Discriminator: 0x457f7451
+ Desired min Tx Interval: 400 ms
+ Required min Rx Interval: 400 ms
+ Required min Echo Interval: 400 ms
+ 13 15:32:50.795209 IP (tos 0xc0, ttl 255, id 42645, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x457f7451, Your Discriminator: 0x89860b19
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 14 15:32:51.055254 IP (tos 0xc0, ttl 255, id 53938, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 15 15:32:51.169437 IP (tos 0xc0, ttl 255, id 24241, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (1200 ms Detection time), BFD Length: 24
+ My Discriminator: 0x89860b19, Your Discriminator: 0x457f7451
+ Desired min Tx Interval: 400 ms
+ Required min Rx Interval: 400 ms
+ Required min Echo Interval: 400 ms
+ 16 15:32:51.179235 IP (tos 0xc0, ttl 255, id 42685, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x457f7451, Your Discriminator: 0x89860b19
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 17 15:32:51.263249 IP (tos 0xc0, ttl 255, id 53987, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 18 15:32:51.517455 IP (tos 0xc0, ttl 255, id 24294, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (1200 ms Detection time), BFD Length: 24
+ My Discriminator: 0x89860b19, Your Discriminator: 0x457f7451
+ Desired min Tx Interval: 400 ms
+ Required min Rx Interval: 400 ms
+ Required min Echo Interval: 400 ms
+ 19 15:32:51.531253 IP (tos 0xc0, ttl 255, id 42759, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x457f7451, Your Discriminator: 0x89860b19
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 20 15:32:51.563242 IP (tos 0xc0, ttl 255, id 54018, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 21 15:32:51.815238 IP (tos 0xc0, ttl 255, id 54063, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 22 15:32:51.851228 IP (tos 0xc0, ttl 255, id 42801, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x457f7451, Your Discriminator: 0x89860b19
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 23 15:32:51.901437 IP (tos 0xc0, ttl 255, id 24357, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (1200 ms Detection time), BFD Length: 24
+ My Discriminator: 0x89860b19, Your Discriminator: 0x457f7451
+ Desired min Tx Interval: 400 ms
+ Required min Rx Interval: 400 ms
+ Required min Echo Interval: 400 ms
+ 24 15:32:52.055249 IP (tos 0xc0, ttl 255, id 54069, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 25 15:32:52.171267 IP (tos 0xc0, ttl 255, id 42809, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x457f7451, Your Discriminator: 0x89860b19
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 26 15:32:52.221449 IP (tos 0xc0, ttl 255, id 24379, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (1200 ms Detection time), BFD Length: 24
+ My Discriminator: 0x89860b19, Your Discriminator: 0x457f7451
+ Desired min Tx Interval: 400 ms
+ Required min Rx Interval: 400 ms
+ Required min Echo Interval: 400 ms
+ 27 15:32:52.363241 IP (tos 0xc0, ttl 255, id 54140, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 28 15:32:52.523246 IP (tos 0xc0, ttl 255, id 42894, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x457f7451, Your Discriminator: 0x89860b19
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 29 15:32:52.541447 IP (tos 0xc0, ttl 255, id 24387, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (1200 ms Detection time), BFD Length: 24
+ My Discriminator: 0x89860b19, Your Discriminator: 0x457f7451
+ Desired min Tx Interval: 400 ms
+ Required min Rx Interval: 400 ms
+ Required min Echo Interval: 400 ms
+ 30 15:32:52.623226 IP (tos 0xc0, ttl 255, id 54156, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 31 15:32:52.893448 IP (tos 0xc0, ttl 255, id 24420, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (1200 ms Detection time), BFD Length: 24
+ My Discriminator: 0x89860b19, Your Discriminator: 0x457f7451
+ Desired min Tx Interval: 400 ms
+ Required min Rx Interval: 400 ms
+ Required min Echo Interval: 400 ms
+ 32 15:32:52.907208 IP (tos 0xc0, ttl 255, id 42968, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x457f7451, Your Discriminator: 0x89860b19
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 33 15:32:52.939217 IP (tos 0xc0, ttl 255, id 54161, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 34 15:32:53.175261 IP (tos 0xc0, ttl 255, id 54189, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 35 15:32:53.245445 IP (tos 0xc0, ttl 255, id 24444, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (1200 ms Detection time), BFD Length: 24
+ My Discriminator: 0x89860b19, Your Discriminator: 0x457f7451
+ Desired min Tx Interval: 400 ms
+ Required min Rx Interval: 400 ms
+ Required min Echo Interval: 400 ms
+ 36 15:32:53.259218 IP (tos 0xc0, ttl 255, id 43041, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x457f7451, Your Discriminator: 0x89860b19
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 37 15:32:53.455241 IP (tos 0xc0, ttl 255, id 54223, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 38 15:32:53.565443 IP (tos 0xc0, ttl 255, id 24471, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (1200 ms Detection time), BFD Length: 24
+ My Discriminator: 0x89860b19, Your Discriminator: 0x457f7451
+ Desired min Tx Interval: 400 ms
+ Required min Rx Interval: 400 ms
+ Required min Echo Interval: 400 ms
+ 39 15:32:53.611260 IP (tos 0xc0, ttl 255, id 43060, offset 0, flags [none], proto UDP (17), length 52)
+ 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, length: 24
+ Multihop, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x457f7451, Your Discriminator: 0x89860b19
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
+ 40 15:32:53.739250 IP (tos 0xc0, ttl 255, id 54269, offset 0, flags [none], proto UDP (17), length 52)
+ 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, length: 24
+ Control, State Up, Flags: [none], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 3 (900 ms Detection time), BFD Length: 24
+ My Discriminator: 0x7429abf9, Your Discriminator: 0xd43a40c1
+ Desired min Tx Interval: 300 ms
+ Required min Rx Interval: 300 ms
+ Required min Echo Interval: 300 ms
diff --git a/tests/bfd-multihop.out b/tests/bfd-multihop.out
new file mode 100644
index 0000000..8b21051
--- /dev/null
+++ b/tests/bfd-multihop.out
@@ -0,0 +1,40 @@
+ 1 15:32:49.715242 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 2 15:32:49.725449 IP 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 3 15:32:49.771212 IP 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 4 15:32:49.963242 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 5 15:32:50.077458 IP 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 6 15:32:50.123245 IP 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 7 15:32:50.251236 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 8 15:32:50.429453 IP 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 9 15:32:50.443240 IP 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 10 15:32:50.495231 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 11 15:32:50.763252 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 12 15:32:50.781440 IP 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 13 15:32:50.795209 IP 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 14 15:32:51.055254 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 15 15:32:51.169437 IP 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 16 15:32:51.179235 IP 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 17 15:32:51.263249 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 18 15:32:51.517455 IP 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 19 15:32:51.531253 IP 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 20 15:32:51.563242 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 21 15:32:51.815238 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 22 15:32:51.851228 IP 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 23 15:32:51.901437 IP 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 24 15:32:52.055249 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 25 15:32:52.171267 IP 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 26 15:32:52.221449 IP 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 27 15:32:52.363241 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 28 15:32:52.523246 IP 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 29 15:32:52.541447 IP 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 30 15:32:52.623226 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 31 15:32:52.893448 IP 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 32 15:32:52.907208 IP 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 33 15:32:52.939217 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 34 15:32:53.175261 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 35 15:32:53.245445 IP 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 36 15:32:53.259218 IP 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 37 15:32:53.455241 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
+ 38 15:32:53.565443 IP 101.0.0.12.51993 > 101.0.0.1.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 39 15:32:53.611260 IP 101.0.0.1.62545 > 101.0.0.12.4784: BFDv1, Multihop, State Up, Flags: [none], length: 24
+ 40 15:32:53.739250 IP 161.1.12.1.60409 > 161.1.12.12.3784: BFDv1, Control, State Up, Flags: [none], length: 24
diff --git a/tests/bfd-multihop.pcap b/tests/bfd-multihop.pcap
new file mode 100644
index 0000000..36607fb
--- /dev/null
+++ b/tests/bfd-multihop.pcap
Binary files differ
diff --git a/tests/bfd-raw-auth-md5-v.out b/tests/bfd-raw-auth-md5-v.out
new file mode 100644
index 0000000..a71d0e0
--- /dev/null
+++ b/tests/bfd-raw-auth-md5-v.out
@@ -0,0 +1,341 @@
+ 1 07:44:00.997462 IP (tos 0x0, ttl 10, id 1, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 2 07:44:01.197462 IP (tos 0x0, ttl 10, id 2, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 3 07:44:01.397462 IP (tos 0x0, ttl 10, id 3, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 4 07:44:01.597462 IP (tos 0x0, ttl 10, id 4, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 5 07:44:01.797462 IP (tos 0x0, ttl 10, id 5, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 6 07:44:01.997462 IP (tos 0x0, ttl 10, id 6, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 7 07:44:02.197462 IP (tos 0x0, ttl 10, id 7, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 8 07:44:02.397462 IP (tos 0x0, ttl 10, id 8, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 9 07:44:02.597462 IP (tos 0x0, ttl 10, id 9, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 10 07:44:02.797462 IP (tos 0x0, ttl 10, id 10, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 11 07:44:02.997462 IP (tos 0x0, ttl 10, id 11, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 12 07:44:03.197462 IP (tos 0x0, ttl 10, id 12, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 13 07:44:03.397462 IP (tos 0x0, ttl 10, id 13, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 14 07:44:03.597462 IP (tos 0x0, ttl 10, id 14, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 15 07:44:03.797462 IP (tos 0x0, ttl 10, id 15, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 16 07:44:03.997462 IP (tos 0x0, ttl 10, id 16, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 17 07:44:04.197462 IP (tos 0x0, ttl 10, id 17, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 18 07:44:04.397462 IP (tos 0x0, ttl 10, id 18, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 19 07:44:04.597462 IP (tos 0x0, ttl 10, id 19, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 20 07:44:04.797462 IP (tos 0x0, ttl 10, id 20, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 21 07:44:04.997462 IP (tos 0x0, ttl 10, id 21, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 22 07:44:05.197462 IP (tos 0x0, ttl 10, id 22, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 23 07:44:05.397462 IP (tos 0x0, ttl 10, id 23, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 24 07:44:05.597462 IP (tos 0x0, ttl 10, id 24, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 25 07:44:05.797462 IP (tos 0x0, ttl 10, id 25, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 26 07:44:05.997462 IP (tos 0x0, ttl 10, id 26, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 27 07:44:06.197462 IP (tos 0x0, ttl 10, id 27, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 28 07:44:06.397462 IP (tos 0x0, ttl 10, id 28, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 29 07:44:06.597462 IP (tos 0x0, ttl 10, id 29, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 30 07:44:06.797462 IP (tos 0x0, ttl 10, id 30, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
+ 31 07:44:06.997462 IP (tos 0x0, ttl 10, id 31, offset 0, flags [none], proto UDP (17), length 76)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 48
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 48
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Keyed MD5 (2), length: 24
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Digest: 01020304050607080910111213141516
diff --git a/tests/bfd-raw-auth-md5.out b/tests/bfd-raw-auth-md5.out
new file mode 100644
index 0000000..f04caf8
--- /dev/null
+++ b/tests/bfd-raw-auth-md5.out
@@ -0,0 +1,31 @@
+ 1 07:44:00.997462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 2 07:44:01.197462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 3 07:44:01.397462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 4 07:44:01.597462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 5 07:44:01.797462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 6 07:44:01.997462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 7 07:44:02.197462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 8 07:44:02.397462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 9 07:44:02.597462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 10 07:44:02.797462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 11 07:44:02.997462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 12 07:44:03.197462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 13 07:44:03.397462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 14 07:44:03.597462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 15 07:44:03.797462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 16 07:44:03.997462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 17 07:44:04.197462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 18 07:44:04.397462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 19 07:44:04.597462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 20 07:44:04.797462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 21 07:44:04.997462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 22 07:44:05.197462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 23 07:44:05.397462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 24 07:44:05.597462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 25 07:44:05.797462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 26 07:44:05.997462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 27 07:44:06.197462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 28 07:44:06.397462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 29 07:44:06.597462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 30 07:44:06.797462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
+ 31 07:44:06.997462 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 48
diff --git a/tests/bfd-raw-auth-md5.pcap b/tests/bfd-raw-auth-md5.pcap
new file mode 100644
index 0000000..9de6d4a
--- /dev/null
+++ b/tests/bfd-raw-auth-md5.pcap
Binary files differ
diff --git a/tests/bfd-raw-auth-sha1-v.out b/tests/bfd-raw-auth-sha1-v.out
new file mode 100644
index 0000000..b70980f
--- /dev/null
+++ b/tests/bfd-raw-auth-sha1-v.out
@@ -0,0 +1,275 @@
+ 1 08:23:35.643302 IP (tos 0x0, ttl 10, id 0, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 2 08:23:35.843302 IP (tos 0x0, ttl 10, id 1, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 3 08:23:36.043302 IP (tos 0x0, ttl 10, id 2, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 4 08:23:36.243302 IP (tos 0x0, ttl 10, id 3, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 5 08:23:36.443302 IP (tos 0x0, ttl 10, id 4, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 6 08:23:36.643302 IP (tos 0x0, ttl 10, id 5, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 7 08:23:36.843302 IP (tos 0x0, ttl 10, id 6, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 8 08:23:37.043302 IP (tos 0x0, ttl 10, id 7, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 9 08:23:37.243302 IP (tos 0x0, ttl 10, id 8, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 10 08:23:37.443302 IP (tos 0x0, ttl 10, id 9, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 11 08:23:37.643302 IP (tos 0x0, ttl 10, id 10, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 12 08:23:37.843302 IP (tos 0x0, ttl 10, id 11, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 13 08:23:38.043302 IP (tos 0x0, ttl 10, id 12, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 14 08:23:38.243302 IP (tos 0x0, ttl 10, id 13, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 15 08:23:38.443302 IP (tos 0x0, ttl 10, id 14, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 16 08:23:38.643302 IP (tos 0x0, ttl 10, id 15, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 17 08:23:38.843302 IP (tos 0x0, ttl 10, id 16, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 18 08:23:39.043302 IP (tos 0x0, ttl 10, id 17, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 19 08:23:39.243302 IP (tos 0x0, ttl 10, id 18, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 20 08:23:39.443302 IP (tos 0x0, ttl 10, id 19, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 21 08:23:39.643302 IP (tos 0x0, ttl 10, id 20, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 22 08:23:39.843302 IP (tos 0x0, ttl 10, id 21, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 23 08:23:40.043302 IP (tos 0x0, ttl 10, id 22, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 24 08:23:40.243302 IP (tos 0x0, ttl 10, id 23, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
+ 25 08:23:40.443302 IP (tos 0x0, ttl 10, id 24, offset 0, flags [none], proto UDP (17), length 80)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 52
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 52
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Meticulous Keyed SHA1 (5), length: 28
+ Auth Key ID: 2, Sequence Number: 0x00000005
+ Hash: 010203040506070809101112131415161718191a
diff --git a/tests/bfd-raw-auth-sha1.out b/tests/bfd-raw-auth-sha1.out
new file mode 100644
index 0000000..28b507c
--- /dev/null
+++ b/tests/bfd-raw-auth-sha1.out
@@ -0,0 +1,25 @@
+ 1 08:23:35.643302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 2 08:23:35.843302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 3 08:23:36.043302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 4 08:23:36.243302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 5 08:23:36.443302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 6 08:23:36.643302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 7 08:23:36.843302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 8 08:23:37.043302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 9 08:23:37.243302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 10 08:23:37.443302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 11 08:23:37.643302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 12 08:23:37.843302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 13 08:23:38.043302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 14 08:23:38.243302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 15 08:23:38.443302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 16 08:23:38.643302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 17 08:23:38.843302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 18 08:23:39.043302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 19 08:23:39.243302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 20 08:23:39.443302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 21 08:23:39.643302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 22 08:23:39.843302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 23 08:23:40.043302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 24 08:23:40.243302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
+ 25 08:23:40.443302 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 52
diff --git a/tests/bfd-raw-auth-sha1.pcap b/tests/bfd-raw-auth-sha1.pcap
new file mode 100644
index 0000000..8fafb60
--- /dev/null
+++ b/tests/bfd-raw-auth-sha1.pcap
Binary files differ
diff --git a/tests/bfd-raw-auth-simple-v.out b/tests/bfd-raw-auth-simple-v.out
new file mode 100644
index 0000000..1c0850e
--- /dev/null
+++ b/tests/bfd-raw-auth-simple-v.out
@@ -0,0 +1,150 @@
+ 1 15:54:23.344158 IP (tos 0x0, ttl 10, id 0, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 2 15:54:23.544158 IP (tos 0x0, ttl 10, id 1, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 3 15:54:23.744158 IP (tos 0x0, ttl 10, id 2, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 4 15:54:23.944158 IP (tos 0x0, ttl 10, id 3, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 5 15:54:24.144158 IP (tos 0x0, ttl 10, id 4, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 6 15:54:24.344158 IP (tos 0x0, ttl 10, id 5, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 7 15:54:24.544158 IP (tos 0x0, ttl 10, id 6, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 8 15:54:24.744158 IP (tos 0x0, ttl 10, id 7, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 9 15:54:24.944158 IP (tos 0x0, ttl 10, id 8, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 10 15:54:25.144158 IP (tos 0x0, ttl 10, id 9, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 11 15:54:25.344158 IP (tos 0x0, ttl 10, id 10, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 12 15:54:25.544158 IP (tos 0x0, ttl 10, id 11, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 13 15:54:25.744158 IP (tos 0x0, ttl 10, id 12, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 14 15:54:25.944158 IP (tos 0x0, ttl 10, id 13, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
+ 15 15:54:26.144158 IP (tos 0x0, ttl 10, id 14, offset 0, flags [none], proto UDP (17), length 61)
+ 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, length: 33
+ Control, State Down, Flags: [Authentication Present], Diagnostic: No Diagnostic (0x00)
+ Detection Timer Multiplier: 5 (5000 ms Detection time), BFD Length: 33
+ My Discriminator: 0x00000001, Your Discriminator: 0x00000000
+ Desired min Tx Interval: 1000 ms
+ Required min Rx Interval: 1000 ms
+ Required min Echo Interval: 0 ms
+ Authentication: Simple Password (1), length: 9
+ Auth Key ID: 2, Password: secret
diff --git a/tests/bfd-raw-auth-simple.out b/tests/bfd-raw-auth-simple.out
new file mode 100644
index 0000000..b133a48
--- /dev/null
+++ b/tests/bfd-raw-auth-simple.out
@@ -0,0 +1,15 @@
+ 1 15:54:23.344158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 2 15:54:23.544158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 3 15:54:23.744158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 4 15:54:23.944158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 5 15:54:24.144158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 6 15:54:24.344158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 7 15:54:24.544158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 8 15:54:24.744158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 9 15:54:24.944158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 10 15:54:25.144158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 11 15:54:25.344158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 12 15:54:25.544158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 13 15:54:25.744158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 14 15:54:25.944158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
+ 15 15:54:26.144158 IP 192.85.1.2.1024 > 192.0.0.1.3784: BFDv1, Control, State Down, Flags: [Authentication Present], length: 33
diff --git a/tests/bfd-raw-auth-simple.pcap b/tests/bfd-raw-auth-simple.pcap
new file mode 100644
index 0000000..48cf3ac
--- /dev/null
+++ b/tests/bfd-raw-auth-simple.pcap
Binary files differ
diff --git a/tests/bgp-4byte-asdot.out b/tests/bgp-4byte-asdot.out
new file mode 100644
index 0000000..40e51e2
--- /dev/null
+++ b/tests/bgp-4byte-asdot.out
@@ -0,0 +1,373 @@
+ 1 17:16:39.743518 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.0.2.1 tell 1.0.2.2, length 28
+ 2 17:16:39.743599 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.0.2.1 is-at e2:c3:b4:8e:87:60, length 28
+ 3 17:16:39.743662 IP (tos 0xc0, ttl 1, id 7400, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [S], cksum 0x9871 (correct), seq 2331667506, win 29200, options [mss 1460,sackOK,TS val 667578586 ecr 0,nop,wscale 9], length 0
+ 4 17:16:39.743720 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [S.], cksum 0xee84 (correct), seq 3603708762, ack 2331667507, win 28960, options [mss 1460,sackOK,TS val 667578586 ecr 667578586,nop,wscale 9], length 0
+ 5 17:16:39.743766 IP (tos 0xc0, ttl 1, id 7401, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [.], cksum 0x8e39 (correct), ack 1, win 58, options [nop,nop,TS val 667578586 ecr 667578586], length 0
+ 6 17:16:39.744246 IP (tos 0xc0, ttl 1, id 7402, offset 0, flags [DF], proto TCP (6), length 107)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [P.], cksum 0xa6d1 (correct), seq 1:56, ack 1, win 58, options [nop,nop,TS val 667578586 ecr 667578586], length 55: BGP
+ Open Message (1), length: 55
+ Version 4, my AS 23456, Holdtime 180s, ID 0.0.1.1
+ Optional parameters, length: 26
+ Option Capabilities Advertisement (2), length: 24
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Route Refresh (2), length: 0
+ Graceful Restart (64), length: 2
+ Restart Flags: [R], Restart Time 300s
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 42180.26194
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 7 17:16:39.744347 IP (tos 0xc0, ttl 255, id 19329, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [.], cksum 0x8e03 (correct), ack 56, win 57, options [nop,nop,TS val 667578586 ecr 667578586], length 0
+ 8 17:16:39.744506 IP (tos 0xc0, ttl 1, id 19330, offset 0, flags [DF], proto TCP (6), length 95)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [P.], cksum 0x62db (correct), seq 1:44, ack 56, win 57, options [nop,nop,TS val 667578586 ecr 667578586], length 43: BGP
+ Open Message (1), length: 43
+ Version 4, my AS 200, Holdtime 180s, ID 0.0.2.1
+ Optional parameters, length: 14
+ Option Capabilities Advertisement (2), length: 12
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 9 17:16:39.744560 IP (tos 0xc0, ttl 1, id 7403, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [.], cksum 0x8dd7 (correct), ack 44, win 58, options [nop,nop,TS val 667578586 ecr 667578586], length 0
+ 10 17:16:39.744600 IP (tos 0xc0, ttl 1, id 19331, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [P.], cksum 0x89aa (correct), seq 44:63, ack 56, win 57, options [nop,nop,TS val 667578586 ecr 667578586], length 19: BGP
+ Keepalive Message (4), length: 19
+ 11 17:16:39.744633 IP (tos 0xc0, ttl 1, id 7404, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [.], cksum 0x8dc4 (correct), ack 63, win 58, options [nop,nop,TS val 667578586 ecr 667578586], length 0
+ 12 17:16:39.744742 IP (tos 0xc0, ttl 1, id 7405, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [P.], cksum 0x8996 (correct), seq 56:75, ack 63, win 58, options [nop,nop,TS val 667578586 ecr 667578586], length 19: BGP
+ Keepalive Message (4), length: 19
+ 13 17:16:39.745302 IP (tos 0xc0, ttl 1, id 19332, offset 0, flags [DF], proto TCP (6), length 147)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [P.], cksum 0xef2d (correct), seq 63:158, ack 75, win 57, options [nop,nop,TS val 667578586 ecr 667578586], length 95: BGP
+ Update Message (2), length: 95
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 12, Flags [T]: 200 1 23456 23456 23456
+ Next Hop (3), length: 4, Flags [T]: 1.0.2.1
+ AS4 Path (17), length: 18, Flags [OTP]: 1 3.25614 5.5653 65535.65530
+ Updated routes:
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 14 17:16:39.747791 IP (tos 0xc0, ttl 1, id 7406, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [P.], cksum 0x8923 (correct), seq 75:94, ack 158, win 58, options [nop,nop,TS val 667578587 ecr 667578586], length 19: BGP
+ Keepalive Message (4), length: 19
+ 15 17:16:39.747859 IP (tos 0xc0, ttl 1, id 19333, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [P.], cksum 0x8910 (correct), seq 158:177, ack 94, win 57, options [nop,nop,TS val 667578587 ecr 667578587], length 19: BGP
+ Keepalive Message (4), length: 19
+ 16 17:16:39.789886 IP (tos 0xc0, ttl 1, id 7407, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [.], cksum 0x8d1f (correct), ack 177, win 58, options [nop,nop,TS val 667578598 ecr 667578587], length 0
+ 17 17:16:39.973548 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.0.3.1 tell 1.0.3.2, length 28
+ 18 17:16:39.973652 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.0.3.1 is-at 02:01:00:01:00:00, length 28
+ 19 17:16:39.973684 IP (tos 0xc0, ttl 1, id 15676, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.3.2.43415 > 1.0.3.1.179: Flags [S], cksum 0x3fa6 (correct), seq 4276964399, win 29200, options [mss 1460,sackOK,TS val 667578643 ecr 0,nop,wscale 9], length 0
+ 20 17:16:39.973736 IP (tos 0xc0, ttl 64, id 38566, offset 0, flags [DF], proto TCP (6), length 40)
+ 1.0.3.1.179 > 1.0.3.2.43415: Flags [R.], cksum 0xb265 (correct), seq 0, ack 4276964400, win 0, length 0
+ 21 17:16:40.228227 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.0.4.1 tell 1.0.4.2, length 28
+ 22 17:16:40.228290 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.0.4.1 is-at 02:01:00:01:00:00, length 28
+ 23 17:16:40.228315 IP (tos 0xc0, ttl 1, id 62340, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.4.2.34995 > 1.0.4.1.179: Flags [S], cksum 0x12b9 (correct), seq 332890839, win 29200, options [mss 1460,sackOK,TS val 667578707 ecr 0,nop,wscale 9], length 0
+ 24 17:16:40.228362 IP (tos 0xc0, ttl 64, id 37983, offset 0, flags [DF], proto TCP (6), length 40)
+ 1.0.4.1.179 > 1.0.4.2.34995: Flags [R.], cksum 0x85b8 (correct), seq 0, ack 332890840, win 0, length 0
+ 25 17:16:41.765508 IP (tos 0xc0, ttl 1, id 31524, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [S], cksum 0xad42 (correct), seq 4060023287, win 29200, options [mss 1460,sackOK,TS val 667579091 ecr 0,nop,wscale 9], length 0
+ 26 17:16:41.765624 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [S.], cksum 0x6880 (correct), seq 1839152484, ack 4060023288, win 28960, options [mss 1460,sackOK,TS val 667579091 ecr 667579091,nop,wscale 9], length 0
+ 27 17:16:41.765672 IP (tos 0xc0, ttl 1, id 31525, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [.], cksum 0x0835 (correct), ack 1, win 58, options [nop,nop,TS val 667579091 ecr 667579091], length 0
+ 28 17:16:41.765953 IP (tos 0xc0, ttl 1, id 31526, offset 0, flags [DF], proto TCP (6), length 107)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [P.], cksum 0x20cc (correct), seq 1:56, ack 1, win 58, options [nop,nop,TS val 667579092 ecr 667579091], length 55: BGP
+ Open Message (1), length: 55
+ Version 4, my AS 23456, Holdtime 180s, ID 0.0.1.1
+ Optional parameters, length: 26
+ Option Capabilities Advertisement (2), length: 24
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Route Refresh (2), length: 0
+ Graceful Restart (64), length: 2
+ Restart Flags: [R], Restart Time 300s
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 42180.26194
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 29 17:16:41.766003 IP (tos 0xc0, ttl 255, id 20406, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [.], cksum 0x07fd (correct), ack 56, win 57, options [nop,nop,TS val 667579092 ecr 667579092], length 0
+ 30 17:16:41.766223 IP (tos 0xc0, ttl 1, id 20407, offset 0, flags [DF], proto TCP (6), length 101)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [P.], cksum 0x9f22 (correct), seq 1:50, ack 56, win 57, options [nop,nop,TS val 667579092 ecr 667579092], length 49: BGP
+ Open Message (1), length: 49
+ Version 4, my AS 300, Holdtime 180s, ID 0.0.3.1
+ Optional parameters, length: 20
+ Option Capabilities Advertisement (2), length: 18
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 300
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 31 17:16:41.766257 IP (tos 0xc0, ttl 1, id 31527, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [.], cksum 0x07cb (correct), ack 50, win 58, options [nop,nop,TS val 667579092 ecr 667579092], length 0
+ 32 17:16:41.766325 IP (tos 0xc0, ttl 1, id 20408, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [P.], cksum 0x039e (correct), seq 50:69, ack 56, win 57, options [nop,nop,TS val 667579092 ecr 667579092], length 19: BGP
+ Keepalive Message (4), length: 19
+ 33 17:16:41.766382 IP (tos 0xc0, ttl 1, id 31528, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [.], cksum 0x07b8 (correct), ack 69, win 58, options [nop,nop,TS val 667579092 ecr 667579092], length 0
+ 34 17:16:41.766407 IP (tos 0xc0, ttl 1, id 31529, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [P.], cksum 0x038a (correct), seq 56:75, ack 69, win 58, options [nop,nop,TS val 667579092 ecr 667579092], length 19: BGP
+ Keepalive Message (4), length: 19
+ 35 17:16:41.767217 IP (tos 0xc0, ttl 1, id 20409, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [P.], cksum 0x0378 (correct), seq 69:88, ack 75, win 57, options [nop,nop,TS val 667579092 ecr 667579092], length 19: BGP
+ Keepalive Message (4), length: 19
+ 36 17:16:41.809917 IP (tos 0xc0, ttl 1, id 31530, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [.], cksum 0x0787 (correct), ack 88, win 58, options [nop,nop,TS val 667579103 ecr 667579092], length 0
+ 37 17:16:41.910018 IP (tos 0xc0, ttl 1, id 31531, offset 0, flags [DF], proto TCP (6), length 140)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [P.], cksum 0xab88 (correct), seq 75:163, ack 88, win 58, options [nop,nop,TS val 667579128 ecr 667579092], length 88: BGP
+ Update Message (2), length: 88
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 26, Flags [T]: 42180.26194 200 1 3.25614 5.5653 65535.65530
+ Next Hop (3), length: 4, Flags [T]: 1.0.3.1
+ Updated routes:
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 38 17:16:41.953948 IP (tos 0xc0, ttl 1, id 20410, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [.], cksum 0x06e8 (correct), ack 163, win 57, options [nop,nop,TS val 667579139 ecr 667579128], length 0
+ 39 17:16:41.953985 IP (tos 0xc0, ttl 1, id 31532, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [P.], cksum 0x02ae (correct), seq 163:182, ack 88, win 58, options [nop,nop,TS val 667579139 ecr 667579139], length 19: BGP
+ Keepalive Message (4), length: 19
+ 40 17:16:41.954030 IP (tos 0xc0, ttl 1, id 20411, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [.], cksum 0x06ca (correct), ack 182, win 57, options [nop,nop,TS val 667579139 ecr 667579139], length 0
+ 41 17:16:44.004905 IP (tos 0xc0, ttl 1, id 32529, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [S], cksum 0xa4b7 (correct), seq 4150069778, win 29200, options [mss 1460,sackOK,TS val 667579651 ecr 0,nop,wscale 9], length 0
+ 42 17:16:44.005000 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [S.], cksum 0xfbe8 (correct), seq 328595786, ack 4150069779, win 28960, options [mss 1460,sackOK,TS val 667579651 ecr 667579651,nop,wscale 9], length 0
+ 43 17:16:44.005041 IP (tos 0xc0, ttl 1, id 32530, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [.], cksum 0x9b9d (correct), ack 1, win 58, options [nop,nop,TS val 667579651 ecr 667579651], length 0
+ 44 17:16:44.005158 IP (tos 0xc0, ttl 1, id 32531, offset 0, flags [DF], proto TCP (6), length 107)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [P.], cksum 0xb435 (correct), seq 1:56, ack 1, win 58, options [nop,nop,TS val 667579651 ecr 667579651], length 55: BGP
+ Open Message (1), length: 55
+ Version 4, my AS 23456, Holdtime 180s, ID 0.0.1.1
+ Optional parameters, length: 26
+ Option Capabilities Advertisement (2), length: 24
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Route Refresh (2), length: 0
+ Graceful Restart (64), length: 2
+ Restart Flags: [R], Restart Time 300s
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 42180.26194
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 45 17:16:44.005201 IP (tos 0xc0, ttl 255, id 35912, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [.], cksum 0x9b67 (correct), ack 56, win 57, options [nop,nop,TS val 667579651 ecr 667579651], length 0
+ 46 17:16:44.005349 IP (tos 0xc0, ttl 1, id 35913, offset 0, flags [DF], proto TCP (6), length 95)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [P.], cksum 0x6d77 (correct), seq 1:44, ack 56, win 57, options [nop,nop,TS val 667579651 ecr 667579651], length 43: BGP
+ Open Message (1), length: 43
+ Version 4, my AS 400, Holdtime 180s, ID 0.0.4.1
+ Optional parameters, length: 14
+ Option Capabilities Advertisement (2), length: 12
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 47 17:16:44.005380 IP (tos 0xc0, ttl 1, id 32532, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [.], cksum 0x9b3b (correct), ack 44, win 58, options [nop,nop,TS val 667579651 ecr 667579651], length 0
+ 48 17:16:44.005420 IP (tos 0xc0, ttl 1, id 35914, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [P.], cksum 0x970e (correct), seq 44:63, ack 56, win 57, options [nop,nop,TS val 667579651 ecr 667579651], length 19: BGP
+ Keepalive Message (4), length: 19
+ 49 17:16:44.005454 IP (tos 0xc0, ttl 1, id 32533, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [.], cksum 0x9b28 (correct), ack 63, win 58, options [nop,nop,TS val 667579651 ecr 667579651], length 0
+ 50 17:16:44.005544 IP (tos 0xc0, ttl 1, id 32534, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [P.], cksum 0x96fa (correct), seq 56:75, ack 63, win 58, options [nop,nop,TS val 667579651 ecr 667579651], length 19: BGP
+ Keepalive Message (4), length: 19
+ 51 17:16:44.006416 IP (tos 0xc0, ttl 1, id 35915, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [P.], cksum 0x96e7 (correct), seq 63:82, ack 75, win 57, options [nop,nop,TS val 667579652 ecr 667579651], length 19: BGP
+ Keepalive Message (4), length: 19
+ 52 17:16:44.006470 IP (tos 0xc0, ttl 1, id 32535, offset 0, flags [DF], proto TCP (6), length 176)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [P.], cksum 0x77e2 (correct), seq 75:199, ack 82, win 58, options [nop,nop,TS val 667579652 ecr 667579652], length 124: BGP
+ Update Message (2), length: 105
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 14, Flags [T]: 23456 200 1 23456 23456 23456
+ Next Hop (3), length: 4, Flags [T]: 1.0.4.1
+ AS4 Path (17), length: 26, Flags [OT]: 42180.26194 200 1 3.25614 5.5653 65535.65530
+ Updated routes:
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 4.4.4.4/32
+ 5.5.5.5/32
+ Keepalive Message (4), length: 19
+ 53 17:16:44.049939 IP (tos 0xc0, ttl 1, id 35916, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [.], cksum 0x9a7a (correct), ack 199, win 57, options [nop,nop,TS val 667579663 ecr 667579652], length 0
+ 54 17:16:44.757924 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.0.2.2 tell 1.0.2.1, length 28
+ 55 17:16:44.757956 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.0.2.2 is-at 02:01:00:01:00:00, length 28
+ 56 17:16:48.787086 IP (tos 0xc0, ttl 1, id 19334, offset 0, flags [DF], proto TCP (6), length 100)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [P.], cksum 0x0a66 (correct), seq 177:225, ack 94, win 57, options [nop,nop,TS val 667580847 ecr 667578598], length 48: BGP
+ Update Message (2), length: 48
+ Withdrawn routes:
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 4.4.4.4/32
+ End-of-Rib Marker (empty NLRI)
+ 57 17:16:48.787130 IP (tos 0xc0, ttl 1, id 7408, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [.], cksum 0x7b52 (correct), ack 225, win 58, options [nop,nop,TS val 667580847 ecr 667580847], length 0
+ 58 17:16:48.787715 IP (tos 0xc0, ttl 1, id 31533, offset 0, flags [DF], proto TCP (6), length 100)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [P.], cksum 0x8636 (correct), seq 182:230, ack 88, win 58, options [nop,nop,TS val 667580847 ecr 667579139], length 48: BGP
+ Update Message (2), length: 48
+ Withdrawn routes:
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ End-of-Rib Marker (empty NLRI)
+ 59 17:16:48.787775 IP (tos 0xc0, ttl 1, id 20412, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [.], cksum 0xf941 (correct), ack 230, win 57, options [nop,nop,TS val 667580847 ecr 667580847], length 0
+ 60 17:16:48.787882 IP (tos 0xc0, ttl 1, id 32536, offset 0, flags [DF], proto TCP (6), length 100)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [P.], cksum 0x1be8 (correct), seq 199:247, ack 82, win 58, options [nop,nop,TS val 667580847 ecr 667579663], length 48: BGP
+ Update Message (2), length: 48
+ Withdrawn routes:
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ End-of-Rib Marker (empty NLRI)
+ 61 17:16:48.787979 IP (tos 0xc0, ttl 1, id 35917, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [.], cksum 0x90ff (correct), ack 247, win 57, options [nop,nop,TS val 667580847 ecr 667580847], length 0
+ 62 17:16:50.013864 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.0.0.2 tell 1.0.0.1, length 28
+ 63 17:16:50.013955 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.0.0.2 is-at 02:01:00:01:00:00, length 28
+ 64 17:16:50.013999 IP (tos 0xc0, ttl 1, id 51208, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [S], cksum 0x737c (correct), seq 2237510377, win 29200, options [mss 1460,sackOK,TS val 667581153 ecr 0,nop,wscale 9], length 0
+ 65 17:16:50.014051 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [S.], cksum 0x6285 (correct), seq 60517262, ack 2237510378, win 28960, options [mss 1460,sackOK,TS val 667581154 ecr 667581153,nop,wscale 9], length 0
+ 66 17:16:50.014085 IP (tos 0xc0, ttl 1, id 51209, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [.], cksum 0x0239 (correct), ack 1, win 58, options [nop,nop,TS val 667581154 ecr 667581154], length 0
+ 67 17:16:50.014154 IP (tos 0xc0, ttl 1, id 51210, offset 0, flags [DF], proto TCP (6), length 101)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [P.], cksum 0xc88a (correct), seq 1:50, ack 1, win 58, options [nop,nop,TS val 667581154 ecr 667581154], length 49: BGP
+ Open Message (1), length: 49
+ Version 4, my AS 1, Holdtime 180s, ID 0.0.0.1
+ Optional parameters, length: 20
+ Option Capabilities Advertisement (2), length: 18
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 1
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 68 17:16:50.014191 IP (tos 0xc0, ttl 255, id 4461, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [.], cksum 0x0209 (correct), ack 50, win 57, options [nop,nop,TS val 667581154 ecr 667581154], length 0
+ 69 17:16:50.016103 IP (tos 0xc0, ttl 1, id 4462, offset 0, flags [DF], proto TCP (6), length 107)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [P.], cksum 0x1b21 (correct), seq 1:56, ack 50, win 57, options [nop,nop,TS val 667581154 ecr 667581154], length 55: BGP
+ Open Message (1), length: 55
+ Version 4, my AS 23456, Holdtime 180s, ID 0.0.1.1
+ Optional parameters, length: 26
+ Option Capabilities Advertisement (2), length: 24
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Route Refresh (2), length: 0
+ Graceful Restart (64), length: 2
+ Restart Flags: [none], Restart Time 300s
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 42180.26194
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 70 17:16:50.016174 IP (tos 0xc0, ttl 1, id 51211, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [.], cksum 0x01d1 (correct), ack 56, win 58, options [nop,nop,TS val 667581154 ecr 667581154], length 0
+ 71 17:16:50.016211 IP (tos 0xc0, ttl 1, id 4463, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [P.], cksum 0xfda3 (correct), seq 56:75, ack 50, win 57, options [nop,nop,TS val 667581154 ecr 667581154], length 19: BGP
+ Keepalive Message (4), length: 19
+ 72 17:16:50.016237 IP (tos 0xc0, ttl 1, id 51212, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [P.], cksum 0xfda2 (correct), seq 50:69, ack 56, win 58, options [nop,nop,TS val 667581154 ecr 667581154], length 19: BGP
+ Keepalive Message (4), length: 19
+ 73 17:16:50.058022 IP (tos 0xc0, ttl 1, id 51213, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [.], cksum 0x01a0 (correct), ack 75, win 58, options [nop,nop,TS val 667581165 ecr 667581154], length 0
+ 74 17:16:50.058072 IP (tos 0xc0, ttl 1, id 4464, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [.], cksum 0x01a1 (correct), ack 69, win 57, options [nop,nop,TS val 667581165 ecr 667581154], length 0
+ 75 17:16:50.058122 IP (tos 0xc0, ttl 1, id 51214, offset 0, flags [DF], proto TCP (6), length 139)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [P.], cksum 0x3bd3 (correct), seq 69:156, ack 75, win 58, options [nop,nop,TS val 667581165 ecr 667581165], length 87: BGP
+ Update Message (2), length: 68
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 6, Flags [T]: 1
+ Next Hop (3), length: 4, Flags [T]: 1.0.0.1
+ Updated routes:
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 4.4.4.4/32
+ 5.5.5.5/32
+ Keepalive Message (4), length: 19
+ 76 17:16:50.058139 IP (tos 0xc0, ttl 1, id 4465, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [P.], cksum 0xfd67 (correct), seq 75:94, ack 69, win 57, options [nop,nop,TS val 667581165 ecr 667581165], length 19: BGP
+ Keepalive Message (4), length: 19
+ 77 17:16:50.058175 IP (tos 0xc0, ttl 1, id 51215, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [.], cksum 0x012b (correct), ack 94, win 58, options [nop,nop,TS val 667581165 ecr 667581165], length 0
+ 78 17:16:50.058200 IP (tos 0xc0, ttl 1, id 4466, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [.], cksum 0x012c (correct), ack 156, win 57, options [nop,nop,TS val 667581165 ecr 667581165], length 0
+ 79 17:16:50.059057 IP (tos 0xc0, ttl 1, id 31534, offset 0, flags [DF], proto TCP (6), length 124)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [P.], cksum 0x2740 (correct), seq 230:302, ack 88, win 58, options [nop,nop,TS val 667581165 ecr 667580847], length 72: BGP
+ Update Message (2), length: 72
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 10, Flags [T]: 42180.26194 1
+ Next Hop (3), length: 4, Flags [T]: 1.0.3.1
+ Updated routes:
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 80 17:16:50.059158 IP (tos 0xc0, ttl 1, id 20413, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [.], cksum 0xf67d (correct), ack 302, win 57, options [nop,nop,TS val 667581165 ecr 667581165], length 0
+ 81 17:16:50.059211 IP (tos 0xc0, ttl 1, id 32537, offset 0, flags [DF], proto TCP (6), length 133)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [P.], cksum 0x26a1 (correct), seq 247:328, ack 82, win 58, options [nop,nop,TS val 667581165 ecr 667580847], length 81: BGP
+ Update Message (2), length: 81
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 6, Flags [T]: 23456 1
+ Next Hop (3), length: 4, Flags [T]: 1.0.4.1
+ AS4 Path (17), length: 10, Flags [OT]: 42180.26194 1
+ Updated routes:
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 82 17:16:50.059258 IP (tos 0xc0, ttl 1, id 35918, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [.], cksum 0x8e32 (correct), ack 328, win 57, options [nop,nop,TS val 667581165 ecr 667581165], length 0
+ 83 17:16:50.059271 IP (tos 0xc0, ttl 1, id 7409, offset 0, flags [DF], proto TCP (6), length 133)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [P.], cksum 0x0ff7 (correct), seq 94:175, ack 225, win 58, options [nop,nop,TS val 667581165 ecr 667580847], length 81: BGP
+ Update Message (2), length: 81
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 6, Flags [T]: 23456 1
+ Next Hop (3), length: 4, Flags [T]: 1.0.2.2
+ AS4 Path (17), length: 10, Flags [OT]: 42180.26194 1
+ Updated routes:
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 84 17:16:50.101992 IP (tos 0xc0, ttl 1, id 19335, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [.], cksum 0x787b (correct), ack 175, win 57, options [nop,nop,TS val 667581176 ecr 667581165], length 0
+ 85 17:17:00.407659 IP (tos 0xc0, ttl 1, id 4467, offset 0, flags [DF], proto TCP (6), length 73)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [P.], cksum 0xedd8 (correct), seq 94:115, ack 156, win 57, options [nop,nop,TS val 667583752 ecr 667581165], length 21: BGP
+ Notification Message (3), length: 21, Cease (6), subcode Other Configuration Change (6)
+ 86 17:17:00.407721 IP (tos 0xc0, ttl 1, id 51216, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [.], cksum 0xecdf (correct), ack 115, win 58, options [nop,nop,TS val 667583752 ecr 667583752], length 0
+ 87 17:17:00.407840 IP (tos 0xc0, ttl 1, id 4468, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [F.], cksum 0xecdf (correct), seq 115, ack 156, win 57, options [nop,nop,TS val 667583752 ecr 667583752], length 0
+ 88 17:17:00.408010 IP (tos 0xc0, ttl 1, id 51217, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [F.], cksum 0xecdd (correct), seq 156, ack 116, win 58, options [nop,nop,TS val 667583752 ecr 667583752], length 0
+ 89 17:17:00.408059 IP (tos 0xc0, ttl 1, id 4469, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [.], cksum 0xecde (correct), ack 157, win 57, options [nop,nop,TS val 667583752 ecr 667583752], length 0
+ 90 17:17:00.444510 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.0.0.1 tell 192.168.201.17, length 28
+ 91 17:17:00.444552 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.0.0.1 is-at da:b0:33:db:52:8f, length 28
diff --git a/tests/bgp-4byte-asn.out b/tests/bgp-4byte-asn.out
new file mode 100644
index 0000000..0b9858e
--- /dev/null
+++ b/tests/bgp-4byte-asn.out
@@ -0,0 +1,373 @@
+ 1 17:16:39.743518 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.0.2.1 tell 1.0.2.2, length 28
+ 2 17:16:39.743599 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.0.2.1 is-at e2:c3:b4:8e:87:60, length 28
+ 3 17:16:39.743662 IP (tos 0xc0, ttl 1, id 7400, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [S], cksum 0x9871 (correct), seq 2331667506, win 29200, options [mss 1460,sackOK,TS val 667578586 ecr 0,nop,wscale 9], length 0
+ 4 17:16:39.743720 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [S.], cksum 0xee84 (correct), seq 3603708762, ack 2331667507, win 28960, options [mss 1460,sackOK,TS val 667578586 ecr 667578586,nop,wscale 9], length 0
+ 5 17:16:39.743766 IP (tos 0xc0, ttl 1, id 7401, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [.], cksum 0x8e39 (correct), ack 1, win 58, options [nop,nop,TS val 667578586 ecr 667578586], length 0
+ 6 17:16:39.744246 IP (tos 0xc0, ttl 1, id 7402, offset 0, flags [DF], proto TCP (6), length 107)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [P.], cksum 0xa6d1 (correct), seq 1:56, ack 1, win 58, options [nop,nop,TS val 667578586 ecr 667578586], length 55: BGP
+ Open Message (1), length: 55
+ Version 4, my AS 23456, Holdtime 180s, ID 0.0.1.1
+ Optional parameters, length: 26
+ Option Capabilities Advertisement (2), length: 24
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Route Refresh (2), length: 0
+ Graceful Restart (64), length: 2
+ Restart Flags: [R], Restart Time 300s
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 2764334674
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 7 17:16:39.744347 IP (tos 0xc0, ttl 255, id 19329, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [.], cksum 0x8e03 (correct), ack 56, win 57, options [nop,nop,TS val 667578586 ecr 667578586], length 0
+ 8 17:16:39.744506 IP (tos 0xc0, ttl 1, id 19330, offset 0, flags [DF], proto TCP (6), length 95)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [P.], cksum 0x62db (correct), seq 1:44, ack 56, win 57, options [nop,nop,TS val 667578586 ecr 667578586], length 43: BGP
+ Open Message (1), length: 43
+ Version 4, my AS 200, Holdtime 180s, ID 0.0.2.1
+ Optional parameters, length: 14
+ Option Capabilities Advertisement (2), length: 12
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 9 17:16:39.744560 IP (tos 0xc0, ttl 1, id 7403, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [.], cksum 0x8dd7 (correct), ack 44, win 58, options [nop,nop,TS val 667578586 ecr 667578586], length 0
+ 10 17:16:39.744600 IP (tos 0xc0, ttl 1, id 19331, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [P.], cksum 0x89aa (correct), seq 44:63, ack 56, win 57, options [nop,nop,TS val 667578586 ecr 667578586], length 19: BGP
+ Keepalive Message (4), length: 19
+ 11 17:16:39.744633 IP (tos 0xc0, ttl 1, id 7404, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [.], cksum 0x8dc4 (correct), ack 63, win 58, options [nop,nop,TS val 667578586 ecr 667578586], length 0
+ 12 17:16:39.744742 IP (tos 0xc0, ttl 1, id 7405, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [P.], cksum 0x8996 (correct), seq 56:75, ack 63, win 58, options [nop,nop,TS val 667578586 ecr 667578586], length 19: BGP
+ Keepalive Message (4), length: 19
+ 13 17:16:39.745302 IP (tos 0xc0, ttl 1, id 19332, offset 0, flags [DF], proto TCP (6), length 147)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [P.], cksum 0xef2d (correct), seq 63:158, ack 75, win 57, options [nop,nop,TS val 667578586 ecr 667578586], length 95: BGP
+ Update Message (2), length: 95
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 12, Flags [T]: 200 1 23456 23456 23456
+ Next Hop (3), length: 4, Flags [T]: 1.0.2.1
+ AS4 Path (17), length: 18, Flags [OTP]: 1 222222 333333 4294967290
+ Updated routes:
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 14 17:16:39.747791 IP (tos 0xc0, ttl 1, id 7406, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [P.], cksum 0x8923 (correct), seq 75:94, ack 158, win 58, options [nop,nop,TS val 667578587 ecr 667578586], length 19: BGP
+ Keepalive Message (4), length: 19
+ 15 17:16:39.747859 IP (tos 0xc0, ttl 1, id 19333, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [P.], cksum 0x8910 (correct), seq 158:177, ack 94, win 57, options [nop,nop,TS val 667578587 ecr 667578587], length 19: BGP
+ Keepalive Message (4), length: 19
+ 16 17:16:39.789886 IP (tos 0xc0, ttl 1, id 7407, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [.], cksum 0x8d1f (correct), ack 177, win 58, options [nop,nop,TS val 667578598 ecr 667578587], length 0
+ 17 17:16:39.973548 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.0.3.1 tell 1.0.3.2, length 28
+ 18 17:16:39.973652 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.0.3.1 is-at 02:01:00:01:00:00, length 28
+ 19 17:16:39.973684 IP (tos 0xc0, ttl 1, id 15676, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.3.2.43415 > 1.0.3.1.179: Flags [S], cksum 0x3fa6 (correct), seq 4276964399, win 29200, options [mss 1460,sackOK,TS val 667578643 ecr 0,nop,wscale 9], length 0
+ 20 17:16:39.973736 IP (tos 0xc0, ttl 64, id 38566, offset 0, flags [DF], proto TCP (6), length 40)
+ 1.0.3.1.179 > 1.0.3.2.43415: Flags [R.], cksum 0xb265 (correct), seq 0, ack 4276964400, win 0, length 0
+ 21 17:16:40.228227 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.0.4.1 tell 1.0.4.2, length 28
+ 22 17:16:40.228290 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.0.4.1 is-at 02:01:00:01:00:00, length 28
+ 23 17:16:40.228315 IP (tos 0xc0, ttl 1, id 62340, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.4.2.34995 > 1.0.4.1.179: Flags [S], cksum 0x12b9 (correct), seq 332890839, win 29200, options [mss 1460,sackOK,TS val 667578707 ecr 0,nop,wscale 9], length 0
+ 24 17:16:40.228362 IP (tos 0xc0, ttl 64, id 37983, offset 0, flags [DF], proto TCP (6), length 40)
+ 1.0.4.1.179 > 1.0.4.2.34995: Flags [R.], cksum 0x85b8 (correct), seq 0, ack 332890840, win 0, length 0
+ 25 17:16:41.765508 IP (tos 0xc0, ttl 1, id 31524, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [S], cksum 0xad42 (correct), seq 4060023287, win 29200, options [mss 1460,sackOK,TS val 667579091 ecr 0,nop,wscale 9], length 0
+ 26 17:16:41.765624 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [S.], cksum 0x6880 (correct), seq 1839152484, ack 4060023288, win 28960, options [mss 1460,sackOK,TS val 667579091 ecr 667579091,nop,wscale 9], length 0
+ 27 17:16:41.765672 IP (tos 0xc0, ttl 1, id 31525, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [.], cksum 0x0835 (correct), ack 1, win 58, options [nop,nop,TS val 667579091 ecr 667579091], length 0
+ 28 17:16:41.765953 IP (tos 0xc0, ttl 1, id 31526, offset 0, flags [DF], proto TCP (6), length 107)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [P.], cksum 0x20cc (correct), seq 1:56, ack 1, win 58, options [nop,nop,TS val 667579092 ecr 667579091], length 55: BGP
+ Open Message (1), length: 55
+ Version 4, my AS 23456, Holdtime 180s, ID 0.0.1.1
+ Optional parameters, length: 26
+ Option Capabilities Advertisement (2), length: 24
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Route Refresh (2), length: 0
+ Graceful Restart (64), length: 2
+ Restart Flags: [R], Restart Time 300s
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 2764334674
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 29 17:16:41.766003 IP (tos 0xc0, ttl 255, id 20406, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [.], cksum 0x07fd (correct), ack 56, win 57, options [nop,nop,TS val 667579092 ecr 667579092], length 0
+ 30 17:16:41.766223 IP (tos 0xc0, ttl 1, id 20407, offset 0, flags [DF], proto TCP (6), length 101)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [P.], cksum 0x9f22 (correct), seq 1:50, ack 56, win 57, options [nop,nop,TS val 667579092 ecr 667579092], length 49: BGP
+ Open Message (1), length: 49
+ Version 4, my AS 300, Holdtime 180s, ID 0.0.3.1
+ Optional parameters, length: 20
+ Option Capabilities Advertisement (2), length: 18
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 300
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 31 17:16:41.766257 IP (tos 0xc0, ttl 1, id 31527, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [.], cksum 0x07cb (correct), ack 50, win 58, options [nop,nop,TS val 667579092 ecr 667579092], length 0
+ 32 17:16:41.766325 IP (tos 0xc0, ttl 1, id 20408, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [P.], cksum 0x039e (correct), seq 50:69, ack 56, win 57, options [nop,nop,TS val 667579092 ecr 667579092], length 19: BGP
+ Keepalive Message (4), length: 19
+ 33 17:16:41.766382 IP (tos 0xc0, ttl 1, id 31528, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [.], cksum 0x07b8 (correct), ack 69, win 58, options [nop,nop,TS val 667579092 ecr 667579092], length 0
+ 34 17:16:41.766407 IP (tos 0xc0, ttl 1, id 31529, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [P.], cksum 0x038a (correct), seq 56:75, ack 69, win 58, options [nop,nop,TS val 667579092 ecr 667579092], length 19: BGP
+ Keepalive Message (4), length: 19
+ 35 17:16:41.767217 IP (tos 0xc0, ttl 1, id 20409, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [P.], cksum 0x0378 (correct), seq 69:88, ack 75, win 57, options [nop,nop,TS val 667579092 ecr 667579092], length 19: BGP
+ Keepalive Message (4), length: 19
+ 36 17:16:41.809917 IP (tos 0xc0, ttl 1, id 31530, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [.], cksum 0x0787 (correct), ack 88, win 58, options [nop,nop,TS val 667579103 ecr 667579092], length 0
+ 37 17:16:41.910018 IP (tos 0xc0, ttl 1, id 31531, offset 0, flags [DF], proto TCP (6), length 140)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [P.], cksum 0xab88 (correct), seq 75:163, ack 88, win 58, options [nop,nop,TS val 667579128 ecr 667579092], length 88: BGP
+ Update Message (2), length: 88
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 26, Flags [T]: 2764334674 200 1 222222 333333 4294967290
+ Next Hop (3), length: 4, Flags [T]: 1.0.3.1
+ Updated routes:
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 38 17:16:41.953948 IP (tos 0xc0, ttl 1, id 20410, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [.], cksum 0x06e8 (correct), ack 163, win 57, options [nop,nop,TS val 667579139 ecr 667579128], length 0
+ 39 17:16:41.953985 IP (tos 0xc0, ttl 1, id 31532, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [P.], cksum 0x02ae (correct), seq 163:182, ack 88, win 58, options [nop,nop,TS val 667579139 ecr 667579139], length 19: BGP
+ Keepalive Message (4), length: 19
+ 40 17:16:41.954030 IP (tos 0xc0, ttl 1, id 20411, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [.], cksum 0x06ca (correct), ack 182, win 57, options [nop,nop,TS val 667579139 ecr 667579139], length 0
+ 41 17:16:44.004905 IP (tos 0xc0, ttl 1, id 32529, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [S], cksum 0xa4b7 (correct), seq 4150069778, win 29200, options [mss 1460,sackOK,TS val 667579651 ecr 0,nop,wscale 9], length 0
+ 42 17:16:44.005000 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [S.], cksum 0xfbe8 (correct), seq 328595786, ack 4150069779, win 28960, options [mss 1460,sackOK,TS val 667579651 ecr 667579651,nop,wscale 9], length 0
+ 43 17:16:44.005041 IP (tos 0xc0, ttl 1, id 32530, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [.], cksum 0x9b9d (correct), ack 1, win 58, options [nop,nop,TS val 667579651 ecr 667579651], length 0
+ 44 17:16:44.005158 IP (tos 0xc0, ttl 1, id 32531, offset 0, flags [DF], proto TCP (6), length 107)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [P.], cksum 0xb435 (correct), seq 1:56, ack 1, win 58, options [nop,nop,TS val 667579651 ecr 667579651], length 55: BGP
+ Open Message (1), length: 55
+ Version 4, my AS 23456, Holdtime 180s, ID 0.0.1.1
+ Optional parameters, length: 26
+ Option Capabilities Advertisement (2), length: 24
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Route Refresh (2), length: 0
+ Graceful Restart (64), length: 2
+ Restart Flags: [R], Restart Time 300s
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 2764334674
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 45 17:16:44.005201 IP (tos 0xc0, ttl 255, id 35912, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [.], cksum 0x9b67 (correct), ack 56, win 57, options [nop,nop,TS val 667579651 ecr 667579651], length 0
+ 46 17:16:44.005349 IP (tos 0xc0, ttl 1, id 35913, offset 0, flags [DF], proto TCP (6), length 95)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [P.], cksum 0x6d77 (correct), seq 1:44, ack 56, win 57, options [nop,nop,TS val 667579651 ecr 667579651], length 43: BGP
+ Open Message (1), length: 43
+ Version 4, my AS 400, Holdtime 180s, ID 0.0.4.1
+ Optional parameters, length: 14
+ Option Capabilities Advertisement (2), length: 12
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 47 17:16:44.005380 IP (tos 0xc0, ttl 1, id 32532, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [.], cksum 0x9b3b (correct), ack 44, win 58, options [nop,nop,TS val 667579651 ecr 667579651], length 0
+ 48 17:16:44.005420 IP (tos 0xc0, ttl 1, id 35914, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [P.], cksum 0x970e (correct), seq 44:63, ack 56, win 57, options [nop,nop,TS val 667579651 ecr 667579651], length 19: BGP
+ Keepalive Message (4), length: 19
+ 49 17:16:44.005454 IP (tos 0xc0, ttl 1, id 32533, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [.], cksum 0x9b28 (correct), ack 63, win 58, options [nop,nop,TS val 667579651 ecr 667579651], length 0
+ 50 17:16:44.005544 IP (tos 0xc0, ttl 1, id 32534, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [P.], cksum 0x96fa (correct), seq 56:75, ack 63, win 58, options [nop,nop,TS val 667579651 ecr 667579651], length 19: BGP
+ Keepalive Message (4), length: 19
+ 51 17:16:44.006416 IP (tos 0xc0, ttl 1, id 35915, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [P.], cksum 0x96e7 (correct), seq 63:82, ack 75, win 57, options [nop,nop,TS val 667579652 ecr 667579651], length 19: BGP
+ Keepalive Message (4), length: 19
+ 52 17:16:44.006470 IP (tos 0xc0, ttl 1, id 32535, offset 0, flags [DF], proto TCP (6), length 176)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [P.], cksum 0x77e2 (correct), seq 75:199, ack 82, win 58, options [nop,nop,TS val 667579652 ecr 667579652], length 124: BGP
+ Update Message (2), length: 105
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 14, Flags [T]: 23456 200 1 23456 23456 23456
+ Next Hop (3), length: 4, Flags [T]: 1.0.4.1
+ AS4 Path (17), length: 26, Flags [OT]: 2764334674 200 1 222222 333333 4294967290
+ Updated routes:
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 4.4.4.4/32
+ 5.5.5.5/32
+ Keepalive Message (4), length: 19
+ 53 17:16:44.049939 IP (tos 0xc0, ttl 1, id 35916, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [.], cksum 0x9a7a (correct), ack 199, win 57, options [nop,nop,TS val 667579663 ecr 667579652], length 0
+ 54 17:16:44.757924 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.0.2.2 tell 1.0.2.1, length 28
+ 55 17:16:44.757956 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.0.2.2 is-at 02:01:00:01:00:00, length 28
+ 56 17:16:48.787086 IP (tos 0xc0, ttl 1, id 19334, offset 0, flags [DF], proto TCP (6), length 100)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [P.], cksum 0x0a66 (correct), seq 177:225, ack 94, win 57, options [nop,nop,TS val 667580847 ecr 667578598], length 48: BGP
+ Update Message (2), length: 48
+ Withdrawn routes:
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 4.4.4.4/32
+ End-of-Rib Marker (empty NLRI)
+ 57 17:16:48.787130 IP (tos 0xc0, ttl 1, id 7408, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [.], cksum 0x7b52 (correct), ack 225, win 58, options [nop,nop,TS val 667580847 ecr 667580847], length 0
+ 58 17:16:48.787715 IP (tos 0xc0, ttl 1, id 31533, offset 0, flags [DF], proto TCP (6), length 100)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [P.], cksum 0x8636 (correct), seq 182:230, ack 88, win 58, options [nop,nop,TS val 667580847 ecr 667579139], length 48: BGP
+ Update Message (2), length: 48
+ Withdrawn routes:
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ End-of-Rib Marker (empty NLRI)
+ 59 17:16:48.787775 IP (tos 0xc0, ttl 1, id 20412, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [.], cksum 0xf941 (correct), ack 230, win 57, options [nop,nop,TS val 667580847 ecr 667580847], length 0
+ 60 17:16:48.787882 IP (tos 0xc0, ttl 1, id 32536, offset 0, flags [DF], proto TCP (6), length 100)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [P.], cksum 0x1be8 (correct), seq 199:247, ack 82, win 58, options [nop,nop,TS val 667580847 ecr 667579663], length 48: BGP
+ Update Message (2), length: 48
+ Withdrawn routes:
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ End-of-Rib Marker (empty NLRI)
+ 61 17:16:48.787979 IP (tos 0xc0, ttl 1, id 35917, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [.], cksum 0x90ff (correct), ack 247, win 57, options [nop,nop,TS val 667580847 ecr 667580847], length 0
+ 62 17:16:50.013864 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.0.0.2 tell 1.0.0.1, length 28
+ 63 17:16:50.013955 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.0.0.2 is-at 02:01:00:01:00:00, length 28
+ 64 17:16:50.013999 IP (tos 0xc0, ttl 1, id 51208, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [S], cksum 0x737c (correct), seq 2237510377, win 29200, options [mss 1460,sackOK,TS val 667581153 ecr 0,nop,wscale 9], length 0
+ 65 17:16:50.014051 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [S.], cksum 0x6285 (correct), seq 60517262, ack 2237510378, win 28960, options [mss 1460,sackOK,TS val 667581154 ecr 667581153,nop,wscale 9], length 0
+ 66 17:16:50.014085 IP (tos 0xc0, ttl 1, id 51209, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [.], cksum 0x0239 (correct), ack 1, win 58, options [nop,nop,TS val 667581154 ecr 667581154], length 0
+ 67 17:16:50.014154 IP (tos 0xc0, ttl 1, id 51210, offset 0, flags [DF], proto TCP (6), length 101)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [P.], cksum 0xc88a (correct), seq 1:50, ack 1, win 58, options [nop,nop,TS val 667581154 ecr 667581154], length 49: BGP
+ Open Message (1), length: 49
+ Version 4, my AS 1, Holdtime 180s, ID 0.0.0.1
+ Optional parameters, length: 20
+ Option Capabilities Advertisement (2), length: 18
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 1
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 68 17:16:50.014191 IP (tos 0xc0, ttl 255, id 4461, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [.], cksum 0x0209 (correct), ack 50, win 57, options [nop,nop,TS val 667581154 ecr 667581154], length 0
+ 69 17:16:50.016103 IP (tos 0xc0, ttl 1, id 4462, offset 0, flags [DF], proto TCP (6), length 107)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [P.], cksum 0x1b21 (correct), seq 1:56, ack 50, win 57, options [nop,nop,TS val 667581154 ecr 667581154], length 55: BGP
+ Open Message (1), length: 55
+ Version 4, my AS 23456, Holdtime 180s, ID 0.0.1.1
+ Optional parameters, length: 26
+ Option Capabilities Advertisement (2), length: 24
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Route Refresh (2), length: 0
+ Graceful Restart (64), length: 2
+ Restart Flags: [none], Restart Time 300s
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 2764334674
+ Multiple Paths (69), length: 4
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ 70 17:16:50.016174 IP (tos 0xc0, ttl 1, id 51211, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [.], cksum 0x01d1 (correct), ack 56, win 58, options [nop,nop,TS val 667581154 ecr 667581154], length 0
+ 71 17:16:50.016211 IP (tos 0xc0, ttl 1, id 4463, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [P.], cksum 0xfda3 (correct), seq 56:75, ack 50, win 57, options [nop,nop,TS val 667581154 ecr 667581154], length 19: BGP
+ Keepalive Message (4), length: 19
+ 72 17:16:50.016237 IP (tos 0xc0, ttl 1, id 51212, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [P.], cksum 0xfda2 (correct), seq 50:69, ack 56, win 58, options [nop,nop,TS val 667581154 ecr 667581154], length 19: BGP
+ Keepalive Message (4), length: 19
+ 73 17:16:50.058022 IP (tos 0xc0, ttl 1, id 51213, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [.], cksum 0x01a0 (correct), ack 75, win 58, options [nop,nop,TS val 667581165 ecr 667581154], length 0
+ 74 17:16:50.058072 IP (tos 0xc0, ttl 1, id 4464, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [.], cksum 0x01a1 (correct), ack 69, win 57, options [nop,nop,TS val 667581165 ecr 667581154], length 0
+ 75 17:16:50.058122 IP (tos 0xc0, ttl 1, id 51214, offset 0, flags [DF], proto TCP (6), length 139)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [P.], cksum 0x3bd3 (correct), seq 69:156, ack 75, win 58, options [nop,nop,TS val 667581165 ecr 667581165], length 87: BGP
+ Update Message (2), length: 68
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 6, Flags [T]: 1
+ Next Hop (3), length: 4, Flags [T]: 1.0.0.1
+ Updated routes:
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 4.4.4.4/32
+ 5.5.5.5/32
+ Keepalive Message (4), length: 19
+ 76 17:16:50.058139 IP (tos 0xc0, ttl 1, id 4465, offset 0, flags [DF], proto TCP (6), length 71)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [P.], cksum 0xfd67 (correct), seq 75:94, ack 69, win 57, options [nop,nop,TS val 667581165 ecr 667581165], length 19: BGP
+ Keepalive Message (4), length: 19
+ 77 17:16:50.058175 IP (tos 0xc0, ttl 1, id 51215, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [.], cksum 0x012b (correct), ack 94, win 58, options [nop,nop,TS val 667581165 ecr 667581165], length 0
+ 78 17:16:50.058200 IP (tos 0xc0, ttl 1, id 4466, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [.], cksum 0x012c (correct), ack 156, win 57, options [nop,nop,TS val 667581165 ecr 667581165], length 0
+ 79 17:16:50.059057 IP (tos 0xc0, ttl 1, id 31534, offset 0, flags [DF], proto TCP (6), length 124)
+ 1.0.3.1.35169 > 1.0.3.2.179: Flags [P.], cksum 0x2740 (correct), seq 230:302, ack 88, win 58, options [nop,nop,TS val 667581165 ecr 667580847], length 72: BGP
+ Update Message (2), length: 72
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 10, Flags [T]: 2764334674 1
+ Next Hop (3), length: 4, Flags [T]: 1.0.3.1
+ Updated routes:
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 80 17:16:50.059158 IP (tos 0xc0, ttl 1, id 20413, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.3.2.179 > 1.0.3.1.35169: Flags [.], cksum 0xf67d (correct), ack 302, win 57, options [nop,nop,TS val 667581165 ecr 667581165], length 0
+ 81 17:16:50.059211 IP (tos 0xc0, ttl 1, id 32537, offset 0, flags [DF], proto TCP (6), length 133)
+ 1.0.4.1.34883 > 1.0.4.2.179: Flags [P.], cksum 0x26a1 (correct), seq 247:328, ack 82, win 58, options [nop,nop,TS val 667581165 ecr 667580847], length 81: BGP
+ Update Message (2), length: 81
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 6, Flags [T]: 23456 1
+ Next Hop (3), length: 4, Flags [T]: 1.0.4.1
+ AS4 Path (17), length: 10, Flags [OT]: 2764334674 1
+ Updated routes:
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 82 17:16:50.059258 IP (tos 0xc0, ttl 1, id 35918, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.4.2.179 > 1.0.4.1.34883: Flags [.], cksum 0x8e32 (correct), ack 328, win 57, options [nop,nop,TS val 667581165 ecr 667581165], length 0
+ 83 17:16:50.059271 IP (tos 0xc0, ttl 1, id 7409, offset 0, flags [DF], proto TCP (6), length 133)
+ 1.0.2.2.42741 > 1.0.2.1.179: Flags [P.], cksum 0x0ff7 (correct), seq 94:175, ack 225, win 58, options [nop,nop,TS val 667581165 ecr 667580847], length 81: BGP
+ Update Message (2), length: 81
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 6, Flags [T]: 23456 1
+ Next Hop (3), length: 4, Flags [T]: 1.0.2.2
+ AS4 Path (17), length: 10, Flags [OT]: 2764334674 1
+ Updated routes:
+ 4.4.4.4/32
+ 5.5.5.5/32
+ 1.1.1.1/32
+ 2.2.2.2/32
+ 3.3.3.3/32
+ 84 17:16:50.101992 IP (tos 0xc0, ttl 1, id 19335, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.2.1.179 > 1.0.2.2.42741: Flags [.], cksum 0x787b (correct), ack 175, win 57, options [nop,nop,TS val 667581176 ecr 667581165], length 0
+ 85 17:17:00.407659 IP (tos 0xc0, ttl 1, id 4467, offset 0, flags [DF], proto TCP (6), length 73)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [P.], cksum 0xedd8 (correct), seq 94:115, ack 156, win 57, options [nop,nop,TS val 667583752 ecr 667581165], length 21: BGP
+ Notification Message (3), length: 21, Cease (6), subcode Other Configuration Change (6)
+ 86 17:17:00.407721 IP (tos 0xc0, ttl 1, id 51216, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [.], cksum 0xecdf (correct), ack 115, win 58, options [nop,nop,TS val 667583752 ecr 667583752], length 0
+ 87 17:17:00.407840 IP (tos 0xc0, ttl 1, id 4468, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [F.], cksum 0xecdf (correct), seq 115, ack 156, win 57, options [nop,nop,TS val 667583752 ecr 667583752], length 0
+ 88 17:17:00.408010 IP (tos 0xc0, ttl 1, id 51217, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.33993 > 1.0.0.2.179: Flags [F.], cksum 0xecdd (correct), seq 156, ack 116, win 58, options [nop,nop,TS val 667583752 ecr 667583752], length 0
+ 89 17:17:00.408059 IP (tos 0xc0, ttl 1, id 4469, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.2.179 > 1.0.0.1.33993: Flags [.], cksum 0xecde (correct), ack 157, win 57, options [nop,nop,TS val 667583752 ecr 667583752], length 0
+ 90 17:17:00.444510 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.0.0.1 tell 192.168.201.17, length 28
+ 91 17:17:00.444552 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.0.0.1 is-at da:b0:33:db:52:8f, length 28
diff --git a/tests/bgp-4byte-asn.pcap b/tests/bgp-4byte-asn.pcap
new file mode 100644
index 0000000..01d9292
--- /dev/null
+++ b/tests/bgp-4byte-asn.pcap
Binary files differ
diff --git a/tests/bgp-addpath.out b/tests/bgp-addpath.out
new file mode 100644
index 0000000..f0fddd4
--- /dev/null
+++ b/tests/bgp-addpath.out
@@ -0,0 +1,30 @@
+ 1 13:56:28.053206 IP truncated-ip - 38 bytes missing! (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto TCP (6), length 309)
+ 127.0.0.1.179 > 127.0.0.1.80: Flags [S], seq 0:269, win 8192, length 269: BGP
+ Update Message (2), length: 231
+ Withdrawn routes:
+ 8.2.0.0/24 Path Id: 20
+ 8.2.1.0/24 Path Id: 21
+ Origin (1), length: 1, Flags [T]: EGP
+ Next Hop (3), length: 0, Flags [T]: invalid len
+ AS Path (2), length: 6, Flags [T]: 100 200
+ Multi-Protocol Reach NLRI (14), length: 25, Flags [T]:
+ AFI: IPv4 (1), SAFI: Unicast (1)
+ nexthop: 1.2.3.4, nh-length: 4, no SNPA
+ 120.4.0.0/24 Path Id: 40
+ 120.4.1.0/24 Path Id: 41
+ Multi-Protocol Unreach NLRI (15), length: 19, Flags [T]:
+ AFI: IPv4 (1), SAFI: Unicast (1)
+ 32.45.0.0/24 Path Id: 700
+ 32.45.1.0/24 Path Id: 701
+ Multi-Protocol Reach NLRI (14), length: 61, Flags [T]:
+ AFI: IPv6 (2), SAFI: Unicast (1)
+ nexthop: 2000:0:0:40::1, nh-length: 16, no SNPA
+ 2002::1400:0/120 Path Id: 1
+ 2002::1400:100/120 Path Id: 2
+ Multi-Protocol Unreach NLRI (15), length: 43, Flags [T]:
+ AFI: IPv6 (2), SAFI: Unicast (1)
+ 2002::2800:0/120 Path Id: 100
+ 2002::2800:100/120 Path Id: 101
+ Updated routes:
+ 6.2.0.0/24 Path Id: 10
+ 6.2.1.0/24 Path Id: 11
diff --git a/tests/bgp-addpath.pcap b/tests/bgp-addpath.pcap
new file mode 100644
index 0000000..6f198e4
--- /dev/null
+++ b/tests/bgp-addpath.pcap
Binary files differ
diff --git a/tests/bgp-aigp-2.out b/tests/bgp-aigp-2.out
new file mode 100644
index 0000000..e4a9e32
--- /dev/null
+++ b/tests/bgp-aigp-2.out
@@ -0,0 +1,12 @@
+ 1 16:35:36.779852 IP (tos 0x0, ttl 64, id 65464, offset 0, flags [DF], proto TCP (6), length 126)
+ 1.0.1.1.33933 > 1.0.1.2.179: Flags [P.], cksum 0xdf3f (correct), seq 1822120333:1822120407, ack 3227512929, win 128, options [nop,nop,TS val 3213935882 ecr 3055548704], length 74: BGP
+ Update Message (2), length: 74
+ Origin (1), length: 1, Flags [T]: EGP
+ AS Path (2), length: 4, Flags [T]: 101
+ Next Hop (3), length: 4, Flags [T]: 0.0.0.0
+ Multi-Protocol Reach NLRI (14), length: 16, Flags [O]:
+ AFI: IPv4 (1), SAFI: labeled Unicast (4)
+ nexthop: 1.0.1.1, nh-length: 4, no SNPA
+ 123.1.1.0/24, label:20 (bottom)
+ Accumulated IGP Metric (26), length: 11, Flags [O]:
+ AIGP TLV (1), length 11, metric 4294967295
diff --git a/tests/bgp-aigp-2.pcap b/tests/bgp-aigp-2.pcap
new file mode 100644
index 0000000..5aec56f
--- /dev/null
+++ b/tests/bgp-aigp-2.pcap
Binary files differ
diff --git a/tests/bgp-aigp-oobr-nossl.out b/tests/bgp-aigp-oobr-nossl.out
new file mode 100644
index 0000000..94edbea
--- /dev/null
+++ b/tests/bgp-aigp-oobr-nossl.out
@@ -0,0 +1,9766 @@
+ 1 00:00:00.000000 00:18:74:2e:00:00 > 00:19:07:a8:fc:00, ethertype IPv4 (0x0800), length 65535: (tos 0xc0, ttl 254, id 654, offset 0, flags [none], proto TCP (6), length 65521)
+ 172.17.0.0.179 > 172.17.128.3.50651: Flags [.], cksum 0xc80b (incorrect -> 0x9361), seq 2419237172:2419302629, ack 1593006533, win 31761, options [md5 02f77f975463199362b9fbfb089a2e56,eol], length 65457: BGP
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ Unknown Attribute (171), length: 0, Flags [T]:
+ no Attribute 171 decoder
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.217
+ 0x0000: ac11 00d9
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:65536 (= 0.1.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0001 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20 [|bgp]
+ Update Message (2), length: 105
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ Unknown Attribute (114), length: 0, Flags [T]:
+ no Attribute 114 decoder
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 9472
+ 0x0000: 0000 2500
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:620 (= 0.0.2.108)
+ 0x0000: 0002 498a 0000 026c
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 32, Flags [OE]:
+ AFI: Unknown AFI (64769), SAFI: labeled VPN Unicast (128)
+ no AFI 64769 / SAFI 128 decoder
+ 0x0000: fd01 8014 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0070 0040 1100 0049 8a00 0002 6cac 11a1
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 32868
+ 0x0000: 0000 8064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 81, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.116, nh-length: 12, no SNPA
+ RD: 18826:640 (= 0.0.2.128), 172.17.33.64/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.17.33.80/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 173.17.34.0/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.17.34.16/28, label:1028 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0074
+ 0x0010: 0074 0040 4100 0049 8a00 0002 80ac 1121
+ 0x0020: 4074 0040 4100 0049 8a00 0002 80ac 1121
+ 0x0030: 5074 0040 4100 0049 8a00 0002 80ad 1122
+ 0x0040: 0074 0040 4100 0049 8a00 0002 80ac 1122
+ 0x0050: 10
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ AS Path (2), length: 0empty
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+[|BGP Update]
diff --git a/tests/bgp-aigp-oobr-ssl.out b/tests/bgp-aigp-oobr-ssl.out
new file mode 100644
index 0000000..3fef3ef
--- /dev/null
+++ b/tests/bgp-aigp-oobr-ssl.out
@@ -0,0 +1,9766 @@
+ 1 00:00:00.000000 00:18:74:2e:00:00 > 00:19:07:a8:fc:00, ethertype IPv4 (0x0800), length 65535: (tos 0xc0, ttl 254, id 654, offset 0, flags [none], proto TCP (6), length 65521)
+ 172.17.0.0.179 > 172.17.128.3.50651: Flags [.], cksum 0xc80b (incorrect -> 0x9361), seq 2419237172:2419302629, ack 1593006533, win 31761, options [md5 shared secret not supplied with -M, can't check - 02f77f975463199362b9fbfb089a2e56,eol], length 65457: BGP
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ Unknown Attribute (171), length: 0, Flags [T]:
+ no Attribute 171 decoder
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.217
+ 0x0000: ac11 00d9
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:65536 (= 0.1.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0001 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20 [|bgp]
+ Update Message (2), length: 105
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ Unknown Attribute (114), length: 0, Flags [T]:
+ no Attribute 114 decoder
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 9472
+ 0x0000: 0000 2500
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:620 (= 0.0.2.108)
+ 0x0000: 0002 498a 0000 026c
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 32, Flags [OE]:
+ AFI: Unknown AFI (64769), SAFI: labeled VPN Unicast (128)
+ no AFI 64769 / SAFI 128 decoder
+ 0x0000: fd01 8014 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0070 0040 1100 0049 8a00 0002 6cac 11a1
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 32868
+ 0x0000: 0000 8064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 81, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.116, nh-length: 12, no SNPA
+ RD: 18826:640 (= 0.0.2.128), 172.17.33.64/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.17.33.80/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 173.17.34.0/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.17.34.16/28, label:1028 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0074
+ 0x0010: 0074 0040 4100 0049 8a00 0002 80ac 1121
+ 0x0020: 4074 0040 4100 0049 8a00 0002 80ac 1121
+ 0x0030: 5074 0040 4100 0049 8a00 0002 80ad 1122
+ 0x0040: 0074 0040 4100 0049 8a00 0002 80ac 1122
+ 0x0050: 10
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ AS Path (2), length: 0empty
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:90 (= 0.0.0.90)
+ 0x0000: 0002 498a 0000 005a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 95, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:4009754624 (= 239.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.240/28, label:1063 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.30.0/26, label:1061 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.21.0/24, label:1059 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.20.0/24, label:1058 (bottom)
+ RD: 18826:90 (= 0.0.0.90), 172.17.17.32/29, label:1051 (bottom)
+ 0x0000: 0001 800c 0000 0000 ef00 0000 ac11 0005
+ 0x0010: 0074 0042 7100 0049 8a00 0000 5aac 111e
+ 0x0020: f072 0042 5100 0049 8a00 0000 5aac 111e
+ 0x0030: 0070 0042 3100 0049 8a00 0000 5aac 1115
+ 0x0040: 7000 4221 0000 498a 0000 005a ac11 1475
+ 0x0050: 0041 b100 0049 8a00 0000 5aac 1111 20
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 12288
+ 0x0000: 0000 3000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:2698 (= 0.0.10.138)
+ 0x0000: 0002 498a 0000 0a8a
+ Accumulated IGP Metric (26), length: 4, Flags [O]:
+ Unknown TLV (172), length 4352 [|bgp] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:30762 (= 0.0.120.42)
+ 0x0000: 0002 498a 0000 782a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.97.5, nh-length: 12, no SNPA
+ RD: 18826:21034 (= 0.0.82.42), 172.17.30.192/28, label:377856 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 6105
+ 0x0010: 0074 5c40 0100 0049 8a00 0052 2aac 111e
+ 0x0020: c0
+[|BGP Update]
diff --git a/tests/bgp-aigp-oobr.pcap b/tests/bgp-aigp-oobr.pcap
new file mode 100644
index 0000000..868a008
--- /dev/null
+++ b/tests/bgp-aigp-oobr.pcap
Binary files differ
diff --git a/tests/bgp-aigp.out b/tests/bgp-aigp.out
new file mode 100644
index 0000000..b4cf49c
--- /dev/null
+++ b/tests/bgp-aigp.out
@@ -0,0 +1,20 @@
+ 1 11:07:03.786633 IP (tos 0xc0, ttl 64, id 35063, offset 0, flags [none], proto TCP (6), length 182)
+ 172.16.20.5.59631 > 172.16.20.3.179: Flags [P.], cksum 0xe112 (correct), seq 3923783171:3923783301, ack 3341773693, win 16384, options [nop,nop,TS val 32734022 ecr 32695671], length 130: BGP
+ Update Message (2), length: 100
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ Local Preference (5), length: 4, Flags [T]: 100
+ Community (8), length: 4, Flags [OT]: 65000:11201
+ Originator ID (9), length: 4, Flags [O]: 172.16.21.4
+ Cluster List (10), length: 4, Flags [O]: 172.16.20.5
+ Accumulated IGP Metric (26), length: 11, Flags [O]:
+ AIGP TLV (1), length 11, metric 2000
+ Multi-Protocol Reach NLRI (14), length: 17, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled Unicast (4)
+ nexthop: 172.16.20.5, nh-length: 4, no SNPA
+ 172.16.21.4/32, label:300096 (bottom)
+ Update Message (2), length: 30
+ Multi-Protocol Unreach NLRI (15), length: 3, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled Unicast (4)
+ End-of-Rib Marker (empty NLRI)
diff --git a/tests/bgp-aigp.pcap b/tests/bgp-aigp.pcap
new file mode 100644
index 0000000..1e55e19
--- /dev/null
+++ b/tests/bgp-aigp.pcap
Binary files differ
diff --git a/tests/bgp-as-path-oobr-nossl.out b/tests/bgp-as-path-oobr-nossl.out
new file mode 100644
index 0000000..1b15517
--- /dev/null
+++ b/tests/bgp-as-path-oobr-nossl.out
@@ -0,0 +1,7518 @@
+ 1 00:00:00.000000 00:18:74:2e:00:00 > 00:19:07:a8:fc:00, ethertype IPv4 (0x0800), length 1295: (tos 0xc0, ttl 254, id 696, offset 0, flags [none], proto TCP (6), length 1281)
+ 172.17.0.0.179 > 172.17.0.3.50651: Flags [.], cksum 0x1edf (incorrect -> 0x45d1), seq 2419279130:2419280347, ack 1593006533, win 31761, options [md5 e751e2ba0a9a57c4b1914eaaa1abbd79,eol], length 1217: BGP
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ unknown extd community typecode (0x2500), Flags [none]: 498a00000262
+ 0x0000: 2500 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:1409286754 (= 84.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a54 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 4456548
+ 0x0000: 0044 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:630 (= 0.0.2.118)
+ 0x0000: 0002 498a 0000 0276
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 81, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.145.0.5, nh-length: 12, no SNPA
+ RD: 18826:630 (= 0.0.2.118), 172.17.30.208/28, label:1027 (bottom)
+ RD: 18826:630 (= 0.0.2.118), 172.17.30.224/28, label:1027 (bottom)
+ (illegal prefix length)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac91 0005
+ 0x0010: 0074 0040 3100 0049 8a00 0002 76ac 111e
+ 0x0020: d074 0040 3100 0049 8a00 0002 76ac 111e
+ 0x0030: e034 0040 3100 0049 8a00 0002 76ac 11c0
+ 0x0040: 6074 0040 3100 0049 8a00 0002 76ac 11c0
+ 0x0050: 70
+ Update Message (2), length: 105
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:620 (= 0.0.2.108)
+ 0x0000: 0002 498a 0000 026c
+ Cluster List (10), length: 37, Flags [O]: invalid len
+ 0x0000: 0011 0e00 4709 04ac 1100 0590 0e00 2000
+ 0x0010: 0180 0c00 0000 0000 0000 00ac 1100 0500
+ 0x0020: 7000 4011 00
+ Unknown Attribute (73), length: 138 [path attrs too short]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 81, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:640 (= 0.0.2.128), 172.17.33.64/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.17.33.80/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.84.34.0/28, label:132100 (bottom)
+ RD: 18826:549 (= 0.0.2.37), 0.17.34.16/28, label:1028 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 4100 0049 8a00 0002 80ac 1121
+ 0x0020: 4074 0040 4100 0049 8a00 0002 80ac 1121
+ 0x0030: 5074 2040 4100 0049 8a00 0002 80ac 5422
+ 0x0040: 0074 0040 4100 0049 8a00 0002 2500 1122
+ 0x0050: 10
+ Update Message (2), length: 202
+ Withdrawn routes:
+ 0.0.0.0/0
+ (illegal prefix length) [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Attribute Set (128), length: 3, Flags [O]: [|bgp] [|bgp]
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 131
+ 0x0000: 0000 0083
+ Local Preference (5), length: 12, Flags [T]: invalid len
+ 0x0000: 0000 0164 c010 0800 0249 8a00
+ Unknown Attribute (0), length: 90
+ no Attribute 0 decoder
+ 0x0000: 800a 04ac 1100 0080 2c8f ac11 0005 900e
+ 0x0010: 005f 0001 800c 0000 0000 0025 0000 3911
+ 0x0020: 0005 0074 0042 7100 0049 8a00 0000 5aac
+ 0x0030: 111e f072 4342 5100 0049 8a00 0000 5aac
+ 0x0040: 111e 0070 0042 3100 0049 8a00 0000 59ac
+ 0x0050: 1115 7000 4221 0000 498a
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Unknown Attribute (172), length: 4372, Flags [TE+a]: [path attrs too short]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.2
+ 0x0000: ac11 0002
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ 2 00:00:00.000000 00:18:74:2e:00:00 > 00:19:07:a8:fc:00, ethertype IPv4 (0x0800), length 897: (tos 0xc0, ttl 254, id 697, offset 0, flags [none], proto TCP (6), length 883)
+ 172.17.0.0.179 > 172.17.0.3.50651: Flags [P.], cksum 0xe2ab (correct), seq 1216:2035, ack 1, win 31761, options [md5 0b82e9255cf2e845365aae9b7e70555e,eol], length 819: BGP [|bgp]
+ Update Message (2), length: 105
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:620 (= 0.0.2.108)
+ 0x0000: 0002 498a 0000 026c
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 32, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:620 (= 0.0.2.108), 172.17.161.0/24, label:1025 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0070 0040 1100 0049 8a00 0002 6cac 11a1
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:15232 (= 0.0.59.128)
+ 0x0000: 0002 498a 0000 3b80
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O+2]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 81, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:640 (= 0.0.2.128), 172.17.33.64/28, label:1812 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.17.33.80/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.17.34.0/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.17.34.16/28, label:1028 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0071 4100 0049 8a00 0002 80ac 1121
+ 0x0020: 4074 0040 4100 0049 8a00 0002 80ac 1121
+ 0x0030: 5074 0040 4100 0049 8a00 0002 80ac 1122
+ 0x0040: 0074 0040 4100 0049 8a00 0002 80ac 1122
+ 0x0050: 10
+ Update Message (2), length: 202
+ Origin (1), length: 29442, Flags [PE+9]: [path attrs too short] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:810 (= 0.0.3.42)
+ 0x0000: 0002 498a 0000 032a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: Unknown AFI (257), SAFI: labeled VPN Unicast (128)
+ no AFI 257 / SAFI 128 decoder
+ 0x0000: 0101 800c 0000 5b00 0000 0000 ac11 0005
+ 0x0010: 0074 0040 0100 0049 8a00 0003 2aac 111e
+ 0x0020: c0 [|bgp]
+[|BGP Update]
+ 3 00:00:00.000000 00:18:74:2e:00:61 > 00:19:07:a8:fc:00, ethertype IPv4 (0x0800), length 1293: (tos 0xc0, ttl 254, id 698, offset 0, flags [none], proto TCP (6), length 1279)
+ 172.17.0.0.179 > 172.17.0.3.50651: Flags [.], cksum 0x2643 (incorrect -> 0x7d5b), seq 1998:3213, ack 1, win 31761, options [md5 4acfb1877b3726db7a34342ce97845fb,eol], length 1215: BGP
+[|BGP Update]
+ 4 00:00:00.000000 00:18:74:2e:00:00 > 00:19:07:a8:fc:00, ethertype IPv4 (0x0800), length 65549: (tos 0xc0, ttl 254, id 699, offset 0, flags [none], proto TCP (6), length 65521, bad cksum 5e07 (->c65)!)
+ 172.17.0.0.179 > 172.17.85.3.50651: Flags [P.], cksum 0x2e84 (incorrect -> 0x75f7), seq 2419283368:2419348825, ack 1593006533, win 31761, options [md5 d044dbb15adad00232bad51aa84a6f4c,eol], length 65457: BGP [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.18.196.0, nh-length: 12
+ 21 SNPA
+ 0 bytes
+ 0 bytes
+ 138 bytes [|bgp] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:627 (= 0.0.2.115), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 73ac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:138 (= 0.0.0.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0000 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 74:2852126722 (= 170.0.0.2), 138.172.17.96/28, label:1028 (BOGUS: Bottom of Stack NOT set!)
+ (illegal prefix length)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 4000 0000 4aaa 0000 028a ac11
+ 0x0030: 6900 7400 4051 0000 498a 0000 028a ac11
+ 0x0040: 6920 7400 4051 0000 498a 0000 028a ac11
+ 0x0050: 6930 7400 4051 0000 498a 0000 028a ac11
+ 0x0060: c057 7400 4051 0000 498a 0000 028a ac11
+ 0x0070: c090 7200 40a1 0000 498a 0000 028a ac11
+ 0x0080: 1e [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+[|BGP Update]
diff --git a/tests/bgp-as-path-oobr-ssl.out b/tests/bgp-as-path-oobr-ssl.out
new file mode 100644
index 0000000..5ac2ca0
--- /dev/null
+++ b/tests/bgp-as-path-oobr-ssl.out
@@ -0,0 +1,7518 @@
+ 1 00:00:00.000000 00:18:74:2e:00:00 > 00:19:07:a8:fc:00, ethertype IPv4 (0x0800), length 1295: (tos 0xc0, ttl 254, id 696, offset 0, flags [none], proto TCP (6), length 1281)
+ 172.17.0.0.179 > 172.17.0.3.50651: Flags [.], cksum 0x1edf (incorrect -> 0x45d1), seq 2419279130:2419280347, ack 1593006533, win 31761, options [md5 shared secret not supplied with -M, can't check - e751e2ba0a9a57c4b1914eaaa1abbd79,eol], length 1217: BGP
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ unknown extd community typecode (0x2500), Flags [none]: 498a00000262
+ 0x0000: 2500 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:1409286754 (= 84.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a54 0002 62ac 1121
+ 0x0020: 20
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 4456548
+ 0x0000: 0044 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:630 (= 0.0.2.118)
+ 0x0000: 0002 498a 0000 0276
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 81, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.145.0.5, nh-length: 12, no SNPA
+ RD: 18826:630 (= 0.0.2.118), 172.17.30.208/28, label:1027 (bottom)
+ RD: 18826:630 (= 0.0.2.118), 172.17.30.224/28, label:1027 (bottom)
+ (illegal prefix length)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac91 0005
+ 0x0010: 0074 0040 3100 0049 8a00 0002 76ac 111e
+ 0x0020: d074 0040 3100 0049 8a00 0002 76ac 111e
+ 0x0030: e034 0040 3100 0049 8a00 0002 76ac 11c0
+ 0x0040: 6074 0040 3100 0049 8a00 0002 76ac 11c0
+ 0x0050: 70
+ Update Message (2), length: 105
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:620 (= 0.0.2.108)
+ 0x0000: 0002 498a 0000 026c
+ Cluster List (10), length: 37, Flags [O]: invalid len
+ 0x0000: 0011 0e00 4709 04ac 1100 0590 0e00 2000
+ 0x0010: 0180 0c00 0000 0000 0000 00ac 1100 0500
+ 0x0020: 7000 4011 00
+ Unknown Attribute (73), length: 138 [path attrs too short]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 81, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:640 (= 0.0.2.128), 172.17.33.64/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.17.33.80/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.84.34.0/28, label:132100 (bottom)
+ RD: 18826:549 (= 0.0.2.37), 0.17.34.16/28, label:1028 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 4100 0049 8a00 0002 80ac 1121
+ 0x0020: 4074 0040 4100 0049 8a00 0002 80ac 1121
+ 0x0030: 5074 2040 4100 0049 8a00 0002 80ac 5422
+ 0x0040: 0074 0040 4100 0049 8a00 0002 2500 1122
+ 0x0050: 10
+ Update Message (2), length: 202
+ Withdrawn routes:
+ 0.0.0.0/0
+ (illegal prefix length) [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Attribute Set (128), length: 3, Flags [O]: [|bgp] [|bgp]
+ Update Message (2), length: 172
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 4, Flags [T]: 64520
+ 0x0000: 0201 fc08
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 131
+ 0x0000: 0000 0083
+ Local Preference (5), length: 12, Flags [T]: invalid len
+ 0x0000: 0000 0164 c010 0800 0249 8a00
+ Unknown Attribute (0), length: 90
+ no Attribute 0 decoder
+ 0x0000: 800a 04ac 1100 0080 2c8f ac11 0005 900e
+ 0x0010: 005f 0001 800c 0000 0000 0025 0000 3911
+ 0x0020: 0005 0074 0042 7100 0049 8a00 0000 5aac
+ 0x0030: 111e f072 4342 5100 0049 8a00 0000 5aac
+ 0x0040: 111e 0070 0042 3100 0049 8a00 0000 59ac
+ 0x0050: 1115 7000 4221 0000 498a
+ Unknown Attribute (0), length: 0
+ no Attribute 0 decoder
+ Unknown Attribute (172), length: 4372, Flags [TE+a]: [path attrs too short]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:610 (= 0.0.2.98)
+ 0x0000: 0002 498a 0000 0262
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.2
+ 0x0000: ac11 0002
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:610 (= 0.0.2.98), 172.17.33.32/28, label:1026 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0040 2100 0049 8a00 0002 62ac 1121
+ 0x0020: 20
+ 2 00:00:00.000000 00:18:74:2e:00:00 > 00:19:07:a8:fc:00, ethertype IPv4 (0x0800), length 897: (tos 0xc0, ttl 254, id 697, offset 0, flags [none], proto TCP (6), length 883)
+ 172.17.0.0.179 > 172.17.0.3.50651: Flags [P.], cksum 0xe2ab (correct), seq 1216:2035, ack 1, win 31761, options [md5 shared secret not supplied with -M, can't check - 0b82e9255cf2e845365aae9b7e70555e,eol], length 819: BGP [|bgp]
+ Update Message (2), length: 105
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:620 (= 0.0.2.108)
+ 0x0000: 0002 498a 0000 026c
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 32, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:620 (= 0.0.2.108), 172.17.161.0/24, label:1025 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0070 0040 1100 0049 8a00 0002 6cac 11a1
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:15232 (= 0.0.59.128)
+ 0x0000: 0002 498a 0000 3b80
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O+2]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 81, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:640 (= 0.0.2.128), 172.17.33.64/28, label:1812 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.17.33.80/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.17.34.0/28, label:1028 (bottom)
+ RD: 18826:640 (= 0.0.2.128), 172.17.34.16/28, label:1028 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0074 0071 4100 0049 8a00 0002 80ac 1121
+ 0x0020: 4074 0040 4100 0049 8a00 0002 80ac 1121
+ 0x0030: 5074 0040 4100 0049 8a00 0002 80ac 1122
+ 0x0040: 0074 0040 4100 0049 8a00 0002 80ac 1122
+ 0x0050: 10
+ Update Message (2), length: 202
+ Origin (1), length: 29442, Flags [PE+9]: [path attrs too short] [|bgp]
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:810 (= 0.0.3.42)
+ 0x0000: 0002 498a 0000 032a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 33, Flags [OE]:
+ AFI: Unknown AFI (257), SAFI: labeled VPN Unicast (128)
+ no AFI 257 / SAFI 128 decoder
+ 0x0000: 0101 800c 0000 5b00 0000 0000 ac11 0005
+ 0x0010: 0074 0040 0100 0049 8a00 0003 2aac 111e
+ 0x0020: c0 [|bgp]
+[|BGP Update]
+ 3 00:00:00.000000 00:18:74:2e:00:61 > 00:19:07:a8:fc:00, ethertype IPv4 (0x0800), length 1293: (tos 0xc0, ttl 254, id 698, offset 0, flags [none], proto TCP (6), length 1279)
+ 172.17.0.0.179 > 172.17.0.3.50651: Flags [.], cksum 0x2643 (incorrect -> 0x7d5b), seq 1998:3213, ack 1, win 31761, options [md5 shared secret not supplied with -M, can't check - 4acfb1877b3726db7a34342ce97845fb,eol], length 1215: BGP
+[|BGP Update]
+ 4 00:00:00.000000 00:18:74:2e:00:00 > 00:19:07:a8:fc:00, ethertype IPv4 (0x0800), length 65549: (tos 0xc0, ttl 254, id 699, offset 0, flags [none], proto TCP (6), length 65521, bad cksum 5e07 (->c65)!)
+ 172.17.0.0.179 > 172.17.85.3.50651: Flags [P.], cksum 0x2e84 (incorrect -> 0x75f7), seq 2419283368:2419348825, ack 1593006533, win 31761, options [md5 shared secret not supplied with -M, can't check - d044dbb15adad00232bad51aa84a6f4c,eol], length 65457: BGP [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.18.196.0, nh-length: 12
+ 21 SNPA
+ 0 bytes
+ 0 bytes
+ 138 bytes [|bgp] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:627 (= 0.0.2.115), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 73ac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:138 (= 0.0.0.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0000 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 74:2852126722 (= 170.0.0.2), 138.172.17.96/28, label:1028 (BOGUS: Bottom of Stack NOT set!)
+ (illegal prefix length)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 4000 0000 4aaa 0000 028a ac11
+ 0x0030: 6900 7400 4051 0000 498a 0000 028a ac11
+ 0x0040: 6920 7400 4051 0000 498a 0000 028a ac11
+ 0x0050: 6930 7400 4051 0000 498a 0000 028a ac11
+ 0x0060: c057 7400 4051 0000 498a 0000 028a ac11
+ 0x0070: c090 7200 40a1 0000 498a 0000 028a ac11
+ 0x0080: 1e [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40 [|bgp]
+ Update Message (2), length: 154
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:640 (= 0.0.2.128)
+ 0x0000: 0002 498a 0000 0280
+ Unknown Attribute (37), length: 0, Flags [O]:
+ no Attribute 37 decoder
+ AS4 Path (17), length: 0, Flags [OP+c]: empty
+ Attribute Set (128), length: 9
+ Origin AS: 78385408
+ Unknown Attribute (144), length: 14, Flags [+5]: [path attr too short]
+ 0x0000: 04ac
+ Origin (1), length: 128 [path attrs too short]
+ Update Message (2), length: 202
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 18826:650 (= 0.0.2.138)
+ 0x0000: 0002 498a 0000 028a
+ Cluster List (10), length: 4, Flags [O]: 172.17.0.0
+ 0x0000: ac11 0000
+ Originator ID (9), length: 4, Flags [O]: 172.17.0.5
+ 0x0000: ac11 0005
+ Multi-Protocol Reach NLRI (14), length: 129, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 172.17.0.5, nh-length: 12, no SNPA
+ RD: 18826:650 (= 0.0.2.138), 172.17.33.0/27, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.0/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.32/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.105.48/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.80/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.192.144/28, label:1029 (bottom)
+ RD: 18826:650 (= 0.0.2.138), 172.17.30.64/26, label:1034 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 ac11 0005
+ 0x0010: 0073 0040 5100 0049 8a00 0002 8aac 1121
+ 0x0020: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0030: 0074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0040: 2074 0040 5100 0049 8a00 0002 8aac 1169
+ 0x0050: 3074 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0060: 5774 0040 5100 0049 8a00 0002 8aac 11c0
+ 0x0070: 9072 0040 a100 0049 8a00 0002 8aac 111e
+ 0x0080: 40
+ Update Message (2), length: 106
+ Origin (1), length: 1, Flags [T]: Incomplete
+ 0x0000: 02
+ AS Path (2), length: 0, Flags [T]: empty
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ 0x0000: 0000 0000
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 2048, Flags [TE+3]: [path attrs too short] [|bgp]
+[|BGP Update]
diff --git a/tests/bgp-as-path-oobr.pcap b/tests/bgp-as-path-oobr.pcap
new file mode 100644
index 0000000..e504112
--- /dev/null
+++ b/tests/bgp-as-path-oobr.pcap
Binary files differ
diff --git a/tests/bgp-bgp_capabilities_print-oobr-1.out b/tests/bgp-bgp_capabilities_print-oobr-1.out
new file mode 100644
index 0000000..fb1a2c0
--- /dev/null
+++ b/tests/bgp-bgp_capabilities_print-oobr-1.out
@@ -0,0 +1,21 @@
+ 1 01:04:13.49220352 IP (tos 0x1f,CE, ttl 254, id 38671, offset 0, flags [+, DF, rsvd], proto TCP (6), length 4135, bad cksum 200 (->1fdd)!)
+ 226.219.0.0.179 > 16.233.34.0.100: Flags [SPUE], seq 347537408:347541483, win 511, urg 65535, options [eol], length 4075: BGP [|bgp]
+ Open Message (1), length: 59
+ Version 255, my AS 65528, Holdtime 4324s, ID 144.8.32.4
+ Optional parameters, length: 29
+ Option Unknown (0), length: 0
+ no decoder for option 0
+ Option Capabilities Advertisement (2), length: 8
+ Graceful Restart (64), length: 0 (too short, < 2)
+ Option Unknown (0), length: 2
+ no decoder for option 0
+ Option Capabilities Advertisement (2), length: 2
+ Unknown (232), length: 3
+ no decoder for Capability 232
+ 0x0000: 0207 04
+ Option Capabilities Advertisement (2), length: 7
+ Multiple Routes to a Destination (4), length: 0
+ no decoder for Capability 4
+ Multiple Labels (8), length: 0
+ Route Refresh (Cisco) (128), length: 0
+ Graceful Restart (64), length: 0 (too short, < 2)
diff --git a/tests/bgp-bgp_capabilities_print-oobr-1.pcap b/tests/bgp-bgp_capabilities_print-oobr-1.pcap
new file mode 100644
index 0000000..4abca9b
--- /dev/null
+++ b/tests/bgp-bgp_capabilities_print-oobr-1.pcap
Binary files differ
diff --git a/tests/bgp-bgp_capabilities_print-oobr-2.out b/tests/bgp-bgp_capabilities_print-oobr-2.out
new file mode 100644
index 0000000..229bd29
--- /dev/null
+++ b/tests/bgp-bgp_capabilities_print-oobr-2.out
@@ -0,0 +1,20 @@
+ 1 01:04:13.49220352 IP (tos 0x1f,CE, ttl 254, id 38671, offset 0, flags [+, DF, rsvd], proto TCP (6), length 4135, bad cksum 200 (->1fdd)!)
+ 226.219.0.0.179 > 16.233.34.0.100: Flags [SPUE], seq 347537408:347541483, win 511, urg 65535, options [eol], length 4075: BGP [|bgp]
+ Open Message (1), length: 59
+ Version 255, my AS 65528, Holdtime 4324s, ID 144.8.32.4
+ Optional parameters, length: 29
+ Option Unknown (0), length: 0
+ no decoder for option 0
+ Option Capabilities Advertisement (2), length: 8
+ Graceful Restart (64), length: 0 (too short, < 2)
+ Option Unknown (0), length: 2
+ no decoder for option 0
+ Option Capabilities Advertisement (2), length: 2
+ Unknown (232), length: 3
+ no decoder for Capability 232
+ 0x0000: 0207 04
+ Option Capabilities Advertisement (2), length: 7
+ Multiple Routes to a Destination (4), length: 0
+ no decoder for Capability 4
+ Multiple Labels (8), length: 0
+ Multiprotocol Extensions (1), length: 0 (too short, < 4)
diff --git a/tests/bgp-bgp_capabilities_print-oobr-2.pcap b/tests/bgp-bgp_capabilities_print-oobr-2.pcap
new file mode 100644
index 0000000..61946f9
--- /dev/null
+++ b/tests/bgp-bgp_capabilities_print-oobr-2.pcap
Binary files differ
diff --git a/tests/bgp-encap.out b/tests/bgp-encap.out
new file mode 100644
index 0000000..e76948a
--- /dev/null
+++ b/tests/bgp-encap.out
@@ -0,0 +1,15 @@
+ 1 12:59:23.482812 IP (tos 0xc0, ttl 255, id 48945, offset 0, flags [none], proto TCP (6), length 156)
+ 10.0.14.4.179 > 10.0.14.1.63656: Flags [P.], cksum 0xa26f (correct), seq 123918763:123918867, ack 3762271638, win 16384, options [nop,nop,TS val 2163155192 ecr 2226825164], length 104: BGP
+ Update Message (2), length: 104
+ Origin (1), length: 1, Flags [T]: IGP
+ AS Path (2), length: 0, Flags [T]: empty
+ Local Preference (5), length: 4, Flags [T]: 100
+ Extended Community (16), length: 16, Flags [OT]:
+ target (0x0002), Flags [none]: 65000:101 (= 0.0.0.101)
+ encapsulation (0x030c), Flags [none]: Tunnel type: VXLAN
+ Multi-Protocol Reach NLRI (14), length: 44, Flags [OE]:
+ AFI: VPLS (25), SAFI: EVPN (70)
+ no AFI 25 / SAFI 70 decoder
+ 0x0000: 0019 4604 0404 0404 0002 2100 0104 0404
+ 0x0010: 0400 0400 0000 0000 0000 0000 0000 0000
+ 0x0020: 0030 0206 0a0e faf3 0000 0065
diff --git a/tests/bgp-encap.pcap b/tests/bgp-encap.pcap
new file mode 100644
index 0000000..6fa0d25
--- /dev/null
+++ b/tests/bgp-encap.pcap
Binary files differ
diff --git a/tests/bgp-evpn.out b/tests/bgp-evpn.out
new file mode 100644
index 0000000..e423fb8
--- /dev/null
+++ b/tests/bgp-evpn.out
@@ -0,0 +1,23 @@
+ 1 14:33:30.055180 IP (tos 0xc0, ttl 255, id 64247, offset 0, flags [none], proto TCP (6), length 123)
+ 2.2.2.2.179 > 3.3.3.3.56988: Flags [P.], cksum 0x3c01 (correct), seq 334666955:334667026, ack 4146650227, win 16384, options [nop,nop,TS val 2156984502 ecr 2156984501], length 71: BGP
+ Open Message (1), length: 71
+ Version 4, my AS 65000, Holdtime 90s, ID 2.2.2.2
+ Optional parameters, length: 42
+ Option Capabilities Advertisement (2), length: 6
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI labeled VPN Unicast (128)
+ Option Capabilities Advertisement (2), length: 6
+ Multiprotocol Extensions (1), length: 4
+ AFI VPLS (25), SAFI EVPN (70)
+ Option Capabilities Advertisement (2), length: 2
+ Route Refresh (Cisco) (128), length: 0
+ Option Capabilities Advertisement (2), length: 2
+ Route Refresh (2), length: 0
+ Option Capabilities Advertisement (2), length: 4
+ Graceful Restart (64), length: 2
+ Restart Flags: [none], Restart Time 120s
+ Option Capabilities Advertisement (2), length: 6
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 65000
+ Option Capabilities Advertisement (2), length: 2
+ Long-lived Graceful Restart (71), length: 0
diff --git a/tests/bgp-evpn.pcap b/tests/bgp-evpn.pcap
new file mode 100644
index 0000000..9276352
--- /dev/null
+++ b/tests/bgp-evpn.pcap
Binary files differ
diff --git a/tests/bgp-extended-shutdown-msg.out b/tests/bgp-extended-shutdown-msg.out
new file mode 100644
index 0000000..709a467
--- /dev/null
+++ b/tests/bgp-extended-shutdown-msg.out
@@ -0,0 +1,3 @@
+ 1 08:40:34.846110 IP (tos 0xc0, ttl 1, id 27458, offset 0, flags [DF], proto TCP (6), length 284)
+ 192.168.10.123.36208 > 192.168.10.17.179: Flags [P.], cksum 0x415a (correct), seq 496762307:496762539, ack 691810051, win 502, options [nop,nop,TS val 822562185 ecr 4289027422], length 232: BGP
+ Notification Message (3), length: 232, Cease (6), subcode Administrative Shutdown (2), Shutdown Communication (length: 210): "[TICKET-1-1438367390] software upgrade; Expected downtime for 2 hours;[TICKET-1-1438367390] software upgrade; Expected downtime for 2 hours;[TICKET-1-1438367390] software upgrade; Expected downtime for 2 hours;"
diff --git a/tests/bgp-extended-shutdown-msg.pcapng b/tests/bgp-extended-shutdown-msg.pcapng
new file mode 100644
index 0000000..dff19cf
--- /dev/null
+++ b/tests/bgp-extended-shutdown-msg.pcapng
Binary files differ
diff --git a/tests/bgp-infinite-loop.pcap b/tests/bgp-infinite-loop.pcap
new file mode 100644
index 0000000..9f07d41
--- /dev/null
+++ b/tests/bgp-infinite-loop.pcap
Binary files differ
diff --git a/tests/bgp-large-community.out b/tests/bgp-large-community.out
new file mode 100644
index 0000000..fed214d
--- /dev/null
+++ b/tests/bgp-large-community.out
@@ -0,0 +1,42 @@
+ 1 07:21:26.812466 IP (tos 0x0, ttl 64, id 14630, offset 0, flags [DF], proto TCP (6), length 427)
+ 192.0.2.2.46605 > 192.0.2.3.179: Flags [P.], cksum 0x232f (correct), seq 1293104091:1293104466, ack 4093754554, win 457, options [nop,nop,TS val 68367 ecr 68367], length 375: BGP
+ Update Message (2), length: 75
+ Origin (1), length: 1, Flags [T]: IGP
+ AS Path (2), length: 6, Flags [T]: 65536
+ Next Hop (3), length: 4, Flags [T]: 192.0.2.2
+ Large Community (32), length: 24, Flags [OT]:
+ 65535:1:1, 4294967295:4294967295:4294967295
+ Updated routes:
+ 203.0.113.16/32
+ Update Message (2), length: 75
+ Origin (1), length: 1, Flags [T]: IGP
+ AS Path (2), length: 6, Flags [T]: 65536
+ Next Hop (3), length: 4, Flags [T]: 192.0.2.2
+ Large Community (32), length: 24, Flags [OT]:
+ 65536:1:1, 65536:1:2
+ Updated routes:
+ 203.0.113.12/32
+ Update Message (2), length: 63
+ Origin (1), length: 1, Flags [T]: IGP
+ AS Path (2), length: 6, Flags [T]: 65536
+ Next Hop (3), length: 4, Flags [T]: 192.0.2.2
+ Large Community (32), length: 12, Flags [OT]:
+ 65536:1:1
+ Updated routes:
+ 203.0.113.11/32
+ Update Message (2), length: 75
+ Origin (1), length: 1, Flags [T]: IGP
+ AS Path (2), length: 6, Flags [T]: 65536
+ Next Hop (3), length: 4, Flags [T]: 192.0.2.2
+ Large Community (32), length: 24, Flags [OT]:
+ 65536:0:1, 65536:1:0
+ Updated routes:
+ 203.0.113.15/32
+ Update Message (2), length: 87
+ Origin (1), length: 1, Flags [T]: IGP
+ AS Path (2), length: 6, Flags [T]: 65536
+ Next Hop (3), length: 4, Flags [T]: 192.0.2.2
+ Large Community (32), length: 36, Flags [OT]:
+ 65536:1:1, 65536:1:2, 65536:1:3
+ Updated routes:
+ 203.0.113.13/32
diff --git a/tests/bgp-large-community.pcap b/tests/bgp-large-community.pcap
new file mode 100644
index 0000000..7b5118d
--- /dev/null
+++ b/tests/bgp-large-community.pcap
Binary files differ
diff --git a/tests/bgp-link-bw-extcommunity.out b/tests/bgp-link-bw-extcommunity.out
new file mode 100644
index 0000000..b9616d8
--- /dev/null
+++ b/tests/bgp-link-bw-extcommunity.out
@@ -0,0 +1,63 @@
+ 1 07:51:47.389652 IP (tos 0xc0, ttl 64, id 60775, offset 0, flags [DF], proto TCP (6), length 460)
+ 192.168.10.249.36890 > 192.168.10.252.179: Flags [P.], cksum 0x87a4 (correct), seq 2387217692:2387218100, ack 685497494, win 229, options [nop,nop,TS val 7136044 ecr 4011453153], length 408: BGP
+ Update Message (2), length: 67
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 0, Flags [TE]: empty
+ Next Hop (3), length: 4, Flags [T]: 192.168.10.249
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ Local Preference (5), length: 4, Flags [T]: 100
+ Extended Community (16), length: 8, Flags [OT]:
+ link-BW (0x4004), Flags [non-transitive]: bandwidth: 1.000 Mbps
+ Updated routes:
+ 10.0.0.0/24
+ Update Message (2), length: 67
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 0, Flags [TE]: empty
+ Next Hop (3), length: 4, Flags [T]: 192.168.10.249
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ Local Preference (5), length: 4, Flags [T]: 100
+ Extended Community (16), length: 8, Flags [OT]:
+ link-BW (0x4004), Flags [non-transitive]: bandwidth: 1.000 Mbps
+ Updated routes:
+ 10.0.2.0/24
+ Update Message (2), length: 73
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 0, Flags [TE]: empty
+ Next Hop (3), length: 4, Flags [T]: 192.168.10.249
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ Local Preference (5), length: 4, Flags [T]: 100
+ Extended Community (16), length: 8, Flags [OT]:
+ link-BW (0x4004), Flags [non-transitive]: bandwidth: 1.000 Mbps
+ Updated routes:
+ 10.10.10.100/32
+ 10.10.10.200/32
+ Update Message (2), length: 67
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 0, Flags [TE]: empty
+ Next Hop (3), length: 4, Flags [T]: 192.168.10.249
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ Local Preference (5), length: 4, Flags [T]: 100
+ Extended Community (16), length: 8, Flags [OT]:
+ link-BW (0x4004), Flags [non-transitive]: bandwidth: 1.000 Mbps
+ Updated routes:
+ 192.168.0.0/24
+ Update Message (2), length: 67
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 0, Flags [TE]: empty
+ Next Hop (3), length: 4, Flags [T]: 192.168.10.249
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ Local Preference (5), length: 4, Flags [T]: 100
+ Extended Community (16), length: 8, Flags [OT]:
+ link-BW (0x4004), Flags [non-transitive]: bandwidth: 1.000 Mbps
+ Updated routes:
+ 192.168.1.0/24
+ Update Message (2), length: 67
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 0, Flags [TE]: empty
+ Next Hop (3), length: 4, Flags [T]: 192.168.10.249
+ Multi Exit Discriminator (4), length: 4, Flags [O]: 0
+ Local Preference (5), length: 4, Flags [T]: 100
+ Extended Community (16), length: 8, Flags [OT]:
+ link-BW (0x4004), Flags [non-transitive]: bandwidth: 1.000 Mbps
+ Updated routes:
+ 192.168.10.0/24
diff --git a/tests/bgp-link-bw-extcommunity.pcapng b/tests/bgp-link-bw-extcommunity.pcapng
new file mode 100644
index 0000000..c607d12
--- /dev/null
+++ b/tests/bgp-link-bw-extcommunity.pcapng
Binary files differ
diff --git a/tests/bgp-llgr.out b/tests/bgp-llgr.out
new file mode 100644
index 0000000..e423fb8
--- /dev/null
+++ b/tests/bgp-llgr.out
@@ -0,0 +1,23 @@
+ 1 14:33:30.055180 IP (tos 0xc0, ttl 255, id 64247, offset 0, flags [none], proto TCP (6), length 123)
+ 2.2.2.2.179 > 3.3.3.3.56988: Flags [P.], cksum 0x3c01 (correct), seq 334666955:334667026, ack 4146650227, win 16384, options [nop,nop,TS val 2156984502 ecr 2156984501], length 71: BGP
+ Open Message (1), length: 71
+ Version 4, my AS 65000, Holdtime 90s, ID 2.2.2.2
+ Optional parameters, length: 42
+ Option Capabilities Advertisement (2), length: 6
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI labeled VPN Unicast (128)
+ Option Capabilities Advertisement (2), length: 6
+ Multiprotocol Extensions (1), length: 4
+ AFI VPLS (25), SAFI EVPN (70)
+ Option Capabilities Advertisement (2), length: 2
+ Route Refresh (Cisco) (128), length: 0
+ Option Capabilities Advertisement (2), length: 2
+ Route Refresh (2), length: 0
+ Option Capabilities Advertisement (2), length: 4
+ Graceful Restart (64), length: 2
+ Restart Flags: [none], Restart Time 120s
+ Option Capabilities Advertisement (2), length: 6
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 65000
+ Option Capabilities Advertisement (2), length: 2
+ Long-lived Graceful Restart (71), length: 0
diff --git a/tests/bgp-lu-multiple-labels.out b/tests/bgp-lu-multiple-labels.out
new file mode 100644
index 0000000..5d69112
--- /dev/null
+++ b/tests/bgp-lu-multiple-labels.out
@@ -0,0 +1,189 @@
+ 1 20:31:17.039331 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 2.1.1.2 tell 2.1.1.1, length 28
+ 2 20:31:17.043641 ARP, Ethernet (len 6), IPv4 (len 4), Reply 2.1.1.2 is-at 00:00:76:02:00:00, length 28
+ 3 20:31:17.046848 IP (tos 0xc0, ttl 255, id 17243, offset 0, flags [DF], proto TCP (6), length 60)
+ 2.1.1.1.40760 > 2.1.1.2.179: Flags [S], cksum 0x9d32 (correct), seq 2629054509, win 29200, options [mss 1460,sackOK,TS val 1383297910 ecr 0,nop,wscale 9], length 0
+ 4 20:31:17.049070 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 2.1.1.2.179 > 2.1.1.1.40760: Flags [S.], cksum 0xd0ab (correct), seq 3800966379, ack 2629054510, win 28960, options [mss 1460,sackOK,TS val 1383297912 ecr 1383297910,nop,wscale 9], length 0
+ 5 20:31:17.050769 IP (tos 0xc0, ttl 255, id 17244, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.1.40760 > 2.1.1.2.179: Flags [.], cksum 0x705d (correct), ack 1, win 58, options [nop,nop,TS val 1383297913 ecr 1383297912], length 0
+ 6 20:31:17.051156 IP (tos 0xc0, ttl 255, id 17245, offset 0, flags [DF], proto TCP (6), length 123)
+ 2.1.1.1.40760 > 2.1.1.2.179: Flags [P.], cksum 0x5d4b (correct), seq 1:72, ack 1, win 58, options [nop,nop,TS val 1383297913 ecr 1383297912], length 71: BGP
+ Open Message (1), length: 71
+ Version 4, my AS 100, Holdtime 180s, ID 0.0.0.1
+ Optional parameters, length: 42
+ Option Capabilities Advertisement (2), length: 40
+ Graceful Restart (64), length: 2
+ Restart Flags: [R], Restart Time 300s
+ Multiple Labels (8), length: 4
+ AFI IPv4 (1), SAFI labeled Unicast (4), Count: 7
+ Route Refresh (2), length: 0
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI labeled Unicast (4)
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 100
+ Multiple Paths (69), length: 8
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ AFI IPv4 (1), SAFI labeled Unicast (4), Send/Receive: Receive
+ 7 20:31:17.054407 IP (tos 0xc0, ttl 255, id 22421, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.2.179 > 2.1.1.1.40760: Flags [.], cksum 0x7015 (correct), ack 72, win 57, options [nop,nop,TS val 1383297914 ecr 1383297913], length 0
+ 8 20:31:17.056592 IP (tos 0xc0, ttl 255, id 22422, offset 0, flags [DF], proto TCP (6), length 123)
+ 2.1.1.2.179 > 2.1.1.1.40760: Flags [P.], cksum 0x5c03 (correct), seq 1:72, ack 72, win 57, options [nop,nop,TS val 1383297914 ecr 1383297913], length 71: BGP
+ Open Message (1), length: 71
+ Version 4, my AS 100, Holdtime 180s, ID 0.0.1.1
+ Optional parameters, length: 42
+ Option Capabilities Advertisement (2), length: 40
+ Graceful Restart (64), length: 2
+ Restart Flags: [R], Restart Time 300s
+ Multiple Labels (8), length: 4
+ AFI IPv4 (1), SAFI labeled Unicast (4), Count: 7
+ Route Refresh (2), length: 0
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI labeled Unicast (4)
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 100
+ Multiple Paths (69), length: 8
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ AFI IPv4 (1), SAFI labeled Unicast (4), Send/Receive: Receive
+ 9 20:31:17.058139 IP (tos 0xc0, ttl 255, id 17246, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.1.40760 > 2.1.1.2.179: Flags [.], cksum 0x6fcc (correct), ack 72, win 58, options [nop,nop,TS val 1383297914 ecr 1383297914], length 0
+ 10 20:31:17.058330 IP (tos 0xc0, ttl 255, id 17247, offset 0, flags [DF], proto TCP (6), length 71)
+ 2.1.1.1.40760 > 2.1.1.2.179: Flags [P.], cksum 0x6b9d (correct), seq 72:91, ack 72, win 58, options [nop,nop,TS val 1383297915 ecr 1383297914], length 19: BGP
+ Keepalive Message (4), length: 19
+ 11 20:31:17.060679 IP (tos 0xc0, ttl 255, id 22423, offset 0, flags [DF], proto TCP (6), length 71)
+ 2.1.1.2.179 > 2.1.1.1.40760: Flags [P.], cksum 0x6b9e (correct), seq 72:91, ack 72, win 57, options [nop,nop,TS val 1383297915 ecr 1383297914], length 19: BGP
+ Keepalive Message (4), length: 19
+ 12 20:31:17.106221 IP (tos 0xc0, ttl 255, id 22424, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.2.179 > 2.1.1.1.40760: Flags [.], cksum 0x6f99 (correct), ack 91, win 57, options [nop,nop,TS val 1383297927 ecr 1383297915], length 0
+ 13 20:31:17.106294 IP (tos 0xc0, ttl 255, id 17248, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.1.40760 > 2.1.1.2.179: Flags [.], cksum 0x6f98 (correct), ack 91, win 58, options [nop,nop,TS val 1383297927 ecr 1383297915], length 0
+ 14 20:31:17.108030 IP (tos 0xc0, ttl 255, id 22425, offset 0, flags [DF], proto TCP (6), length 124)
+ 2.1.1.2.179 > 2.1.1.1.40760: Flags [P.], cksum 0x3776 (correct), seq 91:163, ack 91, win 57, options [nop,nop,TS val 1383297927 ecr 1383297927], length 72: BGP
+ Keepalive Message (4), length: 19
+ Update Message (2), length: 23
+ End-of-Rib Marker (empty NLRI)
+ Update Message (2), length: 30
+ Multi-Protocol Unreach NLRI (15), length: 3, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled Unicast (4)
+ End-of-Rib Marker (empty NLRI)
+ 15 20:31:17.108062 IP (tos 0xc0, ttl 255, id 17249, offset 0, flags [DF], proto TCP (6), length 71)
+ 2.1.1.1.40760 > 2.1.1.2.179: Flags [P.], cksum 0x6b5e (correct), seq 91:110, ack 91, win 58, options [nop,nop,TS val 1383297927 ecr 1383297927], length 19: BGP
+ Keepalive Message (4), length: 19
+ 16 20:31:17.109422 IP (tos 0xc0, ttl 255, id 22426, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.2.179 > 2.1.1.1.40760: Flags [.], cksum 0x6f32 (correct), ack 110, win 57, options [nop,nop,TS val 1383297927 ecr 1383297927], length 0
+ 17 20:31:17.109442 IP (tos 0xc0, ttl 255, id 17250, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.1.40760 > 2.1.1.2.179: Flags [.], cksum 0x6f31 (correct), ack 163, win 58, options [nop,nop,TS val 1383297927 ecr 1383297927], length 0
+ 18 20:31:20.832168 IP (tos 0xc0, ttl 255, id 17251, offset 0, flags [DF], proto TCP (6), length 125)
+ 2.1.1.1.40760 > 2.1.1.2.179: Flags [P.], cksum 0x083e (correct), seq 110:183, ack 163, win 58, options [nop,nop,TS val 1383298856 ecr 1383297927], length 73: BGP
+ Update Message (2), length: 73
+ Origin (1), length: 1, Flags [T]: IGP
+ AS Path (2), length: 6, Flags [T]: 200
+ Local Preference (5), length: 4, Flags [T]: 100
+ Multi-Protocol Reach NLRI (14), length: 26, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled Unicast (4)
+ nexthop: 1.1.1.2, nh-length: 4, no SNPA
+ (illegal prefix length)
+ 19 20:31:20.835653 IP (tos 0xc0, ttl 255, id 22427, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.2.179 > 2.1.1.1.40760: Flags [.], cksum 0x67a4 (correct), ack 183, win 57, options [nop,nop,TS val 1383298859 ecr 1383298856], length 0
+ 20 20:31:21.300725 IP (tos 0xc0, ttl 255, id 22428, offset 0, flags [DF], proto TCP (6), length 73)
+ 2.1.1.2.179 > 2.1.1.1.40760: Flags [P.], cksum 0x5ff8 (correct), seq 163:184, ack 183, win 57, options [nop,nop,TS val 1383298975 ecr 1383298856], length 21: BGP
+ Notification Message (3), length: 21, Cease (6), subcode Administrative Reset (4)
+ 21 20:31:21.302316 IP (tos 0xc0, ttl 255, id 22429, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.2.179 > 2.1.1.1.40760: Flags [F.], cksum 0x6719 (correct), seq 184, ack 183, win 57, options [nop,nop,TS val 1383298976 ecr 1383298856], length 0
+ 22 20:31:21.305985 IP (tos 0xc0, ttl 255, id 17252, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.1.40760 > 2.1.1.2.179: Flags [.], cksum 0x66a2 (correct), ack 184, win 58, options [nop,nop,TS val 1383298976 ecr 1383298975], length 0
+ 23 20:31:21.306119 IP (tos 0xc0, ttl 255, id 17253, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.1.40760 > 2.1.1.2.179: Flags [F.], cksum 0x669f (correct), seq 183, ack 185, win 58, options [nop,nop,TS val 1383298976 ecr 1383298976], length 0
+ 24 20:31:21.310203 IP (tos 0xc0, ttl 255, id 22430, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.2.179 > 2.1.1.1.40760: Flags [.], cksum 0x669f (correct), ack 184, win 57, options [nop,nop,TS val 1383298977 ecr 1383298976], length 0
+ 25 20:31:22.504930 IP (tos 0xc0, ttl 255, id 19963, offset 0, flags [DF], proto TCP (6), length 60)
+ 2.1.1.1.40808 > 2.1.1.2.179: Flags [S], cksum 0x0c2b (correct), seq 590099767, win 29200, options [mss 1460,sackOK,TS val 1383299276 ecr 0,nop,wscale 9], length 0
+ 26 20:31:22.507559 IP (tos 0xc0, ttl 255, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 2.1.1.2.179 > 2.1.1.1.40808: Flags [S.], cksum 0xe6b3 (correct), seq 4063717597, ack 590099768, win 28960, options [mss 1460,sackOK,TS val 1383299277 ecr 1383299276,nop,wscale 9], length 0
+ 27 20:31:22.510443 IP (tos 0xc0, ttl 255, id 19964, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.1.40808 > 2.1.1.2.179: Flags [.], cksum 0x8667 (correct), ack 1, win 58, options [nop,nop,TS val 1383299277 ecr 1383299277], length 0
+ 28 20:31:22.510598 IP (tos 0xc0, ttl 255, id 19965, offset 0, flags [DF], proto TCP (6), length 123)
+ 2.1.1.1.40808 > 2.1.1.2.179: Flags [P.], cksum 0x7355 (correct), seq 1:72, ack 1, win 58, options [nop,nop,TS val 1383299277 ecr 1383299277], length 71: BGP
+ Open Message (1), length: 71
+ Version 4, my AS 100, Holdtime 180s, ID 0.0.0.1
+ Optional parameters, length: 42
+ Option Capabilities Advertisement (2), length: 40
+ Graceful Restart (64), length: 2
+ Restart Flags: [R], Restart Time 300s
+ Multiple Labels (8), length: 4
+ AFI IPv4 (1), SAFI labeled Unicast (4), Count: 7
+ Route Refresh (2), length: 0
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI labeled Unicast (4)
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 100
+ Multiple Paths (69), length: 8
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ AFI IPv4 (1), SAFI labeled Unicast (4), Send/Receive: Receive
+ 29 20:31:22.514335 IP (tos 0xc0, ttl 255, id 4112, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.2.179 > 2.1.1.1.40808: Flags [.], cksum 0x8620 (correct), ack 72, win 57, options [nop,nop,TS val 1383299278 ecr 1383299277], length 0
+ 30 20:31:22.514472 IP (tos 0xc0, ttl 255, id 4113, offset 0, flags [DF], proto TCP (6), length 123)
+ 2.1.1.2.179 > 2.1.1.1.40808: Flags [P.], cksum 0x750d (correct), seq 1:72, ack 72, win 57, options [nop,nop,TS val 1383299279 ecr 1383299277], length 71: BGP
+ Open Message (1), length: 71
+ Version 4, my AS 100, Holdtime 180s, ID 0.0.1.1
+ Optional parameters, length: 42
+ Option Capabilities Advertisement (2), length: 40
+ Graceful Restart (64), length: 2
+ Restart Flags: [R], Restart Time 300s
+ Multiple Labels (8), length: 4
+ AFI IPv4 (1), SAFI labeled Unicast (4), Count: 4
+ Route Refresh (2), length: 0
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI Unicast (1)
+ Multiprotocol Extensions (1), length: 4
+ AFI IPv4 (1), SAFI labeled Unicast (4)
+ 32-Bit AS Number (65), length: 4
+ 4 Byte AS 100
+ Multiple Paths (69), length: 8
+ AFI IPv4 (1), SAFI Unicast (1), Send/Receive: Receive
+ AFI IPv4 (1), SAFI labeled Unicast (4), Send/Receive: Receive
+ 31 20:31:22.518609 IP (tos 0xc0, ttl 255, id 19966, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.1.40808 > 2.1.1.2.179: Flags [.], cksum 0x85d5 (correct), ack 72, win 58, options [nop,nop,TS val 1383299279 ecr 1383299279], length 0
+ 32 20:31:22.518739 IP (tos 0xc0, ttl 255, id 19967, offset 0, flags [DF], proto TCP (6), length 71)
+ 2.1.1.1.40808 > 2.1.1.2.179: Flags [P.], cksum 0x81a6 (correct), seq 72:91, ack 72, win 58, options [nop,nop,TS val 1383299280 ecr 1383299279], length 19: BGP
+ Keepalive Message (4), length: 19
+ 33 20:31:22.522191 IP (tos 0xc0, ttl 255, id 4114, offset 0, flags [DF], proto TCP (6), length 71)
+ 2.1.1.2.179 > 2.1.1.1.40808: Flags [P.], cksum 0x81a7 (correct), seq 72:91, ack 72, win 57, options [nop,nop,TS val 1383299280 ecr 1383299279], length 19: BGP
+ Keepalive Message (4), length: 19
+ 34 20:31:22.562115 IP (tos 0xc0, ttl 255, id 4115, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.2.179 > 2.1.1.1.40808: Flags [.], cksum 0x85a3 (correct), ack 91, win 57, options [nop,nop,TS val 1383299291 ecr 1383299280], length 0
+ 35 20:31:22.564469 IP (tos 0xc0, ttl 255, id 19968, offset 0, flags [DF], proto TCP (6), length 144)
+ 2.1.1.1.40808 > 2.1.1.2.179: Flags [P.], cksum 0x7fc8 (correct), seq 91:183, ack 91, win 58, options [nop,nop,TS val 1383299291 ecr 1383299280], length 92: BGP
+ Keepalive Message (4), length: 19
+ Update Message (2), length: 73
+ Origin (1), length: 1, Flags [T]: IGP
+ AS Path (2), length: 6, Flags [T]: 200
+ Local Preference (5), length: 4, Flags [T]: 100
+ Multi-Protocol Reach NLRI (14), length: 26, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled Unicast (4)
+ nexthop: 1.1.1.2, nh-length: 4, no SNPA
+ (illegal prefix length)
+ 36 20:31:22.566720 IP (tos 0xc0, ttl 255, id 4116, offset 0, flags [DF], proto TCP (6), length 124)
+ 2.1.1.2.179 > 2.1.1.1.40808: Flags [P.], cksum 0x4d24 (correct), seq 91:163, ack 183, win 57, options [nop,nop,TS val 1383299292 ecr 1383299291], length 72: BGP
+ Keepalive Message (4), length: 19
+ Update Message (2), length: 23
+ End-of-Rib Marker (empty NLRI)
+ Update Message (2), length: 30
+ Multi-Protocol Unreach NLRI (15), length: 3, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled Unicast (4)
+ End-of-Rib Marker (empty NLRI)
+ 37 20:31:22.610077 IP (tos 0xc0, ttl 255, id 19969, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.1.40808 > 2.1.1.2.179: Flags [.], cksum 0x84e6 (correct), ack 163, win 58, options [nop,nop,TS val 1383299303 ecr 1383299292], length 0
+ 38 20:31:22.683430 IP (tos 0xc0, ttl 255, id 19970, offset 0, flags [DF], proto TCP (6), length 90)
+ 2.1.1.1.40808 > 2.1.1.2.179: Flags [P.], cksum 0x0069 (correct), seq 183:221, ack 163, win 58, options [nop,nop,TS val 1383299321 ecr 1383299292], length 38: BGP
+ Update Message (2), length: 38
+ Multi-Protocol Unreach NLRI (15), length: 11, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled Unicast (4)
+ 30.1.1.1/32, label:524288 (bottom)
+ 39 20:31:22.726086 IP (tos 0xc0, ttl 255, id 4117, offset 0, flags [DF], proto TCP (6), length 52)
+ 2.1.1.2.179 > 2.1.1.1.40808: Flags [.], cksum 0x8487 (correct), ack 221, win 57, options [nop,nop,TS val 1383299332 ecr 1383299321], length 0
diff --git a/tests/bgp-lu-multiple-labels.pcap b/tests/bgp-lu-multiple-labels.pcap
new file mode 100644
index 0000000..6643c99
--- /dev/null
+++ b/tests/bgp-lu-multiple-labels.pcap
Binary files differ
diff --git a/tests/bgp-rt-prefix.out b/tests/bgp-rt-prefix.out
new file mode 100644
index 0000000..0641a97
--- /dev/null
+++ b/tests/bgp-rt-prefix.out
@@ -0,0 +1,89 @@
+ 1 15:01:45.841851 IP (tos 0x0, ttl 64, id 62521, offset 0, flags [DF], proto TCP (6), length 110)
+ 1.0.0.2.42195 > 1.0.0.1.179: Flags [P.], cksum 0x6f82 (correct), seq 1362195181:1362195239, ack 648591571, win 58, options [nop,nop,TS val 2630416124 ecr 2630387382], length 58: BGP
+ Update Message (2), length: 58
+ Origin (1), length: 1, Flags [T]: EGP
+ AS Path (2), length: 4, Flags [T]: 200
+ Next Hop (3), length: 4, Flags [T]: 0.0.0.0
+ Multi-Protocol Reach NLRI (14), length: 14, Flags [O]:
+ AFI: IPv4 (1), vendor specific SAFI: Route Target Routing Information (132)
+ nexthop: 1.0.0.2, nh-length: 4, no SNPA
+ origin AS: 22, route-target: 0:0/0
+ 2 15:01:45.887255 IP (tos 0xc0, ttl 1, id 16100, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.179 > 1.0.0.2.42195: Flags [.], cksum 0x0391 (correct), ack 58, win 57, options [nop,nop,TS val 2630416135 ecr 2630416124], length 0
+ 3 15:01:45.887452 IP (tos 0x0, ttl 64, id 62522, offset 0, flags [DF], proto TCP (6), length 176)
+ 1.0.0.2.42195 > 1.0.0.1.179: Flags [P.], cksum 0xeffc (correct), seq 58:182, ack 1, win 58, options [nop,nop,TS val 2630416136 ecr 2630416135], length 124: BGP
+ Update Message (2), length: 60
+ Origin (1), length: 1, Flags [T]: EGP
+ AS Path (2), length: 4, Flags [T]: 200
+ Next Hop (3), length: 4, Flags [T]: 0.0.0.0
+ Multi-Protocol Reach NLRI (14), length: 16, Flags [O]:
+ AFI: IPv4 (1), vendor specific SAFI: Route Target Routing Information (132)
+ nexthop: 1.0.0.2, nh-length: 4, no SNPA
+ origin AS: 22, route-target: 0:0/16 (0002)
+ Update Message (2), length: 64
+ Origin (1), length: 1, Flags [T]: EGP
+ AS Path (2), length: 4, Flags [T]: 200
+ Next Hop (3), length: 4, Flags [T]: 0.0.0.0
+ Multi-Protocol Reach NLRI (14), length: 20, Flags [O]:
+ AFI: IPv4 (1), vendor specific SAFI: Route Target Routing Information (132)
+ nexthop: 1.0.0.2, nh-length: 4, no SNPA
+ origin AS: 22, route-target: 65536:0/48 (0202 0001 0000)
+ 4 15:01:45.887461 IP (tos 0xc0, ttl 1, id 16101, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.179 > 1.0.0.2.42195: Flags [.], cksum 0x0308 (correct), ack 182, win 57, options [nop,nop,TS val 2630416136 ecr 2630416136], length 0
+ 5 15:01:45.902997 IP (tos 0x0, ttl 64, id 62523, offset 0, flags [DF], proto TCP (6), length 118)
+ 1.0.0.2.42195 > 1.0.0.1.179: Flags [P.], cksum 0xf60d (correct), seq 182:248, ack 1, win 58, options [nop,nop,TS val 2630416139 ecr 2630416136], length 66: BGP
+ Update Message (2), length: 66
+ Origin (1), length: 1, Flags [T]: EGP
+ AS Path (2), length: 4, Flags [T]: 200
+ Next Hop (3), length: 4, Flags [T]: 0.0.0.0
+ Multi-Protocol Reach NLRI (14), length: 22, Flags [O]:
+ AFI: IPv4 (1), vendor specific SAFI: Route Target Routing Information (132)
+ nexthop: 1.0.0.2, nh-length: 4, no SNPA
+ origin AS: 22, route-target: 1:65537/64 (0002 0001 0001 0001)
+ 6 15:01:45.903022 IP (tos 0xc0, ttl 1, id 16102, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.179 > 1.0.0.2.42195: Flags [.], cksum 0x02c0 (correct), ack 248, win 57, options [nop,nop,TS val 2630416139 ecr 2630416139], length 0
+ 7 15:01:45.922092 IP (tos 0x0, ttl 64, id 62524, offset 0, flags [DF], proto TCP (6), length 118)
+ 1.0.0.2.42195 > 1.0.0.1.179: Flags [P.], cksum 0x6d25 (correct), seq 248:314, ack 1, win 58, options [nop,nop,TS val 2630416144 ecr 2630416139], length 66: BGP
+ Update Message (2), length: 66
+ Origin (1), length: 1, Flags [T]: EGP
+ AS Path (2), length: 4, Flags [T]: 200
+ Next Hop (3), length: 4, Flags [T]: 0.0.0.0
+ Multi-Protocol Reach NLRI (14), length: 22, Flags [O]:
+ AFI: IPv4 (1), vendor specific SAFI: Route Target Routing Information (132)
+ nexthop: 1.0.0.2, nh-length: 4, no SNPA
+ origin AS: 22, route-target: 100000:65535/64 (0202 0001 86a0 ffff)
+ 8 15:01:45.922106 IP (tos 0xc0, ttl 1, id 16103, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.179 > 1.0.0.2.42195: Flags [.], cksum 0x0274 (correct), ack 314, win 57, options [nop,nop,TS val 2630416144 ecr 2630416144], length 0
+ 9 15:01:45.945988 IP (tos 0x0, ttl 64, id 62525, offset 0, flags [DF], proto TCP (6), length 106)
+ 1.0.0.2.42195 > 1.0.0.1.179: Flags [P.], cksum 0x00d3 (correct), seq 314:368, ack 1, win 58, options [nop,nop,TS val 2630416150 ecr 2630416144], length 54: BGP
+ Update Message (2), length: 54
+ Origin (1), length: 1, Flags [T]: EGP
+ AS Path (2), length: 4, Flags [T]: 200
+ Next Hop (3), length: 4, Flags [T]: 0.0.0.0
+ Multi-Protocol Unreach NLRI (15), length: 10, Flags [O]:
+ AFI: IPv4 (1), vendor specific SAFI: Route Target Routing Information (132)
+ origin AS: 23, route-target: 0.0.0.0:0/16 (0102)
+ 10 15:01:45.946014 IP (tos 0xc0, ttl 1, id 16104, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.179 > 1.0.0.2.42195: Flags [.], cksum 0x0232 (correct), ack 368, win 57, options [nop,nop,TS val 2630416150 ecr 2630416150], length 0
+ 11 15:01:45.972778 IP (tos 0x0, ttl 64, id 62526, offset 0, flags [DF], proto TCP (6), length 111)
+ 1.0.0.2.42195 > 1.0.0.1.179: Flags [P.], cksum 0x1757 (correct), seq 368:427, ack 1, win 58, options [nop,nop,TS val 2630416157 ecr 2630416150], length 59: BGP
+ Update Message (2), length: 59
+ Origin (1), length: 1, Flags [T]: EGP
+ AS Path (2), length: 4, Flags [T]: 200
+ Next Hop (3), length: 4, Flags [T]: 0.0.0.0
+ Multi-Protocol Unreach NLRI (15), length: 15, Flags [O]:
+ AFI: IPv4 (1), vendor specific SAFI: Route Target Routing Information (132)
+ origin AS: 23, route-target: 1.2.3.4:57344/51 (0102 0102 0304 e0)
+ 12 15:01:45.972789 IP (tos 0xc0, ttl 1, id 16105, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.179 > 1.0.0.2.42195: Flags [.], cksum 0x01e9 (correct), ack 427, win 57, options [nop,nop,TS val 2630416157 ecr 2630416157], length 0
+ 13 15:01:45.997647 IP (tos 0x0, ttl 64, id 62527, offset 0, flags [DF], proto TCP (6), length 112)
+ 1.0.0.2.42195 > 1.0.0.1.179: Flags [P.], cksum 0xf5ff (correct), seq 427:487, ack 1, win 58, options [nop,nop,TS val 2630416163 ecr 2630416157], length 60: BGP
+ Update Message (2), length: 60
+ Origin (1), length: 1, Flags [T]: EGP
+ AS Path (2), length: 4, Flags [T]: 200
+ Next Hop (3), length: 4, Flags [T]: 0.0.0.0
+ Multi-Protocol Unreach NLRI (15), length: 16, Flags [O]:
+ AFI: IPv4 (1), vendor specific SAFI: Route Target Routing Information (132)
+ origin AS: 23, route-target: 1.2.3.4:65535/64 (0102 0102 0304 ffff)
+ 14 15:01:45.997673 IP (tos 0xc0, ttl 1, id 16106, offset 0, flags [DF], proto TCP (6), length 52)
+ 1.0.0.1.179 > 1.0.0.2.42195: Flags [.], cksum 0x01a1 (correct), ack 487, win 57, options [nop,nop,TS val 2630416163 ecr 2630416163], length 0
diff --git a/tests/bgp-rt-prefix.pcap b/tests/bgp-rt-prefix.pcap
new file mode 100644
index 0000000..7a1efd2
--- /dev/null
+++ b/tests/bgp-rt-prefix.pcap
Binary files differ
diff --git a/tests/bgp-shutdown-communication.out b/tests/bgp-shutdown-communication.out
new file mode 100644
index 0000000..44f7505
--- /dev/null
+++ b/tests/bgp-shutdown-communication.out
@@ -0,0 +1,6 @@
+ 1 17:08:52.850795 IP (tos 0xc0, ttl 255, id 40416, offset 0, flags [DF], proto TCP (6), length 126)
+ 165.254.255.24.179 > 165.254.255.17.33202: Flags [P.], cksum 0xa924 (correct), seq 633078120:633078194, ack 1987858625, win 2172, options [nop,nop,TS val 921581890 ecr 3129863171], length 74: BGP
+ Notification Message (3), length: 74, Cease (6), subcode Administrative Shutdown (2), Shutdown Communication (length: 52): "This is a test of the shutdown communication system."
+ 2 17:08:52.850795 IP (tos 0xc0, ttl 255, id 40416, offset 0, flags [DF], proto TCP (6), length 126)
+ 165.254.255.24.179 > 165.254.255.17.33202: Flags [P.], cksum 0xa724 (correct), seq 0:74, ack 1, win 2172, options [nop,nop,TS val 921581890 ecr 3129863171], length 74: BGP
+ Notification Message (3), length: 74, Cease (6), subcode Administrative Reset (4), Shutdown Communication (length: 52): "This is a test of the shutdown communication system."
diff --git a/tests/bgp-shutdown-communication.pcapng b/tests/bgp-shutdown-communication.pcapng
new file mode 100644
index 0000000..29b877f
--- /dev/null
+++ b/tests/bgp-shutdown-communication.pcapng
Binary files differ
diff --git a/tests/bgp_infloop-v.out b/tests/bgp_infloop-v.out
new file mode 100644
index 0000000..7564eee
--- /dev/null
+++ b/tests/bgp_infloop-v.out
@@ -0,0 +1,15 @@
+ 1 18:09:40.809286 IP (tos 0x0, ttl 128, id 1467, offset 0, flags [DF], proto TCP (6), length 74)
+ 196.59.48.65.14214 > 192.168.1.1.179: Flags [P.], cksum 0xbec1 (correct), seq 2470159403:2470159437, ack 160570221, win 8192, length 34: BGP
+ Update Message (2), length: 19 [|bgp]
+ 2 18:09:40.866491 IP (tos 0x0, ttl 64, id 39449, offset 0, flags [DF], proto TCP (6), length 74)
+ 235.101.90.12.60082 > 192.168.1.1.179: Flags [P.], cksum 0x742d (correct), seq 1978178:1978212, ack 2473062416, win 4096, length 34: BGP
+ Update Message (2), length: 19 [|bgp]
+ 3 18:09:40.926459 IP (tos 0x0, ttl 128, id 43331, offset 0, flags [DF], proto TCP (6), length 74)
+ 179.110.109.87.40936 > 192.168.1.1.179: Flags [P.], cksum 0xd82d (correct), seq 3014673177:3014673211, ack 1498443316, win 4096, length 34: BGP
+ Update Message (2), length: 19 [|bgp]
+ 4 18:09:40.986430 IP (tos 0x0, ttl 64, id 51082, offset 0, flags [DF], proto TCP (6), length 74)
+ 114.227.144.98.32757 > 192.168.1.1.179: Flags [P.], cksum 0xb456 (correct), seq 1117364848:1117364882, ack 3778435416, win 4096, length 34: BGP
+ Update Message (2), length: 19 [|bgp]
+ 5 18:09:41.046387 IP (tos 0x0, ttl 64, id 51082, offset 0, flags [DF], proto TCP (6), length 74)
+ 114.227.144.98.32757 > 192.168.1.1.179: Flags [P.], cksum 0xb456 (correct), seq 0:34, ack 1, win 4096, length 34: BGP
+ Update Message (2), length: 19 [|bgp]
diff --git a/tests/bgp_mp_reach_nlri-oobr.out b/tests/bgp_mp_reach_nlri-oobr.out
new file mode 100644
index 0000000..f855168
--- /dev/null
+++ b/tests/bgp_mp_reach_nlri-oobr.out
@@ -0,0 +1,20 @@
+ 1 04:29:01.371655446 IP (tos 0xff,CE, ttl 254, id 32783, offset 0, flags [rsvd], proto TCP (6), length 65535, bad cksum 8e15 (->5bbf)!)
+ 241.0.128.39.179 > 239.0.0.1.0: Flags [none], seq 4144029695:4144095150, win 65535, options [eol], length 65455: BGP [|bgp]
+ Update Message (2), length: 45
+ Withdrawn routes:
+ (illegal prefix length) [|bgp] [|bgp]
+ Update Message (2), length: 45
+ Withdrawn routes:
+ (illegal prefix length) [|bgp] [|bgp]
+ Update Message (2), length: 45
+ Withdrawn routes:
+ (illegal prefix length) [|bgp] [|bgp]
+ Update Message (2), length: 45
+ Withdrawn routes:
+ (illegal prefix length) [|bgp] [|bgp]
+ Update Message (2), length: 45
+ Withdrawn routes:
+ (illegal prefix length) [|bgp] [|bgp]
+ Update Message (2), length: 45
+ Withdrawn routes:
+ (illegal prefix length) [|bgp]
diff --git a/tests/bgp_mp_reach_nlri-oobr.pcap b/tests/bgp_mp_reach_nlri-oobr.pcap
new file mode 100644
index 0000000..d43e226
--- /dev/null
+++ b/tests/bgp_mp_reach_nlri-oobr.pcap
Binary files differ
diff --git a/tests/bgp_mvpn_6_and_7_oobr.out b/tests/bgp_mvpn_6_and_7_oobr.out
new file mode 100644
index 0000000..e65ebf0
--- /dev/null
+++ b/tests/bgp_mvpn_6_and_7_oobr.out
@@ -0,0 +1,5 @@
+ 1 06:35:44.134748448 IP (tos 0xc, ttl 254, id 21263, offset 0, flags [rsvd], proto TCP (6), length 517, bad cksum 8e15 (->99c9)!)
+ 241.0.93.20.179 > 255.247.0.1.200: Flags [none], seq 2146691977:2146692450, win 56026, options [unknown-161,eol], length 473: BGP
+ Update Message (2), length: 45
+ Withdrawn routes:
+ 255.123.0.0/16 [|bgp]
diff --git a/tests/bgp_mvpn_6_and_7_oobr.pcap b/tests/bgp_mvpn_6_and_7_oobr.pcap
new file mode 100644
index 0000000..6f4759c
--- /dev/null
+++ b/tests/bgp_mvpn_6_and_7_oobr.pcap
Binary files differ
diff --git a/tests/bgp_pmsi_tunnel-oobr.out b/tests/bgp_pmsi_tunnel-oobr.out
new file mode 100644
index 0000000..5dfec02
--- /dev/null
+++ b/tests/bgp_pmsi_tunnel-oobr.out
@@ -0,0 +1,5 @@
+ 1 00:20:33.149225750 IP (tos 0x0, ttl 254, id 40207, offset 0, flags [+, DF, rsvd], proto TCP (6), length 296, bad cksum 8e15 (->3eaa)!)
+ 241.0.32.19.179 > 239.0.0.1.0: Flags [none], seq 2146695561:2146695813, win 56026, options [unknown-161,eol], length 252: BGP
+ Update Message (2), length: 45
+ Withdrawn routes:
+ 24.13.0.0/16 [|bgp]
diff --git a/tests/bgp_pmsi_tunnel-oobr.pcap b/tests/bgp_pmsi_tunnel-oobr.pcap
new file mode 100644
index 0000000..ede82db
--- /dev/null
+++ b/tests/bgp_pmsi_tunnel-oobr.pcap
Binary files differ
diff --git a/tests/bgp_vpn_attrset.out b/tests/bgp_vpn_attrset.out
new file mode 100644
index 0000000..517205f
--- /dev/null
+++ b/tests/bgp_vpn_attrset.out
@@ -0,0 +1,19 @@
+ 1 12:51:14.453556 IP (tos 0xc0, ttl 62, id 58628, offset 0, flags [none], proto TCP (6), length 173)
+ 12.4.4.4.2051 > 12.1.1.1.179: Flags [P.], cksum 0xcf18 (correct), seq 3293077573:3293077694, ack 3348108582, win 16384, options [nop,nop,TS val 383131 ecr 890299], length 121: BGP
+ Update Message (2), length: 121
+ Origin (1), length: 1, Flags [T]: IGP
+ AS Path (2), length: 0, Flags [T]: empty
+ Local Preference (5), length: 4, Flags [T]: 100
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 300:300 (= 0.0.1.44)
+ Attribute Set (128), length: 36, Flags [OT]:
+ Origin AS: 65001
+ Origin (1), length: 1, Flags [T]: IGP
+ AS Path (2), length: 4, Flags [T]: 5555
+ Local Preference (5), length: 4, Flags [T]: 44
+ Originator ID (9), length: 4, Flags [O]: 22.5.5.5
+ Cluster List (10), length: 4, Flags [O]: 22.5.5.5
+ Multi-Protocol Reach NLRI (14), length: 30, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 12.4.4.4, nh-length: 12, no SNPA
+ RD: 500:500 (= 0.0.1.244), 133.0.0.0/8, label:100208 (bottom)
diff --git a/tests/bgp_vpn_attrset.pcap b/tests/bgp_vpn_attrset.pcap
new file mode 100644
index 0000000..e60aff5
--- /dev/null
+++ b/tests/bgp_vpn_attrset.pcap
Binary files differ
diff --git a/tests/bgp_vpn_rt-oobr.out b/tests/bgp_vpn_rt-oobr.out
new file mode 100644
index 0000000..321b73d
--- /dev/null
+++ b/tests/bgp_vpn_rt-oobr.out
@@ -0,0 +1,9 @@
+ 1 19:35:54.131862 IP (tos 0xc, ttl 254, id 21263, offset 0, flags [rsvd], proto TCP (6), length 60165, bad cksum 8e15 (->9eb8)!)
+ 241.0.128.19.179 > 239.8.0.1.0: Flags [none], seq 2146695561:2146755682, win 56026, options [unknown-161,eol], length 60121: BGP
+ Update Message (2), length: 45
+ Withdrawn routes:
+ 255.144.0.0/12 [|bgp] [|bgp]
+ Update Message (2), length: 45 [|bgp] [|bgp]
+ Update Message (2), length: 45
+ Withdrawn routes:
+ 255.112.0.0/12 [|bgp]
diff --git a/tests/bgp_vpn_rt-oobr.pcap b/tests/bgp_vpn_rt-oobr.pcap
new file mode 100644
index 0000000..6e18a22
--- /dev/null
+++ b/tests/bgp_vpn_rt-oobr.pcap
Binary files differ
diff --git a/tests/bootp_asan-2.out b/tests/bootp_asan-2.out
new file mode 100644
index 0000000..1e53ab9
--- /dev/null
+++ b/tests/bootp_asan-2.out
@@ -0,0 +1,2 @@
+ 1 00:00:00.000000 IP (tos 0x0, ttl 252, id 40207, offset 0, flags [+, DF, rsvd], proto UDP (17), length 60951, bad cksum ff (->8336)!)
+ 18.0.0.15.16896 > 107.95.83.32.68: BOOTP/DHCP, unknown (0x00), length 59384, htype 0, hlen 0, hops 13, xid 0x14000000, secs 3328 [|bootp]
diff --git a/tests/bootp_asan-2.pcap b/tests/bootp_asan-2.pcap
new file mode 100644
index 0000000..a79941f
--- /dev/null
+++ b/tests/bootp_asan-2.pcap
Binary files differ
diff --git a/tests/bootp_asan.out b/tests/bootp_asan.out
new file mode 100644
index 0000000..1e53ab9
--- /dev/null
+++ b/tests/bootp_asan.out
@@ -0,0 +1,2 @@
+ 1 00:00:00.000000 IP (tos 0x0, ttl 252, id 40207, offset 0, flags [+, DF, rsvd], proto UDP (17), length 60951, bad cksum ff (->8336)!)
+ 18.0.0.15.16896 > 107.95.83.32.68: BOOTP/DHCP, unknown (0x00), length 59384, htype 0, hlen 0, hops 13, xid 0x14000000, secs 3328 [|bootp]
diff --git a/tests/bootp_asan.pcap b/tests/bootp_asan.pcap
new file mode 100644
index 0000000..7c8a6ae
--- /dev/null
+++ b/tests/bootp_asan.pcap
Binary files differ
diff --git a/tests/brcm-tag-e.out b/tests/brcm-tag-e.out
new file mode 100644
index 0000000..7177014
--- /dev/null
+++ b/tests/brcm-tag-e.out
@@ -0,0 +1,23 @@
+ 1 02:10:20.634030 00:10:18:de:38:1e > ff:ff:ff:ff:ff:ff, BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0080, ethertype IPv4 (0x0800), length 346: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:10:18:de:38:1e, length 300
+ 2 02:10:20.696008 00:10:18:de:38:1e > ff:ff:ff:ff:ff:ff, BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0020, ethertype IPv4 (0x0800), length 346: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:10:18:de:38:1e, length 300
+ 3 02:10:23.151503 68:05:ca:18:47:70 > ff:ff:ff:ff:ff:ff, BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, ethertype IPv4 (0x0800), length 102: 192.168.1.1 > 192.168.1.255: ICMP echo request, id 22737, seq 1, length 64
+ 4 02:10:23.650963 00:10:18:de:38:1e > ff:ff:ff:ff:ff:ff, BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0080, ethertype IPv4 (0x0800), length 346: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:10:18:de:38:1e, length 300
+ 5 02:10:23.712960 00:10:18:de:38:1e > ff:ff:ff:ff:ff:ff, BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0020, ethertype IPv4 (0x0800), length 346: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:10:18:de:38:1e, length 300
+ 6 02:10:24.177588 68:05:ca:18:47:70 > ff:ff:ff:ff:ff:ff, BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, ethertype IPv4 (0x0800), length 102: 192.168.1.1 > 192.168.1.255: ICMP echo request, id 22737, seq 2, length 64
+ 7 02:10:25.201640 68:05:ca:18:47:70 > ff:ff:ff:ff:ff:ff, BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, ethertype IPv4 (0x0800), length 102: 192.168.1.1 > 192.168.1.255: ICMP echo request, id 22737, seq 3, length 64
+ 8 02:10:30.015266 68:05:ca:18:47:70 > 00:10:18:de:38:1e, BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, ethertype IPv4 (0x0800), length 102: 192.168.1.1 > 192.168.1.115: ICMP echo request, id 22744, seq 1, length 64
+ 9 02:10:30.015480 00:10:18:de:38:1e > 68:05:ca:18:47:70, BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0001, ethertype IPv4 (0x0800), length 102: 192.168.1.115 > 192.168.1.1: ICMP echo reply, id 22744, seq 1, length 64
+ 10 02:10:30.158348 00:10:18:de:38:1e > 68:05:ca:18:47:70, BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0001, ethertype IPv4 (0x0800), length 346: 192.168.1.115.68 > 192.168.1.1.67: BOOTP/DHCP, Request from 00:10:18:de:38:1e, length 300
+ 11 02:10:30.170023 68:05:ca:18:47:70 > 00:10:18:de:38:1e, BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, ethertype IPv4 (0x0800), length 346: 192.168.1.1.67 > 192.168.1.115.68: BOOTP/DHCP, Reply, length 300
+ 12 02:10:33.178632 00:10:18:de:38:1e > 68:05:ca:18:47:74, BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0002, ethertype IPv4 (0x0800), length 346: 192.168.3.23.68 > 192.168.3.1.67: BOOTP/DHCP, Request from 00:10:18:de:38:1e, length 300
+ 13 02:10:33.191027 68:05:ca:18:47:74 > 00:10:18:de:38:1e, BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 1, ethertype IPv4 (0x0800), length 346: 192.168.3.1.67 > 192.168.3.23.68: BOOTP/DHCP, Reply, length 300
+ 14 02:10:35.080973 00:10:18:de:38:1e > 68:05:ca:18:47:70, BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0001, ethertype ARP (0x0806), length 68: Request who-has 192.168.1.1 tell 192.168.1.115, length 50
+ 15 02:10:35.081198 68:05:ca:18:47:70 > 00:10:18:de:38:1e, BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, ethertype ARP (0x0806), length 64: Reply 192.168.1.1 is-at 68:05:ca:18:47:70, length 46
+ 16 02:10:35.249563 68:05:ca:18:47:70 > 00:10:18:de:38:1e, BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, ethertype ARP (0x0806), length 64: Request who-has 192.168.1.115 tell 192.168.1.1, length 46
+ 17 02:10:35.249634 00:10:18:de:38:1e > 68:05:ca:18:47:70, BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0001, ethertype ARP (0x0806), length 68: Reply 192.168.1.115 is-at 00:10:18:de:38:1e, length 50
+ 18 02:10:36.495763 68:05:ca:18:47:74 > 00:10:18:de:38:1e, BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 1, ethertype IPv4 (0x0800), length 102: 192.168.3.1 > 192.168.3.23: ICMP echo request, id 22748, seq 1, length 64
+ 19 02:10:36.495906 00:10:18:de:38:1e > 68:05:ca:18:47:74, BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0002, ethertype IPv4 (0x0800), length 102: 192.168.3.23 > 192.168.3.1: ICMP echo reply, id 22748, seq 1, length 64
+ 20 02:10:37.521654 68:05:ca:18:47:74 > 00:10:18:de:38:1e, BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 1, ethertype IPv4 (0x0800), length 102: 192.168.3.1 > 192.168.3.23: ICMP echo request, id 22748, seq 2, length 64
+ 21 02:10:37.521717 00:10:18:de:38:1e > 68:05:ca:18:47:74, BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0002, ethertype IPv4 (0x0800), length 102: 192.168.3.23 > 192.168.3.1: ICMP echo reply, id 22748, seq 2, length 64
+ 22 02:10:38.321557 68:05:ca:18:47:74 > 00:10:18:de:38:1e, BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 1, ethertype ARP (0x0806), length 64: Request who-has 192.168.3.23 tell 192.168.3.1, length 46
+ 23 02:10:38.321602 00:10:18:de:38:1e > 68:05:ca:18:47:74, BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0002, ethertype ARP (0x0806), length 68: Reply 192.168.3.23 is-at 00:10:18:de:38:1e, length 50
diff --git a/tests/brcm-tag-prepend.out b/tests/brcm-tag-prepend.out
new file mode 100644
index 0000000..36153e2
--- /dev/null
+++ b/tests/brcm-tag-prepend.out
@@ -0,0 +1,15 @@
+ 1 04:48:55.079276 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 5, 68:05:ca:18:47:70 > 8a:62:38:14:5d:0b, ethertype IPv4 (0x0800), length 98: 192.168.1.1 > 192.168.1.151: ICMP echo request, id 2129, seq 1, length 64
+ 2 04:48:55.079338 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0020, 8a:62:38:14:5d:0b > 68:05:ca:18:47:70, ethertype IPv4 (0x0800), length 98: 192.168.1.151 > 192.168.1.1: ICMP echo reply, id 2129, seq 1, length 64
+ 3 04:48:56.088510 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 5, 68:05:ca:18:47:70 > 8a:62:38:14:5d:0b, ethertype IPv4 (0x0800), length 98: 192.168.1.1 > 192.168.1.151: ICMP echo request, id 2129, seq 2, length 64
+ 4 04:48:56.088532 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0020, 8a:62:38:14:5d:0b > 68:05:ca:18:47:70, ethertype IPv4 (0x0800), length 98: 192.168.1.151 > 192.168.1.1: ICMP echo reply, id 2129, seq 2, length 64
+ 5 04:48:57.112480 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 5, 68:05:ca:18:47:70 > 8a:62:38:14:5d:0b, ethertype IPv4 (0x0800), length 98: 192.168.1.1 > 192.168.1.151: ICMP echo request, id 2129, seq 3, length 64
+ 6 04:48:57.112498 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0020, 8a:62:38:14:5d:0b > 68:05:ca:18:47:70, ethertype IPv4 (0x0800), length 98: 192.168.1.151 > 192.168.1.1: ICMP echo reply, id 2129, seq 3, length 64
+ 7 04:48:58.136493 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 5, 68:05:ca:18:47:70 > 8a:62:38:14:5d:0b, ethertype IPv4 (0x0800), length 98: 192.168.1.1 > 192.168.1.151: ICMP echo request, id 2129, seq 4, length 64
+ 8 04:48:58.136510 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0020, 8a:62:38:14:5d:0b > 68:05:ca:18:47:70, ethertype IPv4 (0x0800), length 98: 192.168.1.151 > 192.168.1.1: ICMP echo reply, id 2129, seq 4, length 64
+ 9 04:49:00.184465 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 5, 68:05:ca:18:47:70 > 8a:62:38:14:5d:0b, ethertype ARP (0x0806), length 60: Request who-has 192.168.1.151 tell 192.168.1.1, length 46
+ 10 04:49:00.184481 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0020, 8a:62:38:14:5d:0b > 68:05:ca:18:47:70, ethertype ARP (0x0806), length 64: Reply 192.168.1.151 is-at 8a:62:38:14:5d:0b, length 50
+ 11 04:49:00.383017 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0020, 8a:62:38:14:5d:0b > 68:05:ca:18:47:70, ethertype ARP (0x0806), length 64: Request who-has 192.168.1.1 tell 192.168.1.151, length 50
+ 12 04:49:00.383155 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 5, 68:05:ca:18:47:70 > 8a:62:38:14:5d:0b, ethertype ARP (0x0806), length 60: Reply 192.168.1.1 is-at 68:05:ca:18:47:70, length 46
+ 13 04:49:00.607178 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 5, 68:05:ca:18:47:70 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 98: 192.168.1.1 > 192.168.1.255: ICMP echo request, id 2132, seq 1, length 64
+ 14 04:49:01.624629 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 5, 68:05:ca:18:47:70 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 98: 192.168.1.1 > 192.168.1.255: ICMP echo request, id 2132, seq 2, length 64
+ 15 04:49:02.648563 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 5, 68:05:ca:18:47:70 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 98: 192.168.1.1 > 192.168.1.255: ICMP echo request, id 2132, seq 3, length 64
diff --git a/tests/brcm-tag-prepend.pcap b/tests/brcm-tag-prepend.pcap
new file mode 100644
index 0000000..894d1ee
--- /dev/null
+++ b/tests/brcm-tag-prepend.pcap
Binary files differ
diff --git a/tests/brcm-tag.out b/tests/brcm-tag.out
new file mode 100644
index 0000000..06f96ad
--- /dev/null
+++ b/tests/brcm-tag.out
@@ -0,0 +1,23 @@
+ 1 02:10:20.634030 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0080, IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:10:18:de:38:1e, length 300
+ 2 02:10:20.696008 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0020, IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:10:18:de:38:1e, length 300
+ 3 02:10:23.151503 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, IP 192.168.1.1 > 192.168.1.255: ICMP echo request, id 22737, seq 1, length 64
+ 4 02:10:23.650963 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0080, IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:10:18:de:38:1e, length 300
+ 5 02:10:23.712960 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0020, IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:10:18:de:38:1e, length 300
+ 6 02:10:24.177588 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, IP 192.168.1.1 > 192.168.1.255: ICMP echo request, id 22737, seq 2, length 64
+ 7 02:10:25.201640 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, IP 192.168.1.1 > 192.168.1.255: ICMP echo request, id 22737, seq 3, length 64
+ 8 02:10:30.015266 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, IP 192.168.1.1 > 192.168.1.115: ICMP echo request, id 22744, seq 1, length 64
+ 9 02:10:30.015480 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0001, IP 192.168.1.115 > 192.168.1.1: ICMP echo reply, id 22744, seq 1, length 64
+ 10 02:10:30.158348 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0001, IP 192.168.1.115.68 > 192.168.1.1.67: BOOTP/DHCP, Request from 00:10:18:de:38:1e, length 300
+ 11 02:10:30.170023 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, IP 192.168.1.1.67 > 192.168.1.115.68: BOOTP/DHCP, Reply, length 300
+ 12 02:10:33.178632 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0002, IP 192.168.3.23.68 > 192.168.3.1.67: BOOTP/DHCP, Request from 00:10:18:de:38:1e, length 300
+ 13 02:10:33.191027 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 1, IP 192.168.3.1.67 > 192.168.3.23.68: BOOTP/DHCP, Reply, length 300
+ 14 02:10:35.080973 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0001, ARP, Request who-has 192.168.1.1 tell 192.168.1.115, length 50
+ 15 02:10:35.081198 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, ARP, Reply 192.168.1.1 is-at 68:05:ca:18:47:70, length 46
+ 16 02:10:35.249563 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 0, ARP, Request who-has 192.168.1.115 tell 192.168.1.1, length 46
+ 17 02:10:35.249634 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0001, ARP, Reply 192.168.1.115 is-at 00:10:18:de:38:1e, length 50
+ 18 02:10:36.495763 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 1, IP 192.168.3.1 > 192.168.3.23: ICMP echo request, id 22748, seq 1, length 64
+ 19 02:10:36.495906 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0002, IP 192.168.3.23 > 192.168.3.1: ICMP echo reply, id 22748, seq 1, length 64
+ 20 02:10:37.521654 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 1, IP 192.168.3.1 > 192.168.3.23: ICMP echo request, id 22748, seq 2, length 64
+ 21 02:10:37.521717 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0002, IP 192.168.3.23 > 192.168.3.1: ICMP echo reply, id 22748, seq 2, length 64
+ 22 02:10:38.321557 BRCM tag OP: EG, CID: 0, RC: exception, TC: 0, port: 1, ARP, Request who-has 192.168.3.23 tell 192.168.3.1, length 46
+ 23 02:10:38.321602 BRCM tag OP: IG, TC: 0, TE: None, TS: 0, DST map: 0x0002, ARP, Reply 192.168.3.23 is-at 00:10:18:de:38:1e, length 50
diff --git a/tests/brcm-tag.pcap b/tests/brcm-tag.pcap
new file mode 100644
index 0000000..50b415d
--- /dev/null
+++ b/tests/brcm-tag.pcap
Binary files differ
diff --git a/tests/calm-fast-mac-lookup-heapoverflow.out b/tests/calm-fast-mac-lookup-heapoverflow.out
new file mode 100644
index 0000000..d8b64a5
--- /dev/null
+++ b/tests/calm-fast-mac-lookup-heapoverflow.out
@@ -0,0 +1,5 @@
+ 1 05:27:12.808464432 Q.922, invalid address
+ 2 05:27:12.808464432 CALM FAST; SrcNwref:48; DstNwref:48;
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 0000000000 [|calm_fast]
diff --git a/tests/calm-fast-mac-lookup-heapoverflow.pcap b/tests/calm-fast-mac-lookup-heapoverflow.pcap
new file mode 100644
index 0000000..15744a9
--- /dev/null
+++ b/tests/calm-fast-mac-lookup-heapoverflow.pcap
Binary files differ
diff --git a/tests/cdp-v.out b/tests/cdp-v.out
new file mode 100644
index 0000000..78e5011
--- /dev/null
+++ b/tests/cdp-v.out
@@ -0,0 +1,57 @@
+ 1 11:46:08.367761 CDPv2, ttl: 180s, checksum: 0xb0bd (unverified), length 378
+ Device-ID (0x01), value length: 6 bytes: 'Switch'
+ Version String (0x05), value length: 192 bytes:
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(25)SEB4, RELEASE SOFTWARE (fc1)
+ Copyright (c) 1986-2005 by Cisco Systems, Inc.
+ Compiled Tue 30-Aug-05 17:56 by yenanh
+ Platform (0x06), value length: 20 bytes: 'cisco WS-C3560G-24PS'
+ Address (0x02), value length: 13 bytes: IPv4 (1) 192.168.0.1
+ Port-ID (0x03), value length: 18 bytes: 'GigabitEthernet0/5'
+ Capability (0x04), value length: 4 bytes: (0x00000028): L2 Switch, IGMP snooping
+ Protocol-Hello option (0x08), value length: 32 bytes:
+ VTP Management Domain (0x09), value length: 3 bytes: 'Lab'
+ Native VLAN ID (0x0a), value length: 2 bytes: 1
+ Duplex (0x0b), value length: 1 byte: full
+ AVVID trust bitmap (0x12), value length: 1 byte: 0x00
+ AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00
+ Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 192.168.0.1
+ unknown field type (0x1a), value length: 12 bytes:
+ 0x0000: 0000 0001 0000 0000 ffff ffff
+ 2 11:47:08.378706 CDPv2, ttl: 180s, checksum: 0xb0bd (unverified), length 378
+ Device-ID (0x01), value length: 6 bytes: 'Switch'
+ Version String (0x05), value length: 192 bytes:
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(25)SEB4, RELEASE SOFTWARE (fc1)
+ Copyright (c) 1986-2005 by Cisco Systems, Inc.
+ Compiled Tue 30-Aug-05 17:56 by yenanh
+ Platform (0x06), value length: 20 bytes: 'cisco WS-C3560G-24PS'
+ Address (0x02), value length: 13 bytes: IPv4 (1) 192.168.0.1
+ Port-ID (0x03), value length: 18 bytes: 'GigabitEthernet0/5'
+ Capability (0x04), value length: 4 bytes: (0x00000028): L2 Switch, IGMP snooping
+ Protocol-Hello option (0x08), value length: 32 bytes:
+ VTP Management Domain (0x09), value length: 3 bytes: 'Lab'
+ Native VLAN ID (0x0a), value length: 2 bytes: 1
+ Duplex (0x0b), value length: 1 byte: full
+ AVVID trust bitmap (0x12), value length: 1 byte: 0x00
+ AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00
+ Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 192.168.0.1
+ unknown field type (0x1a), value length: 12 bytes:
+ 0x0000: 0000 0001 0000 0000 ffff ffff
+ 3 11:48:08.392643 CDPv2, ttl: 180s, checksum: 0xb0bd (unverified), length 378
+ Device-ID (0x01), value length: 6 bytes: 'Switch'
+ Version String (0x05), value length: 192 bytes:
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(25)SEB4, RELEASE SOFTWARE (fc1)
+ Copyright (c) 1986-2005 by Cisco Systems, Inc.
+ Compiled Tue 30-Aug-05 17:56 by yenanh
+ Platform (0x06), value length: 20 bytes: 'cisco WS-C3560G-24PS'
+ Address (0x02), value length: 13 bytes: IPv4 (1) 192.168.0.1
+ Port-ID (0x03), value length: 18 bytes: 'GigabitEthernet0/5'
+ Capability (0x04), value length: 4 bytes: (0x00000028): L2 Switch, IGMP snooping
+ Protocol-Hello option (0x08), value length: 32 bytes:
+ VTP Management Domain (0x09), value length: 3 bytes: 'Lab'
+ Native VLAN ID (0x0a), value length: 2 bytes: 1
+ Duplex (0x0b), value length: 1 byte: full
+ AVVID trust bitmap (0x12), value length: 1 byte: 0x00
+ AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00
+ Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 192.168.0.1
+ unknown field type (0x1a), value length: 12 bytes:
+ 0x0000: 0000 0001 0000 0000 ffff ffff
diff --git a/tests/cfm_sender_id-oobr.out b/tests/cfm_sender_id-oobr.out
new file mode 100644
index 0000000..46358da
--- /dev/null
+++ b/tests/cfm_sender_id-oobr.out
@@ -0,0 +1,8 @@
+ 1 06:58:21.68157443 CFMv0 unknown (255), MD Level 0, length 65556
+ First TLV offset 0
+ 0x0000: ff00 0001 0004 0104 9a00 000c fb
+ Unknown TLV (0xff), length 0
+ Sender ID TLV (0x01), length 4
+ Chassis-ID Type MAC address (4), Chassis-ID length 1 (invalid MAC address length)
+ Management Address Domain Length 0
+ End TLV (0x00)
diff --git a/tests/cfm_sender_id-oobr.pcap b/tests/cfm_sender_id-oobr.pcap
new file mode 100644
index 0000000..f72af37
--- /dev/null
+++ b/tests/cfm_sender_id-oobr.pcap
Binary files differ
diff --git a/tests/chdlc-slarp-short.pcap b/tests/chdlc-slarp-short.pcap
new file mode 100644
index 0000000..41313dc
--- /dev/null
+++ b/tests/chdlc-slarp-short.pcap
Binary files differ
diff --git a/tests/chdlc-slarp.pcap b/tests/chdlc-slarp.pcap
new file mode 100644
index 0000000..1521443
--- /dev/null
+++ b/tests/chdlc-slarp.pcap
Binary files differ
diff --git a/tests/crypto.tests b/tests/crypto.tests
new file mode 100644
index 0000000..dc16edb
--- /dev/null
+++ b/tests/crypto.tests
@@ -0,0 +1,116 @@
+# -*- perl -*-
+
+# Only attempt OpenSSL-specific tests when compiled with the library.
+# Reading the secret(s) from a file does not work with Capsicum.
+
+$testlist = [
+ {
+ config_set => 'HAVE_LIBCRYPTO',
+ name => 'esp1',
+ input => '02-sunrise-sunset-esp.pcap',
+ output => 'esp1.out',
+ args => '-E "0x12345678@192.1.2.45 3des-cbc-hmac96:0x4043434545464649494a4a4c4c4f4f515152525454575758"'
+ },
+
+ {
+ config_set => 'HAVE_LIBCRYPTO',
+ name => 'esp2',
+ input => '08-sunrise-sunset-esp2.pcap',
+ output => 'esp2.out',
+ args => '-E "0x12345678@192.1.2.45 3des-cbc-hmac96:0x43434545464649494a4a4c4c4f4f51515252545457575840,0xabcdabcd@192.0.1.1 3des-cbc-hmac96:0x434545464649494a4a4c4c4f4f5151525254545757584043"'
+ },
+
+ {
+ config_set => 'HAVE_LIBCRYPTO',
+ name => 'esp3',
+ input => '02-sunrise-sunset-esp.pcap',
+ output => 'esp1.out',
+ args => '-E "3des-cbc-hmac96:0x4043434545464649494a4a4c4c4f4f515152525454575758"',
+ },
+
+ {
+ config_set => 'HAVE_LIBCRYPTO',
+ config_unset => 'HAVE_CAPSICUM',
+ name => 'esp4',
+ input => '08-sunrise-sunset-esp2.pcap',
+ output => 'esp2.out',
+ args => '-E "file @TESTDIR@/esp-secrets.txt"',
+ },
+
+ {
+ config_set => 'HAVE_LIBCRYPTO',
+ config_unset => 'HAVE_CAPSICUM',
+ name => 'esp5',
+ input => '08-sunrise-sunset-aes.pcap',
+ output => 'esp5.out',
+ args => '-E "file @TESTDIR@/esp-secrets.txt"',
+ },
+
+ {
+ config_set => 'HAVE_LIBCRYPTO',
+ config_unset => 'HAVE_CAPSICUM',
+ name => 'espudp1',
+ input => 'espudp1.pcap',
+ output => 'espudp1.out',
+ args => '-nnnn -E "file @TESTDIR@/esp-secrets.txt"',
+ },
+
+ {
+ config_set => 'HAVE_LIBCRYPTO',
+ config_unset => 'HAVE_CAPSICUM',
+ name => 'ikev2pI2',
+ input => 'ikev2pI2.pcap',
+ output => 'ikev2pI2.out',
+ args => '-v -v -v -v -E "file @TESTDIR@/ikev2pI2-secrets.txt"',
+ },
+
+ {
+ config_set => 'HAVE_LIBCRYPTO',
+ config_unset => 'HAVE_CAPSICUM',
+ name => 'isakmp4',
+ input => 'isakmp4500.pcap',
+ output => 'isakmp4.out',
+ args => '-E "file @TESTDIR@/esp-secrets.txt"',
+ },
+
+ #bgp-as-path-oobr-ssl ${testsdir}/bgp-as-path-oobr.pcap ${testsdir}/bgp-as-path-oobr-ssl.out '-vvv -e'
+ {
+ config_set => 'HAVE_LIBCRYPTO',
+ name => 'bgp-as-path-oobr-ssl',
+ input => 'bgp-as-path-oobr.pcap',
+ output => 'bgp-as-path-oobr-ssl.out',
+ args => '-vvv -e'
+ },
+
+ # bgp-aigp-oobr-ssl ${testsdir}/bgp-aigp-oobr.pcap ${testsdir}/bgp-aigp-oobr-ssl.out '-vvv -e'
+ {
+ config_set => 'HAVE_LIBCRYPTO',
+ name => 'bgp-aigp-oobr-ssl',
+ input => 'bgp-aigp-oobr.pcap',
+ output => 'bgp-aigp-oobr-ssl.out',
+ args => '-vvv -e'
+ },
+
+ # bgp-as-path-oobr-nossl ${testsdir}/bgp-as-path-oobr.pcap ${testsdir}/bgp-as-path-oobr-nossl.out '-vvv -e'
+ {
+ config_unset => 'HAVE_LIBCRYPTO',
+ name => 'bgp-as-path-oobr-nossl',
+ input => 'bgp-as-path-oobr.pcap',
+ output => 'bgp-as-path-oobr-nossl.out',
+ args => '-vvv -e'
+ },
+
+ # bgp-aigp-oobr-nossl ${testsdir}/bgp-aigp-oobr.pcap ${testsdir}/bgp-aigp-oobr-nossl.out '-vvv -e'
+ {
+ config_unset => 'HAVE_LIBCRYPTO',
+ name => 'bgp-aigp-oobr-nossl',
+ input => 'bgp-aigp-oobr.pcap',
+ output => 'bgp-aigp-oobr-nossl.out',
+ args => '-vvv -e'
+ },
+
+ ];
+
+1;
+
+
diff --git a/tests/cve-2014-8767-OLSR.out b/tests/cve-2014-8767-OLSR.out
new file mode 100644
index 0000000..17cc02f
--- /dev/null
+++ b/tests/cve-2014-8767-OLSR.out
@@ -0,0 +1,4 @@
+ 1 19:21:28.819006 IP (tos 0x15,ECT(1), ttl 77, id 62335, offset 0, flags [DF], proto UDP (17), length 61, bad cksum 30c6 (->22af)!)
+ 10.1.1.104.698 > 10.2.2.2.514: OLSRv4, seq 0x0202, length 33
+ TC Message (0x02), originator 2.2.2.2, ttl 2, hop 2
+ vtime 0.070s, msg-seq 0x0202, length 2 (invalid)
diff --git a/tests/cve-2014-8767-OLSR.pcap b/tests/cve-2014-8767-OLSR.pcap
new file mode 100644
index 0000000..67036ed
--- /dev/null
+++ b/tests/cve-2014-8767-OLSR.pcap
Binary files differ
diff --git a/tests/cve-2014-8768-Geonet.out b/tests/cve-2014-8768-Geonet.out
new file mode 100644
index 0000000..df62767
--- /dev/null
+++ b/tests/cve-2014-8768-Geonet.out
@@ -0,0 +1 @@
+ 1 19:12:12.609449 GeoNet src:07:07:07:07:07:07; v:12 NH:6-Unknown HT:5-1-TopoScopeBcast-MH HopLim:7 Payload:1799 GN_ADDR:ef:06:07:35:97:00:24:8c lat:4521984 lon:1039368000 (header size 32 > 25) (invalid)
diff --git a/tests/cve-2014-8768-Geonet.pcap b/tests/cve-2014-8768-Geonet.pcap
new file mode 100644
index 0000000..345ed24
--- /dev/null
+++ b/tests/cve-2014-8768-Geonet.pcap
Binary files differ
diff --git a/tests/cve-2014-8769-AODV.out b/tests/cve-2014-8769-AODV.out
new file mode 100644
index 0000000..2a73aa8
--- /dev/null
+++ b/tests/cve-2014-8769-AODV.out
@@ -0,0 +1,2 @@
+ 1 19:22:25.721827 IP truncated-ip - 58880 bytes missing! (tos 0x0, ttl 64, id 62335, offset 0, flags [DF], proto UDP (17), length 58941, bad cksum 30c6 (->49c3)!)
+ 10.1.1.104.654 > 10.2.2.2.3328: aodv rerr [items 0] [19192]:
diff --git a/tests/cve-2014-8769-AODV.pcap b/tests/cve-2014-8769-AODV.pcap
new file mode 100644
index 0000000..3cd1569
--- /dev/null
+++ b/tests/cve-2014-8769-AODV.pcap
Binary files differ
diff --git a/tests/cve2015-0261-crash.out b/tests/cve2015-0261-crash.out
new file mode 100644
index 0000000..14dbe07
--- /dev/null
+++ b/tests/cve2015-0261-crash.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 IP6 (class 0x03, flowlabel 0x03030, hlim 48, next-header Options (0) payload length: 12336) 3030:3030:3030:3030:3030:3030:3030:3030 > 130:3030:3030:3030:3030:3030:3030:3030: HBH [|hbhopt]
diff --git a/tests/cve2015-0261-crash.pcap b/tests/cve2015-0261-crash.pcap
new file mode 100644
index 0000000..78ba894
--- /dev/null
+++ b/tests/cve2015-0261-crash.pcap
Binary files differ
diff --git a/tests/cve2015-0261-ipv6.out b/tests/cve2015-0261-ipv6.out
new file mode 100644
index 0000000..e5ed543
--- /dev/null
+++ b/tests/cve2015-0261-ipv6.out
@@ -0,0 +1,2 @@
+ 1 13:55:31.300000 IP6 truncated-ip6 - 26325 bytes missing!(class 0x76, flowlabel 0x76767, hlim 103, next-header Mobility (135) payload length: 26470) 6767:6767:6767:6767:6767:6767:6767:6767 > 6767:6767:6767:6767:6767:6767:6767:6705: mobility: BU seq#=26471 HL lifetime=105884(type-0x67: len=103) [|mobility]
+ 2 15:21:11.300000 IP6 truncated-ip6 - 26325 bytes missing!(class 0x76, flowlabel 0x76767, hlim 103, next-header Mobility (135) payload length: 26470) 6767:6767:6767:6767:6767:6767:6767:6767 > 6767:6767:4f67:6767:6767:6767:6767:6767: (header length 8 is too small for type 6) [|mobility]
diff --git a/tests/cve2015-0261-ipv6.pcap b/tests/cve2015-0261-ipv6.pcap
new file mode 100644
index 0000000..f8f27cc
--- /dev/null
+++ b/tests/cve2015-0261-ipv6.pcap
Binary files differ
diff --git a/tests/dcb_ets.out b/tests/dcb_ets.out
new file mode 100644
index 0000000..ba73da0
--- /dev/null
+++ b/tests/dcb_ets.out
@@ -0,0 +1,1923 @@
+ 1 04:02:45.610103 IP6 (hlim 1, next-header Options (0) payload length: 36) fe80::a00:27ff:fe46:e884 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 1 group record(s) [gaddr ff02::1:ff00:0 to_ex { }]
+ 2 04:02:51.707303 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xd60c7466, secs 13, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 3 04:02:58.010903 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 4 04:03:02.335010 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xd60c7466, secs 24, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 5 04:03:14.455118 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xd60c7466, secs 36, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 6 04:03:25.996519 IP6 (hlim 1, next-header Options (0) payload length: 76) :: > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 3 group record(s) [gaddr ff02::1:ff46:e884 to_ex { }] [gaddr ff02::2 to_ex { }] [gaddr ff02::202 to_ex { }]
+ 7 04:03:26.277614 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0x3c41e764, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 8 04:03:26.350998 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) :: > ff02::1:ff46:e884: [icmp6 sum ok] ICMP6, neighbor solicitation, length 24, who has fe80::a00:27ff:fe46:e884
+ 9 04:03:27.354673 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::a00:27ff:fe46:e884 > ff02::2: [icmp6 sum ok] ICMP6, router solicitation, length 16
+ source link-address option (1), length 8 (1): 08:00:27:46:e8:84
+ 0x0000: 0800 2746 e884
+ 10 04:03:27.357124 IP6 (hlim 1, next-header Options (0) payload length: 96) fe80::a00:27ff:fe46:e884 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 4 group record(s) [gaddr ff02::1:ff00:0 to_ex { }] [gaddr ff02::1:ff46:e884 to_ex { }] [gaddr ff02::2 to_ex { }] [gaddr ff02::202 to_ex { }]
+ 11 04:03:28.117735 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 12 04:03:30.897903 IP6 (hlim 1, next-header Options (0) payload length: 76) :: > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 3 group record(s) [gaddr ff02::1:ff42:ba59 to_ex { }] [gaddr ff02::2 to_ex { }] [gaddr ff02::202 to_ex { }]
+ 13 04:03:31.314436 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) :: > ff02::1:ff42:ba59: [icmp6 sum ok] ICMP6, neighbor solicitation, length 24, who has fe80::a00:27ff:fe42:ba59
+ 14 04:03:32.317793 IP6 (hlim 1, next-header Options (0) payload length: 96) fe80::a00:27ff:fe42:ba59 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 4 group record(s) [gaddr ff02::1:ff00:0 to_ex { }] [gaddr ff02::1:ff42:ba59 to_ex { }] [gaddr ff02::2 to_ex { }] [gaddr ff02::202 to_ex { }]
+ 15 04:03:32.954128 IP6 (hlim 1, next-header Options (0) payload length: 36) fe80::a00:27ff:fe46:e884 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 1 group record(s) [gaddr ff02::1:ff00:0 to_ex { }]
+ 16 04:03:34.060615 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0x3c41e764, secs 8, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 17 04:03:35.582218 IP6 (hlim 1, next-header Options (0) payload length: 36) fe80::a00:27ff:fe42:ba59 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 1 group record(s) [gaddr ff02::1:ff00:0 to_ex { }]
+ 18 04:03:46.353287 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0x3c41e764, secs 20, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 19 04:03:58.207517 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 20 04:04:07.294578 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0x3c41e764, secs 41, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 21 04:04:15.044685 IP6 (hlim 1, next-header Options (0) payload length: 76) :: > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 3 group record(s) [gaddr ff02::1:ff46:e884 to_ex { }] [gaddr ff02::2 to_ex { }] [gaddr ff02::202 to_ex { }]
+ 22 04:04:15.295367 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xc1fb0d77, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 23 04:04:15.831624 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) :: > ff02::1:ff46:e884: [icmp6 sum ok] ICMP6, neighbor solicitation, length 24, who has fe80::a00:27ff:fe46:e884
+ 24 04:04:16.833793 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::a00:27ff:fe46:e884 > ff02::2: [icmp6 sum ok] ICMP6, router solicitation, length 16
+ source link-address option (1), length 8 (1): 08:00:27:46:e8:84
+ 0x0000: 0800 2746 e884
+ 25 04:04:16.835771 IP6 (hlim 1, next-header Options (0) payload length: 96) fe80::a00:27ff:fe46:e884 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 4 group record(s) [gaddr ff02::1:ff00:0 to_ex { }] [gaddr ff02::1:ff46:e884 to_ex { }] [gaddr ff02::2 to_ex { }] [gaddr ff02::202 to_ex { }]
+ 26 04:04:18.197618 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xc1fb0d77, secs 3, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 27 04:04:18.745823 IP6 (hlim 1, next-header Options (0) payload length: 36) fe80::a00:27ff:fe46:e884 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 1 group record(s) [gaddr ff02::1:ff00:0 to_ex { }]
+ 28 04:04:23.674007 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 15 15 15 15 15 15 15
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c209 00ff ffff ff00 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 15 15 15 15 15 15 15
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c20a 00ff ffff ff00 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ End TLV (0), length 0
+ 29 04:04:25.764634 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 15 15 15 15 15 15 15
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c209 00ff ffff ff00 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 15 15 15 15 15 15 15
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c20a 00ff ffff ff00 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ End TLV (0), length 0
+ 30 04:04:26.645346 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xc1fb0d77, secs 11, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 31 04:04:28.323921 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 32 04:04:30.451608 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 33 04:04:38.461280 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xc1fb0d77, secs 23, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 34 04:04:51.930199 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xc1fb0d77, secs 36, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 35 04:04:53.780244 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 1 15 15 15 1 15 1
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c209 00f1 fff1 f100 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 1 15 15 15 1 15 1
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c20a 00f1 fff1 f100 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ End TLV (0), length 0
+ 36 04:04:55.904557 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 1 15 15 15 1 15 1
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c209 00f1 fff1 f100 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 1 15 15 15 1 15 1
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c20a 00f1 fff1 f100 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ End TLV (0), length 0
+ 37 04:04:58.412637 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 38 04:05:00.514707 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 39 04:05:03.015934 IP6 (hlim 1, next-header Options (0) payload length: 76) :: > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 3 group record(s) [gaddr ff02::1:ff46:e884 to_ex { }] [gaddr ff02::2 to_ex { }] [gaddr ff02::202 to_ex { }]
+ 40 04:05:03.279132 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) :: > ff02::1:ff46:e884: [icmp6 sum ok] ICMP6, neighbor solicitation, length 24, who has fe80::a00:27ff:fe46:e884
+ 41 04:05:03.298875 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xf0059f6c, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 42 04:05:04.283851 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::a00:27ff:fe46:e884 > ff02::2: [icmp6 sum ok] ICMP6, router solicitation, length 16
+ source link-address option (1), length 8 (1): 08:00:27:46:e8:84
+ 0x0000: 0800 2746 e884
+ 43 04:05:04.285659 IP6 (hlim 1, next-header Options (0) payload length: 96) fe80::a00:27ff:fe46:e884 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 4 group record(s) [gaddr ff02::1:ff00:0 to_ex { }] [gaddr ff02::1:ff46:e884 to_ex { }] [gaddr ff02::2 to_ex { }] [gaddr ff02::202 to_ex { }]
+ 44 04:05:06.521454 IP6 (hlim 1, next-header Options (0) payload length: 36) fe80::a00:27ff:fe46:e884 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 1 group record(s) [gaddr ff02::1:ff00:0 to_ex { }]
+ 45 04:05:08.315660 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xf0059f6c, secs 5, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 46 04:05:20.296407 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xf0059f6c, secs 17, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 47 04:05:23.875146 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 15 15 15 15 15 15 15
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c209 00ff ffff ff00 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 15 15 15 15 15 15 15
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c20a 00ff ffff ff00 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ End TLV (0), length 0
+ 48 04:05:25.977057 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 15 15 15 15 15 15 15
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c209 00ff ffff ff00 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 15 15 15 15 15 15 15
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c20a 00ff ffff ff00 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ End TLV (0), length 0
+ 49 04:05:28.534761 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 50 04:05:30.640668 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 51 04:05:39.776898 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xf0059f6c, secs 36, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 52 04:05:54.004592 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 15 1 1 15 15 1 15
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c209 00ff 11ff 1f00 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 15 1 1 15 15 1 15
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c20a 00ff 11ff 1f00 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ End TLV (0), length 0
+ 53 04:05:56.114583 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 15 1 1 15 15 1 15
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c209 00ff 11ff 1f00 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 15 1 1 15 15 1 15
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c20a 00ff 11ff 1f00 0000 0000 0000
+ 0x0010: 0000 0000 0000 0000 00
+ End TLV (0), length 0
+ 54 04:05:58.626100 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 55 04:06:00.719346 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 56 04:06:24.169864 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 57 04:06:26.278553 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 58 04:06:28.738974 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 59 04:06:30.858406 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 60 04:06:54.277839 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 61 04:06:56.397550 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 62 04:06:58.838612 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 63 04:07:00.955767 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 64 04:07:24.408571 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 65 04:07:26.521204 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 66 04:07:28.944341 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
+ 67 04:07:31.032657 LLDP, length 135
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Configuration Subtype (9)
+ Willing:0, CBS:0, RES:0, Max TCs:0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c209 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ Organization specific TLV (127), length 25: OUI Ethernet bridged (0x0080c2)
+ ETS Recommendation Subtype (10)
+ RES: 0
+ Priority Assignment Table
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 15 4 1 1 15 4 1 4
+ TC Bandwidth Table
+ TC% : 0 1 2 3 4 5 6 7
+ Value : 0 50 0 0 50 0 0 0
+ TSA Assignment Table
+ Traffic Class: 0 1 2 3 4 5 6 7
+ Value : 0 2 0 0 2 0 0 0
+ 0x0000: 0080 c20a 00f4 11f4 1400 3200 0032 0000
+ 0x0010: 0000 0200 0002 0000 00
+ End TLV (0), length 0
diff --git a/tests/dcb_ets.pcap b/tests/dcb_ets.pcap
new file mode 100644
index 0000000..995887b
--- /dev/null
+++ b/tests/dcb_ets.pcap
Binary files differ
diff --git a/tests/dcb_pfc.out b/tests/dcb_pfc.out
new file mode 100644
index 0000000..eefa0fc
--- /dev/null
+++ b/tests/dcb_pfc.out
@@ -0,0 +1,148 @@
+ 1 05:02:44.326635 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0x85bfaf7d, secs 31, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 2 05:02:46.292912 LLDP, length 87
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Priority Flow Control Configuration Subtype (11)
+ Willing: 0, MBC: 0, RES: 0, PFC cap:4
+ PFC Enable
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 1 0 1 1 0 0
+ 0x0000: 0080 c20b 0434
+ End TLV (0), length 0
+ 3 05:02:48.297042 LLDP, length 87
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Priority Flow Control Configuration Subtype (11)
+ Willing: 0, MBC: 0, RES: 0, PFC cap:4
+ PFC Enable
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 1 0 1 1 0 0
+ 0x0000: 0080 c20b 0434
+ End TLV (0), length 0
+ 4 05:02:50.018990 LLDP, length 87
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Priority Flow Control Configuration Subtype (11)
+ Willing: 0, MBC: 0, RES: 0, PFC cap:4
+ PFC Enable
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 1 0 1 1 0 0
+ 0x0000: 0080 c20b 0434
+ End TLV (0), length 0
+ 5 05:02:52.038011 LLDP, length 87
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Priority Flow Control Configuration Subtype (11)
+ Willing: 0, MBC: 0, RES: 0, PFC cap:4
+ PFC Enable
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 1 0 1 1 0 0
+ 0x0000: 0080 c20b 0434
+ End TLV (0), length 0
diff --git a/tests/dcb_pfc.pcap b/tests/dcb_pfc.pcap
new file mode 100644
index 0000000..c777a33
--- /dev/null
+++ b/tests/dcb_pfc.pcap
Binary files differ
diff --git a/tests/dcb_qcn.out b/tests/dcb_qcn.out
new file mode 100644
index 0000000..e62713a
--- /dev/null
+++ b/tests/dcb_qcn.out
@@ -0,0 +1,363 @@
+ 1 06:05:15.631413 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xfddb5251, secs 7, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 2 06:05:25.354704 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xfddb5251, secs 17, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 3 06:05:30.544746 LLDP, length 86
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 5: OUI Ethernet bridged (0x0080c2)
+ Application Priority Subtype (12)
+ RES: 0
+ 0x0000: 0080 c20c 00
+ End TLV (0), length 0
+ 4 06:05:32.545676 LLDP, length 86
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 5: OUI Ethernet bridged (0x0080c2)
+ Application Priority Subtype (12)
+ RES: 0
+ 0x0000: 0080 c20c 00
+ End TLV (0), length 0
+ 5 06:05:33.473507 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xfddb5251, secs 25, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 6 06:05:37.009281 LLDP, length 94
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Congestion Notification Subtype (8)
+ Pre-Priority CNPV Indicator
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 1 0 0
+ Pre-Priority Ready Indicator
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c208 2000
+ Organization specific TLV (127), length 5: OUI Ethernet bridged (0x0080c2)
+ Application Priority Subtype (12)
+ RES: 0
+ 0x0000: 0080 c20c 00
+ End TLV (0), length 0
+ 7 06:05:39.012773 LLDP, length 94
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Congestion Notification Subtype (8)
+ Pre-Priority CNPV Indicator
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 1 0 0
+ Pre-Priority Ready Indicator
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c208 2000
+ Organization specific TLV (127), length 5: OUI Ethernet bridged (0x0080c2)
+ Application Priority Subtype (12)
+ RES: 0
+ 0x0000: 0080 c20c 00
+ End TLV (0), length 0
+ 8 06:05:48.550428 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xfddb5251, secs 40, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 9 06:05:56.022134 IP6 (hlim 1, next-header Options (0) payload length: 76) :: > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 3 group record(s) [gaddr ff02::1:ff46:e884 to_ex { }] [gaddr ff02::2 to_ex { }] [gaddr ff02::202 to_ex { }]
+ 10 06:05:56.373478 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xbb58bf40, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 11 06:05:56.498519 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) :: > ff02::1:ff46:e884: [icmp6 sum ok] ICMP6, neighbor solicitation, length 24, who has fe80::a00:27ff:fe46:e884
+ 12 06:05:57.500560 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 16) fe80::a00:27ff:fe46:e884 > ff02::2: [icmp6 sum ok] ICMP6, router solicitation, length 16
+ source link-address option (1), length 8 (1): 08:00:27:46:e8:84
+ 0x0000: 0800 2746 e884
+ 13 06:05:57.501813 IP6 (hlim 1, next-header Options (0) payload length: 96) fe80::a00:27ff:fe46:e884 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 4 group record(s) [gaddr ff02::1:ff00:0 to_ex { }] [gaddr ff02::1:ff46:e884 to_ex { }] [gaddr ff02::2 to_ex { }] [gaddr ff02::202 to_ex { }]
+ 14 06:06:00.550022 LLDP, length 86
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 5: OUI Ethernet bridged (0x0080c2)
+ Application Priority Subtype (12)
+ RES: 0
+ 0x0000: 0080 c20c 00
+ End TLV (0), length 0
+ 15 06:06:02.552580 LLDP, length 86
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 5: OUI Ethernet bridged (0x0080c2)
+ Application Priority Subtype (12)
+ RES: 0
+ 0x0000: 0080 c20c 00
+ End TLV (0), length 0
+ 16 06:06:03.773184 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: [udp sum ok] BOOTP/DHCP, Request from 08:00:27:46:e8:84, length 300, xid 0xbb58bf40, secs 7, Flags [none] (0x0000)
+ Client-Ethernet-Address 08:00:27:46:e8:84
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 17:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3), Classless-Static-Route (121), Classless-Static-Route-Microsoft (249), Unknown (252)
+ NTP (42)
+ 17 06:06:04.106458 IP6 (hlim 1, next-header Options (0) payload length: 36) fe80::a00:27ff:fe46:e884 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 1 group record(s) [gaddr ff02::1:ff00:0 to_ex { }]
+ 18 06:06:07.011961 LLDP, length 94
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Congestion Notification Subtype (8)
+ Pre-Priority CNPV Indicator
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 1 0 0
+ Pre-Priority Ready Indicator
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c208 2000
+ Organization specific TLV (127), length 5: OUI Ethernet bridged (0x0080c2)
+ Application Priority Subtype (12)
+ RES: 0
+ 0x0000: 0080 c20c 00
+ End TLV (0), length 0
+ 19 06:06:09.020050 LLDP, length 94
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 00
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Congestion Notification Subtype (8)
+ Pre-Priority CNPV Indicator
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 1 0 0
+ Pre-Priority Ready Indicator
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 0 0 0 0
+ 0x0000: 0080 c208 2000
+ Organization specific TLV (127), length 5: OUI Ethernet bridged (0x0080c2)
+ Application Priority Subtype (12)
+ RES: 0
+ 0x0000: 0080 c20c 00
+ End TLV (0), length 0
diff --git a/tests/dcb_qcn.pcap b/tests/dcb_qcn.pcap
new file mode 100644
index 0000000..9034d7c
--- /dev/null
+++ b/tests/dcb_qcn.pcap
Binary files differ
diff --git a/tests/dccp_options-oobr.out b/tests/dccp_options-oobr.out
new file mode 100644
index 0000000..f714b35
--- /dev/null
+++ b/tests/dccp_options-oobr.out
@@ -0,0 +1,19 @@
+ 1 16:59:25.816632 IP (tos 0x0, ttl 64, id 65312, offset 0, flags [DF], proto DCCP (33), length 52)
+ 139.133.209.176.39420 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 0, cksum 0xaaf3 (incorrect -> 0x8bf3)) DCCP-Request (service=4105078398) seq 8 <nop, nop, nop, nop, change_l ack_ratio 2, change_r ccid 2, change_l ccid 2>
+ 2 14:27:00.817006 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto DCCP (33), length 68)
+ 139.133.209.65.5001 > 139.133.209.176.39420: DCCP (CCVal 0, CsCov 0) DCCP-Response (service=0) (ack=38464816766) seq 1960341146 <nop, nop, change_l ack_ratio 2, [|dccp]>
+ 3 14:27:00.817125 IP (tos 0x0, ttl 64, id 65313, offset 0, flags [DF], proto DCCP (33), length 56)
+ 139.133.209.176.39420 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 0, cksum 0xf53a (incorrect -> 0xf551)) DCCP-Ack (ack=1960341146) seq 38464816767 <nop, confirm_r ack_ratio 2, ack_vector0 0xe9, timestamp_echo [optlen != 6 or 8 or 10]>
+ 4 14:27:00.829614 IP (tos 0x0, ttl 64, id 65314, offset 0, flags [DF], proto DCCP (33), length 152)
+ 139.133.209.176.46076 > 139.133.209.65.48009: DCCP (CCVal 0, CsCov 6) DCCP-DataAck (ack=1960341146) seq 38464816768 <nop, nop, ack_vector0 0x00, elapsed_time 1249, ndp_count 1>
+ 5 14:27:00.830145 IP (tos 0x0, ttl 64, id 3176, offset 0, flags [DF], proto DCCP (33), length 52)
+ 139.133.209.65.5001 > 139.133.209.176.39420: DCCP (CCVal 0, CsCov 0, cksum 0xfc63 (correct)) DCCP-Ack (ack=38464816768) seq 1960341147 <nop, ack_vector0 0x01, elapsed_time 1>
+ 6 14:27:00.831060 IP (tos 0x0, ttl 64, id 65315, offset 0, flags [DF], proto DCCP (33), length 148)
+ 139.133.209.176.39420 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 6) DCCP-DataAck (ack=1960341147) seq 38464816769 <nop, ack_vector0 0x00, elapsed_time 84>
+ 7 14:27:00.831421 IP (tos 0x0, ttl 64, id 3177, offset 0, flags [DF], proto DCCP (33), length 52)
+ 139.133.209.65.5001 > 139.133.209.176.39420: DCCP (CCVal 0, CsCov 0, cksum 0x0165 (correct)) DCCP-Ack (ack=38464816769) seq 1960341148 <nop, nop, ack_vector0 0x00, ndp_count 1>
+ 8 14:27:00.832055 00:07:00:42:00:00 > 00:14:22:59:55:51 Null Information, send seq 0, rcv seq 0, Flags [Command], length 66
+ 0x0000: 0000 0000 1422 5955 5100 07e9 bd5d 1f08 ....."YUQ....]..
+ 0x0010: 0045 0000 34ff 2040 0040 2181 8b8b 85d1 .E..4..@.@!.....
+ 0x0020: b08b 85d1 4199 fc13 8908 00aa f320 0000 ....A...........
+ 0x0030: 08f4 ae86 7e00 0000 ....~...
diff --git a/tests/dccp_options-oobr.pcap b/tests/dccp_options-oobr.pcap
new file mode 100644
index 0000000..b4d50d8
--- /dev/null
+++ b/tests/dccp_options-oobr.pcap
Binary files differ
diff --git a/tests/dccp_partial_csum_v4_longer.out b/tests/dccp_partial_csum_v4_longer.out
new file mode 100644
index 0000000..e186e43
--- /dev/null
+++ b/tests/dccp_partial_csum_v4_longer.out
@@ -0,0 +1,30 @@
+ 1 14:27:00.816632 IP (tos 0x0, ttl 64, id 65312, offset 0, flags [DF], proto DCCP (33), length 52)
+ 139.133.209.176.39420 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 0, cksum 0xaaf3 (correct)) DCCP-Request (service=0) seq 38464816766 <change_l ack_ratio 2, change_r ccid 2, change_l ccid 2>
+ 2 14:27:00.817006 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto DCCP (33), length 68)
+ 139.133.209.65.5001 > 139.133.209.176.39420: DCCP (CCVal 0, CsCov 0, cksum 0xb04b (correct)) DCCP-Response (service=0) (ack=38464816766) seq 1960341146 <nop, nop, change_l ack_ratio 2, confirm_r ccid 2 2, confirm_l ccid 2 2, confirm_r ack_ratio 2>
+ 3 14:27:00.817125 IP (tos 0x0, ttl 64, id 65313, offset 0, flags [DF], proto DCCP (33), length 56)
+ 139.133.209.176.39420 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 0, cksum 0xf53a (correct)) DCCP-Ack (ack=1960341146) seq 38464816767 <nop, confirm_r ack_ratio 2, ack_vector0 0x00, elapsed_time 1>
+ 4 14:27:00.829614 IP (tos 0x0, ttl 64, id 65314, offset 0, flags [DF], proto DCCP (33), length 152)
+ 139.133.209.176.39420 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 6, cksum 0x7d28 (correct)) DCCP-DataAck (ack=1960341146) seq 38464816768 <nop, nop, ack_vector0 0x00, elapsed_time 1249, ndp_count 1>
+ 5 14:27:00.830145 IP (tos 0x0, ttl 64, id 3176, offset 0, flags [DF], proto DCCP (33), length 52)
+ 139.133.209.65.5001 > 139.133.209.176.39420: DCCP (CCVal 0, CsCov 0, cksum 0xfc63 (correct)) DCCP-Ack (ack=38464816768) seq 1960341147 <nop, ack_vector0 0x01, elapsed_time 1>
+ 6 14:27:00.831060 IP (tos 0x0, ttl 64, id 65315, offset 0, flags [DF], proto DCCP (33), length 148)
+ 139.133.209.176.39420 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 6, cksum 0x5e05 (correct)) DCCP-DataAck (ack=1960341147) seq 38464816769 <nop, ack_vector0 0x00, elapsed_time 84>
+ 7 14:27:00.831421 IP (tos 0x0, ttl 64, id 3177, offset 0, flags [DF], proto DCCP (33), length 52)
+ 139.133.209.65.5001 > 139.133.209.176.39420: DCCP (CCVal 0, CsCov 0, cksum 0x0165 (correct)) DCCP-Ack (ack=38464816769) seq 1960341148 <nop, nop, ack_vector0 0x00, ndp_count 1>
+ 8 14:27:00.832055 IP (tos 0x0, ttl 64, id 65316, offset 0, flags [DF], proto DCCP (33), length 148)
+ 139.133.209.176.39420 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 6, cksum 0x5e1e (correct)) DCCP-DataAck (ack=1960341148) seq 38464816770 <nop, ack_vector0 0x00, elapsed_time 57>
+ 9 14:27:00.832122 IP (tos 0x0, ttl 64, id 65317, offset 0, flags [DF], proto DCCP (33), length 148)
+ 139.133.209.176.39420 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 6, cksum 0x5e15 (correct)) DCCP-DataAck (ack=1960341148) seq 38464816771 <nop, ack_vector0 0x00, elapsed_time 65>
+ 10 14:27:00.832503 IP (tos 0x0, ttl 64, id 3178, offset 0, flags [DF], proto DCCP (33), length 56)
+ 139.133.209.65.5001 > 139.133.209.176.39420: DCCP (CCVal 0, CsCov 0, cksum 0xfb32 (correct)) DCCP-Ack (ack=38464816770) seq 1960341149 <nop, nop, ack_vector0 0x00, elapsed_time 1, ndp_count 2>
+ 11 14:27:00.832712 IP (tos 0x0, ttl 64, id 3179, offset 0, flags [DF], proto DCCP (33), length 56)
+ 139.133.209.65.5001 > 139.133.209.176.39420: DCCP (CCVal 0, CsCov 0, cksum 0xfa2f (correct)) DCCP-Ack (ack=38464816771) seq 1960341150 <nop, nop, ack_vector0 0x01, elapsed_time 1, ndp_count 3>
+ 12 14:27:00.833052 IP (tos 0x0, ttl 64, id 65318, offset 0, flags [DF], proto DCCP (33), length 148)
+ 139.133.209.176.39420 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 6, cksum 0x5e35 (correct)) DCCP-DataAck (ack=1960341150) seq 38464816772 <nop, ack_vector0 0x00, elapsed_time 30>
+ 13 14:27:00.833126 IP (tos 0x0, ttl 64, id 65319, offset 0, flags [DF], proto DCCP (33), length 52)
+ 139.133.209.176.39420 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 0, cksum 0xf638 (correct)) DCCP-Close (ack=1960341150) seq 38464816773 <nop, ack_vector0 0x00, elapsed_time 37>
+ 14 14:27:00.833531 IP (tos 0x0, ttl 64, id 3180, offset 0, flags [DF], proto DCCP (33), length 56)
+ 139.133.209.65.5001 > 139.133.209.176.39420: DCCP (CCVal 0, CsCov 0, cksum 0xfb2c (correct)) DCCP-Ack (ack=38464816772) seq 1960341151 <nop, nop, ack_vector0 0x00, elapsed_time 1, ndp_count 4>
+ 15 14:27:00.833902 IP (tos 0x0, ttl 64, id 3181, offset 0, flags [DF], proto DCCP (33), length 60)
+ 139.133.209.65.5001 > 139.133.209.176.39420: DCCP (CCVal 0, CsCov 0, cksum 0xef25 (correct)) DCCP-Reset (code=closed) (ack=38464816773) seq 1960341152 <nop, nop, ack_vector0 0x01, elapsed_time 2, ndp_count 5>
diff --git a/tests/dccp_partial_csum_v4_longer.pcap b/tests/dccp_partial_csum_v4_longer.pcap
new file mode 100644
index 0000000..f1176c0
--- /dev/null
+++ b/tests/dccp_partial_csum_v4_longer.pcap
Binary files differ
diff --git a/tests/dccp_partial_csum_v4_simple.out b/tests/dccp_partial_csum_v4_simple.out
new file mode 100644
index 0000000..4f1cfdd
--- /dev/null
+++ b/tests/dccp_partial_csum_v4_simple.out
@@ -0,0 +1,14 @@
+ 1 14:20:49.169988 IP (tos 0x0, ttl 64, id 30095, offset 0, flags [DF], proto DCCP (33), length 52)
+ 139.133.209.176.52667 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 0, cksum 0xa766 (correct)) DCCP-Request (service=0) seq 33164071488 <change_l ack_ratio 2, change_r ccid 2, change_l ccid 2>
+ 2 14:20:49.170466 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto DCCP (33), length 68)
+ 139.133.209.65.5001 > 139.133.209.176.52667: DCCP (CCVal 0, CsCov 0, cksum 0x9a1a (correct)) DCCP-Response (service=0) (ack=33164071488) seq 1925546833 <nop, nop, change_l ack_ratio 2, confirm_r ccid 2 2, confirm_l ccid 2 2, confirm_r ack_ratio 2>
+ 3 14:20:49.170587 IP (tos 0x0, ttl 64, id 30096, offset 0, flags [DF], proto DCCP (33), length 56)
+ 139.133.209.176.52667 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 0, cksum 0xdf09 (correct)) DCCP-Ack (ack=1925546833) seq 33164071489 <nop, confirm_r ack_ratio 2, ack_vector0 0x00, elapsed_time 1>
+ 4 14:20:49.171257 IP (tos 0x0, ttl 64, id 30097, offset 0, flags [DF], proto DCCP (33), length 68)
+ 139.133.209.176.52667 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 1, cksum 0x9dfa (correct)) DCCP-DataAck (ack=1925546833) seq 33164071490 <nop, nop, ack_vector0 0x00, elapsed_time 70, ndp_count 1>
+ 5 14:20:49.171695 IP (tos 0x0, ttl 64, id 24713, offset 0, flags [DF], proto DCCP (33), length 52)
+ 139.133.209.65.5001 > 139.133.209.176.52667: DCCP (CCVal 0, CsCov 0, cksum 0xe632 (correct)) DCCP-Ack (ack=33164071490) seq 1925546834 <nop, ack_vector0 0x01, elapsed_time 1>
+ 6 14:20:49.173419 IP (tos 0x0, ttl 64, id 30098, offset 0, flags [DF], proto DCCP (33), length 52)
+ 139.133.209.176.52667 > 139.133.209.65.5001: DCCP (CCVal 0, CsCov 0, cksum 0xdf8d (correct)) DCCP-Close (ack=1925546834) seq 33164071491 <nop, ack_vector0 0x00, elapsed_time 166>
+ 7 14:20:49.173947 IP (tos 0x0, ttl 64, id 24714, offset 0, flags [DF], proto DCCP (33), length 60)
+ 139.133.209.65.5001 > 139.133.209.176.52667: DCCP (CCVal 0, CsCov 0, cksum 0xd900 (correct)) DCCP-Reset (code=closed) (ack=33164071491) seq 1925546835 <nop, nop, ack_vector0 0x00, elapsed_time 3, ndp_count 1>
diff --git a/tests/dccp_partial_csum_v4_simple.pcap b/tests/dccp_partial_csum_v4_simple.pcap
new file mode 100644
index 0000000..a9c3d66
--- /dev/null
+++ b/tests/dccp_partial_csum_v4_simple.pcap
Binary files differ
diff --git a/tests/dccp_partial_csum_v6_longer.out b/tests/dccp_partial_csum_v6_longer.out
new file mode 100644
index 0000000..1f33938
--- /dev/null
+++ b/tests/dccp_partial_csum_v6_longer.out
@@ -0,0 +1,9 @@
+ 1 14:25:56.803391 IP6 (hlim 64, next-header DCCP (33) payload length: 32) 3ffe::1.55024 > 3ffe::2.5001: DCCP (CCVal 0, CsCov 0, cksum 0xd538 (correct)) DCCP-Request (service=0) seq 1559687427 <change_l ack_ratio 2, change_r ccid 2, change_l ccid 2>
+ 2 14:25:56.803802 IP6 (hlim 64, next-header DCCP (33) payload length: 48) 3ffe::2.5001 > 3ffe::1.55024: DCCP (CCVal 0, CsCov 0, cksum 0x81a3 (correct)) DCCP-Response (service=0) (ack=1559687427) seq 1585962456 <nop, nop, change_l ack_ratio 2, confirm_r ccid 2 2, confirm_l ccid 2 2, confirm_r ack_ratio 2>
+ 3 14:25:56.803932 IP6 (hlim 64, next-header DCCP (33) payload length: 36) 3ffe::1.55024 > 3ffe::2.5001: DCCP (CCVal 0, CsCov 0, cksum 0xc692 (correct)) DCCP-Ack (ack=1585962456) seq 1559687428 <nop, confirm_r ack_ratio 2, ack_vector0 0x00, elapsed_time 1>
+ 4 14:25:56.876751 IP6 (hlim 64, next-header DCCP (33) payload length: 164) 3ffe::1.55024 > 3ffe::2.5001: DCCP (CCVal 0, CsCov 10, cksum 0xe362 (correct)) DCCP-DataAck (ack=1585962456) seq 1559687429 <nop, nop, ack_vector0 0x00, elapsed_time 7282, ndp_count 1>
+ 5 14:25:56.877467 IP6 (hlim 64, next-header DCCP (33) payload length: 32) 3ffe::2.5001 > 3ffe::1.55024: DCCP (CCVal 0, CsCov 0, cksum 0xcdbb (correct)) DCCP-Ack (ack=1559687429) seq 1585962457 <nop, ack_vector0 0x01, elapsed_time 1>
+ 6 14:25:56.878087 IP6 (hlim 64, next-header DCCP (33) payload length: 160) 3ffe::1.55024 > 3ffe::2.5001: DCCP (CCVal 0, CsCov 10, cksum 0x5574 (correct)) DCCP-DataAck (ack=1585962457) seq 1559687430 <nop, ack_vector0 0x00, elapsed_time 55>
+ 7 14:25:56.878188 IP6 (hlim 64, next-header DCCP (33) payload length: 32) 3ffe::1.55024 > 3ffe::2.5001: DCCP (CCVal 0, CsCov 0, cksum 0xc778 (correct)) DCCP-Close (ack=1585962457) seq 1559687431 <nop, ack_vector0 0x00, elapsed_time 67>
+ 8 14:25:56.878513 IP6 (hlim 64, next-header DCCP (33) payload length: 32) 3ffe::2.5001 > 3ffe::1.55024: DCCP (CCVal 0, CsCov 0, cksum 0xd2bc (correct)) DCCP-Ack (ack=1559687430) seq 1585962458 <nop, nop, ack_vector0 0x00, ndp_count 1>
+ 9 14:25:56.878648 IP6 (hlim 64, next-header DCCP (33) payload length: 40) 3ffe::2.5001 > 3ffe::1.55024: DCCP (CCVal 0, CsCov 0, cksum 0xc186 (correct)) DCCP-Reset (code=closed) (ack=1559687431) seq 1585962459 <nop, nop, ack_vector0 0x01, elapsed_time 1, ndp_count 2>
diff --git a/tests/dccp_partial_csum_v6_longer.pcap b/tests/dccp_partial_csum_v6_longer.pcap
new file mode 100644
index 0000000..644379d
--- /dev/null
+++ b/tests/dccp_partial_csum_v6_longer.pcap
Binary files differ
diff --git a/tests/dccp_partial_csum_v6_simple.out b/tests/dccp_partial_csum_v6_simple.out
new file mode 100644
index 0000000..69d7118
--- /dev/null
+++ b/tests/dccp_partial_csum_v6_simple.out
@@ -0,0 +1,7 @@
+ 1 14:22:33.489189 IP6 (hlim 64, next-header DCCP (33) payload length: 32) 3ffe::1.52921 > 3ffe::2.5001: DCCP (CCVal 0, CsCov 0, cksum 0xef1a (correct)) DCCP-Request (service=0) seq 1337846929 <change_l ack_ratio 2, change_r ccid 2, change_l ccid 2>
+ 2 14:22:33.489608 IP6 (hlim 64, next-header DCCP (33) payload length: 48) 3ffe::2.5001 > 3ffe::1.52921: DCCP (CCVal 0, CsCov 0, cksum 0x0b73 (correct)) DCCP-Response (service=0) (ack=1337846929) seq 1385331168 <nop, nop, change_l ack_ratio 2, confirm_r ccid 2 2, confirm_l ccid 2 2, confirm_r ack_ratio 2>
+ 3 14:22:33.489726 IP6 (hlim 64, next-header DCCP (33) payload length: 36) 3ffe::1.52921 > 3ffe::2.5001: DCCP (CCVal 0, CsCov 0, cksum 0x5062 (correct)) DCCP-Ack (ack=1385331168) seq 1337846930 <nop, confirm_r ack_ratio 2, ack_vector0 0x00, elapsed_time 1>
+ 4 14:22:33.983270 IP6 (hlim 64, next-header DCCP (33) payload length: 48) 3ffe::1.52921 > 3ffe::2.5001: DCCP (CCVal 0, CsCov 1, cksum 0x8792 (correct)) DCCP-DataAck (ack=1385331168) seq 1337846931 <nop, nop, ack_vector0 0x00, elapsed_time 49357, ndp_count 1>
+ 5 14:22:33.983633 IP6 (hlim 64, next-header DCCP (33) payload length: 32) 3ffe::2.5001 > 3ffe::1.52921: DCCP (CCVal 0, CsCov 0, cksum 0x578b (correct)) DCCP-Ack (ack=1337846931) seq 1385331169 <nop, ack_vector0 0x01, elapsed_time 1>
+ 6 14:22:34.597258 IP6 (hlim 64, next-header DCCP (33) payload length: 32) 3ffe::1.52921 > 3ffe::2.5001: DCCP (CCVal 0, CsCov 0, cksum 0x61e0 (correct)) DCCP-Close (ack=1385331169) seq 1337846932 <nop, ack_vector0 0x00, elapsed_time 61355>
+ 7 14:22:34.597619 IP6 (hlim 64, next-header DCCP (33) payload length: 40) 3ffe::2.5001 > 3ffe::1.52921: DCCP (CCVal 0, CsCov 0, cksum 0x4b59 (correct)) DCCP-Reset (code=closed) (ack=1337846932) seq 1385331170 <nop, nop, ack_vector0 0x00, elapsed_time 2, ndp_count 1>
diff --git a/tests/dccp_partial_csum_v6_simple.pcap b/tests/dccp_partial_csum_v6_simple.pcap
new file mode 100644
index 0000000..c343d90
--- /dev/null
+++ b/tests/dccp_partial_csum_v6_simple.pcap
Binary files differ
diff --git a/tests/decnet-oobr.out b/tests/decnet-oobr.out
new file mode 100644
index 0000000..fb93114
--- /dev/null
+++ b/tests/decnet-oobr.out
@@ -0,0 +1,6 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 0000
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0xdada), length 262144:
+ 0x0000: 3030 3030 3030 6003 3030 8a30 3030 3030 000000`.00.00000
+ 0x0010: 3030 3030 0000
diff --git a/tests/decnet-oobr.pcap b/tests/decnet-oobr.pcap
new file mode 100644
index 0000000..0554b7b
--- /dev/null
+++ b/tests/decnet-oobr.pcap
Binary files differ
diff --git a/tests/decnet-shorthdr-oobr.out b/tests/decnet-shorthdr-oobr.out
new file mode 100644
index 0000000..ab3a0fc
--- /dev/null
+++ b/tests/decnet-shorthdr-oobr.out
@@ -0,0 +1,29 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 5 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 6 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 7 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 8 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 9 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 10 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 11 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 12 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 13 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 14 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 0000
+ 15 05:27:12.808464432 [|decnet]
diff --git a/tests/decnet-shorthdr-oobr.pcap b/tests/decnet-shorthdr-oobr.pcap
new file mode 100644
index 0000000..a4c0160
--- /dev/null
+++ b/tests/decnet-shorthdr-oobr.pcap
Binary files differ
diff --git a/tests/decnet.out b/tests/decnet.out
new file mode 100644
index 0000000..8b67361
--- /dev/null
+++ b/tests/decnet.out
@@ -0,0 +1,139 @@
+ 1 19:34:25.597822 endnode-hello endnode vers 2 eco 0 ueco 0 src 1.1 blksize 16434 rtr 0.0 hello 10 data 2
+ 2 19:34:35.597816 endnode-hello endnode vers 2 eco 0 ueco 0 src 1.1 blksize 16434 rtr 0.0 hello 10 data 2
+ 3 19:34:45.597817 endnode-hello endnode vers 2 eco 0 ueco 0 src 1.1 blksize 16434 rtr 0.0 hello 10 data 2
+ 4 19:34:55.597814 endnode-hello endnode vers 2 eco 0 ueco 0 src 1.1 blksize 16434 rtr 0.0 hello 10 data 2
+ 5 19:35:05.597817 endnode-hello endnode vers 2 eco 0 ueco 0 src 1.1 blksize 16434 rtr 0.0 hello 10 data 2
+ 6 19:35:11.338778 1.1 > 1.1 34 conn-initiate 8195>0 ver 4.1 segsize 16403
+ 7 19:35:11.339327 1.1 > 1.1 9 (nsplen 3 < 5) (invalid)
+ 8 19:35:11.339336 1.1 > 1.1 16 conn-confirm 8196>8195 ver 4.1 segsize 16403
+ 9 19:35:11.339342 1.1 > 1.1 19 link-service 8195>8196 ack 0 ackdat 0 seg 1 dat seg count 0
+ 10 19:35:11.339350 1.1 > 1.1 15 ils-ack 8196>8195 ack 1 ackdat 0
+ 11 19:35:11.339596 1.1 > 1.1 45 data 8195>8196 ack 0 oack 0 seg 1
+ 12 19:35:11.339606 1.1 > 1.1 15 data-ack 8196>8195 ack 1 oack 1
+ 13 19:35:11.342492 1.1 > 1.1 18 data 8196>8195 ack 1 oack 1 seg 1
+ 14 19:35:11.342510 1.1 > 1.1 15 data-ack 8195>8196 ack 1 oack 0
+ 15 19:35:11.342533 1.1 > 1.1 33 data 8195>8196 ack 1 oack 0 seg 2
+ 16 19:35:11.342540 1.1 > 1.1 15 data-ack 8196>8195 ack 2 oack 1
+ 17 19:35:11.342867 1.1 > 1.1 18 data 8196>8195 ack 2 oack 1 seg 2
+ 18 19:35:11.342876 1.1 > 1.1 15 data-ack 8195>8196 ack 2 oack 0
+ 19 19:35:15.597819 endnode-hello endnode vers 2 eco 0 ueco 0 src 1.1 blksize 16434 rtr 0.0 hello 10 data 2
+ 20 19:35:16.403594 1.1 > 1.1 34 conn-initiate 8197>0 ver 4.1 segsize 16403
+ 21 19:35:16.403633 1.1 > 1.1 9 (nsplen 3 < 5) (invalid)
+ 22 19:35:16.403641 1.1 > 1.1 16 conn-confirm 8198>8197 ver 4.1 segsize 16403
+ 23 19:35:16.403647 1.1 > 1.1 19 link-service 8197>8198 ack 0 ackdat 0 seg 1 dat seg count 0
+ 24 19:35:16.403656 1.1 > 1.1 15 ils-ack 8198>8197 ack 1 ackdat 0
+ 25 19:35:16.403679 1.1 > 1.1 45 data 8197>8198 ack 0 oack 0 seg 1
+ 26 19:35:16.403687 1.1 > 1.1 15 data-ack 8198>8197 ack 1 oack 1
+ 27 19:35:16.403696 1.1 > 1.1 32 data 8197>8198 ack 0 oack 0 seg 2
+ 28 19:35:16.403703 1.1 > 1.1 15 data-ack 8198>8197 ack 2 oack 1
+ 29 19:35:16.404216 1.1 > 1.1 18 data 8198>8197 ack 2 oack 1 seg 1
+ 30 19:35:16.404224 1.1 > 1.1 15 data-ack 8197>8198 ack 1 oack 0
+ 31 19:35:21.837823 1.1 > 1.1 19 link-service 8195>8196 ack 0 ackdat 2 seg 2 dat seg count 0
+ 32 19:35:21.837843 1.1 > 1.1 15 ils-ack 8196>8195 ack 2 ackdat 2
+ 33 19:35:25.597810 endnode-hello endnode vers 2 eco 0 ueco 0 src 1.1 blksize 16434 rtr 0.0 hello 10 data 2
+ 34 19:35:26.902821 1.1 > 1.1 19 link-service 8197>8198 ack 0 ackdat 1 seg 2 dat seg count 0
+ 35 19:35:26.902836 1.1 > 1.1 19 link-service 8198>8197 ack 1 ackdat 2 seg 1 dat seg count 0
+ 36 19:35:26.902847 1.1 > 1.1 15 ils-ack 8198>8197 ack 2 ackdat 2
+ 37 19:35:26.902855 1.1 > 1.1 15 ils-ack 8197>8198 ack 1 ackdat 1
+ 38 19:35:31.837817 1.1 > 1.1 19 link-service 8195>8196 ack 0 ackdat 2 seg 3 dat seg count 0
+ 39 19:35:31.837836 1.1 > 1.1 15 ils-ack 8196>8195 ack 3 ackdat 2
+ 40 19:35:34.615744 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 3
+ 41 19:35:34.615766 1.1 > 1.1 15 data-ack 8198>8197 ack 3 oack 2
+ 42 19:35:35.479208 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 4
+ 43 19:35:35.479229 1.1 > 1.1 15 data-ack 8198>8197 ack 4 oack 2
+ 44 19:35:35.597818 endnode-hello endnode vers 2 eco 0 ueco 0 src 1.1 blksize 16434 rtr 0.0 hello 10 data 2
+ 45 19:35:35.645002 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 5
+ 46 19:35:35.645024 1.1 > 1.1 15 data-ack 8198>8197 ack 5 oack 2
+ 47 19:35:35.766720 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 6
+ 48 19:35:35.766741 1.1 > 1.1 15 data-ack 8198>8197 ack 6 oack 2
+ 49 19:35:35.955433 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 7
+ 50 19:35:35.955454 1.1 > 1.1 15 data-ack 8198>8197 ack 7 oack 2
+ 51 19:35:36.196869 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 8
+ 52 19:35:36.196887 1.1 > 1.1 15 data-ack 8198>8197 ack 8 oack 2
+ 53 19:35:36.403300 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 9
+ 54 19:35:36.403321 1.1 > 1.1 15 data-ack 8198>8197 ack 9 oack 2
+ 55 19:35:36.475189 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 10
+ 56 19:35:36.475208 1.1 > 1.1 15 data-ack 8198>8197 ack 10 oack 2
+ 57 19:35:36.634888 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 11
+ 58 19:35:36.634909 1.1 > 1.1 15 data-ack 8198>8197 ack 11 oack 2
+ 59 19:35:36.783234 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 12
+ 60 19:35:36.783254 1.1 > 1.1 15 data-ack 8198>8197 ack 12 oack 2
+ 61 19:35:36.875526 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 13
+ 62 19:35:36.875548 1.1 > 1.1 15 data-ack 8198>8197 ack 13 oack 2
+ 63 19:35:37.086154 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 14
+ 64 19:35:37.086176 1.1 > 1.1 15 data-ack 8198>8197 ack 14 oack 2
+ 65 19:35:40.076368 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 15
+ 66 19:35:40.076390 1.1 > 1.1 15 data-ack 8198>8197 ack 15 oack 2
+ 67 19:35:40.600630 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 16
+ 68 19:35:40.600651 1.1 > 1.1 15 data-ack 8198>8197 ack 16 oack 2
+ 69 19:35:40.769928 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 17
+ 70 19:35:40.769950 1.1 > 1.1 15 data-ack 8198>8197 ack 17 oack 2
+ 71 19:35:40.884668 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 18
+ 72 19:35:40.884690 1.1 > 1.1 15 data-ack 8198>8197 ack 18 oack 2
+ 73 19:35:41.074542 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 19
+ 74 19:35:41.074562 1.1 > 1.1 15 data-ack 8198>8197 ack 19 oack 2
+ 75 19:35:41.259348 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 20
+ 76 19:35:41.259369 1.1 > 1.1 15 data-ack 8198>8197 ack 20 oack 2
+ 77 19:35:41.444695 1.1 > 1.1 33 data 8197>8198 ack 1 oack 1 seg 21
+ 78 19:35:41.444716 1.1 > 1.1 15 data-ack 8198>8197 ack 21 oack 2
+ 79 19:35:41.837823 1.1 > 1.1 19 link-service 8195>8196 ack 0 ackdat 2 seg 4 dat seg count 0
+ 80 19:35:41.837842 1.1 > 1.1 15 ils-ack 8196>8195 ack 4 ackdat 2
+ 81 19:35:44.441047 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 3
+ 82 19:35:44.441069 1.1 > 1.1 15 data-ack 8196>8195 ack 3 oack 4
+ 83 19:35:44.652418 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 4
+ 84 19:35:44.652440 1.1 > 1.1 15 data-ack 8196>8195 ack 4 oack 4
+ 85 19:35:44.814331 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 5
+ 86 19:35:44.814351 1.1 > 1.1 15 data-ack 8196>8195 ack 5 oack 4
+ 87 19:35:44.949471 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 6
+ 88 19:35:44.949494 1.1 > 1.1 15 data-ack 8196>8195 ack 6 oack 4
+ 89 19:35:45.103655 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 7
+ 90 19:35:45.103676 1.1 > 1.1 15 data-ack 8196>8195 ack 7 oack 4
+ 91 19:35:45.372559 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 8
+ 92 19:35:45.372585 1.1 > 1.1 15 data-ack 8196>8195 ack 8 oack 4
+ 93 19:35:45.553522 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 9
+ 94 19:35:45.553541 1.1 > 1.1 15 data-ack 8196>8195 ack 9 oack 4
+ 95 19:35:45.597817 endnode-hello endnode vers 2 eco 0 ueco 0 src 1.1 blksize 16434 rtr 0.0 hello 10 data 2
+ 96 19:35:45.624206 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 10
+ 97 19:35:45.624226 1.1 > 1.1 15 data-ack 8196>8195 ack 10 oack 4
+ 98 19:35:45.746821 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 11
+ 99 19:35:45.746841 1.1 > 1.1 15 data-ack 8196>8195 ack 11 oack 4
+ 100 19:35:45.907250 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 12
+ 101 19:35:45.907270 1.1 > 1.1 15 data-ack 8196>8195 ack 12 oack 4
+ 102 19:35:45.980850 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 13
+ 103 19:35:45.980870 1.1 > 1.1 15 data-ack 8196>8195 ack 13 oack 4
+ 104 19:35:46.165240 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 14
+ 105 19:35:46.165261 1.1 > 1.1 15 data-ack 8196>8195 ack 14 oack 4
+ 106 19:35:46.211471 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 15
+ 107 19:35:46.211495 1.1 > 1.1 15 data-ack 8196>8195 ack 15 oack 4
+ 108 19:35:46.458186 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 16
+ 109 19:35:46.458208 1.1 > 1.1 15 data-ack 8196>8195 ack 16 oack 4
+ 110 19:35:46.683558 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 17
+ 111 19:35:46.683578 1.1 > 1.1 15 data-ack 8196>8195 ack 17 oack 4
+ 112 19:35:46.730040 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 18
+ 113 19:35:46.730060 1.1 > 1.1 15 data-ack 8196>8195 ack 18 oack 4
+ 114 19:35:46.929477 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 19
+ 115 19:35:46.929497 1.1 > 1.1 15 data-ack 8196>8195 ack 19 oack 4
+ 116 19:35:47.117563 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 20
+ 117 19:35:47.117590 1.1 > 1.1 15 data-ack 8196>8195 ack 20 oack 4
+ 118 19:35:49.526044 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 21
+ 119 19:35:49.526065 1.1 > 1.1 15 data-ack 8196>8195 ack 21 oack 4
+ 120 19:35:50.337432 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 22
+ 121 19:35:50.337453 1.1 > 1.1 15 data-ack 8196>8195 ack 22 oack 4
+ 122 19:35:50.787533 1.1 > 1.1 33 data 8195>8196 ack 2 oack 0 seg 23
+ 123 19:35:50.787553 1.1 > 1.1 15 data-ack 8196>8195 ack 23 oack 4
+ 124 19:35:51.902825 1.1 > 1.1 19 link-service 8197>8198 ack 1 ackdat 1 seg 3 dat seg count 0
+ 125 19:35:51.902839 1.1 > 1.1 19 link-service 8198>8197 ack 2 ackdat 21 seg 2 dat seg count 0
+ 126 19:35:51.902850 1.1 > 1.1 15 ils-ack 8198>8197 ack 3 ackdat 21
+ 127 19:35:51.902858 1.1 > 1.1 15 ils-ack 8197>8198 ack 2 ackdat 1
+ 128 19:35:55.597819 endnode-hello endnode vers 2 eco 0 ueco 0 src 1.1 blksize 16434 rtr 0.0 hello 10 data 2
+ 129 19:35:58.862425 1.1 > 1.1 32 data 8197>8198 ack 1 oack 2 seg 22
+ 130 19:35:58.862447 1.1 > 1.1 15 data-ack 8198>8197 ack 22 oack 3
+ 131 19:35:58.862458 1.1 > 1.1 32 data 8197>8198 ack 1 oack 2 seg 23
+ 132 19:35:58.862464 1.1 > 1.1 15 data-ack 8198>8197 ack 23 oack 3
+ 133 19:35:58.862474 1.1 > 1.1 14 disconn-initiate 8196>8195 object rejected connect
+ 134 19:35:58.862480 1.1 > 1.1 13 disconn-confirm 8195>8196 disconnect complete
+ 135 19:35:58.862497 1.1 > 1.1 14 disconn-initiate 8197>8198 object rejected connect
+ 136 19:35:58.862503 1.1 > 1.1 13 disconn-confirm 8198>8197 disconnect complete
+ 137 19:35:58.862705 1.1 > 1.1 13 disconn-confirm 8198>8197 disconnect complete
+ 138 19:35:58.862725 1.1 > 1.1 13 disconn-confirm 8195>8196 disconnect complete
+ 139 19:36:05.597819 endnode-hello endnode vers 2 eco 0 ueco 0 src 1.1 blksize 16434 rtr 0.0 hello 10 data 2
diff --git a/tests/dhcp-mud.out b/tests/dhcp-mud.out
new file mode 100644
index 0000000..90e12df
--- /dev/null
+++ b/tests/dhcp-mud.out
@@ -0,0 +1,36 @@
+ 1 12:28:41.189402 IP (tos 0x0, ttl 255, id 9459, offset 0, flags [none], proto UDP (17), length 422)
+ 62.12.173.121.67 > 62.12.173.114.67: [udp sum ok] BOOTP/DHCP, Request from b8:27:eb:b8:53:c8, length 394, hops 1, xid 0x68c4847, Flags [none] (0x0000)
+ Client-IP 62.12.173.123
+ Gateway-IP 62.12.173.121
+ Client-Ethernet-Address b8:27:eb:b8:53:c8
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Request
+ Client-ID (61), length 7: ether b8:27:eb:b8:53:c8
+ MSZ (57), length 2: 1472
+ MUD-URL (161), length 54: "https://mudctl.example.com/.well-known/mud/v1/rasbp101"
+ Vendor-Class (60), length 45: "dhcpcd-6.11.5:Linux-4.1.18-v7+:armv7l:BCM2709"
+ Hostname (12), length 11: "raspberrypi"
+ Unknown (145), length 1: 1
+ Parameter-Request (55), length 16:
+ Subnet-Mask (1), Classless-Static-Route (121), Static-Route (33), Default-Gateway (3)
+ Domain-Name-Server (6), Hostname (12), Domain-Name (15), BR (28)
+ NTP (42), Lease-Time (51), Server-ID (54), RN (58)
+ RB (59), POSIX-TZ (100), TZ-Name (101), Unknown (119)
+ 2 12:28:41.318491 IP (tos 0x0, ttl 64, id 10305, offset 0, flags [DF], proto UDP (17), length 338)
+ 62.12.173.114.67 > 62.12.173.121.67: [udp sum ok] BOOTP/DHCP, Reply, length 310, hops 1, xid 0x68c4847, Flags [none] (0x0000)
+ Client-IP 62.12.173.123
+ Your-IP 62.12.173.123
+ Server-IP 62.12.173.114
+ Gateway-IP 62.12.173.121
+ Client-Ethernet-Address b8:27:eb:b8:53:c8
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: ACK
+ Server-ID (54), length 4: 62.12.173.114
+ Lease-Time (51), length 4: 600
+ Subnet-Mask (1), length 4: 255.255.255.248
+ Default-Gateway (3), length 4: 62.12.173.121
+ Domain-Name-Server (6), length 4: 62.12.173.114
+ Domain-Name (15), length 19: "ofcourseimright.com"
+ TZ-Name (101), length 13: "Europe/Berlin"
diff --git a/tests/dhcp-mud.pcap b/tests/dhcp-mud.pcap
new file mode 100644
index 0000000..717f019
--- /dev/null
+++ b/tests/dhcp-mud.pcap
Binary files differ
diff --git a/tests/dhcp-rfc3004-v.out b/tests/dhcp-rfc3004-v.out
new file mode 100644
index 0000000..336a84c
--- /dev/null
+++ b/tests/dhcp-rfc3004-v.out
@@ -0,0 +1,55 @@
+ 1 09:38:18.352570 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:29:1f:74:06, length 300, xid 0x6e32864, Flags [none]
+ Client-Ethernet-Address 00:0c:29:1f:74:06
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Requested-IP (50), length 4: 192.168.1.4
+ Parameter-Request (55), length 7:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Default-Gateway (3)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12)
+ User-Class (77), length 37:
+ instance#1: "subopt1", length 7
+ instance#2: "subopt2-123456789", length 17
+ instance#3: "subopt3-12", length 10
+ 2 09:38:18.384572 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 308)
+ 192.168.1.1.67 > 192.168.1.4.68: BOOTP/DHCP, Reply, length 280, xid 0x6e32864, Flags [none]
+ Your-IP 192.168.1.4
+ Client-Ethernet-Address 00:0c:29:1f:74:06
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Offer
+ Server-ID (54), length 4: 192.168.1.1
+ Lease-Time (51), length 4: 86400
+ Subnet-Mask (1), length 4: 255.255.255.0
+ Default-Gateway (3), length 4: 192.168.1.1
+ Domain-Name-Server (6), length 4: 192.168.1.1
+ Domain-Name (15), length 4: "Home"
+ 3 09:38:18.384572 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 332)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:29:1f:74:06, length 304, xid 0x6e32864, Flags [none]
+ Client-Ethernet-Address 00:0c:29:1f:74:06
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Request
+ Server-ID (54), length 4: 192.168.1.1
+ Requested-IP (50), length 4: 192.168.1.4
+ Parameter-Request (55), length 7:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Default-Gateway (3)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12)
+ User-Class (77), length 37:
+ instance#1: "subopt1", length 7
+ instance#2: "subopt2-123456789", length 17
+ instance#3: "subopt3-12", length 10
+ 4 09:38:18.464577 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 308)
+ 192.168.1.1.67 > 192.168.1.4.68: BOOTP/DHCP, Reply, length 280, xid 0x6e32864, Flags [none]
+ Your-IP 192.168.1.4
+ Client-Ethernet-Address 00:0c:29:1f:74:06
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: ACK
+ Server-ID (54), length 4: 192.168.1.1
+ Lease-Time (51), length 4: 86400
+ Subnet-Mask (1), length 4: 255.255.255.0
+ Default-Gateway (3), length 4: 192.168.1.1
+ Domain-Name-Server (6), length 4: 192.168.1.1
+ Domain-Name (15), length 4: "Home"
diff --git a/tests/dhcp-rfc3004.pcap b/tests/dhcp-rfc3004.pcap
new file mode 100644
index 0000000..11806c3
--- /dev/null
+++ b/tests/dhcp-rfc3004.pcap
Binary files differ
diff --git a/tests/dhcp-rfc4388.out b/tests/dhcp-rfc4388.out
new file mode 100644
index 0000000..abea9ec
--- /dev/null
+++ b/tests/dhcp-rfc4388.out
@@ -0,0 +1,432 @@
+ 1 09:30:44.514026 IP (tos 0x0, ttl 64, id 46879, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 300, hops 1, xid 0x3cd0af7e, Flags [none]
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 13:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3)
+ 2 09:30:44.514702 IP (tos 0x0, ttl 64, id 25012, offset 0, flags [DF], proto ICMP (1), length 48)
+ 10.40.2.3 > 10.30.4.4: ICMP echo request, id 16420, seq 0, length 28
+ 3 09:30:45.516190 IP (tos 0x0, ttl 64, id 12528, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 300, hops 1, xid 0x3cd0af7e, Flags [none]
+ Your-IP 10.30.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Offer
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43200
+ Subnet-Mask (1), length 4: 255.255.0.0
+ Default-Gateway (3), length 4: 10.30.1.1
+ 4 09:30:45.517296 IP (tos 0x0, ttl 64, id 47088, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 300, hops 1, xid 0x3cd0af7e, Flags [none]
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Request
+ Server-ID (54), length 4: 10.40.2.3
+ Requested-IP (50), length 4: 10.30.4.4
+ Parameter-Request (55), length 13:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3)
+ 5 09:30:45.518089 IP (tos 0x0, ttl 64, id 12529, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 300, hops 1, xid 0x3cd0af7e, Flags [none]
+ Your-IP 10.30.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: ACK
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43200
+ Subnet-Mask (1), length 4: 255.255.0.0
+ Default-Gateway (3), length 4: 10.30.1.1
+ 6 09:30:47.583028 IP (tos 0xc0, ttl 64, id 40042, offset 0, flags [none], proto ICMP (1), length 76)
+ 10.40.1.1 > 10.40.2.3: ICMP host 10.30.4.4 unreachable, length 56
+ IP (tos 0x0, ttl 63, id 25012, offset 0, flags [DF], proto ICMP (1), length 48)
+ 10.40.2.3 > 10.30.4.4: ICMP echo request, id 16420, seq 0, length 28
+ 7 09:30:49.545424 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.40.1.1 tell 10.40.2.3, length 46
+ 8 09:30:49.545438 ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.40.1.1 is-at 74:83:ef:07:d0:a9, length 28
+ 9 09:30:58.968421 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 310)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 282, hops 1, xid 0x1, Flags [none]
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseQuery
+ 10 09:30:58.969373 IP (tos 0x0, ttl 64, id 13020, offset 0, flags [DF], proto UDP (17), length 308)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 280, hops 1, xid 0x1, Flags [none]
+ Client-IP 10.30.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseActive
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43187
+ RN (58), length 4: 21587
+ RB (59), length 4: 37787
+ Associated-IP (92), length 4: 10.50.4.4
+ Last-Transaction-Time (91), length 4: 13
+ 11 09:31:14.845616 IP (tos 0x0, ttl 64, id 30802, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.50.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 300, hops 1, xid 0xbebd1734, Flags [none]
+ Gateway-IP 10.50.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 13:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3)
+ 12 09:31:14.846289 IP (tos 0x0, ttl 64, id 1143, offset 0, flags [DF], proto ICMP (1), length 48)
+ 10.40.2.3 > 10.50.4.4: ICMP echo request, id 51245, seq 0, length 28
+ 13 09:31:15.847700 IP (tos 0x0, ttl 64, id 28608, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.40.2.3.67 > 10.50.1.1.67: BOOTP/DHCP, Reply, length 300, hops 1, xid 0xbebd1734, Flags [none]
+ Your-IP 10.50.4.4
+ Gateway-IP 10.50.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Offer
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43200
+ Subnet-Mask (1), length 4: 255.255.0.0
+ Default-Gateway (3), length 4: 10.50.1.1
+ 14 09:31:15.848914 IP (tos 0x0, ttl 64, id 30972, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.50.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 300, hops 1, xid 0xbebd1734, Flags [none]
+ Gateway-IP 10.50.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Request
+ Server-ID (54), length 4: 10.40.2.3
+ Requested-IP (50), length 4: 10.50.4.4
+ Parameter-Request (55), length 13:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3)
+ 15 09:31:15.849515 IP (tos 0x0, ttl 64, id 28609, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.40.2.3.67 > 10.50.1.1.67: BOOTP/DHCP, Reply, length 300, hops 1, xid 0xbebd1734, Flags [none]
+ Your-IP 10.50.4.4
+ Gateway-IP 10.50.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: ACK
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43200
+ Subnet-Mask (1), length 4: 255.255.0.0
+ Default-Gateway (3), length 4: 10.50.1.1
+ 16 09:31:17.915011 IP (tos 0xc0, ttl 64, id 44295, offset 0, flags [none], proto ICMP (1), length 76)
+ 10.40.1.1 > 10.40.2.3: ICMP host 10.50.4.4 unreachable, length 56
+ IP (tos 0x0, ttl 63, id 1143, offset 0, flags [DF], proto ICMP (1), length 48)
+ 10.40.2.3 > 10.50.4.4: ICMP echo request, id 51245, seq 0, length 28
+ 17 09:31:20.008803 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.40.1.1 tell 10.40.2.3, length 46
+ 18 09:31:20.008839 ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.40.1.1 is-at 74:83:ef:07:d0:a9, length 28
+ 19 09:31:24.877831 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 310)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 282, hops 1, xid 0x1, Flags [none]
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseQuery
+ 20 09:31:24.878717 IP (tos 0x0, ttl 64, id 16753, offset 0, flags [DF], proto UDP (17), length 308)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 280, hops 1, xid 0x1, Flags [none]
+ Client-IP 10.50.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseActive
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43191
+ RN (58), length 4: 21591
+ RB (59), length 4: 37791
+ Associated-IP (92), length 4: 10.30.4.4
+ Last-Transaction-Time (91), length 4: 9
+ 21 09:31:28.225031 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 310)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 282, hops 1, xid 0x1, Flags [none]
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseQuery
+ 22 09:31:28.225976 IP (tos 0x0, ttl 64, id 17423, offset 0, flags [DF], proto UDP (17), length 308)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 280, hops 1, xid 0x1, Flags [none]
+ Client-IP 10.50.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseActive
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43187
+ RN (58), length 4: 21587
+ RB (59), length 4: 37787
+ Associated-IP (92), length 4: 10.30.4.4
+ Last-Transaction-Time (91), length 4: 13
+ 23 09:31:35.017184 IP (tos 0x0, ttl 64, id 33783, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.50.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 300, hops 1, xid 0x5ad9290e, Flags [none]
+ Gateway-IP 10.50.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 13:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3)
+ 24 09:31:35.017845 IP (tos 0x0, ttl 64, id 29423, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.40.2.3.67 > 10.50.1.1.67: BOOTP/DHCP, Reply, length 300, hops 1, xid 0x5ad9290e, Flags [none]
+ Your-IP 10.50.4.4
+ Gateway-IP 10.50.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Offer
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43200
+ Subnet-Mask (1), length 4: 255.255.0.0
+ Default-Gateway (3), length 4: 10.50.1.1
+ 25 09:31:35.018697 IP (tos 0x0, ttl 64, id 33784, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.50.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 300, hops 1, xid 0x5ad9290e, Flags [none]
+ Gateway-IP 10.50.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Request
+ Server-ID (54), length 4: 10.40.2.3
+ Requested-IP (50), length 4: 10.50.4.4
+ Parameter-Request (55), length 13:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3)
+ 26 09:31:35.019247 IP (tos 0x0, ttl 64, id 29424, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.40.2.3.67 > 10.50.1.1.67: BOOTP/DHCP, Reply, length 300, hops 1, xid 0x5ad9290e, Flags [none]
+ Your-IP 10.50.4.4
+ Gateway-IP 10.50.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: ACK
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43200
+ Subnet-Mask (1), length 4: 255.255.0.0
+ Default-Gateway (3), length 4: 10.50.1.1
+ 27 09:31:39.799063 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 310)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 282, hops 1, xid 0x1, Flags [none]
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseQuery
+ 28 09:31:39.800108 IP (tos 0x0, ttl 64, id 19639, offset 0, flags [DF], proto UDP (17), length 308)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 280, hops 1, xid 0x1, Flags [none]
+ Client-IP 10.50.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseActive
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43196
+ RN (58), length 4: 21596
+ RB (59), length 4: 37796
+ Associated-IP (92), length 4: 10.30.4.4
+ Last-Transaction-Time (91), length 4: 4
+ 29 09:31:44.840289 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.40.1.1 tell 10.40.2.3, length 46
+ 30 09:31:44.840312 ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.40.1.1 is-at 74:83:ef:07:d0:a9, length 28
+ 31 09:31:56.852864 IP (tos 0x0, ttl 64, id 54915, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 300, hops 1, xid 0xf9704526, Flags [none]
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 13:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3)
+ 32 09:31:56.853508 IP (tos 0x0, ttl 64, id 37390, offset 0, flags [DF], proto ICMP (1), length 48)
+ 10.40.2.3 > 10.30.4.4: ICMP echo request, id 16420, seq 0, length 28
+ 33 09:31:57.854797 IP (tos 0x0, ttl 64, id 20224, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 300, hops 1, xid 0xf9704526, Flags [none]
+ Your-IP 10.30.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Offer
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43200
+ Subnet-Mask (1), length 4: 255.255.0.0
+ Default-Gateway (3), length 4: 10.30.1.1
+ 34 09:31:57.855819 IP (tos 0x0, ttl 64, id 55004, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 300, hops 1, xid 0xf9704526, Flags [none]
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Request
+ Server-ID (54), length 4: 10.40.2.3
+ Requested-IP (50), length 4: 10.30.4.4
+ Parameter-Request (55), length 13:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Classless-Static-Route (121)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), YD (40)
+ YS (41), NTP (42), MTU (26), Unknown (119)
+ Default-Gateway (3)
+ 35 09:31:57.856371 IP (tos 0x0, ttl 64, id 20225, offset 0, flags [DF], proto UDP (17), length 328)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 300, hops 1, xid 0xf9704526, Flags [none]
+ Your-IP 10.30.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: ACK
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43200
+ Subnet-Mask (1), length 4: 255.255.0.0
+ Default-Gateway (3), length 4: 10.30.1.1
+ 36 09:31:59.930995 IP (tos 0xc0, ttl 64, id 52522, offset 0, flags [none], proto ICMP (1), length 76)
+ 10.40.1.1 > 10.40.2.3: ICMP host 10.30.4.4 unreachable, length 56
+ IP (tos 0x0, ttl 63, id 37390, offset 0, flags [DF], proto ICMP (1), length 48)
+ 10.40.2.3 > 10.30.4.4: ICMP echo request, id 16420, seq 0, length 28
+ 37 09:32:06.472831 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 310)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 282, hops 1, xid 0x1, Flags [none]
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseQuery
+ 38 09:32:06.473655 IP (tos 0x0, ttl 64, id 22361, offset 0, flags [DF], proto UDP (17), length 308)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 280, hops 1, xid 0x1, Flags [none]
+ Client-IP 10.30.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseActive
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 43191
+ RN (58), length 4: 21591
+ RB (59), length 4: 37791
+ Associated-IP (92), length 4: 10.50.4.4
+ Last-Transaction-Time (91), length 4: 9
+ 39 09:34:29.649179 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 310)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 00:00:00:00:00:00, length 282, hops 1, xid 0x1, Flags [none]
+ Client-IP 0.161.224.64
+ Your-IP 64.0.0.0
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 00:00:00:00:00:00
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseQuery
+ 40 09:34:29.650219 IP (tos 0x0, ttl 64, id 39858, offset 0, flags [DF], proto UDP (17), length 284)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 256, hops 1, xid 0x1, Flags [none]
+ Client-IP 0.161.224.64
+ Your-IP 64.0.0.0
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 00:00:00:00:00:00
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseUnknown
+ Server-ID (54), length 4: 10.40.2.3
+ Default-Gateway (3), length 4: 10.30.1.1
+ 41 09:34:34.821056 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.40.1.1 tell 10.40.2.3, length 46
+ 42 09:34:34.821079 ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.40.1.1 is-at 74:83:ef:07:d0:a9, length 28
+ 43 09:37:40.343842 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 310)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 00:00:00:00:00:00, length 282, hops 1, xid 0x1, Flags [none]
+ Client-IP 0.161.224.64
+ Your-IP 64.0.0.0
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 00:00:00:00:00:00
+ Vendor-#0x53633501
+ 44 09:59:07.320395 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 310)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 01:00:00:00:00:00, length 282, hops 1, xid 0x1, Flags [none]
+ Client-IP 0.161.224.64
+ Your-IP 64.0.0.0
+ Gateway-IP 0.10.30.1
+ Client-Ethernet-Address 01:00:00:00:00:00
+ Vendor-#0x82536335
+ 45 10:02:01.305524 IP (tos 0x0, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 310)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 00:00:00:00:00:00, length 282, hops 1, xid 0x1, Flags [none]
+ Client-IP 10.30.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 00:00:00:00:00:00
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseQuery
+ 46 10:02:01.306377 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.40.1.1 tell 10.40.2.3, length 46
+ 47 10:02:01.306390 ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.40.1.1 is-at 74:83:ef:07:d0:a9, length 28
+ 48 10:02:01.306866 IP (tos 0x0, ttl 64, id 48355, offset 0, flags [DF], proto UDP (17), length 302)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 274, hops 1, xid 0x1, Flags [none]
+ Client-IP 10.30.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseActive
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 41396
+ RN (58), length 4: 19796
+ RB (59), length 4: 35996
+ Last-Transaction-Time (91), length 4: 1804
+ 49 10:02:57.556501 IP (tos 0x0, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 310)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 00:00:00:00:00:00, length 282, hops 1, xid 0x1, Flags [none]
+ Client-IP 10.50.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 00:00:00:00:00:00
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseQuery
+ 50 10:02:57.557434 IP (tos 0x0, ttl 64, id 50998, offset 0, flags [DF], proto UDP (17), length 302)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 274, hops 1, xid 0x1, Flags [none]
+ Client-IP 10.50.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseActive
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 41318
+ RN (58), length 4: 19718
+ RB (59), length 4: 35918
+ Last-Transaction-Time (91), length 4: 1882
+ 51 10:03:02.564973 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.40.1.1 tell 10.40.2.3, length 46
+ 52 10:03:02.564989 ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.40.1.1 is-at 74:83:ef:07:d0:a9, length 28
+ 53 10:03:16.115168 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 310)
+ 10.30.1.1.67 > 10.40.2.3.67: BOOTP/DHCP, Request from 5a:4f:34:b1:af:66, length 282, hops 1, xid 0x1, Flags [none]
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseQuery
+ 54 10:03:16.116147 IP (tos 0x0, ttl 64, id 52645, offset 0, flags [DF], proto UDP (17), length 308)
+ 10.40.2.3.67 > 10.30.1.1.67: BOOTP/DHCP, Reply, length 280, hops 1, xid 0x1, Flags [none]
+ Client-IP 10.30.4.4
+ Gateway-IP 10.30.1.1
+ Client-Ethernet-Address 5a:4f:34:b1:af:66
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: LeaseActive
+ Server-ID (54), length 4: 10.40.2.3
+ Lease-Time (51), length 4: 41321
+ RN (58), length 4: 19721
+ RB (59), length 4: 35921
+ Associated-IP (92), length 4: 10.50.4.4
+ Last-Transaction-Time (91), length 4: 1879
diff --git a/tests/dhcp-rfc4388.pcap b/tests/dhcp-rfc4388.pcap
new file mode 100644
index 0000000..bfa909e
--- /dev/null
+++ b/tests/dhcp-rfc4388.pcap
Binary files differ
diff --git a/tests/dhcp-rfc5859-v.out b/tests/dhcp-rfc5859-v.out
new file mode 100644
index 0000000..cfec488
--- /dev/null
+++ b/tests/dhcp-rfc5859-v.out
@@ -0,0 +1,44 @@
+ 1 15:36:12.905633 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:29:1f:74:06, length 300, xid 0xde549277, Flags [none]
+ Client-Ethernet-Address 00:0c:29:1f:74:06
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ Parameter-Request (55), length 8:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Default-Gateway (3)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), TFTP-Server-Address (150)
+ 2 15:36:13.061643 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 192.168.1.1.67 > 192.168.1.4.68: BOOTP/DHCP, Reply, length 300, xid 0xde549277, Flags [none]
+ Your-IP 192.168.1.4
+ Client-Ethernet-Address 00:0c:29:1f:74:06
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Offer
+ Server-ID (54), length 4: 192.168.1.1
+ Lease-Time (51), length 4: 43200
+ Subnet-Mask (1), length 4: 255.255.255.0
+ Default-Gateway (3), length 4: 192.168.1.1
+ TFTP-Server-Address (150), length 8: 192.168.1.10,192.168.1.11
+ 3 15:36:13.061643 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:29:1f:74:06, length 300, xid 0xde549277, Flags [none]
+ Client-Ethernet-Address 00:0c:29:1f:74:06
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Request
+ Server-ID (54), length 4: 192.168.1.1
+ Requested-IP (50), length 4: 192.168.1.4
+ Parameter-Request (55), length 8:
+ Subnet-Mask (1), BR (28), Time-Zone (2), Default-Gateway (3)
+ Domain-Name (15), Domain-Name-Server (6), Hostname (12), TFTP-Server-Address (150)
+ 4 15:36:13.065643 IP (tos 0x10, ttl 128, id 0, offset 0, flags [none], proto UDP (17), length 328)
+ 192.168.1.1.67 > 192.168.1.4.68: BOOTP/DHCP, Reply, length 300, xid 0xde549277, Flags [none]
+ Your-IP 192.168.1.4
+ Client-Ethernet-Address 00:0c:29:1f:74:06
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: ACK
+ Server-ID (54), length 4: 192.168.1.1
+ Lease-Time (51), length 4: 43200
+ Subnet-Mask (1), length 4: 255.255.255.0
+ Default-Gateway (3), length 4: 192.168.1.1
+ TFTP-Server-Address (150), length 8: 192.168.1.10,192.168.1.11
diff --git a/tests/dhcp-rfc5859.pcap b/tests/dhcp-rfc5859.pcap
new file mode 100644
index 0000000..e16a6b3
--- /dev/null
+++ b/tests/dhcp-rfc5859.pcap
Binary files differ
diff --git a/tests/dhcp6_reconf_asan.out b/tests/dhcp6_reconf_asan.out
new file mode 100644
index 0000000..6da7137
--- /dev/null
+++ b/tests/dhcp6_reconf_asan.out
@@ -0,0 +1,2 @@
+ 1 01:51:13.369098755 IP (tos 0x60, ttl 254, id 21519, offset 0, flags [+, DF, rsvd], proto UDP (17), length 768, options (EOL), bad cksum 9615 (->c6f)!)
+ 251.73.86.150.514 > 126.172.217.192.546: dhcp6 relay-reply (linkaddr=300:10ed:ff:f01:f:0:7f:7f peeraddr=ffb6:3a64::c1:2300:581c:d00 (reconfigure-message ?) (reconfigure-message ?))
diff --git a/tests/dhcp6_reconf_asan.pcap b/tests/dhcp6_reconf_asan.pcap
new file mode 100644
index 0000000..9d0ffab
--- /dev/null
+++ b/tests/dhcp6_reconf_asan.pcap
Binary files differ
diff --git a/tests/dhcpv6-AFTR-Name-RFC6334.out b/tests/dhcpv6-AFTR-Name-RFC6334.out
new file mode 100644
index 0000000..db2894f
--- /dev/null
+++ b/tests/dhcpv6-AFTR-Name-RFC6334.out
@@ -0,0 +1,4 @@
+ 1 08:41:26.351299 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 56) fe80::201:2ff:fe03:405.546 > ff02::1:2.547: [udp sum ok] dhcp6 solicit (xid=d81eb8 (client-ID hwaddr type 1 000102030405) (option-request DNS-server AFTR-Name) (elapsed-time 0) (IA_PD IAID:33752069 T1:3600 T2:5400))
+ 2 08:41:26.351726 IP6 (hlim 64, next-header UDP (17) payload length: 142) fe80::211:22ff:fe33:4455.547 > fe80::201:2ff:fe03:405.546: [udp sum ok] dhcp6 advertise (xid=d81eb8 (IA_PD IAID:33752069 T1:150 T2:250 (IA_PD-prefix 2a00:1:1:100::/56 pltime:250 vltime:300)) (client-ID hwaddr type 1 000102030405) (server-ID hwaddr/time type 1 time 406802160 001122334455) (preference 10) (DNS-server 2a01::1) (AFTR-Name aftr-name.mydomain.net))
+ 3 08:41:27.442370 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 103) fe80::201:2ff:fe03:405.546 > ff02::1:2.547: [udp sum ok] dhcp6 request (xid=1e291d (client-ID hwaddr type 1 000102030405) (server-ID hwaddr/time type 1 time 406802160 001122334455) (option-request DNS-server AFTR-Name) (elapsed-time 0) (IA_PD IAID:33752069 T1:3600 T2:5400 (IA_PD-prefix 2a00:1:1:100::/56 pltime:7200 vltime:7500)))
+ 4 08:41:27.443102 IP6 (hlim 64, next-header UDP (17) payload length: 142) fe80::211:22ff:fe33:4455.547 > fe80::201:2ff:fe03:405.546: [udp sum ok] dhcp6 reply (xid=1e291d (IA_PD IAID:33752069 T1:150 T2:250 (IA_PD-prefix 2a00:1:1:100::/56 pltime:250 vltime:300)) (client-ID hwaddr type 1 000102030405) (server-ID hwaddr/time type 1 time 406802160 001122334455) (preference 10) (DNS-server 2a01::1) (AFTR-Name aftr-name.mydomain.net))
diff --git a/tests/dhcpv6-AFTR-Name-RFC6334.pcap b/tests/dhcpv6-AFTR-Name-RFC6334.pcap
new file mode 100644
index 0000000..d6b353e
--- /dev/null
+++ b/tests/dhcpv6-AFTR-Name-RFC6334.pcap
Binary files differ
diff --git a/tests/dhcpv6-domain-list.out b/tests/dhcpv6-domain-list.out
new file mode 100644
index 0000000..a4d04f9
--- /dev/null
+++ b/tests/dhcpv6-domain-list.out
@@ -0,0 +1 @@
+ 1 09:51:39.660420 IP6 (hlim 64, next-header UDP (17) payload length: 101) fe80::20c:29ff:fe9b:a15d.547 > fe80::20c:29ff:fe38:f368.546: [udp sum ok] dhcp6 reply (xid=aa56ce (client-ID hwaddr/time type 1 time 418384703 000c2938f368) (server-ID hwaddr/time type 1 time 418354459 000c299ba153) (DNS-search-list example.com. sales.example.com. eng.example.com.))
diff --git a/tests/dhcpv6-domain-list.pcap b/tests/dhcpv6-domain-list.pcap
new file mode 100644
index 0000000..b0afeff
--- /dev/null
+++ b/tests/dhcpv6-domain-list.pcap
Binary files differ
diff --git a/tests/dhcpv6-ia-na.out b/tests/dhcpv6-ia-na.out
new file mode 100644
index 0000000..808bb6d
--- /dev/null
+++ b/tests/dhcpv6-ia-na.out
@@ -0,0 +1,4 @@
+ 1 15:34:54.978692 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 56) fe80::201:2ff:fe03:405.546 > ff02::1:2.547: [udp sum ok] dhcp6 solicit (xid=90b45c (client-ID hwaddr type 1 000102030405) (option-request DNS-server DNS-search-list) (elapsed-time 0) (IA_NA IAID:33752069 T1:3600 T2:5400))
+ 2 15:34:54.980436 IP6 (hlim 64, next-header UDP (17) payload length: 88) fe80::211:22ff:fe33:4455.547 > fe80::201:2ff:fe03:405.546: [udp sum ok] dhcp6 advertise (xid=90b45c (IA_NA IAID:33752069 T1:3600 T2:5400 (IA_ADDR 2a00:1:1:200:38e6:b22e:c440:acdf pltime:4500 vltime:7200)) (client-ID hwaddr type 1 000102030405) (server-ID hwaddr/time type 1 time 407259276 001122334455))
+ 3 15:34:56.018625 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 102) fe80::201:2ff:fe03:405.546 > ff02::1:2.547: [udp sum ok] dhcp6 request (xid=2ffdd1 (client-ID hwaddr type 1 000102030405) (server-ID hwaddr/time type 1 time 407259276 001122334455) (option-request DNS-server DNS-search-list) (elapsed-time 0) (IA_NA IAID:33752069 T1:3600 T2:5400 (IA_ADDR 2a00:1:1:200:38e6:b22e:c440:acdf pltime:7200 vltime:7500)))
+ 4 15:34:56.019017 IP6 (hlim 64, next-header UDP (17) payload length: 88) fe80::211:22ff:fe33:4455.547 > fe80::201:2ff:fe03:405.546: [udp sum ok] dhcp6 reply (xid=2ffdd1 (IA_NA IAID:33752069 T1:3600 T2:5400 (IA_ADDR 2a00:1:1:200:38e6:b22e:c440:acdf pltime:4500 vltime:7200)) (client-ID hwaddr type 1 000102030405) (server-ID hwaddr/time type 1 time 407259276 001122334455))
diff --git a/tests/dhcpv6-ia-na.pcap b/tests/dhcpv6-ia-na.pcap
new file mode 100644
index 0000000..3cafdc5
--- /dev/null
+++ b/tests/dhcpv6-ia-na.pcap
Binary files differ
diff --git a/tests/dhcpv6-ia-pd.out b/tests/dhcpv6-ia-pd.out
new file mode 100644
index 0000000..6009386
--- /dev/null
+++ b/tests/dhcpv6-ia-pd.out
@@ -0,0 +1,4 @@
+ 1 15:39:34.395063 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 56) fe80::201:2ff:fe03:405.546 > ff02::1:2.547: [udp sum ok] dhcp6 solicit (xid=e1e093 (client-ID hwaddr type 1 000102030405) (option-request DNS-server DNS-search-list) (elapsed-time 0) (IA_PD IAID:33752069 T1:3600 T2:5400))
+ 2 15:39:34.400383 IP6 (hlim 64, next-header UDP (17) payload length: 89) fe80::211:22ff:fe33:4455.547 > fe80::201:2ff:fe03:405.546: [udp sum ok] dhcp6 advertise (xid=e1e093 (IA_PD IAID:33752069 T1:3600 T2:5400 (IA_PD-prefix 2a00:1:1:100::/56 pltime:4500 vltime:7200)) (client-ID hwaddr type 1 000102030405) (server-ID hwaddr/time type 1 time 407259545 001122334455))
+ 3 15:39:35.464992 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 103) fe80::201:2ff:fe03:405.546 > ff02::1:2.547: [udp sum ok] dhcp6 request (xid=12b08a (client-ID hwaddr type 1 000102030405) (server-ID hwaddr/time type 1 time 407259545 001122334455) (option-request DNS-server DNS-search-list) (elapsed-time 0) (IA_PD IAID:33752069 T1:3600 T2:5400 (IA_PD-prefix 2a00:1:1:100::/56 pltime:7200 vltime:7500)))
+ 4 15:39:35.465365 IP6 (hlim 64, next-header UDP (17) payload length: 89) fe80::211:22ff:fe33:4455.547 > fe80::201:2ff:fe03:405.546: [udp sum ok] dhcp6 reply (xid=12b08a (IA_PD IAID:33752069 T1:3600 T2:5400 (IA_PD-prefix 2a00:1:1:100::/56 pltime:4500 vltime:7200)) (client-ID hwaddr type 1 000102030405) (server-ID hwaddr/time type 1 time 407259545 001122334455))
diff --git a/tests/dhcpv6-ia-pd.pcap b/tests/dhcpv6-ia-pd.pcap
new file mode 100644
index 0000000..5fdd067
--- /dev/null
+++ b/tests/dhcpv6-ia-pd.pcap
Binary files differ
diff --git a/tests/dhcpv6-ia-ta.out b/tests/dhcpv6-ia-ta.out
new file mode 100644
index 0000000..d16ffff
--- /dev/null
+++ b/tests/dhcpv6-ia-ta.out
@@ -0,0 +1,4 @@
+ 1 15:32:15.264148 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 48) fe80::201:2ff:fe03:405.546 > ff02::1:2.547: [udp sum ok] dhcp6 solicit (xid=28b040 (client-ID hwaddr type 1 000102030405) (option-request DNS-server DNS-search-list) (elapsed-time 0) (IA_TA IAID:33752069))
+ 2 15:32:15.268385 IP6 (hlim 64, next-header UDP (17) payload length: 80) fe80::211:22ff:fe33:4455.547 > fe80::201:2ff:fe03:405.546: [udp sum ok] dhcp6 advertise (xid=28b040 (IA_TA IAID:33752069 (IA_ADDR 2a00:1:1:200:5da2:f920:84c4:88cc pltime:4500 vltime:7200)) (client-ID hwaddr type 1 000102030405) (server-ID hwaddr/time type 1 time 407259120 001122334455))
+ 3 15:32:16.312294 IP6 (class 0xc0, hlim 64, next-header UDP (17) payload length: 94) fe80::201:2ff:fe03:405.546 > ff02::1:2.547: [udp sum ok] dhcp6 request (xid=2b0e45 (client-ID hwaddr type 1 000102030405) (server-ID hwaddr/time type 1 time 407259120 001122334455) (option-request DNS-server DNS-search-list) (elapsed-time 0) (IA_TA IAID:33752069 (IA_ADDR 2a00:1:1:200:5da2:f920:84c4:88cc pltime:7200 vltime:7500)))
+ 4 15:32:16.312685 IP6 (hlim 64, next-header UDP (17) payload length: 80) fe80::211:22ff:fe33:4455.547 > fe80::201:2ff:fe03:405.546: [udp sum ok] dhcp6 reply (xid=2b0e45 (IA_TA IAID:33752069 (IA_ADDR 2a00:1:1:200:5da2:f920:84c4:88cc pltime:4500 vltime:7200)) (client-ID hwaddr type 1 000102030405) (server-ID hwaddr/time type 1 time 407259120 001122334455))
diff --git a/tests/dhcpv6-ia-ta.pcap b/tests/dhcpv6-ia-ta.pcap
new file mode 100644
index 0000000..b91f8b7
--- /dev/null
+++ b/tests/dhcpv6-ia-ta.pcap
Binary files differ
diff --git a/tests/dhcpv6-mud.out b/tests/dhcpv6-mud.out
new file mode 100644
index 0000000..e087426
--- /dev/null
+++ b/tests/dhcpv6-mud.out
@@ -0,0 +1,5 @@
+ 1 12:26:59.227100 IP6 (class 0xe0, hlim 255, next-header UDP (17) payload length: 252) 2001:8a8:1006:4:223:ebff:fe10:2c29.547 > 2001:8a8:1006:4:223:54ff:fec2:5702.547: [udp sum ok] dhcp6 relay-fwd (linkaddr=2001:8a8:1006:3:225:84ff:fedb:2380 peeraddr=fe80::ba27:ebff:feb8:53c8 (relay-message (dhcp6 solicit (xid=78244b (client-ID hwaddr/time type 1 time 509769483 b827ebb853c8) (elapsed-time 0) (vendor-class) (rapid-commit) (IA_NA IAID:3954725832 T1:0 T2:0) (Client-FQDN) (MUD-URL https://mudctl.example.com/.well-known/mud/v1/rasbp101) (reconfigure-accept) (option-request DNS-server DNS-search-list SNTP-servers Client-FQDN opt_82 opt_83))) (interface-ID 00000008...))
+ 2 12:27:00.196042 IP6 (class 0xe0, hlim 255, next-header UDP (17) payload length: 252) 2001:8a8:1006:4:223:ebff:fe10:2c29.547 > 2001:8a8:1006:4:223:54ff:fec2:5702.547: [udp sum ok] dhcp6 relay-fwd (linkaddr=2001:8a8:1006:3:225:84ff:fedb:2380 peeraddr=fe80::ba27:ebff:feb8:53c8 (relay-message (dhcp6 solicit (xid=78244b (client-ID hwaddr/time type 1 time 509769483 b827ebb853c8) (elapsed-time 96) (vendor-class) (rapid-commit) (IA_NA IAID:3954725832 T1:0 T2:0) (Client-FQDN) (MUD-URL https://mudctl.example.com/.well-known/mud/v1/rasbp101) (reconfigure-accept) (option-request DNS-server DNS-search-list SNTP-servers Client-FQDN opt_82 opt_83))) (interface-ID 00000008...))
+ 3 12:27:02.105740 IP6 (class 0xe0, hlim 255, next-header UDP (17) payload length: 252) 2001:8a8:1006:4:223:ebff:fe10:2c29.547 > 2001:8a8:1006:4:223:54ff:fec2:5702.547: [udp sum ok] dhcp6 relay-fwd (linkaddr=2001:8a8:1006:3:225:84ff:fedb:2380 peeraddr=fe80::ba27:ebff:feb8:53c8 (relay-message (dhcp6 solicit (xid=78244b (client-ID hwaddr/time type 1 time 509769483 b827ebb853c8) (elapsed-time 287) (vendor-class) (rapid-commit) (IA_NA IAID:3954725832 T1:0 T2:0) (Client-FQDN) (MUD-URL https://mudctl.example.com/.well-known/mud/v1/rasbp101) (reconfigure-accept) (option-request DNS-server DNS-search-list SNTP-servers Client-FQDN opt_82 opt_83))) (interface-ID 00000008...))
+ 4 12:27:06.006803 IP6 (class 0xe0, hlim 255, next-header UDP (17) payload length: 252) 2001:8a8:1006:4:223:ebff:fe10:2c29.547 > 2001:8a8:1006:4:223:54ff:fec2:5702.547: [udp sum ok] dhcp6 relay-fwd (linkaddr=2001:8a8:1006:3:225:84ff:fedb:2380 peeraddr=fe80::ba27:ebff:feb8:53c8 (relay-message (dhcp6 solicit (xid=78244b (client-ID hwaddr/time type 1 time 509769483 b827ebb853c8) (elapsed-time 677) (vendor-class) (rapid-commit) (IA_NA IAID:3954725832 T1:0 T2:0) (Client-FQDN) (MUD-URL https://mudctl.example.com/.well-known/mud/v1/rasbp101) (reconfigure-accept) (option-request DNS-server DNS-search-list SNTP-servers Client-FQDN opt_82 opt_83))) (interface-ID 00000008...))
+ 5 12:27:13.444264 IP6 (class 0xe0, hlim 255, next-header UDP (17) payload length: 252) 2001:8a8:1006:4:223:ebff:fe10:2c29.547 > 2001:8a8:1006:4:223:54ff:fec2:5702.547: [udp sum ok] dhcp6 relay-fwd (linkaddr=2001:8a8:1006:3:225:84ff:fedb:2380 peeraddr=fe80::ba27:ebff:feb8:53c8 (relay-message (dhcp6 solicit (xid=78244b (client-ID hwaddr/time type 1 time 509769483 b827ebb853c8) (elapsed-time 1421) (vendor-class) (rapid-commit) (IA_NA IAID:3954725832 T1:0 T2:0) (Client-FQDN) (MUD-URL https://mudctl.example.com/.well-known/mud/v1/rasbp101) (reconfigure-accept) (option-request DNS-server DNS-search-list SNTP-servers Client-FQDN opt_82 opt_83))) (interface-ID 00000008...))
diff --git a/tests/dhcpv6-mud.pcap b/tests/dhcpv6-mud.pcap
new file mode 100644
index 0000000..baa0154
--- /dev/null
+++ b/tests/dhcpv6-mud.pcap
Binary files differ
diff --git a/tests/dhcpv6-ntp-server.out b/tests/dhcpv6-ntp-server.out
new file mode 100644
index 0000000..619adbc
--- /dev/null
+++ b/tests/dhcpv6-ntp-server.out
@@ -0,0 +1 @@
+ 1 05:55:43.045377 IP6 (hlim 64, next-header UDP (17) payload length: 113) fe80::20c:29ff:fe9b:a15d.547 > fe80::20c:29ff:fe38:f368.546: [udp sum ok] dhcp6 reply (xid=f69b57 (client-ID hwaddr/time type 1 time 418384703 000c2938f368) (server-ID hwaddr/time type 1 time 418354459 000c299ba153) (NTP-server subopt:1 2a01::1 subopt:2 ff05::101 subopt:3 ntp.example.com.))
diff --git a/tests/dhcpv6-ntp-server.pcap b/tests/dhcpv6-ntp-server.pcap
new file mode 100644
index 0000000..5657692
--- /dev/null
+++ b/tests/dhcpv6-ntp-server.pcap
Binary files differ
diff --git a/tests/dhcpv6-sip-server-d.out b/tests/dhcpv6-sip-server-d.out
new file mode 100644
index 0000000..4ce4464
--- /dev/null
+++ b/tests/dhcpv6-sip-server-d.out
@@ -0,0 +1 @@
+ 1 06:03:07.053357 IP6 (hlim 64, next-header UDP (17) payload length: 114) fe80::20c:29ff:fe9b:a15d.547 > fe80::20c:29ff:fe38:f368.546: [udp sum ok] dhcp6 reply (xid=6890d8 (client-ID hwaddr/time type 1 time 418384703 000c2938f368) (server-ID hwaddr/time type 1 time 418354459 000c299ba153) (SIP-servers-domain sip1.my-domain.net. sip2.example.com. sip3.sub.my-domain.org.))
diff --git a/tests/dhcpv6-sip-server-d.pcap b/tests/dhcpv6-sip-server-d.pcap
new file mode 100644
index 0000000..7cb2103
--- /dev/null
+++ b/tests/dhcpv6-sip-server-d.pcap
Binary files differ
diff --git a/tests/dns-badcookie.out b/tests/dns-badcookie.out
new file mode 100644
index 0000000..ad98eac
--- /dev/null
+++ b/tests/dns-badcookie.out
@@ -0,0 +1,4 @@
+ 1 01:16:43.306396 IP 127.0.0.1.54954 > 127.0.0.1.53: 63147+ [1au] SOA? . (40)
+ 2 01:16:43.306644 IP 127.0.0.1.53 > 127.0.0.1.54954: 63147 BadCookie 0/0/1 (56)
+ 3 01:16:43.306944 IP 127.0.0.1.49830 > 127.0.0.1.53: 46131+ [1au] SOA? . (56)
+ 4 01:16:43.307171 IP 127.0.0.1.53 > 127.0.0.1.49830: 46131$ 1/0/1 SOA (131)
diff --git a/tests/dns-badcookie.pcap b/tests/dns-badcookie.pcap
new file mode 100644
index 0000000..e9522b2
--- /dev/null
+++ b/tests/dns-badcookie.pcap
Binary files differ
diff --git a/tests/dns-badlabel.out b/tests/dns-badlabel.out
new file mode 100644
index 0000000..de38379
--- /dev/null
+++ b/tests/dns-badlabel.out
@@ -0,0 +1,2 @@
+ 1 10:04:02.000000 IP (tos 0x0, ttl 128, id 36039, offset 0, flags [none], proto UDP (17), length 63193)
+ 156.118.17.235.53 > 156.118.27.229.500: [bad udp cksum 0xd8da -> 0x54de!] 51584 zoneRef NoChange*|$ [64259q] q: Type0 (Class 4347)? M-{.^AM-{^C.M-{.^AM-{^C.M-{.^@M-{.^AM-{^C.M-{.^AM-{^C.M-{.^CM-{^C^AM-{^C^AM-{^C^AM-{^C^AM-{^C^AM-{^C^AM-{^C^AM-{^C^AM-{^C^AM-{^C^AM-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-zM-^O.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^A<DOMAIN NAME TOO LONG>, q: Type769 (Class 64259)? ^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.<BAD LABEL TYPE> [|domain]
diff --git a/tests/dns-badlabel.pcap b/tests/dns-badlabel.pcap
new file mode 100644
index 0000000..2a3739d
--- /dev/null
+++ b/tests/dns-badlabel.pcap
Binary files differ
diff --git a/tests/dns-badvers.out b/tests/dns-badvers.out
new file mode 100644
index 0000000..1c2c05f
--- /dev/null
+++ b/tests/dns-badvers.out
@@ -0,0 +1,4 @@
+ 1 01:26:02.059301 IP 172.30.42.67.64888 > 192.5.5.241.53: 36787+ [1au] TXT? . (40)
+ 2 01:26:02.083636 IP 192.5.5.241.53 > 172.30.42.67.64888: 36787 BadVers- 0/0/1 (28)
+ 3 01:26:02.109952 IP 172.30.42.67.64499 > 192.5.5.241.53: 59888+ [1au] TXT? . (40)
+ 4 01:26:02.123937 IP 192.5.5.241.53 > 172.30.42.67.64499: 59888*- 0/1/1 (103)
diff --git a/tests/dns-badvers.pcap b/tests/dns-badvers.pcap
new file mode 100644
index 0000000..d8811ca
--- /dev/null
+++ b/tests/dns-badvers.pcap
Binary files differ
diff --git a/tests/dns-uri.out b/tests/dns-uri.out
new file mode 100644
index 0000000..232846e
--- /dev/null
+++ b/tests/dns-uri.out
@@ -0,0 +1,4 @@
+ 1 18:31:55.600983 IP 127.0.0.1.59347 > 127.0.0.1.53: 44845+ [1au] URI? _http.dns.test. (55)
+ 2 18:31:55.601140 IP 127.0.0.1.53 > 127.0.0.1.59347: 44845* 1/0/1 URI 10 5 http://www.dns.test:8000 (83)
+ 3 18:31:57.245707 IP 127.0.0.1.37251 > 127.0.0.1.53: 25957+ [1au] URI? _ftp.dns.test. (54)
+ 4 18:31:57.245858 IP 127.0.0.1.53 > 127.0.0.1.37251: 25957 NXDomain* 0/1/1 (101)
diff --git a/tests/dns-uri.pcap b/tests/dns-uri.pcap
new file mode 100644
index 0000000..70e8024
--- /dev/null
+++ b/tests/dns-uri.pcap
Binary files differ
diff --git a/tests/dns-zlip-1.out b/tests/dns-zlip-1.out
new file mode 100644
index 0000000..fec1fde
--- /dev/null
+++ b/tests/dns-zlip-1.out
@@ -0,0 +1 @@
+ 1 17:47:11.643199 IP 10.0.0.1.1024 > 146.84.28.88.53: domain [length 0 < 12] (invalid)
diff --git a/tests/dns-zlip-1.pcap b/tests/dns-zlip-1.pcap
new file mode 100644
index 0000000..4ec844c
--- /dev/null
+++ b/tests/dns-zlip-1.pcap
Binary files differ
diff --git a/tests/dns-zlip-2.out b/tests/dns-zlip-2.out
new file mode 100644
index 0000000..9b54566
--- /dev/null
+++ b/tests/dns-zlip-2.out
@@ -0,0 +1 @@
+ 1 17:48:09.550140 IP 10.0.0.1.1024 > 146.84.28.88.53: domain [length 0 < 12] (invalid)
diff --git a/tests/dns-zlip-2.pcap b/tests/dns-zlip-2.pcap
new file mode 100644
index 0000000..5f74f22
--- /dev/null
+++ b/tests/dns-zlip-2.pcap
Binary files differ
diff --git a/tests/dns-zlip-3.out b/tests/dns-zlip-3.out
new file mode 100644
index 0000000..1fc4e5a
--- /dev/null
+++ b/tests/dns-zlip-3.out
@@ -0,0 +1 @@
+ 1 17:49:41.123062 IP 10.0.0.1.1024 > 146.84.28.88.53: domain [length 0 < 12] (invalid)
diff --git a/tests/dns-zlip-3.pcap b/tests/dns-zlip-3.pcap
new file mode 100644
index 0000000..c0c076a
--- /dev/null
+++ b/tests/dns-zlip-3.pcap
Binary files differ
diff --git a/tests/dns_fwdptr.out b/tests/dns_fwdptr.out
new file mode 100644
index 0000000..2ee24be
--- /dev/null
+++ b/tests/dns_fwdptr.out
@@ -0,0 +1,2 @@
+ 1 00:00:00.000000 be:af:ca:ce:ff:ff > de:ad:be:ef:00:01, ethertype IPv4 (0x0800), length 63207: (tos 0x0, ttl 128, id 36039, offset 0, flags [none], proto UDP (17), length 63193)
+ 156.118.17.235.53 > 156.118.27.229.500: [udp sum ok] 51584 zoneRef NoChange*|$ [64259q] q: Type507 (Class 769)? M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{^C.M-{.^AM-{ .M-{^C^A.<BAD PTR> [|domain]
diff --git a/tests/dns_fwdptr.pcap b/tests/dns_fwdptr.pcap
new file mode 100644
index 0000000..67a8461
--- /dev/null
+++ b/tests/dns_fwdptr.pcap
Binary files differ
diff --git a/tests/dns_tcp-v.out b/tests/dns_tcp-v.out
new file mode 100644
index 0000000..c94e470
--- /dev/null
+++ b/tests/dns_tcp-v.out
@@ -0,0 +1,22 @@
+ 1 09:21:03.720289 IP (tos 0x0, ttl 64, id 39720, offset 0, flags [DF], proto TCP (6), length 60)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [S], cksum 0x0c41 (correct), seq 603899916, win 64240, options [mss 1460,sackOK,TS val 2044906138 ecr 0,nop,wscale 7], length 0
+ 2 09:21:03.846908 IP (tos 0x0, ttl 128, id 46, offset 0, flags [none], proto TCP (6), length 44)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [S.], cksum 0xdded (correct), seq 2043824403, ack 603899917, win 64240, options [mss 1460], length 0
+ 3 09:21:03.847060 IP (tos 0x0, ttl 64, id 39721, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [.], cksum 0xf5aa (correct), ack 1, win 64240, length 0
+ 4 09:21:03.847323 IP (tos 0x0, ttl 64, id 39722, offset 0, flags [DF], proto TCP (6), length 98)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [P.], cksum 0x7796 (correct), seq 1:59, ack 1, win 64240, length 58 17177+ [1au] A? www.tcpdump.org. (56)
+ 5 09:21:03.847457 IP (tos 0x0, ttl 128, id 47, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [.], cksum 0xf570 (correct), ack 59, win 64240, length 0
+ 6 09:21:03.973180 IP (tos 0x0, ttl 128, id 48, offset 0, flags [none], proto TCP (6), length 266)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [P.], cksum 0x080a (correct), seq 1:227, ack 59, win 64240, length 226 17177*- 2/2/5 www.tcpdump.org. A 192.139.46.66, www.tcpdump.org. A 198.199.88.104 (224)
+ 7 09:21:03.973220 IP (tos 0x0, ttl 64, id 39723, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [.], cksum 0xf570 (correct), ack 227, win 64014, length 0
+ 8 09:21:03.974844 IP (tos 0x0, ttl 64, id 39724, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [F.], cksum 0xf56f (correct), seq 59, ack 227, win 64014, length 0
+ 9 09:21:03.975246 IP (tos 0x0, ttl 128, id 49, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [.], cksum 0xf48e (correct), ack 60, win 64239, length 0
+ 10 09:21:04.101184 IP (tos 0x0, ttl 128, id 50, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [FP.], cksum 0xf485 (correct), seq 227, ack 60, win 64239, length 0
+ 11 09:21:04.101256 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [.], cksum 0xf56e (correct), ack 228, win 64014, length 0
diff --git a/tests/dns_tcp-vv.out b/tests/dns_tcp-vv.out
new file mode 100644
index 0000000..307a7a8
--- /dev/null
+++ b/tests/dns_tcp-vv.out
@@ -0,0 +1,22 @@
+ 1 09:21:03.720289 IP (tos 0x0, ttl 64, id 39720, offset 0, flags [DF], proto TCP (6), length 60)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [S], cksum 0x0c41 (correct), seq 603899916, win 64240, options [mss 1460,sackOK,TS val 2044906138 ecr 0,nop,wscale 7], length 0
+ 2 09:21:03.846908 IP (tos 0x0, ttl 128, id 46, offset 0, flags [none], proto TCP (6), length 44)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [S.], cksum 0xdded (correct), seq 2043824403, ack 603899917, win 64240, options [mss 1460], length 0
+ 3 09:21:03.847060 IP (tos 0x0, ttl 64, id 39721, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [.], cksum 0xf5aa (correct), seq 1, ack 1, win 64240, length 0
+ 4 09:21:03.847323 IP (tos 0x0, ttl 64, id 39722, offset 0, flags [DF], proto TCP (6), length 98)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [P.], cksum 0x7796 (correct), seq 1:59, ack 1, win 64240, length 58 17177+ [1au] A? www.tcpdump.org. ar: . OPT UDPsize=4096 [COOKIE 8f06be7d691442f0] (56)
+ 5 09:21:03.847457 IP (tos 0x0, ttl 128, id 47, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [.], cksum 0xf570 (correct), seq 1, ack 59, win 64240, length 0
+ 6 09:21:03.973180 IP (tos 0x0, ttl 128, id 48, offset 0, flags [none], proto TCP (6), length 266)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [P.], cksum 0x080a (correct), seq 1:227, ack 59, win 64240, length 226 17177*- q: A? www.tcpdump.org. 2/2/5 www.tcpdump.org. A 192.139.46.66, www.tcpdump.org. A 198.199.88.104 ns: tcpdump.org. NS nic.sandelman.ca., tcpdump.org. NS sns.cooperix.net. ar: nic.sandelman.ca. A 209.87.249.18, nic.sandelman.ca. AAAA 2607:f0b0:f::babe:f00d, sns.cooperix.net. A 97.107.133.15, sns.cooperix.net. AAAA 2600:3c03::f03c:91ff:fe96:e8ef, . OPT UDPsize=4096 (224)
+ 7 09:21:03.973220 IP (tos 0x0, ttl 64, id 39723, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [.], cksum 0xf570 (correct), seq 59, ack 227, win 64014, length 0
+ 8 09:21:03.974844 IP (tos 0x0, ttl 64, id 39724, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [F.], cksum 0xf56f (correct), seq 59, ack 227, win 64014, length 0
+ 9 09:21:03.975246 IP (tos 0x0, ttl 128, id 49, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [.], cksum 0xf48e (correct), seq 227, ack 60, win 64239, length 0
+ 10 09:21:04.101184 IP (tos 0x0, ttl 128, id 50, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [FP.], cksum 0xf485 (correct), seq 227, ack 60, win 64239, length 0
+ 11 09:21:04.101256 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [.], cksum 0xf56e (correct), seq 60, ack 228, win 64014, length 0
diff --git a/tests/dns_tcp-vvv.out b/tests/dns_tcp-vvv.out
new file mode 100644
index 0000000..3772d2b
--- /dev/null
+++ b/tests/dns_tcp-vvv.out
@@ -0,0 +1,22 @@
+ 1 09:21:03.720289 IP (tos 0x0, ttl 64, id 39720, offset 0, flags [DF], proto TCP (6), length 60)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [S], cksum 0x0c41 (correct), seq 603899916, win 64240, options [mss 1460,sackOK,TS val 2044906138 ecr 0,nop,wscale 7], length 0
+ 2 09:21:03.846908 IP (tos 0x0, ttl 128, id 46, offset 0, flags [none], proto TCP (6), length 44)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [S.], cksum 0xdded (correct), seq 2043824403, ack 603899917, win 64240, options [mss 1460], length 0
+ 3 09:21:03.847060 IP (tos 0x0, ttl 64, id 39721, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [.], cksum 0xf5aa (correct), seq 1, ack 1, win 64240, length 0
+ 4 09:21:03.847323 IP (tos 0x0, ttl 64, id 39722, offset 0, flags [DF], proto TCP (6), length 98)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [P.], cksum 0x7796 (correct), seq 1:59, ack 1, win 64240, length 58 17177+ [1au] A? www.tcpdump.org. ar: . OPT UDPsize=4096 [COOKIE 8f06be7d691442f0] (56)
+ 5 09:21:03.847457 IP (tos 0x0, ttl 128, id 47, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [.], cksum 0xf570 (correct), seq 1, ack 59, win 64240, length 0
+ 6 09:21:03.973180 IP (tos 0x0, ttl 128, id 48, offset 0, flags [none], proto TCP (6), length 266)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [P.], cksum 0x080a (correct), seq 1:227, ack 59, win 64240, length 226 17177*- q: A? www.tcpdump.org. 2/2/5 www.tcpdump.org. [1m] A 192.139.46.66, www.tcpdump.org. [1m] A 198.199.88.104 ns: tcpdump.org. [1d] NS nic.sandelman.ca., tcpdump.org. [1d] NS sns.cooperix.net. ar: nic.sandelman.ca. [5m] A 209.87.249.18, nic.sandelman.ca. [5m] AAAA 2607:f0b0:f::babe:f00d, sns.cooperix.net. [2h] A 97.107.133.15, sns.cooperix.net. [2h] AAAA 2600:3c03::f03c:91ff:fe96:e8ef, . OPT UDPsize=4096 (224)
+ 7 09:21:03.973220 IP (tos 0x0, ttl 64, id 39723, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [.], cksum 0xf570 (correct), seq 59, ack 227, win 64014, length 0
+ 8 09:21:03.974844 IP (tos 0x0, ttl 64, id 39724, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [F.], cksum 0xf56f (correct), seq 59, ack 227, win 64014, length 0
+ 9 09:21:03.975246 IP (tos 0x0, ttl 128, id 49, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [.], cksum 0xf48e (correct), seq 227, ack 60, win 64239, length 0
+ 10 09:21:04.101184 IP (tos 0x0, ttl 128, id 50, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.53 > 192.168.1.11.33779: Flags [FP.], cksum 0xf485 (correct), seq 227, ack 60, win 64239, length 0
+ 11 09:21:04.101256 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.33779 > 209.87.249.18.53: Flags [.], cksum 0xf56e (correct), seq 60, ack 228, win 64014, length 0
diff --git a/tests/dns_tcp.out b/tests/dns_tcp.out
new file mode 100644
index 0000000..7d240cd
--- /dev/null
+++ b/tests/dns_tcp.out
@@ -0,0 +1,11 @@
+ 1 09:21:03.720289 IP 192.168.1.11.33779 > 209.87.249.18.53: Flags [S], seq 603899916, win 64240, options [mss 1460,sackOK,TS val 2044906138 ecr 0,nop,wscale 7], length 0
+ 2 09:21:03.846908 IP 209.87.249.18.53 > 192.168.1.11.33779: Flags [S.], seq 2043824403, ack 603899917, win 64240, options [mss 1460], length 0
+ 3 09:21:03.847060 IP 192.168.1.11.33779 > 209.87.249.18.53: Flags [.], ack 1, win 64240, length 0
+ 4 09:21:03.847323 IP 192.168.1.11.33779 > 209.87.249.18.53: Flags [P.], seq 1:59, ack 1, win 64240, length 58 17177+ [1au] A? www.tcpdump.org. (56)
+ 5 09:21:03.847457 IP 209.87.249.18.53 > 192.168.1.11.33779: Flags [.], ack 59, win 64240, length 0
+ 6 09:21:03.973180 IP 209.87.249.18.53 > 192.168.1.11.33779: Flags [P.], seq 1:227, ack 59, win 64240, length 226 17177*- 2/2/5 A 192.139.46.66, A 198.199.88.104 (224)
+ 7 09:21:03.973220 IP 192.168.1.11.33779 > 209.87.249.18.53: Flags [.], ack 227, win 64014, length 0
+ 8 09:21:03.974844 IP 192.168.1.11.33779 > 209.87.249.18.53: Flags [F.], seq 59, ack 227, win 64014, length 0
+ 9 09:21:03.975246 IP 209.87.249.18.53 > 192.168.1.11.33779: Flags [.], ack 60, win 64239, length 0
+ 10 09:21:04.101184 IP 209.87.249.18.53 > 192.168.1.11.33779: Flags [FP.], seq 227, ack 60, win 64239, length 0
+ 11 09:21:04.101256 IP 192.168.1.11.33779 > 209.87.249.18.53: Flags [.], ack 228, win 64014, length 0
diff --git a/tests/dns_tcp.pcap b/tests/dns_tcp.pcap
new file mode 100644
index 0000000..0137cdf
--- /dev/null
+++ b/tests/dns_tcp.pcap
Binary files differ
diff --git a/tests/dns_tcp_8053-T.out b/tests/dns_tcp_8053-T.out
new file mode 100644
index 0000000..4d37338
--- /dev/null
+++ b/tests/dns_tcp_8053-T.out
@@ -0,0 +1,22 @@
+ 1 15:44:09.947213 IP (tos 0x0, ttl 64, id 42696, offset 0, flags [DF], proto TCP (6), length 60)
+ 192.168.1.11.57469 > 209.87.249.18.8053: Flags [S], cksum 0xf4f0 (correct), seq 3802885148, win 64240, options [mss 1460,sackOK,TS val 2931281549 ecr 0,nop,wscale 7], length 0
+ 2 15:44:10.091462 IP (tos 0x0, ttl 128, id 4486, offset 0, flags [none], proto TCP (6), length 44)
+ 209.87.249.18.8053 > 192.168.1.11.57469: Flags [S.], cksum 0x1923 (correct), seq 856651289, ack 3802885149, win 64240, options [mss 1460], length 0
+ 3 15:44:10.091537 IP (tos 0x0, ttl 64, id 42697, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.57469 > 209.87.249.18.8053: Flags [.], cksum 0x30e0 (correct), seq 1, ack 1, win 64240, length 0
+ 4 15:44:10.092032 IP (tos 0x0, ttl 64, id 42698, offset 0, flags [DF], proto TCP (6), length 98)
+ 192.168.1.11.57469 > 209.87.249.18.8053: Flags [P.], cksum 0x9724 (correct), seq 1:59, ack 1, win 64240, length 58 56178+ [1au] A? www.tcpdump.org. ar: . OPT UDPsize=4096 [COOKIE c4006c3e5053fc43] (56)
+ 5 15:44:10.092267 IP (tos 0x0, ttl 128, id 4487, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.8053 > 192.168.1.11.57469: Flags [.], cksum 0x30a6 (correct), seq 1, ack 59, win 64240, length 0
+ 6 15:44:10.236187 IP (tos 0x0, ttl 128, id 4488, offset 0, flags [none], proto TCP (6), length 250)
+ 209.87.249.18.8053 > 192.168.1.11.57469: Flags [P.], cksum 0x69e6 (correct), seq 1:211, ack 59, win 64240, length 210 56178*- q: A? www.tcpdump.org. 1/2/5 www.tcpdump.org. A 192.139.46.66 ns: tcpdump.org. NS nic.sandelman.ca., tcpdump.org. NS sns.cooperix.net. ar: nic.sandelman.ca. A 209.87.249.18, nic.sandelman.ca. AAAA 2607:f0b0:f::babe:f00d, sns.cooperix.net. A 97.107.133.15, sns.cooperix.net. AAAA 2600:3c03::f03c:91ff:fe96:e8ef, . OPT UDPsize=4096 (208)
+ 7 15:44:10.236250 IP (tos 0x0, ttl 64, id 42699, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.57469 > 209.87.249.18.8053: Flags [.], cksum 0x30a6 (correct), seq 59, ack 211, win 64030, length 0
+ 8 15:44:10.237389 IP (tos 0x0, ttl 64, id 42700, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.57469 > 209.87.249.18.8053: Flags [F.], cksum 0x30a5 (correct), seq 59, ack 211, win 64030, length 0
+ 9 15:44:10.237718 IP (tos 0x0, ttl 128, id 4489, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.8053 > 192.168.1.11.57469: Flags [.], cksum 0x2fd4 (correct), seq 211, ack 60, win 64239, length 0
+ 10 15:44:10.381399 IP (tos 0x0, ttl 128, id 4490, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.8053 > 192.168.1.11.57469: Flags [FP.], cksum 0x2fcb (correct), seq 211, ack 60, win 64239, length 0
+ 11 15:44:10.381475 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.57469 > 209.87.249.18.8053: Flags [.], cksum 0x30a4 (correct), seq 60, ack 212, win 64030, length 0
diff --git a/tests/dns_tcp_8053.out b/tests/dns_tcp_8053.out
new file mode 100644
index 0000000..a5e8328
--- /dev/null
+++ b/tests/dns_tcp_8053.out
@@ -0,0 +1,22 @@
+ 1 15:44:09.947213 IP (tos 0x0, ttl 64, id 42696, offset 0, flags [DF], proto TCP (6), length 60)
+ 192.168.1.11.57469 > 209.87.249.18.8053: Flags [S], cksum 0xf4f0 (correct), seq 3802885148, win 64240, options [mss 1460,sackOK,TS val 2931281549 ecr 0,nop,wscale 7], length 0
+ 2 15:44:10.091462 IP (tos 0x0, ttl 128, id 4486, offset 0, flags [none], proto TCP (6), length 44)
+ 209.87.249.18.8053 > 192.168.1.11.57469: Flags [S.], cksum 0x1923 (correct), seq 856651289, ack 3802885149, win 64240, options [mss 1460], length 0
+ 3 15:44:10.091537 IP (tos 0x0, ttl 64, id 42697, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.57469 > 209.87.249.18.8053: Flags [.], cksum 0x30e0 (correct), seq 1, ack 1, win 64240, length 0
+ 4 15:44:10.092032 IP (tos 0x0, ttl 64, id 42698, offset 0, flags [DF], proto TCP (6), length 98)
+ 192.168.1.11.57469 > 209.87.249.18.8053: Flags [P.], cksum 0x9724 (correct), seq 1:59, ack 1, win 64240, length 58
+ 5 15:44:10.092267 IP (tos 0x0, ttl 128, id 4487, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.8053 > 192.168.1.11.57469: Flags [.], cksum 0x30a6 (correct), seq 1, ack 59, win 64240, length 0
+ 6 15:44:10.236187 IP (tos 0x0, ttl 128, id 4488, offset 0, flags [none], proto TCP (6), length 250)
+ 209.87.249.18.8053 > 192.168.1.11.57469: Flags [P.], cksum 0x69e6 (correct), seq 1:211, ack 59, win 64240, length 210
+ 7 15:44:10.236250 IP (tos 0x0, ttl 64, id 42699, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.57469 > 209.87.249.18.8053: Flags [.], cksum 0x30a6 (correct), seq 59, ack 211, win 64030, length 0
+ 8 15:44:10.237389 IP (tos 0x0, ttl 64, id 42700, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.57469 > 209.87.249.18.8053: Flags [F.], cksum 0x30a5 (correct), seq 59, ack 211, win 64030, length 0
+ 9 15:44:10.237718 IP (tos 0x0, ttl 128, id 4489, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.8053 > 192.168.1.11.57469: Flags [.], cksum 0x2fd4 (correct), seq 211, ack 60, win 64239, length 0
+ 10 15:44:10.381399 IP (tos 0x0, ttl 128, id 4490, offset 0, flags [none], proto TCP (6), length 40)
+ 209.87.249.18.8053 > 192.168.1.11.57469: Flags [FP.], cksum 0x2fcb (correct), seq 211, ack 60, win 64239, length 0
+ 11 15:44:10.381475 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
+ 192.168.1.11.57469 > 209.87.249.18.8053: Flags [.], cksum 0x30a4 (correct), seq 60, ack 212, win 64030, length 0
diff --git a/tests/dns_tcp_8053.pcap b/tests/dns_tcp_8053.pcap
new file mode 100644
index 0000000..f924df6
--- /dev/null
+++ b/tests/dns_tcp_8053.pcap
Binary files differ
diff --git a/tests/dns_udp-v.out b/tests/dns_udp-v.out
new file mode 100644
index 0000000..3e716bb
--- /dev/null
+++ b/tests/dns_udp-v.out
@@ -0,0 +1,4 @@
+ 1 09:19:54.740079 IP (tos 0x0, ttl 64, id 22989, offset 0, flags [none], proto UDP (17), length 84)
+ 192.168.1.11.43966 > 209.87.249.18.53: 22836+ [1au] A? www.tcpdump.org. (56)
+ 2 09:19:54.870361 IP (tos 0x0, ttl 128, id 45, offset 0, flags [none], proto UDP (17), length 252)
+ 209.87.249.18.53 > 192.168.1.11.43966: 22836*- 2/2/5 www.tcpdump.org. A 192.139.46.66, www.tcpdump.org. A 198.199.88.104 (224)
diff --git a/tests/dns_udp-vv.out b/tests/dns_udp-vv.out
new file mode 100644
index 0000000..4e27ca1
--- /dev/null
+++ b/tests/dns_udp-vv.out
@@ -0,0 +1,4 @@
+ 1 09:19:54.740079 IP (tos 0x0, ttl 64, id 22989, offset 0, flags [none], proto UDP (17), length 84)
+ 192.168.1.11.43966 > 209.87.249.18.53: [udp sum ok] 22836+ [1au] A? www.tcpdump.org. ar: . OPT UDPsize=4096 [COOKIE 42f5d00996f90b13] (56)
+ 2 09:19:54.870361 IP (tos 0x0, ttl 128, id 45, offset 0, flags [none], proto UDP (17), length 252)
+ 209.87.249.18.53 > 192.168.1.11.43966: [udp sum ok] 22836*- q: A? www.tcpdump.org. 2/2/5 www.tcpdump.org. A 192.139.46.66, www.tcpdump.org. A 198.199.88.104 ns: tcpdump.org. NS sns.cooperix.net., tcpdump.org. NS nic.sandelman.ca. ar: nic.sandelman.ca. A 209.87.249.18, nic.sandelman.ca. AAAA 2607:f0b0:f::babe:f00d, sns.cooperix.net. A 97.107.133.15, sns.cooperix.net. AAAA 2600:3c03::f03c:91ff:fe96:e8ef, . OPT UDPsize=4096 (224)
diff --git a/tests/dns_udp-vvv.out b/tests/dns_udp-vvv.out
new file mode 100644
index 0000000..128c60c
--- /dev/null
+++ b/tests/dns_udp-vvv.out
@@ -0,0 +1,4 @@
+ 1 09:19:54.740079 IP (tos 0x0, ttl 64, id 22989, offset 0, flags [none], proto UDP (17), length 84)
+ 192.168.1.11.43966 > 209.87.249.18.53: [udp sum ok] 22836+ [1au] A? www.tcpdump.org. ar: . OPT UDPsize=4096 [COOKIE 42f5d00996f90b13] (56)
+ 2 09:19:54.870361 IP (tos 0x0, ttl 128, id 45, offset 0, flags [none], proto UDP (17), length 252)
+ 209.87.249.18.53 > 192.168.1.11.43966: [udp sum ok] 22836*- q: A? www.tcpdump.org. 2/2/5 www.tcpdump.org. [1m] A 192.139.46.66, www.tcpdump.org. [1m] A 198.199.88.104 ns: tcpdump.org. [1d] NS sns.cooperix.net., tcpdump.org. [1d] NS nic.sandelman.ca. ar: nic.sandelman.ca. [5m] A 209.87.249.18, nic.sandelman.ca. [5m] AAAA 2607:f0b0:f::babe:f00d, sns.cooperix.net. [2h] A 97.107.133.15, sns.cooperix.net. [2h] AAAA 2600:3c03::f03c:91ff:fe96:e8ef, . OPT UDPsize=4096 (224)
diff --git a/tests/dns_udp.out b/tests/dns_udp.out
new file mode 100644
index 0000000..31f6057
--- /dev/null
+++ b/tests/dns_udp.out
@@ -0,0 +1,2 @@
+ 1 09:19:54.740079 IP 192.168.1.11.43966 > 209.87.249.18.53: 22836+ [1au] A? www.tcpdump.org. (56)
+ 2 09:19:54.870361 IP 209.87.249.18.53 > 192.168.1.11.43966: 22836*- 2/2/5 A 192.139.46.66, A 198.199.88.104 (224)
diff --git a/tests/dns_udp.pcap b/tests/dns_udp.pcap
new file mode 100644
index 0000000..1b2a5f5
--- /dev/null
+++ b/tests/dns_udp.pcap
Binary files differ
diff --git a/tests/dns_udp_8053-T.out b/tests/dns_udp_8053-T.out
new file mode 100644
index 0000000..07264bd
--- /dev/null
+++ b/tests/dns_udp_8053-T.out
@@ -0,0 +1,4 @@
+ 1 15:42:50.464436 IP (tos 0x0, ttl 64, id 38190, offset 0, flags [none], proto UDP (17), length 84)
+ 192.168.1.11.43757 > 209.87.249.18.8053: 323+ [1au] A? www.tcpdump.org. ar: . OPT UDPsize=4096 [COOKIE 9661b0beabd5df68] (56)
+ 2 15:42:50.613154 IP (tos 0x0, ttl 128, id 4483, offset 0, flags [none], proto UDP (17), length 236)
+ 209.87.249.18.8053 > 192.168.1.11.43757: 323*- q: A? www.tcpdump.org. 1/2/5 www.tcpdump.org. A 192.139.46.66 ns: tcpdump.org. NS sns.cooperix.net., tcpdump.org. NS nic.sandelman.ca. ar: nic.sandelman.ca. A 209.87.249.18, nic.sandelman.ca. AAAA 2607:f0b0:f::babe:f00d, sns.cooperix.net. A 97.107.133.15, sns.cooperix.net. AAAA 2600:3c03::f03c:91ff:fe96:e8ef, . OPT UDPsize=4096 (208)
diff --git a/tests/dns_udp_8053.out b/tests/dns_udp_8053.out
new file mode 100644
index 0000000..8019e06
--- /dev/null
+++ b/tests/dns_udp_8053.out
@@ -0,0 +1,4 @@
+ 1 15:42:50.464436 IP (tos 0x0, ttl 64, id 38190, offset 0, flags [none], proto UDP (17), length 84)
+ 192.168.1.11.43757 > 209.87.249.18.8053: [udp sum ok] UDP, length 56
+ 2 15:42:50.613154 IP (tos 0x0, ttl 128, id 4483, offset 0, flags [none], proto UDP (17), length 236)
+ 209.87.249.18.8053 > 192.168.1.11.43757: [udp sum ok] UDP, length 208
diff --git a/tests/dns_udp_8053.pcap b/tests/dns_udp_8053.pcap
new file mode 100644
index 0000000..c2f8a63
--- /dev/null
+++ b/tests/dns_udp_8053.pcap
Binary files differ
diff --git a/tests/dnssec-vv.out b/tests/dnssec-vv.out
new file mode 100644
index 0000000..51357dc
--- /dev/null
+++ b/tests/dnssec-vv.out
@@ -0,0 +1,12 @@
+ 1 08:35:59.376658 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 74)
+ 127.0.0.1.43144 > 127.0.0.1.53: [bad udp cksum 0xfe49 -> 0xb5ef!] 20972+ [1au] SSHFP? monadic.cynic.net. ar: . OPT UDPsize=4096 DO (46)
+ 2 08:35:59.377000 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 3040)
+ 127.0.0.1.53 > 127.0.0.1.43144: [bad udp cksum 0x09e0 -> 0x4239!] 20972$ q: SSHFP? monadic.cynic.net. 3/6/13 monadic.cynic.net. SSHFP, monadic.cynic.net. RRSIG, monadic.cynic.net. RRSIG ns: cynic.net. NS ns1.cynic.net., cynic.net. NS ns4.cynic.net., cynic.net. NS ns2.cynic.net., cynic.net. NS ns3.cynic.net., cynic.net. RRSIG, cynic.net. RRSIG ar: ns1.cynic.net. A 125.100.126.205, ns2.cynic.net. A 199.175.137.213, ns3.cynic.net. A 203.141.153.22, ns4.cynic.net. A 122.103.238.186, ns1.cynic.net. RRSIG, ns1.cynic.net. RRSIG, ns2.cynic.net. RRSIG, ns2.cynic.net. RRSIG, ns3.cynic.net. RRSIG, ns3.cynic.net. RRSIG, ns4.cynic.net. RRSIG, ns4.cynic.net. RRSIG, . OPT UDPsize=4096 DO (3012)
+ 3 08:36:02.689671 IP (tos 0x0, ttl 64, id 22838, offset 0, flags [DF], proto UDP (17), length 74)
+ 127.0.0.1.32972 > 127.0.0.1.53: [bad udp cksum 0xfe49 -> 0x28d8!] 48576+ [1au] A? monadic.cynic.net. ar: . OPT UDPsize=1024 (46)
+ 4 08:36:02.690009 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 226)
+ 127.0.0.1.53 > 127.0.0.1.32972: [bad udp cksum 0xfee1 -> 0x60dd!] 48576 q: A? monadic.cynic.net. 1/4/5 monadic.cynic.net. A 125.100.126.202 ns: cynic.net. NS ns4.cynic.net., cynic.net. NS ns2.cynic.net., cynic.net. NS ns3.cynic.net., cynic.net. NS ns1.cynic.net. ar: ns1.cynic.net. A 125.100.126.205, ns2.cynic.net. A 199.175.137.213, ns3.cynic.net. A 203.141.153.22, ns4.cynic.net. A 122.103.238.186, . OPT UDPsize=4096 (198)
+ 5 08:36:02.953542 IP (tos 0x0, ttl 64, id 22904, offset 0, flags [DF], proto UDP (17), length 74)
+ 127.0.0.1.36069 > 127.0.0.1.53: [bad udp cksum 0xfe49 -> 0xf266!] 49432+ [1au] SSHFP? monadic.cynic.net. ar: . OPT UDPsize=0 (46)
+ 6 08:36:02.953852 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 244)
+ 127.0.0.1.53 > 127.0.0.1.36069: [bad udp cksum 0xfef3 -> 0x1227!] 49432 q: SSHFP? monadic.cynic.net. 1/4/5 monadic.cynic.net. SSHFP ns: cynic.net. NS ns4.cynic.net., cynic.net. NS ns1.cynic.net., cynic.net. NS ns3.cynic.net., cynic.net. NS ns2.cynic.net. ar: ns1.cynic.net. A 125.100.126.205, ns2.cynic.net. A 199.175.137.213, ns3.cynic.net. A 203.141.153.22, ns4.cynic.net. A 122.103.238.186, . OPT UDPsize=4096 (216)
diff --git a/tests/dnssec.pcap b/tests/dnssec.pcap
new file mode 100644
index 0000000..b191480
--- /dev/null
+++ b/tests/dnssec.pcap
Binary files differ
diff --git a/tests/dsa-e.out b/tests/dsa-e.out
new file mode 100644
index 0000000..b22dbec
--- /dev/null
+++ b/tests/dsa-e.out
@@ -0,0 +1,8 @@
+ 1 22:21:39.544060 00:50:b6:29:10:70 > d6:c5:28:21:3e:af, Marvell DSA mode Forward, dev 0, port 1, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 102: 192.168.30.1 > 192.168.30.2: ICMP echo request, id 13586, seq 1, length 64
+ 2 22:21:39.544382 d6:c5:28:21:3e:af > 00:50:b6:29:10:70, Marvell DSA mode From CPU, target dev 0, port 1, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 102: 192.168.30.2 > 192.168.30.1: ICMP echo reply, id 13586, seq 1, length 64
+ 3 22:21:40.563126 00:50:b6:29:10:70 > d6:c5:28:21:3e:af, Marvell DSA mode Forward, dev 0, port 1, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 102: 192.168.30.1 > 192.168.30.2: ICMP echo request, id 13586, seq 2, length 64
+ 4 22:21:40.563252 d6:c5:28:21:3e:af > 00:50:b6:29:10:70, Marvell DSA mode From CPU, target dev 0, port 1, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 102: 192.168.30.2 > 192.168.30.1: ICMP echo reply, id 13586, seq 2, length 64
+ 5 22:21:41.576445 00:50:b6:29:10:70 > d6:c5:28:21:3e:af, Marvell DSA mode Forward, dev 0, port 1, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 102: 192.168.30.1 > 192.168.30.2: ICMP echo request, id 13586, seq 3, length 64
+ 6 22:21:41.576541 d6:c5:28:21:3e:af > 00:50:b6:29:10:70, Marvell DSA mode From CPU, target dev 0, port 1, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 102: 192.168.30.2 > 192.168.30.1: ICMP echo reply, id 13586, seq 3, length 64
+ 7 22:21:44.560086 d6:c5:28:21:3e:af > 00:50:b6:29:10:70, Marvell DSA mode From CPU, target dev 0, port 1, untagged, VID 0, FPri 0, ethertype ARP (0x0806), length 46: Request who-has 192.168.30.1 tell 192.168.30.2, length 28
+ 8 22:21:44.560415 00:50:b6:29:10:70 > d6:c5:28:21:3e:af, Marvell DSA mode Forward, dev 0, port 1, untagged, VID 0, FPri 0, ethertype ARP (0x0806), length 64: Reply 192.168.30.1 is-at 00:50:b6:29:10:70, length 46
diff --git a/tests/dsa-high-vid-e.out b/tests/dsa-high-vid-e.out
new file mode 100644
index 0000000..a80539f
--- /dev/null
+++ b/tests/dsa-high-vid-e.out
@@ -0,0 +1,4 @@
+ 1 00:06:42.569821 02:f0:bb:ed:00:0f > d6:18:e2:69:ee:01, Marvell DSA mode Forward, dev 0, port 2, untagged, VID 1337, FPri 0, ethertype IPv4 (0x0800), length 102: 198.18.10.1 > 198.18.10.2: ICMP echo request, id 116, seq 1, length 64
+ 2 00:06:42.569913 d6:18:e2:69:ee:01 > 02:f0:bb:ed:00:0f, Marvell DSA mode From CPU, target dev 0, port 2, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 102: 198.18.10.2 > 198.18.10.1: ICMP echo reply, id 116, seq 1, length 64
+ 3 00:06:42.575549 02:f0:bb:ed:00:0f > d6:18:e2:69:ee:01, Marvell DSA mode Forward, dev 0, port 2, untagged, VID 1337, FPri 5, ethertype IPv4 (0x0800), length 102: 198.18.10.1 > 198.18.10.2: ICMP echo request, id 117, seq 1, length 64
+ 4 00:06:42.575572 d6:18:e2:69:ee:01 > 02:f0:bb:ed:00:0f, Marvell DSA mode From CPU, target dev 0, port 2, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 102: 198.18.10.2 > 198.18.10.1: ICMP echo reply, id 117, seq 1, length 64
diff --git a/tests/dsa-high-vid.out b/tests/dsa-high-vid.out
new file mode 100644
index 0000000..6ce0eab
--- /dev/null
+++ b/tests/dsa-high-vid.out
@@ -0,0 +1,4 @@
+ 1 00:06:42.569821 DSA Forward port 0.2, VLAN 1337u, IP 198.18.10.1 > 198.18.10.2: ICMP echo request, id 116, seq 1, length 64
+ 2 00:06:42.569913 DSA CPU > port 0.2, VLAN 0u, IP 198.18.10.2 > 198.18.10.1: ICMP echo reply, id 116, seq 1, length 64
+ 3 00:06:42.575549 DSA Forward port 0.2, VLAN 1337u, IP 198.18.10.1 > 198.18.10.2: ICMP echo request, id 117, seq 1, length 64
+ 4 00:06:42.575572 DSA CPU > port 0.2, VLAN 0u, IP 198.18.10.2 > 198.18.10.1: ICMP echo reply, id 117, seq 1, length 64
diff --git a/tests/dsa-high-vid.pcap b/tests/dsa-high-vid.pcap
new file mode 100644
index 0000000..9995974
--- /dev/null
+++ b/tests/dsa-high-vid.pcap
Binary files differ
diff --git a/tests/dsa.out b/tests/dsa.out
new file mode 100644
index 0000000..d6bce25
--- /dev/null
+++ b/tests/dsa.out
@@ -0,0 +1,8 @@
+ 1 22:21:39.544060 DSA Forward port 0.1, VLAN 0u, IP 192.168.30.1 > 192.168.30.2: ICMP echo request, id 13586, seq 1, length 64
+ 2 22:21:39.544382 DSA CPU > port 0.1, VLAN 0u, IP 192.168.30.2 > 192.168.30.1: ICMP echo reply, id 13586, seq 1, length 64
+ 3 22:21:40.563126 DSA Forward port 0.1, VLAN 0u, IP 192.168.30.1 > 192.168.30.2: ICMP echo request, id 13586, seq 2, length 64
+ 4 22:21:40.563252 DSA CPU > port 0.1, VLAN 0u, IP 192.168.30.2 > 192.168.30.1: ICMP echo reply, id 13586, seq 2, length 64
+ 5 22:21:41.576445 DSA Forward port 0.1, VLAN 0u, IP 192.168.30.1 > 192.168.30.2: ICMP echo request, id 13586, seq 3, length 64
+ 6 22:21:41.576541 DSA CPU > port 0.1, VLAN 0u, IP 192.168.30.2 > 192.168.30.1: ICMP echo reply, id 13586, seq 3, length 64
+ 7 22:21:44.560086 DSA CPU > port 0.1, VLAN 0u, ARP, Request who-has 192.168.30.1 tell 192.168.30.2, length 28
+ 8 22:21:44.560415 DSA Forward port 0.1, VLAN 0u, ARP, Reply 192.168.30.1 is-at 00:50:b6:29:10:70, length 46
diff --git a/tests/dsa.pcap b/tests/dsa.pcap
new file mode 100644
index 0000000..a69c856
--- /dev/null
+++ b/tests/dsa.pcap
Binary files differ
diff --git a/tests/dtp-v.out b/tests/dtp-v.out
new file mode 100644
index 0000000..7987a32
--- /dev/null
+++ b/tests/dtp-v.out
@@ -0,0 +1,55 @@
+ 1 11:46:11.550072 DTPv1, length 29
+ Domain (0x0001) TLV, length 8, Lab
+ Status (0x0002) TLV, length 5, 0x4
+ DTP type (0x0003) TLV, length 5, 0x40
+ Neighbor (0x0004) TLV, length 10, 00:19:06:ea:b8:85
+ 2 11:46:11.550157 00:19:06:ea:b8:85 > 01:00:0c:00:00:00 SNAP, oui Cisco (0x00000c), pid Unknown (0x0003), length 68:
+ 0x0000: aaaa 0300 000c 0003 0000 0000 0100 0ccc ................
+ 0x0010: cccc 0019 06ea b885 0025 aaaa 0300 000c .........%......
+ 0x0020: 2004 0100 0100 084c 6162 0000 0200 0504 .......Lab......
+ 0x0030: 0003 0005 4000 0400 0a00 1906 eab8 8500 ....@...........
+ 0x0040: 0000 0000 0000 0000 f7a7 fe42 ...........B
+ 3 11:46:41.559806 DTPv1, length 29
+ Domain (0x0001) TLV, length 8, Lab
+ Status (0x0002) TLV, length 5, 0x4
+ DTP type (0x0003) TLV, length 5, 0x40
+ Neighbor (0x0004) TLV, length 10, 00:19:06:ea:b8:85
+ 4 11:46:41.559890 00:19:06:ea:b8:85 > 01:00:0c:00:00:00 SNAP, oui Cisco (0x00000c), pid Unknown (0x0003), length 68:
+ 0x0000: aaaa 0300 000c 0003 0000 0000 0100 0ccc ................
+ 0x0010: cccc 0019 06ea b885 0025 aaaa 0300 000c .........%......
+ 0x0020: 2004 0100 0100 084c 6162 0000 0200 0504 .......Lab......
+ 0x0030: 0003 0005 4000 0400 0a00 1906 eab8 8500 ....@...........
+ 0x0040: 0000 0000 0000 0000 f7a7 fe42 ...........B
+ 5 11:47:11.566606 DTPv1, length 29
+ Domain (0x0001) TLV, length 8, Lab
+ Status (0x0002) TLV, length 5, 0x4
+ DTP type (0x0003) TLV, length 5, 0x40
+ Neighbor (0x0004) TLV, length 10, 00:19:06:ea:b8:85
+ 6 11:47:11.566691 00:19:06:ea:b8:85 > 01:00:0c:00:00:00 SNAP, oui Cisco (0x00000c), pid Unknown (0x0003), length 68:
+ 0x0000: aaaa 0300 000c 0003 0000 0000 0100 0ccc ................
+ 0x0010: cccc 0019 06ea b885 0025 aaaa 0300 000c .........%......
+ 0x0020: 2004 0100 0100 084c 6162 0000 0200 0504 .......Lab......
+ 0x0030: 0003 0005 4000 0400 0a00 1906 eab8 8500 ....@...........
+ 0x0040: 0000 0000 0000 0000 f7a7 fe42 ...........B
+ 7 11:47:41.576275 DTPv1, length 29
+ Domain (0x0001) TLV, length 8, Lab
+ Status (0x0002) TLV, length 5, 0x4
+ DTP type (0x0003) TLV, length 5, 0x40
+ Neighbor (0x0004) TLV, length 10, 00:19:06:ea:b8:85
+ 8 11:47:41.576360 00:19:06:ea:b8:85 > 01:00:0c:00:00:00 SNAP, oui Cisco (0x00000c), pid Unknown (0x0003), length 68:
+ 0x0000: aaaa 0300 000c 0003 0000 0000 0100 0ccc ................
+ 0x0010: cccc 0019 06ea b885 0025 aaaa 0300 000c .........%......
+ 0x0020: 2004 0100 0100 084c 6162 0000 0200 0504 .......Lab......
+ 0x0030: 0003 0005 4000 0400 0a00 1906 eab8 8514 ....@...........
+ 0x0040: 0002 000f 0000 0000 7232 1da6 ........r2..
+ 9 11:48:11.585963 DTPv1, length 29
+ Domain (0x0001) TLV, length 8, Lab
+ Status (0x0002) TLV, length 5, 0x4
+ DTP type (0x0003) TLV, length 5, 0x40
+ Neighbor (0x0004) TLV, length 10, 00:19:06:ea:b8:85
+ 10 11:48:11.586048 00:19:06:ea:b8:85 > 01:00:0c:00:00:00 SNAP, oui Cisco (0x00000c), pid Unknown (0x0003), length 68:
+ 0x0000: aaaa 0300 000c 0003 0000 0000 0100 0ccc ................
+ 0x0010: cccc 0019 06ea b885 0025 aaaa 0300 000c .........%......
+ 0x0020: 2004 0100 0100 084c 6162 0000 0200 0504 .......Lab......
+ 0x0030: 0003 0005 4000 0400 0a00 1906 eab8 8514 ....@...........
+ 0x0040: 0002 000f 0000 0000 7232 1da6 ........r2..
diff --git a/tests/dvmrp.out b/tests/dvmrp.out
new file mode 100644
index 0000000..a67f364
--- /dev/null
+++ b/tests/dvmrp.out
@@ -0,0 +1,2 @@
+ 1 05:56:17.722943 IP 10.0.0.1 > 2.2.2.2: igmp dvmrp Ask-neighbors2
+ 2 05:56:17.730956 IP 2.2.2.2 > 10.0.0.1: igmp dvmrp Neighbors2 (v 12.4): [10.0.0.2 -> 10.0.0.1 (1/0/querier)] [10.0.0.9 -> 10.0.0.10 (1/0)]
diff --git a/tests/e1000g-e.out b/tests/e1000g-e.out
new file mode 100644
index 0000000..2e79b99
--- /dev/null
+++ b/tests/e1000g-e.out
@@ -0,0 +1,20 @@
+ 1 17:27:26.701826 4294967295 > 0, family IPv4 (2), length 108: 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 0, length 64
+ 2 17:27:26.701845 0 > 4294967295, family IPv4 (2), length 108: 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 0, length 64
+ 3 17:27:27.692887 4294967295 > 0, family IPv4 (2), length 108: 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 1, length 64
+ 4 17:27:27.692892 0 > 4294967295, family IPv4 (2), length 108: 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 1, length 64
+ 5 17:27:28.692808 4294967295 > 0, family IPv4 (2), length 108: 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 2, length 64
+ 6 17:27:28.692812 0 > 4294967295, family IPv4 (2), length 108: 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 2, length 64
+ 7 17:27:29.692666 4294967295 > 0, family IPv4 (2), length 108: 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 3, length 64
+ 8 17:27:29.692669 0 > 4294967295, family IPv4 (2), length 108: 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 3, length 64
+ 9 17:27:30.692585 4294967295 > 0, family IPv4 (2), length 108: 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 4, length 64
+ 10 17:27:30.692589 0 > 4294967295, family IPv4 (2), length 108: 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 4, length 64
+ 11 17:27:31.692643 4294967295 > 0, family IPv4 (2), length 108: 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 5, length 64
+ 12 17:27:31.692647 0 > 4294967295, family IPv4 (2), length 108: 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 5, length 64
+ 13 17:27:32.692565 4294967295 > 0, family IPv4 (2), length 108: 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 6, length 64
+ 14 17:27:32.692569 0 > 4294967295, family IPv4 (2), length 108: 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 6, length 64
+ 15 17:27:33.692421 4294967295 > 0, family IPv4 (2), length 108: 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 7, length 64
+ 16 17:27:33.692424 0 > 4294967295, family IPv4 (2), length 108: 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 7, length 64
+ 17 17:27:34.692078 4294967295 > 0, family IPv4 (2), length 108: 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 8, length 64
+ 18 17:27:34.692081 0 > 4294967295, family IPv4 (2), length 108: 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 8, length 64
+ 19 17:27:35.692001 4294967295 > 0, family IPv4 (2), length 108: 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 9, length 64
+ 20 17:27:35.692005 0 > 4294967295, family IPv4 (2), length 108: 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 9, length 64
diff --git a/tests/e1000g.out b/tests/e1000g.out
new file mode 100644
index 0000000..f4a063f
--- /dev/null
+++ b/tests/e1000g.out
@@ -0,0 +1,20 @@
+ 1 17:27:26.701826 IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 0, length 64
+ 2 17:27:26.701845 IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 0, length 64
+ 3 17:27:27.692887 IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 1, length 64
+ 4 17:27:27.692892 IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 1, length 64
+ 5 17:27:28.692808 IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 2, length 64
+ 6 17:27:28.692812 IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 2, length 64
+ 7 17:27:29.692666 IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 3, length 64
+ 8 17:27:29.692669 IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 3, length 64
+ 9 17:27:30.692585 IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 4, length 64
+ 10 17:27:30.692589 IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 4, length 64
+ 11 17:27:31.692643 IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 5, length 64
+ 12 17:27:31.692647 IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 5, length 64
+ 13 17:27:32.692565 IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 6, length 64
+ 14 17:27:32.692569 IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 6, length 64
+ 15 17:27:33.692421 IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 7, length 64
+ 16 17:27:33.692424 IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 7, length 64
+ 17 17:27:34.692078 IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 8, length 64
+ 18 17:27:34.692081 IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 8, length 64
+ 19 17:27:35.692001 IP 129.146.106.55 > 10.5.233.117: ICMP echo request, id 6901, seq 9, length 64
+ 20 17:27:35.692005 IP 10.5.233.117 > 129.146.106.55: ICMP echo reply, id 6901, seq 9, length 64
diff --git a/tests/e1000g.pcap b/tests/e1000g.pcap
new file mode 100644
index 0000000..11b0174
--- /dev/null
+++ b/tests/e1000g.pcap
Binary files differ
diff --git a/tests/eap_extract_read2_asan.out b/tests/eap_extract_read2_asan.out
new file mode 100644
index 0000000..2756d8b
--- /dev/null
+++ b/tests/eap_extract_read2_asan.out
@@ -0,0 +1 @@
+ 1 06:58:21.3759079661 EAP packet (0) v155, len 0 [|eap]
diff --git a/tests/eap_extract_read2_asan.pcap b/tests/eap_extract_read2_asan.pcap
new file mode 100644
index 0000000..3e92e87
--- /dev/null
+++ b/tests/eap_extract_read2_asan.pcap
Binary files differ
diff --git a/tests/eapon1-nosmb.out b/tests/eapon1-nosmb.out
new file mode 100644
index 0000000..3839a3b
--- /dev/null
+++ b/tests/eapon1-nosmb.out
@@ -0,0 +1,114 @@
+ 1 15:17:28.958610 IP 192.168.1.249.138 > 192.168.1.255.138: UDP, length 179
+ 2 15:17:28.958708 IP 192.168.1.249.138 > 192.168.1.255.138: UDP, length 179
+ 3 15:17:28.959360 IP 192.168.1.249.138 > 192.168.1.255.138: UDP, length 209
+ 4 15:17:28.961018 IP 192.168.1.249.137 > 192.168.1.255.137: UDP, length 50
+ 5 15:17:29.710899 IP 192.168.1.249.137 > 192.168.1.255.137: UDP, length 50
+ 6 15:17:30.461235 IP 192.168.1.249.137 > 192.168.1.255.137: UDP, length 50
+ 7 15:17:30.798408 IP 192.168.1.249.138 > 192.168.1.255.138: UDP, length 201
+ 8 15:17:33.464213 IP 192.168.1.249.137 > 192.168.1.255.137: UDP, length 50
+ 9 15:17:34.214302 IP 192.168.1.249.137 > 192.168.1.255.137: UDP, length 50
+ 10 15:17:34.964688 IP 192.168.1.249.137 > 192.168.1.255.137: UDP, length 50
+ 11 15:17:35.473290 ARP, Request who-has 192.168.1.1 tell 192.168.1.249, length 28
+ 12 15:17:35.481559 ARP, Reply 192.168.1.1 is-at 00:0d:88:4f:25:91, length 46
+ 13 15:17:35.481577 IP 192.168.1.249.68 > 192.168.1.1.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 14 15:17:35.622870 EAP packet (0) v1, len 5
+ 15 15:17:35.666378 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 16 15:17:35.851486 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 17 15:17:36.156548 EAPOL start (1) v1, len 0
+ 18 15:17:36.158698 EAP packet (0) v1, len 5
+ 19 15:17:37.766046 EAP packet (0) v1, len 45
+ 20 15:17:37.790625 EAP packet (0) v1, len 20
+ 21 15:17:37.830669 EAP packet (0) v1, len 76
+ 22 15:17:37.848577 EAP packet (0) v1, len 80
+ 23 15:17:38.661939 EAP packet (0) v1, len 28
+ 24 15:17:38.685352 EAP packet (0) v1, len 4
+ 25 15:17:38.686358 EAPOL key (3) v1, len 57
+ 26 15:17:38.687182 EAPOL key (3) v1, len 44
+ 27 15:17:39.852392 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 28 15:17:46.852719 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 29 15:18:02.852731 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 30 15:18:08.689384 EAPOL start (1) v1, len 0
+ 31 15:18:08.696826 EAP packet (0) v1, len 5
+ 32 15:18:08.713116 EAP packet (0) v1, len 45
+ 33 15:18:08.787664 EAP packet (0) v1, len 20
+ 34 15:18:10.344628 EAP packet (0) v1, len 76
+ 35 15:18:10.473292 EAP packet (0) v1, len 80
+ 36 15:18:11.152435 EAP packet (0) v1, len 28
+ 37 15:18:11.251425 EAP packet (0) v1, len 4
+ 38 15:18:11.252509 EAPOL key (3) v1, len 57
+ 39 15:18:11.253336 EAPOL key (3) v1, len 44
+ 40 15:18:35.856823 ARP, Request who-has 169.254.67.194 tell 169.254.67.194, length 28
+ 41 15:18:35.885105 ARP, Request who-has 169.254.67.194 tell 169.254.67.194, length 28
+ 42 15:18:36.885304 ARP, Request who-has 169.254.67.194 tell 169.254.67.194, length 28
+ 43 15:18:37.907817 IP 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
+ 44 15:18:37.910524 IP 169.254.67.194 > 224.0.0.22: igmp v3 report, 1 group record(s)
+ 45 15:18:37.964030 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 46 15:18:38.691974 IP 169.254.67.194 > 224.0.0.22: igmp v3 report, 1 group record(s)
+ 47 15:18:38.714004 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 48 15:18:39.464435 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 49 15:18:39.898479 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 50 15:18:40.214836 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 51 15:18:40.909196 IP 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
+ 52 15:18:40.965632 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 53 15:18:41.254259 EAPOL start (1) v1, len 0
+ 54 15:18:41.256353 EAP packet (0) v1, len 5
+ 55 15:18:41.275901 EAP packet (0) v1, len 45
+ 56 15:18:41.388857 EAP packet (0) v1, len 20
+ 57 15:18:41.715620 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 58 15:18:42.466013 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 59 15:18:42.963175 EAP packet (0) v1, len 76
+ 60 15:18:42.987906 EAP packet (0) v1, len 80
+ 61 15:18:43.216408 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 62 15:18:43.675053 EAP packet (0) v1, len 28
+ 63 15:18:43.695554 EAP packet (0) v1, len 4
+ 64 15:18:43.696547 EAPOL key (3) v1, len 57
+ 65 15:18:43.697368 EAPOL key (3) v1, len 44
+ 66 15:18:43.899684 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 67 15:18:43.909719 IP 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
+ 68 15:18:43.967353 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 69 15:18:43.967896 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 70 15:18:44.717196 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 71 15:18:44.718161 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 72 15:18:45.467593 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 73 15:18:45.468557 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 74 15:18:46.217980 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 75 15:18:46.218950 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 76 15:18:46.969929 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 179
+ 77 15:18:46.970205 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 201
+ 78 15:18:48.470207 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 179
+ 79 15:18:49.970986 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 179
+ 80 15:18:51.471768 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 179
+ 81 15:18:52.900388 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 82 15:18:52.972547 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 191
+ 83 15:18:53.972751 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 191
+ 84 15:18:54.972939 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 191
+ 85 15:18:55.973129 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 191
+ 86 15:18:56.973475 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 87 15:18:57.723686 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 88 15:18:58.474079 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 89 15:18:59.224473 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 90 15:18:59.974983 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 91 15:19:00.725263 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 92 15:19:01.475654 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 93 15:19:02.226046 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 94 15:19:02.976511 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 179
+ 95 15:19:02.976737 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 179
+ 96 15:19:02.977520 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 209
+ 97 15:19:02.979092 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 50
+ 98 15:19:03.728840 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 50
+ 99 15:19:04.479238 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 50
+ 100 15:19:07.482218 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 50
+ 101 15:19:08.232205 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 50
+ 102 15:19:08.982597 IP 169.254.67.194.137 > 169.254.255.255.137: UDP, length 50
+ 103 15:19:09.900631 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 104 15:19:13.696821 EAPOL start (1) v1, len 0
+ 105 15:19:13.704581 EAP packet (0) v1, len 5
+ 106 15:19:13.718221 EAP packet (0) v1, len 45
+ 107 15:19:13.734974 EAP packet (0) v1, len 20
+ 108 15:19:14.801245 IP 169.254.67.194.138 > 169.254.255.255.138: UDP, length 201
+ 109 15:19:15.293800 EAP packet (0) v1, len 76
+ 110 15:19:15.312531 EAP packet (0) v1, len 80
+ 111 15:19:15.997763 EAP packet (0) v1, len 28
+ 112 15:19:16.022323 EAP packet (0) v1, len 4
+ 113 15:19:16.023335 EAPOL key (3) v1, len 57
+ 114 15:19:16.024149 EAPOL key (3) v1, len 44
diff --git a/tests/eapon1-v-nosmb.out b/tests/eapon1-v-nosmb.out
new file mode 100644
index 0000000..151196c
--- /dev/null
+++ b/tests/eapon1-v-nosmb.out
@@ -0,0 +1,331 @@
+ 1 15:17:28.958610 IP (tos 0x0, ttl 128, id 14471, offset 0, flags [none], proto UDP (17), length 207)
+ 192.168.1.249.138 > 192.168.1.255.138: UDP, length 179
+ 2 15:17:28.958708 IP (tos 0x0, ttl 128, id 14472, offset 0, flags [none], proto UDP (17), length 207)
+ 192.168.1.249.138 > 192.168.1.255.138: UDP, length 179
+ 3 15:17:28.959360 IP (tos 0x0, ttl 128, id 14473, offset 0, flags [none], proto UDP (17), length 237)
+ 192.168.1.249.138 > 192.168.1.255.138: UDP, length 209
+ 4 15:17:28.961018 IP (tos 0x0, ttl 128, id 14474, offset 0, flags [none], proto UDP (17), length 78)
+ 192.168.1.249.137 > 192.168.1.255.137: UDP, length 50
+ 5 15:17:29.710899 IP (tos 0x0, ttl 128, id 14477, offset 0, flags [none], proto UDP (17), length 78)
+ 192.168.1.249.137 > 192.168.1.255.137: UDP, length 50
+ 6 15:17:30.461235 IP (tos 0x0, ttl 128, id 14478, offset 0, flags [none], proto UDP (17), length 78)
+ 192.168.1.249.137 > 192.168.1.255.137: UDP, length 50
+ 7 15:17:30.798408 IP (tos 0x0, ttl 128, id 14479, offset 0, flags [none], proto UDP (17), length 229)
+ 192.168.1.249.138 > 192.168.1.255.138: UDP, length 201
+ 8 15:17:33.464213 IP (tos 0x0, ttl 128, id 14484, offset 0, flags [none], proto UDP (17), length 78)
+ 192.168.1.249.137 > 192.168.1.255.137: UDP, length 50
+ 9 15:17:34.214302 IP (tos 0x0, ttl 128, id 14485, offset 0, flags [none], proto UDP (17), length 78)
+ 192.168.1.249.137 > 192.168.1.255.137: UDP, length 50
+ 10 15:17:34.964688 IP (tos 0x0, ttl 128, id 14486, offset 0, flags [none], proto UDP (17), length 78)
+ 192.168.1.249.137 > 192.168.1.255.137: UDP, length 50
+ 11 15:17:35.473290 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.249, length 28
+ 12 15:17:35.481559 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.1 is-at 00:0d:88:4f:25:91, length 46
+ 13 15:17:35.481577 IP (tos 0x0, ttl 128, id 14487, offset 0, flags [none], proto UDP (17), length 328)
+ 192.168.1.249.68 > 192.168.1.1.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0xc82d253d, secs 36609, Flags [Broadcast]
+ Client-IP 192.168.1.249
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Release
+ Server-ID (54), length 4: 192.168.1.1
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ 14 15:17:35.622870 EAP packet (0) v1, len 5, Request (1), id 1, len 5
+ Type Identity (1)
+ 15 15:17:35.666378 IP (tos 0x0, ttl 128, id 14495, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0x9817873c, Flags [none]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 16 15:17:35.851486 IP (tos 0x0, ttl 128, id 14497, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0xd5037d2e, Flags [none]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 17 15:17:36.156548 EAPOL start (1) v1, len 0
+ 18 15:17:36.158698 EAP packet (0) v1, len 5, Request (1), id 2, len 5
+ Type Identity (1)
+ 19 15:17:37.766046 EAP packet (0) v1, len 45, Response (2), id 2, len 45
+ Type Identity (1), Identity: 1295023820005391@mnc023.mcc295.owlan.org
+ 20 15:17:37.790625 EAP packet (0) v1, len 20, Request (1), id 16, len 20
+ Type SIM (18) subtype [Start] 0x0a
+ 21 15:17:37.830669 EAP packet (0) v1, len 76, Response (2), id 16, len 76
+ Type SIM (18) subtype [Start] 0x0a
+ 22 15:17:37.848577 EAP packet (0) v1, len 80, Request (1), id 17, len 80
+ Type SIM (18) subtype [Challenge] 0x0b
+ 23 15:17:38.661939 EAP packet (0) v1, len 28, Response (2), id 17, len 28
+ Type SIM (18) subtype [Challenge] 0x0b
+ 24 15:17:38.685352 EAP packet (0) v1, len 4, Success (3), id 0, len 4
+ 25 15:17:38.686358 EAPOL key (3) v1, len 57
+ 26 15:17:38.687182 EAPOL key (3) v1, len 44
+ 27 15:17:39.852392 IP (tos 0x0, ttl 128, id 14503, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0xd5037d2e, secs 26881, Flags [none]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 28 15:17:46.852719 IP (tos 0x0, ttl 128, id 14511, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0xd5037d2e, secs 26881, Flags [none]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 29 15:18:02.852731 IP (tos 0x0, ttl 128, id 14514, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0xd5037d2e, secs 26881, Flags [none]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 30 15:18:08.689384 EAPOL start (1) v1, len 0
+ 31 15:18:08.696826 EAP packet (0) v1, len 5, Request (1), id 3, len 5
+ Type Identity (1)
+ 32 15:18:08.713116 EAP packet (0) v1, len 45, Response (2), id 3, len 45
+ Type Identity (1), Identity: 1295023820005391@mnc023.mcc295.owlan.org
+ 33 15:18:08.787664 EAP packet (0) v1, len 20, Request (1), id 47, len 20
+ Type SIM (18) subtype [Start] 0x0a
+ 34 15:18:10.344628 EAP packet (0) v1, len 76, Response (2), id 47, len 76
+ Type SIM (18) subtype [Start] 0x0a
+ 35 15:18:10.473292 EAP packet (0) v1, len 80, Request (1), id 48, len 80
+ Type SIM (18) subtype [Challenge] 0x0b
+ 36 15:18:11.152435 EAP packet (0) v1, len 28, Response (2), id 48, len 28
+ Type SIM (18) subtype [Challenge] 0x0b
+ 37 15:18:11.251425 EAP packet (0) v1, len 4, Success (3), id 0, len 4
+ 38 15:18:11.252509 EAPOL key (3) v1, len 57
+ 39 15:18:11.253336 EAPOL key (3) v1, len 44
+ 40 15:18:35.856823 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 169.254.67.194 tell 169.254.67.194, length 28
+ 41 15:18:35.885105 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 169.254.67.194 tell 169.254.67.194, length 28
+ 42 15:18:36.885304 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 169.254.67.194 tell 169.254.67.194, length 28
+ 43 15:18:37.907817 IP (tos 0x0, ttl 1, id 14526, offset 0, flags [none], proto UDP (17), length 161)
+ 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
+ 44 15:18:37.910524 IP (tos 0x0, ttl 1, id 14528, offset 0, flags [none], proto IGMP (2), length 40, options (RA))
+ 169.254.67.194 > 224.0.0.22: igmp v3 report, 1 group record(s) [gaddr 239.255.255.250 to_ex, 0 source(s)]
+ 45 15:18:37.964030 IP (tos 0x0, ttl 128, id 14530, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 46 15:18:38.691974 IP (tos 0x0, ttl 1, id 14532, offset 0, flags [none], proto IGMP (2), length 40, options (RA))
+ 169.254.67.194 > 224.0.0.22: igmp v3 report, 1 group record(s) [gaddr 239.255.255.250 to_ex, 0 source(s)]
+ 47 15:18:38.714004 IP (tos 0x0, ttl 128, id 14533, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 48 15:18:39.464435 IP (tos 0x0, ttl 128, id 14534, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 49 15:18:39.898479 IP (tos 0x0, ttl 128, id 14535, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0x9245394e, Flags [Broadcast]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 50 15:18:40.214836 IP (tos 0x0, ttl 128, id 14536, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 51 15:18:40.909196 IP (tos 0x0, ttl 1, id 14538, offset 0, flags [none], proto UDP (17), length 161)
+ 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
+ 52 15:18:40.965632 IP (tos 0x0, ttl 128, id 14540, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 53 15:18:41.254259 EAPOL start (1) v1, len 0
+ 54 15:18:41.256353 EAP packet (0) v1, len 5, Request (1), id 4, len 5
+ Type Identity (1)
+ 55 15:18:41.275901 EAP packet (0) v1, len 45, Response (2), id 4, len 45
+ Type Identity (1), Identity: 1295023820005391@mnc023.mcc295.owlan.org
+ 56 15:18:41.388857 EAP packet (0) v1, len 20, Request (1), id 80, len 20
+ Type SIM (18) subtype [Start] 0x0a
+ 57 15:18:41.715620 IP (tos 0x0, ttl 128, id 14541, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 58 15:18:42.466013 IP (tos 0x0, ttl 128, id 14542, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 59 15:18:42.963175 EAP packet (0) v1, len 76, Response (2), id 80, len 76
+ Type SIM (18) subtype [Start] 0x0a
+ 60 15:18:42.987906 EAP packet (0) v1, len 80, Request (1), id 81, len 80
+ Type SIM (18) subtype [Challenge] 0x0b
+ 61 15:18:43.216408 IP (tos 0x0, ttl 128, id 14543, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 62 15:18:43.675053 EAP packet (0) v1, len 28, Response (2), id 81, len 28
+ Type SIM (18) subtype [Challenge] 0x0b
+ 63 15:18:43.695554 EAP packet (0) v1, len 4, Success (3), id 0, len 4
+ 64 15:18:43.696547 EAPOL key (3) v1, len 57
+ 65 15:18:43.697368 EAPOL key (3) v1, len 44
+ 66 15:18:43.899684 IP (tos 0x0, ttl 128, id 14544, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0x9245394e, secs 10497, Flags [Broadcast]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 67 15:18:43.909719 IP (tos 0x0, ttl 1, id 14546, offset 0, flags [none], proto UDP (17), length 161)
+ 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
+ 68 15:18:43.967353 IP (tos 0x0, ttl 128, id 14548, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 69 15:18:43.967896 IP (tos 0x0, ttl 128, id 14549, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 70 15:18:44.717196 IP (tos 0x0, ttl 128, id 14552, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 71 15:18:44.718161 IP (tos 0x0, ttl 128, id 14553, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 72 15:18:45.467593 IP (tos 0x0, ttl 128, id 14554, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 73 15:18:45.468557 IP (tos 0x0, ttl 128, id 14555, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 74 15:18:46.217980 IP (tos 0x0, ttl 128, id 14556, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 75 15:18:46.218950 IP (tos 0x0, ttl 128, id 14557, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 76 15:18:46.969929 IP (tos 0x0, ttl 128, id 14563, offset 0, flags [none], proto UDP (17), length 207)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 179
+ 77 15:18:46.970205 IP (tos 0x0, ttl 128, id 14564, offset 0, flags [none], proto UDP (17), length 229)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 201
+ 78 15:18:48.470207 IP (tos 0x0, ttl 128, id 14566, offset 0, flags [none], proto UDP (17), length 207)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 179
+ 79 15:18:49.970986 IP (tos 0x0, ttl 128, id 14567, offset 0, flags [none], proto UDP (17), length 207)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 179
+ 80 15:18:51.471768 IP (tos 0x0, ttl 128, id 14568, offset 0, flags [none], proto UDP (17), length 207)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 179
+ 81 15:18:52.900388 IP (tos 0x0, ttl 128, id 14569, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0x9245394e, secs 10497, Flags [Broadcast]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 82 15:18:52.972547 IP (tos 0x0, ttl 128, id 14570, offset 0, flags [none], proto UDP (17), length 219)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 191
+ 83 15:18:53.972751 IP (tos 0x0, ttl 128, id 14571, offset 0, flags [none], proto UDP (17), length 219)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 191
+ 84 15:18:54.972939 IP (tos 0x0, ttl 128, id 14572, offset 0, flags [none], proto UDP (17), length 219)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 191
+ 85 15:18:55.973129 IP (tos 0x0, ttl 128, id 14573, offset 0, flags [none], proto UDP (17), length 219)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 191
+ 86 15:18:56.973475 IP (tos 0x0, ttl 128, id 14574, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 87 15:18:57.723686 IP (tos 0x0, ttl 128, id 14575, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 88 15:18:58.474079 IP (tos 0x0, ttl 128, id 14576, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 89 15:18:59.224473 IP (tos 0x0, ttl 128, id 14579, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 90 15:18:59.974983 IP (tos 0x0, ttl 128, id 14580, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 91 15:19:00.725263 IP (tos 0x0, ttl 128, id 14581, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 92 15:19:01.475654 IP (tos 0x0, ttl 128, id 14582, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 93 15:19:02.226046 IP (tos 0x0, ttl 128, id 14583, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 68
+ 94 15:19:02.976511 IP (tos 0x0, ttl 128, id 14584, offset 0, flags [none], proto UDP (17), length 207)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 179
+ 95 15:19:02.976737 IP (tos 0x0, ttl 128, id 14585, offset 0, flags [none], proto UDP (17), length 207)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 179
+ 96 15:19:02.977520 IP (tos 0x0, ttl 128, id 14586, offset 0, flags [none], proto UDP (17), length 237)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 209
+ 97 15:19:02.979092 IP (tos 0x0, ttl 128, id 14587, offset 0, flags [none], proto UDP (17), length 78)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 50
+ 98 15:19:03.728840 IP (tos 0x0, ttl 128, id 14588, offset 0, flags [none], proto UDP (17), length 78)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 50
+ 99 15:19:04.479238 IP (tos 0x0, ttl 128, id 14589, offset 0, flags [none], proto UDP (17), length 78)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 50
+ 100 15:19:07.482218 IP (tos 0x0, ttl 128, id 14593, offset 0, flags [none], proto UDP (17), length 78)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 50
+ 101 15:19:08.232205 IP (tos 0x0, ttl 128, id 14594, offset 0, flags [none], proto UDP (17), length 78)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 50
+ 102 15:19:08.982597 IP (tos 0x0, ttl 128, id 14596, offset 0, flags [none], proto UDP (17), length 78)
+ 169.254.67.194.137 > 169.254.255.255.137: UDP, length 50
+ 103 15:19:09.900631 IP (tos 0x0, ttl 128, id 14598, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0x9245394e, secs 10497, Flags [Broadcast]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 104 15:19:13.696821 EAPOL start (1) v1, len 0
+ 105 15:19:13.704581 EAP packet (0) v1, len 5, Request (1), id 5, len 5
+ Type Identity (1)
+ 106 15:19:13.718221 EAP packet (0) v1, len 45, Response (2), id 5, len 45
+ Type Identity (1), Identity: 1295023820005391@mnc023.mcc295.owlan.org
+ 107 15:19:13.734974 EAP packet (0) v1, len 20, Request (1), id 112, len 20
+ Type SIM (18) subtype [Start] 0x0a
+ 108 15:19:14.801245 IP (tos 0x0, ttl 128, id 14604, offset 0, flags [none], proto UDP (17), length 229)
+ 169.254.67.194.138 > 169.254.255.255.138: UDP, length 201
+ 109 15:19:15.293800 EAP packet (0) v1, len 76, Response (2), id 112, len 76
+ Type SIM (18) subtype [Start] 0x0a
+ 110 15:19:15.312531 EAP packet (0) v1, len 80, Request (1), id 113, len 80
+ Type SIM (18) subtype [Challenge] 0x0b
+ 111 15:19:15.997763 EAP packet (0) v1, len 28, Response (2), id 113, len 28
+ Type SIM (18) subtype [Challenge] 0x0b
+ 112 15:19:16.022323 EAP packet (0) v1, len 4, Success (3), id 0, len 4
+ 113 15:19:16.023335 EAPOL key (3) v1, len 57
+ 114 15:19:16.024149 EAPOL key (3) v1, len 44
diff --git a/tests/eapon1-v.out b/tests/eapon1-v.out
new file mode 100644
index 0000000..1d0b218
--- /dev/null
+++ b/tests/eapon1-v.out
@@ -0,0 +1,331 @@
+ 1 15:17:28.958610 IP (tos 0x0, ttl 128, id 14471, offset 0, flags [none], proto UDP (17), length 207)
+ 192.168.1.249.138 > 192.168.1.255.138: NBT UDP PACKET(138)
+ 2 15:17:28.958708 IP (tos 0x0, ttl 128, id 14472, offset 0, flags [none], proto UDP (17), length 207)
+ 192.168.1.249.138 > 192.168.1.255.138: NBT UDP PACKET(138)
+ 3 15:17:28.959360 IP (tos 0x0, ttl 128, id 14473, offset 0, flags [none], proto UDP (17), length 237)
+ 192.168.1.249.138 > 192.168.1.255.138: NBT UDP PACKET(138)
+ 4 15:17:28.961018 IP (tos 0x0, ttl 128, id 14474, offset 0, flags [none], proto UDP (17), length 78)
+ 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 5 15:17:29.710899 IP (tos 0x0, ttl 128, id 14477, offset 0, flags [none], proto UDP (17), length 78)
+ 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 6 15:17:30.461235 IP (tos 0x0, ttl 128, id 14478, offset 0, flags [none], proto UDP (17), length 78)
+ 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 7 15:17:30.798408 IP (tos 0x0, ttl 128, id 14479, offset 0, flags [none], proto UDP (17), length 229)
+ 192.168.1.249.138 > 192.168.1.255.138: NBT UDP PACKET(138)
+ 8 15:17:33.464213 IP (tos 0x0, ttl 128, id 14484, offset 0, flags [none], proto UDP (17), length 78)
+ 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 9 15:17:34.214302 IP (tos 0x0, ttl 128, id 14485, offset 0, flags [none], proto UDP (17), length 78)
+ 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 10 15:17:34.964688 IP (tos 0x0, ttl 128, id 14486, offset 0, flags [none], proto UDP (17), length 78)
+ 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 11 15:17:35.473290 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.1.1 tell 192.168.1.249, length 28
+ 12 15:17:35.481559 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.1.1 is-at 00:0d:88:4f:25:91, length 46
+ 13 15:17:35.481577 IP (tos 0x0, ttl 128, id 14487, offset 0, flags [none], proto UDP (17), length 328)
+ 192.168.1.249.68 > 192.168.1.1.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0xc82d253d, secs 36609, Flags [Broadcast]
+ Client-IP 192.168.1.249
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Release
+ Server-ID (54), length 4: 192.168.1.1
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ 14 15:17:35.622870 EAP packet (0) v1, len 5, Request (1), id 1, len 5
+ Type Identity (1)
+ 15 15:17:35.666378 IP (tos 0x0, ttl 128, id 14495, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0x9817873c, Flags [none]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 16 15:17:35.851486 IP (tos 0x0, ttl 128, id 14497, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0xd5037d2e, Flags [none]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 17 15:17:36.156548 EAPOL start (1) v1, len 0
+ 18 15:17:36.158698 EAP packet (0) v1, len 5, Request (1), id 2, len 5
+ Type Identity (1)
+ 19 15:17:37.766046 EAP packet (0) v1, len 45, Response (2), id 2, len 45
+ Type Identity (1), Identity: 1295023820005391@mnc023.mcc295.owlan.org
+ 20 15:17:37.790625 EAP packet (0) v1, len 20, Request (1), id 16, len 20
+ Type SIM (18) subtype [Start] 0x0a
+ 21 15:17:37.830669 EAP packet (0) v1, len 76, Response (2), id 16, len 76
+ Type SIM (18) subtype [Start] 0x0a
+ 22 15:17:37.848577 EAP packet (0) v1, len 80, Request (1), id 17, len 80
+ Type SIM (18) subtype [Challenge] 0x0b
+ 23 15:17:38.661939 EAP packet (0) v1, len 28, Response (2), id 17, len 28
+ Type SIM (18) subtype [Challenge] 0x0b
+ 24 15:17:38.685352 EAP packet (0) v1, len 4, Success (3), id 0, len 4
+ 25 15:17:38.686358 EAPOL key (3) v1, len 57
+ 26 15:17:38.687182 EAPOL key (3) v1, len 44
+ 27 15:17:39.852392 IP (tos 0x0, ttl 128, id 14503, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0xd5037d2e, secs 26881, Flags [none]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 28 15:17:46.852719 IP (tos 0x0, ttl 128, id 14511, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0xd5037d2e, secs 26881, Flags [none]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 29 15:18:02.852731 IP (tos 0x0, ttl 128, id 14514, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0xd5037d2e, secs 26881, Flags [none]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 30 15:18:08.689384 EAPOL start (1) v1, len 0
+ 31 15:18:08.696826 EAP packet (0) v1, len 5, Request (1), id 3, len 5
+ Type Identity (1)
+ 32 15:18:08.713116 EAP packet (0) v1, len 45, Response (2), id 3, len 45
+ Type Identity (1), Identity: 1295023820005391@mnc023.mcc295.owlan.org
+ 33 15:18:08.787664 EAP packet (0) v1, len 20, Request (1), id 47, len 20
+ Type SIM (18) subtype [Start] 0x0a
+ 34 15:18:10.344628 EAP packet (0) v1, len 76, Response (2), id 47, len 76
+ Type SIM (18) subtype [Start] 0x0a
+ 35 15:18:10.473292 EAP packet (0) v1, len 80, Request (1), id 48, len 80
+ Type SIM (18) subtype [Challenge] 0x0b
+ 36 15:18:11.152435 EAP packet (0) v1, len 28, Response (2), id 48, len 28
+ Type SIM (18) subtype [Challenge] 0x0b
+ 37 15:18:11.251425 EAP packet (0) v1, len 4, Success (3), id 0, len 4
+ 38 15:18:11.252509 EAPOL key (3) v1, len 57
+ 39 15:18:11.253336 EAPOL key (3) v1, len 44
+ 40 15:18:35.856823 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 169.254.67.194 tell 169.254.67.194, length 28
+ 41 15:18:35.885105 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 169.254.67.194 tell 169.254.67.194, length 28
+ 42 15:18:36.885304 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 169.254.67.194 tell 169.254.67.194, length 28
+ 43 15:18:37.907817 IP (tos 0x0, ttl 1, id 14526, offset 0, flags [none], proto UDP (17), length 161)
+ 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
+ 44 15:18:37.910524 IP (tos 0x0, ttl 1, id 14528, offset 0, flags [none], proto IGMP (2), length 40, options (RA))
+ 169.254.67.194 > 224.0.0.22: igmp v3 report, 1 group record(s) [gaddr 239.255.255.250 to_ex, 0 source(s)]
+ 45 15:18:37.964030 IP (tos 0x0, ttl 128, id 14530, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 46 15:18:38.691974 IP (tos 0x0, ttl 1, id 14532, offset 0, flags [none], proto IGMP (2), length 40, options (RA))
+ 169.254.67.194 > 224.0.0.22: igmp v3 report, 1 group record(s) [gaddr 239.255.255.250 to_ex, 0 source(s)]
+ 47 15:18:38.714004 IP (tos 0x0, ttl 128, id 14533, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 48 15:18:39.464435 IP (tos 0x0, ttl 128, id 14534, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 49 15:18:39.898479 IP (tos 0x0, ttl 128, id 14535, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0x9245394e, Flags [Broadcast]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 50 15:18:40.214836 IP (tos 0x0, ttl 128, id 14536, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 51 15:18:40.909196 IP (tos 0x0, ttl 1, id 14538, offset 0, flags [none], proto UDP (17), length 161)
+ 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
+ 52 15:18:40.965632 IP (tos 0x0, ttl 128, id 14540, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 53 15:18:41.254259 EAPOL start (1) v1, len 0
+ 54 15:18:41.256353 EAP packet (0) v1, len 5, Request (1), id 4, len 5
+ Type Identity (1)
+ 55 15:18:41.275901 EAP packet (0) v1, len 45, Response (2), id 4, len 45
+ Type Identity (1), Identity: 1295023820005391@mnc023.mcc295.owlan.org
+ 56 15:18:41.388857 EAP packet (0) v1, len 20, Request (1), id 80, len 20
+ Type SIM (18) subtype [Start] 0x0a
+ 57 15:18:41.715620 IP (tos 0x0, ttl 128, id 14541, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 58 15:18:42.466013 IP (tos 0x0, ttl 128, id 14542, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 59 15:18:42.963175 EAP packet (0) v1, len 76, Response (2), id 80, len 76
+ Type SIM (18) subtype [Start] 0x0a
+ 60 15:18:42.987906 EAP packet (0) v1, len 80, Request (1), id 81, len 80
+ Type SIM (18) subtype [Challenge] 0x0b
+ 61 15:18:43.216408 IP (tos 0x0, ttl 128, id 14543, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 62 15:18:43.675053 EAP packet (0) v1, len 28, Response (2), id 81, len 28
+ Type SIM (18) subtype [Challenge] 0x0b
+ 63 15:18:43.695554 EAP packet (0) v1, len 4, Success (3), id 0, len 4
+ 64 15:18:43.696547 EAPOL key (3) v1, len 57
+ 65 15:18:43.697368 EAPOL key (3) v1, len 44
+ 66 15:18:43.899684 IP (tos 0x0, ttl 128, id 14544, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0x9245394e, secs 10497, Flags [Broadcast]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 67 15:18:43.909719 IP (tos 0x0, ttl 1, id 14546, offset 0, flags [none], proto UDP (17), length 161)
+ 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
+ 68 15:18:43.967353 IP (tos 0x0, ttl 128, id 14548, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 69 15:18:43.967896 IP (tos 0x0, ttl 128, id 14549, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 70 15:18:44.717196 IP (tos 0x0, ttl 128, id 14552, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 71 15:18:44.718161 IP (tos 0x0, ttl 128, id 14553, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 72 15:18:45.467593 IP (tos 0x0, ttl 128, id 14554, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 73 15:18:45.468557 IP (tos 0x0, ttl 128, id 14555, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 74 15:18:46.217980 IP (tos 0x0, ttl 128, id 14556, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 75 15:18:46.218950 IP (tos 0x0, ttl 128, id 14557, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 76 15:18:46.969929 IP (tos 0x0, ttl 128, id 14563, offset 0, flags [none], proto UDP (17), length 207)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 77 15:18:46.970205 IP (tos 0x0, ttl 128, id 14564, offset 0, flags [none], proto UDP (17), length 229)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 78 15:18:48.470207 IP (tos 0x0, ttl 128, id 14566, offset 0, flags [none], proto UDP (17), length 207)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 79 15:18:49.970986 IP (tos 0x0, ttl 128, id 14567, offset 0, flags [none], proto UDP (17), length 207)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 80 15:18:51.471768 IP (tos 0x0, ttl 128, id 14568, offset 0, flags [none], proto UDP (17), length 207)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 81 15:18:52.900388 IP (tos 0x0, ttl 128, id 14569, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0x9245394e, secs 10497, Flags [Broadcast]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 82 15:18:52.972547 IP (tos 0x0, ttl 128, id 14570, offset 0, flags [none], proto UDP (17), length 219)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 83 15:18:53.972751 IP (tos 0x0, ttl 128, id 14571, offset 0, flags [none], proto UDP (17), length 219)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 84 15:18:54.972939 IP (tos 0x0, ttl 128, id 14572, offset 0, flags [none], proto UDP (17), length 219)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 85 15:18:55.973129 IP (tos 0x0, ttl 128, id 14573, offset 0, flags [none], proto UDP (17), length 219)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 86 15:18:56.973475 IP (tos 0x0, ttl 128, id 14574, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 87 15:18:57.723686 IP (tos 0x0, ttl 128, id 14575, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 88 15:18:58.474079 IP (tos 0x0, ttl 128, id 14576, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 89 15:18:59.224473 IP (tos 0x0, ttl 128, id 14579, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 90 15:18:59.974983 IP (tos 0x0, ttl 128, id 14580, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 91 15:19:00.725263 IP (tos 0x0, ttl 128, id 14581, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 92 15:19:01.475654 IP (tos 0x0, ttl 128, id 14582, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 93 15:19:02.226046 IP (tos 0x0, ttl 128, id 14583, offset 0, flags [none], proto UDP (17), length 96)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 94 15:19:02.976511 IP (tos 0x0, ttl 128, id 14584, offset 0, flags [none], proto UDP (17), length 207)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 95 15:19:02.976737 IP (tos 0x0, ttl 128, id 14585, offset 0, flags [none], proto UDP (17), length 207)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 96 15:19:02.977520 IP (tos 0x0, ttl 128, id 14586, offset 0, flags [none], proto UDP (17), length 237)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 97 15:19:02.979092 IP (tos 0x0, ttl 128, id 14587, offset 0, flags [none], proto UDP (17), length 78)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 98 15:19:03.728840 IP (tos 0x0, ttl 128, id 14588, offset 0, flags [none], proto UDP (17), length 78)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 99 15:19:04.479238 IP (tos 0x0, ttl 128, id 14589, offset 0, flags [none], proto UDP (17), length 78)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 100 15:19:07.482218 IP (tos 0x0, ttl 128, id 14593, offset 0, flags [none], proto UDP (17), length 78)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 101 15:19:08.232205 IP (tos 0x0, ttl 128, id 14594, offset 0, flags [none], proto UDP (17), length 78)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 102 15:19:08.982597 IP (tos 0x0, ttl 128, id 14596, offset 0, flags [none], proto UDP (17), length 78)
+ 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 103 15:19:09.900631 IP (tos 0x0, ttl 128, id 14598, offset 0, flags [none], proto UDP (17), length 328)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300, xid 0x9245394e, secs 10497, Flags [Broadcast]
+ Client-Ethernet-Address 00:04:23:57:a5:7a
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message (53), length 1: Discover
+ NOAUTO (116), length 1: Y
+ Client-ID (61), length 7: ether 00:04:23:57:a5:7a
+ Requested-IP (50), length 4: 192.168.1.249
+ Hostname (12), length 8: "DJP95S0J"
+ Vendor-Class (60), length 8: "MSFT 5.0"
+ Parameter-Request (55), length 11:
+ Subnet-Mask (1), Domain-Name (15), Default-Gateway (3), Domain-Name-Server (6)
+ Netbios-Name-Server (44), Netbios-Node (46), Netbios-Scope (47), Router-Discovery (31)
+ Static-Route (33), Classless-Static-Route-Microsoft (249), Vendor-Option (43)
+ 104 15:19:13.696821 EAPOL start (1) v1, len 0
+ 105 15:19:13.704581 EAP packet (0) v1, len 5, Request (1), id 5, len 5
+ Type Identity (1)
+ 106 15:19:13.718221 EAP packet (0) v1, len 45, Response (2), id 5, len 45
+ Type Identity (1), Identity: 1295023820005391@mnc023.mcc295.owlan.org
+ 107 15:19:13.734974 EAP packet (0) v1, len 20, Request (1), id 112, len 20
+ Type SIM (18) subtype [Start] 0x0a
+ 108 15:19:14.801245 IP (tos 0x0, ttl 128, id 14604, offset 0, flags [none], proto UDP (17), length 229)
+ 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 109 15:19:15.293800 EAP packet (0) v1, len 76, Response (2), id 112, len 76
+ Type SIM (18) subtype [Start] 0x0a
+ 110 15:19:15.312531 EAP packet (0) v1, len 80, Request (1), id 113, len 80
+ Type SIM (18) subtype [Challenge] 0x0b
+ 111 15:19:15.997763 EAP packet (0) v1, len 28, Response (2), id 113, len 28
+ Type SIM (18) subtype [Challenge] 0x0b
+ 112 15:19:16.022323 EAP packet (0) v1, len 4, Success (3), id 0, len 4
+ 113 15:19:16.023335 EAPOL key (3) v1, len 57
+ 114 15:19:16.024149 EAPOL key (3) v1, len 44
diff --git a/tests/eapon1.gdbinit b/tests/eapon1.gdbinit
new file mode 100644
index 0000000..37ad0bc
--- /dev/null
+++ b/tests/eapon1.gdbinit
@@ -0,0 +1 @@
+set args -r eapon1.pcap
diff --git a/tests/eapon1.out b/tests/eapon1.out
new file mode 100644
index 0000000..fbfaea4
--- /dev/null
+++ b/tests/eapon1.out
@@ -0,0 +1,114 @@
+ 1 15:17:28.958610 IP 192.168.1.249.138 > 192.168.1.255.138: NBT UDP PACKET(138)
+ 2 15:17:28.958708 IP 192.168.1.249.138 > 192.168.1.255.138: NBT UDP PACKET(138)
+ 3 15:17:28.959360 IP 192.168.1.249.138 > 192.168.1.255.138: NBT UDP PACKET(138)
+ 4 15:17:28.961018 IP 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 5 15:17:29.710899 IP 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 6 15:17:30.461235 IP 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 7 15:17:30.798408 IP 192.168.1.249.138 > 192.168.1.255.138: NBT UDP PACKET(138)
+ 8 15:17:33.464213 IP 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 9 15:17:34.214302 IP 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 10 15:17:34.964688 IP 192.168.1.249.137 > 192.168.1.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 11 15:17:35.473290 ARP, Request who-has 192.168.1.1 tell 192.168.1.249, length 28
+ 12 15:17:35.481559 ARP, Reply 192.168.1.1 is-at 00:0d:88:4f:25:91, length 46
+ 13 15:17:35.481577 IP 192.168.1.249.68 > 192.168.1.1.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 14 15:17:35.622870 EAP packet (0) v1, len 5
+ 15 15:17:35.666378 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 16 15:17:35.851486 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 17 15:17:36.156548 EAPOL start (1) v1, len 0
+ 18 15:17:36.158698 EAP packet (0) v1, len 5
+ 19 15:17:37.766046 EAP packet (0) v1, len 45
+ 20 15:17:37.790625 EAP packet (0) v1, len 20
+ 21 15:17:37.830669 EAP packet (0) v1, len 76
+ 22 15:17:37.848577 EAP packet (0) v1, len 80
+ 23 15:17:38.661939 EAP packet (0) v1, len 28
+ 24 15:17:38.685352 EAP packet (0) v1, len 4
+ 25 15:17:38.686358 EAPOL key (3) v1, len 57
+ 26 15:17:38.687182 EAPOL key (3) v1, len 44
+ 27 15:17:39.852392 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 28 15:17:46.852719 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 29 15:18:02.852731 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 30 15:18:08.689384 EAPOL start (1) v1, len 0
+ 31 15:18:08.696826 EAP packet (0) v1, len 5
+ 32 15:18:08.713116 EAP packet (0) v1, len 45
+ 33 15:18:08.787664 EAP packet (0) v1, len 20
+ 34 15:18:10.344628 EAP packet (0) v1, len 76
+ 35 15:18:10.473292 EAP packet (0) v1, len 80
+ 36 15:18:11.152435 EAP packet (0) v1, len 28
+ 37 15:18:11.251425 EAP packet (0) v1, len 4
+ 38 15:18:11.252509 EAPOL key (3) v1, len 57
+ 39 15:18:11.253336 EAPOL key (3) v1, len 44
+ 40 15:18:35.856823 ARP, Request who-has 169.254.67.194 tell 169.254.67.194, length 28
+ 41 15:18:35.885105 ARP, Request who-has 169.254.67.194 tell 169.254.67.194, length 28
+ 42 15:18:36.885304 ARP, Request who-has 169.254.67.194 tell 169.254.67.194, length 28
+ 43 15:18:37.907817 IP 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
+ 44 15:18:37.910524 IP 169.254.67.194 > 224.0.0.22: igmp v3 report, 1 group record(s)
+ 45 15:18:37.964030 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 46 15:18:38.691974 IP 169.254.67.194 > 224.0.0.22: igmp v3 report, 1 group record(s)
+ 47 15:18:38.714004 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 48 15:18:39.464435 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 49 15:18:39.898479 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 50 15:18:40.214836 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 51 15:18:40.909196 IP 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
+ 52 15:18:40.965632 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 53 15:18:41.254259 EAPOL start (1) v1, len 0
+ 54 15:18:41.256353 EAP packet (0) v1, len 5
+ 55 15:18:41.275901 EAP packet (0) v1, len 45
+ 56 15:18:41.388857 EAP packet (0) v1, len 20
+ 57 15:18:41.715620 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 58 15:18:42.466013 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 59 15:18:42.963175 EAP packet (0) v1, len 76
+ 60 15:18:42.987906 EAP packet (0) v1, len 80
+ 61 15:18:43.216408 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 62 15:18:43.675053 EAP packet (0) v1, len 28
+ 63 15:18:43.695554 EAP packet (0) v1, len 4
+ 64 15:18:43.696547 EAPOL key (3) v1, len 57
+ 65 15:18:43.697368 EAPOL key (3) v1, len 44
+ 66 15:18:43.899684 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 67 15:18:43.909719 IP 169.254.67.194.4299 > 239.255.255.250.1900: UDP, length 133
+ 68 15:18:43.967353 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 69 15:18:43.967896 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 70 15:18:44.717196 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 71 15:18:44.718161 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 72 15:18:45.467593 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 73 15:18:45.468557 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 74 15:18:46.217980 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 75 15:18:46.218950 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 76 15:18:46.969929 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 77 15:18:46.970205 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 78 15:18:48.470207 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 79 15:18:49.970986 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 80 15:18:51.471768 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 81 15:18:52.900388 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 82 15:18:52.972547 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 83 15:18:53.972751 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 84 15:18:54.972939 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 85 15:18:55.973129 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 86 15:18:56.973475 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 87 15:18:57.723686 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 88 15:18:58.474079 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 89 15:18:59.224473 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 90 15:18:59.974983 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 91 15:19:00.725263 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 92 15:19:01.475654 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 93 15:19:02.226046 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
+ 94 15:19:02.976511 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 95 15:19:02.976737 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 96 15:19:02.977520 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 97 15:19:02.979092 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 98 15:19:03.728840 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 99 15:19:04.479238 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 100 15:19:07.482218 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 101 15:19:08.232205 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 102 15:19:08.982597 IP 169.254.67.194.137 > 169.254.255.255.137: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
+ 103 15:19:09.900631 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:04:23:57:a5:7a, length 300
+ 104 15:19:13.696821 EAPOL start (1) v1, len 0
+ 105 15:19:13.704581 EAP packet (0) v1, len 5
+ 106 15:19:13.718221 EAP packet (0) v1, len 45
+ 107 15:19:13.734974 EAP packet (0) v1, len 20
+ 108 15:19:14.801245 IP 169.254.67.194.138 > 169.254.255.255.138: NBT UDP PACKET(138)
+ 109 15:19:15.293800 EAP packet (0) v1, len 76
+ 110 15:19:15.312531 EAP packet (0) v1, len 80
+ 111 15:19:15.997763 EAP packet (0) v1, len 28
+ 112 15:19:16.022323 EAP packet (0) v1, len 4
+ 113 15:19:16.023335 EAPOL key (3) v1, len 57
+ 114 15:19:16.024149 EAPOL key (3) v1, len 44
diff --git a/tests/eapon1.pcap b/tests/eapon1.pcap
new file mode 100644
index 0000000..4a87ed1
--- /dev/null
+++ b/tests/eapon1.pcap
Binary files differ
diff --git a/tests/edns-opts-v.out b/tests/edns-opts-v.out
new file mode 100644
index 0000000..6ff06ec
--- /dev/null
+++ b/tests/edns-opts-v.out
@@ -0,0 +1,84 @@
+ 1 20:58:40.639715 IP (tos 0x0, ttl 64, id 42311, offset 0, flags [none], proto UDP (17), length 57)
+ 192.0.0.1.46225 > 192.0.0.2.53: 13784+ A? example.com. (29)
+ 2 20:58:40.661836 IP (tos 0x0, ttl 48, id 43077, offset 0, flags [none], proto UDP (17), length 73)
+ 192.0.0.2.53 > 192.0.0.1.46225: 13784*- 1/0/0 example.com. A 93.184.216.34 (45)
+ 3 20:58:41.671700 IP (tos 0x0, ttl 64, id 42441, offset 0, flags [none], proto UDP (17), length 68)
+ 192.0.0.1.46225 > 192.0.0.2.53: 47424+ [1au] A? example.com. (40)
+ 4 20:58:41.693577 IP (tos 0x0, ttl 48, id 64719, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: 47424*- 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG (227)
+ 5 20:58:42.703534 IP (tos 0x0, ttl 64, id 42575, offset 0, flags [none], proto UDP (17), length 79)
+ 192.0.0.1.46225 > 192.0.0.2.53: 41739+ [1au] A? example.com. (51)
+ 6 20:58:42.725559 IP (tos 0x0, ttl 48, id 21779, offset 0, flags [none], proto UDP (17), length 95)
+ 192.0.0.2.53 > 192.0.0.1.46225: 41739*- 1/0/1 example.com. A 93.184.216.34 (67)
+ 7 20:58:43.734693 IP (tos 0x0, ttl 64, id 42674, offset 0, flags [none], proto UDP (17), length 80)
+ 192.0.0.1.46225 > 192.0.0.2.53: 18065+ [1au] A? example.com. (52)
+ 8 20:58:43.756707 IP (tos 0x0, ttl 48, id 43697, offset 0, flags [none], proto UDP (17), length 96)
+ 192.0.0.2.53 > 192.0.0.1.46225: 18065*- 1/0/1 example.com. A 93.184.216.34 (68)
+ 9 20:58:44.766528 IP (tos 0x0, ttl 64, id 42890, offset 0, flags [none], proto UDP (17), length 89)
+ 192.0.0.1.46225 > 192.0.0.2.53: 34237+ [1au] A? example.com. (61)
+ 10 20:58:44.788502 IP (tos 0x0, ttl 48, id 65435, offset 0, flags [none], proto UDP (17), length 105)
+ 192.0.0.2.53 > 192.0.0.1.46225: 34237*- 1/0/1 example.com. A 93.184.216.34 (77)
+ 11 20:58:45.797638 IP (tos 0x0, ttl 64, id 43148, offset 0, flags [none], proto UDP (17), length 80)
+ 192.0.0.1.46225 > 192.0.0.2.53: 30225+ [1au] A? example.com. (52)
+ 12 20:58:45.819504 IP (tos 0x0, ttl 48, id 21512, offset 0, flags [none], proto UDP (17), length 112)
+ 192.0.0.2.53 > 192.0.0.1.46225: 30225*- 1/0/1 example.com. A 93.184.216.34 (84)
+ 13 20:58:46.829454 IP (tos 0x0, ttl 64, id 43211, offset 0, flags [none], proto UDP (17), length 74)
+ 192.0.0.1.46225 > 192.0.0.2.53: 52688+ [1au] A? example.com. (46)
+ 14 20:58:46.851441 IP (tos 0x0, ttl 48, id 43346, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: 52688*- 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG (227)
+ 15 20:58:47.860858 IP (tos 0x0, ttl 64, id 43235, offset 0, flags [none], proto UDP (17), length 83)
+ 192.0.0.1.46225 > 192.0.0.2.53: 57808+ [1au] A? example.com. (55)
+ 16 20:58:47.882669 IP (tos 0x0, ttl 48, id 64510, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: 57808*- 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG (227)
+ 17 20:58:48.892587 IP (tos 0x0, ttl 64, id 43380, offset 0, flags [none], proto UDP (17), length 89)
+ 192.0.0.1.46225 > 192.0.0.2.53: 33054+ [1au] A? example.com. (61)
+ 18 20:58:48.914406 IP (tos 0x0, ttl 48, id 20611, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: 33054*- 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG (227)
+ 19 20:58:49.924625 IP (tos 0x0, ttl 64, id 43587, offset 0, flags [none], proto UDP (17), length 74)
+ 192.0.0.1.46225 > 192.0.0.2.53: 14353+ [1au] A? example.com. (46)
+ 20 20:58:49.946523 IP (tos 0x0, ttl 48, id 42366, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: 14353*- 1/0/1 example.com. A 93.184.216.34 (56)
+ 21 20:58:50.956601 IP (tos 0x0, ttl 64, id 43603, offset 0, flags [none], proto UDP (17), length 74)
+ 192.0.0.1.46225 > 192.0.0.2.53: 17010+ [1au] A? example.com. (46)
+ 22 20:58:50.978366 IP (tos 0x0, ttl 48, id 64034, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: 17010*- 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG (227)
+ 23 20:58:51.988387 IP (tos 0x0, ttl 64, id 43789, offset 0, flags [none], proto UDP (17), length 76)
+ 192.0.0.1.46225 > 192.0.0.2.53: 3894+ [1au] A? example.com. (48)
+ 24 20:58:52.010258 IP (tos 0x0, ttl 48, id 20169, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: 3894*- 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG (227)
+ 25 20:58:53.015716 IP (tos 0x0, ttl 64, id 43925, offset 0, flags [none], proto UDP (17), length 72)
+ 192.0.0.1.46225 > 192.0.0.2.53: 8476+ [1au] A? example.com. (44)
+ 26 20:58:53.037529 IP (tos 0x0, ttl 48, id 42142, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: 8476*- 1/0/1 example.com. A 93.184.216.34 (56)
+ 27 20:58:54.047412 IP (tos 0x0, ttl 64, id 44065, offset 0, flags [none], proto UDP (17), length 76)
+ 192.0.0.1.46225 > 192.0.0.2.53: 3966+ [1au] A? example.com. (48)
+ 28 20:58:54.069358 IP (tos 0x0, ttl 48, id 64128, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: 3966*- 1/0/1 example.com. A 93.184.216.34 (56)
+ 29 20:58:55.078435 IP (tos 0x0, ttl 64, id 44256, offset 0, flags [none], proto UDP (17), length 72)
+ 192.0.0.1.46225 > 192.0.0.2.53: 26580+ [1au] A? example.com. (44)
+ 30 20:58:55.100224 IP (tos 0x0, ttl 48, id 18983, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: 26580*- 1/0/1 example.com. A 93.184.216.34 (56)
+ 31 20:58:56.110237 IP (tos 0x0, ttl 64, id 44374, offset 0, flags [none], proto UDP (17), length 82)
+ 192.0.0.1.46225 > 192.0.0.2.53: 2190+ [1au] A? example.com. (54)
+ 32 20:58:56.132070 IP (tos 0x0, ttl 48, id 39653, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: 2190*- 1/0/1 example.com. A 93.184.216.34 (56)
+ 33 20:58:57.142215 IP (tos 0x0, ttl 64, id 44395, offset 0, flags [none], proto UDP (17), length 76)
+ 192.0.0.1.46225 > 192.0.0.2.53: 16386+ [1au] A? example.com. (48)
+ 34 20:58:57.164050 IP (tos 0x0, ttl 48, id 60845, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: 16386*- 1/0/1 example.com. A 93.184.216.34 (56)
+ 35 20:58:58.174193 IP (tos 0x0, ttl 64, id 44643, offset 0, flags [none], proto UDP (17), length 78)
+ 192.0.0.1.46225 > 192.0.0.2.53: 6373+ [1au] A? example.com. (50)
+ 36 20:58:58.195911 IP (tos 0x0, ttl 48, id 16078, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: 6373*- 1/0/1 example.com. A 93.184.216.34 (56)
+ 37 20:58:59.206181 IP (tos 0x0, ttl 64, id 44899, offset 0, flags [none], proto UDP (17), length 108)
+ 192.0.0.1.46225 > 192.0.0.2.53: 29267+ [1au] A? example.com. (80)
+ 38 20:58:59.228465 IP (tos 0x0, ttl 48, id 37094, offset 0, flags [none], proto UDP (17), length 112)
+ 192.0.0.2.53 > 192.0.0.1.46225: 29267*- 1/0/1 example.com. A 93.184.216.34 (84)
+ 39 20:59:00.238274 IP (tos 0x0, ttl 64, id 45092, offset 0, flags [none], proto UDP (17), length 90)
+ 192.0.0.1.46225 > 192.0.0.2.53: 59326+ [1au] A? example.com. (62)
+ 40 20:59:00.260209 IP (tos 0x0, ttl 48, id 58611, offset 0, flags [none], proto UDP (17), length 122)
+ 192.0.0.2.53 > 192.0.0.1.46225: 59326*- 1/0/1 example.com. A 93.184.216.34 (94)
+ 41 20:59:01.269390 IP (tos 0x0, ttl 64, id 45316, offset 0, flags [none], proto UDP (17), length 100)
+ 192.0.0.1.46225 > 192.0.0.2.53: 17122+ [1au] A? example.com. (72)
+ 42 20:59:01.291167 IP (tos 0x0, ttl 48, id 14192, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: 17122*- 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG (227)
diff --git a/tests/edns-opts-vv.out b/tests/edns-opts-vv.out
new file mode 100644
index 0000000..eb1db0a
--- /dev/null
+++ b/tests/edns-opts-vv.out
@@ -0,0 +1,84 @@
+ 1 20:58:40.639715 IP (tos 0x0, ttl 64, id 42311, offset 0, flags [none], proto UDP (17), length 57)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd13 -> 0xc573!] 13784+ A? example.com. (29)
+ 2 20:58:40.661836 IP (tos 0x0, ttl 48, id 43077, offset 0, flags [none], proto UDP (17), length 73)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 13784*- q: A? example.com. 1/0/0 example.com. A 93.184.216.34 (45)
+ 3 20:58:41.671700 IP (tos 0x0, ttl 64, id 42441, offset 0, flags [none], proto UDP (17), length 68)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd1e -> 0x9191!] 47424+ [1au] A? example.com. ar: . OPT UDPsize=12345 DO (40)
+ 4 20:58:41.693577 IP (tos 0x0, ttl 48, id 64719, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 47424*- q: A? example.com. 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG ar: . OPT UDPsize=4096 DO (227)
+ 5 20:58:42.703534 IP (tos 0x0, ttl 64, id 42575, offset 0, flags [none], proto UDP (17), length 79)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd29 -> 0x6dce!] 41739+ [1au] A? example.com. ar: . OPT UDPsize=4096 [ECS 192.0.2.0/24/0] (51)
+ 6 20:58:42.725559 IP (tos 0x0, ttl 48, id 21779, offset 0, flags [none], proto UDP (17), length 95)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 41739*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 [ECS 192.0.2.0/24/0] (67)
+ 7 20:58:43.734693 IP (tos 0x0, ttl 64, id 42674, offset 0, flags [none], proto UDP (17), length 80)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd2a -> 0xc240!] 18065+ [1au] A? example.com. ar: . OPT UDPsize=4096 [ECS 192.1.2.3/32/0] (52)
+ 8 20:58:43.756707 IP (tos 0x0, ttl 48, id 43697, offset 0, flags [none], proto UDP (17), length 96)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 18065*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 [ECS 192.1.2.3/32/0] (68)
+ 9 20:58:44.766528 IP (tos 0x0, ttl 64, id 42890, offset 0, flags [none], proto UDP (17), length 89)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd33 -> 0xc368!] 34237+ [1au] A? example.com. ar: . OPT UDPsize=4096 [ECS 2001:db8:85a3::8a2e:0:0/100/0] (61)
+ 10 20:58:44.788502 IP (tos 0x0, ttl 48, id 65435, offset 0, flags [none], proto UDP (17), length 105)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 34237*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 [ECS 2001:db8:85a3::8a2e:0:0/100/0] (77)
+ 11 20:58:45.797638 IP (tos 0x0, ttl 64, id 43148, offset 0, flags [none], proto UDP (17), length 80)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd2a -> 0x750a!] 30225+ [1au] A? example.com. ar: . OPT UDPsize=4096 [COOKIE a954d29208767b5c] (52)
+ 12 20:58:45.819504 IP (tos 0x0, ttl 48, id 21512, offset 0, flags [none], proto UDP (17), length 112)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 30225*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 [COOKIE a954d29208767b5c cf75f75b5db0bf0575c9f2d76c962883] (84)
+ 13 20:58:46.829454 IP (tos 0x0, ttl 64, id 43211, offset 0, flags [none], proto UDP (17), length 74)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd24 -> 0x971a!] 52688+ [1au] A? example.com. ar: . OPT UDPsize=4096 DO [DAU DSA-NSEC3-SHA1 RSASHA1-NSEC3-SHA1] (46)
+ 14 20:58:46.851441 IP (tos 0x0, ttl 48, id 43346, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 52688*- q: A? example.com. 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG ar: . OPT UDPsize=4096 DO (227)
+ 15 20:58:47.860858 IP (tos 0x0, ttl 64, id 43235, offset 0, flags [none], proto UDP (17), length 83)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd2d -> 0x83fc!] 57808+ [1au] A? example.com. ar: . OPT UDPsize=4096 DO [DAU PRIVATEDNS,DHU SHA-256,N3U SHA-1] (55)
+ 16 20:58:47.882669 IP (tos 0x0, ttl 48, id 64510, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 57808*- q: A? example.com. 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG ar: . OPT UDPsize=4096 DO (227)
+ 17 20:58:48.892587 IP (tos 0x0, ttl 64, id 43380, offset 0, flags [none], proto UDP (17), length 89)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd33 -> 0xaa4d!] 33054+ [1au] A? example.com. ar: . OPT UDPsize=4096 DO [CHAIN foo.example.com.] (61)
+ 18 20:58:48.914406 IP (tos 0x0, ttl 48, id 20611, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 33054*- q: A? example.com. 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG ar: . OPT UDPsize=4096 DO (227)
+ 19 20:58:49.924625 IP (tos 0x0, ttl 64, id 43587, offset 0, flags [none], proto UDP (17), length 74)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd24 -> 0xae09!] 14353+ [1au] A? example.com. ar: . OPT UDPsize=4096 [KEEPALIVE 123.4 sec] (46)
+ 20 20:58:49.946523 IP (tos 0x0, ttl 48, id 42366, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 14353*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 (56)
+ 21 20:58:50.956601 IP (tos 0x0, ttl 64, id 43603, offset 0, flags [none], proto UDP (17), length 74)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd24 -> 0x8c36!] 17010+ [1au] A? example.com. ar: . OPT UDPsize=4096 DO [KEY-TAG 40000] (46)
+ 22 20:58:50.978366 IP (tos 0x0, ttl 48, id 64034, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 17010*- q: A? example.com. 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG ar: . OPT UDPsize=4096 DO (227)
+ 23 20:58:51.988387 IP (tos 0x0, ttl 64, id 43789, offset 0, flags [none], proto UDP (17), length 76)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd26 -> 0xfc19!] 3894+ [1au] A? example.com. ar: . OPT UDPsize=4096 DO [KEY-TAG 30000 60000] (48)
+ 24 20:58:52.010258 IP (tos 0x0, ttl 48, id 20169, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 3894*- q: A? example.com. 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG ar: . OPT UDPsize=4096 DO (227)
+ 25 20:58:53.015716 IP (tos 0x0, ttl 64, id 43925, offset 0, flags [none], proto UDP (17), length 72)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd22 -> 0xc9da!] 8476+ [1au] A? example.com. ar: . OPT UDPsize=4096 [EXPIRE] (44)
+ 26 20:58:53.037529 IP (tos 0x0, ttl 48, id 42142, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 8476*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 (56)
+ 27 20:58:54.047412 IP (tos 0x0, ttl 64, id 44065, offset 0, flags [none], proto UDP (17), length 76)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd26 -> 0x6656!] 3966+ [1au] A? example.com. ar: . OPT UDPsize=4096 [EXPIRE 1209600 sec] (48)
+ 28 20:58:54.069358 IP (tos 0x0, ttl 48, id 64128, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 3966*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 (56)
+ 29 20:58:55.078435 IP (tos 0x0, ttl 64, id 44256, offset 0, flags [none], proto UDP (17), length 72)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd22 -> 0x8328!] 26580+ [1au] A? example.com. ar: . OPT UDPsize=4096 [NSID] (44)
+ 30 20:58:55.100224 IP (tos 0x0, ttl 48, id 18983, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 26580*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 (56)
+ 31 20:58:56.110237 IP (tos 0x0, ttl 64, id 44374, offset 0, flags [none], proto UDP (17), length 82)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd2c -> 0x8c9c!] 2190+ [1au] A? example.com. ar: . OPT UDPsize=4096 [NSID 00112233445566778899] (54)
+ 32 20:58:56.132070 IP (tos 0x0, ttl 48, id 39653, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 2190*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 (56)
+ 33 20:58:57.142215 IP (tos 0x0, ttl 64, id 44395, offset 0, flags [none], proto UDP (17), length 76)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd26 -> 0x0d03!] 16386+ [1au] A? example.com. ar: . OPT UDPsize=4096 [Opt77 deadbeef] (48)
+ 34 20:58:57.164050 IP (tos 0x0, ttl 48, id 60845, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 16386*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 (56)
+ 35 20:58:58.174193 IP (tos 0x0, ttl 64, id 44643, offset 0, flags [none], proto UDP (17), length 78)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd28 -> 0xd1f6!] 6373+ [1au] A? example.com. ar: . OPT UDPsize=4096 [PADDING (6)] (50)
+ 36 20:58:58.195911 IP (tos 0x0, ttl 48, id 16078, offset 0, flags [none], proto UDP (17), length 84)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 6373*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 (56)
+ 37 20:58:59.206181 IP (tos 0x0, ttl 64, id 44899, offset 0, flags [none], proto UDP (17), length 108)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd46 -> 0x2f3b!] 29267+ [1au] A? example.com. ar: . OPT UDPsize=4096 [NSID 0123456789abcdef,PADDING (12),COOKIE aaaaaaaaaaaaaaaa] (80)
+ 38 20:58:59.228465 IP (tos 0x0, ttl 48, id 37094, offset 0, flags [none], proto UDP (17), length 112)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 29267*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 [COOKIE aaaaaaaaaaaaaaaa b5a8ca325db0bf132274faa81cef9aa4] (84)
+ 39 20:59:00.238274 IP (tos 0x0, ttl 64, id 45092, offset 0, flags [none], proto UDP (17), length 90)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd34 -> 0x883d!] 59326+ [1au] A? example.com. ar: . OPT UDPsize=4096 [ECS 192.1.0.0/16/0,COOKIE aaaaaaaaaaaaaaaa] (62)
+ 40 20:59:00.260209 IP (tos 0x0, ttl 48, id 58611, offset 0, flags [none], proto UDP (17), length 122)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 59326*- q: A? example.com. 1/0/1 example.com. A 93.184.216.34 ar: . OPT UDPsize=4096 [COOKIE aaaaaaaaaaaaaaaa 70a50ca25db0bf14d523a3f77957f788,ECS 192.1.0.0/16/0] (94)
+ 41 20:59:01.269390 IP (tos 0x0, ttl 64, id 45316, offset 0, flags [none], proto UDP (17), length 100)
+ 192.0.0.1.46225 > 192.0.0.2.53: [bad udp cksum 0xcd3e -> 0x4731!] 17122+ [1au] A? example.com. ar: . OPT UDPsize=4096 DO [CHAIN com.,DHU GOST_R_34.11-94,PADDING (4),NSID aabbccddeeff] (72)
+ 42 20:59:01.291167 IP (tos 0x0, ttl 48, id 14192, offset 0, flags [none], proto UDP (17), length 255)
+ 192.0.0.2.53 > 192.0.0.1.46225: [udp sum ok] 17122*- q: A? example.com. 2/0/1 example.com. A 93.184.216.34, example.com. RRSIG ar: . OPT UDPsize=4096 DO (227)
diff --git a/tests/edns-opts.out b/tests/edns-opts.out
new file mode 100644
index 0000000..f6ccd45
--- /dev/null
+++ b/tests/edns-opts.out
@@ -0,0 +1,42 @@
+ 1 20:58:40.639715 IP 192.0.0.1.46225 > 192.0.0.2.53: 13784+ A? example.com. (29)
+ 2 20:58:40.661836 IP 192.0.0.2.53 > 192.0.0.1.46225: 13784*- 1/0/0 A 93.184.216.34 (45)
+ 3 20:58:41.671700 IP 192.0.0.1.46225 > 192.0.0.2.53: 47424+ [1au] A? example.com. (40)
+ 4 20:58:41.693577 IP 192.0.0.2.53 > 192.0.0.1.46225: 47424*- 2/0/1 A 93.184.216.34, RRSIG (227)
+ 5 20:58:42.703534 IP 192.0.0.1.46225 > 192.0.0.2.53: 41739+ [1au] A? example.com. (51)
+ 6 20:58:42.725559 IP 192.0.0.2.53 > 192.0.0.1.46225: 41739*- 1/0/1 A 93.184.216.34 (67)
+ 7 20:58:43.734693 IP 192.0.0.1.46225 > 192.0.0.2.53: 18065+ [1au] A? example.com. (52)
+ 8 20:58:43.756707 IP 192.0.0.2.53 > 192.0.0.1.46225: 18065*- 1/0/1 A 93.184.216.34 (68)
+ 9 20:58:44.766528 IP 192.0.0.1.46225 > 192.0.0.2.53: 34237+ [1au] A? example.com. (61)
+ 10 20:58:44.788502 IP 192.0.0.2.53 > 192.0.0.1.46225: 34237*- 1/0/1 A 93.184.216.34 (77)
+ 11 20:58:45.797638 IP 192.0.0.1.46225 > 192.0.0.2.53: 30225+ [1au] A? example.com. (52)
+ 12 20:58:45.819504 IP 192.0.0.2.53 > 192.0.0.1.46225: 30225*- 1/0/1 A 93.184.216.34 (84)
+ 13 20:58:46.829454 IP 192.0.0.1.46225 > 192.0.0.2.53: 52688+ [1au] A? example.com. (46)
+ 14 20:58:46.851441 IP 192.0.0.2.53 > 192.0.0.1.46225: 52688*- 2/0/1 A 93.184.216.34, RRSIG (227)
+ 15 20:58:47.860858 IP 192.0.0.1.46225 > 192.0.0.2.53: 57808+ [1au] A? example.com. (55)
+ 16 20:58:47.882669 IP 192.0.0.2.53 > 192.0.0.1.46225: 57808*- 2/0/1 A 93.184.216.34, RRSIG (227)
+ 17 20:58:48.892587 IP 192.0.0.1.46225 > 192.0.0.2.53: 33054+ [1au] A? example.com. (61)
+ 18 20:58:48.914406 IP 192.0.0.2.53 > 192.0.0.1.46225: 33054*- 2/0/1 A 93.184.216.34, RRSIG (227)
+ 19 20:58:49.924625 IP 192.0.0.1.46225 > 192.0.0.2.53: 14353+ [1au] A? example.com. (46)
+ 20 20:58:49.946523 IP 192.0.0.2.53 > 192.0.0.1.46225: 14353*- 1/0/1 A 93.184.216.34 (56)
+ 21 20:58:50.956601 IP 192.0.0.1.46225 > 192.0.0.2.53: 17010+ [1au] A? example.com. (46)
+ 22 20:58:50.978366 IP 192.0.0.2.53 > 192.0.0.1.46225: 17010*- 2/0/1 A 93.184.216.34, RRSIG (227)
+ 23 20:58:51.988387 IP 192.0.0.1.46225 > 192.0.0.2.53: 3894+ [1au] A? example.com. (48)
+ 24 20:58:52.010258 IP 192.0.0.2.53 > 192.0.0.1.46225: 3894*- 2/0/1 A 93.184.216.34, RRSIG (227)
+ 25 20:58:53.015716 IP 192.0.0.1.46225 > 192.0.0.2.53: 8476+ [1au] A? example.com. (44)
+ 26 20:58:53.037529 IP 192.0.0.2.53 > 192.0.0.1.46225: 8476*- 1/0/1 A 93.184.216.34 (56)
+ 27 20:58:54.047412 IP 192.0.0.1.46225 > 192.0.0.2.53: 3966+ [1au] A? example.com. (48)
+ 28 20:58:54.069358 IP 192.0.0.2.53 > 192.0.0.1.46225: 3966*- 1/0/1 A 93.184.216.34 (56)
+ 29 20:58:55.078435 IP 192.0.0.1.46225 > 192.0.0.2.53: 26580+ [1au] A? example.com. (44)
+ 30 20:58:55.100224 IP 192.0.0.2.53 > 192.0.0.1.46225: 26580*- 1/0/1 A 93.184.216.34 (56)
+ 31 20:58:56.110237 IP 192.0.0.1.46225 > 192.0.0.2.53: 2190+ [1au] A? example.com. (54)
+ 32 20:58:56.132070 IP 192.0.0.2.53 > 192.0.0.1.46225: 2190*- 1/0/1 A 93.184.216.34 (56)
+ 33 20:58:57.142215 IP 192.0.0.1.46225 > 192.0.0.2.53: 16386+ [1au] A? example.com. (48)
+ 34 20:58:57.164050 IP 192.0.0.2.53 > 192.0.0.1.46225: 16386*- 1/0/1 A 93.184.216.34 (56)
+ 35 20:58:58.174193 IP 192.0.0.1.46225 > 192.0.0.2.53: 6373+ [1au] A? example.com. (50)
+ 36 20:58:58.195911 IP 192.0.0.2.53 > 192.0.0.1.46225: 6373*- 1/0/1 A 93.184.216.34 (56)
+ 37 20:58:59.206181 IP 192.0.0.1.46225 > 192.0.0.2.53: 29267+ [1au] A? example.com. (80)
+ 38 20:58:59.228465 IP 192.0.0.2.53 > 192.0.0.1.46225: 29267*- 1/0/1 A 93.184.216.34 (84)
+ 39 20:59:00.238274 IP 192.0.0.1.46225 > 192.0.0.2.53: 59326+ [1au] A? example.com. (62)
+ 40 20:59:00.260209 IP 192.0.0.2.53 > 192.0.0.1.46225: 59326*- 1/0/1 A 93.184.216.34 (94)
+ 41 20:59:01.269390 IP 192.0.0.1.46225 > 192.0.0.2.53: 17122+ [1au] A? example.com. (72)
+ 42 20:59:01.291167 IP 192.0.0.2.53 > 192.0.0.1.46225: 17122*- 2/0/1 A 93.184.216.34, RRSIG (227)
diff --git a/tests/edns-opts.pcap b/tests/edns-opts.pcap
new file mode 100644
index 0000000..05563a2
--- /dev/null
+++ b/tests/edns-opts.pcap
Binary files differ
diff --git a/tests/edsa-e.out b/tests/edsa-e.out
new file mode 100644
index 0000000..2c04dee
--- /dev/null
+++ b/tests/edsa-e.out
@@ -0,0 +1,10 @@
+ 1 22:21:44.604675 00:50:b6:29:10:7e > c6:e8:9f:7d:69:da, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode Forward, dev 0, port 0, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 106: 192.168.20.1 > 192.168.20.2: ICMP echo request, id 13583, seq 1, length 64
+ 2 22:21:44.604995 c6:e8:9f:7d:69:da > 00:50:b6:29:10:7e, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode From CPU, target dev 0, port 0, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 106: 192.168.20.2 > 192.168.20.1: ICMP echo reply, id 13583, seq 1, length 64
+ 3 22:21:45.622749 00:50:b6:29:10:7e > c6:e8:9f:7d:69:da, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode Forward, dev 0, port 0, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 106: 192.168.20.1 > 192.168.20.2: ICMP echo request, id 13583, seq 2, length 64
+ 4 22:21:45.622883 c6:e8:9f:7d:69:da > 00:50:b6:29:10:7e, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode From CPU, target dev 0, port 0, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 106: 192.168.20.2 > 192.168.20.1: ICMP echo reply, id 13583, seq 2, length 64
+ 5 22:21:46.636035 00:50:b6:29:10:7e > c6:e8:9f:7d:69:da, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode Forward, dev 0, port 0, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 106: 192.168.20.1 > 192.168.20.2: ICMP echo request, id 13583, seq 3, length 64
+ 6 22:21:46.636142 c6:e8:9f:7d:69:da > 00:50:b6:29:10:7e, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode From CPU, target dev 0, port 0, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 106: 192.168.20.2 > 192.168.20.1: ICMP echo reply, id 13583, seq 3, length 64
+ 7 22:21:49.680084 c6:e8:9f:7d:69:da > 00:50:b6:29:10:7e, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode From CPU, target dev 0, port 0, untagged, VID 0, FPri 0, ethertype ARP (0x0806), length 50: Request who-has 192.168.20.1 tell 192.168.20.2, length 28
+ 8 22:21:49.680474 00:50:b6:29:10:7e > c6:e8:9f:7d:69:da, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode Forward, dev 0, port 0, untagged, VID 0, FPri 0, ethertype ARP (0x0806), length 68: Reply 192.168.20.1 is-at 00:50:b6:29:10:7e, length 46
+ 9 22:21:49.809266 00:50:b6:29:10:7e > c6:e8:9f:7d:69:da, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode Forward, dev 0, port 0, untagged, VID 0, FPri 0, ethertype ARP (0x0806), length 68: Request who-has 192.168.20.2 tell 192.168.20.1, length 46
+ 10 22:21:49.809342 c6:e8:9f:7d:69:da > 00:50:b6:29:10:7e, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode From CPU, target dev 0, port 0, untagged, VID 0, FPri 0, ethertype ARP (0x0806), length 50: Reply 192.168.20.2 is-at c6:e8:9f:7d:69:da, length 28
diff --git a/tests/edsa-high-vid-e.out b/tests/edsa-high-vid-e.out
new file mode 100644
index 0000000..d6ca505
--- /dev/null
+++ b/tests/edsa-high-vid-e.out
@@ -0,0 +1,4 @@
+ 1 00:08:39.888043 02:f0:bb:ed:00:0f > d6:18:e2:69:ee:01, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode Forward, dev 0, port 2, untagged, VID 1337, FPri 0, ethertype IPv4 (0x0800), length 106: 198.18.10.1 > 198.18.10.2: ICMP echo request, id 120, seq 1, length 64
+ 2 00:08:39.888132 d6:18:e2:69:ee:01 > 02:f0:bb:ed:00:0f, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode From CPU, target dev 0, port 2, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 106: 198.18.10.2 > 198.18.10.1: ICMP echo reply, id 120, seq 1, length 64
+ 3 00:08:39.893713 02:f0:bb:ed:00:0f > d6:18:e2:69:ee:01, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode Forward, dev 0, port 2, untagged, VID 1337, FPri 5, ethertype IPv4 (0x0800), length 106: 198.18.10.1 > 198.18.10.2: ICMP echo request, id 121, seq 1, length 64
+ 4 00:08:39.893737 d6:18:e2:69:ee:01 > 02:f0:bb:ed:00:0f, Marvell EDSA ethertype 0xdada (Unknown), rsvd 0 0, mode From CPU, target dev 0, port 2, untagged, VID 0, FPri 0, ethertype IPv4 (0x0800), length 106: 198.18.10.2 > 198.18.10.1: ICMP echo reply, id 121, seq 1, length 64
diff --git a/tests/edsa-high-vid.out b/tests/edsa-high-vid.out
new file mode 100644
index 0000000..d82bdd1
--- /dev/null
+++ b/tests/edsa-high-vid.out
@@ -0,0 +1,4 @@
+ 1 00:08:39.888043 EDSA 0xdada, Forward port 0.2, VLAN 1337u, IP 198.18.10.1 > 198.18.10.2: ICMP echo request, id 120, seq 1, length 64
+ 2 00:08:39.888132 EDSA 0xdada, CPU > port 0.2, VLAN 0u, IP 198.18.10.2 > 198.18.10.1: ICMP echo reply, id 120, seq 1, length 64
+ 3 00:08:39.893713 EDSA 0xdada, Forward port 0.2, VLAN 1337u, IP 198.18.10.1 > 198.18.10.2: ICMP echo request, id 121, seq 1, length 64
+ 4 00:08:39.893737 EDSA 0xdada, CPU > port 0.2, VLAN 0u, IP 198.18.10.2 > 198.18.10.1: ICMP echo reply, id 121, seq 1, length 64
diff --git a/tests/edsa-high-vid.pcap b/tests/edsa-high-vid.pcap
new file mode 100644
index 0000000..492f381
--- /dev/null
+++ b/tests/edsa-high-vid.pcap
Binary files differ
diff --git a/tests/edsa.out b/tests/edsa.out
new file mode 100644
index 0000000..8089cd5
--- /dev/null
+++ b/tests/edsa.out
@@ -0,0 +1,10 @@
+ 1 22:21:44.604675 EDSA 0xdada, Forward port 0.0, VLAN 0u, IP 192.168.20.1 > 192.168.20.2: ICMP echo request, id 13583, seq 1, length 64
+ 2 22:21:44.604995 EDSA 0xdada, CPU > port 0.0, VLAN 0u, IP 192.168.20.2 > 192.168.20.1: ICMP echo reply, id 13583, seq 1, length 64
+ 3 22:21:45.622749 EDSA 0xdada, Forward port 0.0, VLAN 0u, IP 192.168.20.1 > 192.168.20.2: ICMP echo request, id 13583, seq 2, length 64
+ 4 22:21:45.622883 EDSA 0xdada, CPU > port 0.0, VLAN 0u, IP 192.168.20.2 > 192.168.20.1: ICMP echo reply, id 13583, seq 2, length 64
+ 5 22:21:46.636035 EDSA 0xdada, Forward port 0.0, VLAN 0u, IP 192.168.20.1 > 192.168.20.2: ICMP echo request, id 13583, seq 3, length 64
+ 6 22:21:46.636142 EDSA 0xdada, CPU > port 0.0, VLAN 0u, IP 192.168.20.2 > 192.168.20.1: ICMP echo reply, id 13583, seq 3, length 64
+ 7 22:21:49.680084 EDSA 0xdada, CPU > port 0.0, VLAN 0u, ARP, Request who-has 192.168.20.1 tell 192.168.20.2, length 28
+ 8 22:21:49.680474 EDSA 0xdada, Forward port 0.0, VLAN 0u, ARP, Reply 192.168.20.1 is-at 00:50:b6:29:10:7e, length 46
+ 9 22:21:49.809266 EDSA 0xdada, Forward port 0.0, VLAN 0u, ARP, Request who-has 192.168.20.2 tell 192.168.20.1, length 46
+ 10 22:21:49.809342 EDSA 0xdada, CPU > port 0.0, VLAN 0u, ARP, Reply 192.168.20.2 is-at c6:e8:9f:7d:69:da, length 28
diff --git a/tests/edsa.pcap b/tests/edsa.pcap
new file mode 100644
index 0000000..202e8c9
--- /dev/null
+++ b/tests/edsa.pcap
Binary files differ
diff --git a/tests/eigrp-tlv-oobr.out b/tests/eigrp-tlv-oobr.out
new file mode 100644
index 0000000..b84a3be
--- /dev/null
+++ b/tests/eigrp-tlv-oobr.out
@@ -0,0 +1,4135 @@
+ 1 00:00:00.000000 c2:02:73:fe:00:00 > 01:00:5e:00:00:0a, ethertype IPv4 (0x0800), length 65535: (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 65521)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 65481
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ 0x0000: 0100 0100 0000 000f
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 65284
+ IOS version: 0.4, EIGRP version 0.4
+ 0x0000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x00a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x00b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x00c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x00d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x00e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x00f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x01a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x01b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x01c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x01d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x01e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x01f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x02a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x02b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x02c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x02d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x02e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x02f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x03a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x03b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x03c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x03d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x03e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x03f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x04a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x04b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x04c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x04d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x04e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x04f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x05a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x05b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x05c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x05d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x05e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x05f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x06a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x06b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x06c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x06d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x06e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x06f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x07a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x07b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x07c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x07d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x07e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x07f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x08a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x08b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x08c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x08d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x08e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x08f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x09a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x09b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x09c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x09d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x09e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x09f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0a00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0a10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0a20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0a30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0a40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0a50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0a60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0a70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0a80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0a90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0aa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0af0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0b00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0b10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0b20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0b30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0b40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0b50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0b60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0b70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0b80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0b90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0bb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0bc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0bd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0be0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0bf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0c00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0c10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0c20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0c30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0c40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0c50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0c60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0c70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0c80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0c90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0cb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0cc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0cd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0cf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0d00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0d10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0d20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0d30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0d40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0d50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0d60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0d70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0d80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0d90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0da0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0db0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0dc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0dd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0de0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0df0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0e00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0e10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0e20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0e30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0e40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0e50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0e60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0e70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0e80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0e90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0eb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0f00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0f10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0f20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0f30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0f40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0f50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0f60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0f70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0f80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0f90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0fa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0fb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0fc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0fd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0fe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x0ff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x10a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x10b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x10c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x10d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x10e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x10f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x11a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x11b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x11c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x11d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x11e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x11f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x12a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x12b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x12c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x12d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x12e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x12f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x13a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x13b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x13c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x13d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x13e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x13f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x14a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x14b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x14c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x14d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x14e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x14f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x15a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x15b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x15c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x15d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x15e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x15f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x16a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x16b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x16c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x16d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x16e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x16f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x17a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x17b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x17c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x17d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x17e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x17f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x18a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x18b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x18c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x18d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x18e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x18f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x19a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x19b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x19c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x19d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x19e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x19f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1a00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1a10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1a20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1a30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1a40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1a50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1a60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1a70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1a80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1a90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1aa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1af0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1b00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1b10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1b20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1b30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1b40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1b50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1b60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1b70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1b80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1b90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1bb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1bc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1bd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1be0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1bf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1c00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1c10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1c20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1c30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1c40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1c50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1c60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1c70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1c80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1c90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1cb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1cc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1cd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1cf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1d00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1d10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1d20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1d30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1d40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1d50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1d60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1d70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1d80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1d90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1da0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1db0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1dc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1dd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1de0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1df0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1e00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1e10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1e20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1e30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1e40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1e50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1e60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1e70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1e80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1e90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1eb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1f00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1f10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1f20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1f30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1f40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1f50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1f60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1f70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1f80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1f90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1fa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1fb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1fc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1fd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1fe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x1ff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x20a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x20b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x20c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x20d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x20e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x20f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x21a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x21b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x21c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x21d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x21e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x21f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x22a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x22b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x22c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x22d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x22e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x22f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x23a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x23b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x23c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x23d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x23e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x23f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x24a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x24b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x24c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x24d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x24e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x24f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x25a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x25b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x25c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x25d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x25e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x25f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x26a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x26b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x26c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x26d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x26e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x26f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x27a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x27b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x27c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x27d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x27e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x27f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x28a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x28b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x28c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x28d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x28e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x28f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x29a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x29b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x29c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x29d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x29e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x29f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2a00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2a10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2a20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2a30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2a40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2a50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2a60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2a70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2a80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2a90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2aa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2af0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2b00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2b10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2b20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2b30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2b40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2b50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2b60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2b70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2b80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2b90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2bb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2bc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2bd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2be0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2bf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2c00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2c10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2c20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2c30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2c40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2c50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2c60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2c70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2c80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2c90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2cb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2cc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2cd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2cf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2d00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2d10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2d20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2d30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2d40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2d50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2d60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2d70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2d80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2d90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2da0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2db0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2dc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2dd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2de0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2df0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2e00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2e10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2e20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2e30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2e40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2e50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2e60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2e70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2e80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2e90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2eb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2f00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2f10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2f20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2f30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2f40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2f50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2f60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2f70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2f80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2f90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2fa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2fb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2fc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2fd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2fe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x2ff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x30a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x30b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x30c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x30d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x30e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x30f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x31a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x31b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x31c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x31d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x31e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x31f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x32a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x32b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x32c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x32d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x32e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x32f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x33a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x33b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x33c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x33d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x33e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x33f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x34a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x34b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x34c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x34d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x34e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x34f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x35a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x35b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x35c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x35d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x35e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x35f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x36a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x36b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x36c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x36d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x36e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x36f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x37a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x37b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x37c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x37d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x37e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x37f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x38a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x38b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x38c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x38d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x38e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x38f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x39a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x39b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x39c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x39d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x39e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x39f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3a00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3a10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3a20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3a30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3a40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3a50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3a60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3a70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3a80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3a90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3aa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3af0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3b00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3b10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3b20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3b30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3b40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3b50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3b60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3b70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3b80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3b90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3bb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3bc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3bd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3be0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3bf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3c00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3c10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3c20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3c30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3c40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3c50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3c60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3c70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3c80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3c90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3cb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3cc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3cd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3cf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3d00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3d10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3d20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3d30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3d40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3d50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3d60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3d70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3d80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3d90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3da0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3db0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3dc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3dd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3de0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3df0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3e00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3e10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3e20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3e30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3e40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3e50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3e60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3e70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3e80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3e90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3eb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3f00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3f10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3f20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3f30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3f40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3f50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3f60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3f70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3f80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3f90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3fa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3fb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3fc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3fd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3fe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x3ff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x40a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x40b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x40c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x40d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x40e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x40f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x41a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x41b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x41c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x41d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x41e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x41f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x42a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x42b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x42c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x42d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x42e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x42f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x43a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x43b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x43c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x43d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x43e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x43f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x44a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x44b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x44c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x44d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x44e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x44f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x45a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x45b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x45c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x45d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x45e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x45f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x46a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x46b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x46c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x46d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x46e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x46f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x47a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x47b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x47c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x47d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x47e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x47f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x48a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x48b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x48c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x48d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x48e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x48f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x49a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x49b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x49c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x49d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x49e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x49f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4a00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4a10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4a20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4a30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4a40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4a50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4a60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4a70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4a80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4a90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4aa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4af0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4b00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4b10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4b20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4b30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4b40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4b50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4b60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4b70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4b80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4b90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4bb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4bc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4bd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4be0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4bf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4c00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4c10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4c20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4c30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4c40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4c50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4c60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4c70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4c80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4c90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4cb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4cc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4cd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4cf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4d00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4d10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4d20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4d30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4d40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4d50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4d60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4d70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4d80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4d90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4da0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4db0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4dc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4dd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4de0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4df0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4e00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4e10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4e20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4e30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4e40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4e50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4e60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4e70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4e80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4e90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4eb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4f00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4f10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4f20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4f30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4f40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4f50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4f60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4f70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4f80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4f90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4fa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4fb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4fc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4fd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4fe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x4ff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x50a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x50b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x50c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x50d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x50e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x50f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x51a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x51b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x51c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x51d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x51e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x51f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x52a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x52b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x52c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x52d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x52e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x52f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x53a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x53b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x53c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x53d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x53e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x53f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x54a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x54b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x54c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x54d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x54e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x54f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x55a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x55b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x55c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x55d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x55e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x55f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x56a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x56b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x56c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x56d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x56e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x56f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x57a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x57b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x57c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x57d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x57e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x57f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x58a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x58b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x58c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x58d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x58e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x58f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x59a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x59b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x59c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x59d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x59e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x59f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5a00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5a10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5a20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5a30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5a40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5a50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5a60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5a70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5a80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5a90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5aa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5af0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5b00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5b10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5b20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5b30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5b40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5b50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5b60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5b70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5b80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5b90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5bb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5bc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5bd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5be0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5bf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5c00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5c10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5c20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5c30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5c40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5c50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5c60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5c70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5c80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5c90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5cb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5cc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5cd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5cf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5d00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5d10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5d20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5d30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5d40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5d50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5d60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5d70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5d80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5d90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5da0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5db0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5dc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5dd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5de0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5df0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5e00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5e10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5e20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5e30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5e40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5e50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5e60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5e70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5e80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5e90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5eb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5f00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5f10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5f20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5f30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5f40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5f50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5f60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5f70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5f80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5f90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5fa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5fb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5fc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5fd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5fe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x5ff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x60a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x60b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x60c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x60d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x60e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x60f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x61a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x61b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x61c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x61d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x61e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x61f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x62a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x62b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x62c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x62d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x62e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x62f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x63a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x63b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x63c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x63d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x63e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x63f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x64a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x64b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x64c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x64d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x64e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x64f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x65a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x65b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x65c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x65d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x65e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x65f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x66a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x66b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x66c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x66d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x66e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x66f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x67a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x67b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x67c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x67d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x67e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x67f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x68a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x68b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x68c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x68d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x68e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x68f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x69a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x69b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x69c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x69d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x69e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x69f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6a00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6a10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6a20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6a30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6a40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6a50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6a60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6a70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6a80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6a90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6aa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6af0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6b00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6b10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6b20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6b30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6b40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6b50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6b60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6b70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6b80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6b90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6bb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6bc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6bd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6be0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6bf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6c00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6c10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6c20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6c30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6c40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6c50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6c60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6c70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6c80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6c90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6cb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6cc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6cd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6cf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6d00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6d10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6d20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6d30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6d40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6d50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6d60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6d70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6d80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6d90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6da0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6db0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6dc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6dd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6de0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6df0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6e00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6e10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6e20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6e30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6e40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6e50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6e60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6e70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6e80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6e90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6eb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6f00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6f10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6f20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6f30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6f40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6f50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6f60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6f70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6f80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6f90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6fa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6fb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6fc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6fd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6fe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x6ff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x70a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x70b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x70c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x70d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x70e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x70f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x71a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x71b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x71c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x71d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x71e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x71f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x72a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x72b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x72c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x72d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x72e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x72f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x73a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x73b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x73c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x73d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x73e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x73f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x74a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x74b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x74c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x74d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x74e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x74f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x75a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x75b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x75c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x75d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x75e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x75f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x76a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x76b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x76c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x76d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x76e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x76f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x77a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x77b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x77c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x77d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x77e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x77f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x78a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x78b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x78c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x78d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x78e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x78f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x79a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x79b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x79c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x79d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x79e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x79f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7a00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7a10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7a20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7a30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7a40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7a50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7a60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7a70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7a80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7a90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7aa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7af0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7b00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7b10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7b20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7b30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7b40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7b50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7b60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7b70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7b80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7b90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7bb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7bc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7bd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7be0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7bf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7c00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7c10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7c20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7c30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7c40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7c50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7c60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7c70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7c80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7c90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7cb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7cc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7cd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7cf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7d00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7d10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7d20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7d30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7d40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7d50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7d60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7d70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7d80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7d90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7da0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7db0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7dc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7dd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7de0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7df0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7e00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7e10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7e20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7e30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7e40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7e50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7e60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7e70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7e80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7e90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7eb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7f00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7f10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7f20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7f30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7f40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7f50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7f60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7f70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7f80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7f90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7fa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7fb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7fc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7fd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7fe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x7ff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x80a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x80b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x80c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x80d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x80e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x80f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x81a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x81b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x81c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x81d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x81e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x81f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x82a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x82b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x82c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x82d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x82e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x82f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x83a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x83b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x83c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x83d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x83e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x83f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x84a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x84b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x84c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x84d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x84e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x84f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x85a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x85b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x85c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x85d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x85e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x85f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x86a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x86b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x86c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x86d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x86e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x86f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x87a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x87b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x87c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x87d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x87e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x87f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x88a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x88b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x88c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x88d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x88e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x88f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x89a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x89b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x89c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x89d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x89e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x89f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8a00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8a10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8a20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8a30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8a40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8a50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8a60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8a70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8a80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8a90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8aa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8af0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8b00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8b10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8b20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8b30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8b40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8b50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8b60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8b70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8b80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8b90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8bb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8bc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8bd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8be0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8bf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8c00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8c10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8c20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8c30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8c40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8c50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8c60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8c70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8c80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8c90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8cb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8cc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8cd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8cf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8d00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8d10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8d20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8d30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8d40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8d50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8d60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8d70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8d80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8d90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8da0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8db0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8dc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8dd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8de0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8df0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8e00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8e10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8e20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8e30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8e40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8e50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8e60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8e70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8e80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8e90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8eb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8f00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8f10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8f20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8f30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8f40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8f50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8f60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8f70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8f80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8f90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8fa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8fb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8fc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8fd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8fe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x8ff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x90a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x90b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x90c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x90d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x90e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x90f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x91a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x91b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x91c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x91d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x91e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x91f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x92a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x92b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x92c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x92d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x92e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x92f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x93a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x93b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x93c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x93d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x93e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x93f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x94a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x94b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x94c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x94d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x94e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x94f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x95a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x95b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x95c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x95d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x95e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x95f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x96a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x96b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x96c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x96d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x96e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x96f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x97a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x97b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x97c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x97d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x97e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x97f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x98a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x98b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x98c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x98d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x98e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x98f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x99a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x99b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x99c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x99d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x99e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x99f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9a00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9a10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9a20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9a30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9a40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9a50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9a60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9a70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9a80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9a90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9aa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9af0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9b00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9b10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9b20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9b30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9b40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9b50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9b60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9b70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9b80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9b90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9bb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9bc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9bd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9be0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9bf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9c00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9c10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9c20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9c30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9c40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9c50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9c60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9c70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9c80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9c90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9cb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9cc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9cd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9cf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9d00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9d10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9d20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9d30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9d40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9d50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9d60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9d70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9d80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9d90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9da0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9db0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9dc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9dd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9de0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9df0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9e00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9e10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9e20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9e30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9e40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9e50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9e60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9e70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9e80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9e90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9eb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9f00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9f10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9f20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9f30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9f40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9f50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9f60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9f70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9f80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9f90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9fa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9fb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9fc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9fd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9fe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0x9ff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa0a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa0b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa0c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa0d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa0e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa0f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa1a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa1b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa1c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa1d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa1e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa1f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa2a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa2b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa2c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa2d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa2e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa2f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa3a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa3b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa3c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa3d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa3e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa3f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa4a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa4b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa4c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa4d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa4e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa4f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa5a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa5b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa5c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa5d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa5e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa5f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa6a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa6b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa6c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa6d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa6e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa6f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa7a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa7b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa7c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa7d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa7e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa7f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa8a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa8b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa8c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa8d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa8e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa8f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa9a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa9b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa9c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa9d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa9e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xa9f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaa00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaa10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaa20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaa30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaa40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaa50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaa60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaa70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaa80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaa90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaaa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaaf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xab00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xab10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xab20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xab30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xab40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xab50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xab60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xab70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xab80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xab90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xabb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xabc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xabd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xabe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xabf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xac00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xac10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xac20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xac30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xac40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xac50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xac60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xac70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xac80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xac90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xacb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xacc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xacd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xace0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xacf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xad00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xad10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xad20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xad30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xad40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xad50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xad60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xad70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xad80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xad90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xada0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xadb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xadc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xadd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xade0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xadf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xae00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xae10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xae20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xae30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xae40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xae50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xae60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xae70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xae80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xae90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaeb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaf00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaf10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaf20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaf30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaf40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaf50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaf60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaf70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaf80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaf90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xafa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xafb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xafc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xafd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xafe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xaff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb0a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb0b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb0c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb0d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb0e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb0f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb1a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb1b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb1c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb1d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb1e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb1f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb2a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb2b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb2c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb2d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb2e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb2f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb3a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb3b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb3c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb3d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb3e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb3f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb4a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb4b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb4c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb4d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb4e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb4f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb5a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb5b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb5c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb5d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb5e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb5f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb6a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb6b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb6c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb6d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb6e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb6f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb7a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb7b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb7c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb7d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb7e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb7f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb8a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb8b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb8c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb8d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb8e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb8f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb9a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb9b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb9c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb9d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb9e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xb9f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xba00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xba10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xba20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xba30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xba40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xba50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xba60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xba70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xba80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xba90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbaa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbaf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbb00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbb10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbb20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbb30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbb40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbb50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbb60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbb70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbb80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbb90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbbb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbbc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbbd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbbe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbbf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbc00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbc10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbc20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbc30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbc40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbc50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbc60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbc70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbc80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbc90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbcb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbcc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbcd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbcf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbd00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbd10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbd20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbd30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbd40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbd50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbd60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbd70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbd80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbd90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbda0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbdb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbdc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbdd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbde0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbdf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbe00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbe10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbe20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbe30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbe40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbe50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbe60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbe70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbe80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbe90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbeb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbf00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbf10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbf20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbf30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbf40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbf50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbf60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbf70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbf80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbf90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbfa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbfb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbfc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbfd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbfe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xbff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc0a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc0b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc0c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc0d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc0e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc0f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc1a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc1b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc1c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc1d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc1e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc1f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc2a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc2b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc2c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc2d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc2e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc2f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc3a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc3b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc3c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc3d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc3e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc3f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc4a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc4b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc4c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc4d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc4e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc4f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc5a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc5b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc5c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc5d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc5e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc5f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc6a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc6b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc6c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc6d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc6e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc6f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc7a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc7b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc7c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc7d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc7e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc7f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc8a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc8b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc8c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc8d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc8e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc8f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc9a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc9b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc9c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc9d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc9e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xc9f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xca00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xca10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xca20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xca30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xca40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xca50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xca60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xca70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xca80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xca90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcaa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcaf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcb00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcb10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcb20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcb30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcb40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcb50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcb60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcb70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcb80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcb90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcbb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcbc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcbd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcbe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcbf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcc00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcc10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcc20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcc30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcc40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcc50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcc60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcc70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcc80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcc90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xccb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xccc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xccd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xccf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcd00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcd10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcd20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcd30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcd40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcd50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcd60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcd70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcd80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcd90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcda0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcdb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcdc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcdd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcde0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcdf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xce00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xce10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xce20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xce30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xce40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xce50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xce60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xce70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xce80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xce90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xceb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xced0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcf00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcf10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcf20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcf30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcf40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcf50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcf60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcf70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcf80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcf90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcfa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcfb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcfc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcfd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcfe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xcff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd0a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd0b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd0c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd0d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd0e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd0f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd1a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd1b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd1c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd1d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd1e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd1f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd2a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd2b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd2c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd2d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd2e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd2f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd3a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd3b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd3c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd3d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd3e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd3f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd4a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd4b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd4c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd4d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd4e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd4f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd5a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd5b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd5c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd5d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd5e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd5f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd6a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd6b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd6c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd6d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd6e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd6f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd7a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd7b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd7c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd7d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd7e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd7f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd8a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd8b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd8c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd8d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd8e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd8f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd9a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd9b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd9c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd9d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd9e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xd9f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xda00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xda10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xda20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xda30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xda40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xda50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xda60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xda70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xda80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xda90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdaa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdaf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdb00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdb10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdb20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdb30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdb40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdb50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdb60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdb70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdb80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdb90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdbb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdbc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdbd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdbe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdbf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdc00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdc10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdc20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdc30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdc40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdc50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdc60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdc70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdc80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdc90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdcb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdcc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdcd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdcf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdd00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdd10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdd20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdd30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdd40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdd50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdd60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdd70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdd80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdd90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdda0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xddb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xddc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xddd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdde0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xddf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xde00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xde10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xde20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xde30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xde40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xde50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xde60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xde70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xde80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xde90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdeb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xded0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdf00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdf10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdf20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdf30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdf40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdf50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdf60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdf70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdf80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdf90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdfa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdfb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdfc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdfd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdfe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xdff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe0a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe0b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe0c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe0d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe0e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe0f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe1a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe1b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe1c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe1d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe1e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe1f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe2a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe2b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe2c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe2d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe2e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe2f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe3a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe3b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe3c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe3d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe3e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe3f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe4a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe4b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe4c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe4d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe4e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe4f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe5a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe5b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe5c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe5d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe5e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe5f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe6a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe6b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe6c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe6d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe6e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe6f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe7a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe7b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe7c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe7d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe7e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe7f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe8a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe8b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe8c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe8d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe8e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe8f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe9a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe9b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe9c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe9d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe9e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xe9f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xea00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xea10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xea20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xea30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xea40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xea50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xea60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xea70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xea80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xea90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeaa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xead0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeaf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeb00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeb10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeb20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeb30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeb40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeb50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeb60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeb70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeb80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeb90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xebb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xebc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xebd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xebe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xebf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xec00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xec10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xec20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xec30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xec40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xec50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xec60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xec70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xec80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xec90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xecb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xecc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xecd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xece0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xecf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xed00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xed10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xed20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xed30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xed40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xed50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xed60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xed70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xed80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xed90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeda0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xedb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xedc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xedd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xede0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xedf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xee00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xee10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xee20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xee30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xee40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xee50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xee60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xee70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xee80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xee90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeeb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xef00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xef10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xef20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xef30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xef40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xef50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xef60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xef70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xef80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xef90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xefa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xefb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xefc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xefd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xefe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xeff0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf000: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf010: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf020: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf030: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf040: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf050: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf060: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf070: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf080: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf090: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf0a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf0b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf0c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf0d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf0e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf0f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf100: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf110: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf120: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf130: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf140: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf150: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf160: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf170: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf180: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf190: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf1a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf1b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf1c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf1d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf1e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf1f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf200: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf210: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf220: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf230: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf240: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf250: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf260: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf270: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf280: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf290: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf2a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf2b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf2c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf2d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf2e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf2f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf300: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf310: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf320: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf330: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf340: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf350: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf360: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf370: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf380: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf390: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf3a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf3b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf3c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf3d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf3e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf3f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf400: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf410: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf420: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf430: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf440: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf450: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf460: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf470: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf480: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf490: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf4a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf4b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf4c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf4d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf4e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf4f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf500: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf510: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf520: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf530: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf540: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf550: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf560: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf570: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf580: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf590: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf5a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf5b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf5c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf5d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf5e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf5f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf600: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf610: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf620: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf630: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf640: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf650: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf660: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf670: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf680: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf690: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf6a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf6b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf6c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf6d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf6e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf6f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf700: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf710: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf720: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf730: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf740: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf750: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf760: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf770: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf780: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf790: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf7a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf7b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf7c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf7d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf7e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf7f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf800: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf810: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf820: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf830: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf840: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf850: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf860: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf870: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf880: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf890: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf8a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf8b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf8c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf8d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf8e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf8f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf900: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf910: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf920: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf930: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf940: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf950: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf960: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf970: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf980: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf990: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf9a0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf9b0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf9c0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf9d0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf9e0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xf9f0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfa00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfa10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfa20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfa30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfa40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfa50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfa60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfa70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfa80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfa90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfaa0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfab0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfac0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfad0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfae0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfaf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfb00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfb10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfb20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfb30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfb40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfb50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfb60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfb70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfb80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfb90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfba0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfbb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfbc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfbd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfbe0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfbf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfc00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfc10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfc20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfc30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfc40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfc50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfc60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfc70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfc80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfc90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfca0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfcb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfcc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfcd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfce0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfcf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfd00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfd10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfd20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfd30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfd40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfd50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfd60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfd70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfd80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfd90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfda0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfdb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfdc0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfdd0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfde0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfdf0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfe00: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfe10: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfe20: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfe30: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfe40: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfe50: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfe60: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfe70: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfe80: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfe90: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfea0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfeb0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfec0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfed0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfee0: 0004 0004 0004 0004 0004 0004 0004 0004
+ 0xfef0: 0004 0004 0004 0004 0004 0004 0004 0004
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8)
+ Software Version TLV (0x0004), length: 4 (too short, < 8) [|eigrp]
diff --git a/tests/eigrp-tlv-oobr.pcap b/tests/eigrp-tlv-oobr.pcap
new file mode 100644
index 0000000..938d244
--- /dev/null
+++ b/tests/eigrp-tlv-oobr.pcap
Binary files differ
diff --git a/tests/eigrp1-v.out b/tests/eigrp1-v.out
new file mode 100644
index 0000000..893b2da
--- /dev/null
+++ b/tests/eigrp1-v.out
@@ -0,0 +1,444 @@
+ 1 00:27:41.907937 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 2 00:27:46.596218 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 3 00:27:51.016481 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 4 00:27:55.372743 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 5 00:28:00.161048 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 6 00:28:04.825321 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 7 00:28:09.092016 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 8 00:28:13.485851 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 9 00:28:15.983324 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 10 00:28:15.998024 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 11 00:28:16.006026 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 12 00:28:16.006029 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.1 > 10.0.0.2:
+ EIGRP v2, opcode: Update (1), chksum: 0xfd82, Flags: [Init]
+ seq: 0x00000017, ack: 0x00000000, VRID: 0, AS: 100, length: 0
+ 13 00:28:18.008523 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.1 > 10.0.0.2:
+ EIGRP v2, opcode: Update (1), chksum: 0xfd82, Flags: [Init]
+ seq: 0x00000017, ack: 0x00000000, VRID: 0, AS: 100, length: 0
+ 14 00:28:18.016606 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.2 > 10.0.0.1:
+ EIGRP v2, opcode: Update (1), chksum: 0xfd6b, Flags: [Init]
+ seq: 0x00000017, ack: 0x00000017, VRID: 0, AS: 100, length: 0
+ 15 00:28:18.024546 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 239)
+ 10.0.0.1 > 10.0.0.2:
+ EIGRP v2, opcode: Update (1), chksum: 0x24b9, Flags: [End-of-Table]
+ seq: 0x00000018, ack: 0x00000017, VRID: 0, AS: 100, length: 199
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.1.0/24, nexthop: self
+ delay 25 ms, bandwidth 25600 Kbps, mtu 1500, hop 0, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 29
+ IPv4 prefix: 10.0.0.4/30, nexthop: self
+ delay 256 ms, bandwidth 256000 Kbps, mtu 1500, hop 0, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.3.0/24, nexthop: self
+ delay 281 ms, bandwidth 256000 Kbps, mtu 1500, hop 1, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 29
+ IPv4 prefix: 10.0.0.12/30, nexthop: self
+ delay 512 ms, bandwidth 256000 Kbps, mtu 1500, hop 1, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.4.0/24, nexthop: self
+ delay 537 ms, bandwidth 256000 Kbps, mtu 1500, hop 2, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 29
+ IPv4 prefix: 10.0.0.8/30, nexthop: self
+ delay 768 ms, bandwidth 256000 Kbps, mtu 1500, hop 2, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.2.0/24, nexthop: self
+ delay 793 ms, bandwidth 256000 Kbps, mtu 1500, hop 3, reliability 255, load 1
+ 16 00:28:18.072623 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 154)
+ 10.0.0.2 > 10.0.0.1:
+ EIGRP v2, opcode: Update (1), chksum: 0x7d9b, Flags: [End-of-Table]
+ seq: 0x00000018, ack: 0x00000018, VRID: 0, AS: 100, length: 114
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.2.0/24, nexthop: self
+ delay 25 ms, bandwidth 25600 Kbps, mtu 1500, hop 0, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 29
+ IPv4 prefix: 10.0.0.8/30, nexthop: self
+ delay 256 ms, bandwidth 256000 Kbps, mtu 1500, hop 0, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.4.0/24, nexthop: self
+ delay 281 ms, bandwidth 256000 Kbps, mtu 1500, hop 1, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 29
+ IPv4 prefix: 10.0.0.12/30, nexthop: self
+ delay 512 ms, bandwidth 256000 Kbps, mtu 1500, hop 1, reliability 255, load 1
+ 17 00:28:18.080553 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.1 > 10.0.0.2:
+ EIGRP v2, opcode: Hello (5), chksum: 0xfd7e, Flags: [none]
+ seq: 0x00000000, ack: 0x00000018, VRID: 0, AS: 100, length: 0
+ 18 00:28:18.080556 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 77)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xc352, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 37
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ Sequence TLV (0x0003), length: 9
+ 0x0000: 040a 0000 01
+ Next Multicast Sequence TLV (0x0005), length: 8
+ 0x0000: 0000 0019
+ 19 00:28:18.088800 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 125)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Update (1), chksum: 0xa2d8, Flags: [Conditionally Received]
+ seq: 0x00000019, ack: 0x00000000, VRID: 0, AS: 100, length: 85
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.1.0/24, nexthop: self
+ delay 42949672 ms, bandwidth 256000 Kbps, mtu 1500, hop 1, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 29
+ IPv4 prefix: 10.0.0.4/30, nexthop: self
+ delay 42949672 ms, bandwidth 256000 Kbps, mtu 1500, hop 1, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.3.0/24, nexthop: self
+ delay 42949672 ms, bandwidth 256000 Kbps, mtu 1500, hop 2, reliability 255, load 1
+ 20 00:28:18.096555 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 125)
+ 10.0.0.2 > 10.0.0.1:
+ EIGRP v2, opcode: Update (1), chksum: 0xa2c2, Flags: [none]
+ seq: 0x00000019, ack: 0x00000018, VRID: 0, AS: 100, length: 85
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.1.0/24, nexthop: self
+ delay 42949672 ms, bandwidth 256000 Kbps, mtu 1500, hop 1, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 29
+ IPv4 prefix: 10.0.0.4/30, nexthop: self
+ delay 42949672 ms, bandwidth 256000 Kbps, mtu 1500, hop 1, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.3.0/24, nexthop: self
+ delay 42949672 ms, bandwidth 256000 Kbps, mtu 1500, hop 2, reliability 255, load 1
+ 21 00:28:18.104539 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.1 > 10.0.0.2:
+ EIGRP v2, opcode: Hello (5), chksum: 0xfd7d, Flags: [none]
+ seq: 0x00000000, ack: 0x00000019, VRID: 0, AS: 100, length: 0
+ 22 00:28:18.112543 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 125)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Update (1), chksum: 0x9dd9, Flags: [none]
+ seq: 0x00000019, ack: 0x00000000, VRID: 0, AS: 100, length: 85
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.2.0/24, nexthop: self
+ delay 42949672 ms, bandwidth 256000 Kbps, mtu 1500, hop 1, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 29
+ IPv4 prefix: 10.0.0.8/30, nexthop: self
+ delay 42949672 ms, bandwidth 256000 Kbps, mtu 1500, hop 1, reliability 255, load 1
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.4.0/24, nexthop: self
+ delay 42949672 ms, bandwidth 256000 Kbps, mtu 1500, hop 2, reliability 255, load 1
+ 23 00:28:18.120746 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.2 > 10.0.0.1:
+ EIGRP v2, opcode: Hello (5), chksum: 0xfd7d, Flags: [none]
+ seq: 0x00000000, ack: 0x00000019, VRID: 0, AS: 100, length: 0
+ 24 00:28:20.558302 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 25 00:28:21.006411 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 26 00:28:25.305039 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 27 00:28:25.881007 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 28 00:28:30.197268 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 29 00:28:30.245288 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 30 00:28:35.017593 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 31 00:28:35.063475 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 32 00:28:39.391576 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 33 00:28:39.479560 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 34 00:28:43.730081 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 35 00:28:44.416033 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 36 00:28:48.424144 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 37 00:28:48.792148 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 38 00:28:52.696389 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 39 00:28:53.264442 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 40 00:28:57.392695 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 41 00:28:58.136687 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 42 00:29:02.019177 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 43 00:29:02.507178 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 44 00:29:06.427427 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 45 00:29:07.267445 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 46 00:29:11.399725 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 47 00:29:11.983746 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 48 00:29:15.957786 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 49 00:29:16.310001 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 50 00:29:20.512268 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 51 00:29:20.840270 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 52 00:29:24.752507 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 53 00:29:25.624537 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
diff --git a/tests/eigrp2-v.out b/tests/eigrp2-v.out
new file mode 100644
index 0000000..0335656
--- /dev/null
+++ b/tests/eigrp2-v.out
@@ -0,0 +1,120 @@
+ 1 01:04:16.103886 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 2 01:04:17.134010 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 3 01:04:20.518585 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 4 01:04:21.962280 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 5 01:04:25.242510 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 6 01:04:26.370559 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 7 01:04:30.194834 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 8 01:04:30.994865 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 9 01:04:32.803002 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xf167, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 255, k2 255, k3 255, k4 255, k5 255
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 10 01:04:35.319118 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 11 01:04:40.177355 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 12 01:04:44.865678 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 13 01:04:49.801931 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 14 01:04:54.236229 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 15 01:04:58.956522 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
diff --git a/tests/eigrp3-v.out b/tests/eigrp3-v.out
new file mode 100644
index 0000000..726208c
--- /dev/null
+++ b/tests/eigrp3-v.out
@@ -0,0 +1,143 @@
+ 1 00:48:32.630923 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 2 00:48:36.963186 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 3 00:48:37.431201 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 4 00:48:41.271439 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 5 00:48:42.243480 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 6 00:48:46.179719 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 7 00:48:46.875749 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 8 00:48:48.687842 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 68)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Update (1), chksum: 0x7876, Flags: [none]
+ seq: 0x00000034, ack: 0x00000000, VRID: 0, AS: 100, length: 28
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.4.0/24, nexthop: self
+ delay 42949672 ms, bandwidth 256000 Kbps, mtu 1500, hop 2, reliability 255, load 1
+ 9 00:48:48.699874 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.2 > 10.0.0.1:
+ EIGRP v2, opcode: Hello (5), chksum: 0xfd62, Flags: [none]
+ seq: 0x00000000, ack: 0x00000034, VRID: 0, AS: 100, length: 0
+ 10 00:48:48.711870 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 68)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Query (3), chksum: 0x5f7e, Flags: [none]
+ seq: 0x0000002e, ack: 0x00000000, VRID: 0, AS: 100, length: 28
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.4.0/24, nexthop: self
+ delay 42949672 ms, bandwidth 0 Kbps, mtu 1500, hop 0, reliability 0, load 0
+ 11 00:48:48.723843 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.1 > 10.0.0.2:
+ EIGRP v2, opcode: Hello (5), chksum: 0xfd68, Flags: [none]
+ seq: 0x00000000, ack: 0x0000002e, VRID: 0, AS: 100, length: 0
+ 12 00:48:48.735845 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 68)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Query (3), chksum: 0x5f75, Flags: [none]
+ seq: 0x00000037, ack: 0x00000000, VRID: 0, AS: 100, length: 28
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.4.0/24, nexthop: self
+ delay 42949672 ms, bandwidth 0 Kbps, mtu 1500, hop 0, reliability 0, load 0
+ 13 00:48:48.747867 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.2 > 10.0.0.1:
+ EIGRP v2, opcode: Hello (5), chksum: 0xfd5f, Flags: [none]
+ seq: 0x00000000, ack: 0x00000037, VRID: 0, AS: 100, length: 0
+ 14 00:48:48.795866 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 68)
+ 10.0.0.2 > 10.0.0.1:
+ EIGRP v2, opcode: Reply (4), chksum: 0x5f44, Flags: [none]
+ seq: 0x00000030, ack: 0x00000037, VRID: 0, AS: 100, length: 28
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.4.0/24, nexthop: self
+ delay 42949672 ms, bandwidth 0 Kbps, mtu 1500, hop 0, reliability 0, load 0
+ 15 00:48:48.807846 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.1 > 10.0.0.2:
+ EIGRP v2, opcode: Hello (5), chksum: 0xfd66, Flags: [none]
+ seq: 0x00000000, ack: 0x00000030, VRID: 0, AS: 100, length: 0
+ 16 00:48:49.119868 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 68)
+ 10.0.0.1 > 10.0.0.2:
+ EIGRP v2, opcode: Reply (4), chksum: 0x5f46, Flags: [none]
+ seq: 0x00000039, ack: 0x00000030, VRID: 0, AS: 100, length: 28
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.4.0/24, nexthop: self
+ delay 42949672 ms, bandwidth 0 Kbps, mtu 1500, hop 0, reliability 0, load 0
+ 17 00:48:49.131907 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.2 > 10.0.0.1:
+ EIGRP v2, opcode: Hello (5), chksum: 0xfd5d, Flags: [none]
+ seq: 0x00000000, ack: 0x00000039, VRID: 0, AS: 100, length: 0
+ 18 00:48:50.547977 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 19 00:48:51.268008 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 20 00:48:55.308281 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 21 00:48:56.076302 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
diff --git a/tests/eigrp4-v.out b/tests/eigrp4-v.out
new file mode 100644
index 0000000..7ba6092
--- /dev/null
+++ b/tests/eigrp4-v.out
@@ -0,0 +1,105 @@
+ 1 00:41:22.355240 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 2 00:41:24.453490 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 3 00:41:26.929634 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 4 00:41:28.705759 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 68)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Update (1), chksum: 0x0a7e, Flags: [none]
+ seq: 0x0000002d, ack: 0x00000000, VRID: 0, AS: 100, length: 28
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.4.0/24, nexthop: self
+ delay 281 ms, bandwidth 256000 Kbps, mtu 1500, hop 1, reliability 255, load 1
+ 5 00:41:28.705766 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 68)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Update (1), chksum: 0xa67a, Flags: [none]
+ seq: 0x0000002f, ack: 0x00000000, VRID: 0, AS: 100, length: 28
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.4.0/24, nexthop: self
+ delay 537 ms, bandwidth 256000 Kbps, mtu 1500, hop 2, reliability 255, load 1
+ 6 00:41:28.713764 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.1 > 10.0.0.2:
+ EIGRP v2, opcode: Hello (5), chksum: 0xfd69, Flags: [none]
+ seq: 0x00000000, ack: 0x0000002d, VRID: 0, AS: 100, length: 0
+ 7 00:41:28.713767 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.2 > 10.0.0.1:
+ EIGRP v2, opcode: Hello (5), chksum: 0xfd67, Flags: [none]
+ seq: 0x00000000, ack: 0x0000002f, VRID: 0, AS: 100, length: 0
+ 8 00:41:28.721729 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 9 00:41:28.769731 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 68)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Update (1), chksum: 0x7878, Flags: [none]
+ seq: 0x00000032, ack: 0x00000000, VRID: 0, AS: 100, length: 28
+ IP Internal routes TLV (0x0102), length: 28
+ IPv4 prefix: 192.168.4.0/24, nexthop: self
+ delay 42949672 ms, bandwidth 256000 Kbps, mtu 1500, hop 2, reliability 255, load 1
+ 10 00:41:28.809749 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 40)
+ 10.0.0.2 > 10.0.0.1:
+ EIGRP v2, opcode: Hello (5), chksum: 0xfd64, Flags: [none]
+ seq: 0x00000000, ack: 0x00000032, VRID: 0, AS: 100, length: 0
+ 11 00:41:31.739695 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 12 00:41:33.453986 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 13 00:41:36.315953 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 14 00:41:37.822249 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.1 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
+ 15 00:41:40.830453 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto EIGRP (88), length 60)
+ 10.0.0.2 > 224.0.0.10:
+ EIGRP v2, opcode: Hello (5), chksum: 0xee68, Flags: [none]
+ seq: 0x00000000, ack: 0x00000000, VRID: 0, AS: 100, length: 20
+ General Parameters TLV (0x0001), length: 12
+ holdtime: 15s, k1 1, k2 0, k3 1, k4 0, k5 0
+ Software Version TLV (0x0004), length: 8
+ IOS version: 12.4, EIGRP version 1.2
diff --git a/tests/eigrp5.out b/tests/eigrp5.out
new file mode 100644
index 0000000..280cb4c
--- /dev/null
+++ b/tests/eigrp5.out
@@ -0,0 +1 @@
+ 1 18:11:00.329296 IP6 fe80::ff:fe00:301 > ff02::a: EIGRP Hello, length: 40
diff --git a/tests/empty.out b/tests/empty.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/empty.out
diff --git a/tests/empty.pcap b/tests/empty.pcap
new file mode 100644
index 0000000..4f9600e
--- /dev/null
+++ b/tests/empty.pcap
Binary files differ
diff --git a/tests/empty.pcapng b/tests/empty.pcapng
new file mode 100644
index 0000000..9573826
--- /dev/null
+++ b/tests/empty.pcapng
Binary files differ
diff --git a/tests/epgm_zmtp1.pcap b/tests/epgm_zmtp1.pcap
new file mode 100644
index 0000000..1883579
--- /dev/null
+++ b/tests/epgm_zmtp1.pcap
Binary files differ
diff --git a/tests/epgm_zmtp1v.out b/tests/epgm_zmtp1v.out
new file mode 100644
index 0000000..b9237d2
--- /dev/null
+++ b/tests/epgm_zmtp1v.out
@@ -0,0 +1,73 @@
+ 1 17:10:26.555618 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 471 trail 0 lead 281 nla 10.0.0.45 [36]
+ 2 17:10:26.619914 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 472 trail 0 lead 281 nla 10.0.0.45 [36]
+ 3 17:10:26.697277 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 473 trail 0 lead 281 nla 10.0.0.45 [36]
+ 4 17:10:26.769692 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 474 trail 0 lead 281 nla 10.0.0.45 [36]
+ 5 17:10:26.844048 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 475 trail 0 lead 281 nla 10.0.0.45 [36]
+ 6 17:10:27.456516 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 1480)
+ 10.0.0.45.40251 > 239.255.0.16.5563: 39236 > 5563: PGM, length 1428 0x47e3fdad9a9c ODATA trail 0 seq 282 [1452]
+ frame offset 0x0000
+ frame flags+body (8-bit) length 116, flags 0x00 (-|-|-|-|-|-|-|-), first 115 byte(s) of body:
+ 0x0000: 5468 6973 2069 7320 6120 7368 6f72 7420 This.is.a.short.
+ 0x0010: 4153 4349 4920 6d65 7373 6167 6520 666f ASCII.message.fo
+ 0x0020: 6c6c 6f77 6564 2062 7920 6120 7368 6f72 llowed.by.a.shor
+ 0x0030: 7420 6269 6e61 7279 206d 6573 7361 6765 t.binary.message
+ 0x0040: 2c20 6120 6c6f 6e67 6572 2041 5343 4949 ,.a.longer.ASCII
+ 0x0050: 206d 6573 7361 6765 2061 6e64 2061 2073 .message.and.a.s
+ 0x0060: 686f 7274 2041 5343 4949 206d 6573 7361 hort.ASCII.messa
+ 0x0070: 6765 2e ge.
+ frame flags+body (8-bit) length 17, flags 0x00 (-|-|-|-|-|-|-|-), first 16 byte(s) of body:
+ 0x0000: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ................
+ frame flags+body (64-bit) length 2790 (1282 captured), flags 0x00 (-|-|-|-|-|-|-|-), first 128 byte(s) of body:
+ 0x0000: 5468 6520 7175 6963 6b20 6272 6f77 6e20 The.quick.brown.
+ 0x0010: 666f 7820 6a75 6d70 7320 6f76 6572 2074 fox.jumps.over.t
+ 0x0020: 6865 206c 617a 7920 646f 672e 2054 6865 he.lazy.dog..The
+ 0x0030: 2071 7569 636b 2062 726f 776e 2066 6f78 .quick.brown.fox
+ 0x0040: 206a 756d 7073 206f 7665 7220 7468 6520 .jumps.over.the.
+ 0x0050: 6c61 7a79 2064 6f67 2e20 5468 6520 7175 lazy.dog..The.qu
+ 0x0060: 6963 6b20 6272 6f77 6e20 666f 7820 6a75 ick.brown.fox.ju
+ 0x0070: 6d70 7320 6f76 6572 2074 6865 206c 617a mps.over.the.laz [|zmtp1]
+ 7 17:10:27.456622 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 1480)
+ 10.0.0.45.40251 > 239.255.0.16.5563: 39236 > 5563: PGM, length 1428 0x47e3fdad9a9c ODATA trail 0 seq 283 [1452]
+ frame offset 0xffff
+ frame intermediate part, 1426 bytes, first 128 byte(s):
+ 0x0000: 756d 7073 206f 7665 7220 7468 6520 6c61 umps.over.the.la
+ 0x0010: 7a79 2064 6f67 2e20 5468 6520 7175 6963 zy.dog..The.quic
+ 0x0020: 6b20 6272 6f77 6e20 666f 7820 6a75 6d70 k.brown.fox.jump
+ 0x0030: 7320 6f76 6572 2074 6865 206c 617a 7920 s.over.the.lazy.
+ 0x0040: 646f 672e 2054 6865 2071 7569 636b 2062 dog..The.quick.b
+ 0x0050: 726f 776e 2066 6f78 206a 756d 7073 206f rown.fox.jumps.o
+ 0x0060: 7665 7220 7468 6520 6c61 7a79 2064 6f67 ver.the.lazy.dog
+ 0x0070: 2e20 5468 6520 7175 6963 6b20 6272 6f77 ..The.quick.brow
+ 8 17:10:27.456706 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 173)
+ 10.0.0.45.40251 > 239.255.0.16.5563: 39236 > 5563: PGM, length 121 0x47e3fdad9a9c ODATA trail 0 seq 284 [145]
+ frame offset 0x0052
+ frame intermediate part, 82 bytes, first 82 byte(s):
+ 0x0000: 636b 2062 726f 776e 2066 6f78 206a 756d ck.brown.fox.jum
+ 0x0010: 7073 206f 7665 7220 7468 6520 6c61 7a79 ps.over.the.lazy
+ 0x0020: 2064 6f67 2e20 5468 6520 7175 6963 6b20 .dog..The.quick.
+ 0x0030: 6272 6f77 6e20 666f 7820 6a75 6d70 7320 brown.fox.jumps.
+ 0x0040: 6f76 6572 2074 6865 206c 617a 7920 646f over.the.lazy.do
+ 0x0050: 672e g.
+ frame flags+body (8-bit) length 36, flags 0x00 (-|-|-|-|-|-|-|-), first 35 byte(s) of body:
+ 0x0000: 5468 6973 2069 7320 7468 6520 7472 6169 This.is.the.trai
+ 0x0010: 6c69 6e67 2041 5343 4949 206d 6573 7361 ling.ASCII.messa
+ 0x0020: 6765 2e ge.
+ 9 17:10:27.555956 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 476 trail 0 lead 284 nla 10.0.0.45 [36]
+ 10 17:10:27.556043 IP (tos 0xb8, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 44)
+ 10.0.0.45.46357 > 239.255.0.16.5563: 5563 > 39236: PGM, length 0 0x47e3fdad9a9c SPMR [16]
+ 11 17:10:27.556078 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 477 trail 0 lead 284 nla 10.0.0.45 [36]
+ 12 17:10:27.620365 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 478 trail 0 lead 284 nla 10.0.0.45 [36]
+ 13 17:10:27.697686 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 479 trail 0 lead 284 nla 10.0.0.45 [36]
+ 14 17:10:27.770003 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 480 trail 0 lead 284 nla 10.0.0.45 [36]
+ 15 17:10:27.844346 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 481 trail 0 lead 284 nla 10.0.0.45 [36]
diff --git a/tests/epgmv.out b/tests/epgmv.out
new file mode 100644
index 0000000..53bf936
--- /dev/null
+++ b/tests/epgmv.out
@@ -0,0 +1,30 @@
+ 1 17:10:26.555618 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 471 trail 0 lead 281 nla 10.0.0.45 [36]
+ 2 17:10:26.619914 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 472 trail 0 lead 281 nla 10.0.0.45 [36]
+ 3 17:10:26.697277 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 473 trail 0 lead 281 nla 10.0.0.45 [36]
+ 4 17:10:26.769692 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 474 trail 0 lead 281 nla 10.0.0.45 [36]
+ 5 17:10:26.844048 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 475 trail 0 lead 281 nla 10.0.0.45 [36]
+ 6 17:10:27.456516 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 1480)
+ 10.0.0.45.40251 > 239.255.0.16.5563: 39236 > 5563: PGM, length 1428 0x47e3fdad9a9c ODATA trail 0 seq 282 [1452]
+ 7 17:10:27.456622 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 1480)
+ 10.0.0.45.40251 > 239.255.0.16.5563: 39236 > 5563: PGM, length 1428 0x47e3fdad9a9c ODATA trail 0 seq 283 [1452]
+ 8 17:10:27.456706 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 173)
+ 10.0.0.45.40251 > 239.255.0.16.5563: 39236 > 5563: PGM, length 121 0x47e3fdad9a9c ODATA trail 0 seq 284 [145]
+ 9 17:10:27.555956 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 476 trail 0 lead 284 nla 10.0.0.45 [36]
+ 10 17:10:27.556043 IP (tos 0xb8, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 44)
+ 10.0.0.45.46357 > 239.255.0.16.5563: 5563 > 39236: PGM, length 0 0x47e3fdad9a9c SPMR [16]
+ 11 17:10:27.556078 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 477 trail 0 lead 284 nla 10.0.0.45 [36]
+ 12 17:10:27.620365 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 478 trail 0 lead 284 nla 10.0.0.45 [36]
+ 13 17:10:27.697686 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 479 trail 0 lead 284 nla 10.0.0.45 [36]
+ 14 17:10:27.770003 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 480 trail 0 lead 284 nla 10.0.0.45 [36]
+ 15 17:10:27.844346 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto UDP (17), length 64)
+ 10.0.0.45.33280 > 239.255.0.16.5563: 39236 > 5563: PGM, length 0 0x47e3fdad9a9c SPM seq 481 trail 0 lead 284 nla 10.0.0.45 [36]
diff --git a/tests/esis_opt_prot-oobr.out b/tests/esis_opt_prot-oobr.out
new file mode 100644
index 0000000..e664e1a
--- /dev/null
+++ b/tests/esis_opt_prot-oobr.out
@@ -0,0 +1,5 @@
+ 1 04:06:24.1842916 ES-IS, length 262139
+ redirect (6), v: 1, checksum: 0x00c6 (unverified), holding time: 2303s, length indicator: 54
+ 00.8e
+ SNPA (length: 0): <empty>
+ Protocols supported Option #129, length 11, value: CLNP (0x81), [|esis]
diff --git a/tests/esis_opt_prot-oobr.pcap b/tests/esis_opt_prot-oobr.pcap
new file mode 100644
index 0000000..a4de137
--- /dev/null
+++ b/tests/esis_opt_prot-oobr.pcap
Binary files differ
diff --git a/tests/esis_snpa_asan-2.out b/tests/esis_snpa_asan-2.out
new file mode 100644
index 0000000..20e4f77
--- /dev/null
+++ b/tests/esis_snpa_asan-2.out
@@ -0,0 +1,4 @@
+ 1 12:03:12.1048576 UI 22! ES-IS, length 65565
+ redirect (6), v: 1, checksum: 0x70a1 (incorrect should be 0xf519), holding time: 22339s, length indicator: 17
+ 00.22
+ SNPA (length: 0): <empty>, opt (0) too long
diff --git a/tests/esis_snpa_asan-2.pcap b/tests/esis_snpa_asan-2.pcap
new file mode 100644
index 0000000..5c59fa7
--- /dev/null
+++ b/tests/esis_snpa_asan-2.pcap
Binary files differ
diff --git a/tests/esis_snpa_asan-3.out b/tests/esis_snpa_asan-3.out
new file mode 100644
index 0000000..6803bef
--- /dev/null
+++ b/tests/esis_snpa_asan-3.out
@@ -0,0 +1,7 @@
+ 1 07:53:36.1048576 UI 22! ES-IS, length 65565
+ unknown type: 0 (0), v: 1, checksum: 0x00a1 (incorrect should be 0x859d), holding time: 0s, length indicator: 17
+ 0x0000: 0200 04ec ff00 0000
+ 2 12:03:12.1048576 UI 22! ES-IS, length 262139
+ redirect (6), v: 1, checksum: 0x0300 (incorrect should be 0xbce5), holding time: 21480s, length indicator: 17
+ ec.ff00.00
+ SNPA (length: 0): <empty> [|esis]
diff --git a/tests/esis_snpa_asan-3.pcap b/tests/esis_snpa_asan-3.pcap
new file mode 100644
index 0000000..bc07ec6
--- /dev/null
+++ b/tests/esis_snpa_asan-3.pcap
Binary files differ
diff --git a/tests/esis_snpa_asan-4.out b/tests/esis_snpa_asan-4.out
new file mode 100644
index 0000000..c910bbf
--- /dev/null
+++ b/tests/esis_snpa_asan-4.out
@@ -0,0 +1,21 @@
+ 1 12:03:12.1048576 UI 22! ES-IS, length 65565
+ ESH (2), v: 1, checksum: 0x70a1 (incorrect should be 0xfb4e), holding time: 21315s, length indicator: 17
+ Number of Source Addresses: 2
+ NET (length: 0): isonsap_string: illegal length
+ NET (length: 4): ec.ff00.00, bad opts/li
+ 2 12:03:12.1048576 UI 22! ES-IS, length 65565
+ redirect (6), v: 1, checksum: 0x7034 (incorrect should be 0x44ec), holding time: 21315s, length indicator: 16
+ 02.0400
+ SNPA (length: 0): <empty>
+ Unknown Option #0, length 0, value:
+ 3 12:03:12.7077888 UI 32! ES-IS, length 65565
+ ESH (2), v: 1, checksum: 0x70a1 (incorrect should be 0xfb4e), holding time: 21315s, length indicator: 17
+ Number of Source Addresses: 2
+ NET (length: 0): isonsap_string: illegal length
+ NET (length: 4): ec.ff00.00, bad opts/li
+ 4 12:03:12.1049088 UI 22! ES-IS, length 262139
+ redirect (6), v: 1, checksum: 0x7034 (incorrect should be 0x36fe), holding time: 21315s, length indicator: 17
+ isonsap_string: illegal length
+ SNPA (length: 0): <empty>
+ NET (length: 4) 00.0000.00 [|esis]
+ 5 14:06:56.7077888 Q.922, invalid address
diff --git a/tests/esis_snpa_asan-4.pcap b/tests/esis_snpa_asan-4.pcap
new file mode 100644
index 0000000..9160c05
--- /dev/null
+++ b/tests/esis_snpa_asan-4.pcap
Binary files differ
diff --git a/tests/esis_snpa_asan-5.out b/tests/esis_snpa_asan-5.out
new file mode 100644
index 0000000..1374330
--- /dev/null
+++ b/tests/esis_snpa_asan-5.out
@@ -0,0 +1,10 @@
+ 1 12:03:12.1048576 UI 22! ES-IS, length 65565
+ ESH (2), v: 1, checksum: 0x70a1 (incorrect should be 0xfc4c), holding time: 21315s, length indicator: 17
+ Number of Source Addresses: 3
+ NET (length: 0): isonsap_string: illegal length
+ NET (length: 4): ec.ff00.00
+ NET (length: 0): isonsap_string: illegal length
+ 2 12:03:12.1048576 UI 22! ES-IS, length 65565
+ redirect (6), v: 1, checksum: 0x7034 (incorrect should be 0x3ff0), holding time: 21315s, length indicator: 17
+ 04
+ SNPA (length: 4): 00:00:00:00, bad opts/li
diff --git a/tests/esis_snpa_asan-5.pcap b/tests/esis_snpa_asan-5.pcap
new file mode 100644
index 0000000..98e34f1
--- /dev/null
+++ b/tests/esis_snpa_asan-5.pcap
Binary files differ
diff --git a/tests/esis_snpa_asan.out b/tests/esis_snpa_asan.out
new file mode 100644
index 0000000..a7d302f
--- /dev/null
+++ b/tests/esis_snpa_asan.out
@@ -0,0 +1,12 @@
+ 1 12:03:12.1048576 UI 22! ES-IS, length 65565
+ ESH (2), v: 1, checksum: 0x70a1 (incorrect should be 0xfb4e), holding time: 21315s, length indicator: 17
+ Number of Source Addresses: 2
+ NET (length: 0): isonsap_string: illegal length
+ NET (length: 4): ec.ff00.00, bad opts/li
+ 2 12:03:12.1048576 UI 22! ES-IS, length 65565
+ redirect (6), v: 1, checksum: 0xffff (incorrect should be 0x6b16), holding time: 21253s, length indicator: 17
+ 00.04ec.0000
+ SNPA (length: 0): <empty>, bad opts/li
+ 3 12:03:12.1048576 Q.922, hdr-len 2, DLCI 0, Flags [DE, FECN], NLPID unknown (0x22), length 72482:
+ 0x0000: 0082 1000 5542 5343 70a1 0200 0400 0000 ....UBSCp.......
+ 0x0010: 007e .~ [|fr]
diff --git a/tests/esis_snpa_asan.pcap b/tests/esis_snpa_asan.pcap
new file mode 100644
index 0000000..b573467
--- /dev/null
+++ b/tests/esis_snpa_asan.pcap
Binary files differ
diff --git a/tests/esp-secrets.txt b/tests/esp-secrets.txt
new file mode 100644
index 0000000..81847a0
--- /dev/null
+++ b/tests/esp-secrets.txt
@@ -0,0 +1,5 @@
+# a comment
+
+0x12345678@192.1.2.45 3des-cbc-hmac96:0x43434545464649494a4a4c4c4f4f51515252545457575840
+0xabcdabcd@192.0.1.1 3des-cbc-hmac96:0x434545464649494a4a4c4c4f4f5151525254545757584043
+0xd1234567@192.1.2.45 aes256-cbc-hmac96:0xaaaabbbbccccdddd4043434545464649494a4a4c4c4f4f515152525454575758
diff --git a/tests/esp0.out b/tests/esp0.out
new file mode 100644
index 0000000..c781dfa
--- /dev/null
+++ b/tests/esp0.out
@@ -0,0 +1,8 @@
+ 1 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x1), length 116
+ 2 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x2), length 116
+ 3 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x3), length 116
+ 4 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x4), length 116
+ 5 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x5), length 116
+ 6 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x6), length 116
+ 7 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x7), length 116
+ 8 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x8), length 116
diff --git a/tests/esp1.gdbinit b/tests/esp1.gdbinit
new file mode 100644
index 0000000..6c8ae89
--- /dev/null
+++ b/tests/esp1.gdbinit
@@ -0,0 +1 @@
+set args -t -n -E "0x12345678@192.1.2.45 3des-cbc-hmac96:0x4043434545464649494a4a4c4c4f4f515152525454575758" -r 02-sunrise-sunset-esp.pcap
diff --git a/tests/esp1.out b/tests/esp1.out
new file mode 100644
index 0000000..d22c25f
--- /dev/null
+++ b/tests/esp1.out
@@ -0,0 +1,8 @@
+ 1 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x1), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1280, length 64
+ 2 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x2), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1536, length 64
+ 3 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x3), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1792, length 64
+ 4 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x4), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2048, length 64
+ 5 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x5), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2304, length 64
+ 6 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x6), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2560, length 64
+ 7 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x7), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2816, length 64
+ 8 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x8), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 3072, length 64
diff --git a/tests/esp2.gdbinit b/tests/esp2.gdbinit
new file mode 100644
index 0000000..7c18407
--- /dev/null
+++ b/tests/esp2.gdbinit
@@ -0,0 +1 @@
+set args -t -n -E "0x12345678@192.1.2.45 3des-cbc-hmac96:0x43434545464649494a4a4c4c4f4f51515252545457575840,0xabcdabcd@192.0.1.1 3des-cbc-hmac96:0x434545464649494a4a4c4c4f4f5151525254545757584043" -r 08-sunrise-sunset-esp2.pcap
diff --git a/tests/esp2.out b/tests/esp2.out
new file mode 100644
index 0000000..c0a0718
--- /dev/null
+++ b/tests/esp2.out
@@ -0,0 +1,8 @@
+ 1 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x1), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x1), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1280, length 64
+ 2 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x2), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x2), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1536, length 64
+ 3 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x3), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x3), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1792, length 64
+ 4 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x4), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x4), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2048, length 64
+ 5 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x5), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x5), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2304, length 64
+ 6 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x6), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x6), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2560, length 64
+ 7 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x7), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x7), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2816, length 64
+ 8 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x12345678,seq=0x8), length 172: IP 192.1.2.23 > 192.0.1.1: ESP(spi=0xabcdabcd,seq=0x8), length 116: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 3072, length 64
diff --git a/tests/esp3.gdbinit b/tests/esp3.gdbinit
new file mode 100644
index 0000000..7150118
--- /dev/null
+++ b/tests/esp3.gdbinit
@@ -0,0 +1 @@
+set args -t -n -E "3des-cbc-hmac96:0x43434545464649494a4a4c4c4f4f51515252545457575840" -r 08-sunrise-sunset-esp2.pcap
diff --git a/tests/esp4.gdbinit b/tests/esp4.gdbinit
new file mode 100644
index 0000000..8007444
--- /dev/null
+++ b/tests/esp4.gdbinit
@@ -0,0 +1,2 @@
+set args -t -n -E "file esp-secrets.txt" -r 08-sunrise-sunset-esp2.pcap
+
diff --git a/tests/esp5.gdbinit b/tests/esp5.gdbinit
new file mode 100644
index 0000000..2f578e3
--- /dev/null
+++ b/tests/esp5.gdbinit
@@ -0,0 +1,3 @@
+set args -t -n -E "file esp-secrets.txt" -r 08-sunrise-sunset-aes.pcap
+
+
diff --git a/tests/esp5.out b/tests/esp5.out
new file mode 100644
index 0000000..300589f
--- /dev/null
+++ b/tests/esp5.out
@@ -0,0 +1,8 @@
+ 1 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x1), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1280, length 64
+ 2 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x2), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1536, length 64
+ 3 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x3), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 1792, length 64
+ 4 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x4), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2048, length 64
+ 5 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x5), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2304, length 64
+ 6 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x6), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2560, length 64
+ 7 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x7), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 2816, length 64
+ 8 00:00:00.000000 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0xd1234567,seq=0x8), length 132: IP 192.0.2.1 > 192.0.1.1: ICMP echo request, id 28416, seq 3072, length 64
diff --git a/tests/espudp1.out b/tests/espudp1.out
new file mode 100644
index 0000000..b585cc8
--- /dev/null
+++ b/tests/espudp1.out
@@ -0,0 +1,8 @@
+ 1 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x1), length 116 [|esp]
+ 2 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x2), length 116: ip-proto-227 37
+ 3 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x3), length 116 [|esp]
+ 4 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x4), length 116 [|esp]
+ 5 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x5), length 116 [|esp]
+ 6 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x6), length 116: ip-proto-183 16
+ 7 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x7), length 116: ip-proto-72 22
+ 8 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.45.4500: UDP-encap: ESP(spi=0x12345678,seq=0x8), length 116: ip-proto-224 47
diff --git a/tests/espudp1.pcap b/tests/espudp1.pcap
new file mode 100644
index 0000000..3387f9b
--- /dev/null
+++ b/tests/espudp1.pcap
Binary files differ
diff --git a/tests/evb.out b/tests/evb.out
new file mode 100644
index 0000000..25726d4
--- /dev/null
+++ b/tests/evb.out
@@ -0,0 +1,146 @@
+ 1 12:01:13.213268 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 2 12:01:15.217887 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 3 12:01:17.219431 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 4 12:01:18.990089 LLDP, length 103
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 03
+ Organization specific TLV (127), length 9: OUI Ethernet bridged (0x0080c2)
+ EVB Subtype (13)
+ EVB Bridge Status
+ RES: 0, BGID: 0, RRCAP: 1, RRCTR: 0
+ EVB Station Status
+ RES: 0, SGID: 0, RRREQ: 0,RRSTAT: 0
+ R: 7, RTE: 20, EVB Mode: EVB Bridge [1]
+ ROL: 0, RWD: 31, RES: 0, ROL: 0, RKA: 31
+ 0x0000: 0080 c20d 0200 f45f 1f
+ Organization specific TLV (127), length 11: OUI Ethernet bridged (0x0080c2)
+ CDCP Subtype (14)
+ Role: 0, RES: 0, Scomp: 0 ChnCap: 167
+ SCID: 1, SVID: 1
+ 0x0000: 0080 c20e 0000 00a7 0010 01
+ End TLV (0), length 0
+ 5 12:01:19.223125 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 6 12:01:21.227595 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 7 12:01:23.231290 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 8 12:01:25.236051 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 9 12:01:27.238244 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 10 12:01:29.241008 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 11 12:01:31.244494 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 12 12:01:33.248395 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 13 12:01:35.252201 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 14 12:01:37.254802 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 15 12:01:39.258570 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
+ 16 12:01:41.260454 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 102
+ port-role Designated, CIST root-id 8000.08:00:27:0d:f1:3c, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:00:27:0d:f1:3c, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name Default, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:00:27:0d:f1:3c, CIST remaining-hops 20
diff --git a/tests/evb.pcap b/tests/evb.pcap
new file mode 100644
index 0000000..1aea021
--- /dev/null
+++ b/tests/evb.pcap
Binary files differ
diff --git a/tests/extract_read2_asan.out b/tests/extract_read2_asan.out
new file mode 100644
index 0000000..cd98c31
--- /dev/null
+++ b/tests/extract_read2_asan.out
@@ -0,0 +1,3 @@
+ 1 01:08:29.1674433 IP (tos 0x14, id 1, offset 0, flags [none], proto ICMP (1), length 512, options (unknown 3,unknown 3,unknown 3 [bad length 3]), bad cksum 3ff (->b4bd)!)
+ 240.25.0.0 > 3.3.3.3: ICMP source quench, length 484
+ [|icmp]
diff --git a/tests/extract_read2_asan.pcap b/tests/extract_read2_asan.pcap
new file mode 100644
index 0000000..d30ee16
--- /dev/null
+++ b/tests/extract_read2_asan.pcap
Binary files differ
diff --git a/tests/forces1.out b/tests/forces1.out
new file mode 100644
index 0000000..a7db105
--- /dev/null
+++ b/tests/forces1.out
@@ -0,0 +1,30 @@
+ 1 12:23:04.260400 IP 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 1048037094] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES Query Response
+ 2 12:23:04.726175 IP 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 18398476] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES HeartBeat
+ 3 12:23:04.726228 IP 150.140.254.202.48316 > 211.129.72.8.6706: sctp[ForCES LP] (1) [SACK] [cum ack 18398476] [a_rwnd 57320] [#gap acks 0] [#dup tsns 0]
+ 4 12:23:04.728649 IP 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 167996938] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES Query
+ 5 12:23:04.733639 IP 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 167996939] [SID: 0] [SSEQ 3] [PPID 0x0]
+ ForCES Config
+ 6 12:23:04.733672 IP 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP] (1) [SACK] [cum ack 167996939] [a_rwnd 57228] [#gap acks 0] [#dup tsns 0]
+ 7 12:23:04.734755 IP 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 167996940] [SID: 0] [SSEQ 4] [PPID 0x0]
+ ForCES Config
+ 8 12:23:04.736911 IP 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 167996941] [SID: 0] [SSEQ 5] [PPID 0x0]
+ ForCES Config
+ 9 12:23:04.736980 IP 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP] (1) [SACK] [cum ack 167996941] [a_rwnd 57100] [#gap acks 0] [#dup tsns 0]
+ 10 12:23:04.740959 IP 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP] (1) [DATA] (B)(E) [TSN: 167996942] [SID: 0] [SSEQ 6] [PPID 0x0]
+ ForCES Config
+ 11 12:24:26.948354 IP 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP] (1) [SACK] [cum ack 1830592459] [a_rwnd 55272] [#gap acks 0] [#dup tsns 0]
+ 12 12:24:26.973201 IP 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP] (1) [HB REQ]
+ 13 12:24:27.282739 IP 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP] (1) [HB REQ]
+ 14 12:24:27.282783 IP 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP] (1) [HB ACK]
+ 15 12:24:27.354881 IP 150.140.254.202.48316 > 211.129.72.8.6706: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 1830592460] [SID: 0] [SSEQ 30] [PPID 0x0]
+ ForCES HeartBeat
+ 16 12:24:27.372769 IP 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP] (1) [HB ACK]
+ 17 12:24:27.759030 IP 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 18398553] [SID: 0] [SSEQ 77] [PPID 0x0]
+ ForCES HeartBeat
+ 18 12:24:44.777986 IP 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP] (1) [DATA] (B)(E) [TSN: 18398573] [SID: 0] [SSEQ 97] [PPID 0x0]
+ ForCES HeartBeat
+ 19 12:24:44.963122 IP 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP] (1) [SACK] [cum ack 1830592477] [a_rwnd 55272] [#gap acks 0] [#dup tsns 0]
+ 20 12:24:44.978321 IP 150.140.254.202.48316 > 211.129.72.8.6706: sctp[ForCES LP] (1) [SACK] [cum ack 18398573] [a_rwnd 56144] [#gap acks 0] [#dup tsns 0]
diff --git a/tests/forces1.pcap b/tests/forces1.pcap
new file mode 100644
index 0000000..b60fdd0
--- /dev/null
+++ b/tests/forces1.pcap
Binary files differ
diff --git a/tests/forces1vvv.out b/tests/forces1vvv.out
new file mode 100644
index 0000000..1594120
--- /dev/null
+++ b/tests/forces1vvv.out
@@ -0,0 +1,212 @@
+ 1 12:23:04.260400 IP (tos 0x2,ECT(0), ttl 64, id 4, offset 0, flags [DF], proto SCTP (132), length 380)
+ 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1048037094] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES Query Response
+ ForCES Version 1 len 332B flags 0x38400000
+ SrcID 0x2(FE) DstID 0x40000001(CE) Correlator 0x1
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 308 (data length 304 Bytes)
+ FEObj LFB(Classid 1) instance 1
+ Oper TLV GetResp(0x9) length 296
+ PATH-DATA TLV, length 292 (data encapsulated 288 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ FULLDATA TLV (Length 280 DataLen 276 Bytes)
+ [
+ 0x0000: 0000 0000 0000 0001 0000 0001 0000 0001
+ 0x0010: 0000 0002 0000 0001 0000 0002 0000 0003
+ 0x0020: 0000 0001 0000 0003 0000 0003 0000 0002
+ 0x0030: 0000 0004 0000 0004 0000 0001 0000 0005
+ 0x0040: 0000 0004 0000 0002 0000 0006 0000 0005
+ 0x0050: 0000 0001 0000 0007 0000 0005 0000 0002
+ 0x0060: 0000 0008 0000 0006 0000 0001 0000 0009
+ 0x0070: 0000 0007 0000 0001 0000 000a 0000 0007
+ 0x0080: 0000 0002 0000 000b 0000 0008 0000 0001
+ 0x0090: 0000 000c 0000 0009 0000 0001 0000 000d
+ 0x00a0: 0000 000a 0000 0001 0000 000e 0000 000b
+ 0x00b0: 0000 0001 0000 000f 0000 000c 0000 0001
+ 0x00c0: 0000 0010 0000 000d 0000 0001 0000 0011
+ 0x00d0: 0000 000e 0000 0001 0000 0012 0000 000f
+ 0x00e0: 0000 0001 0000 0013 0000 0010 0000 0001
+ 0x00f0: 0000 0014 0000 0011 0000 0001 0000 0015
+ 0x0100: 0000 0012 0000 0001 0000 0016 0000 0013
+ 0x0110: 0000 0001
+ ]
+ 2 12:23:04.726175 IP (tos 0x0, ttl 46, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 18398476] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x2
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+ 3 12:23:04.726228 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 48)
+ 150.140.254.202.48316 > 211.129.72.8.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 18398476] [a_rwnd 57320] [#gap acks 0] [#dup tsns 0]
+ 4 12:23:04.728649 IP (tos 0x0, ttl 46, id 3, offset 0, flags [DF], proto SCTP (132), length 100)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 167996938] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES Query
+ ForCES Version 1 len 52B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x3
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 28 (data length 24 Bytes)
+ FEObj LFB(Classid 1) instance 1
+ Oper TLV Get(0x7) length 16
+ PATH-DATA TLV, length 12 (data encapsulated 8 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+
+ 5 12:23:04.733639 IP (tos 0x0, ttl 46, id 4, offset 0, flags [DF], proto SCTP (132), length 112)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 167996939] [SID: 0] [SSEQ 3] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 64B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x4
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 40 (data length 36 Bytes)
+ #3(Classid 3) instance 1
+ Oper TLV SetProp(0x2) length 28
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 2
+ ID#01: 60
+ ID#02: 1
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0000 0001
+ ]
+ 6 12:23:04.733672 IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 48)
+ 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 167996939] [a_rwnd 57228] [#gap acks 0] [#dup tsns 0]
+ 7 12:23:04.734755 IP (tos 0x0, ttl 46, id 5, offset 0, flags [DF], proto SCTP (132), length 112)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 167996940] [SID: 0] [SSEQ 4] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 64B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x5
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 40 (data length 36 Bytes)
+ #3(Classid 3) instance 1
+ Oper TLV SetProp(0x2) length 28
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 2
+ ID#01: 60
+ ID#02: 2
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0000 0001
+ ]
+ 8 12:23:04.736911 IP (tos 0x0, ttl 46, id 6, offset 0, flags [DF], proto SCTP (132), length 112)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 167996941] [SID: 0] [SSEQ 5] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 64B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x6
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 40 (data length 36 Bytes)
+ #3(Classid 3) instance 1
+ Oper TLV SetProp(0x2) length 28
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 2
+ ID#01: 60
+ ID#02: 3
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0000 0001
+ ]
+ 9 12:23:04.736980 IP (tos 0x2,ECT(0), ttl 64, id 6, offset 0, flags [DF], proto SCTP (132), length 48)
+ 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 167996941] [a_rwnd 57100] [#gap acks 0] [#dup tsns 0]
+ 10 12:23:04.740959 IP (tos 0x0, ttl 46, id 7, offset 0, flags [DF], proto SCTP (132), length 112)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 167996942] [SID: 0] [SSEQ 6] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 64B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x7
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 40 (data length 36 Bytes)
+ #3(Classid 3) instance 2
+ Oper TLV SetProp(0x2) length 28
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 2
+ ID#01: 60
+ ID#02: 1
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0000 0001
+ ]
+ 11 12:24:26.948354 IP (tos 0x0, ttl 46, id 110, offset 0, flags [DF], proto SCTP (132), length 48)
+ 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP]
+ 1) [SACK] [cum ack 1830592459] [a_rwnd 55272] [#gap acks 0] [#dup tsns 0]
+ 12 12:24:26.973201 IP (tos 0x2,ECT(0), ttl 64, id 90, offset 0, flags [DF], proto SCTP (132), length 80)
+ 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP]
+ 1) [HB REQ]
+ 13 12:24:27.282739 IP (tos 0x0, ttl 46, id 111, offset 0, flags [DF], proto SCTP (132), length 80)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [HB REQ]
+ 14 12:24:27.282783 IP (tos 0x2,ECT(0), ttl 64, id 91, offset 0, flags [DF], proto SCTP (132), length 80)
+ 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP]
+ 1) [HB ACK]
+ 15 12:24:27.354881 IP (tos 0x2,ECT(0), ttl 64, id 111, offset 0, flags [DF], proto SCTP (132), length 72)
+ 150.140.254.202.48316 > 211.129.72.8.6706: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 1830592460] [SID: 0] [SSEQ 30] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x00000000
+ SrcID 0x2(FE) DstID 0x40000001(CE) Correlator 0x53
+ ForCES flags:
+ NoACK(0x0), prio=0, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+ 16 12:24:27.372769 IP (tos 0x0, ttl 46, id 112, offset 0, flags [DF], proto SCTP (132), length 80)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [HB ACK]
+ 17 12:24:27.759030 IP (tos 0x0, ttl 46, id 111, offset 0, flags [DF], proto SCTP (132), length 72)
+ 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 18398553] [SID: 0] [SSEQ 77] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x83
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+ 18 12:24:44.777986 IP (tos 0x0, ttl 46, id 148, offset 0, flags [DF], proto SCTP (132), length 72)
+ 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 18398573] [SID: 0] [SSEQ 97] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x97
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+ 19 12:24:44.963122 IP (tos 0x0, ttl 46, id 149, offset 0, flags [DF], proto SCTP (132), length 48)
+ 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP]
+ 1) [SACK] [cum ack 1830592477] [a_rwnd 55272] [#gap acks 0] [#dup tsns 0]
+ 20 12:24:44.978321 IP (tos 0x2,ECT(0), ttl 64, id 147, offset 0, flags [DF], proto SCTP (132), length 48)
+ 150.140.254.202.48316 > 211.129.72.8.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 18398573] [a_rwnd 56144] [#gap acks 0] [#dup tsns 0]
diff --git a/tests/forces1vvvv.out b/tests/forces1vvvv.out
new file mode 100644
index 0000000..63463ff
--- /dev/null
+++ b/tests/forces1vvvv.out
@@ -0,0 +1,291 @@
+ 1 12:23:04.260400 IP (tos 0x2,ECT(0), ttl 64, id 4, offset 0, flags [DF], proto SCTP (132), length 380)
+ 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1048037094] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES Query Response
+ ForCES Version 1 len 332B flags 0x38400000
+ SrcID 0x2(FE) DstID 0x40000001(CE) Correlator 0x1
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 308 (data length 304 Bytes)
+ FEObj LFB(Classid 1) instance 1
+ Oper TLV GetResp(0x9) length 296
+ PATH-DATA TLV, length 292 (data encapsulated 288 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ FULLDATA TLV (Length 280 DataLen 276 Bytes)
+ [
+ 0x0000: 0000 0000 0000 0001 0000 0001 0000 0001
+ 0x0010: 0000 0002 0000 0001 0000 0002 0000 0003
+ 0x0020: 0000 0001 0000 0003 0000 0003 0000 0002
+ 0x0030: 0000 0004 0000 0004 0000 0001 0000 0005
+ 0x0040: 0000 0004 0000 0002 0000 0006 0000 0005
+ 0x0050: 0000 0001 0000 0007 0000 0005 0000 0002
+ 0x0060: 0000 0008 0000 0006 0000 0001 0000 0009
+ 0x0070: 0000 0007 0000 0001 0000 000a 0000 0007
+ 0x0080: 0000 0002 0000 000b 0000 0008 0000 0001
+ 0x0090: 0000 000c 0000 0009 0000 0001 0000 000d
+ 0x00a0: 0000 000a 0000 0001 0000 000e 0000 000b
+ 0x00b0: 0000 0001 0000 000f 0000 000c 0000 0001
+ 0x00c0: 0000 0010 0000 000d 0000 0001 0000 0011
+ 0x00d0: 0000 000e 0000 0001 0000 0012 0000 000f
+ 0x00e0: 0000 0001 0000 0013 0000 0010 0000 0001
+ 0x00f0: 0000 0014 0000 0011 0000 0001 0000 0015
+ 0x0100: 0000 0012 0000 0001 0000 0016 0000 0013
+ 0x0110: 0000 0001
+ ]
+ Raw ForCES message
+ [
+ 0x0000: 1014 0053 0000 0002 4000 0001 0000 0000
+ 0x0010: 0000 0001 3840 0000 1000 0134 0000 0001
+ 0x0020: 0000 0001 0009 0128 0110 0124 0000 0001
+ 0x0030: 0000 0002 0112 0118 0000 0000 0000 0001
+ 0x0040: 0000 0001 0000 0001 0000 0002 0000 0001
+ 0x0050: 0000 0002 0000 0003 0000 0001 0000 0003
+ 0x0060: 0000 0003 0000 0002 0000 0004 0000 0004
+ 0x0070: 0000 0001 0000 0005 0000 0004 0000 0002
+ 0x0080: 0000 0006 0000 0005 0000 0001 0000 0007
+ 0x0090: 0000 0005 0000 0002 0000 0008 0000 0006
+ 0x00a0: 0000 0001 0000 0009 0000 0007 0000 0001
+ 0x00b0: 0000 000a 0000 0007 0000 0002 0000 000b
+ 0x00c0: 0000 0008 0000 0001 0000 000c 0000 0009
+ 0x00d0: 0000 0001 0000 000d 0000 000a 0000 0001
+ 0x00e0: 0000 000e 0000 000b 0000 0001 0000 000f
+ 0x00f0: 0000 000c 0000 0001 0000 0010 0000 000d
+ 0x0100: 0000 0001 0000 0011 0000 000e 0000 0001
+ 0x0110: 0000 0012 0000 000f 0000 0001 0000 0013
+ 0x0120: 0000 0010 0000 0001 0000 0014 0000 0011
+ 0x0130: 0000 0001 0000 0015 0000 0012 0000 0001
+ 0x0140: 0000 0016 0000 0013 0000 0001
+ ]
+ 2 12:23:04.726175 IP (tos 0x0, ttl 46, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 18398476] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x2
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+ Raw ForCES message
+ [
+ 0x0000: 100f 0006 4000 0001 0000 0002 0000 0000
+ 0x0010: 0000 0002 c040 0000
+ ]
+ 3 12:23:04.726228 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 48)
+ 150.140.254.202.48316 > 211.129.72.8.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 18398476] [a_rwnd 57320] [#gap acks 0] [#dup tsns 0]
+ 4 12:23:04.728649 IP (tos 0x0, ttl 46, id 3, offset 0, flags [DF], proto SCTP (132), length 100)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 167996938] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES Query
+ ForCES Version 1 len 52B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x3
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 28 (data length 24 Bytes)
+ FEObj LFB(Classid 1) instance 1
+ Oper TLV Get(0x7) length 16
+ PATH-DATA TLV, length 12 (data encapsulated 8 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+
+ Raw ForCES message
+ [
+ 0x0000: 1004 000d 4000 0001 0000 0002 0000 0000
+ 0x0010: 0000 0003 f840 0000 1000 001c 0000 0001
+ 0x0020: 0000 0001 0007 0010 0110 000c 0000 0001
+ 0x0030: 0000 0001
+ ]
+ 5 12:23:04.733639 IP (tos 0x0, ttl 46, id 4, offset 0, flags [DF], proto SCTP (132), length 112)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 167996939] [SID: 0] [SSEQ 3] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 64B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x4
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 40 (data length 36 Bytes)
+ #3(Classid 3) instance 1
+ Oper TLV SetProp(0x2) length 28
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 2
+ ID#01: 60
+ ID#02: 1
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0000 0001
+ ]
+ Raw ForCES message
+ [
+ 0x0000: 1003 0010 4000 0001 0000 0002 0000 0000
+ 0x0010: 0000 0004 f840 0000 1000 0028 0000 0003
+ 0x0020: 0000 0001 0002 001c 0110 0018 0000 0002
+ 0x0030: 0000 003c 0000 0001 0112 0008 0000 0001
+ ]
+ 6 12:23:04.733672 IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 48)
+ 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 167996939] [a_rwnd 57228] [#gap acks 0] [#dup tsns 0]
+ 7 12:23:04.734755 IP (tos 0x0, ttl 46, id 5, offset 0, flags [DF], proto SCTP (132), length 112)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 167996940] [SID: 0] [SSEQ 4] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 64B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x5
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 40 (data length 36 Bytes)
+ #3(Classid 3) instance 1
+ Oper TLV SetProp(0x2) length 28
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 2
+ ID#01: 60
+ ID#02: 2
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0000 0001
+ ]
+ Raw ForCES message
+ [
+ 0x0000: 1003 0010 4000 0001 0000 0002 0000 0000
+ 0x0010: 0000 0005 f840 0000 1000 0028 0000 0003
+ 0x0020: 0000 0001 0002 001c 0110 0018 0000 0002
+ 0x0030: 0000 003c 0000 0002 0112 0008 0000 0001
+ ]
+ 8 12:23:04.736911 IP (tos 0x0, ttl 46, id 6, offset 0, flags [DF], proto SCTP (132), length 112)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 167996941] [SID: 0] [SSEQ 5] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 64B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x6
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 40 (data length 36 Bytes)
+ #3(Classid 3) instance 1
+ Oper TLV SetProp(0x2) length 28
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 2
+ ID#01: 60
+ ID#02: 3
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0000 0001
+ ]
+ Raw ForCES message
+ [
+ 0x0000: 1003 0010 4000 0001 0000 0002 0000 0000
+ 0x0010: 0000 0006 f840 0000 1000 0028 0000 0003
+ 0x0020: 0000 0001 0002 001c 0110 0018 0000 0002
+ 0x0030: 0000 003c 0000 0003 0112 0008 0000 0001
+ ]
+ 9 12:23:04.736980 IP (tos 0x2,ECT(0), ttl 64, id 6, offset 0, flags [DF], proto SCTP (132), length 48)
+ 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 167996941] [a_rwnd 57100] [#gap acks 0] [#dup tsns 0]
+ 10 12:23:04.740959 IP (tos 0x0, ttl 46, id 7, offset 0, flags [DF], proto SCTP (132), length 112)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 167996942] [SID: 0] [SSEQ 6] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 64B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x7
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 40 (data length 36 Bytes)
+ #3(Classid 3) instance 2
+ Oper TLV SetProp(0x2) length 28
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 2
+ ID#01: 60
+ ID#02: 1
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0000 0001
+ ]
+ Raw ForCES message
+ [
+ 0x0000: 1003 0010 4000 0001 0000 0002 0000 0000
+ 0x0010: 0000 0007 f840 0000 1000 0028 0000 0003
+ 0x0020: 0000 0002 0002 001c 0110 0018 0000 0002
+ 0x0030: 0000 003c 0000 0001 0112 0008 0000 0001
+ ]
+ 11 12:24:26.948354 IP (tos 0x0, ttl 46, id 110, offset 0, flags [DF], proto SCTP (132), length 48)
+ 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP]
+ 1) [SACK] [cum ack 1830592459] [a_rwnd 55272] [#gap acks 0] [#dup tsns 0]
+ 12 12:24:26.973201 IP (tos 0x2,ECT(0), ttl 64, id 90, offset 0, flags [DF], proto SCTP (132), length 80)
+ 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP]
+ 1) [HB REQ]
+ 13 12:24:27.282739 IP (tos 0x0, ttl 46, id 111, offset 0, flags [DF], proto SCTP (132), length 80)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [HB REQ]
+ 14 12:24:27.282783 IP (tos 0x2,ECT(0), ttl 64, id 91, offset 0, flags [DF], proto SCTP (132), length 80)
+ 150.140.254.202.57077 > 211.129.72.8.6704: sctp[ForCES HP]
+ 1) [HB ACK]
+ 15 12:24:27.354881 IP (tos 0x2,ECT(0), ttl 64, id 111, offset 0, flags [DF], proto SCTP (132), length 72)
+ 150.140.254.202.48316 > 211.129.72.8.6706: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 1830592460] [SID: 0] [SSEQ 30] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x00000000
+ SrcID 0x2(FE) DstID 0x40000001(CE) Correlator 0x53
+ ForCES flags:
+ NoACK(0x0), prio=0, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+ Raw ForCES message
+ [
+ 0x0000: 100f 0006 0000 0002 4000 0001 0000 0000
+ 0x0010: 0000 0053 0000 0000
+ ]
+ 16 12:24:27.372769 IP (tos 0x0, ttl 46, id 112, offset 0, flags [DF], proto SCTP (132), length 80)
+ 211.129.72.8.6704 > 150.140.254.202.57077: sctp[ForCES HP]
+ 1) [HB ACK]
+ 17 12:24:27.759030 IP (tos 0x0, ttl 46, id 111, offset 0, flags [DF], proto SCTP (132), length 72)
+ 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 18398553] [SID: 0] [SSEQ 77] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x83
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+ Raw ForCES message
+ [
+ 0x0000: 100f 0006 4000 0001 0000 0002 0000 0000
+ 0x0010: 0000 0083 c040 0000
+ ]
+ 18 12:24:44.777986 IP (tos 0x0, ttl 46, id 148, offset 0, flags [DF], proto SCTP (132), length 72)
+ 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 18398573] [SID: 0] [SSEQ 97] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0400000
+ SrcID 0x40000001(CE) DstID 0x2(FE) Correlator 0x97
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+ Raw ForCES message
+ [
+ 0x0000: 100f 0006 4000 0001 0000 0002 0000 0000
+ 0x0010: 0000 0097 c040 0000
+ ]
+ 19 12:24:44.963122 IP (tos 0x0, ttl 46, id 149, offset 0, flags [DF], proto SCTP (132), length 48)
+ 211.129.72.8.6706 > 150.140.254.202.48316: sctp[ForCES LP]
+ 1) [SACK] [cum ack 1830592477] [a_rwnd 55272] [#gap acks 0] [#dup tsns 0]
+ 20 12:24:44.978321 IP (tos 0x2,ECT(0), ttl 64, id 147, offset 0, flags [DF], proto SCTP (132), length 48)
+ 150.140.254.202.48316 > 211.129.72.8.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 18398573] [a_rwnd 56144] [#gap acks 0] [#dup tsns 0]
diff --git a/tests/forces2.pcap b/tests/forces2.pcap
new file mode 100644
index 0000000..51a2095
--- /dev/null
+++ b/tests/forces2.pcap
Binary files differ
diff --git a/tests/forces2v.out b/tests/forces2v.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/forces2v.out
diff --git a/tests/forces2vv.out b/tests/forces2vv.out
new file mode 100644
index 0000000..74f37c6
--- /dev/null
+++ b/tests/forces2vv.out
@@ -0,0 +1,378 @@
+05:05:09.298782 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 68)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [INIT] [init tag: 2496668056] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 3848071494]
+05:05:09.303686 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 292)
+ 192.168.1.143.6704 > 192.168.1.142.33985: sctp[ForCES HP]
+ 1) [INIT ACK] [init tag: 970400624] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 918167005]
+05:05:09.304939 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 264)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [COOKIE ECHO]
+05:05:09.306408 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6704 > 192.168.1.142.33985: sctp[ForCES HP]
+ 1) [COOKIE ACK]
+05:05:10.309380 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 68)
+ 192.168.1.142.39555 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [INIT] [init tag: 2044981539] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 2236306515]
+05:05:10.309715 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 292)
+ 192.168.1.143.6705 > 192.168.1.142.39555: sctp[ForCES MP]
+ 1) [INIT ACK] [init tag: 3835501490] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 2895206285]
+05:05:10.309749 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 264)
+ 192.168.1.142.39555 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [COOKIE ECHO]
+05:05:10.309952 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6705 > 192.168.1.142.39555: sctp[ForCES MP]
+ 1) [COOKIE ACK]
+05:05:11.310417 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 68)
+ 192.168.1.142.34521 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [INIT] [init tag: 3379268938] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 4164546507]
+05:05:11.310768 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 292)
+ 192.168.1.143.6706 > 192.168.1.142.34521: sctp[ForCES LP]
+ 1) [INIT ACK] [init tag: 1840401365] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 1469124988]
+05:05:11.310801 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 264)
+ 192.168.1.142.34521 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [COOKIE ECHO]
+05:05:11.311000 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6706 > 192.168.1.142.34521: sctp[ForCES LP]
+ 1) [COOKIE ACK]
+05:05:12.312310 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 3848071494] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES Association Setup
+ ForCES Version 1 len 24B flags 0xf8000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x1
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:05:12.314195 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6704 > 192.168.1.142.33985: sctp[ForCES HP]
+ 1) [SACK] [cum ack 3848071494] [a_rwnd 57320] [#gap acks 0] [#dup tsns 0]
+05:05:12.416220 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.33985: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 918167005] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES Association Response
+ ForCES Version 1 len 32B flags 0x38100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x1
+ ForCES flags:
+ NoACK(0x0), prio=7, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:05:12.416942 IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 918167005] [a_rwnd 57312] [#gap acks 0] [#dup tsns 0]
+05:05:20.347682 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.34521: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 1469124988] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0500000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x1
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, execute-all-or-none(0x1),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:05:20.352187 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.34521 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 1469124988] [a_rwnd 57320] [#gap acks 0] [#dup tsns 0]
+05:05:21.248574 IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.142.34521 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 4164546507] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x1
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:05:21.249024 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.34521: sctp[ForCES LP]
+ 1) [SACK] [cum ack 4164546507] [a_rwnd 57320] [#gap acks 0] [#dup tsns 0]
+05:05:32.421106 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.34521: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 1469124989] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x2
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:05:32.621031 IP (tos 0x2,ECT(0), ttl 64, id 3, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.34521 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 1469124989] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:05:33.263419 IP (tos 0x2,ECT(0), ttl 64, id 4, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.142.34521 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 4164546508] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x2
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:05:33.464155 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.34521: sctp[ForCES LP]
+ 1) [SACK] [cum ack 4164546508] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:05:43.022434 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.39555 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB REQ]
+05:05:43.023282 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.39555: sctp[ForCES MP]
+ 1) [HB ACK]
+05:05:43.196617 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.39555: sctp[ForCES MP]
+ 1) [HB REQ]
+05:05:43.197037 IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.39555 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB ACK]
+05:05:44.604199 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.33985: sctp[ForCES HP]
+ 1) [HB REQ]
+05:05:44.604244 IP (tos 0x2,ECT(0), ttl 64, id 3, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB ACK]
+05:05:46.350074 IP (tos 0x2,ECT(0), ttl 64, id 4, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB REQ]
+05:05:46.350436 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.33985: sctp[ForCES HP]
+ 1) [HB ACK]
+05:05:52.435455 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.34521: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 1469124990] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x3
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:05:52.635909 IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.34521 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 1469124990] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:05:53.285747 IP (tos 0x2,ECT(0), ttl 64, id 6, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.142.34521 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 4164546509] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x3
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:05:53.486513 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.34521: sctp[ForCES LP]
+ 1) [SACK] [cum ack 4164546509] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:05:57.511596 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 184)
+ 192.168.1.143.6704 > 192.168.1.142.33985: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 918167006] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 136B flags 0xf8500000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x4
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:05:57.712372 IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 918167006] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:05:58.292051 IP (tos 0x2,ECT(0), ttl 64, id 6, offset 0, flags [DF], proto SCTP (132), length 144)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 3848071495] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES Config Response
+ ForCES Version 1 len 96B flags 0x38500000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x4
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:05:58.492214 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6704 > 192.168.1.142.33985: sctp[ForCES HP]
+ 1) [SACK] [cum ack 3848071495] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:05:58.519224 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 128)
+ 192.168.1.143.6704 > 192.168.1.142.33985: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 918167007] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES Query
+ ForCES Version 1 len 80B flags 0xf8500000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x5
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:05:58.719328 IP (tos 0x2,ECT(0), ttl 64, id 7, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 918167007] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:05:59.293832 IP (tos 0x2,ECT(0), ttl 64, id 8, offset 0, flags [DF], proto SCTP (132), length 196)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 3848071496] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES Query Response
+ ForCES Version 1 len 148B flags 0x38500000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x5
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:05:59.494322 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6704 > 192.168.1.142.33985: sctp[ForCES HP]
+ 1) [SACK] [cum ack 3848071496] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:06:12.447511 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.34521: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 1469124991] [SID: 0] [SSEQ 3] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x6
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:06:12.613268 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.33985: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 918167008] [SID: 0] [SSEQ 3] [PPID 0x0]
+ ForCES Association TearDown
+ ForCES Version 1 len 32B flags 0x38100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x0
+ ForCES flags:
+ NoACK(0x0), prio=7, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:06:12.646587 IP (tos 0x2,ECT(0), ttl 64, id 7, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.34521 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 1469124991] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:06:12.812720 IP (tos 0x2,ECT(0), ttl 64, id 9, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 918167008] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:06:13.617136 IP (tos 0x2,ECT(0), ttl 64, id 10, offset 0, flags [DF], proto SCTP (132), length 40)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SHUTDOWN]
+05:06:13.617464 IP (tos 0x2,ECT(0), ttl 64, id 3, offset 0, flags [DF], proto SCTP (132), length 40)
+ 192.168.1.142.39555 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [SHUTDOWN]
+05:06:13.617602 IP (tos 0x2,ECT(0), ttl 64, id 8, offset 0, flags [DF], proto SCTP (132), length 40)
+ 192.168.1.142.34521 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SHUTDOWN]
+05:06:13.617922 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6704 > 192.168.1.142.33985: sctp[ForCES HP]
+ 1) [SHUTDOWN ACK]
+05:06:13.618337 IP (tos 0x2,ECT(0), ttl 64, id 11, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.142.33985 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SHUTDOWN COMPLETE]
+05:06:13.619459 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6705 > 192.168.1.142.39555: sctp[ForCES MP]
+ 1) [SHUTDOWN ACK]
+05:06:13.619484 IP (tos 0x2,ECT(0), ttl 64, id 4, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.142.39555 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [SHUTDOWN COMPLETE]
+05:06:13.619537 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6706 > 192.168.1.142.34521: sctp[ForCES LP]
+ 1) [SHUTDOWN ACK]
+05:06:13.619550 IP (tos 0x2,ECT(0), ttl 64, id 9, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.142.34521 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SHUTDOWN COMPLETE]
+05:06:14.310789 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 68)
+ 192.168.1.142.59807 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [INIT] [init tag: 648920342] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 3143112306]
+05:06:14.311204 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 292)
+ 192.168.1.143.6704 > 192.168.1.142.59807: sctp[ForCES HP]
+ 1) [INIT ACK] [init tag: 3977131441] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 3691296472]
+05:06:14.312029 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 264)
+ 192.168.1.142.59807 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [COOKIE ECHO]
+05:06:14.312276 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6704 > 192.168.1.142.59807: sctp[ForCES HP]
+ 1) [COOKIE ACK]
+05:06:15.314129 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 68)
+ 192.168.1.142.55497 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [INIT] [init tag: 3941704218] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 2908637682]
+05:06:15.314897 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 292)
+ 192.168.1.143.6705 > 192.168.1.142.55497: sctp[ForCES MP]
+ 1) [INIT ACK] [init tag: 2312011763] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 3797683222]
+05:06:15.314939 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 264)
+ 192.168.1.142.55497 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [COOKIE ECHO]
+05:06:15.315192 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6705 > 192.168.1.142.55497: sctp[ForCES MP]
+ 1) [COOKIE ACK]
+05:06:16.316012 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 68)
+ 192.168.1.142.37985 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [INIT] [init tag: 738970165] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 2249629206]
+05:06:16.316410 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 292)
+ 192.168.1.143.6706 > 192.168.1.142.37985: sctp[ForCES LP]
+ 1) [INIT ACK] [init tag: 1998517320] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 1397847889]
+05:06:16.316444 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 264)
+ 192.168.1.142.37985 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [COOKIE ECHO]
+05:06:16.316679 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6706 > 192.168.1.142.37985: sctp[ForCES LP]
+ 1) [COOKIE ACK]
+05:06:17.317412 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.142.59807 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 3143112306] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES Association Setup
+ ForCES Version 1 len 24B flags 0xf8000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x2
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:06:17.318437 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6704 > 192.168.1.142.59807: sctp[ForCES HP]
+ 1) [SACK] [cum ack 3143112306] [a_rwnd 57320] [#gap acks 0] [#dup tsns 0]
+05:06:17.332703 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.59807: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 3691296472] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES Association Response
+ ForCES Version 1 len 32B flags 0x38100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x2
+ ForCES flags:
+ NoACK(0x0), prio=7, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:06:17.332763 IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.59807 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 3691296472] [a_rwnd 57312] [#gap acks 0] [#dup tsns 0]
+05:06:17.334067 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.142.37985 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2249629206] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x6
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:06:17.334681 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.37985: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2249629206] [a_rwnd 57320] [#gap acks 0] [#dup tsns 0]
diff --git a/tests/forces2vvv.out b/tests/forces2vvv.out
new file mode 100644
index 0000000..6a9bd5f
--- /dev/null
+++ b/tests/forces2vvv.out
@@ -0,0 +1,751 @@
+05:12:46.942414 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 68)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [INIT] [init tag: 2926667004] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 1498547998]
+05:12:46.943161 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 292)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [INIT ACK] [init tag: 3861163764] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 2413889661]
+05:12:46.943242 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 264)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [COOKIE ECHO]
+05:12:46.943643 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [COOKIE ACK]
+05:12:47.944776 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 68)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [INIT] [init tag: 3153359751] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 3738337023]
+05:12:47.946163 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 292)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [INIT ACK] [init tag: 562272820] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 2275981483]
+05:12:47.946319 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 264)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [COOKIE ECHO]
+05:12:47.947214 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [COOKIE ACK]
+05:12:48.948471 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 68)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [INIT] [init tag: 1637919099] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 922703190]
+05:12:48.949179 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 292)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [INIT ACK] [init tag: 2538997808] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 2244318871]
+05:12:48.949212 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 264)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [COOKIE ECHO]
+05:12:48.950191 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [COOKIE ACK]
+05:12:49.951610 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1498547998] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES Association Setup
+ ForCES Version 1 len 24B flags 0xf8000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x1
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:12:49.952213 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1498547998] [a_rwnd 57320] [#gap acks 0] [#dup tsns 0]
+05:12:49.983328 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2413889661] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES Association Response
+ ForCES Version 1 len 32B flags 0x38100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x1
+ ForCES flags:
+ NoACK(0x0), prio=7, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:12:49.983414 IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2413889661] [a_rwnd 57312] [#gap acks 0] [#dup tsns 0]
+05:13:09.990457 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2244318871] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x1
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:13:09.990576 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2244318871] [a_rwnd 57320] [#gap acks 0] [#dup tsns 0]
+05:13:10.977285 IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 922703190] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x1
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:13:10.977790 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SACK] [cum ack 922703190] [a_rwnd 57320] [#gap acks 0] [#dup tsns 0]
+05:13:20.110083 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB REQ]
+05:13:20.110531 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB ACK]
+05:13:20.668242 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB REQ]
+05:13:20.668307 IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB ACK]
+05:13:21.822790 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB REQ]
+05:13:21.822849 IP (tos 0x2,ECT(0), ttl 64, id 3, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB ACK]
+05:13:22.926155 IP (tos 0x2,ECT(0), ttl 64, id 4, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB REQ]
+05:13:22.926561 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB ACK]
+05:13:30.012956 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2244318872] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x2
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:13:30.213362 IP (tos 0x2,ECT(0), ttl 64, id 3, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2244318872] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:13:30.998747 IP (tos 0x2,ECT(0), ttl 64, id 4, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 922703191] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x2
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:13:31.199633 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SACK] [cum ack 922703191] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:13:50.022950 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2244318873] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x3
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:13:50.222804 IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2244318873] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:13:50.957859 IP (tos 0x2,ECT(0), ttl 64, id 3, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB REQ]
+05:13:50.958254 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB ACK]
+05:13:51.017217 IP (tos 0x2,ECT(0), ttl 64, id 6, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 922703192] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x3
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:13:51.218065 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SACK] [cum ack 922703192] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:13:52.029041 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB REQ]
+05:13:52.029131 IP (tos 0x2,ECT(0), ttl 64, id 4, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB ACK]
+05:13:52.668078 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB REQ]
+05:13:52.668129 IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB ACK]
+05:13:54.157975 IP (tos 0x2,ECT(0), ttl 64, id 6, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB REQ]
+05:13:54.158408 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB ACK]
+05:14:10.034601 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2244318874] [SID: 0] [SSEQ 3] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x4
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:14:10.036750 IP (tos 0x2,ECT(0), ttl 64, id 7, offset 0, flags [DF], proto SCTP (132), length 88)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2244318874] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+ 2) [DATA] (B)(E) [TSN: 922703193] [SID: 0] [SSEQ 3] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x4
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:14:10.237566 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SACK] [cum ack 922703193] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:14:22.318623 IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB REQ]
+05:14:22.319118 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB ACK]
+05:14:23.004801 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB REQ]
+05:14:23.004855 IP (tos 0x2,ECT(0), ttl 64, id 6, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB ACK]
+05:14:23.644941 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB REQ]
+05:14:23.645019 IP (tos 0x2,ECT(0), ttl 64, id 7, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB ACK]
+05:14:25.517659 IP (tos 0x2,ECT(0), ttl 64, id 8, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB REQ]
+05:14:25.518177 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB ACK]
+05:14:30.056428 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2244318875] [SID: 0] [SSEQ 4] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x5
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:14:30.058780 IP (tos 0x2,ECT(0), ttl 64, id 8, offset 0, flags [DF], proto SCTP (132), length 88)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2244318875] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+ 2) [DATA] (B)(E) [TSN: 922703194] [SID: 0] [SSEQ 4] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x5
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:14:30.260069 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SACK] [cum ack 922703194] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:14:50.070392 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2244318876] [SID: 0] [SSEQ 5] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x6
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:14:50.078619 IP (tos 0x2,ECT(0), ttl 64, id 9, offset 0, flags [DF], proto SCTP (132), length 88)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2244318876] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+ 2) [DATA] (B)(E) [TSN: 922703195] [SID: 0] [SSEQ 5] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x6
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:14:50.278482 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SACK] [cum ack 922703195] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:14:52.910320 IP (tos 0x2,ECT(0), ttl 64, id 7, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB REQ]
+05:14:52.910757 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB ACK]
+05:14:54.236596 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB REQ]
+05:14:54.236684 IP (tos 0x2,ECT(0), ttl 64, id 8, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB ACK]
+05:14:54.236747 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB REQ]
+05:14:54.236765 IP (tos 0x2,ECT(0), ttl 64, id 9, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB ACK]
+05:14:56.494447 IP (tos 0x2,ECT(0), ttl 64, id 10, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB REQ]
+05:14:56.494903 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB ACK]
+05:15:10.087164 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2244318877] [SID: 0] [SSEQ 6] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x7
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:15:10.099646 IP (tos 0x2,ECT(0), ttl 64, id 10, offset 0, flags [DF], proto SCTP (132), length 88)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2244318877] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+ 2) [DATA] (B)(E) [TSN: 922703196] [SID: 0] [SSEQ 6] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x7
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:15:10.300908 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SACK] [cum ack 922703196] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:15:24.142057 IP (tos 0x2,ECT(0), ttl 64, id 9, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB REQ]
+05:15:24.142436 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB ACK]
+05:15:25.468346 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB REQ]
+05:15:25.468420 IP (tos 0x2,ECT(0), ttl 64, id 10, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB ACK]
+05:15:25.724070 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB REQ]
+05:15:25.724132 IP (tos 0x2,ECT(0), ttl 64, id 11, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB ACK]
+05:15:27.854217 IP (tos 0x2,ECT(0), ttl 64, id 12, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB REQ]
+05:15:27.854637 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB ACK]
+05:15:30.103924 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2244318878] [SID: 0] [SSEQ 7] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x8
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:15:30.121626 IP (tos 0x2,ECT(0), ttl 64, id 11, offset 0, flags [DF], proto SCTP (132), length 88)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2244318878] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+ 2) [DATA] (B)(E) [TSN: 922703197] [SID: 0] [SSEQ 7] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x8
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:15:30.322461 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SACK] [cum ack 922703197] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:15:50.116903 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2244318879] [SID: 0] [SSEQ 8] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x9
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:15:50.141079 IP (tos 0x2,ECT(0), ttl 64, id 12, offset 0, flags [DF], proto SCTP (132), length 88)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2244318879] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+ 2) [DATA] (B)(E) [TSN: 922703198] [SID: 0] [SSEQ 8] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x9
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:15:50.341982 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SACK] [cum ack 922703198] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:15:51.957705 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 140)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2413889662] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 92B flags 0x78400000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x10
+ ForCES flags:
+ SuccessACK(0x1), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:15:52.144354 IP (tos 0x2,ECT(0), ttl 64, id 13, offset 0, flags [DF], proto SCTP (132), length 156)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2413889662] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+ 2) [DATA] (B)(E) [TSN: 1498547999] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES Config Response
+ ForCES Version 1 len 92B flags 0x38400000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x10
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:15:52.344974 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1498547999] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:15:55.629842 IP (tos 0x2,ECT(0), ttl 64, id 11, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB REQ]
+05:15:55.630342 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB ACK]
+05:15:56.189088 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB REQ]
+05:15:56.189160 IP (tos 0x2,ECT(0), ttl 64, id 12, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB ACK]
+05:16:11.972673 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2244318880] [SID: 0] [SSEQ 9] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x11
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:16:12.163738 IP (tos 0x2,ECT(0), ttl 64, id 13, offset 0, flags [DF], proto SCTP (132), length 88)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2244318880] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+ 2) [DATA] (B)(E) [TSN: 922703199] [SID: 0] [SSEQ 9] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x11
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:16:12.364365 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SACK] [cum ack 922703199] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:16:22.766463 IP (tos 0x2,ECT(0), ttl 64, id 14, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB REQ]
+05:16:22.766888 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB ACK]
+05:16:22.812607 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB REQ]
+05:16:22.812641 IP (tos 0x2,ECT(0), ttl 64, id 15, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB ACK]
+05:16:26.908770 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB REQ]
+05:16:26.908850 IP (tos 0x2,ECT(0), ttl 64, id 13, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB ACK]
+05:16:27.118570 IP (tos 0x2,ECT(0), ttl 64, id 14, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB REQ]
+05:16:27.118998 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB ACK]
+05:16:31.990056 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2244318881] [SID: 0] [SSEQ 10] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x12
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:16:32.184118 IP (tos 0x2,ECT(0), ttl 64, id 14, offset 0, flags [DF], proto SCTP (132), length 88)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2244318881] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+ 2) [DATA] (B)(E) [TSN: 922703200] [SID: 0] [SSEQ 10] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x12
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:16:32.384948 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SACK] [cum ack 922703200] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:16:52.009081 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 72)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [DATA] (B)(E) [TSN: 2244318882] [SID: 0] [SSEQ 11] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0xc0100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x13
+ ForCES flags:
+ AlwaysACK(0x3), prio=0, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:16:52.205727 IP (tos 0x2,ECT(0), ttl 64, id 15, offset 0, flags [DF], proto SCTP (132), length 88)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SACK] [cum ack 2244318882] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+ 2) [DATA] (B)(E) [TSN: 922703201] [SID: 0] [SSEQ 11] [PPID 0x0]
+ ForCES HeartBeat
+ ForCES Version 1 len 24B flags 0x08000000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x13
+ ForCES flags:
+ NoACK(0x0), prio=1, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:16:52.406443 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SACK] [cum ack 922703201] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:16:53.532328 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB REQ]
+05:16:53.532396 IP (tos 0x2,ECT(0), ttl 64, id 16, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB ACK]
+05:16:53.998215 IP (tos 0x2,ECT(0), ttl 64, id 17, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [HB REQ]
+05:16:53.998632 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [HB ACK]
+05:16:57.965660 IP (tos 0x2,ECT(0), ttl 64, id 15, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB REQ]
+05:16:57.966179 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB ACK]
+05:16:58.268666 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [HB REQ]
+05:16:58.268737 IP (tos 0x2,ECT(0), ttl 64, id 16, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [HB ACK]
+05:16:58.751669 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 124)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2413889663] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES Query
+ ForCES Version 1 len 76B flags 0x78400000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x14
+ ForCES flags:
+ SuccessACK(0x1), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:16:58.952418 IP (tos 0x2,ECT(0), ttl 64, id 18, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2413889663] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:16:59.213890 IP (tos 0x2,ECT(0), ttl 64, id 19, offset 0, flags [DF], proto SCTP (132), length 140)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1498548000] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES Query Response
+ ForCES Version 1 len 92B flags 0x38400000
+ SrcID 0x2(FE) DstID 0x40000003(CE) Correlator 0x14
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:16:59.414572 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1498548000] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:17:06.275584 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 80)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2413889664] [SID: 0] [SSEQ 3] [PPID 0x0]
+ ForCES Association TearDown
+ ForCES Version 1 len 32B flags 0x38100000
+ SrcID 0x40000003(CE) DstID 0x2(FE) Correlator 0x0
+ ForCES flags:
+ NoACK(0x0), prio=7, EMReserved(0x0),
+ Standalone(0x0), EndofTransaction(0x2)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+05:17:06.475558 IP (tos 0x2,ECT(0), ttl 64, id 20, offset 0, flags [DF], proto SCTP (132), length 48)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2413889664] [a_rwnd 57344] [#gap acks 0] [#dup tsns 0]
+05:17:07.278281 IP (tos 0x2,ECT(0), ttl 64, id 21, offset 0, flags [DF], proto SCTP (132), length 40)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SHUTDOWN]
+05:17:07.278648 IP (tos 0x2,ECT(0), ttl 64, id 17, offset 0, flags [DF], proto SCTP (132), length 40)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [SHUTDOWN]
+05:17:07.278805 IP (tos 0x2,ECT(0), ttl 64, id 16, offset 0, flags [DF], proto SCTP (132), length 40)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SHUTDOWN]
+05:17:07.278894 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6704 > 192.168.1.142.53333: sctp[ForCES HP]
+ 1) [SHUTDOWN ACK]
+05:17:07.278986 IP (tos 0x2,ECT(0), ttl 64, id 22, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.142.53333 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SHUTDOWN COMPLETE]
+05:17:07.279062 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6705 > 192.168.1.142.48432: sctp[ForCES MP]
+ 1) [SHUTDOWN ACK]
+05:17:07.279086 IP (tos 0x2,ECT(0), ttl 64, id 18, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.142.48432 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [SHUTDOWN COMPLETE]
+05:17:07.279125 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6706 > 192.168.1.142.57793: sctp[ForCES LP]
+ 1) [SHUTDOWN ACK]
+05:17:07.279383 IP (tos 0x2,ECT(0), ttl 64, id 17, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.142.57793 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SHUTDOWN COMPLETE]
+05:17:08.224255 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 68)
+ 192.168.1.142.60979 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [INIT] [init tag: 893123932] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 4001675829]
+05:17:08.224782 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 292)
+ 192.168.1.143.6704 > 192.168.1.142.60979: sctp[ForCES HP]
+ 1) [INIT ACK] [init tag: 3751052708] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 2904779402]
+05:17:08.224834 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 264)
+ 192.168.1.142.60979 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [COOKIE ECHO]
+05:17:08.225194 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6704 > 192.168.1.142.60979: sctp[ForCES HP]
+ 1) [COOKIE ACK]
+05:17:09.226814 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 68)
+ 192.168.1.142.41874 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [INIT] [init tag: 2631831000] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 3186084970]
+05:17:09.227378 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 292)
+ 192.168.1.143.6705 > 192.168.1.142.41874: sctp[ForCES MP]
+ 1) [INIT ACK] [init tag: 1025500394] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 492081856]
+05:17:09.227470 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 264)
+ 192.168.1.142.41874 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [COOKIE ECHO]
+05:17:09.227843 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6705 > 192.168.1.142.41874: sctp[ForCES MP]
+ 1) [COOKIE ACK]
+05:17:10.234920 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 68)
+ 192.168.1.142.43249 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [INIT] [init tag: 1071698335] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 1223456824]
+05:17:10.235259 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 292)
+ 192.168.1.143.6706 > 192.168.1.142.43249: sctp[ForCES LP]
+ 1) [INIT ACK] [init tag: 2401559485] [rwnd: 57344] [OS: 1] [MIS: 1] [init TSN: 4176597732]
+05:17:10.235295 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 264)
+ 192.168.1.142.43249 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [COOKIE ECHO]
+05:17:10.235559 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6706 > 192.168.1.142.43249: sctp[ForCES LP]
+ 1) [COOKIE ACK]
+05:17:10.432954 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 40)
+ 192.168.1.142.60979 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SHUTDOWN]
+05:17:10.433287 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 40)
+ 192.168.1.142.41874 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [SHUTDOWN]
+05:17:10.433473 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6704 > 192.168.1.142.60979: sctp[ForCES HP]
+ 1) [SHUTDOWN ACK]
+05:17:10.433517 IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.142.60979 > 192.168.1.143.6704: sctp[ForCES HP]
+ 1) [SHUTDOWN COMPLETE]
+05:17:10.433629 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6705 > 192.168.1.142.41874: sctp[ForCES MP]
+ 1) [SHUTDOWN ACK]
+05:17:10.433866 IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.142.41874 > 192.168.1.143.6705: sctp[ForCES MP]
+ 1) [SHUTDOWN COMPLETE]
+05:17:10.434075 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 40)
+ 192.168.1.142.43249 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SHUTDOWN]
+05:17:10.434365 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.143.6706 > 192.168.1.142.43249: sctp[ForCES LP]
+ 1) [SHUTDOWN ACK]
+05:17:10.434388 IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 36)
+ 192.168.1.142.43249 > 192.168.1.143.6706: sctp[ForCES LP]
+ 1) [SHUTDOWN COMPLETE]
diff --git a/tests/forces3.pcap b/tests/forces3.pcap
new file mode 100644
index 0000000..a968425
--- /dev/null
+++ b/tests/forces3.pcap
Binary files differ
diff --git a/tests/forces3vvv.out b/tests/forces3vvv.out
new file mode 100644
index 0000000..6d2394d
--- /dev/null
+++ b/tests/forces3vvv.out
@@ -0,0 +1,602 @@
+23:38:56.018934 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 76)
+ 172.20.4.63.16702 > 172.20.4.93.6702: sctp[ForCES LP]
+ 1) [INIT] [init tag: 3355263363] [rwnd: 55296] [OS: 10] [MIS: 65535] [init TSN: 861291022]
+23:38:56.019037 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 236)
+ 172.20.4.93.6702 > 172.20.4.63.16702: sctp[ForCES LP]
+ 1) [INIT ACK] [init tag: 2807207095] [rwnd: 54784] [OS: 10] [MIS: 10] [init TSN: 2957773506]
+23:38:56.019110 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 200)
+ 172.20.4.63.16702 > 172.20.4.93.6702: sctp[ForCES LP]
+ 1) [COOKIE ECHO]
+23:38:56.019241 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 172.20.4.93.6702 > 172.20.4.63.16702: sctp[ForCES LP]
+ 1) [COOKIE ACK]
+23:38:56.019920 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 76)
+ 172.20.4.63.16701 > 172.20.4.93.6701: sctp[ForCES MP]
+ 1) [INIT] [init tag: 355895801] [rwnd: 55296] [OS: 10] [MIS: 65535] [init TSN: 1729985532]
+23:38:56.020061 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 236)
+ 172.20.4.93.6701 > 172.20.4.63.16701: sctp[ForCES MP]
+ 1) [INIT ACK] [init tag: 2960733132] [rwnd: 54784] [OS: 10] [MIS: 10] [init TSN: 777474576]
+23:38:56.020111 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 200)
+ 172.20.4.63.16701 > 172.20.4.93.6701: sctp[ForCES MP]
+ 1) [COOKIE ECHO]
+23:38:56.020235 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 172.20.4.93.6701 > 172.20.4.63.16701: sctp[ForCES MP]
+ 1) [COOKIE ACK]
+23:38:56.020433 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 76)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [INIT] [init tag: 3006905571] [rwnd: 55296] [OS: 10] [MIS: 65535] [init TSN: 2958179469]
+23:38:56.020578 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 236)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [INIT ACK] [init tag: 3515444933] [rwnd: 54784] [OS: 10] [MIS: 10] [init TSN: 1811362564]
+23:38:56.020617 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 200)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [COOKIE ECHO]
+23:38:56.020739 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 36)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [COOKIE ACK]
+23:38:57.240366 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 72)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2958179469] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES Association Setup
+ ForCES Version 1 len 24B flags 0xf8000000
+ SrcID 0x3(FE) DstID 0x40000001(CE) Correlator 0x1
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, EMReserved(0x0),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+
+
+23:38:57.240474 IP (tos 0x2,ECT(0), ttl 64, id 0, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2958179469] [a_rwnd 54760] [#gap acks 0] [#dup tsns 0]
+23:38:57.241034 IP (tos 0x2,ECT(0), ttl 64, id 1, offset 0, flags [DF], proto SCTP (132), length 80)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1811362564] [SID: 0] [SSEQ 0] [PPID 0x0]
+ ForCES Association Response
+ ForCES Version 1 len 32B flags 0x38400000
+ SrcID 0x40000001(CE) DstID 0x3(FE) Correlator 0x1
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ ASResult TLV, length 8 (data length 4 Bytes)
+ Success (0)
+
+
+23:38:57.241079 IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1811362564] [a_rwnd 55264] [#gap acks 0] [#dup tsns 0]
+23:38:57.241047 IP (tos 0x2,ECT(0), ttl 64, id 2, offset 0, flags [DF], proto SCTP (132), length 100)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1811362565] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES Query
+ ForCES Version 1 len 52B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x3(FE) Correlator 0x1
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 28 (data length 24 Bytes)
+ FEObj LFB(Classid 1) instance 1
+ Oper TLV Get(0x7) length 16
+ PATH-DATA TLV, length 12 (data encapsulated 8 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+
+
+23:38:57.244420 IP (tos 0x2,ECT(0), ttl 64, id 3, offset 0, flags [DF], proto SCTP (132), length 140)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2958179470] [SID: 0] [SSEQ 1] [PPID 0x0]
+ ForCES Query Response
+ ForCES Version 1 len 92B flags 0x38400000
+ SrcID 0x3(FE) DstID 0x40000001(CE) Correlator 0x1
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 68 (data length 64 Bytes)
+ FEObj LFB(Classid 1) instance 1
+ Oper TLV GetResp(0x9) length 56
+ PATH-DATA TLV, length 52 (data encapsulated 48 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ FULLDATA TLV (Length 40 DataLen 36 Bytes)
+ [
+ 0x0000: 0000 0000 0000 0001 0000 0001 0000 0001
+ 0x0010: 0000 0002 0000 0001 0000 0002 0000 000e
+ 0x0020: 0000 0001
+ ]
+
+
+23:38:57.440152 IP (tos 0x2,ECT(0), ttl 64, id 4, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1811362565] [a_rwnd 55264] [#gap acks 0] [#dup tsns 0]
+23:38:57.444197 IP (tos 0x2,ECT(0), ttl 64, id 3, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2958179470] [a_rwnd 54760] [#gap acks 0] [#dup tsns 0]
+23:39:04.942310 IP (tos 0x2,ECT(0), ttl 64, id 4, offset 0, flags [DF], proto SCTP (132), length 100)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1811362566] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES Query
+ ForCES Version 1 len 52B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x3(FE) Correlator 0x2
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 28 (data length 24 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV Get(0x7) length 16
+ PATH-DATA TLV, length 12 (data encapsulated 8 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+
+
+23:39:04.943823 IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 188)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2958179471] [SID: 0] [SSEQ 2] [PPID 0x0]
+ ForCES Query Response
+ ForCES Version 1 len 140B flags 0x38400000
+ SrcID 0x3(FE) DstID 0x40000001(CE) Correlator 0x2
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 116 (data length 112 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV GetResp(0x9) length 104
+ PATH-DATA TLV, length 100 (data encapsulated 96 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ FULLDATA TLV (Length 88 DataLen 84 Bytes)
+ [
+ 0x0000: 0112 0054 0000 0000 0000 0001 0112 0028
+ 0x0010: 0000 0000 0102 0304 0000 0018 0001 0203
+ 0x0020: 0405 0000 0001 1112 1314 0000 0019 0a0b
+ 0x0030: 0c0d 0e0f 0000 0001 0000 0002 0112 0018
+ 0x0040: 0000 0000 0807 0605 0000 0010 1415 1617
+ 0x0050: 1819 0000
+ ]
+
+
+23:39:05.141776 IP (tos 0x2,ECT(0), ttl 64, id 6, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1811362566] [a_rwnd 55264] [#gap acks 0] [#dup tsns 0]
+23:39:05.143071 IP (tos 0x2,ECT(0), ttl 64, id 5, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2958179471] [a_rwnd 54760] [#gap acks 0] [#dup tsns 0]
+23:39:08.406266 IP (tos 0x2,ECT(0), ttl 64, id 6, offset 0, flags [DF], proto SCTP (132), length 156)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1811362567] [SID: 0] [SSEQ 3] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 108B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x3(FE) Correlator 0x3
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 84 (data length 80 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV Set(0x1) length 72
+ PATH-DATA TLV, length 68 (data encapsulated 64 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ PATH-DATA TLV, length 56 (data encapsulated 52 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 0
+ PATH-DATA TLV, length 44 (data encapsulated 40 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ PATH-DATA TLV, length 32 (data encapsulated 28 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 0
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0a00 0001
+ ]
+
+
+23:39:08.410057 IP (tos 0x2,ECT(0), ttl 64, id 7, offset 0, flags [DF], proto SCTP (132), length 108)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2958179472] [SID: 0] [SSEQ 3] [PPID 0x0]
+ ForCES Config Response
+ ForCES Version 1 len 60B flags 0x38400000
+ SrcID 0x3(FE) DstID 0x40000001(CE) Correlator 0x3
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 36 (data length 32 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV SetResp(0x3) length 24
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ RESULT TLV (Length 8 DataLen 4 Bytes)
+ Result: SUCCESS (code 0x0)
+
+
+23:39:08.606148 IP (tos 0x2,ECT(0), ttl 64, id 8, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1811362567] [a_rwnd 55264] [#gap acks 0] [#dup tsns 0]
+23:39:08.610452 IP (tos 0x2,ECT(0), ttl 64, id 7, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2958179472] [a_rwnd 54760] [#gap acks 0] [#dup tsns 0]
+23:39:10.517887 IP (tos 0x2,ECT(0), ttl 64, id 8, offset 0, flags [DF], proto SCTP (132), length 156)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1811362568] [SID: 0] [SSEQ 4] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 108B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x3(FE) Correlator 0x4
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 84 (data length 80 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV Set(0x1) length 72
+ PATH-DATA TLV, length 68 (data encapsulated 64 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ PATH-DATA TLV, length 56 (data encapsulated 52 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 0
+ PATH-DATA TLV, length 44 (data encapsulated 40 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ PATH-DATA TLV, length 32 (data encapsulated 28 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 0
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0000 0008
+ ]
+
+
+23:39:10.521718 IP (tos 0x2,ECT(0), ttl 64, id 9, offset 0, flags [DF], proto SCTP (132), length 108)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2958179473] [SID: 0] [SSEQ 4] [PPID 0x0]
+ ForCES Config Response
+ ForCES Version 1 len 60B flags 0x38400000
+ SrcID 0x3(FE) DstID 0x40000001(CE) Correlator 0x4
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 36 (data length 32 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV SetResp(0x3) length 24
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ RESULT TLV (Length 8 DataLen 4 Bytes)
+ Result: SUCCESS (code 0x0)
+
+
+23:39:10.717774 IP (tos 0x2,ECT(0), ttl 64, id 10, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1811362568] [a_rwnd 55264] [#gap acks 0] [#dup tsns 0]
+23:39:10.721988 IP (tos 0x2,ECT(0), ttl 64, id 9, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2958179473] [a_rwnd 54760] [#gap acks 0] [#dup tsns 0]
+23:39:12.997636 IP (tos 0x2,ECT(0), ttl 64, id 10, offset 0, flags [DF], proto SCTP (132), length 160)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1811362569] [SID: 0] [SSEQ 5] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 112B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x3(FE) Correlator 0x5
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 88 (data length 84 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV Set(0x1) length 76
+ PATH-DATA TLV, length 72 (data encapsulated 68 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ PATH-DATA TLV, length 60 (data encapsulated 56 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 0
+ PATH-DATA TLV, length 48 (data encapsulated 44 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ PATH-DATA TLV, length 36 (data encapsulated 32 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 0
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 3
+ FULLDATA TLV (Length 10 DataLen 6 pad 2 Bytes)
+ [
+ 0x0000: 0002 0406 080a 0000
+ ]
+
+
+23:39:13.001457 IP (tos 0x2,ECT(0), ttl 64, id 11, offset 0, flags [DF], proto SCTP (132), length 108)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2958179474] [SID: 0] [SSEQ 5] [PPID 0x0]
+ ForCES Config Response
+ ForCES Version 1 len 60B flags 0x38400000
+ SrcID 0x3(FE) DstID 0x40000001(CE) Correlator 0x5
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 36 (data length 32 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV SetResp(0x3) length 24
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ RESULT TLV (Length 8 DataLen 4 Bytes)
+ Result: SUCCESS (code 0x0)
+
+
+23:39:13.197325 IP (tos 0x2,ECT(0), ttl 64, id 12, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1811362569] [a_rwnd 55264] [#gap acks 0] [#dup tsns 0]
+23:39:13.201336 IP (tos 0x2,ECT(0), ttl 64, id 11, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2958179474] [a_rwnd 54760] [#gap acks 0] [#dup tsns 0]
+23:39:15.389357 IP (tos 0x2,ECT(0), ttl 64, id 12, offset 0, flags [DF], proto SCTP (132), length 200)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1811362570] [SID: 0] [SSEQ 6] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 152B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x3(FE) Correlator 0x6
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 128 (data length 124 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV Set(0x1) length 116
+ PATH-DATA TLV, length 112 (data encapsulated 108 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ PATH-DATA TLV, length 100 (data encapsulated 96 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 0
+ PATH-DATA TLV, length 88 (data encapsulated 84 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ PATH-DATA TLV, length 76 (data encapsulated 72 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 1400 0001
+ ]
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0000 000c
+ ]
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 3
+ FULLDATA TLV (Length 10 DataLen 6 pad 2 Bytes)
+ [
+ 0x0000: 0003 0609 0c0f 0000
+ ]
+
+
+23:39:15.393377 IP (tos 0x2,ECT(0), ttl 64, id 13, offset 0, flags [DF], proto SCTP (132), length 108)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2958179475] [SID: 0] [SSEQ 6] [PPID 0x0]
+ ForCES Config Response
+ ForCES Version 1 len 60B flags 0x38400000
+ SrcID 0x3(FE) DstID 0x40000001(CE) Correlator 0x6
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 36 (data length 32 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV SetResp(0x3) length 24
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ RESULT TLV (Length 8 DataLen 4 Bytes)
+ Result: SUCCESS (code 0x0)
+
+
+23:39:15.588896 IP (tos 0x2,ECT(0), ttl 64, id 14, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1811362570] [a_rwnd 55264] [#gap acks 0] [#dup tsns 0]
+23:39:15.592787 IP (tos 0x2,ECT(0), ttl 64, id 13, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2958179475] [a_rwnd 54760] [#gap acks 0] [#dup tsns 0]
+23:39:18.045055 IP (tos 0x2,ECT(0), ttl 64, id 14, offset 0, flags [DF], proto SCTP (132), length 220)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1811362571] [SID: 0] [SSEQ 7] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 172B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x3(FE) Correlator 0x7
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 148 (data length 144 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV Set(0x1) length 136
+ PATH-DATA TLV, length 132 (data encapsulated 128 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ PATH-DATA TLV, length 120 (data encapsulated 116 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0000 0003
+ ]
+ PATH-DATA TLV, length 88 (data encapsulated 84 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ PATH-DATA TLV, length 76 (data encapsulated 72 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 0
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 1e00 0001
+ ]
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ FULLDATA TLV (Length 8 DataLen 4 Bytes)
+ [
+ 0x0000: 0000 000d
+ ]
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 3
+ FULLDATA TLV (Length 10 DataLen 6 pad 2 Bytes)
+ [
+ 0x0000: 0004 080c 1014 0000
+ ]
+
+
+23:39:18.049369 IP (tos 0x2,ECT(0), ttl 64, id 15, offset 0, flags [DF], proto SCTP (132), length 108)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2958179476] [SID: 0] [SSEQ 7] [PPID 0x0]
+ ForCES Config Response
+ ForCES Version 1 len 60B flags 0x38400000
+ SrcID 0x3(FE) DstID 0x40000001(CE) Correlator 0x7
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 36 (data length 32 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV SetResp(0x3) length 24
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ RESULT TLV (Length 8 DataLen 4 Bytes)
+ Result: SUCCESS (code 0x0)
+
+
+23:39:18.244425 IP (tos 0x2,ECT(0), ttl 64, id 16, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1811362571] [a_rwnd 55264] [#gap acks 0] [#dup tsns 0]
+23:39:18.248927 IP (tos 0x2,ECT(0), ttl 64, id 15, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2958179476] [a_rwnd 54760] [#gap acks 0] [#dup tsns 0]
+23:39:20.060819 IP (tos 0x2,ECT(0), ttl 64, id 16, offset 0, flags [DF], proto SCTP (132), length 136)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1811362572] [SID: 0] [SSEQ 8] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 88B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x3(FE) Correlator 0x8
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 64 (data length 60 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV Del(0x5) length 52
+ PATH-DATA TLV, length 48 (data encapsulated 44 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ PATH-DATA TLV, length 36 (data encapsulated 32 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 0
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+ PATH-DATA TLV, length 12 (data encapsulated 8 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+
+
+23:39:20.065279 IP (tos 0x2,ECT(0), ttl 64, id 17, offset 0, flags [DF], proto SCTP (132), length 108)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2958179477] [SID: 0] [SSEQ 8] [PPID 0x0]
+ ForCES Config Response
+ ForCES Version 1 len 60B flags 0x38400000
+ SrcID 0x3(FE) DstID 0x40000001(CE) Correlator 0x8
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 36 (data length 32 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV DelResp(0x6) length 24
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ RESULT TLV (Length 8 DataLen 4 Bytes)
+ Result: SUCCESS (code 0x0)
+
+
+23:39:20.260061 IP (tos 0x2,ECT(0), ttl 64, id 18, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1811362572] [a_rwnd 55264] [#gap acks 0] [#dup tsns 0]
+23:39:20.265566 IP (tos 0x2,ECT(0), ttl 64, id 17, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2958179477] [a_rwnd 54760] [#gap acks 0] [#dup tsns 0]
+23:39:22.796350 IP (tos 0x2,ECT(0), ttl 64, id 18, offset 0, flags [DF], proto SCTP (132), length 112)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 1811362573] [SID: 0] [SSEQ 9] [PPID 0x0]
+ ForCES Config
+ ForCES Version 1 len 64B flags 0xf8400000
+ SrcID 0x40000001(CE) DstID 0x3(FE) Correlator 0x9
+ ForCES flags:
+ AlwaysACK(0x3), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 40 (data length 36 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV Del(0x5) length 28
+ PATH-DATA TLV, length 24 (data encapsulated 20 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ PATH-DATA TLV, length 12 (data encapsulated 8 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 2
+
+
+23:39:22.800525 IP (tos 0x2,ECT(0), ttl 64, id 19, offset 0, flags [DF], proto SCTP (132), length 108)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [DATA] (B)(E) [TSN: 2958179478] [SID: 0] [SSEQ 9] [PPID 0x0]
+ ForCES Config Response
+ ForCES Version 1 len 60B flags 0x38400000
+ SrcID 0x3(FE) DstID 0x40000001(CE) Correlator 0x9
+ ForCES flags:
+ NoACK(0x0), prio=7, execute-all-or-none(0x1),
+ Standalone(0x0), StartofTransaction(0x0)
+ Extra flags: rsv(b5-7) 0x0 rsv(b13-31) 0x0
+ LFBselect TLV, length 36 (data length 32 Bytes)
+ #14(Classid e) instance 1
+ Oper TLV DelResp(0x6) length 24
+ PATH-DATA TLV, length 20 (data encapsulated 16 Bytes)
+ Pathdata: Flags 0x0 ID count 1
+ ID#01: 1
+ RESULT TLV (Length 8 DataLen 4 Bytes)
+ Result: SUCCESS (code 0x0)
+
+
+23:39:22.995584 IP (tos 0x2,ECT(0), ttl 64, id 20, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.63.16700 > 172.20.4.93.6700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 1811362573] [a_rwnd 55264] [#gap acks 0] [#dup tsns 0]
+23:39:23.001212 IP (tos 0x2,ECT(0), ttl 64, id 19, offset 0, flags [DF], proto SCTP (132), length 48)
+ 172.20.4.93.6700 > 172.20.4.63.16700: sctp[ForCES HP]
+ 1) [SACK] [cum ack 2958179478] [a_rwnd 54760] [#gap acks 0] [#dup tsns 0]
diff --git a/tests/frf15-heapoverflow.out b/tests/frf15-heapoverflow.out
new file mode 100644
index 0000000..0a36ebc
--- /dev/null
+++ b/tests/frf15-heapoverflow.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 UI 30! [|fr]
diff --git a/tests/frf15-heapoverflow.pcap b/tests/frf15-heapoverflow.pcap
new file mode 100644
index 0000000..d56ef1f
--- /dev/null
+++ b/tests/frf15-heapoverflow.pcap
Binary files differ
diff --git a/tests/frf16_magic_ie-oobr.out b/tests/frf16_magic_ie-oobr.out
new file mode 100644
index 0000000..3bdf2a2
--- /dev/null
+++ b/tests/frf16_magic_ie-oobr.out
@@ -0,0 +1,2 @@
+ 1 [Error converting time] FRF.16 Control, Flags [Begin, End, Control], Unknown Message (0x00), length 262144
+ IE Magic Number (3), length 3: [IE data length 1 != 4] (invalid) [|mfr]
diff --git a/tests/frf16_magic_ie-oobr.pcap b/tests/frf16_magic_ie-oobr.pcap
new file mode 100644
index 0000000..2963a50
--- /dev/null
+++ b/tests/frf16_magic_ie-oobr.pcap
Binary files differ
diff --git a/tests/geneve-tcp.out b/tests/geneve-tcp.out
new file mode 100644
index 0000000..8b33673
--- /dev/null
+++ b/tests/geneve-tcp.out
@@ -0,0 +1,33 @@
+ 1 22:04:33.999279 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [S], seq 397610159, win 14600, options [mss 1460,sackOK,TS val 2876069566 ecr 0,nop,wscale 7], length 0
+ 2 22:04:33.999327 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [S.], seq 2910871522, ack 397610160, win 28960, options [mss 1460,sackOK,TS val 84248969 ecr 2876069566,nop,wscale 7], length 0
+ 3 22:04:33.999513 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], ack 1, win 115, options [nop,nop,TS val 2876069566 ecr 84248969], length 0
+ 4 22:04:34.006164 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], seq 1:40, ack 1, win 227, options [nop,nop,TS val 84248971 ecr 2876069566], length 39: SSH: SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1
+ 5 22:04:34.006357 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], ack 40, win 115, options [nop,nop,TS val 2876069573 ecr 84248971], length 0
+ 6 22:04:34.006387 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 1:22, ack 40, win 115, options [nop,nop,TS val 2876069573 ecr 84248971], length 21: SSH: SSH-2.0-OpenSSH_5.3
+ 7 22:04:34.006457 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [.], ack 22, win 227, options [nop,nop,TS val 84248971 ecr 2876069573], length 0
+ 8 22:04:34.006523 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 22:814, ack 40, win 115, options [nop,nop,TS val 2876069573 ecr 84248971], length 792
+ 9 22:04:34.006560 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [.], ack 814, win 239, options [nop,nop,TS val 84248971 ecr 2876069573], length 0
+ 10 22:04:34.007148 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], seq 40:1024, ack 814, win 239, options [nop,nop,TS val 84248971 ecr 2876069573], length 984
+ 11 22:04:34.007397 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 814:838, ack 1024, win 130, options [nop,nop,TS val 2876069574 ecr 84248971], length 24
+ 12 22:04:34.009381 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], seq 1024:1176, ack 838, win 239, options [nop,nop,TS val 84248972 ecr 2876069574], length 152
+ 13 22:04:34.010470 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 838:982, ack 1176, win 145, options [nop,nop,TS val 2876069577 ecr 84248972], length 144
+ 14 22:04:34.014495 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], seq 1176:1896, ack 982, win 251, options [nop,nop,TS val 84248973 ecr 2876069577], length 720
+ 15 22:04:34.015904 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 982:998, ack 1896, win 161, options [nop,nop,TS val 2876069583 ecr 84248973], length 16
+ 16 22:04:34.053136 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [.], ack 998, win 251, options [nop,nop,TS val 84248983 ecr 2876069583], length 0
+ 17 22:04:34.053378 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 998:1046, ack 1896, win 161, options [nop,nop,TS val 2876069620 ecr 84248983], length 48
+ 18 22:04:34.053418 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [.], ack 1046, win 251, options [nop,nop,TS val 84248983 ecr 2876069620], length 0
+ 19 22:04:34.053523 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], seq 1896:1944, ack 1046, win 251, options [nop,nop,TS val 84248983 ecr 2876069620], length 48
+ 20 22:04:34.053708 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 1046:1110, ack 1944, win 161, options [nop,nop,TS val 2876069621 ecr 84248983], length 64
+ 21 22:04:34.054967 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], seq 1944:2008, ack 1110, win 251, options [nop,nop,TS val 84248983 ecr 2876069621], length 64
+ 22 22:04:34.094717 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], ack 2008, win 161, options [nop,nop,TS val 2876069662 ecr 84248983], length 0
+ 23 22:04:35.277947 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 1110:1254, ack 2008, win 161, options [nop,nop,TS val 2876070845 ecr 84248983], length 144
+ 24 22:04:35.278922 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], seq 2008:2040, ack 1254, win 264, options [nop,nop,TS val 84249289 ecr 2876070845], length 32
+ 25 22:04:35.279142 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], ack 2040, win 161, options [nop,nop,TS val 2876070846 ecr 84249289], length 0
+ 26 22:04:35.279158 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 1254:1382, ack 2040, win 161, options [nop,nop,TS val 2876070846 ecr 84249289], length 128
+ 27 22:04:35.291826 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], seq 2040:2088, ack 1382, win 276, options [nop,nop,TS val 84249292 ecr 2876070846], length 48
+ 28 22:04:35.292151 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 1382:1830, ack 2088, win 161, options [nop,nop,TS val 2876070859 ecr 84249292], length 448
+ 29 22:04:35.292719 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], seq 2088:2200, ack 1830, win 289, options [nop,nop,TS val 84249292 ecr 2876070859], length 112
+ 30 22:04:35.293908 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], seq 2200:2488, ack 1830, win 289, options [nop,nop,TS val 84249293 ecr 2876070859], length 288
+ 31 22:04:35.294109 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], ack 2488, win 176, options [nop,nop,TS val 2876070861 ecr 84249292], length 0
+ 32 22:04:35.526040 IP 20.0.0.1.22540 > 20.0.0.2.6081: Geneve, Flags [C], vni 0xa, options [8 bytes]: IP 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], seq 2488:2568, ack 1830, win 289, options [nop,nop,TS val 84249351 ecr 2876070861], length 80
+ 33 22:04:35.565723 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], ack 2568, win 176, options [nop,nop,TS val 2876071133 ecr 84249351], length 0
diff --git a/tests/geneve-vni.out b/tests/geneve-vni.out
new file mode 100644
index 0000000..c5b6c9e
--- /dev/null
+++ b/tests/geneve-vni.out
@@ -0,0 +1,20 @@
+ 1 22:04:33.817454 IP 20.0.0.2.50525 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2 > 30.0.0.1: ICMP echo reply, id 10578, seq 23, length 64
+ 2 22:04:33.999279 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [S], seq 397610159, win 14600, options [mss 1460,sackOK,TS val 2876069566 ecr 0,nop,wscale 7], length 0
+ 3 22:04:33.999513 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], ack 2910871523, win 115, options [nop,nop,TS val 2876069566 ecr 84248969], length 0
+ 4 22:04:34.006357 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], ack 40, win 115, options [nop,nop,TS val 2876069573 ecr 84248971], length 0
+ 5 22:04:34.006387 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 0:21, ack 40, win 115, options [nop,nop,TS val 2876069573 ecr 84248971], length 21: SSH: SSH-2.0-OpenSSH_5.3
+ 6 22:04:34.006523 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 21:813, ack 40, win 115, options [nop,nop,TS val 2876069573 ecr 84248971], length 792
+ 7 22:04:34.007397 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 813:837, ack 1024, win 130, options [nop,nop,TS val 2876069574 ecr 84248971], length 24
+ 8 22:04:34.010470 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 837:981, ack 1176, win 145, options [nop,nop,TS val 2876069577 ecr 84248972], length 144
+ 9 22:04:34.015904 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 981:997, ack 1896, win 161, options [nop,nop,TS val 2876069583 ecr 84248973], length 16
+ 10 22:04:34.053378 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 997:1045, ack 1896, win 161, options [nop,nop,TS val 2876069620 ecr 84248983], length 48
+ 11 22:04:34.053708 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 1045:1109, ack 1944, win 161, options [nop,nop,TS val 2876069621 ecr 84248983], length 64
+ 12 22:04:34.094717 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], ack 2008, win 161, options [nop,nop,TS val 2876069662 ecr 84248983], length 0
+ 13 22:04:34.817457 IP 20.0.0.2.50525 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2 > 30.0.0.1: ICMP echo reply, id 10578, seq 24, length 64
+ 14 22:04:35.277947 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 1109:1253, ack 2008, win 161, options [nop,nop,TS val 2876070845 ecr 84248983], length 144
+ 15 22:04:35.279142 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], ack 2040, win 161, options [nop,nop,TS val 2876070846 ecr 84249289], length 0
+ 16 22:04:35.279158 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 1253:1381, ack 2040, win 161, options [nop,nop,TS val 2876070846 ecr 84249289], length 128
+ 17 22:04:35.292151 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], seq 1381:1829, ack 2088, win 161, options [nop,nop,TS val 2876070859 ecr 84249292], length 448
+ 18 22:04:35.294109 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], ack 2488, win 176, options [nop,nop,TS val 2876070861 ecr 84249292], length 0
+ 19 22:04:35.565723 IP 20.0.0.2.43443 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], ack 2568, win 176, options [nop,nop,TS val 2876071133 ecr 84249351], length 0
+ 20 22:04:35.817506 IP 20.0.0.2.50525 > 20.0.0.1.6081: Geneve, Flags [none], vni 0xb: IP 30.0.0.2 > 30.0.0.1: ICMP echo reply, id 10578, seq 25, length 64
diff --git a/tests/geneve-vv.out b/tests/geneve-vv.out
new file mode 100644
index 0000000..d19ec4d
--- /dev/null
+++ b/tests/geneve-vv.out
@@ -0,0 +1,156 @@
+ 1 22:04:33.817203 IP (tos 0x0, ttl 64, id 57261, offset 0, flags [DF], proto UDP (17), length 142)
+ 20.0.0.1.12618 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 48546, offset 0, flags [DF], proto ICMP (1), length 84)
+ 30.0.0.1 > 30.0.0.2: ICMP echo request, id 10578, seq 23, length 64
+ 2 22:04:33.817454 IP (tos 0x0, ttl 64, id 34821, offset 0, flags [DF], proto UDP (17), length 134)
+ 20.0.0.2.50525 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 4595, offset 0, flags [none], proto ICMP (1), length 84)
+ 30.0.0.2 > 30.0.0.1: ICMP echo reply, id 10578, seq 23, length 64
+ 3 22:04:33.999279 IP (tos 0x0, ttl 64, id 34822, offset 0, flags [DF], proto UDP (17), length 110)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23057, offset 0, flags [DF], proto TCP (6), length 60)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [S], cksum 0xe437 (correct), seq 397610159, win 14600, options [mss 1460,sackOK,TS val 2876069566 ecr 0,nop,wscale 7], length 0
+ 4 22:04:33.999327 IP (tos 0x0, ttl 64, id 57274, offset 0, flags [DF], proto UDP (17), length 118)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [S.], cksum 0x101d (correct), seq 2910871522, ack 397610160, win 28960, options [mss 1460,sackOK,TS val 84248969 ecr 2876069566,nop,wscale 7], length 0
+ 5 22:04:33.999513 IP (tos 0x0, ttl 64, id 34823, offset 0, flags [DF], proto UDP (17), length 102)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23058, offset 0, flags [DF], proto TCP (6), length 52)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], cksum 0xaf96 (correct), seq 1, ack 1, win 115, options [nop,nop,TS val 2876069566 ecr 84248969], length 0
+ 6 22:04:34.006164 IP (tos 0x0, ttl 64, id 57275, offset 0, flags [DF], proto UDP (17), length 149)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54890, offset 0, flags [DF], proto TCP (6), length 91)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], cksum 0xf103 (correct), seq 1:40, ack 1, win 227, options [nop,nop,TS val 84248971 ecr 2876069566], length 39: SSH: SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1
+ 7 22:04:34.006357 IP (tos 0x0, ttl 64, id 34824, offset 0, flags [DF], proto UDP (17), length 102)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23059, offset 0, flags [DF], proto TCP (6), length 52)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], cksum 0xaf66 (correct), seq 1, ack 40, win 115, options [nop,nop,TS val 2876069573 ecr 84248971], length 0
+ 8 22:04:34.006387 IP (tos 0x0, ttl 64, id 34825, offset 0, flags [DF], proto UDP (17), length 123)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23060, offset 0, flags [DF], proto TCP (6), length 73)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], cksum 0xeea0 (correct), seq 1:22, ack 40, win 115, options [nop,nop,TS val 2876069573 ecr 84248971], length 21: SSH: SSH-2.0-OpenSSH_5.3
+ 9 22:04:34.006457 IP (tos 0x0, ttl 64, id 57276, offset 0, flags [DF], proto UDP (17), length 110)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54891, offset 0, flags [DF], proto TCP (6), length 52)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [.], cksum 0xaee1 (correct), seq 40, ack 22, win 227, options [nop,nop,TS val 84248971 ecr 2876069573], length 0
+ 10 22:04:34.006523 IP (tos 0x0, ttl 64, id 34826, offset 0, flags [DF], proto UDP (17), length 894)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23061, offset 0, flags [DF], proto TCP (6), length 844)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], cksum 0xe70f (correct), seq 22:814, ack 40, win 115, options [nop,nop,TS val 2876069573 ecr 84248971], length 792
+ 11 22:04:34.006560 IP (tos 0x0, ttl 64, id 57277, offset 0, flags [DF], proto UDP (17), length 110)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54892, offset 0, flags [DF], proto TCP (6), length 52)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [.], cksum 0xabbd (correct), seq 40, ack 814, win 239, options [nop,nop,TS val 84248971 ecr 2876069573], length 0
+ 12 22:04:34.007148 IP (tos 0x0, ttl 64, id 57278, offset 0, flags [DF], proto UDP (17), length 1094)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54893, offset 0, flags [DF], proto TCP (6), length 1036)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], cksum 0xb8b1 (correct), seq 40:1024, ack 814, win 239, options [nop,nop,TS val 84248971 ecr 2876069573], length 984
+ 13 22:04:34.007397 IP (tos 0x0, ttl 64, id 34827, offset 0, flags [DF], proto UDP (17), length 126)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23062, offset 0, flags [DF], proto TCP (6), length 76)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], cksum 0x79fb (correct), seq 814:838, ack 1024, win 130, options [nop,nop,TS val 2876069574 ecr 84248971], length 24
+ 14 22:04:34.009381 IP (tos 0x0, ttl 64, id 57279, offset 0, flags [DF], proto UDP (17), length 262)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54894, offset 0, flags [DF], proto TCP (6), length 204)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], cksum 0xa779 (correct), seq 1024:1176, ack 838, win 239, options [nop,nop,TS val 84248972 ecr 2876069574], length 152
+ 15 22:04:34.010470 IP (tos 0x0, ttl 64, id 34828, offset 0, flags [DF], proto UDP (17), length 246)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23063, offset 0, flags [DF], proto TCP (6), length 196)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], cksum 0xecb6 (correct), seq 838:982, ack 1176, win 145, options [nop,nop,TS val 2876069577 ecr 84248972], length 144
+ 16 22:04:34.014495 IP (tos 0x0, ttl 64, id 57280, offset 0, flags [DF], proto UDP (17), length 830)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54895, offset 0, flags [DF], proto TCP (6), length 772)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], cksum 0x6255 (correct), seq 1176:1896, ack 982, win 251, options [nop,nop,TS val 84248973 ecr 2876069577], length 720
+ 17 22:04:34.015904 IP (tos 0x0, ttl 64, id 34829, offset 0, flags [DF], proto UDP (17), length 118)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23064, offset 0, flags [DF], proto TCP (6), length 68)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], cksum 0x99de (correct), seq 982:998, ack 1896, win 161, options [nop,nop,TS val 2876069583 ecr 84248973], length 16
+ 18 22:04:34.053136 IP (tos 0x0, ttl 64, id 57288, offset 0, flags [DF], proto UDP (17), length 110)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54896, offset 0, flags [DF], proto TCP (6), length 52)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [.], cksum 0xa3a3 (correct), seq 1896, ack 998, win 251, options [nop,nop,TS val 84248983 ecr 2876069583], length 0
+ 19 22:04:34.053378 IP (tos 0x0, ttl 64, id 34830, offset 0, flags [DF], proto UDP (17), length 150)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23065, offset 0, flags [DF], proto TCP (6), length 100)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], cksum 0xb953 (correct), seq 998:1046, ack 1896, win 161, options [nop,nop,TS val 2876069620 ecr 84248983], length 48
+ 20 22:04:34.053418 IP (tos 0x0, ttl 64, id 57289, offset 0, flags [DF], proto UDP (17), length 110)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54897, offset 0, flags [DF], proto TCP (6), length 52)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [.], cksum 0xa34e (correct), seq 1896, ack 1046, win 251, options [nop,nop,TS val 84248983 ecr 2876069620], length 0
+ 21 22:04:34.053523 IP (tos 0x0, ttl 64, id 57290, offset 0, flags [DF], proto UDP (17), length 158)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54898, offset 0, flags [DF], proto TCP (6), length 100)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], cksum 0xd5ed (correct), seq 1896:1944, ack 1046, win 251, options [nop,nop,TS val 84248983 ecr 2876069620], length 48
+ 22 22:04:34.053708 IP (tos 0x0, ttl 64, id 34831, offset 0, flags [DF], proto UDP (17), length 166)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23066, offset 0, flags [DF], proto TCP (6), length 116)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], cksum 0xf2f0 (correct), seq 1046:1110, ack 1944, win 161, options [nop,nop,TS val 2876069621 ecr 84248983], length 64
+ 23 22:04:34.054967 IP (tos 0x0, ttl 64, id 57291, offset 0, flags [DF], proto UDP (17), length 174)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54899, offset 0, flags [DF], proto TCP (6), length 116)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], cksum 0x4ac6 (correct), seq 1944:2008, ack 1110, win 251, options [nop,nop,TS val 84248983 ecr 2876069621], length 64
+ 24 22:04:34.094717 IP (tos 0x0, ttl 64, id 34832, offset 0, flags [DF], proto UDP (17), length 102)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23067, offset 0, flags [DF], proto TCP (6), length 52)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], cksum 0xa2ce (correct), seq 1110, ack 2008, win 161, options [nop,nop,TS val 2876069662 ecr 84248983], length 0
+ 25 22:04:34.817272 IP (tos 0x0, ttl 64, id 57466, offset 0, flags [DF], proto UDP (17), length 142)
+ 20.0.0.1.12618 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 48621, offset 0, flags [DF], proto ICMP (1), length 84)
+ 30.0.0.1 > 30.0.0.2: ICMP echo request, id 10578, seq 24, length 64
+ 26 22:04:34.817457 IP (tos 0x0, ttl 64, id 34833, offset 0, flags [DF], proto UDP (17), length 134)
+ 20.0.0.2.50525 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 4596, offset 0, flags [none], proto ICMP (1), length 84)
+ 30.0.0.2 > 30.0.0.1: ICMP echo reply, id 10578, seq 24, length 64
+ 27 22:04:35.277947 IP (tos 0x0, ttl 64, id 34834, offset 0, flags [DF], proto UDP (17), length 246)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23068, offset 0, flags [DF], proto TCP (6), length 196)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], cksum 0x318f (correct), seq 1110:1254, ack 2008, win 161, options [nop,nop,TS val 2876070845 ecr 84248983], length 144
+ 28 22:04:35.278922 IP (tos 0x0, ttl 64, id 57567, offset 0, flags [DF], proto UDP (17), length 142)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54900, offset 0, flags [DF], proto TCP (6), length 84)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], cksum 0x3a95 (correct), seq 2008:2040, ack 1254, win 264, options [nop,nop,TS val 84249289 ecr 2876070845], length 32
+ 29 22:04:35.279142 IP (tos 0x0, ttl 64, id 34835, offset 0, flags [DF], proto UDP (17), length 102)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23069, offset 0, flags [DF], proto TCP (6), length 52)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], cksum 0x9c4c (correct), seq 1254, ack 2040, win 161, options [nop,nop,TS val 2876070846 ecr 84249289], length 0
+ 30 22:04:35.279158 IP (tos 0x0, ttl 64, id 34836, offset 0, flags [DF], proto UDP (17), length 230)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 23070, offset 0, flags [DF], proto TCP (6), length 180)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], cksum 0x31d7 (correct), seq 1254:1382, ack 2040, win 161, options [nop,nop,TS val 2876070846 ecr 84249289], length 128
+ 31 22:04:35.291826 IP (tos 0x0, ttl 64, id 57570, offset 0, flags [DF], proto UDP (17), length 158)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54901, offset 0, flags [DF], proto TCP (6), length 100)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], cksum 0x8215 (correct), seq 2040:2088, ack 1382, win 276, options [nop,nop,TS val 84249292 ecr 2876070846], length 48
+ 32 22:04:35.292151 IP (tos 0x0, ttl 64, id 34837, offset 0, flags [DF], proto UDP (17), length 550)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x10, ttl 64, id 23071, offset 0, flags [DF], proto TCP (6), length 500)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [P.], cksum 0x5e86 (correct), seq 1382:1830, ack 2088, win 161, options [nop,nop,TS val 2876070859 ecr 84249292], length 448
+ 33 22:04:35.292719 IP (tos 0x0, ttl 64, id 57571, offset 0, flags [DF], proto UDP (17), length 222)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54902, offset 0, flags [DF], proto TCP (6), length 164)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], cksum 0x2c83 (correct), seq 2088:2200, ack 1830, win 289, options [nop,nop,TS val 84249292 ecr 2876070859], length 112
+ 34 22:04:35.293908 IP (tos 0x0, ttl 64, id 57572, offset 0, flags [DF], proto UDP (17), length 398)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54903, offset 0, flags [DF], proto TCP (6), length 340)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], cksum 0xbe0e (correct), seq 2200:2488, ack 1830, win 289, options [nop,nop,TS val 84249293 ecr 2876070859], length 288
+ 35 22:04:35.294109 IP (tos 0x0, ttl 64, id 34838, offset 0, flags [DF], proto UDP (17), length 102)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x10, ttl 64, id 23072, offset 0, flags [DF], proto TCP (6), length 52)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], cksum 0x982b (correct), seq 1830, ack 2488, win 176, options [nop,nop,TS val 2876070861 ecr 84249292], length 0
+ 36 22:04:35.526040 IP (tos 0x0, ttl 64, id 57627, offset 0, flags [DF], proto UDP (17), length 190)
+ 20.0.0.1.22540 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 54904, offset 0, flags [DF], proto TCP (6), length 132)
+ 30.0.0.1.22 > 30.0.0.2.51225: Flags [P.], cksum 0x3d51 (correct), seq 2488:2568, ack 1830, win 289, options [nop,nop,TS val 84249351 ecr 2876070861], length 80
+ 37 22:04:35.565723 IP (tos 0x0, ttl 64, id 34839, offset 0, flags [DF], proto UDP (17), length 102)
+ 20.0.0.2.43443 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x10, ttl 64, id 23073, offset 0, flags [DF], proto TCP (6), length 52)
+ 30.0.0.2.51225 > 30.0.0.1.22: Flags [.], cksum 0x9690 (correct), seq 1830, ack 2568, win 176, options [nop,nop,TS val 2876071133 ecr 84249351], length 0
+ 38 22:04:35.817309 IP (tos 0x0, ttl 64, id 57691, offset 0, flags [DF], proto UDP (17), length 142)
+ 20.0.0.1.12618 > 20.0.0.2.6081: [no cksum] Geneve, Flags [C], vni 0xa, options [class Standard (0x0) type 0x80(C) len 8 data 0000000c]
+ IP (tos 0x0, ttl 64, id 48733, offset 0, flags [DF], proto ICMP (1), length 84)
+ 30.0.0.1 > 30.0.0.2: ICMP echo request, id 10578, seq 25, length 64
+ 39 22:04:35.817506 IP (tos 0x0, ttl 64, id 34840, offset 0, flags [DF], proto UDP (17), length 134)
+ 20.0.0.2.50525 > 20.0.0.1.6081: [no cksum] Geneve, Flags [none], vni 0xb
+ IP (tos 0x0, ttl 64, id 4597, offset 0, flags [none], proto ICMP (1), length 84)
+ 30.0.0.2 > 30.0.0.1: ICMP echo reply, id 10578, seq 25, length 64
diff --git a/tests/geneve.pcap b/tests/geneve.pcap
new file mode 100644
index 0000000..2795493
--- /dev/null
+++ b/tests/geneve.pcap
Binary files differ
diff --git a/tests/geonet-mac-lookup-heapoverflow.out b/tests/geonet-mac-lookup-heapoverflow.out
new file mode 100644
index 0000000..a683cb1
--- /dev/null
+++ b/tests/geonet-mac-lookup-heapoverflow.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 GeoNet src:30:30:30:30:30:30; v:3 NH:0-Any HT:3-0-GeoAnycastCircle HopLim:48 Payload:12336 [|geonet]
diff --git a/tests/geonet-mac-lookup-heapoverflow.pcap b/tests/geonet-mac-lookup-heapoverflow.pcap
new file mode 100644
index 0000000..33794c5
--- /dev/null
+++ b/tests/geonet-mac-lookup-heapoverflow.pcap
Binary files differ
diff --git a/tests/geonet_and_calm_fast.out b/tests/geonet_and_calm_fast.out
new file mode 100644
index 0000000..790be6e
--- /dev/null
+++ b/tests/geonet_and_calm_fast.out
@@ -0,0 +1,169 @@
+ 1 13:35:05.507325 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 2 13:35:05.718861 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769562 lon:56597275
+ 3 13:35:05.777474 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770788 lon:56598784
+ 4 13:35:06.007432 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 5 13:35:06.219016 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769562 lon:56597275
+ 6 13:35:06.277604 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770788 lon:56598784
+ 7 13:35:06.507582 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 8 13:35:06.719132 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769562 lon:56597275
+ 9 13:35:06.777738 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770822 lon:56598670
+ 10 13:35:07.007687 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 11 13:35:07.219270 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769562 lon:56597275
+ 12 13:35:07.277896 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770711 lon:56598670
+ 13 13:35:07.507841 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 14 13:35:07.719401 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769562 lon:56597275
+ 15 13:35:07.778007 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770711 lon:56598670
+ 16 13:35:07.945011 GeoNet src:00:0c:42:69:68:be; v:0 NH:1-BTP-A HT:5-1-TopoScopeBcast-MH HopLim:2 Payload:29 GN_ADDR:c0:cc:00:0c:42:69:68:be lat:514775183 lon:56605966; BTP Dst:5000 Src:5000; ItsPduHeader v:0 t:0-CAM
+ 0x0000: 0000 013c f7d0 912d 0000 0019 8400 6bf4 ...<...-......k.
+ 0x0010: d607 abb5 6c80 09f6 00 ....l....
+ 17 13:35:08.007945 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 18 13:35:08.219545 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769429 lon:56597103
+ 19 13:35:08.278153 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770711 lon:56598670
+ 20 13:35:08.423903 CALM FAST src:00:0c:42:69:68:be; SrcNwref:0; DstNwref:0;
+ 0x0000: 0000 01ac 8005 4455 3540 1c02 a2b3 0290 ......DU5@......
+ 0x0010: 2035 6fa0 6041 a4b6 1737 4656 56c2 0547 .5o.`A...7FVV..G
+ 0x0020: 2617 6657 2736 52f5 a756 9646 5696 e646 &.fW'6R..V.FV..F
+ 0x0030: 5020 4047 063f 9300 0030 P.@G.?...0
+ 21 13:35:08.508091 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 22 13:35:08.719667 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769429 lon:56597103
+ 23 13:35:08.778262 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770641 lon:56598655
+ 24 13:35:09.008217 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 25 13:35:09.219821 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769429 lon:56597103
+ 26 13:35:09.278412 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770641 lon:56598655
+ 27 13:35:09.508364 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 28 13:35:09.719925 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769429 lon:56597103
+ 29 13:35:09.778527 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770717 lon:56598526
+ 30 13:35:10.008470 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 31 13:35:10.220084 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769415 lon:56597089
+ 32 13:35:10.278675 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770717 lon:56598526
+ 33 13:35:10.508616 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 34 13:35:10.720201 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769415 lon:56597089
+ 35 13:35:10.778791 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770606 lon:56598526
+ 36 13:35:10.947914 GeoNet src:00:0c:42:69:68:be; v:0 NH:1-BTP-A HT:5-1-TopoScopeBcast-MH HopLim:2 Payload:29 GN_ADDR:c0:cc:00:0c:42:69:68:be lat:514775183 lon:56605966; BTP Dst:5000 Src:5000; ItsPduHeader v:0 t:0-CAM
+ 0x0000: 0000 013c f7d0 9ce7 0000 0019 8400 6bf4 ...<..........k.
+ 0x0010: d607 abb5 6c80 09f6 00 ....l....
+ 37 13:35:11.008754 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 38 13:35:11.220357 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769422 lon:56596946
+ 39 13:35:11.278920 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770606 lon:56598526
+ 40 13:35:11.508878 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 41 13:35:11.720466 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769422 lon:56596946
+ 42 13:35:11.779059 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770620 lon:56598541
+ 43 13:35:11.948910 GeoNet src:00:0c:42:69:68:be; v:0 NH:1-BTP-A HT:5-1-TopoScopeBcast-MH HopLim:2 Payload:29 GN_ADDR:c0:cc:00:0c:42:69:68:be lat:514775183 lon:56605966; BTP Dst:5000 Src:5000; ItsPduHeader v:0 t:0-CAM
+ 0x0000: 0000 013c f7d0 a0d0 0000 0019 8400 6bf4 ...<..........k.
+ 0x0010: d607 abb5 6c80 09f6 00 ....l....
+ 44 13:35:12.009010 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 45 13:35:12.119382 CALM FAST src:00:0c:42:69:68:be; SrcNwref:0; DstNwref:0;
+ 0x0000: 0000 02dc 8005 4455 3540 1c02 0513 04f3 ......DU5@......
+ 0x0010: 0380 2030 0ff8 4020 356f a060 a010 2300 ...0..@.5o.`..#.
+ 0x0020: a020 4512 4d10 e020 202c 9300 c020 402b ..E.M....,....@+
+ 0x0030: 2fc1 5020 4188 be06 5300 6020 1000 2010 /.P.A...S.`.....
+ 0x0040: 0020 1000 2010 00a0 101a 1133 0000 2010 ...........3....
+ 0x0050: 0020 1000 a010 2020 1000 2010 0040 0060 .............@.`
+ 46 13:35:12.220600 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769408 lon:56596932
+ 47 13:35:12.279195 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770514 lon:56598397
+ 48 13:35:12.425827 CALM FAST src:00:0c:42:69:68:be; SrcNwref:0; DstNwref:0;
+ 0x0000: 0000 01ac 8005 4455 3540 1c02 a2b3 0290 ......DU5@......
+ 0x0010: 2035 6fa0 6041 a4b6 1737 4656 56c2 0547 .5o.`A...7FVV..G
+ 0x0020: 2617 6657 2736 52f5 a756 9646 5696 e646 &.fW'6R..V.FV..F
+ 0x0030: 5020 4039 226f 5300 0030 P.@9"oS..0
+ 49 13:35:12.509128 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 50 13:35:12.720727 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769408 lon:56596932
+ 51 13:35:12.779319 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770514 lon:56598397
+ 52 13:35:12.949934 GeoNet src:00:0c:42:69:68:be; v:0 NH:1-BTP-A HT:5-1-TopoScopeBcast-MH HopLim:2 Payload:29 GN_ADDR:c0:cc:00:0c:42:69:68:be lat:514775183 lon:56605966; BTP Dst:5000 Src:5000; ItsPduHeader v:0 t:0-CAM
+ 0x0000: 0000 013c f7d0 a4b9 0000 0019 8400 6bf4 ...<..........k.
+ 0x0010: d607 abb5 6c80 09f6 00 ....l....
+ 53 13:35:13.009262 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 54 13:35:13.220862 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769352 lon:56596932
+ 55 13:35:13.279448 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770514 lon:56598397
+ 56 13:35:13.426273 CALM FAST src:00:0c:42:69:68:be; SrcNwref:0; DstNwref:0;
+ 0x0000: 0000 01ac 8005 4455 3540 1c02 a2b3 0290 ......DU5@......
+ 0x0010: 2035 6fa0 6041 a4b6 1737 4656 56c2 0547 .5o.`A...7FVV..G
+ 0x0020: 2617 6657 2736 52f5 a756 9646 5696 e646 &.fW'6R..V.FV..F
+ 0x0030: 5020 4039 226f 5300 0030 P.@9"oS..0
+ 57 13:35:13.448821 GeoNet src:00:0c:42:69:68:be; v:0 NH:1-BTP-A HT:5-1-TopoScopeBcast-MH HopLim:2 Payload:138 GN_ADDR:c0:cc:00:0c:42:69:68:be lat:514775183 lon:56605966; BTP Dst:6103 Src:6103; ItsPduHeader v:0 t:106-ecoCAM
+ 0x0000: 006a 013c f7d0 a6aa 0000 0066 0026 013c .j.<.......f.&.<
+ 0x0010: f7d0 ba32 0080 0280 00cc 0407 d456 4c00 ...2.........VL.
+ 0x0020: 8000 9e7b e857 2100 9e7b e857 2100 00cc ...{.W!..{.W!...
+ 0x0030: 0407 d4ab cc00 8000 9e7b e85a ed00 9e7b .........{.Z...{
+ 0x0040: e85a ed00 00cc 0407 d501 cc00 8000 9e7b .Z.............{
+ 0x0050: e85e b900 9e7b e85e b900 00cc 0407 d557 .^...{.^.......W
+ 0x0060: 4c00 8000 9e7b e862 8500 9e7b e862 8500 L....{.b...{.b..
+ 0x0070: 00cc 0407 d5ad 4c00 8000 9e7b e866 5100 ......L....{.fQ.
+ 0x0080: 9e7b e866 5100 .{.fQ.
+ 58 13:35:13.450316 GeoNet src:00:0c:42:69:68:be; v:0 NH:1-BTP-A HT:5-1-TopoScopeBcast-MH HopLim:2 Payload:29 GN_ADDR:c0:cc:00:0c:42:69:68:be lat:514775183 lon:56605966; BTP Dst:5000 Src:5000; ItsPduHeader v:0 t:0-CAM
+ 0x0000: 0000 013c f7d0 a6ae 0000 0019 8400 6bf4 ...<..........k.
+ 0x0010: d607 abb5 6c80 09f6 00 ....l....
+ 59 13:35:13.505187 GeoNet src:00:0c:42:69:68:be; v:0 NH:1-BTP-A HT:5-1-TopoScopeBcast-MH HopLim:2 Payload:236 GN_ADDR:c0:cc:00:0c:42:69:68:be lat:514775183 lon:56605966; BTP Dst:6102 Src:6102; ItsPduHeader v:0 t:106-ecoCAM
+ 0x0000: 006a 013c f7d0 a6e1 0000 0066 fe7f 013c .j.<.......f...<
+ 0x0010: f7d0 ba69 0006 6000 b402 03e9 0004 4e34 ...i..`.......N4
+ 0x0020: 4030 000f de81 770f 4602 03ea 0204 4e4a @0....w.F.....NJ
+ 0x0030: 044e 4a80 3000 0fde 85dc 0f20 0004 0203 .NJ.0...........
+ 0x0040: eb00 044e 5c40 3000 0fde 8947 0f44 0207 ...N\@0....G.D..
+ 0x0050: d400 049c 9040 3000 0fde 80bb 8f44 0207 .....@0......D..
+ 0x0060: d500 049c a440 3000 0fde 8232 8f44 0207 .....@0....2.D..
+ 0x0070: d600 044e 9840 3000 0fde 8232 8f44 020b ...N.@0....2.D..
+ 0x0080: bf00 04ea ec40 3000 0fde 83a9 8f46 020b .....@0......F..
+ 0x0090: c002 04eb 0204 eb02 8030 000f de85 dc0f .........0......
+ 0x00a0: 2000 0602 0bc1 0004 eb14 4030 000f de86 ..........@0....
+ 0x00b0: 978f 4000 1402 0faa 0006 0139 4840 3000 ..@........9H@0.
+ 0x00c0: 0fde 86d6 0f44 020f ab00 0601 395c 4030 .....D......9\@0
+ 0x00d0: 000f de8a 7f8f 4402 0fac 0006 0139 7040 ......D......9p@
+ 0x00e0: 3000 0fde 8b3b 0f40 0....;.@
+ 60 13:35:13.509383 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 61 13:35:13.720997 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769352 lon:56596932
+ 62 13:35:13.779580 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770473 lon:56598412
+ 63 13:35:14.009509 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 64 13:35:14.221126 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769345 lon:56597075
+ 65 13:35:14.279740 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770473 lon:56598412
+ 66 13:35:14.510692 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 67 13:35:14.627801 CALM FAST src:00:0c:42:69:68:be; SrcNwref:0; DstNwref:0;
+ 0x0000: 0000 02dc 8005 4455 3540 1c02 0513 04f3 ......DU5@......
+ 0x0010: 0380 2030 0ff8 9020 356f a060 a010 2300 ...0....5o.`..#.
+ 0x0020: a020 4512 4d11 1020 200d e300 c020 402b ..E.M.........@+
+ 0x0030: 2fc1 5020 4188 be06 5300 6020 1000 2010 /.P.A...S.`.....
+ 0x0040: 0020 1000 2010 00a0 101a 1133 0000 2010 ...........3....
+ 0x0050: 0020 1000 a010 2020 1000 2010 0040 0060 .............@.`
+ 68 13:35:14.721264 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769345 lon:56597075
+ 69 13:35:14.779844 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770528 lon:56598412
+ 70 13:35:15.009794 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 71 13:35:15.221421 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769345 lon:56597075
+ 72 13:35:15.279998 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770528 lon:56598412
+ 73 13:35:15.509916 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 74 13:35:15.721526 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769345 lon:56597075
+ 75 13:35:15.780108 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770473 lon:56598412
+ 76 13:35:16.010046 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 77 13:35:16.221662 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769289 lon:56597075
+ 78 13:35:16.280233 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770473 lon:56598412
+ 79 13:35:16.510190 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 80 13:35:16.721788 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769289 lon:56597075
+ 81 13:35:16.780372 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770486 lon:56598426
+ 82 13:35:17.010289 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 83 13:35:17.221930 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769289 lon:56597075
+ 84 13:35:17.280502 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770486 lon:56598426
+ 85 13:35:17.454413 GeoNet src:00:0c:42:69:68:be; v:0 NH:1-BTP-A HT:5-1-TopoScopeBcast-MH HopLim:2 Payload:29 GN_ADDR:c0:cc:00:0c:42:69:68:be lat:514775183 lon:56605966; BTP Dst:5000 Src:5000; ItsPduHeader v:0 t:0-CAM
+ 0x0000: 0000 013c f7d0 b651 0000 0019 8400 6bf4 ...<...Q......k.
+ 0x0010: d607 abb5 6c80 09f6 00 ....l....
+ 86 13:35:17.455192 GeoNet src:00:0c:42:69:68:be; v:0 NH:1-BTP-A HT:5-1-TopoScopeBcast-MH HopLim:2 Payload:138 GN_ADDR:c0:cc:00:0c:42:69:68:be lat:514775183 lon:56605966; BTP Dst:6103 Src:6103; ItsPduHeader v:0 t:106-ecoCAM
+ 0x0000: 006a 013c f7d0 b650 0000 0066 002e 013c .j.<...P...f...<
+ 0x0010: f7d0 c9d8 0080 0280 00cc 0407 d456 4c00 .............VL.
+ 0x0020: 8000 9e7b e85e f400 9e7b e85e f400 00cc ...{.^...{.^....
+ 0x0030: 0407 d4ab cc00 8000 9e7b e862 c000 9e7b .........{.b...{
+ 0x0040: e862 c000 00cc 0407 d501 cc00 8000 9e7b .b.............{
+ 0x0050: e866 8c00 9e7b e866 8c00 00cc 0407 d557 .f...{.f.......W
+ 0x0060: 4c00 8000 9e7b e86a 5800 9e7b e86a 5800 L....{.jX..{.jX.
+ 0x0070: 00cc 0407 d5ad 4c00 8000 9e7b e86e 2400 ......L....{.n$.
+ 0x0080: 9e7b e86e 2400 .{.n$.
+ 87 13:35:17.510434 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 88 13:35:17.722062 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769289 lon:56597075
+ 89 13:35:17.780635 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770486 lon:56598426
+ 90 13:35:18.010554 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 91 13:35:18.222209 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769289 lon:56597075
+ 92 13:35:18.280799 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770486 lon:56598426
+ 93 13:35:18.510706 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 94 13:35:18.722324 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769289 lon:56597075
+ 95 13:35:18.780898 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770592 lon:56598569
+ 96 13:35:19.010820 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 97 13:35:19.222482 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769289 lon:56597075
+ 98 13:35:19.281056 GeoNet src:00:0c:42:6d:54:df; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:df lat:514770592 lon:56598569
+ 99 13:35:19.510960 GeoNet src:00:0c:42:6d:54:db; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:db lat:0 lon:0
+ 100 13:35:19.722591 GeoNet src:00:0c:42:6d:54:d5; v:0 NH:0-Any HT:1-0-Beacon HopLim:1 Payload:0 GN_ADDR:00:00:00:0c:42:6d:54:d5 lat:514769289 lon:56597075
diff --git a/tests/geonet_and_calm_fast.pcap b/tests/geonet_and_calm_fast.pcap
new file mode 100644
index 0000000..eaaebe5
--- /dev/null
+++ b/tests/geonet_and_calm_fast.pcap
Binary files differ
diff --git a/tests/getname_2_read4_asan.out b/tests/getname_2_read4_asan.out
new file mode 100644
index 0000000..fd1c5d7
--- /dev/null
+++ b/tests/getname_2_read4_asan.out
@@ -0,0 +1 @@
+ 1 06:41:17.1048579 ARP, Unknown Hardware (65280) (len 0), Unknown Protocol (0x8b01) (len 0), Reverse Reply <empty> at <wrong proto type>, length 65556
diff --git a/tests/getname_2_read4_asan.pcap b/tests/getname_2_read4_asan.pcap
new file mode 100644
index 0000000..a7b9021
--- /dev/null
+++ b/tests/getname_2_read4_asan.pcap
Binary files differ
diff --git a/tests/gre-heapoverflow-1.out b/tests/gre-heapoverflow-1.out
new file mode 100644
index 0000000..e3fd43f
--- /dev/null
+++ b/tests/gre-heapoverflow-1.out
@@ -0,0 +1,8 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 3030 0000
+ 2 05:27:12.808464432 IP0 (invalid)
diff --git a/tests/gre-heapoverflow-1.pcap b/tests/gre-heapoverflow-1.pcap
new file mode 100644
index 0000000..103031f
--- /dev/null
+++ b/tests/gre-heapoverflow-1.pcap
Binary files differ
diff --git a/tests/gre-heapoverflow-2.out b/tests/gre-heapoverflow-2.out
new file mode 100644
index 0000000..c520df8
--- /dev/null
+++ b/tests/gre-heapoverflow-2.out
@@ -0,0 +1,6 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 00
+ 2 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto GRE (47), length 12336, bad cksum 3030 (->697f)!)
+ 48.48.48.48 > 48.48.48.48: GREv0, Flags [checksum present, routing present], sum 0x3030, off 0x3030, (rtaf=0x3030) [|gre]
diff --git a/tests/gre-heapoverflow-2.pcap b/tests/gre-heapoverflow-2.pcap
new file mode 100644
index 0000000..3a20484
--- /dev/null
+++ b/tests/gre-heapoverflow-2.pcap
Binary files differ
diff --git a/tests/hdlc1.out b/tests/hdlc1.out
new file mode 100644
index 0000000..60cc556
--- /dev/null
+++ b/tests/hdlc1.out
@@ -0,0 +1 @@
+ 1 22:04:50.842857 SLARP (length: 18), keepalive: mineseen=0x000d0a31, yourseen=0x57405e26, reliability=0x04ff, link uptime=49d12h52m33s
diff --git a/tests/hdlc2.out b/tests/hdlc2.out
new file mode 100644
index 0000000..aaa217c
--- /dev/null
+++ b/tests/hdlc2.out
@@ -0,0 +1 @@
+ 1 22:04:50.842857 SLARP (length: 14), keepalive: mineseen=0x000d0a31, yourseen=0x57405e26, reliability=0x04ff
diff --git a/tests/hdlc3.out b/tests/hdlc3.out
new file mode 100644
index 0000000..2d3cc58
--- /dev/null
+++ b/tests/hdlc3.out
@@ -0,0 +1,38 @@
+ 1 05:49:22.124228 SLARP (length: 20), keepalive: mineseen=0x00000005, yourseen=0x00000002, reliability=0xffff, link uptime=0d2h12m5s
+ 2 05:49:23.540326 SLARP (length: 20), keepalive: mineseen=0x00000003, yourseen=0x00000005, reliability=0xffff, link uptime=0d6h51m44s
+ 3 05:49:32.128791 SLARP (length: 20), keepalive: mineseen=0x00000006, yourseen=0x00000003, reliability=0xffff, link uptime=0d2h12m15s
+ 4 05:49:33.544915 SLARP (length: 20), keepalive: mineseen=0x00000004, yourseen=0x00000006, reliability=0xffff, link uptime=0d6h51m54s
+ 5 05:49:42.125345 SLARP (length: 20), keepalive: mineseen=0x00000007, yourseen=0x00000004, reliability=0xffff, link uptime=0d2h12m25s
+ 6 05:49:43.541446 SLARP (length: 20), keepalive: mineseen=0x00000005, yourseen=0x00000007, reliability=0xffff, link uptime=0d6h52m4s
+ 7 05:49:44.645486 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 0, seq 0, length 80
+ 8 05:49:44.653532 IP 10.0.0.2 > 10.0.0.1: ICMP echo reply, id 0, seq 0, length 80
+ 9 05:49:44.661487 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 0, seq 1, length 80
+ 10 05:49:44.670583 IP 10.0.0.2 > 10.0.0.1: ICMP echo reply, id 0, seq 1, length 80
+ 11 05:49:44.674770 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 0, seq 2, length 80
+ 12 05:49:44.678783 IP 10.0.0.2 > 10.0.0.1: ICMP echo reply, id 0, seq 2, length 80
+ 13 05:49:44.682765 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 0, seq 3, length 80
+ 14 05:49:44.686781 IP 10.0.0.2 > 10.0.0.1: ICMP echo reply, id 0, seq 3, length 80
+ 15 05:49:44.690764 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 0, seq 4, length 80
+ 16 05:49:44.694784 IP 10.0.0.2 > 10.0.0.1: ICMP echo reply, id 0, seq 4, length 80
+ 17 05:49:47.569649 unknown CHDLC protocol (0x2000)
+ 18 05:49:52.125913 SLARP (length: 20), keepalive: mineseen=0x00000008, yourseen=0x00000005, reliability=0xffff, link uptime=0d2h12m35s
+ 19 05:49:53.542016 SLARP (length: 20), keepalive: mineseen=0x00000006, yourseen=0x00000008, reliability=0xffff, link uptime=0d6h52m14s
+ 20 05:49:58.851666 unknown CHDLC protocol (0x2000)
+ 21 05:50:02.122511 SLARP (length: 20), keepalive: mineseen=0x00000009, yourseen=0x00000006, reliability=0xffff, link uptime=0d2h12m45s
+ 22 05:50:03.539930 SLARP (length: 20), keepalive: mineseen=0x00000007, yourseen=0x00000009, reliability=0xffff, link uptime=0d6h52m24s
+ 23 05:50:12.116381 SLARP (length: 20), keepalive: mineseen=0x0000000a, yourseen=0x00000007, reliability=0xffff, link uptime=0d2h12m55s
+ 24 05:50:13.543315 SLARP (length: 20), keepalive: mineseen=0x00000008, yourseen=0x0000000a, reliability=0xffff, link uptime=0d6h52m34s
+ 25 05:50:22.116941 SLARP (length: 20), keepalive: mineseen=0x0000000b, yourseen=0x00000008, reliability=0xffff, link uptime=0d2h13m5s
+ 26 05:50:23.543977 SLARP (length: 20), keepalive: mineseen=0x00000009, yourseen=0x0000000b, reliability=0xffff, link uptime=0d6h52m44s
+ 27 05:50:32.120474 SLARP (length: 20), keepalive: mineseen=0x0000000c, yourseen=0x00000009, reliability=0xffff, link uptime=0d2h13m15s
+ 28 05:50:33.541608 SLARP (length: 20), keepalive: mineseen=0x0000000a, yourseen=0x0000000c, reliability=0xffff, link uptime=0d6h52m54s
+ 29 05:50:42.118134 SLARP (length: 20), keepalive: mineseen=0x0000000d, yourseen=0x0000000a, reliability=0xffff, link uptime=0d2h13m25s
+ 30 05:50:43.542253 SLARP (length: 20), keepalive: mineseen=0x0000000b, yourseen=0x0000000d, reliability=0xffff, link uptime=0d6h53m4s
+ 31 05:50:47.557374 unknown CHDLC protocol (0x2000)
+ 32 05:50:52.117660 SLARP (length: 20), keepalive: mineseen=0x0000000e, yourseen=0x0000000b, reliability=0xffff, link uptime=0d2h13m35s
+ 33 05:50:53.549777 SLARP (length: 20), keepalive: mineseen=0x0000000c, yourseen=0x0000000e, reliability=0xffff, link uptime=0d6h53m14s
+ 34 05:50:58.855194 unknown CHDLC protocol (0x2000)
+ 35 05:51:02.115388 SLARP (length: 20), keepalive: mineseen=0x0000000f, yourseen=0x0000000c, reliability=0xffff, link uptime=0d2h13m45s
+ 36 05:51:03.543470 SLARP (length: 20), keepalive: mineseen=0x0000000d, yourseen=0x0000000f, reliability=0xffff, link uptime=0d6h53m24s
+ 37 05:51:12.116015 SLARP (length: 20), keepalive: mineseen=0x00000010, yourseen=0x0000000d, reliability=0xffff, link uptime=0d2h13m55s
+ 38 05:51:13.544106 SLARP (length: 20), keepalive: mineseen=0x0000000e, yourseen=0x00000010, reliability=0xffff, link uptime=0d6h53m34s
diff --git a/tests/hdlc4.out b/tests/hdlc4.out
new file mode 100644
index 0000000..4088258
--- /dev/null
+++ b/tests/hdlc4.out
@@ -0,0 +1,7 @@
+ 1 06:04:18.845147 SLARP (length: 20), keepalive: mineseen=0x00000001, yourseen=0x00000000, reliability=0xffff, link uptime=1d0h1m32s
+ 2 06:04:28.773147 SLARP (length: 20), request
+ 3 06:04:28.792147 SLARP (length: 20), reply 15.0.0.1/255.255.255.252
+ 4 06:04:28.865147 SLARP (length: 20), keepalive: mineseen=0x00000001, yourseen=0x00000000, reliability=0xffff, link uptime=1d0h1m42s
+ 5 06:04:30.999147 SLARP (length: 20), keepalive: mineseen=0x00000001, yourseen=0x00000001, reliability=0xffff, link uptime=1d4h41m19s
+ 6 06:04:38.869147 SLARP (length: 20), keepalive: mineseen=0x00000002, yourseen=0x00000001, reliability=0xffff, link uptime=1d0h1m52s
+ 7 06:04:41.003147 SLARP (length: 20), keepalive: mineseen=0x00000002, yourseen=0x00000002, reliability=0xffff, link uptime=1d4h41m29s
diff --git a/tests/hdlc_slarp.pcapng b/tests/hdlc_slarp.pcapng
new file mode 100644
index 0000000..3a24dca
--- /dev/null
+++ b/tests/hdlc_slarp.pcapng
Binary files differ
diff --git a/tests/heap-overflow-1.out b/tests/heap-overflow-1.out
new file mode 100644
index 0000000..af66a46
--- /dev/null
+++ b/tests/heap-overflow-1.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 unknown ip 3
diff --git a/tests/heap-overflow-1.pcap b/tests/heap-overflow-1.pcap
new file mode 100644
index 0000000..afcc274
--- /dev/null
+++ b/tests/heap-overflow-1.pcap
Binary files differ
diff --git a/tests/heap-overflow-2.out b/tests/heap-overflow-2.out
new file mode 100644
index 0000000..771634c
--- /dev/null
+++ b/tests/heap-overflow-2.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 [|cip]
diff --git a/tests/heap-overflow-2.pcap b/tests/heap-overflow-2.pcap
new file mode 100644
index 0000000..c7d0a00
--- /dev/null
+++ b/tests/heap-overflow-2.pcap
Binary files differ
diff --git a/tests/heapoverflow-atalk_2.out b/tests/heapoverflow-atalk_2.out
new file mode 100644
index 0000000..33e973b
--- /dev/null
+++ b/tests/heapoverflow-atalk_2.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 et1 AT [|ddp]
diff --git a/tests/heapoverflow-atalk_2.pcap b/tests/heapoverflow-atalk_2.pcap
new file mode 100644
index 0000000..bbd5933
--- /dev/null
+++ b/tests/heapoverflow-atalk_2.pcap
Binary files differ
diff --git a/tests/heapoverflow-atalk_print.out b/tests/heapoverflow-atalk_print.out
new file mode 100644
index 0000000..33e973b
--- /dev/null
+++ b/tests/heapoverflow-atalk_print.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 et1 AT [|ddp]
diff --git a/tests/heapoverflow-atalk_print.pcap b/tests/heapoverflow-atalk_print.pcap
new file mode 100644
index 0000000..aa5b4fa
--- /dev/null
+++ b/tests/heapoverflow-atalk_print.pcap
Binary files differ
diff --git a/tests/heapoverflow-in_checksum.out b/tests/heapoverflow-in_checksum.out
new file mode 100644
index 0000000..7a46a45
--- /dev/null
+++ b/tests/heapoverflow-in_checksum.out
@@ -0,0 +1,4 @@
+ 1 05:27:12.1010580 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [DF], proto PIM (103), length 12336, bad cksum 3030 (->2947)!)
+ 48.48.48.48 > 48.48.48.48: PIMv2, length 12316
+ Hello, cksum 0x3030 (unverified)
+ Unknown Option (12336), length 12336, Value: [|pimv2]
diff --git a/tests/heapoverflow-in_checksum.pcap b/tests/heapoverflow-in_checksum.pcap
new file mode 100644
index 0000000..ebb07fe
--- /dev/null
+++ b/tests/heapoverflow-in_checksum.pcap
Binary files differ
diff --git a/tests/heapoverflow-ip_demux_print.out b/tests/heapoverflow-ip_demux_print.out
new file mode 100644
index 0000000..c3481b1
--- /dev/null
+++ b/tests/heapoverflow-ip_demux_print.out
@@ -0,0 +1,6 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 00
+ 2 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto AH (51), length 12336, bad cksum 3030 (->697b)!)
+ 48.48.48.48 > 48.48.48.48: AH(length=48(200-bytes),reserved=0x3030[MustBeZero],spi=0x30303030,seq=0x30303030,icv=0x3030 [|ah]
diff --git a/tests/heapoverflow-ip_demux_print.pcap b/tests/heapoverflow-ip_demux_print.pcap
new file mode 100644
index 0000000..9090f7f
--- /dev/null
+++ b/tests/heapoverflow-ip_demux_print.pcap
Binary files differ
diff --git a/tests/heapoverflow-ppp_hdlc_if_print.out b/tests/heapoverflow-ppp_hdlc_if_print.out
new file mode 100644
index 0000000..0c60bf5
--- /dev/null
+++ b/tests/heapoverflow-ppp_hdlc_if_print.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 [|ppp_hdlc]
diff --git a/tests/heapoverflow-ppp_hdlc_if_print.pcap b/tests/heapoverflow-ppp_hdlc_if_print.pcap
new file mode 100644
index 0000000..7012ea8
--- /dev/null
+++ b/tests/heapoverflow-ppp_hdlc_if_print.pcap
Binary files differ
diff --git a/tests/heapoverflow-q933_printq.out b/tests/heapoverflow-q933_printq.out
new file mode 100644
index 0000000..67eec98
--- /dev/null
+++ b/tests/heapoverflow-q933_printq.out
@@ -0,0 +1,2 @@
+ 1 05:27:12.808464432 Q.933, CCITT, codeset 0, unknown message (0x30), length 262142
+ unknown IE (0x30), length 48: [|q.933]
diff --git a/tests/heapoverflow-q933_printq.pcap b/tests/heapoverflow-q933_printq.pcap
new file mode 100644
index 0000000..b3b3c31
--- /dev/null
+++ b/tests/heapoverflow-q933_printq.pcap
Binary files differ
diff --git a/tests/heapoverflow-sl_if_print.out b/tests/heapoverflow-sl_if_print.out
new file mode 100644
index 0000000..8b0ebd5
--- /dev/null
+++ b/tests/heapoverflow-sl_if_print.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 [|slip]
diff --git a/tests/heapoverflow-sl_if_print.pcap b/tests/heapoverflow-sl_if_print.pcap
new file mode 100644
index 0000000..926e08a
--- /dev/null
+++ b/tests/heapoverflow-sl_if_print.pcap
Binary files differ
diff --git a/tests/heapoverflow-tcp_print.out b/tests/heapoverflow-tcp_print.out
new file mode 100644
index 0000000..4aff56f
--- /dev/null
+++ b/tests/heapoverflow-tcp_print.out
@@ -0,0 +1,2 @@
+ 1 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [DF], proto TCP (6), length 12336, bad cksum 3030 (->29a8)!)
+ 48.48.48.48.12336 > 48.48.48.48.12336: Flags [.U], seq 808464432:808476688, ack 808464432, win 12336, urg 12336, options [unknown-48 0x3030303030303030 [|tcp]
diff --git a/tests/heapoverflow-tcp_print.pcap b/tests/heapoverflow-tcp_print.pcap
new file mode 100644
index 0000000..edceeae
--- /dev/null
+++ b/tests/heapoverflow-tcp_print.pcap
Binary files differ
diff --git a/tests/hncp.out b/tests/hncp.out
new file mode 100644
index 0000000..59bc484
--- /dev/null
+++ b/tests/hncp.out
@@ -0,0 +1,53 @@
+ 1 12:57:25.106171 IP6 (hlim 1, next-header UDP (17) payload length: 32) fe80::218:f3ff:fea9:914e.8231 > ff02::11.8231: [udp sum ok] hncp (24)
+ Node endpoint (12) NID: 31:da:78:d2 EPID: 03000000
+ Network state (12) hash: 2ae5f77255200bcc
+ 2 12:57:25.109340 IP6 (hlim 64, next-header UDP (17) payload length: 12) fe80::21e:64ff:fe23:4d34.8231 > fe80::218:f3ff:fea9:914e.8231: [udp sum ok] hncp (4)
+ Request network state (4)
+ 3 12:57:25.121767 IP6 (hlim 64, next-header UDP (17) payload length: 80) fe80::218:f3ff:fea9:914e.8231 > fe80::21e:64ff:fe23:4d34.8231: [udp sum ok] hncp (72)
+ Node endpoint (12) NID: 31:da:78:d2 EPID: 03000000
+ Network state (12) hash: 2ae5f77255200bcc
+ Node state (24) NID: 31:da:78:d2 seqno: 19 160.088s hash: 800088c8e0714638
+ Node state (24) NID: 61:69:ed:63 seqno: 12 969.681s hash: 011fffa1da966148
+ 4 12:57:25.125076 IP6 (hlim 64, next-header UDP (17) payload length: 16) fe80::21e:64ff:fe23:4d34.8231 > fe80::218:f3ff:fea9:914e.8231: [udp sum ok] hncp (8)
+ Request node state (8) NID: 31:da:78:d2
+ 5 12:57:25.126709 IP6 (hlim 64, next-header UDP (17) payload length: 16) fe80::21e:64ff:fe23:4d34.8231 > fe80::218:f3ff:fea9:914e.8231: [udp sum ok] hncp (8)
+ Request node state (8) NID: 61:69:ed:63
+ 6 12:57:25.130480 IP6 (hlim 64, next-header UDP (17) payload length: 332) fe80::218:f3ff:fea9:914e.8231 > fe80::21e:64ff:fe23:4d34.8231: [udp sum ok] hncp (324)
+ Node endpoint (12) NID: 31:da:78:d2 EPID: 03000000
+ Node state (312) NID: 31:da:78:d2 seqno: 19 160.105s hash: 800088c8e0714638
+ Peer (16) Peer-NID: 61:69:ed:63 Peer-EPID: 01000000 Local-EPID: 01000000
+ HNCP-Version (22) M: 0 P: 4 H: 4 L: 4 User-agent: hnetd/cac971d
+ External-Connection (52)
+ Delegated-Prefix (36) VLSO: 0.599s PLSO: 0.299s Prefix: 10.0.0.0/8
+ Prefix-Policy (5) type: Internet connectivity
+ DHCPv4-Data (10)
+ DNS-server (6) 192.168.1.254
+ Assigned-Prefix (18) EPID: 03000000 Prty: 2 Prefix: fd1f:f88c:e207:dbbc::/64
+ Assigned-Prefix (25) EPID: 01000000 Prty: 2 Prefix: 10.0.99.0/24
+ Assigned-Prefix (25) EPID: 03000000 Prty: 2 Prefix: 10.0.101.0/24
+ Node-Address (24) EPID: 01000000 IP Address: 10.0.99.2
+ Node-Address (24) EPID: 01000000 IP Address: fd1f:f88c:e207::2
+ Node-Address (24) EPID: 03000000 IP Address: 10.0.101.27
+ Node-Address (24) EPID: 03000000 IP Address: fd1f:f88c:e207:dbbc::1b
+ Node-Name (23) IP-Address: 10.0.101.27 Name: "r1"
+ 7 12:57:25.131144 IP6 (hlim 64, next-header UDP (17) payload length: 564) fe80::218:f3ff:fea9:914e.8231 > fe80::21e:64ff:fe23:4d34.8231: [udp sum ok] hncp (556)
+ Node endpoint (12) NID: 31:da:78:d2 EPID: 03000000
+ Node state (544) NID: 61:69:ed:63 seqno: 12 969.699s hash: 011fffa1da966148
+ Peer (16) Peer-NID: 31:da:78:d2 Peer-EPID: 01000000 Local-EPID: 01000000
+ HNCP-Version (22) M: 0 P: 4 H: 4 L: 4 User-agent: hnetd/cac971d
+ External-Connection (23)
+ Delegated-Prefix (19) VLSO: 0.599s PLSO: 0.299s Prefix: fd1f:f88c:e207::/48
+ Assigned-Prefix (18) EPID: 01000000 Prty: 2 Prefix: fd1f:f88c:e207::/64
+ Assigned-Prefix (18) EPID: 03000000 Prty: 2 Prefix: fd1f:f88c:e207:17::/64
+ Assigned-Prefix (25) EPID: 03000000 Prty: 2 Prefix: 10.0.116.0/24
+ Node-Address (24) EPID: 01000000 IP Address: 10.0.99.41
+ Node-Address (24) EPID: 01000000 IP Address: fd1f:f88c:e207::69
+ Node-Address (24) EPID: 03000000 IP Address: 10.0.116.44
+ Node-Address (24) EPID: 03000000 IP Address: fd1f:f88c:e207:17::6c
+ DNS-Delegated-Zone (33) IP-Address: fd1f:f88c:e207::69 lb- lan.r.home
+ DNS-Delegated-Zone (35) IP-Address: fd1f:f88c:e207:17::6c lb- wlan0.r.home
+ DNS-Delegated-Zone (44) IP-Address: fd1f:f88c:e207:17::6c --- 116.0.10.in-addr.arpa
+ DNS-Delegated-Zone (63) IP-Address: fd1f:f88c:e207::69 --- 0.0.0.0.7.0.2.e.c.8.8.f.f.1.d.f.ip6.arpa
+ DNS-Delegated-Zone (63) IP-Address: fd1f:f88c:e207:17::6c --- 7.1.0.0.7.0.2.e.c.8.8.f.f.1.d.f.ip6.arpa
+ Node-Name (22) IP-Address: 10.0.116.44 Name: "r"
+ Node-Name (22) IP-Address: fd1f:f88c:e207:17::6c Name: "r"
diff --git a/tests/hncp.pcap b/tests/hncp.pcap
new file mode 100644
index 0000000..16d7047
--- /dev/null
+++ b/tests/hncp.pcap
Binary files differ
diff --git a/tests/hncp_dhcpv4data-oobr.out b/tests/hncp_dhcpv4data-oobr.out
new file mode 100644
index 0000000..e97cd04
--- /dev/null
+++ b/tests/hncp_dhcpv4data-oobr.out
@@ -0,0 +1,4 @@
+ 1 [Error converting time] IP truncated-ip - 231 bytes missing! (tos 0x12,ECT(0), ttl 48, id 21323, offset 0, flags [+, DF, rsvd], proto UDP (17), length 296, bad cksum 8e0f (->cd08)!)
+ 1.2.7.0.1812 > 128.253.0.96.8231: hncp (268)
+ DHCPv4-Data (6)
+ DNS-server (98) (invalid)
diff --git a/tests/hncp_dhcpv4data-oobr.pcap b/tests/hncp_dhcpv4data-oobr.pcap
new file mode 100644
index 0000000..9a3bab8
--- /dev/null
+++ b/tests/hncp_dhcpv4data-oobr.pcap
Binary files differ
diff --git a/tests/hncp_dhcpv6data-oobr.out b/tests/hncp_dhcpv6data-oobr.out
new file mode 100644
index 0000000..0e13e28
--- /dev/null
+++ b/tests/hncp_dhcpv6data-oobr.out
@@ -0,0 +1,7 @@
+ 1 06:19:57.131076 IP6 (flowlabel 0x01cc3, hlim 234, next-header UDP (17) payload length: 11025) 400::e4ff:ffff:adf9:8900:0.1646 > 62:9de3:ff47:ebec:8206:ff00:ad:ff00.8231: hncp (11017)
+ Future use: type=16384 (5)
+ DHCPv6-Data (25)
+ Unknown (4)
+ Unknown (4)
+ SNTP-servers (61956) (invalid)
+ [|hncp]
diff --git a/tests/hncp_dhcpv6data-oobr.pcap b/tests/hncp_dhcpv6data-oobr.pcap
new file mode 100644
index 0000000..94310c6
--- /dev/null
+++ b/tests/hncp_dhcpv6data-oobr.pcap
Binary files differ
diff --git a/tests/hncp_prefix-oobr.out b/tests/hncp_prefix-oobr.out
new file mode 100644
index 0000000..d99f47b
--- /dev/null
+++ b/tests/hncp_prefix-oobr.out
@@ -0,0 +1,48 @@
+ 1 12:40:42.226395 IP6 (class 0xc0, hlim 1, next-header UDP (17) payload length: 436) fe80::b299:28ff:ffc8:d646.6696 > ff02::59:0:0:1:6.6696: [bad udp cksum 0x2997 -> 0xbbd2!] babel 2 (424)
+ Hello (Unicast) seqno 58134 interval 4.00s sub-unknown-0x08 sub-pad1 sub-pad1 sub-unknown-0x04 sub-unknown-0x30 sub-diversity 2-2 (bogus) sub-diversity 2-2 (bogus) sub-diversity 2-48 (bogus) (invalid)
+ Unknown message type 48
+ Unknown message type 223
+ Pad 1
+ Unknown message type 51
+ Pad 1
+ Pad 1
+ Pad 1
+ HMAC (invalid)
+ 2 12:57:25.130480 IP6 (hlim 57, next-header UDP (17) payload length: 332) fe80::218:f3ff:ffa9:914e.8231 > fe80::21e:64ff:fe23:4d34.8231: [bad udp cksum 0xbd4b -> 0x0e98!] hncp (324)
+ Node endpoint (12) NID: 31:da:78:d2 EPID: 03000000
+ Node state (312) NID: 31:da:78:d2 seqno: 19 160.105s hash: 800088c8e0714638
+ Peer (16) Peer-NID: 61:69:ed:63 Peer-EPID: 01000000 Local-EPID: 01000000
+ HNCP-Version (22) M: 0 P: 4 H: 4 L: 4 User-agent: hnetd/cac971d
+ External-Connection (52)
+ Reserved: type=0 (4)
+ Reserved: type=0 (4)
+ Reserved: type=0 (4)
+ Reserved: type=0 (4)
+ Reserved: type=0 (4)
+ Reserved: type=0 (4)
+ Reserved: type=0 (4)
+ Reserved: type=0 (4)
+ Reserved: type=0 (4)
+ Reserved: type=0 (4)
+ Reserved: type=0 (4)
+ Unassigned: type=510 (4)
+ Assigned-Prefix (18) EPID: 03000000 Prty: 2 Prefix: fd1f:f88c:e200::/44
+ (invalid)
+ Assigned-Prefix (25) EPID: 01000001 Prty: 0 Prefix: ::/0
+ Reserved: type=0 (4)
+ Reserved: type=0 (4)
+ [|hncp]
+ Assigned-Prefix (25) EPID: 03000000 Prty: 2 Prefix: 10.0.101.0/24
+ Node-Address (24) EPID: 01000000 IP Address: ::2100:0:ffff:a00:6302
+ Node-Address (24) EPID: 01000000 IP Address: fd1f:f88c:e207::f3ff
+ [|hncp]
+ 3 12:57:25.131144 IP6 (hlim 64, next-header UDP (17) payload length: 564) fe80::218:f3ff:fea9:914e.8231 > fe80::21e:64ff:fe23:4d34.8231: [bad udp cksum 0xe65a -> 0x7725!] hncp (556)
+ Node endpoint (12) NID: 31:10:00:00 EPID: 00000000
+ Node state (544) NID: 61:69:ed:63 seqno: 12 969.699s hash: 011fffa1da966148
+ Peer (16) Peer-NID: 31:da:78:d2 Peer-EPID: 01000000 Local-EPID: 01000000
+ Future use: type=64031 (22)
+ External-Connection (23)
+ Delegated-Prefix (19) VLSO: 0.599s PLSO: 0.299s Prefix: fd1f:f88c:e207::/48
+ Assigned-Prefix (143) EPID: 8b8b8b8b Prty: 11 Prefix: (invalid)
+ Private use: type=768 (4)
+ [|hncp]
diff --git a/tests/hncp_prefix-oobr.pcap b/tests/hncp_prefix-oobr.pcap
new file mode 100644
index 0000000..9c4c016
--- /dev/null
+++ b/tests/hncp_prefix-oobr.pcap
Binary files differ
diff --git a/tests/hoobr_aodv_extension.out b/tests/hoobr_aodv_extension.out
new file mode 100644
index 0000000..972f007
--- /dev/null
+++ b/tests/hoobr_aodv_extension.out
@@ -0,0 +1,2 @@
+ 1 05:27:12.808464432 IP 48.48.48.48.654 > 48.48.48.48.12336: aodv rrep 12308 prefix 16 hops 48
+ dst 48.48.48.48 dseq 808464432 src 48.48.48.48 808464432 ms [|aodv]
diff --git a/tests/hoobr_aodv_extension.pcap b/tests/hoobr_aodv_extension.pcap
new file mode 100644
index 0000000..263949a
--- /dev/null
+++ b/tests/hoobr_aodv_extension.pcap
Binary files differ
diff --git a/tests/hoobr_bfd_print.out b/tests/hoobr_bfd_print.out
new file mode 100644
index 0000000..c602709
--- /dev/null
+++ b/tests/hoobr_bfd_print.out
@@ -0,0 +1,7 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 3 05:27:12.808464432 IP truncated-ip - 14 bytes missing! 48.48.48.48.12336 > 48.48.48.48.3785: BFD, Echo, length: 12308
diff --git a/tests/hoobr_bfd_print.pcap b/tests/hoobr_bfd_print.pcap
new file mode 100644
index 0000000..0f61986
--- /dev/null
+++ b/tests/hoobr_bfd_print.pcap
Binary files differ
diff --git a/tests/hoobr_chdlc_print.out b/tests/hoobr_chdlc_print.out
new file mode 100644
index 0000000..dd6a9fe
--- /dev/null
+++ b/tests/hoobr_chdlc_print.out
@@ -0,0 +1,26 @@
+ 1 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 2 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 3 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 4 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 5 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 6 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 7 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 8 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 9 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 10 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 11 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 12 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 13 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 14 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 15 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 16 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 17 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 18 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 19 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 20 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 21 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 22 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 23 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 24 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 25 05:27:12.808464432 unknown CHDLC protocol (0x3030)
+ 26 05:27:12.808464432 [|chdlc]
diff --git a/tests/hoobr_chdlc_print.pcap b/tests/hoobr_chdlc_print.pcap
new file mode 100644
index 0000000..22ac157
--- /dev/null
+++ b/tests/hoobr_chdlc_print.pcap
Binary files differ
diff --git a/tests/hoobr_juniper.out b/tests/hoobr_juniper.out
new file mode 100644
index 0000000..9614916
--- /dev/null
+++ b/tests/hoobr_juniper.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 [|juniper_atm1]
diff --git a/tests/hoobr_juniper.pcap b/tests/hoobr_juniper.pcap
new file mode 100644
index 0000000..5e8fde4
--- /dev/null
+++ b/tests/hoobr_juniper.pcap
Binary files differ
diff --git a/tests/hoobr_juniper2.out b/tests/hoobr_juniper2.out
new file mode 100644
index 0000000..9614916
--- /dev/null
+++ b/tests/hoobr_juniper2.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 [|juniper_atm1]
diff --git a/tests/hoobr_juniper2.pcap b/tests/hoobr_juniper2.pcap
new file mode 100644
index 0000000..c2e7bbc
--- /dev/null
+++ b/tests/hoobr_juniper2.pcap
Binary files differ
diff --git a/tests/hoobr_juniper3.out b/tests/hoobr_juniper3.out
new file mode 100644
index 0000000..15a8e3f
--- /dev/null
+++ b/tests/hoobr_juniper3.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 [|juniper_es]
diff --git a/tests/hoobr_juniper3.pcap b/tests/hoobr_juniper3.pcap
new file mode 100644
index 0000000..f686960
--- /dev/null
+++ b/tests/hoobr_juniper3.pcap
Binary files differ
diff --git a/tests/hoobr_juniper4.out b/tests/hoobr_juniper4.out
new file mode 100644
index 0000000..9614916
--- /dev/null
+++ b/tests/hoobr_juniper4.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 [|juniper_atm1]
diff --git a/tests/hoobr_juniper4.pcap b/tests/hoobr_juniper4.pcap
new file mode 100644
index 0000000..dc40953
--- /dev/null
+++ b/tests/hoobr_juniper4.pcap
Binary files differ
diff --git a/tests/hoobr_lookup_nsap.out b/tests/hoobr_lookup_nsap.out
new file mode 100644
index 0000000..39a9376
--- /dev/null
+++ b/tests/hoobr_lookup_nsap.out
@@ -0,0 +1,23 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 000000
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 000000
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 000000
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 000000
+ 5 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 000000
+ 6 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 000000
+ 7 05:27:12.808464432 CLNP, 30.0000.0000.0000 > 30.3030, unknown (16), length 262129
+ 8 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 000000
+ 9 05:27:12.808464432 CLNP, 30.0000.0000.0000 > 30.3030, unknown (16), length 262129
diff --git a/tests/hoobr_lookup_nsap.pcap b/tests/hoobr_lookup_nsap.pcap
new file mode 100644
index 0000000..665c8cc
--- /dev/null
+++ b/tests/hoobr_lookup_nsap.pcap
Binary files differ
diff --git a/tests/hoobr_nfs_printfh.out b/tests/hoobr_nfs_printfh.out
new file mode 100644
index 0000000..8cf970c
--- /dev/null
+++ b/tests/hoobr_nfs_printfh.out
@@ -0,0 +1,104 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0060: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0070: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0080: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0090: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00a0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00b0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00c0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00d0: 3030 3030 3030 3030 3030 3030 000000000000
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 00000000
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0060: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0070: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0080: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0090: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00a0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00b0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00c0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0060: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0070: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0080: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0090: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00a0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00b0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00c0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00d0: 3030 3030 3030 3030 3030 3030 000000000000
+ 5 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0060: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0070: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0080: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0090: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00a0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00b0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00c0: 3030 3030 0000
+ 6 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0060: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0070: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0080: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0090: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00a0: 3030 3030 0000
+ 7 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0060: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0070: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0080: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0090: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00a0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00b0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00c0: 3030 3030 3030 3030 3030 3030 000000000000
+ 8 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0060: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0070: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0080: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0090: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00a0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00b0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00c0: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x00d0: 3030 3030 3030 3030 3030 3030 000000000000
+ 9 05:27:12.808464432 IP 48.48.48.48.12336 > 48.48.48.48.2049: Flags [.U], seq 808464432:808476728, ack 808464432, win 12336, urg 12336, length 12296: NFS request xid 808464432 12292 readlink fh 00000000/808464432
diff --git a/tests/hoobr_nfs_printfh.pcap b/tests/hoobr_nfs_printfh.pcap
new file mode 100644
index 0000000..0a9e9f9
--- /dev/null
+++ b/tests/hoobr_nfs_printfh.pcap
Binary files differ
diff --git a/tests/hoobr_nfs_xid_map_enter.out b/tests/hoobr_nfs_xid_map_enter.out
new file mode 100644
index 0000000..2140fbd
--- /dev/null
+++ b/tests/hoobr_nfs_xid_map_enter.out
@@ -0,0 +1,41 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 30 0
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 30 0
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 30 0
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 30 0
+ 5 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 30 0
+ 6 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 30 0
+ 7 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 30 0
+ 8 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 30 0
+ 9 05:27:12.808464432 IP 48.48.48.48.12336 > 48.48.48.48.2049: NFS request xid 808464432 12308 [|nfs]
diff --git a/tests/hoobr_nfs_xid_map_enter.pcap b/tests/hoobr_nfs_xid_map_enter.pcap
new file mode 100644
index 0000000..d61c105
--- /dev/null
+++ b/tests/hoobr_nfs_xid_map_enter.pcap
Binary files differ
diff --git a/tests/hoobr_parse_field.out b/tests/hoobr_parse_field.out
new file mode 100644
index 0000000..c59d24a
--- /dev/null
+++ b/tests/hoobr_parse_field.out
@@ -0,0 +1,5 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 00
+ 2 05:27:12.808464432 IP 48.48.48.48.2104 > 48.48.48.48.12336: [|zephyr]
diff --git a/tests/hoobr_parse_field.pcap b/tests/hoobr_parse_field.pcap
new file mode 100644
index 0000000..5a0c276
--- /dev/null
+++ b/tests/hoobr_parse_field.pcap
Binary files differ
diff --git a/tests/hoobr_pimv1.out b/tests/hoobr_pimv1.out
new file mode 100644
index 0000000..f87bafc
--- /dev/null
+++ b/tests/hoobr_pimv1.out
@@ -0,0 +1,25 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 00000000
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 00000000
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 00000000
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 00000000
+ 5 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 00000000
+ 6 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 00000000
+ 7 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 00000000
+ 8 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 00000000
+ 9 05:27:12.808464432 IP 48.48.48.48 > 48.48.48.48: igmp pimv1 [type 48] [|pimv1]
diff --git a/tests/hoobr_pimv1.pcap b/tests/hoobr_pimv1.pcap
new file mode 100644
index 0000000..5aa3f38
--- /dev/null
+++ b/tests/hoobr_pimv1.pcap
Binary files differ
diff --git a/tests/hoobr_ripng_print.out b/tests/hoobr_ripng_print.out
new file mode 100644
index 0000000..b58cf8b
--- /dev/null
+++ b/tests/hoobr_ripng_print.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 IP 48.48.48.48.521 > 48.48.48.48.12336: ripng [version 48, must be 1] (invalid)
diff --git a/tests/hoobr_ripng_print.pcap b/tests/hoobr_ripng_print.pcap
new file mode 100644
index 0000000..d372310
--- /dev/null
+++ b/tests/hoobr_ripng_print.pcap
Binary files differ
diff --git a/tests/hoobr_rt6_print.out b/tests/hoobr_rt6_print.out
new file mode 100644
index 0000000..e0e2a6e
--- /dev/null
+++ b/tests/hoobr_rt6_print.out
@@ -0,0 +1,3 @@
+ 1 05:27:12.808464432 unknown ip 3
+ 2 05:27:12.808464432 unknown ip 3
+ 3 05:27:12.808464432 IP6 3030:3030:3030:3030:3030:3030:3030:3030 > 3030:3030:3030:3030:3030:3030:3030:3030: RT6 [|rt6]
diff --git a/tests/hoobr_rt6_print.pcap b/tests/hoobr_rt6_print.pcap
new file mode 100644
index 0000000..6f51a9f
--- /dev/null
+++ b/tests/hoobr_rt6_print.pcap
Binary files differ
diff --git a/tests/hoobr_safeputs.out b/tests/hoobr_safeputs.out
new file mode 100644
index 0000000..da40b43
--- /dev/null
+++ b/tests/hoobr_safeputs.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 LLDP, length 262130: 0000000000 [|lldp]
diff --git a/tests/hoobr_safeputs.pcap b/tests/hoobr_safeputs.pcap
new file mode 100644
index 0000000..4948fc2
--- /dev/null
+++ b/tests/hoobr_safeputs.pcap
Binary files differ
diff --git a/tests/hsrp_1-v.out b/tests/hsrp_1-v.out
new file mode 100644
index 0000000..dfd02a7
--- /dev/null
+++ b/tests/hsrp_1-v.out
@@ -0,0 +1,102 @@
+ 1 05:52:16.041638 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 2 05:52:17.053757 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 3 05:52:19.049810 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 4 05:52:20.053952 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 5 05:52:22.058588 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 6 05:52:22.826625 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 7 05:52:23.030764 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 8 05:52:23.278711 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 9 05:52:25.050768 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 10 05:52:26.042314 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 11 05:52:28.050368 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 12 05:52:29.059037 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 13 05:52:31.026541 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 14 05:52:32.042652 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 15 05:52:32.346611 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 16 05:52:34.051285 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 17 05:52:35.043436 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 18 05:52:36.726243 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 19 05:52:37.054900 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 20 05:52:37.059547 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 21 05:52:37.067529 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=3 [|hsrp]
+ 22 05:52:37.075537 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-coup 20: state=listen group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 23 05:52:37.078911 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 24 05:52:37.083532 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 25 05:52:37.083576 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=3 [|hsrp]
+ 26 05:52:37.086910 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 27 05:52:37.091536 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 28 05:52:40.043736 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 29 05:52:40.095073 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 30 05:52:43.059900 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 31 05:52:43.111241 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 32 05:52:46.060051 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 33 05:52:46.103419 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 34 05:52:46.436087 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 35 05:52:47.079471 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 36 05:52:49.060238 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 37 05:52:50.104235 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 38 05:52:52.044538 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 39 05:52:53.088415 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 40 05:52:55.056012 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 41 05:52:55.856040 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 42 05:52:56.104001 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 43 05:52:58.064776 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 44 05:52:59.088780 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 45 05:53:01.064366 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 46 05:53:02.112360 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 47 05:53:04.056567 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 48 05:53:04.104537 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 49 05:53:04.432502 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 50 05:53:05.121142 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 51 05:53:05.321235 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
diff --git a/tests/hsrp_1.out b/tests/hsrp_1.out
new file mode 100644
index 0000000..0f6c635
--- /dev/null
+++ b/tests/hsrp_1.out
@@ -0,0 +1,51 @@
+ 1 05:52:16.041638 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 2 05:52:17.053757 IP 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 3 05:52:19.049810 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 4 05:52:20.053952 IP 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 5 05:52:22.058588 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 6 05:52:22.826625 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 7 05:52:23.030764 IP 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 8 05:52:23.278711 IP 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 9 05:52:25.050768 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 10 05:52:26.042314 IP 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 11 05:52:28.050368 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 12 05:52:29.059037 IP 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 13 05:52:31.026541 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 14 05:52:32.042652 IP 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 15 05:52:32.346611 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 16 05:52:34.051285 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 17 05:52:35.043436 IP 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 18 05:52:36.726243 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 19 05:52:37.054900 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 20 05:52:37.059547 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 21 05:52:37.067529 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=3 [|hsrp]
+ 22 05:52:37.075537 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-coup 20: state=listen group=1 addr=192.168.0.1
+ 23 05:52:37.078911 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 24 05:52:37.083532 IP 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 25 05:52:37.083576 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=3 [|hsrp]
+ 26 05:52:37.086910 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1
+ 27 05:52:37.091536 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 28 05:52:40.043736 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 29 05:52:40.095073 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1
+ 30 05:52:43.059900 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 31 05:52:43.111241 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1
+ 32 05:52:46.060051 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 33 05:52:46.103419 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1
+ 34 05:52:46.436087 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 35 05:52:47.079471 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 36 05:52:49.060238 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 37 05:52:50.104235 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 38 05:52:52.044538 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 39 05:52:53.088415 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 40 05:52:55.056012 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 41 05:52:55.856040 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 42 05:52:56.104001 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 43 05:52:58.064776 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 44 05:52:59.088780 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 45 05:53:01.064366 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 46 05:53:02.112360 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 47 05:53:04.056567 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
+ 48 05:53:04.104537 IP 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 49 05:53:04.432502 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 50 05:53:05.121142 IP 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1
+ 51 05:53:05.321235 IP 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1
diff --git a/tests/hsrp_2-v.out b/tests/hsrp_2-v.out
new file mode 100644
index 0000000..c0afe91
--- /dev/null
+++ b/tests/hsrp_2-v.out
@@ -0,0 +1,98 @@
+ 1 05:38:58.538217 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 2 05:38:59.946263 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 3 05:39:00.834348 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 4 05:39:01.562386 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 5 05:39:03.290744 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 6 05:39:04.550704 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 7 05:39:04.842658 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 8 05:39:07.534957 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 9 05:39:08.542959 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 10 05:39:09.030983 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=3 [|hsrp]
+ 11 05:39:09.038965 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 12 05:39:09.046974 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 13 05:39:09.054808 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 14 05:39:12.063043 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 15 05:39:15.035344 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 16 05:39:18.039504 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 17 05:39:18.047487 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 18 05:39:18.575358 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 19 05:39:18.575514 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 20 05:39:21.039665 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 21 05:39:21.567657 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 22 05:39:24.055916 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 23 05:39:24.543823 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 24 05:39:27.031909 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 25 05:39:27.560000 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 26 05:39:27.888061 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 27 05:39:28.576061 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 28 05:39:30.064118 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 29 05:39:31.556128 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 30 05:39:33.040269 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 31 05:39:34.564426 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 32 05:39:36.032552 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 33 05:39:36.400825 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 34 05:39:36.728590 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 35 05:39:37.572601 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 36 05:39:38.036628 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 37 05:39:39.040717 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 38 05:39:40.564763 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 39 05:39:42.056788 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 40 05:39:43.552835 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 41 05:39:45.037036 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 42 05:39:46.085065 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 43 05:39:46.569133 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 44 05:39:48.061140 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 45 05:39:49.549185 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 46 05:39:51.053473 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 47 05:39:52.557354 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 48 05:39:54.045787 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 49 05:39:55.573550 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
diff --git a/tests/hsrp_3-v.out b/tests/hsrp_3-v.out
new file mode 100644
index 0000000..1392cbc
--- /dev/null
+++ b/tests/hsrp_3-v.out
@@ -0,0 +1,78 @@
+ 1 05:47:25.764806 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 2 05:47:26.348812 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 3 05:47:27.044903 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 4 05:47:28.532569 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 5 05:47:30.028735 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 6 05:47:31.557150 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 7 05:47:33.045319 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 8 05:47:34.564954 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 9 05:47:35.397081 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 10 05:47:35.397116 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 11 05:47:36.037479 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.10.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=200 auth="cisco"
+ 12 05:47:37.565504 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 13 05:47:40.549678 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 14 05:47:43.565851 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 15 05:47:46.029659 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 16 05:47:46.029996 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=3 [|hsrp]
+ 17 05:47:46.037985 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 18 05:47:46.045639 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 19 05:47:49.038157 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 20 05:47:49.045811 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 21 05:47:52.022001 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 22 05:47:52.030319 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 23 05:47:54.990485 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 24 05:47:55.030494 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 25 05:47:55.038203 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=speak group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 26 05:47:56.022233 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 27 05:47:58.022663 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 28 05:47:59.038399 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 29 05:48:01.030824 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 30 05:48:02.022589 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 31 05:48:04.046646 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 32 05:48:04.414664 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 33 05:48:05.031124 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 34 05:48:07.055186 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 35 05:48:08.039275 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 36 05:48:10.031346 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 37 05:48:11.047115 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=standby group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
+ 38 05:48:12.671205 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 44)
+ 192.168.0.20.1985 > 224.0.0.2.1985: HSRPv0-unknown (3) 16: state=initial group=2 [|hsrp]
+ 39 05:48:13.043176 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [none], proto UDP (17), length 48)
+ 192.168.0.30.1985 > 224.0.0.2.1985: HSRPv0-hello 20: state=active group=1 addr=192.168.0.1 hellotime=3s holdtime=10s priority=100 auth="cisco"
diff --git a/tests/huge-tipc-messages.out b/tests/huge-tipc-messages.out
new file mode 100644
index 0000000..46bf32d
--- /dev/null
+++ b/tests/huge-tipc-messages.out
@@ -0,0 +1,13 @@
+ 1 00:16:27.751856 TIPC v2.0 1.1.2:3511725154 > 1.1.2:424133152, headerlength 40 bytes, MessageSize 40 bytes, Low Importance Data payload, messageType NAMED_MSG
+ 2 00:16:27.751868 TIPC v2.0 1.1.2:36452003 > 3511725154, headerlength 24 bytes, MessageSize 24 bytes, Low Importance Data payload, messageType CONN_MSG
+ 3 00:16:27.752201 TIPC v2.0 1.1.2:3511725154 > 36452003, headerlength 24 bytes, MessageSize 66000 bytes, Low Importance Data payload, messageType CONN_MSG
+ 4 00:16:27.752706 TIPC v2.0 1.1.2:3511725154 > 36452003, headerlength 24 bytes, MessageSize 24 bytes, Critical Importance Data payload, messageType CONN_MSG
+ 5 00:18:04.887066 TIPC v2.0 1.1.2:2724677849 > 1.1.2:424133152, headerlength 40 bytes, MessageSize 40 bytes, Low Importance Data payload, messageType NAMED_MSG
+ 6 00:18:04.887080 TIPC v2.0 1.1.2:350680339 > 2724677849, headerlength 24 bytes, MessageSize 24 bytes, Low Importance Data payload, messageType CONN_MSG
+ 7 00:18:04.887672 TIPC v2.0 1.1.2:2724677849 > 350680339, headerlength 24 bytes, MessageSize 65536 bytes, Low Importance Data payload, messageType CONN_MSG
+ 8 00:18:04.887787 TIPC v2.0 1.1.2:350680339 > 1.1.2:2724677849, headerlength 40 bytes, MessageSize 40 bytes, Connection Manager internal, messageType NAMED_MSG
+ 9 00:18:04.888471 TIPC v2.0 1.1.2:2724677849 > 350680339, headerlength 24 bytes, MessageSize 24 bytes, Critical Importance Data payload, messageType CONN_MSG
+ 10 00:18:28.880141 TIPC v2.0 1.1.2:1877724975 > 1.1.2:424133152, headerlength 40 bytes, MessageSize 40 bytes, Low Importance Data payload, messageType NAMED_MSG
+ 11 00:18:28.880540 TIPC v2.0 1.1.2:3523527029 > 1877724975, headerlength 24 bytes, MessageSize 24 bytes, Low Importance Data payload, messageType CONN_MSG
+ 12 00:18:28.881372 TIPC v2.0 1.1.2:1877724975 > 3523527029, headerlength 24 bytes, MessageSize 65535 bytes, Low Importance Data payload, messageType CONN_MSG
+ 13 00:18:28.882335 TIPC v2.0 1.1.2:1877724975 > 3523527029, headerlength 24 bytes, MessageSize 24 bytes, Critical Importance Data payload, messageType CONN_MSG
diff --git a/tests/huge-tipc-messages.pcap b/tests/huge-tipc-messages.pcap
new file mode 100644
index 0000000..d8a4dee
--- /dev/null
+++ b/tests/huge-tipc-messages.pcap
Binary files differ
diff --git a/tests/icmp-cksum-oobr-1.out b/tests/icmp-cksum-oobr-1.out
new file mode 100644
index 0000000..4e2b1c9
--- /dev/null
+++ b/tests/icmp-cksum-oobr-1.out
@@ -0,0 +1,5 @@
+ 1 21:08:39.847328 Out 00:16:3e:27:78:a2 ethertype IPv4 (0x0800), length 204: truncated-ip - 13723 bytes missing! (tos 0x72,ECT(0), ttl 64, id 9472, offset 0, flags [none], proto ICMP (1), length 13911, bad cksum 67ea (->8c0c)!)
+ 62.220.31.247 > 62.225.245.115: ICMP 62.220.31.247 udp port 1027 unreachable, length 13891
+ (tos 0xa0, ttl 114, id 30054, offset 0, flags [none], proto UDP (17), length 13728, bad cksum 3f1f (->a1f)!)
+ 62.225.245.115.9109 > 62.220.31.247.1027: [bad udp cksum 0xdfe7 -> 0xdb95!] UDP, length 132
+ ICMP Multi-Part extension v0 packet not supported
diff --git a/tests/icmp-cksum-oobr-1.pcap b/tests/icmp-cksum-oobr-1.pcap
new file mode 100644
index 0000000..b79f72b
--- /dev/null
+++ b/tests/icmp-cksum-oobr-1.pcap
Binary files differ
diff --git a/tests/icmp-cksum-oobr-2.out b/tests/icmp-cksum-oobr-2.out
new file mode 100644
index 0000000..aad76ac
--- /dev/null
+++ b/tests/icmp-cksum-oobr-2.out
@@ -0,0 +1,11 @@
+ 1 10:13:29.331681 IP (0x0021), length 244: truncated-ip - 32768 bytes missing! (tos 0x0, ttl 254, id 59168, offset 0, flags [DF], proto ICMP (1), length 33008, bad cksum 7ade (->fabd)!)
+ 10.4.0.34 > 12.4.4.4: ICMP time exceeded in-transit, length 32988
+ (tos 0x0, ttl 1, id 42321, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33440: [bad udp cksum 0x1000 -> 0xbad0!] UDP, length 12
+ ICMP Multi-Part extension v2
+ Interface Identification Object (2), Class-Type: 14, length 80
+ 0x0000: 0000 000f 0001 0000 0a0a 0a0a 3f54 6869
+ 0x0010: 732d 6973 2d74 6865 2d6e 616d 652d 6f66
+ 0x0020: 2d74 6865 2d49 6e74 6572 6661 6365 2d74
+ 0x0030: 6861 742d 7765 2d61 7265 2d6c 6f6f 6b69
+ 0x0040: 6e67 2d66 6f72 2d5b 3a2d 295d [|icmp]
diff --git a/tests/icmp-cksum-oobr-2.pcap b/tests/icmp-cksum-oobr-2.pcap
new file mode 100644
index 0000000..32db8ac
--- /dev/null
+++ b/tests/icmp-cksum-oobr-2.pcap
Binary files differ
diff --git a/tests/icmp-cksum-oobr-3.out b/tests/icmp-cksum-oobr-3.out
new file mode 100644
index 0000000..309afdb
--- /dev/null
+++ b/tests/icmp-cksum-oobr-3.out
@@ -0,0 +1,5 @@
+ 1 15:12:14.670533 00:00:00:00:00:00 > 00:00:00:00:00:00, ethertype IPv4 (0x0800), length 337: truncated-ip - 4096 bytes missing! (tos 0x0, ttl 64, id 30662, offset 0, flags [DF], proto ICMP (1), length 4419, bad cksum cdf9 (->bdf9)!)
+ 97.242.24.11 > 97.242.24.11: ICMP 97.242.24.11 udp port 162 unreachable, length 4399
+ (tos 0x0, ttl 128, id 30661, offset 0, flags [DF], proto UDP (17), length 295)
+ 97.242.24.11.60377 > 97.242.24.11.162: [udp sum ok] { SNMPv1 C="trap" { Trap(251) .1.3.6.1.4.1.3830.1.1.2.2.1 97.242.24.11 enterpriseSpecific s=52 61498489 .1.3.6.1.4.1.3830.1.1.2.1.1.1=3 .1.3.6.1.4.1.3830.1.1.2.1.1.2=2 .1.3.6.1.4.1.3830.1.1.2.1.1.3="%SMSA-E-POLLERR, Polling the SMSC was not successful." .1.3.6.1.4.1.3830.1.1.2.1.1.4="OPCOM" .1.3.6.1.4.1.3830.1.1.2.1.1.5="28-OCT-2010 20:42:14.67" .1.3.6.1.4.1.3830.1.1.2.1.1.6="SMRL51" } }
+ ICMP Multi-Part extension v0 packet not supported
diff --git a/tests/icmp-cksum-oobr-3.pcapng b/tests/icmp-cksum-oobr-3.pcapng
new file mode 100644
index 0000000..a92d933
--- /dev/null
+++ b/tests/icmp-cksum-oobr-3.pcapng
Binary files differ
diff --git a/tests/icmp-cksum-oobr-4.out b/tests/icmp-cksum-oobr-4.out
new file mode 100644
index 0000000..7c263c2
--- /dev/null
+++ b/tests/icmp-cksum-oobr-4.out
@@ -0,0 +1,7 @@
+ 1 08:51:32.546678 IP (0x0021), length 172: truncated-ip - 8192 bytes missing! (tos 0xc0, ttl 251, id 5047, offset 0, flags [none], proto ICMP (1), length 8360, bad cksum 7edb (->5edb)!)
+ 10.0.12.2 > 10.0.12.1: ICMP time exceeded in-transit, length 8340
+ (tos 0x0, ttl 1, id 2574, offset 0, flags [none], proto UDP (17), length 28)
+ 10.0.12.1.49215 > 10.255.255.4.33435: [udp sum ok] UDP, length 0
+ ICMP Multi-Part extension v2
+ MPLS Stack Entry Object (1), Class-Type: 1, length 8
+ label 16, tc 0, [S], ttl 1 [|icmp]
diff --git a/tests/icmp-cksum-oobr-4.pcapng b/tests/icmp-cksum-oobr-4.pcapng
new file mode 100644
index 0000000..58f4728
--- /dev/null
+++ b/tests/icmp-cksum-oobr-4.pcapng
Binary files differ
diff --git a/tests/icmp-icmp_print-oobr-1.out b/tests/icmp-icmp_print-oobr-1.out
new file mode 100644
index 0000000..37cf56e
--- /dev/null
+++ b/tests/icmp-icmp_print-oobr-1.out
@@ -0,0 +1,7 @@
+ 1 18:01:37.17835523 IP (tos 0x4, ttl 64, id 3584, offset 0, flags [none], proto ICMP (1), length 23, bad cksum a (->1e0f)!)
+ 22.3.2.0 > 54.209.0.0: ICMP type-#49, length 3 [|icmp]
+ 2 06:58:21.471597027 IP (tos 0x4, ttl 64, id 32512, offset 0, flags [none], proto VRRP (112), length 31, bad cksum 82 (->db96)!)
+ 22.3.211.0 > 54.209.0.0: VRRPv3, Advertisement, (ttl 64), vrid 128, prio 69 [|vrrp]
+ 3 12:37:33.1049347 c0:05:ff:ff:40:9d > 00:0c:02:49:96:7e, ethertype Unknown (0xf1ff), length 65570:
+ 0x0000: 4404 0020 0e00 0000 4070 000a 1603 0200 D.......@p......
+ 0x0010: 36d1 0000 3180 bc 6...1..
diff --git a/tests/icmp-icmp_print-oobr-1.pcap b/tests/icmp-icmp_print-oobr-1.pcap
new file mode 100644
index 0000000..a9dd35b
--- /dev/null
+++ b/tests/icmp-icmp_print-oobr-1.pcap
Binary files differ
diff --git a/tests/icmp-icmp_print-oobr-2.out b/tests/icmp-icmp_print-oobr-2.out
new file mode 100644
index 0000000..82153ac
--- /dev/null
+++ b/tests/icmp-icmp_print-oobr-2.out
@@ -0,0 +1,4 @@
+ 1 [Invalid header: len(34) < caplen(35)]
+ 2 [Invalid header: len==0]
+ 3 04:59:44.4061069334 IP (tos 0x7f,CE, ttl 254, id 40208, offset 0, flags [none], proto ICMP (1), length 30, options (unknown 201 [bad length 255]), bad cksum 101 (->6470)!)
+ 1.241.1.250 > 219.91.15.170: ICMP type-#255, length 2 [|icmp]
diff --git a/tests/icmp-icmp_print-oobr-2.pcap b/tests/icmp-icmp_print-oobr-2.pcap
new file mode 100644
index 0000000..60b7b93
--- /dev/null
+++ b/tests/icmp-icmp_print-oobr-2.pcap
Binary files differ
diff --git a/tests/icmp6_mobileprefix_asan.out b/tests/icmp6_mobileprefix_asan.out
new file mode 100644
index 0000000..c204cff
--- /dev/null
+++ b/tests/icmp6_mobileprefix_asan.out
@@ -0,0 +1,2 @@
+ 1 07:49:20.11534339 IP6 (class 0x50, flowlabel 0x0002c, hlim 0, next-header ICMPv6 (58) payload length: 7168) 4f:f829:c:1a1a:1a1a:1a1a:1a37:0 > 16:0:400:0:64fb:9303:f293:8200: ICMP6, mobile router advertisement, length 7168, id 0x9393 [|icmp6]
+ 2 [Invalid header: caplen==0, len==0]
diff --git a/tests/icmp6_mobileprefix_asan.pcap b/tests/icmp6_mobileprefix_asan.pcap
new file mode 100644
index 0000000..fa40fbb
--- /dev/null
+++ b/tests/icmp6_mobileprefix_asan.pcap
Binary files differ
diff --git a/tests/icmp6_nodeinfo_oobr.out b/tests/icmp6_nodeinfo_oobr.out
new file mode 100644
index 0000000..222a1a4
--- /dev/null
+++ b/tests/icmp6_nodeinfo_oobr.out
@@ -0,0 +1 @@
+ 1 03:32:08.002213 IP6 a072:7f00:1:7f00:1:e01a:17:6785 > c903::a002:8018:fe30:0:204: ICMP6, who-are-you reply [|icmp6], length 4
diff --git a/tests/icmp6_nodeinfo_oobr.pcap b/tests/icmp6_nodeinfo_oobr.pcap
new file mode 100644
index 0000000..4c3ff04
--- /dev/null
+++ b/tests/icmp6_nodeinfo_oobr.pcap
Binary files differ
diff --git a/tests/icmpv6-RFC2894-RR-v.out b/tests/icmpv6-RFC2894-RR-v.out
new file mode 100644
index 0000000..35d3d4e
--- /dev/null
+++ b/tests/icmpv6-RFC2894-RR-v.out
@@ -0,0 +1,6 @@
+ 1 17:24:20.953888 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 72) 2001:db8:1:0:a00:27ff:fef4:4dcf > 2001:db8:1:0:a00:27ff:fef4:4dcf: [icmp6 sum ok] ICMP6, router renumbering, command, seq=0[S,seg=0,maxdelay=0] match(add,ord=0,min=0,max=128,fec0::/48) use(mask=0x0,raflags=0x0,vltime=2592000,pltime=604800,3ffe:501:fffe::/48/16)
+ 2 17:24:50.966750 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 72) 2001:db8:1:0:a00:27ff:fef4:4dcf > 2001:db8:1:0:a00:27ff:fef4:4dcf: [icmp6 sum ok] ICMP6, router renumbering, command, seq=0[S,seg=0,maxdelay=0] match(add,ord=0,min=0,max=128,fec0::/48) use(mask=0x0,raflags=0x0,vltime=2592000,pltime=604800,3ffe:501:fffe::/48/16)
+ 3 17:25:20.976267 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 72) 2001:db8:1:0:a00:27ff:fef4:4dcf > 2001:db8:1:0:a00:27ff:fef4:4dcf: [icmp6 sum ok] ICMP6, router renumbering, command, seq=0[S,seg=0,maxdelay=0] match(add,ord=0,min=0,max=128,fec0::/48) use(mask=0x0,raflags=0x0,vltime=2592000,pltime=604800,3ffe:501:fffe::/48/16)
+ 4 17:25:20.978460 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 72) 2001:db8:1:0:a00:27ff:fef4:4dcf > 2001:db8:1:0:a00:27ff:fef4:4dcf: [icmp6 sum ok] ICMP6, router renumbering, command, seq=16777216[S,seg=0,maxdelay=0] match(change,ord=0,min=0,max=128,3ffe:501:ffff::/48) use(mask=0x0,raflags=0x0,vltime=2592000,pltime=604800,3ffe:501:ffff::/48/16)
+ 5 17:25:50.997724 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 72) 2001:db8:1:0:a00:27ff:fef4:4dcf > 2001:db8:1:0:a00:27ff:fef4:4dcf: [icmp6 sum ok] ICMP6, router renumbering, command, seq=16777216[S,seg=0,maxdelay=0] match(change,ord=0,min=0,max=128,3ffe:501:ffff::/48) use(mask=0x0,raflags=0x0,vltime=2592000,pltime=604800,3ffe:501:ffff::/48/16)
+ 6 17:26:21.005793 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 72) 2001:db8:1:0:a00:27ff:fef4:4dcf > 2001:db8:1:0:a00:27ff:fef4:4dcf: [icmp6 sum ok] ICMP6, router renumbering, command, seq=16777216[S,seg=0,maxdelay=0] match(change,ord=0,min=0,max=128,3ffe:501:ffff::/48) use(mask=0x0,raflags=0x0,vltime=2592000,pltime=604800,3ffe:501:ffff::/48/16)
diff --git a/tests/icmpv6-RFC2894-RR.out b/tests/icmpv6-RFC2894-RR.out
new file mode 100644
index 0000000..03a4522
--- /dev/null
+++ b/tests/icmpv6-RFC2894-RR.out
@@ -0,0 +1,6 @@
+ 1 17:24:20.953888 IP6 2001:db8:1:0:a00:27ff:fef4:4dcf > 2001:db8:1:0:a00:27ff:fef4:4dcf: ICMP6, router renumbering, command, seq=0 match(add,fec0::/48) use(3ffe:501:fffe::/48/16), length 72
+ 2 17:24:50.966750 IP6 2001:db8:1:0:a00:27ff:fef4:4dcf > 2001:db8:1:0:a00:27ff:fef4:4dcf: ICMP6, router renumbering, command, seq=0 match(add,fec0::/48) use(3ffe:501:fffe::/48/16), length 72
+ 3 17:25:20.976267 IP6 2001:db8:1:0:a00:27ff:fef4:4dcf > 2001:db8:1:0:a00:27ff:fef4:4dcf: ICMP6, router renumbering, command, seq=0 match(add,fec0::/48) use(3ffe:501:fffe::/48/16), length 72
+ 4 17:25:20.978460 IP6 2001:db8:1:0:a00:27ff:fef4:4dcf > 2001:db8:1:0:a00:27ff:fef4:4dcf: ICMP6, router renumbering, command, seq=16777216 match(change,3ffe:501:ffff::/48) use(3ffe:501:ffff::/48/16), length 72
+ 5 17:25:50.997724 IP6 2001:db8:1:0:a00:27ff:fef4:4dcf > 2001:db8:1:0:a00:27ff:fef4:4dcf: ICMP6, router renumbering, command, seq=16777216 match(change,3ffe:501:ffff::/48) use(3ffe:501:ffff::/48/16), length 72
+ 6 17:26:21.005793 IP6 2001:db8:1:0:a00:27ff:fef4:4dcf > 2001:db8:1:0:a00:27ff:fef4:4dcf: ICMP6, router renumbering, command, seq=16777216 match(change,3ffe:501:ffff::/48) use(3ffe:501:ffff::/48/16), length 72
diff --git a/tests/icmpv6-RFC2894-RR.pcap b/tests/icmpv6-RFC2894-RR.pcap
new file mode 100644
index 0000000..b2e0b6e
--- /dev/null
+++ b/tests/icmpv6-RFC2894-RR.pcap
Binary files differ
diff --git a/tests/icmpv6-length-zero.out b/tests/icmpv6-length-zero.out
new file mode 100644
index 0000000..8b728cd
--- /dev/null
+++ b/tests/icmpv6-length-zero.out
@@ -0,0 +1 @@
+ 1 04:24:49.656077 IP6 fe80::25a:28ff:fe08:f150 > 6e02::41: ICMP6, length 0 (invalid)
diff --git a/tests/icmpv6-length-zero.pcapng b/tests/icmpv6-length-zero.pcapng
new file mode 100644
index 0000000..6831eff
--- /dev/null
+++ b/tests/icmpv6-length-zero.pcapng
Binary files differ
diff --git a/tests/icmpv6-ni-flags.out b/tests/icmpv6-ni-flags.out
new file mode 100644
index 0000000..f1c18ba
--- /dev/null
+++ b/tests/icmpv6-ni-flags.out
@@ -0,0 +1,5 @@
+ 1 13:56:00.443595 IP6 fe80::5054:ff:fe43:2ca8 > fe80::5054:ff:fe2c:3629: ICMP6, who-are-you request node information query (node addresses [A], subject=fe80::5054:ff:fe2c:3629), length 32
+ 2 13:56:46.614177 IP6 fe80::5054:ff:fe43:2ca8 > fe80::5054:ff:fe2c:3629: ICMP6, who-are-you request node information query (node addresses [C], subject=fe80::5054:ff:fe2c:3629), length 32
+ 3 13:57:14.854456 IP6 fe80::5054:ff:fe43:2ca8 > fe80::5054:ff:fe2c:3629: ICMP6, who-are-you request node information query (node addresses [L], subject=fe80::5054:ff:fe2c:3629), length 32
+ 4 13:57:22.010951 IP6 fe80::5054:ff:fe43:2ca8 > fe80::5054:ff:fe2c:3629: ICMP6, who-are-you request node information query (node addresses [S], subject=fe80::5054:ff:fe2c:3629), length 32
+ 5 13:57:41.727114 IP6 fe80::5054:ff:fe43:2ca8 > fe80::5054:ff:fe2c:3629: ICMP6, who-are-you request node information query (node addresses [G], subject=fe80::5054:ff:fe2c:3629), length 32
diff --git a/tests/icmpv6-ni-flags.pcap b/tests/icmpv6-ni-flags.pcap
new file mode 100644
index 0000000..19615d5
--- /dev/null
+++ b/tests/icmpv6-ni-flags.pcap
Binary files differ
diff --git a/tests/icmpv6-rfc7112.out b/tests/icmpv6-rfc7112.out
new file mode 100644
index 0000000..9565960
--- /dev/null
+++ b/tests/icmpv6-rfc7112.out
@@ -0,0 +1 @@
+ 1 13:40:51.929516 IP6 2001:630:42:110:2a0:98ff:fe15:ece7 > 2001:630:42:110:ae1f:6bff:fe46:9eda: ICMP6, parameter problem, incomplete header chain - octet 48, length 72
diff --git a/tests/icmpv6-rfc7112.pcap b/tests/icmpv6-rfc7112.pcap
new file mode 100644
index 0000000..96d06bf
--- /dev/null
+++ b/tests/icmpv6-rfc7112.pcap
Binary files differ
diff --git a/tests/icmpv6.out b/tests/icmpv6.out
new file mode 100644
index 0000000..2dc7877
--- /dev/null
+++ b/tests/icmpv6.out
@@ -0,0 +1,26 @@
+ 1 12:26:12.631155 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 176) fe80::b299:28ff:fec8:d66c > ff02::1: [icmp6 sum ok] ICMP6, router advertisement, length 176
+ hop limit 64, Flags [home agent], pref medium, router lifetime 15s, reachable time 0ms, retrans timer 0ms
+ prefix info option (3), length 32 (4): 2222:3333:4444:5555:6600::/72, Flags [onlink, auto], valid time 2592000s, pref. time 604800s
+ 0x0000: 48c0 0027 8d00 0009 3a80 0000 0000 2222
+ 0x0010: 3333 4444 5555 6600 0000 0000 0000
+ rdnss option (25), length 40 (5): lifetime 5s, addr: abcd::efef addr: 1234:5678::1
+ 0x0000: 0000 0000 0005 abcd 0000 0000 0000 0000
+ 0x0010: 0000 0000 efef 1234 5678 0000 0000 0000
+ 0x0020: 0000 0000 0001
+ dnssl option (31), length 56 (7): lifetime 5s, domain(s): example.com. example.org. dom1.dom2.tld.
+ 0x0000: 0000 0000 0005 0765 7861 6d70 6c65 0363
+ 0x0010: 6f6d 0007 6578 616d 706c 6503 6f72 6700
+ 0x0020: 0464 6f6d 3104 646f 6d32 0374 6c64 0000
+ 0x0030: 0000 0000 0000
+ mtu option (5), length 8 (1): 100
+ 0x0000: 0000 0000 0064
+ source link-address option (1), length 8 (1): b0:99:28:c8:d6:6c
+ 0x0000: b099 28c8 d66c
+ advertisement interval option (7), length 8 (1): 5000ms
+ 0x0000: 0000 0000 1388
+ homeagent information option (8), length 8 (1): preference 50001, lifetime 15
+ 0x0000: 0000 c351 000f
+ 2 04:54:07.748985 IP6 (hlim 1, next-header Options (0) payload length: 36) fe80::215:17ff:fecc:e546 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 1 group record(s) [gaddr ff02::db8:1122:3344 to_ex { }]
+ 3 04:54:23.519360 IP6 (hlim 1, next-header Options (0) payload length: 36) fe80::b2a8:6eff:fe0c:d4e8 > ff02::1: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener query v2 [max resp delay=10000] [gaddr :: robustness=2 qqi=60]
+ 4 04:54:26.160995 IP6 (hlim 1, next-header Options (0) payload length: 96) fe80::215:17ff:fecc:e546 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 4 group record(s) [gaddr ff02::db8:1122:3344 is_ex { }] [gaddr ff02::1:ffcc:e546 is_ex { }] [gaddr ff02::1:ffa7:10ad is_ex { }] [gaddr ff02::1:ff00:2 is_ex { }]
+ 5 04:54:41.057031 IP6 (hlim 1, next-header Options (0) payload length: 36) fe80::215:17ff:fecc:e546 > ff02::16: HBH (rtalert: 0x0000) (padn) [icmp6 sum ok] ICMP6, multicast listener report v2, 1 group record(s) [gaddr ff02::db8:1122:3344 to_in { }]
diff --git a/tests/icmpv6.pcap b/tests/icmpv6.pcap
new file mode 100644
index 0000000..d480e72
--- /dev/null
+++ b/tests/icmpv6.pcap
Binary files differ
diff --git a/tests/icmpv6_opt24-v.out b/tests/icmpv6_opt24-v.out
new file mode 100644
index 0000000..9be8def
--- /dev/null
+++ b/tests/icmpv6_opt24-v.out
@@ -0,0 +1,16 @@
+ 1 12:30:49.777243 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 120) fe80::16cf:92ff:fe87:23d6 > ff02::1: [icmp6 sum ok] ICMP6, router advertisement, length 120
+ hop limit 0, Flags [managed, other stateful], pref medium, router lifetime 0s, reachable time 0ms, retrans timer 0ms
+ source link-address option (1), length 8 (1): 14:cf:92:87:23:d6
+ mtu option (5), length 8 (1): 1500
+ prefix info option (3), length 32 (4): fd8d:4fb3:5b2e::/64, Flags [onlink, auto], valid time 7200s, pref. time 1800s
+ route info option (24), length 16 (2): fd8d:4fb3:5b2e::/48, pref=medium, lifetime=7200s
+ rdnss option (25), length 24 (3): lifetime 1800s, addr: fd8d:4fb3:5b2e::1
+ dnssl option (31), length 16 (2): lifetime 1800s, domain(s): lan.
+ 2 12:40:46.776577 IP6 (hlim 255, next-header ICMPv6 (58) payload length: 120) fe80::16cf:92ff:fe87:23d6 > ff02::1: [icmp6 sum ok] ICMP6, router advertisement, length 120
+ hop limit 0, Flags [managed, other stateful], pref medium, router lifetime 0s, reachable time 0ms, retrans timer 0ms
+ source link-address option (1), length 8 (1): 14:cf:92:87:23:d6
+ mtu option (5), length 8 (1): 1500
+ prefix info option (3), length 32 (4): fd8d:4fb3:5b2e::/64, Flags [onlink, auto], valid time 7200s, pref. time 1800s
+ route info option (24), length 16 (2): fd8d:4fb3:5b2e::/48, pref=medium, lifetime=7200s
+ rdnss option (25), length 24 (3): lifetime 1800s, addr: fd8d:4fb3:5b2e::1
+ dnssl option (31), length 16 (2): lifetime 1800s, domain(s): lan.
diff --git a/tests/icmpv6_opt24.pcap b/tests/icmpv6_opt24.pcap
new file mode 100644
index 0000000..974e7a3
--- /dev/null
+++ b/tests/icmpv6_opt24.pcap
Binary files differ
diff --git a/tests/ieee802.11_exthdr.out b/tests/ieee802.11_exthdr.out
new file mode 100644
index 0000000..3ecab5d
--- /dev/null
+++ b/tests/ieee802.11_exthdr.out
@@ -0,0 +1,26 @@
+ 1 12:59:13.707778 10016360us tsft 1.0 Mb/s 2412 MHz 11b -22dBm signal -86dBm noise antenna 1 [bit 32] Probe Request (omus) [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit]
+ 2 12:59:13.709844 10018922us tsft 1.0 Mb/s 2412 MHz 11b -19dBm signal -86dBm noise antenna 0 [bit 32] Acknowledgment RA:90:a4:de:c0:46:0a
+ 3 12:59:13.709900 10017245us tsft 1.0 Mb/s -86dBm noise 27dBm tx power [bit 15] Probe Response (omus) [1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 Mbit] CH: 1
+ 4 12:59:13.776703 10085301us tsft 1.0 Mb/s 2412 MHz 11b -19dBm signal -86dBm noise antenna 1 [bit 32] Probe Request (omus) [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit]
+ 5 12:59:13.778624 10087718us tsft 1.0 Mb/s 2412 MHz 11b -18dBm signal -86dBm noise antenna 0 [bit 32] Acknowledgment RA:90:a4:de:c0:46:0a
+ 6 12:59:13.778675 10086042us tsft 1.0 Mb/s -86dBm noise 27dBm tx power [bit 15] Probe Response (omus) [1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 Mbit] CH: 1
+ 7 12:59:13.975746 10284358us tsft 1.0 Mb/s 2412 MHz 11b -61dBm signal -86dBm noise antenna 1 [bit 32] Probe Request (omus) [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit]
+ 8 12:59:13.979112 10288217us tsft 1.0 Mb/s 2412 MHz 11b -46dBm signal -86dBm noise antenna 0 [bit 32] Acknowledgment RA:90:a4:de:c0:46:0a
+ 9 12:59:13.979161 10286542us tsft 1.0 Mb/s -86dBm noise 27dBm tx power [bit 15] Probe Response (omus) [1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 Mbit] CH: 1
+ 10 12:59:14.042750 10351366us tsft 1.0 Mb/s 2412 MHz 11b -70dBm signal -86dBm noise antenna 1 [bit 32] Probe Request (omus) [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit]
+ 11 12:59:14.044659 10353769us tsft 1.0 Mb/s 2412 MHz 11b -57dBm signal -86dBm noise antenna 0 [bit 32] Acknowledgment RA:90:a4:de:c0:46:0a
+ 12 12:59:14.044709 10352092us tsft 1.0 Mb/s -86dBm noise 27dBm tx power [bit 15] Probe Response (omus) [1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 Mbit] CH: 1
+ 13 12:59:14.109749 10418368us tsft 1.0 Mb/s 2412 MHz 11b -67dBm signal -86dBm noise antenna 1 [bit 32] Probe Request (omus) [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit]
+ 14 12:59:14.111814 10420929us tsft 1.0 Mb/s 2412 MHz 11b -73dBm signal -86dBm noise antenna 0 [bit 32] Acknowledgment RA:90:a4:de:c0:46:0a
+ 15 12:59:14.111863 10419253us tsft 1.0 Mb/s -86dBm noise 27dBm tx power [bit 15] Probe Response (omus) [1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 Mbit] CH: 1
+ 16 12:59:14.176747 10485371us tsft 1.0 Mb/s 2412 MHz 11b -72dBm signal -86dBm noise antenna 1 [bit 32] Probe Request (omus) [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit]
+ 17 12:59:14.180160 10489278us tsft 1.0 Mb/s 2412 MHz 11b -74dBm signal -86dBm noise antenna 0 [bit 32] Acknowledgment RA:90:a4:de:c0:46:0a
+ 18 12:59:14.180208 10487602us tsft 1.0 Mb/s -86dBm noise 27dBm tx power [bit 15] Probe Response (omus) [1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 Mbit] CH: 1
+ 19 12:59:17.029726 13338508us tsft 1.0 Mb/s 2412 MHz 11b -14dBm signal -86dBm noise antenna 1 [bit 32] Authentication (Open System)-1: Successful
+ 20 12:59:17.030941 13340215us tsft 1.0 Mb/s 2412 MHz 11b -17dBm signal -86dBm noise antenna 0 [bit 32] Acknowledgment RA:90:a4:de:c0:46:0a
+ 21 12:59:17.030994 13339435us tsft 1.0 Mb/s -86dBm noise 27dBm tx power [bit 15] Authentication (Open System)-2:
+ 22 12:59:17.033234 13341999us tsft 1.0 Mb/s 2412 MHz 11b -18dBm signal -86dBm noise antenna 1 [bit 32] Assoc Request (omus) [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit]
+ 23 12:59:17.037186 13346458us tsft 1.0 Mb/s 2412 MHz 11b -18dBm signal -86dBm noise antenna 0 [bit 32] Acknowledgment RA:90:a4:de:c0:46:0a
+ 24 12:59:17.037247 13344925us tsft 1.0 Mb/s -86dBm noise 27dBm tx power [bit 15] Assoc Response AID(1) :: Successful
+ 25 12:59:17.046672 13355433us tsft 2412 MHz 11n -22dBm signal -86dBm noise antenna 1 19.5 Mb/s MCS 2 20 MHz long GI [bit 32]
+ 26 12:59:17.145990 13454791us tsft 2412 MHz 11n -21dBm signal -86dBm noise antenna 1 52.0 Mb/s MCS 11 20 MHz long GI [bit 32]
diff --git a/tests/ieee802.11_exthdr.pcap b/tests/ieee802.11_exthdr.pcap
new file mode 100644
index 0000000..613a443
--- /dev/null
+++ b/tests/ieee802.11_exthdr.pcap
Binary files differ
diff --git a/tests/ieee802.11_meshhdr-oobr.out b/tests/ieee802.11_meshhdr-oobr.out
new file mode 100644
index 0000000..ceb51b2
--- /dev/null
+++ b/tests/ieee802.11_meshhdr-oobr.out
@@ -0,0 +1 @@
+ 1 05:27:12.389034032 3472328296059908144us tsft 24.0 Mb/s 12334 MHz Turbo 48dBm noise [|802.11_radio] [|802.11]
diff --git a/tests/ieee802.11_meshhdr-oobr.pcap b/tests/ieee802.11_meshhdr-oobr.pcap
new file mode 100644
index 0000000..15df4fb
--- /dev/null
+++ b/tests/ieee802.11_meshhdr-oobr.pcap
Binary files differ
diff --git a/tests/ieee802.11_parse_elements_oobr.out b/tests/ieee802.11_parse_elements_oobr.out
new file mode 100644
index 0000000..1f4d2ce
--- /dev/null
+++ b/tests/ieee802.11_parse_elements_oobr.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 Beacon IBSS, PRIVACY [|802.11]
diff --git a/tests/ieee802.11_parse_elements_oobr.pcap b/tests/ieee802.11_parse_elements_oobr.pcap
new file mode 100644
index 0000000..560317e
--- /dev/null
+++ b/tests/ieee802.11_parse_elements_oobr.pcap
Binary files differ
diff --git a/tests/ieee802.11_rates_oobr.out b/tests/ieee802.11_rates_oobr.out
new file mode 100644
index 0000000..76c1260
--- /dev/null
+++ b/tests/ieee802.11_rates_oobr.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 fhset 48 fhpat 48 48dBm signal 48dB signal 48dB noise [|802.11_radio]Beacon IBSS, PRIVACY [|802.11]
diff --git a/tests/ieee802.11_rates_oobr.pcap b/tests/ieee802.11_rates_oobr.pcap
new file mode 100644
index 0000000..30a5698
--- /dev/null
+++ b/tests/ieee802.11_rates_oobr.pcap
Binary files differ
diff --git a/tests/ieee802.11_rx-stbc.out b/tests/ieee802.11_rx-stbc.out
new file mode 100644
index 0000000..ab19c02
--- /dev/null
+++ b/tests/ieee802.11_rx-stbc.out
@@ -0,0 +1,3 @@
+ 1 11:05:07.276297 7268us tsft 2462 MHz 11n -51dBm signal antenna 1 150.0 Mb/s MCS 7 40 MHz short GI RX-STBC1 Data IV: 11 Pad 20 KeyID 0
+ 2 19:12:50.159474 119738173us tsft 2462 MHz 11n -46dBm signal antenna 1 135.0 Mb/s MCS 7 40 MHz long GI RX-STBC2 Data IV: 1 Pad 20 KeyID 0
+ 3 19:18:40.939685 470382336us tsft 2462 MHz 11n -45dBm signal antenna 1 150.0 Mb/s MCS 7 40 MHz short GI RX-STBC3 Data IV: 5 Pad 20 KeyID 0
diff --git a/tests/ieee802.11_rx-stbc.pcap b/tests/ieee802.11_rx-stbc.pcap
new file mode 100644
index 0000000..b825a0a
--- /dev/null
+++ b/tests/ieee802.11_rx-stbc.pcap
Binary files differ
diff --git a/tests/ieee802.11_tim_ie_oobr.out b/tests/ieee802.11_tim_ie_oobr.out
new file mode 100644
index 0000000..3d4c28a
--- /dev/null
+++ b/tests/ieee802.11_tim_ie_oobr.out
@@ -0,0 +1,4 @@
+ 1 05:27:12.808464432 ReAssoc Response AID(3030) : PRIVACY : n/a [|802.11]
+ 2 05:27:12.808464432 ReAssoc Response AID(3030) : PRIVACY : n/a [|802.11]
+ 3 05:27:12.808464432 [|802.11]
+ 4 05:27:12.808464432 ReAssoc Response AID(3030) : PRIVACY : n/a [|802.11]
diff --git a/tests/ieee802.11_tim_ie_oobr.pcap b/tests/ieee802.11_tim_ie_oobr.pcap
new file mode 100644
index 0000000..2116a6b
--- /dev/null
+++ b/tests/ieee802.11_tim_ie_oobr.pcap
Binary files differ
diff --git a/tests/igmpv1.out b/tests/igmpv1.out
new file mode 100644
index 0000000..7ecd6cb
--- /dev/null
+++ b/tests/igmpv1.out
@@ -0,0 +1,27 @@
+ 1 07:22:09.213827 IP 10.0.200.151 > 224.0.0.1: igmp query v1
+ 2 07:22:09.537934 IP 10.0.200.163 > 224.0.0.252: igmp v1 report 224.0.0.252
+ 3 07:22:09.903027 IP 192.168.1.3 > 239.255.255.250: igmp v1 report 239.255.255.250
+ 4 07:22:13.069582 IP 10.0.200.108 > 224.0.1.24: igmp v1 report 224.0.1.24
+ 5 07:22:14.681981 IP 10.0.200.100 > 224.0.1.60: igmp v1 report 224.0.1.60
+ 6 07:22:16.045107 IP 10.0.200.144 > 224.0.0.9: igmp v1 report 224.0.0.9
+ 7 07:22:16.069769 IP 10.0.200.108 > 239.255.255.254: igmp v1 report 239.255.255.254
+ 8 07:22:17.446276 IP 10.0.200.10 > 224.0.0.251: igmp v1 report 224.0.0.251
+ 9 07:24:14.209361 IP 10.0.200.151 > 224.0.0.1: igmp query v1
+ 10 07:24:14.577751 IP 10.0.200.108 > 239.255.255.250: igmp v1 report 239.255.255.250
+ 11 07:24:15.077718 IP 10.0.200.108 > 239.255.255.254: igmp v1 report 239.255.255.254
+ 12 07:24:15.353766 IP 10.0.200.10 > 224.0.0.251: igmp v1 report 224.0.0.251
+ 13 07:24:16.030428 IP 10.0.200.163 > 224.0.0.252: igmp v1 report 224.0.0.252
+ 14 07:24:18.577987 IP 10.0.200.108 > 224.0.1.24: igmp v1 report 224.0.1.24
+ 15 07:24:21.040295 IP 10.0.200.144 > 224.0.0.9: igmp v1 report 224.0.0.9
+ 16 07:24:22.545577 IP 10.0.200.100 > 224.0.1.60: igmp v1 report 224.0.1.60
+ 17 07:24:36.662121 IP 10.0.200.25 > 239.255.255.250: igmp v1 report 239.255.255.250
+ 18 07:24:37.352184 IP 10.0.200.25 > 239.255.255.250: igmp v1 report 239.255.255.250
+ 19 07:24:38.352158 IP 10.0.200.25 > 239.255.255.250: igmp v1 report 239.255.255.250
+ 20 07:26:19.206625 IP 10.0.200.151 > 224.0.0.1: igmp query v1
+ 21 07:26:19.519645 IP 10.0.200.163 > 239.255.255.250: igmp v1 report 239.255.255.250
+ 22 07:26:24.035541 IP 10.0.200.144 > 224.0.0.9: igmp v1 report 224.0.0.9
+ 23 07:26:25.026107 IP 10.0.200.163 > 224.0.0.252: igmp v1 report 224.0.0.252
+ 24 07:26:25.229410 IP 10.0.200.100 > 224.0.1.60: igmp v1 report 224.0.1.60
+ 25 07:26:26.586611 IP 10.0.200.108 > 224.0.1.24: igmp v1 report 224.0.1.24
+ 26 07:26:27.086667 IP 10.0.200.108 > 239.255.255.254: igmp v1 report 239.255.255.254
+ 27 07:26:28.252675 IP 10.0.200.10 > 224.0.0.251: igmp v1 report 224.0.0.251
diff --git a/tests/igmpv2.out b/tests/igmpv2.out
new file mode 100644
index 0000000..de35652
--- /dev/null
+++ b/tests/igmpv2.out
@@ -0,0 +1,18 @@
+ 1 10:21:47.698870 IP 192.168.1.2 > 224.0.0.1: igmp query v2
+ 2 10:21:48.627293 IP 192.168.1.64 > 239.255.255.250: igmp v2 report 239.255.255.250
+ 3 10:21:54.761748 IP 192.168.11.201 > 225.10.10.10: igmp v2 report 225.10.10.10
+ 4 10:21:56.111610 IP 192.168.11.201 > 225.1.1.3: igmp v2 report 225.1.1.3
+ 5 10:22:07.221561 IP 192.168.11.201 > 224.0.0.2: igmp leave 225.1.1.3
+ 6 10:22:07.231083 IP 192.168.1.2 > 225.1.1.3: igmp query v2 [max resp time 10] [gaddr 225.1.1.3]
+ 7 10:22:07.461496 IP 192.168.11.201 > 225.1.1.4: igmp v2 report 225.1.1.4
+ 8 10:22:10.221472 IP 192.168.11.201 > 225.1.1.4: igmp v2 report 225.1.1.4
+ 9 10:22:12.496710 IP 192.168.11.201 > 225.1.1.4: igmp v2 report 225.1.1.4
+ 10 10:22:18.681377 IP 192.168.11.201 > 224.0.0.2: igmp leave 225.1.1.4
+ 11 10:22:18.689506 IP 192.168.1.2 > 225.1.1.4: igmp query v2 [max resp time 10] [gaddr 225.1.1.4]
+ 12 10:22:18.921288 IP 192.168.11.201 > 225.1.1.5: igmp v2 report 225.1.1.5
+ 13 10:22:24.791096 IP 192.168.11.201 > 225.1.1.5: igmp v2 report 225.1.1.5
+ 14 10:22:28.461112 IP 192.168.11.201 > 225.1.1.5: igmp v2 report 225.1.1.5
+ 15 10:23:52.768522 IP 192.168.1.2 > 224.0.0.1: igmp query v2
+ 16 10:23:56.649577 IP 192.168.11.201 > 225.10.10.10: igmp v2 report 225.10.10.10
+ 17 10:23:57.667297 IP 192.168.1.64 > 239.255.255.250: igmp v2 report 239.255.255.250
+ 18 10:24:00.739398 IP 192.168.11.201 > 225.1.1.5: igmp v2 report 225.1.1.5
diff --git a/tests/igmpv3-queries.out b/tests/igmpv3-queries.out
new file mode 100644
index 0000000..195cb80
--- /dev/null
+++ b/tests/igmpv3-queries.out
@@ -0,0 +1,6 @@
+ 1 15:00:15.623411 IP 192.2.0.2 > 224.0.0.1: igmp query v3
+ 2 15:00:46.624005 IP 192.2.0.2 > 224.0.0.1: igmp query v3 [max resp time 51m12s]
+ 3 15:02:08.783452 IP 192.2.0.2 > 224.0.0.1: igmp query v3 [max resp time 51m12s]
+ 4 15:02:39.784134 IP 192.2.0.2 > 224.0.0.1: igmp query v3 [max resp time 1.0s]
+ 5 15:02:47.181879 IP 192.2.0.2 > 224.0.0.1: igmp query v3 [max resp time 1.0s]
+ 6 15:03:18.182026 IP 192.2.0.2 > 224.0.0.1: igmp query v3 [max resp time 1.0s]
diff --git a/tests/igmpv3-queries.pcap b/tests/igmpv3-queries.pcap
new file mode 100644
index 0000000..df653ce
--- /dev/null
+++ b/tests/igmpv3-queries.pcap
Binary files differ
diff --git a/tests/igrp-oobr.out b/tests/igrp-oobr.out
new file mode 100644
index 0000000..9798b9b
--- /dev/null
+++ b/tests/igrp-oobr.out
@@ -0,0 +1,2 @@
+ 1 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto IGRP (9), length 12336, bad cksum 3030 (->69a5)!)
+ 48.48.48.48 > 48.48.48.48: igrp: request V0 edit=142 AS=12336 (12336/12336/560) checksum=0x3030 *.48.48.48 d=31580640 b=3 r=48 l=48 M=6316128 mtu=12336 in 48 hops [|igrp]
diff --git a/tests/igrp-oobr.pcap b/tests/igrp-oobr.pcap
new file mode 100644
index 0000000..cd7662c
--- /dev/null
+++ b/tests/igrp-oobr.pcap
Binary files differ
diff --git a/tests/ikev1_id_ipv6_addr_subnet-oobr.out b/tests/ikev1_id_ipv6_addr_subnet-oobr.out
new file mode 100644
index 0000000..e7bbc33
--- /dev/null
+++ b/tests/ikev1_id_ipv6_addr_subnet-oobr.out
@@ -0,0 +1,3 @@
+ 1 03:09:05.134350550 IP (tos 0x0, ttl 100, id 40207, offset 0, flags [+, DF, rsvd], proto UDP (17), length 32808, bad cksum 8e7f (->bc78)!)
+ 16.0.128.20.500 > 12.251.0.45.0: isakmp 1.0 msgid 0d101010: phase 2/others ? #16[]:
+ (id: idtype=IPv6net protoid=16 port=4112 len=24 [bad: < 32]) [|#145] (len mismatch: isakmp 4278190080/ip 4856)
diff --git a/tests/ikev1_id_ipv6_addr_subnet-oobr.pcap b/tests/ikev1_id_ipv6_addr_subnet-oobr.pcap
new file mode 100644
index 0000000..316473b
--- /dev/null
+++ b/tests/ikev1_id_ipv6_addr_subnet-oobr.pcap
Binary files differ
diff --git a/tests/ikev2four.out b/tests/ikev2four.out
new file mode 100644
index 0000000..d79687e
--- /dev/null
+++ b/tests/ikev2four.out
@@ -0,0 +1,107 @@
+ 1 12:21:24.386989 IP (tos 0x0, ttl 64, id 19908, offset 0, flags [none], proto UDP (17), length 404)
+ 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000000: parent_sa ikev2_init[I]:
+ (sa: len=116
+ (p: #1 protoid=isakmp transform=12 len=116
+ (t: #1 type=encr id=aes (type=keylen value=0080))
+ (t: #2 type=encr id=aes (type=keylen value=0100))
+ (t: #3 type=encr id=aes (type=keylen value=00c0))
+ (t: #4 type=encr id=3des )
+ (t: #5 type=prf id=hmac-sha )
+ (t: #6 type=prf id=hmac-md5 )
+ (t: #7 type=prf id=aes128_xcbc )
+ (t: #8 type=integ id=hmac-sha )
+ (t: #9 type=integ id=hmac-md5 )
+ (t: #10 type=integ id=aes-xcbc )
+ (t: #11 type=dh id=modp1024 )
+ (t: #12 type=dh id=modp2048 )))
+ (v2ke: len=128 group=modp1024)
+ (nonce: len=32 data=(6128ebd023a864e94a7f...ba041b5de59955900d818ac54e18b236739d9e8b))
+ (n: prot_id=#0 type=16388(nat_detection_source_ip))
+ (n: prot_id=#0 type=16389(nat_detection_destination_ip))
+ 2 12:21:24.390720 IP (tos 0x0, ttl 64, id 19909, offset 0, flags [none], proto UDP (17), length 88)
+ 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000000: parent_sa ikev2_init[R]:
+ (n: prot_id=#0 type=16390(cookie) data=(00000001c2221e50c16e123f2b0c71aefcf0cb3b798782c6))
+ 3 12:21:24.394523 IP (tos 0x0, ttl 64, id 19910, offset 0, flags [none], proto UDP (17), length 436)
+ 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000000: parent_sa ikev2_init[I]:
+ (n: prot_id=#0 type=16390(cookie) data=(00000001c2221e50c16e...ba041b5de59955900d818ac54e18b236739d9e8b))
+ (sa: len=116
+ (p: #1 protoid=isakmp transform=12 len=116
+ (t: #1 type=encr id=aes (type=keylen value=0080))
+ (t: #2 type=encr id=aes (type=keylen value=0100))
+ (t: #3 type=encr id=aes (type=keylen value=00c0))
+ (t: #4 type=encr id=3des )
+ (t: #5 type=prf id=hmac-sha )
+ (t: #6 type=prf id=hmac-md5 )
+ (t: #7 type=prf id=aes128_xcbc )
+ (t: #8 type=integ id=hmac-sha )
+ (t: #9 type=integ id=hmac-md5 )
+ (t: #10 type=integ id=aes-xcbc )
+ (t: #11 type=dh id=modp1024 )
+ (t: #12 type=dh id=modp2048 )))
+ (v2ke: len=128 group=modp1024)
+ (nonce: len=32 data=(6128ebd023a864e94a7f...ba041b5de59955900d818ac54e18b236739d9e8b))
+ (n: prot_id=#0 type=16388(nat_detection_source_ip))
+ (n: prot_id=#0 type=16389(nat_detection_destination_ip))
+ 4 12:21:24.403533 IP (tos 0x0, ttl 64, id 19911, offset 0, flags [none], proto UDP (17), length 332)
+ 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000000: parent_sa ikev2_init[R]:
+ (sa: len=44
+ (p: #1 protoid=isakmp transform=4 len=44
+ (t: #1 type=encr id=aes (type=keylen value=0080))
+ (t: #2 type=prf id=hmac-sha )
+ (t: #3 type=integ id=hmac-sha )
+ (t: #4 type=dh id=modp1024 )))
+ (v2ke: len=128 group=modp1024)
+ (nonce: len=32 data=(b31c379f272ce2984bd1...905954a783be2c37e2ccc4fdd270a532dbe6f428))
+ (n: prot_id=#0 type=16388(nat_detection_source_ip))
+ (n: prot_id=#0 type=16389(nat_detection_destination_ip))
+ 5 12:21:24.414868 IP (tos 0x0, ttl 64, id 19912, offset 0, flags [none], proto UDP (17), length 264)
+ 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000001: child_sa ikev2_auth[I]:
+ (v2e: len=204)
+ 6 12:21:24.420851 IP (tos 0x0, ttl 64, id 19913, offset 0, flags [none], proto UDP (17), length 184)
+ 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000001: child_sa ikev2_auth[R]:
+ (v2e: len=124)
+ 7 12:21:24.428594 IP (tos 0x0, ttl 64, id 19914, offset 0, flags [none], proto UDP (17), length 280)
+ 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000002: child_sa child_sa[I]:
+ (v2e: len=220)
+ 8 12:21:24.431476 IP (tos 0x0, ttl 64, id 19915, offset 0, flags [none], proto UDP (17), length 248)
+ 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000003: child_sa child_sa[I]:
+ (v2e: len=188)
+ 9 12:21:24.434259 IP (tos 0x0, ttl 64, id 19916, offset 0, flags [none], proto UDP (17), length 104)
+ 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000002: child_sa child_sa[R]:
+ (v2e: len=44)
+ 10 12:21:24.441104 IP (tos 0x0, ttl 64, id 19917, offset 0, flags [none], proto UDP (17), length 104)
+ 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000003: child_sa child_sa[R]:
+ (v2e: len=44)
+ 11 12:21:24.447581 IP (tos 0x0, ttl 64, id 19918, offset 0, flags [none], proto UDP (17), length 312)
+ 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000004: child_sa child_sa[I]:
+ (v2e: len=252)
+ 12 12:21:24.450581 IP (tos 0x0, ttl 64, id 19919, offset 0, flags [none], proto UDP (17), length 280)
+ 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000005: child_sa child_sa[I]:
+ (v2e: len=220)
+ 13 12:21:24.454303 IP (tos 0x0, ttl 64, id 19920, offset 0, flags [none], proto UDP (17), length 232)
+ 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000004: child_sa child_sa[R]:
+ (v2e: len=172)
+ 14 12:21:24.462453 IP (tos 0x0, ttl 64, id 19921, offset 0, flags [none], proto UDP (17), length 232)
+ 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000005: child_sa child_sa[R]:
+ (v2e: len=172)
+ 15 12:21:24.470120 IP (tos 0x0, ttl 64, id 19922, offset 0, flags [none], proto UDP (17), length 312)
+ 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000006: child_sa child_sa[I]:
+ (v2e: len=252)
+ 16 12:21:24.472695 IP (tos 0x0, ttl 64, id 19923, offset 0, flags [none], proto UDP (17), length 280)
+ 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000007: child_sa child_sa[I]:
+ (v2e: len=220)
+ 17 12:21:24.476686 IP (tos 0x0, ttl 64, id 19924, offset 0, flags [none], proto UDP (17), length 232)
+ 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000006: child_sa child_sa[R]:
+ (v2e: len=172)
+ 18 12:21:24.485264 IP (tos 0x0, ttl 64, id 19925, offset 0, flags [none], proto UDP (17), length 232)
+ 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000007: child_sa child_sa[R]:
+ (v2e: len=172)
+ 19 12:21:24.494634 IP (tos 0x0, ttl 64, id 19926, offset 0, flags [none], proto UDP (17), length 392)
+ 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000008: child_sa child_sa[I]:
+ (v2e: len=332)
+ 20 12:21:24.507694 IP (tos 0x0, ttl 64, id 19927, offset 0, flags [none], proto UDP (17), length 344)
+ 192.168.1.1.500 > 192.168.1.2.500: isakmp 2.0 msgid 00000008: child_sa child_sa[R]:
+ (v2e: len=284)
+ 21 12:21:24.517735 IP (tos 0x0, ttl 64, id 19928, offset 0, flags [none], proto UDP (17), length 120)
+ 192.168.1.2.500 > 192.168.1.1.500: isakmp 2.0 msgid 00000000: parent_sa inf2[I]:
+ (v2e: len=60)
diff --git a/tests/ikev2four.pcap b/tests/ikev2four.pcap
new file mode 100644
index 0000000..4b1d0bf
--- /dev/null
+++ b/tests/ikev2four.pcap
Binary files differ
diff --git a/tests/ikev2fourv.out b/tests/ikev2fourv.out
new file mode 100644
index 0000000..e7f43aa
--- /dev/null
+++ b/tests/ikev2fourv.out
@@ -0,0 +1,107 @@
+ 1 12:21:24.386989 IP (tos 0x0, ttl 64, id 19908, offset 0, flags [none], proto UDP (17), length 404)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x0765 -> 0xf5df!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->0000000000000000: parent_sa ikev2_init[I]:
+ (sa: len=116
+ (p: #1 protoid=isakmp transform=12 len=116
+ (t: #1 type=encr id=aes (type=keylen value=0080))
+ (t: #2 type=encr id=aes (type=keylen value=0100))
+ (t: #3 type=encr id=aes (type=keylen value=00c0))
+ (t: #4 type=encr id=3des )
+ (t: #5 type=prf id=hmac-sha )
+ (t: #6 type=prf id=hmac-md5 )
+ (t: #7 type=prf id=aes128_xcbc )
+ (t: #8 type=integ id=hmac-sha )
+ (t: #9 type=integ id=hmac-md5 )
+ (t: #10 type=integ id=aes-xcbc )
+ (t: #11 type=dh id=modp1024 )
+ (t: #12 type=dh id=modp2048 )))
+ (v2ke: len=128 group=modp1024 b5445bd60cece6fdcd3c96a52cbb7bb426a8c7a0f56a9c38d1b1c4f0c3a6e8e7dba5c7339b6ed02e757119dfb5b6933ce93b604987fbbc77221b2a0c7cdd32787eff10572bef546c361462f9da34847969a42e51c755996beac42e6fba961a75de0fc1b23f099380896ee89202122dedac1bd54aa8494ac3d740be4d2a4cf39d)
+ (nonce: len=32 nonce=(6128ebd023a864e94a7ffb74bf7cce2fd4367322b8b073f942282bd52ebfe3e6) )
+ (n: prot_id=#0 type=16388(nat_detection_source_ip))
+ (n: prot_id=#0 type=16389(nat_detection_destination_ip))
+ 2 12:21:24.390720 IP (tos 0x0, ttl 64, id 19909, offset 0, flags [none], proto UDP (17), length 88)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x0629 -> 0x0cd0!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->0000000000000000: parent_sa ikev2_init[R]:
+ (n: prot_id=#0 type=16390(cookie) data=(00000001c2221e50c16e123f2b0c71aefcf0cb3b798782c6))
+ 3 12:21:24.394523 IP (tos 0x0, ttl 64, id 19910, offset 0, flags [none], proto UDP (17), length 436)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x0785 -> 0x7702!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->0000000000000000: parent_sa ikev2_init[I]:
+ (n: prot_id=#0 type=16390(cookie) data=(00000001c2221e50c16e...ba041b5de59955900d818ac54e18b236739d9e8b))
+ (sa: len=116
+ (p: #1 protoid=isakmp transform=12 len=116
+ (t: #1 type=encr id=aes (type=keylen value=0080))
+ (t: #2 type=encr id=aes (type=keylen value=0100))
+ (t: #3 type=encr id=aes (type=keylen value=00c0))
+ (t: #4 type=encr id=3des )
+ (t: #5 type=prf id=hmac-sha )
+ (t: #6 type=prf id=hmac-md5 )
+ (t: #7 type=prf id=aes128_xcbc )
+ (t: #8 type=integ id=hmac-sha )
+ (t: #9 type=integ id=hmac-md5 )
+ (t: #10 type=integ id=aes-xcbc )
+ (t: #11 type=dh id=modp1024 )
+ (t: #12 type=dh id=modp2048 )))
+ (v2ke: len=128 group=modp1024 b5445bd60cece6fdcd3c96a52cbb7bb426a8c7a0f56a9c38d1b1c4f0c3a6e8e7dba5c7339b6ed02e757119dfb5b6933ce93b604987fbbc77221b2a0c7cdd32787eff10572bef546c361462f9da34847969a42e51c755996beac42e6fba961a75de0fc1b23f099380896ee89202122dedac1bd54aa8494ac3d740be4d2a4cf39d)
+ (nonce: len=32 nonce=(6128ebd023a864e94a7ffb74bf7cce2fd4367322b8b073f942282bd52ebfe3e6) )
+ (n: prot_id=#0 type=16388(nat_detection_source_ip))
+ (n: prot_id=#0 type=16389(nat_detection_destination_ip))
+ 4 12:21:24.403533 IP (tos 0x0, ttl 64, id 19911, offset 0, flags [none], proto UDP (17), length 332)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x071d -> 0x8650!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->71be8358efae7663: parent_sa ikev2_init[R]:
+ (sa: len=44
+ (p: #1 protoid=isakmp transform=4 len=44
+ (t: #1 type=encr id=aes (type=keylen value=0080))
+ (t: #2 type=prf id=hmac-sha )
+ (t: #3 type=integ id=hmac-sha )
+ (t: #4 type=dh id=modp1024 )))
+ (v2ke: len=128 group=modp1024 5a56714d3abf64e3a3f401ead9f5323ff0b77faa5f1e99199b13ac821f0a0c4f854786ca09b7a76aa508bcee11f16369a16d5fa041ca2d9a8dfa8228c61f2482d2175c5c1a9491fc221bec7a1fa69f656d4c98ba49ae9d721dedf4a02d7ecdfc201dc785a13ed74e4f3982762a2720ffdfc365ee4e37279af496cd86f881fd15)
+ (nonce: len=32 nonce=(b31c379f272ce2984bd17ca38c8729e1edbc081a14fb0f67cff81721dfeec1f9) )
+ (n: prot_id=#0 type=16388(nat_detection_source_ip))
+ (n: prot_id=#0 type=16389(nat_detection_destination_ip))
+ 5 12:21:24.414868 IP (tos 0x0, ttl 64, id 19912, offset 0, flags [none], proto UDP (17), length 264)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x07d9 -> 0xb2d6!] isakmp 2.0 msgid 00000001 cookie a88875a8198992a6->71be8358efae7663: child_sa ikev2_auth[I]:
+ (v2e: len=204 f606135ad373e70836fda91b63ca4c608e1ad58218488c2647ff1e8a912958aa77efbc3068a2ae6ab7c3d0cb1e6fb864df99c62f2cc045708084708154a393c2f4cbefad1f6848525d49db563e13345a4e6e2fd066c04e2ce291f4714baec6bf328356c446247cab835bda3e8e1aae5967248f01eb3a1c02a541b4da09b3276b400d50a067542a678468c5f41e54017c00964f1003f8c88896a6f12215a5f1a060713cc83802cae3abee18417c0c35dc6f58a01adb96ed1c009c68e3069ae70f4b10afb7736c111ade4d826e)
+ 6 12:21:24.420851 IP (tos 0x0, ttl 64, id 19913, offset 0, flags [none], proto UDP (17), length 184)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x0689 -> 0x0748!] isakmp 2.0 msgid 00000001 cookie a88875a8198992a6->71be8358efae7663: child_sa ikev2_auth[R]:
+ (v2e: len=124 6afe95bc5147b0ad7e4ccb9141c160a44f7c6eddc6b29d414ad5e2b882544fdc6c3ee6983ae1408b5764b1649343876454d1bf4d515aaf03c15eafe71be6b4cf51ab60630c45bcf0e2a2db8eee70095a4e010fdb342adb6d03dae5def9d4907cdfc8ccd6f3da9b7497c58e84a952d983bafb941ab1de1b0bb9ffad3b)
+ 7 12:21:24.428594 IP (tos 0x0, ttl 64, id 19914, offset 0, flags [none], proto UDP (17), length 280)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x07e9 -> 0x35ac!] isakmp 2.0 msgid 00000002 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=220 53cc6c0b41f14e4fc057c7f6a3524adde8521f26f67c058430a902db1a52ed16d322630d2eb515372dc12d97dc7c20552607e2ed193d9b33939e10aa2fc37b6199f0a629c6b58135f5b6f9e07906cd30dc3cae7d55fe08d95d3e660a623731c396a325adbff11c490f9fd102224391a65fb7bbe862945b64cf1fb833b9ce68c83df0b9d2ce7bd54f650864af9445e547cdfe5caa393344ae5274933b7efcf616821ea7daa9c5a6e8275ad6c688700cb7f4bcd6fb8025e93bb6dd5f581faebcbecb798c87617a4ec1b06ba290ac5fc1d6e4c2725c1f9f0e10b144fbbe)
+ 8 12:21:24.431476 IP (tos 0x0, ttl 64, id 19915, offset 0, flags [none], proto UDP (17), length 248)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x06c9 -> 0xdeaf!] isakmp 2.0 msgid 00000003 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=188 9603e03f280964782717da15a502f0a9e9f17dbf4487c6923cf00b7040d539bc947c705790e4e99b834a7ae2a8d79f5620e11615e0a762889aab821e0d03132dfb8cc6b3718582411bcd98c242a8b10a66274dae1ce055fb30a4d3e64c969be6e08b626958f4446c6e4a0c8d7a24522959c6152e63a575c06930c2097539bfbdff08c70533428cf6b452e0b8b0259c2292925d2ed62e8956bc7e3a911a61509be1ac8f7b7cd4636176e524f4d0f17573f2aeddce2251fd6d5d9cd54d)
+ 9 12:21:24.434259 IP (tos 0x0, ttl 64, id 19916, offset 0, flags [none], proto UDP (17), length 104)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x0639 -> 0xc72b!] isakmp 2.0 msgid 00000002 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=44 5bd2d26cb43b6cec30dec13fa387359797baf7b41e783422bc4dabf5d03ab2420d277d3b2f28d1f003da98d1)
+ 10 12:21:24.441104 IP (tos 0x0, ttl 64, id 19917, offset 0, flags [none], proto UDP (17), length 104)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x0639 -> 0x4119!] isakmp 2.0 msgid 00000003 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=44 38f60ab69110967961ae04af4e47a770260d61e29d18fb13ce093a47970068dacb342f7999cc3d0d59f77a94)
+ 11 12:21:24.447581 IP (tos 0x0, ttl 64, id 19918, offset 0, flags [none], proto UDP (17), length 312)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x0709 -> 0x236f!] isakmp 2.0 msgid 00000004 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=252 c7f2f1cc4997b30a61623222d4bfb535baa302199c4d8c1fdcfa745b0b29b5e7618ff0356848444d25010e5ad420760890ede066c838269b22d9e30d4fec1a012e731a210c243f803b661970d32e998e919f573c5742d2288949052c5a46a0cd7c4a1a295ede296c4fd9839b64dc4944e11a35f42a8ce18b447200fd03dbd58a71583b3a27c380148c801ce14452f7d756b1f55b10b84a58cfa9526001fff7157154645022e4456085517ceed98b79e20ed33297cf5ad80287e782728a8c6b87d2b422e7eeda1c72b33ebc51a5b76def9a59ffd1b4f97dec88c22a4f5448a71aeedf20c87dae5b44cd2e7a519d719a509f83f3b2faf6f5c607da609f)
+ 12 12:21:24.450581 IP (tos 0x0, ttl 64, id 19919, offset 0, flags [none], proto UDP (17), length 280)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x07e9 -> 0xd8ba!] isakmp 2.0 msgid 00000005 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=220 dae6134a9cff1a4e3cc59a79e019a93f8469dd4e2faaaad1c3afba22ecd128fdb1e8954c753f8f62aeb6aac9732f414b065ec39569a670be6980c81eb3e44bc93ec63e9a754d0456c6703cd718371edeef674928180f9d14c39e52cfa4a517368e7db2fa0bfdb41cf56d97006233103f22650fdcd5ffab8418e40903e4749e126d06e9dc2a18cfd5bfda0013e3e9eb53e79bbe30eadf0f4ddcefbab0c08e870b29d39b2401c75b68fc46a066782857ca48d547e410ac15cabb6738875200b535cbd9ae1e1ce99839c9c25639070e5ed977809c50b6bb9550b50b49bb)
+ 13 12:21:24.454303 IP (tos 0x0, ttl 64, id 19920, offset 0, flags [none], proto UDP (17), length 232)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x06b9 -> 0x7194!] isakmp 2.0 msgid 00000004 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=172 1fd8516b57b1ab1bdbcdba1930a5097decc023c5c534497ca53f178b9d4d11228746454371b0cc6ec067e14e1e5c5652840cfdae0ea84c7f0a6e799ff7fb131d15763feef45e80f24716cde47d23527f68e055a7c3adc7225489295e1bc3f1029b63822872865df55c6c275dead8a6f64bda8ae44f42c318fa71eb04eed7312dafd2dd8665fd5d3225f3aae6f7335b581c3a89c07af1009871dea9927f046432cd01b04234204d01583baf3a)
+ 14 12:21:24.462453 IP (tos 0x0, ttl 64, id 19921, offset 0, flags [none], proto UDP (17), length 232)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x06b9 -> 0x6053!] isakmp 2.0 msgid 00000005 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=172 f6fc8113f34b92eb7d595a048f57d46593441ad9a61919e5919e7de4454fa35882937d3b74c83ab959fd053c6a12a51b04a0e92e01683782658bb9af2bbcc7a4bd5e1eef2dbcdc7715cac6eaecfbcc051a46f2263d1b8387bdad7e68c6e4ba1be9794e163e484768995a9f4a18edcbc6a44f0a74cb01c318e7848562e0866f388b8d04f14f1af87de7de6cee1f889d4330d82932a7127b7d1a934e641c32b76e33b37706d50286f8cbe335ba)
+ 15 12:21:24.470120 IP (tos 0x0, ttl 64, id 19922, offset 0, flags [none], proto UDP (17), length 312)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x0709 -> 0xfb68!] isakmp 2.0 msgid 00000006 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=252 0aa2636a3b897ff3fa8093282ad1724ec9f326b64bf998e781d6edbb77a369a8444dc47a4dc095ebd3ac3b1dc337570bc42c93cd6dcb7289bc99a90874e66cc4ede7a13a58ce17c65b185e86def83d66f4c4ddc433e66baf1834e54296671357a5139b0b63ebf32e652df0938badea5a960ee1758e00faa643bed85f7adee2e2e75baeec9e0df88857a67ca5f2a2f4919d0b272313d42c791eb75feca145756a0ccae3640ee98c16689df511443228846d2c5b8830ea6d149c1abed11ad0a28ca33993036e91965d48a82a898145ada994af55978696480ab6cb697e13e67968a7748c3338786efb77250e5411b3a7eac84cd221324bd7b9109d9a69)
+ 16 12:21:24.472695 IP (tos 0x0, ttl 64, id 19923, offset 0, flags [none], proto UDP (17), length 280)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x07e9 -> 0x9881!] isakmp 2.0 msgid 00000007 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=220 02c703f4bdd83246adc67e1ca07d7e7cfe21b6bde94637680a332813b8a4ca47341abd3a9c37263896c08252bfb1ea6c7ea44783b92ac52acb4fbfec53f03554281c6377650c09208f3d778b11e77b5fbd983be1e96699232392ef31a501fda73c6150fcc2e80bab1e0d49845bd5d511f7c9285ec08352687a2ac8d70d0dec3476491c40b97cb9da405606fc5e8d46bbe199e6d91ae993b7faa0583ec4296a80812fb7e0ae88d3bd54c4a30e5edb2778c960f3e0cb5b1369e999f84de4dc72b5d006805efb7e2d2ed4033e11ff9578012d22942e3799c9382506a021)
+ 17 12:21:24.476686 IP (tos 0x0, ttl 64, id 19924, offset 0, flags [none], proto UDP (17), length 232)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x06b9 -> 0x3549!] isakmp 2.0 msgid 00000006 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=172 7e2e6623c66e161de9641ac7e1b6dfdcf3a5f45bbed123be88f3754d12514404afc054b3c7f789eb52a432a438359dde31152c11b8d209203d62779ca064823d70536c40f846d43d6694a2f12a3176f57007a3506c82fffaf3dbb713bbdbb5f540b7b39aee3c97145671504356095f7ab0c5a84347c0268bce259ca51b4a2dd75a7e3a7ee79f3bffc58d2fc0ac36686229f2309b5cd0c0dcc2af798664c14f5f166ab5e3c1f693092121aa44)
+ 18 12:21:24.485264 IP (tos 0x0, ttl 64, id 19925, offset 0, flags [none], proto UDP (17), length 232)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x06b9 -> 0xe402!] isakmp 2.0 msgid 00000007 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=172 7b545033a2d35df2ab9f26c4bc444713910a32e60fb04cb10a9e76634787f9ddc138c6792faa074be2ebcb43f83f444249679018ec6dc7d4e2247dd8cb915778d90fa5597f1ecba8471db53e3b4da8f73d1eb60c23ca9fb5fa599dc526a961364471b49e5288fcef6a24d02a084d29c4a5c5d1fa305310dba01d09c9c36c86c0af297e05d3fc8559a11666a4363bacc354e96c941349b3f60dd397eb4c2bb09f381831167c0b33686c6bb5d8)
+ 19 12:21:24.494634 IP (tos 0x0, ttl 64, id 19926, offset 0, flags [none], proto UDP (17), length 392)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x0759 -> 0x3076!] isakmp 2.0 msgid 00000008 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=332 c4bf89ec6e7936ac98a432a525c2406de940b338c9149ce19cb1bf23a69dfd481df7b3ada1adbb70bf17074643edf97e63ade5ed07f74674f26c48d2d6a9044477ee9f203084c26e85405987ec8b9693deaea20ce78c2a451bf4e834d7bcc3c54c1322b5f28ba307f2ce31a00552b97b8fc103a29fee2e0040ccddfa10bf3ab3d1209e643c228dec575240c7bd750cf4d6d06c958f66bd8a79831df871f6fbd93e025b16bd03de35ffcdbabac65570d2367e624d9f8e8560da9bc3a2142b75008b7ceb8e839dbf425da74c4be15c9dc31735ef1ac6f65c2375042dcf9682df74259b8c4437d7ee8df19fea6ec1d5bd491409cc7276d70ee0ba9172b4177fbce7fa28171a236ca8e2e0c149e602c9c6a0a3ff5f054287f54b7c314b07cdf6d246241dd364c7419cc0647422d08f5511b13e7b5cb719616466e1c6966f5ccd4d2ca2b12dda7047c6f63af5dd47)
+ 20 12:21:24.507694 IP (tos 0x0, ttl 64, id 19927, offset 0, flags [none], proto UDP (17), length 344)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x0729 -> 0xd64e!] isakmp 2.0 msgid 00000008 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=284 2c1ac864ae2c8499b3c7af8c61a8c4dc9e1af23577b588d6bb3fdef3e483cc2f0158c07071d6dfaef73dccb6cdcf7a5758e41778daceb71cf6733e17168beff6ef2015d670c0b6574fc72e97d4282909966f394a9f9e0fced8e269bbf60e93f0f2080f48dcd4e02ff1129b94f68b268ddd9cff436f38e78fa7986d87e622d1f3da3b3c2795570ebc27d3c3d51f29ef0fff01ae89bd71d2e10ab8faee7d7bb4b5be8a9ee0ea9b5e347bbaf3ebdfaf19735d75e6faa020d6ea72826c2aa5cb2ee648de6b36cbb25087428dea44bd34504e05f2d4fef43c48e2a690510e9278ca8ff2f775792af061b5ccbcf77b3fee658851289969c55edc6d561718a0c761b09b0f67c96e61d00a7fa2929023b5adcfdd33436f63a478141d51b52333)
+ 21 12:21:24.517735 IP (tos 0x0, ttl 64, id 19928, offset 0, flags [none], proto UDP (17), length 120)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x0649 -> 0x85b7!] isakmp 2.0 msgid 00000000 cookie 1d9be9451d4f97a8->64a2a4b5d0e17b6a: parent_sa inf2[I]:
+ (v2e: len=60 691b48829b6c5d6dd93fa8e33c38dd4c00f5434dc22b4251c0876f0bdb5dbba3dd06283907559a272f07ec7709b9d596a24cd8fe69b82a1f65dbf6f2)
diff --git a/tests/ikev2fourv4.out b/tests/ikev2fourv4.out
new file mode 100644
index 0000000..35609b5
--- /dev/null
+++ b/tests/ikev2fourv4.out
@@ -0,0 +1,107 @@
+ 1 12:21:24.386989 IP (tos 0x0, ttl 64, id 19908, offset 0, flags [none], proto UDP (17), length 404)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x0765 -> 0xf5df!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->0000000000000000: parent_sa ikev2_init[I]:
+ (sa: len=116
+ (p: #1 protoid=isakmp transform=12 len=116
+ (t: #1 type=encr id=aes (type=keylen value=0080))
+ (t: #2 type=encr id=aes (type=keylen value=0100))
+ (t: #3 type=encr id=aes (type=keylen value=00c0))
+ (t: #4 type=encr id=3des )
+ (t: #5 type=prf id=hmac-sha )
+ (t: #6 type=prf id=hmac-md5 )
+ (t: #7 type=prf id=aes128_xcbc )
+ (t: #8 type=integ id=hmac-sha )
+ (t: #9 type=integ id=hmac-md5 )
+ (t: #10 type=integ id=aes-xcbc )
+ (t: #11 type=dh id=modp1024 )
+ (t: #12 type=dh id=modp2048 )))
+ (v2ke: len=128 group=modp1024 b5445bd60cece6fdcd3c96a52cbb7bb426a8c7a0f56a9c38d1b1c4f0c3a6e8e7dba5c7339b6ed02e757119dfb5b6933ce93b604987fbbc77221b2a0c7cdd32787eff10572bef546c361462f9da34847969a42e51c755996beac42e6fba961a75de0fc1b23f099380896ee89202122dedac1bd54aa8494ac3d740be4d2a4cf39d)
+ (nonce: len=32 nonce=(6128ebd023a864e94a7ffb74bf7cce2fd4367322b8b073f942282bd52ebfe3e6) )
+ (n: prot_id=#0 type=16388(nat_detection_source_ip) data=(442ffe5aea0cee4dbacc758e801233bdc09a0abf0000001c00004005ba041b5de59955900d818ac54e18b236739d9e8b))
+ (n: prot_id=#0 type=16389(nat_detection_destination_ip) data=(ba041b5de59955900d818ac54e18b236739d9e8b))
+ 2 12:21:24.390720 IP (tos 0x0, ttl 64, id 19909, offset 0, flags [none], proto UDP (17), length 88)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x0629 -> 0x0cd0!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->0000000000000000: parent_sa ikev2_init[R]:
+ (n: prot_id=#0 type=16390(cookie) data=(00000001c2221e50c16e123f2b0c71aefcf0cb3b798782c6))
+ 3 12:21:24.394523 IP (tos 0x0, ttl 64, id 19910, offset 0, flags [none], proto UDP (17), length 436)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x0785 -> 0x7702!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->0000000000000000: parent_sa ikev2_init[I]:
+ (n: prot_id=#0 type=16390(cookie) data=(00000001c2221e50c16e123f2b0c71aefcf0cb3b798782c622000078000000740101000c0300000c0100000c800e00800300000c0100000c800e01000300000c0100000c800e00c003000008010000030300000802000002030000080200000103000008020000040300000803000002030000080300000103000008030000050300000804000002000000080400000e2800008800020000b5445bd60cece6fdcd3c96a52cbb7bb426a8c7a0f56a9c38d1b1c4f0c3a6e8e7dba5c7339b6ed02e757119dfb5b6933ce93b604987fbbc77221b2a0c7cdd32787eff10572bef546c361462f9da34847969a42e51c755996beac42e6fba961a75de0fc1b23f099380896ee89202122dedac1bd54aa8494ac3d740be4d2a4cf39d290000246128ebd023a864e94a7ffb74bf7cce2fd4367322b8b073f942282bd52ebfe3e62900001c00004004442ffe5aea0cee4dbacc758e801233bdc09a0abf0000001c00004005ba041b5de59955900d818ac54e18b236739d9e8b))
+ (sa: len=116
+ (p: #1 protoid=isakmp transform=12 len=116
+ (t: #1 type=encr id=aes (type=keylen value=0080))
+ (t: #2 type=encr id=aes (type=keylen value=0100))
+ (t: #3 type=encr id=aes (type=keylen value=00c0))
+ (t: #4 type=encr id=3des )
+ (t: #5 type=prf id=hmac-sha )
+ (t: #6 type=prf id=hmac-md5 )
+ (t: #7 type=prf id=aes128_xcbc )
+ (t: #8 type=integ id=hmac-sha )
+ (t: #9 type=integ id=hmac-md5 )
+ (t: #10 type=integ id=aes-xcbc )
+ (t: #11 type=dh id=modp1024 )
+ (t: #12 type=dh id=modp2048 )))
+ (v2ke: len=128 group=modp1024 b5445bd60cece6fdcd3c96a52cbb7bb426a8c7a0f56a9c38d1b1c4f0c3a6e8e7dba5c7339b6ed02e757119dfb5b6933ce93b604987fbbc77221b2a0c7cdd32787eff10572bef546c361462f9da34847969a42e51c755996beac42e6fba961a75de0fc1b23f099380896ee89202122dedac1bd54aa8494ac3d740be4d2a4cf39d)
+ (nonce: len=32 nonce=(6128ebd023a864e94a7ffb74bf7cce2fd4367322b8b073f942282bd52ebfe3e6) )
+ (n: prot_id=#0 type=16388(nat_detection_source_ip) data=(442ffe5aea0cee4dbacc758e801233bdc09a0abf0000001c00004005ba041b5de59955900d818ac54e18b236739d9e8b))
+ (n: prot_id=#0 type=16389(nat_detection_destination_ip) data=(ba041b5de59955900d818ac54e18b236739d9e8b))
+ 4 12:21:24.403533 IP (tos 0x0, ttl 64, id 19911, offset 0, flags [none], proto UDP (17), length 332)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x071d -> 0x8650!] isakmp 2.0 msgid 00000000 cookie a88875a8198992a6->71be8358efae7663: parent_sa ikev2_init[R]:
+ (sa: len=44
+ (p: #1 protoid=isakmp transform=4 len=44
+ (t: #1 type=encr id=aes (type=keylen value=0080))
+ (t: #2 type=prf id=hmac-sha )
+ (t: #3 type=integ id=hmac-sha )
+ (t: #4 type=dh id=modp1024 )))
+ (v2ke: len=128 group=modp1024 5a56714d3abf64e3a3f401ead9f5323ff0b77faa5f1e99199b13ac821f0a0c4f854786ca09b7a76aa508bcee11f16369a16d5fa041ca2d9a8dfa8228c61f2482d2175c5c1a9491fc221bec7a1fa69f656d4c98ba49ae9d721dedf4a02d7ecdfc201dc785a13ed74e4f3982762a2720ffdfc365ee4e37279af496cd86f881fd15)
+ (nonce: len=32 nonce=(b31c379f272ce2984bd17ca38c8729e1edbc081a14fb0f67cff81721dfeec1f9) )
+ (n: prot_id=#0 type=16388(nat_detection_source_ip) data=(fe2bfb7c2c81ed0b61f756b57fac78a75ced8af60000001c00004005905954a783be2c37e2ccc4fdd270a532dbe6f428))
+ (n: prot_id=#0 type=16389(nat_detection_destination_ip) data=(905954a783be2c37e2ccc4fdd270a532dbe6f428))
+ 5 12:21:24.414868 IP (tos 0x0, ttl 64, id 19912, offset 0, flags [none], proto UDP (17), length 264)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x07d9 -> 0xb2d6!] isakmp 2.0 msgid 00000001 cookie a88875a8198992a6->71be8358efae7663: child_sa ikev2_auth[I]:
+ (v2e: len=204 f606135ad373e70836fda91b63ca4c608e1ad58218488c2647ff1e8a912958aa77efbc3068a2ae6ab7c3d0cb1e6fb864df99c62f2cc045708084708154a393c2f4cbefad1f6848525d49db563e13345a4e6e2fd066c04e2ce291f4714baec6bf328356c446247cab835bda3e8e1aae5967248f01eb3a1c02a541b4da09b3276b400d50a067542a678468c5f41e54017c00964f1003f8c88896a6f12215a5f1a060713cc83802cae3abee18417c0c35dc6f58a01adb96ed1c009c68e3069ae70f4b10afb7736c111ade4d826e)
+ 6 12:21:24.420851 IP (tos 0x0, ttl 64, id 19913, offset 0, flags [none], proto UDP (17), length 184)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x0689 -> 0x0748!] isakmp 2.0 msgid 00000001 cookie a88875a8198992a6->71be8358efae7663: child_sa ikev2_auth[R]:
+ (v2e: len=124 6afe95bc5147b0ad7e4ccb9141c160a44f7c6eddc6b29d414ad5e2b882544fdc6c3ee6983ae1408b5764b1649343876454d1bf4d515aaf03c15eafe71be6b4cf51ab60630c45bcf0e2a2db8eee70095a4e010fdb342adb6d03dae5def9d4907cdfc8ccd6f3da9b7497c58e84a952d983bafb941ab1de1b0bb9ffad3b)
+ 7 12:21:24.428594 IP (tos 0x0, ttl 64, id 19914, offset 0, flags [none], proto UDP (17), length 280)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x07e9 -> 0x35ac!] isakmp 2.0 msgid 00000002 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=220 53cc6c0b41f14e4fc057c7f6a3524adde8521f26f67c058430a902db1a52ed16d322630d2eb515372dc12d97dc7c20552607e2ed193d9b33939e10aa2fc37b6199f0a629c6b58135f5b6f9e07906cd30dc3cae7d55fe08d95d3e660a623731c396a325adbff11c490f9fd102224391a65fb7bbe862945b64cf1fb833b9ce68c83df0b9d2ce7bd54f650864af9445e547cdfe5caa393344ae5274933b7efcf616821ea7daa9c5a6e8275ad6c688700cb7f4bcd6fb8025e93bb6dd5f581faebcbecb798c87617a4ec1b06ba290ac5fc1d6e4c2725c1f9f0e10b144fbbe)
+ 8 12:21:24.431476 IP (tos 0x0, ttl 64, id 19915, offset 0, flags [none], proto UDP (17), length 248)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x06c9 -> 0xdeaf!] isakmp 2.0 msgid 00000003 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=188 9603e03f280964782717da15a502f0a9e9f17dbf4487c6923cf00b7040d539bc947c705790e4e99b834a7ae2a8d79f5620e11615e0a762889aab821e0d03132dfb8cc6b3718582411bcd98c242a8b10a66274dae1ce055fb30a4d3e64c969be6e08b626958f4446c6e4a0c8d7a24522959c6152e63a575c06930c2097539bfbdff08c70533428cf6b452e0b8b0259c2292925d2ed62e8956bc7e3a911a61509be1ac8f7b7cd4636176e524f4d0f17573f2aeddce2251fd6d5d9cd54d)
+ 9 12:21:24.434259 IP (tos 0x0, ttl 64, id 19916, offset 0, flags [none], proto UDP (17), length 104)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x0639 -> 0xc72b!] isakmp 2.0 msgid 00000002 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=44 5bd2d26cb43b6cec30dec13fa387359797baf7b41e783422bc4dabf5d03ab2420d277d3b2f28d1f003da98d1)
+ 10 12:21:24.441104 IP (tos 0x0, ttl 64, id 19917, offset 0, flags [none], proto UDP (17), length 104)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x0639 -> 0x4119!] isakmp 2.0 msgid 00000003 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=44 38f60ab69110967961ae04af4e47a770260d61e29d18fb13ce093a47970068dacb342f7999cc3d0d59f77a94)
+ 11 12:21:24.447581 IP (tos 0x0, ttl 64, id 19918, offset 0, flags [none], proto UDP (17), length 312)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x0709 -> 0x236f!] isakmp 2.0 msgid 00000004 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=252 c7f2f1cc4997b30a61623222d4bfb535baa302199c4d8c1fdcfa745b0b29b5e7618ff0356848444d25010e5ad420760890ede066c838269b22d9e30d4fec1a012e731a210c243f803b661970d32e998e919f573c5742d2288949052c5a46a0cd7c4a1a295ede296c4fd9839b64dc4944e11a35f42a8ce18b447200fd03dbd58a71583b3a27c380148c801ce14452f7d756b1f55b10b84a58cfa9526001fff7157154645022e4456085517ceed98b79e20ed33297cf5ad80287e782728a8c6b87d2b422e7eeda1c72b33ebc51a5b76def9a59ffd1b4f97dec88c22a4f5448a71aeedf20c87dae5b44cd2e7a519d719a509f83f3b2faf6f5c607da609f)
+ 12 12:21:24.450581 IP (tos 0x0, ttl 64, id 19919, offset 0, flags [none], proto UDP (17), length 280)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x07e9 -> 0xd8ba!] isakmp 2.0 msgid 00000005 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=220 dae6134a9cff1a4e3cc59a79e019a93f8469dd4e2faaaad1c3afba22ecd128fdb1e8954c753f8f62aeb6aac9732f414b065ec39569a670be6980c81eb3e44bc93ec63e9a754d0456c6703cd718371edeef674928180f9d14c39e52cfa4a517368e7db2fa0bfdb41cf56d97006233103f22650fdcd5ffab8418e40903e4749e126d06e9dc2a18cfd5bfda0013e3e9eb53e79bbe30eadf0f4ddcefbab0c08e870b29d39b2401c75b68fc46a066782857ca48d547e410ac15cabb6738875200b535cbd9ae1e1ce99839c9c25639070e5ed977809c50b6bb9550b50b49bb)
+ 13 12:21:24.454303 IP (tos 0x0, ttl 64, id 19920, offset 0, flags [none], proto UDP (17), length 232)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x06b9 -> 0x7194!] isakmp 2.0 msgid 00000004 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=172 1fd8516b57b1ab1bdbcdba1930a5097decc023c5c534497ca53f178b9d4d11228746454371b0cc6ec067e14e1e5c5652840cfdae0ea84c7f0a6e799ff7fb131d15763feef45e80f24716cde47d23527f68e055a7c3adc7225489295e1bc3f1029b63822872865df55c6c275dead8a6f64bda8ae44f42c318fa71eb04eed7312dafd2dd8665fd5d3225f3aae6f7335b581c3a89c07af1009871dea9927f046432cd01b04234204d01583baf3a)
+ 14 12:21:24.462453 IP (tos 0x0, ttl 64, id 19921, offset 0, flags [none], proto UDP (17), length 232)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x06b9 -> 0x6053!] isakmp 2.0 msgid 00000005 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=172 f6fc8113f34b92eb7d595a048f57d46593441ad9a61919e5919e7de4454fa35882937d3b74c83ab959fd053c6a12a51b04a0e92e01683782658bb9af2bbcc7a4bd5e1eef2dbcdc7715cac6eaecfbcc051a46f2263d1b8387bdad7e68c6e4ba1be9794e163e484768995a9f4a18edcbc6a44f0a74cb01c318e7848562e0866f388b8d04f14f1af87de7de6cee1f889d4330d82932a7127b7d1a934e641c32b76e33b37706d50286f8cbe335ba)
+ 15 12:21:24.470120 IP (tos 0x0, ttl 64, id 19922, offset 0, flags [none], proto UDP (17), length 312)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x0709 -> 0xfb68!] isakmp 2.0 msgid 00000006 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=252 0aa2636a3b897ff3fa8093282ad1724ec9f326b64bf998e781d6edbb77a369a8444dc47a4dc095ebd3ac3b1dc337570bc42c93cd6dcb7289bc99a90874e66cc4ede7a13a58ce17c65b185e86def83d66f4c4ddc433e66baf1834e54296671357a5139b0b63ebf32e652df0938badea5a960ee1758e00faa643bed85f7adee2e2e75baeec9e0df88857a67ca5f2a2f4919d0b272313d42c791eb75feca145756a0ccae3640ee98c16689df511443228846d2c5b8830ea6d149c1abed11ad0a28ca33993036e91965d48a82a898145ada994af55978696480ab6cb697e13e67968a7748c3338786efb77250e5411b3a7eac84cd221324bd7b9109d9a69)
+ 16 12:21:24.472695 IP (tos 0x0, ttl 64, id 19923, offset 0, flags [none], proto UDP (17), length 280)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x07e9 -> 0x9881!] isakmp 2.0 msgid 00000007 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=220 02c703f4bdd83246adc67e1ca07d7e7cfe21b6bde94637680a332813b8a4ca47341abd3a9c37263896c08252bfb1ea6c7ea44783b92ac52acb4fbfec53f03554281c6377650c09208f3d778b11e77b5fbd983be1e96699232392ef31a501fda73c6150fcc2e80bab1e0d49845bd5d511f7c9285ec08352687a2ac8d70d0dec3476491c40b97cb9da405606fc5e8d46bbe199e6d91ae993b7faa0583ec4296a80812fb7e0ae88d3bd54c4a30e5edb2778c960f3e0cb5b1369e999f84de4dc72b5d006805efb7e2d2ed4033e11ff9578012d22942e3799c9382506a021)
+ 17 12:21:24.476686 IP (tos 0x0, ttl 64, id 19924, offset 0, flags [none], proto UDP (17), length 232)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x06b9 -> 0x3549!] isakmp 2.0 msgid 00000006 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=172 7e2e6623c66e161de9641ac7e1b6dfdcf3a5f45bbed123be88f3754d12514404afc054b3c7f789eb52a432a438359dde31152c11b8d209203d62779ca064823d70536c40f846d43d6694a2f12a3176f57007a3506c82fffaf3dbb713bbdbb5f540b7b39aee3c97145671504356095f7ab0c5a84347c0268bce259ca51b4a2dd75a7e3a7ee79f3bffc58d2fc0ac36686229f2309b5cd0c0dcc2af798664c14f5f166ab5e3c1f693092121aa44)
+ 18 12:21:24.485264 IP (tos 0x0, ttl 64, id 19925, offset 0, flags [none], proto UDP (17), length 232)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x06b9 -> 0xe402!] isakmp 2.0 msgid 00000007 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=172 7b545033a2d35df2ab9f26c4bc444713910a32e60fb04cb10a9e76634787f9ddc138c6792faa074be2ebcb43f83f444249679018ec6dc7d4e2247dd8cb915778d90fa5597f1ecba8471db53e3b4da8f73d1eb60c23ca9fb5fa599dc526a961364471b49e5288fcef6a24d02a084d29c4a5c5d1fa305310dba01d09c9c36c86c0af297e05d3fc8559a11666a4363bacc354e96c941349b3f60dd397eb4c2bb09f381831167c0b33686c6bb5d8)
+ 19 12:21:24.494634 IP (tos 0x0, ttl 64, id 19926, offset 0, flags [none], proto UDP (17), length 392)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x0759 -> 0x3076!] isakmp 2.0 msgid 00000008 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[I]:
+ (v2e: len=332 c4bf89ec6e7936ac98a432a525c2406de940b338c9149ce19cb1bf23a69dfd481df7b3ada1adbb70bf17074643edf97e63ade5ed07f74674f26c48d2d6a9044477ee9f203084c26e85405987ec8b9693deaea20ce78c2a451bf4e834d7bcc3c54c1322b5f28ba307f2ce31a00552b97b8fc103a29fee2e0040ccddfa10bf3ab3d1209e643c228dec575240c7bd750cf4d6d06c958f66bd8a79831df871f6fbd93e025b16bd03de35ffcdbabac65570d2367e624d9f8e8560da9bc3a2142b75008b7ceb8e839dbf425da74c4be15c9dc31735ef1ac6f65c2375042dcf9682df74259b8c4437d7ee8df19fea6ec1d5bd491409cc7276d70ee0ba9172b4177fbce7fa28171a236ca8e2e0c149e602c9c6a0a3ff5f054287f54b7c314b07cdf6d246241dd364c7419cc0647422d08f5511b13e7b5cb719616466e1c6966f5ccd4d2ca2b12dda7047c6f63af5dd47)
+ 20 12:21:24.507694 IP (tos 0x0, ttl 64, id 19927, offset 0, flags [none], proto UDP (17), length 344)
+ 192.168.1.1.500 > 192.168.1.2.500: [bad udp cksum 0x0729 -> 0xd64e!] isakmp 2.0 msgid 00000008 cookie a88875a8198992a6->71be8358efae7663: child_sa child_sa[R]:
+ (v2e: len=284 2c1ac864ae2c8499b3c7af8c61a8c4dc9e1af23577b588d6bb3fdef3e483cc2f0158c07071d6dfaef73dccb6cdcf7a5758e41778daceb71cf6733e17168beff6ef2015d670c0b6574fc72e97d4282909966f394a9f9e0fced8e269bbf60e93f0f2080f48dcd4e02ff1129b94f68b268ddd9cff436f38e78fa7986d87e622d1f3da3b3c2795570ebc27d3c3d51f29ef0fff01ae89bd71d2e10ab8faee7d7bb4b5be8a9ee0ea9b5e347bbaf3ebdfaf19735d75e6faa020d6ea72826c2aa5cb2ee648de6b36cbb25087428dea44bd34504e05f2d4fef43c48e2a690510e9278ca8ff2f775792af061b5ccbcf77b3fee658851289969c55edc6d561718a0c761b09b0f67c96e61d00a7fa2929023b5adcfdd33436f63a478141d51b52333)
+ 21 12:21:24.517735 IP (tos 0x0, ttl 64, id 19928, offset 0, flags [none], proto UDP (17), length 120)
+ 192.168.1.2.500 > 192.168.1.1.500: [bad udp cksum 0x0649 -> 0x85b7!] isakmp 2.0 msgid 00000000 cookie 1d9be9451d4f97a8->64a2a4b5d0e17b6a: parent_sa inf2[I]:
+ (v2e: len=60 691b48829b6c5d6dd93fa8e33c38dd4c00f5434dc22b4251c0876f0bdb5dbba3dd06283907559a272f07ec7709b9d596a24cd8fe69b82a1f65dbf6f2)
diff --git a/tests/ikev2pI2-secrets.txt b/tests/ikev2pI2-secrets.txt
new file mode 100644
index 0000000..efe9636
--- /dev/null
+++ b/tests/ikev2pI2-secrets.txt
@@ -0,0 +1,2 @@
+ikev2 I 0x0001020304050607 0xc02e7a3031a03188 sha1:0x4ea8e662b07cdd430f6944c6723e4b82d5722418 aes128:0x3f44bf47cafd8150591deb088199fcbf
+ikev2 R 0x0001020304050607 0xc02e7a3031a03188 sha1:0x515b0bd22e6d76b34fdb760aa7bfad80b109b75d aes128:0xbedb67ec7dc3d00cccac42e70cd63bde
diff --git a/tests/ikev2pI2-segfault-v.out b/tests/ikev2pI2-segfault-v.out
new file mode 100644
index 0000000..ed4bfe4
--- /dev/null
+++ b/tests/ikev2pI2-segfault-v.out
@@ -0,0 +1,8 @@
+ 1 00:00:00.000000 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 536, bad cksum 0 (->f48e)!)
+ 192.1.2.45.500 > 192.1.2.23.500: isakmp 2.0 msgid 00000000: parent_sa ikev2_init[I]:
+ (sa[C]: len=240
+ (p: #1 protoid=isakmp transform=4 len=40
+ (t: #1 type=encr id=#26380 )
+ (t: #2 type=integ id=hmac-sha )
+ (t: #3 type=prf id=hmac-sha )
+ (v2e)) [|v2sa]) [|v2ke]
diff --git a/tests/ikev2pI2-segfault.out b/tests/ikev2pI2-segfault.out
new file mode 100644
index 0000000..299fe30
--- /dev/null
+++ b/tests/ikev2pI2-segfault.out
@@ -0,0 +1 @@
+ 1 00:00:00.000000 IP 192.1.2.45.500 > 192.1.2.23.500: isakmp: parent_sa ikev2_init[I]
diff --git a/tests/ikev2pI2-segfault.pcapng b/tests/ikev2pI2-segfault.pcapng
new file mode 100644
index 0000000..43a7e28
--- /dev/null
+++ b/tests/ikev2pI2-segfault.pcapng
Binary files differ
diff --git a/tests/ikev2pI2.out b/tests/ikev2pI2.out
new file mode 100644
index 0000000..159fd7b
--- /dev/null
+++ b/tests/ikev2pI2.out
@@ -0,0 +1,41 @@
+ 1 00:00:00.000000 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 536, bad cksum 0 (->f48e)!)
+ 192.1.2.45.500 > 192.1.2.23.500: [no cksum] isakmp 2.0 msgid 00000000 cookie 0001020304050607->0000000000000000: parent_sa ikev2_init[I]:
+ (sa[C]: len=240
+ (p: #1 protoid=isakmp transform=4 len=40
+ (t: #1 type=encr id=aes )
+ (t: #2 type=integ id=hmac-sha )
+ (t: #3 type=prf id=hmac-sha )
+ (t: #4 type=dh id=modp1536 ))
+ (p: #2 protoid=isakmp transform=4 len=40
+ (t: #1 type=encr id=aes )
+ (t: #2 type=integ id=hmac-sha )
+ (t: #3 type=prf id=hmac-md5 )
+ (t: #4 type=dh id=modp1536 ))
+ (p: #3 protoid=isakmp transform=4 len=40
+ (t: #1 type=encr id=3des )
+ (t: #2 type=integ id=hmac-sha )
+ (t: #3 type=prf id=hmac-sha )
+ (t: #4 type=dh id=modp1536 ))
+ (p: #4 protoid=isakmp transform=4 len=40
+ (t: #1 type=encr id=3des )
+ (t: #2 type=integ id=hmac-sha )
+ (t: #3 type=prf id=hmac-md5 )
+ (t: #4 type=dh id=modp1536 ))
+ (p: #5 protoid=isakmp transform=4 len=40
+ (t: #1 type=encr id=3des )
+ (t: #2 type=integ id=hmac-sha )
+ (t: #3 type=prf id=hmac-sha )
+ (t: #4 type=dh id=modp1024 ))
+ (p: #6 protoid=isakmp transform=4 len=40
+ (t: #1 type=encr id=3des )
+ (t: #2 type=integ id=hmac-sha )
+ (t: #3 type=prf id=hmac-md5 )
+ (t: #4 type=dh id=modp1024 )))
+ (v2ke: len=192 group=modp1536 ffbc6a92a6b9559b05fa96a7a43507b4c1e1c0861a5871d9ba73a163113788c0debb3979e7ff0c52b4ce6050eb05369ea4300d2bff3b1b299f3b802ccb13318c2ab9e3b5627cb4b35eb939982076b57c050d7b35c3c5c7cc8c0feab7b64a7d7b6b8f6b4dabf4ac406dd20126b90a98ac766efa37a7890c4394ff9a77615b58f52d651bbfa58d2a549af8b01aa4bca3d762426663b155d4ebda9f60a6a13573e6a888135cdc673dd483029903f3a90eca23e1ec1e270331b2d050f4f758f49927)
+ (nonce[C]: len=16 nonce=(b5ce8419095c6e2b6b62d3055305b3c4) )
+ (v2vid: len=12 vid=OErlA\nQukSR 4f45726c415c6e51756b5352)
+ 2 00:00:00.000000 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 312, bad cksum 0 (->f56e)!)
+ 192.1.2.45.500 > 192.1.2.23.500: [no cksum] isakmp 2.0 msgid 00000000 cookie 0001020304050607->c02e7a3031a03188: parent_sa ikev2_auth[I]:
+ (v2e[C]: len=252 000102030405060708090a0b0c0d0e0f4bcf2da20444caca5fb591c1ab4b9b4d4f22ac7cb49e6b08d2738884fb3efd8eebc607accc1f80f890e24df65e53d61e899f1d319d89c033524d036fd4ea7e0345def93356e2865e5481a6a20a7604083de04595e1071a2e98179eefb4e6ae4708e6875ae297b4dc5b2602d971e36f66cef12303946eea897d86bbb5903115281a266f4dcb627e146972ff2f7102931df82f24a2e40df594afc11e0a85eb1c56b9eddb7e2de52fa95cf51f4b4c9b5d53237ae39f64519413d201374a987fa8d1ce460fa2d67c417462203f2948c0b9ed8b734a69a015ff63bde767f44f83c3cfe5119d72d74e695b1032b957
+ (v2IDi: len=8 0200000077657374 fqdn:west)
+ (v2auth: len=196 method=rsasig authdata=(000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) ))
diff --git a/tests/ikev2pI2.pcap b/tests/ikev2pI2.pcap
new file mode 100644
index 0000000..8d5eb48
--- /dev/null
+++ b/tests/ikev2pI2.pcap
Binary files differ
diff --git a/tests/ip6_frag_asan.out b/tests/ip6_frag_asan.out
new file mode 100644
index 0000000..42f6c96
--- /dev/null
+++ b/tests/ip6_frag_asan.out
@@ -0,0 +1 @@
+ 1 [Error converting time] IP6 (class 0x51, flowlabel 0xb2100, hlim 16, next-header Fragment (44) payload length: 27136) 452:22:19:0:41a:e4ff:10ff:484d > 2243:80:1400:100:19:ffff:ffff:fffb: [|frag6]
diff --git a/tests/ip6_frag_asan.pcap b/tests/ip6_frag_asan.pcap
new file mode 100644
index 0000000..0ef1ffc
--- /dev/null
+++ b/tests/ip6_frag_asan.pcap
Binary files differ
diff --git a/tests/ip_printroute_asan.out b/tests/ip_printroute_asan.out
new file mode 100644
index 0000000..181476f
--- /dev/null
+++ b/tests/ip_printroute_asan.out
@@ -0,0 +1,2 @@
+ 1 11:22:39.003332 IP (tos 0x0, ttl 254, id 25615, offset 65480, flags [DF, rsvd], proto UDP (17), length 32768, options (LSRR [bad length 25] [bad ptr 15] 103.103.103.0, 0.172.0.116, 0.16.36.36, 16.0.36.2 14.9.36.4 [truncated-option]))
+ 251.73.86.0 > 0.172.128.5: [|ip]
diff --git a/tests/ip_printroute_asan.pcap b/tests/ip_printroute_asan.pcap
new file mode 100644
index 0000000..d584416
--- /dev/null
+++ b/tests/ip_printroute_asan.pcap
Binary files differ
diff --git a/tests/ip_ts_opts_asan.out b/tests/ip_ts_opts_asan.out
new file mode 100644
index 0000000..53b08ea
--- /dev/null
+++ b/tests/ip_ts_opts_asan.out
@@ -0,0 +1,2 @@
+ 1 06:29:34.131840 IP (tos 0xe2,ECT(0), id 32, offset 0, flags [+, DF, rsvd], proto ICMP (1), length 65319, options (timestamp TS{[bad length 14]TS+ADDR ^ 1229070338@0.0.52.112 [truncated-option]), bad cksum a09b (->90a7)!)
+ 149.8.33.81 > 95.18.83.227: [|ip]
diff --git a/tests/ip_ts_opts_asan.pcap b/tests/ip_ts_opts_asan.pcap
new file mode 100644
index 0000000..2faed65
--- /dev/null
+++ b/tests/ip_ts_opts_asan.pcap
Binary files differ
diff --git a/tests/ipcomp-heapoverflow.out b/tests/ipcomp-heapoverflow.out
new file mode 100644
index 0000000..01317ce
--- /dev/null
+++ b/tests/ipcomp-heapoverflow.out
@@ -0,0 +1,2 @@
+ 1 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto Compressed IP (108), length 12336, bad cksum 3030 (->6942)!)
+ 48.48.48.48 > 48.48.48.48: [|ipcomp]
diff --git a/tests/ipcomp-heapoverflow.pcap b/tests/ipcomp-heapoverflow.pcap
new file mode 100644
index 0000000..506f105
--- /dev/null
+++ b/tests/ipcomp-heapoverflow.pcap
Binary files differ
diff --git a/tests/ipoib-e.out b/tests/ipoib-e.out
new file mode 100644
index 0000000..2530083
--- /dev/null
+++ b/tests/ipoib-e.out
@@ -0,0 +1,30 @@
+ 1 16:32:32.697187 IPOIB, ethertype IPv4 (0x0800), length 128: 192.168.56.10 > 192.168.56.24: ICMP echo request, id 6495, seq 0, length 64
+ 2 16:32:33.693114 IPOIB, ethertype IPv4 (0x0800), length 128: 192.168.56.10 > 192.168.56.24: ICMP echo request, id 6495, seq 1, length 64
+ 3 16:32:34.693061 IPOIB, ethertype IPv4 (0x0800), length 128: 192.168.56.10 > 192.168.56.24: ICMP echo request, id 6495, seq 2, length 64
+ 4 16:32:35.692995 IPOIB, ethertype IPv4 (0x0800), length 128: 192.168.56.10 > 192.168.56.24: ICMP echo request, id 6495, seq 3, length 64
+ 5 16:32:36.692951 IPOIB, ethertype IPv4 (0x0800), length 128: 192.168.56.10 > 192.168.56.24: ICMP echo request, id 6495, seq 4, length 64
+ 6 16:32:37.692854 IPOIB, ethertype ARP (0x0806), length 100: Request who-has 192.168.56.24 (00:ff:ff:ff:ff:10:40:1b:00:00:00:00:00:00:00:00:ff:ff:ff:ff) tell 192.168.56.10, length 56
+ 7 16:32:37.692874 IPOIB, ethertype ARP (0x0806), length 100: Reply 192.168.56.24 is-at 80:00:05:50:fe:80:00:00:00:00:00:00:00:10:e0:00:66:4a:b4:51, length 56
+ 8 16:32:37.692912 IPOIB, ethertype IPv4 (0x0800), length 128: 192.168.56.10 > 192.168.56.24: ICMP echo request, id 6495, seq 5, length 64
+ 9 16:32:45.050083 IPOIB, ethertype IPv4 (0x0800), length 104: 192.168.56.10.34170 > 192.168.56.24.22: Flags [SEW], seq 798232822, win 32983, options [mss 65480,sackOK,TS val 62202209 ecr 0,nop,wscale 8], length 0
+ 10 16:32:45.050250 IPOIB, ethertype IPv4 (0x0800), length 96: 192.168.56.10.34170 > 192.168.56.24.22: Flags [.], ack 3051049339, win 33232, options [nop,nop,TS val 62202209 ecr 81054], length 0
+ 11 16:32:45.051868 IPOIB, ethertype IPv4 (0x0800), length 122: 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 0:26, ack 1, win 33232, options [nop,nop,TS val 62202209 ecr 81054], length 26: SSH: SSH-2.0-OpenSSH_7.5 FIPS
+ 12 16:32:45.062494 IPOIB, ethertype IPv4 (0x0800), length 96: 192.168.56.10.34170 > 192.168.56.24.22: Flags [.], ack 23, win 33232, options [nop,nop,TS val 62202210 ecr 81055], length 0
+ 13 16:32:45.130591 IPOIB, ethertype IPv4 (0x0800), length 1160: 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 26:1090, ack 23, win 33232, options [nop,nop,TS val 62202217 ecr 81055], length 1064
+ 14 16:32:45.158656 IPOIB, ethertype IPv4 (0x0800), length 96: 192.168.56.10.34170 > 192.168.56.24.22: Flags [.], ack 1087, win 33232, options [nop,nop,TS val 62202220 ecr 81064], length 0
+ 15 16:32:45.163152 IPOIB, ethertype IPv4 (0x0800), length 176: 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 1090:1170, ack 1087, win 33232, options [nop,nop,TS val 62202221 ecr 81064], length 80
+ 16 16:32:45.232547 IPOIB, ethertype IPv4 (0x0800), length 96: 192.168.56.10.34170 > 192.168.56.24.22: Flags [.], ack 1947, win 33232, options [nop,nop,TS val 62202228 ecr 81065], length 0
+ 17 16:32:49.933691 IPOIB, ethertype IPv4 (0x0800), length 112: 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 1170:1186, ack 1947, win 33232, options [nop,nop,TS val 62202698 ecr 81065], length 16
+ 18 16:32:50.000156 IPOIB, ethertype IPv4 (0x0800), length 164: 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 1186:1254, ack 1947, win 33232, options [nop,nop,TS val 62202704 ecr 81549], length 68
+ 19 16:32:50.000371 IPOIB, ethertype IPv4 (0x0800), length 180: 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 1254:1338, ack 2015, win 33232, options [nop,nop,TS val 62202704 ecr 81549], length 84
+ 20 16:32:50.003141 IPOIB, ethertype IPv4 (0x0800), length 196: 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 1338:1438, ack 2131, win 33232, options [nop,nop,TS val 62202705 ecr 81549], length 100
+ 21 16:32:50.062351 IPOIB, ethertype IPv4 (0x0800), length 96: 192.168.56.10.34170 > 192.168.56.24.22: Flags [.], ack 2215, win 33232, options [nop,nop,TS val 62202711 ecr 81549], length 0
+ 22 16:32:51.426569 IPOIB, ethertype IPv4 (0x0800), length 96: 192.168.56.10.34170 > 192.168.56.24.22: Flags [F.], seq 1438, ack 2215, win 33232, options [nop,nop,TS val 62202847 ecr 81549], length 0
+ 23 16:32:51.429733 IPOIB, ethertype IPv4 (0x0800), length 96: 192.168.56.10.34170 > 192.168.56.24.22: Flags [.], ack 2216, win 33232, options [nop,nop,TS val 62202847 ecr 81691], length 0
+ 24 16:33:23.780806 IPOIB, ethertype IPv4 (0x0800), length 104: 192.168.56.10.52289 > 192.168.56.24.8: Flags [SEW], seq 4205904195, win 32983, options [mss 65480,sackOK,TS val 62206082 ecr 0,nop,wscale 8], length 0
+ 25 16:33:28.770678 IPOIB, ethertype ARP (0x0806), length 100: Request who-has 192.168.56.24 (00:ff:ff:ff:ff:10:40:1b:00:00:00:00:00:00:00:00:ff:ff:ff:ff) tell 192.168.56.10, length 56
+ 26 16:33:28.770705 IPOIB, ethertype ARP (0x0806), length 100: Reply 192.168.56.24 is-at 80:00:05:50:fe:80:00:00:00:00:00:00:00:10:e0:00:66:4a:b4:51, length 56
+ 27 16:33:33.533155 IPOIB, ethertype IPv4 (0x0800), length 104: 192.168.56.10.56684 > 192.168.56.24.8: Flags [SEW], seq 1401918527, win 32983, options [mss 65480,sackOK,TS val 62207058 ecr 0,nop,wscale 8], length 0
+ 28 16:33:43.228322 IPOIB, ethertype IPv4 (0x0800), length 104: 192.168.56.10.54877 > 192.168.56.24.13: Flags [SEW], seq 4116179817, win 32983, options [mss 65480,sackOK,TS val 62208027 ecr 0,nop,wscale 8], length 0
+ 29 16:33:45.396161 IPOIB, ethertype IPv4 (0x0800), length 104: 192.168.56.10.43822 > 192.168.56.24.12: Flags [SEW], seq 563261006, win 32983, options [mss 65480,sackOK,TS val 62208244 ecr 0,nop,wscale 8], length 0
+ 30 16:33:49.323197 IPOIB, ethertype IPv4 (0x0800), length 104: 192.168.56.10.51201 > 192.168.56.24.14: Flags [SEW], seq 1067180915, win 32983, options [mss 65480,sackOK,TS val 62208637 ecr 0,nop,wscale 8], length 0
diff --git a/tests/ipoib.out b/tests/ipoib.out
new file mode 100644
index 0000000..a5605bf
--- /dev/null
+++ b/tests/ipoib.out
@@ -0,0 +1,30 @@
+ 1 16:32:32.697187 IP 192.168.56.10 > 192.168.56.24: ICMP echo request, id 6495, seq 0, length 64
+ 2 16:32:33.693114 IP 192.168.56.10 > 192.168.56.24: ICMP echo request, id 6495, seq 1, length 64
+ 3 16:32:34.693061 IP 192.168.56.10 > 192.168.56.24: ICMP echo request, id 6495, seq 2, length 64
+ 4 16:32:35.692995 IP 192.168.56.10 > 192.168.56.24: ICMP echo request, id 6495, seq 3, length 64
+ 5 16:32:36.692951 IP 192.168.56.10 > 192.168.56.24: ICMP echo request, id 6495, seq 4, length 64
+ 6 16:32:37.692854 ARP, Request who-has 192.168.56.24 (00:ff:ff:ff:ff:10:40:1b:00:00:00:00:00:00:00:00:ff:ff:ff:ff) tell 192.168.56.10, length 56
+ 7 16:32:37.692874 ARP, Reply 192.168.56.24 is-at 80:00:05:50:fe:80:00:00:00:00:00:00:00:10:e0:00:66:4a:b4:51, length 56
+ 8 16:32:37.692912 IP 192.168.56.10 > 192.168.56.24: ICMP echo request, id 6495, seq 5, length 64
+ 9 16:32:45.050083 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [SEW], seq 798232822, win 32983, options [mss 65480,sackOK,TS val 62202209 ecr 0,nop,wscale 8], length 0
+ 10 16:32:45.050250 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [.], ack 3051049339, win 33232, options [nop,nop,TS val 62202209 ecr 81054], length 0
+ 11 16:32:45.051868 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 0:26, ack 1, win 33232, options [nop,nop,TS val 62202209 ecr 81054], length 26: SSH: SSH-2.0-OpenSSH_7.5 FIPS
+ 12 16:32:45.062494 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [.], ack 23, win 33232, options [nop,nop,TS val 62202210 ecr 81055], length 0
+ 13 16:32:45.130591 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 26:1090, ack 23, win 33232, options [nop,nop,TS val 62202217 ecr 81055], length 1064
+ 14 16:32:45.158656 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [.], ack 1087, win 33232, options [nop,nop,TS val 62202220 ecr 81064], length 0
+ 15 16:32:45.163152 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 1090:1170, ack 1087, win 33232, options [nop,nop,TS val 62202221 ecr 81064], length 80
+ 16 16:32:45.232547 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [.], ack 1947, win 33232, options [nop,nop,TS val 62202228 ecr 81065], length 0
+ 17 16:32:49.933691 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 1170:1186, ack 1947, win 33232, options [nop,nop,TS val 62202698 ecr 81065], length 16
+ 18 16:32:50.000156 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 1186:1254, ack 1947, win 33232, options [nop,nop,TS val 62202704 ecr 81549], length 68
+ 19 16:32:50.000371 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 1254:1338, ack 2015, win 33232, options [nop,nop,TS val 62202704 ecr 81549], length 84
+ 20 16:32:50.003141 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [P.], seq 1338:1438, ack 2131, win 33232, options [nop,nop,TS val 62202705 ecr 81549], length 100
+ 21 16:32:50.062351 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [.], ack 2215, win 33232, options [nop,nop,TS val 62202711 ecr 81549], length 0
+ 22 16:32:51.426569 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [F.], seq 1438, ack 2215, win 33232, options [nop,nop,TS val 62202847 ecr 81549], length 0
+ 23 16:32:51.429733 IP 192.168.56.10.34170 > 192.168.56.24.22: Flags [.], ack 2216, win 33232, options [nop,nop,TS val 62202847 ecr 81691], length 0
+ 24 16:33:23.780806 IP 192.168.56.10.52289 > 192.168.56.24.8: Flags [SEW], seq 4205904195, win 32983, options [mss 65480,sackOK,TS val 62206082 ecr 0,nop,wscale 8], length 0
+ 25 16:33:28.770678 ARP, Request who-has 192.168.56.24 (00:ff:ff:ff:ff:10:40:1b:00:00:00:00:00:00:00:00:ff:ff:ff:ff) tell 192.168.56.10, length 56
+ 26 16:33:28.770705 ARP, Reply 192.168.56.24 is-at 80:00:05:50:fe:80:00:00:00:00:00:00:00:10:e0:00:66:4a:b4:51, length 56
+ 27 16:33:33.533155 IP 192.168.56.10.56684 > 192.168.56.24.8: Flags [SEW], seq 1401918527, win 32983, options [mss 65480,sackOK,TS val 62207058 ecr 0,nop,wscale 8], length 0
+ 28 16:33:43.228322 IP 192.168.56.10.54877 > 192.168.56.24.13: Flags [SEW], seq 4116179817, win 32983, options [mss 65480,sackOK,TS val 62208027 ecr 0,nop,wscale 8], length 0
+ 29 16:33:45.396161 IP 192.168.56.10.43822 > 192.168.56.24.12: Flags [SEW], seq 563261006, win 32983, options [mss 65480,sackOK,TS val 62208244 ecr 0,nop,wscale 8], length 0
+ 30 16:33:49.323197 IP 192.168.56.10.51201 > 192.168.56.24.14: Flags [SEW], seq 1067180915, win 32983, options [mss 65480,sackOK,TS val 62208637 ecr 0,nop,wscale 8], length 0
diff --git a/tests/ipoib.pcap b/tests/ipoib.pcap
new file mode 100644
index 0000000..12b9e88
--- /dev/null
+++ b/tests/ipoib.pcap
Binary files differ
diff --git a/tests/ipv6-bad-version.out b/tests/ipv6-bad-version.out
new file mode 100644
index 0000000..a184ba5
--- /dev/null
+++ b/tests/ipv6-bad-version.out
@@ -0,0 +1,4 @@
+ 1 15:15:01.278565 IP6 :: > ff02::1:ff76:6c14: ICMP6, neighbor solicitation, who has fe80::20c:29ff:fe76:6c14, length 24
+ 2 15:15:01.279230 IP6 version error: 0 != 6
+ 3 15:15:02.391170 IP6 :: > ff02::1:ff76:6c14: ICMP6, neighbor solicitation, who has 1111:2222:3333:4444:20c:29ff:fe76:6c14, length 24
+ 4 15:15:02.391739 IP6 version error: 0 != 6
diff --git a/tests/ipv6-bad-version.pcap b/tests/ipv6-bad-version.pcap
new file mode 100644
index 0000000..357a6ee
--- /dev/null
+++ b/tests/ipv6-bad-version.pcap
Binary files differ
diff --git a/tests/ipv6-mobility-header-oobr.out b/tests/ipv6-mobility-header-oobr.out
new file mode 100644
index 0000000..221e6d4
--- /dev/null
+++ b/tests/ipv6-mobility-header-oobr.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 IP6 3030:3030:3030:3030:3030:3030:3030:3030 > 3030:3030:3030:3030:3030:3030:3030:3030: mobility: BA status=48 [|mobility]
diff --git a/tests/ipv6-mobility-header-oobr.pcap b/tests/ipv6-mobility-header-oobr.pcap
new file mode 100644
index 0000000..854fc57
--- /dev/null
+++ b/tests/ipv6-mobility-header-oobr.pcap
Binary files differ
diff --git a/tests/ipv6-next-header-oobr-1.out b/tests/ipv6-next-header-oobr-1.out
new file mode 100644
index 0000000..da28257
--- /dev/null
+++ b/tests/ipv6-next-header-oobr-1.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 IP6 3030:3030:3030:3030:3030:3030:3030:3030 > 3030:3030:3030:3030:3030:3030:3030:3030: HBH [|hbhopt]
diff --git a/tests/ipv6-next-header-oobr-1.pcap b/tests/ipv6-next-header-oobr-1.pcap
new file mode 100644
index 0000000..eadccaf
--- /dev/null
+++ b/tests/ipv6-next-header-oobr-1.pcap
Binary files differ
diff --git a/tests/ipv6-next-header-oobr-2.out b/tests/ipv6-next-header-oobr-2.out
new file mode 100644
index 0000000..da28257
--- /dev/null
+++ b/tests/ipv6-next-header-oobr-2.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 IP6 3030:3030:3030:3030:3030:3030:3030:3030 > 3030:3030:3030:3030:3030:3030:3030:3030: HBH [|hbhopt]
diff --git a/tests/ipv6-next-header-oobr-2.pcap b/tests/ipv6-next-header-oobr-2.pcap
new file mode 100644
index 0000000..db1538e
--- /dev/null
+++ b/tests/ipv6-next-header-oobr-2.pcap
Binary files differ
diff --git a/tests/ipv6-routing-header.out b/tests/ipv6-routing-header.out
new file mode 100644
index 0000000..cdb3607
--- /dev/null
+++ b/tests/ipv6-routing-header.out
@@ -0,0 +1,4 @@
+ 1 16:51:31.766766 IP6 (hlim 4, next-header Routing (43) payload length: 32) 2200::244:212:3fff:feae:22f7 > 2200::240:2:0:0:4: RT6 (len=2, type=0 [Deprecated], segleft=1, rsv=0x0, [0]2200::210:2:0:0:4) [icmp6 sum ok] ICMP6, echo request, id 0, seq 0
+ 2 16:51:32.803243 IP6 (hlim 5, next-header Routing (43) payload length: 48) 2200::244:212:3fff:feae:22f7 > 2200::211:2:0:0:2: RT6 (len=4, type=0 [Deprecated], segleft=2, rsv=0x0, [0]2200::210:2:0:0:4, [1]2200::240:2:0:0:4) [icmp6 sum ok] ICMP6, echo request, id 0, seq 0
+ 3 16:51:33.575585 IP6 (hlim 4, next-header Routing (43) payload length: 32) 2200::244:212:3fff:feae:22f7 > 2200::240:2:0:0:4: RT6 (len=2, type=0 [Deprecated], segleft=1, rsv=0x0, [0]2200::210:2:0:0:4) 5645 > 5642: [udp sum ok] UDP, length 0
+ 4 16:51:34.608086 IP6 (hlim 5, next-header Routing (43) payload length: 48) 2200::244:212:3fff:feae:22f7 > 2200::211:2:0:0:2: RT6 (len=4, type=0 [Deprecated], segleft=2, rsv=0x0, [0]2200::210:2:0:0:4, [1]2200::240:2:0:0:4) 5645 > 5642: [udp sum ok] UDP, length 0
diff --git a/tests/ipv6-routing-header.pcap b/tests/ipv6-routing-header.pcap
new file mode 100644
index 0000000..683e01b
--- /dev/null
+++ b/tests/ipv6-routing-header.pcap
Binary files differ
diff --git a/tests/ipv6-rthdr-oobr.out b/tests/ipv6-rthdr-oobr.out
new file mode 100644
index 0000000..35eaaa6
--- /dev/null
+++ b/tests/ipv6-rthdr-oobr.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 IP6 3030:3030:3030:3030:3030:3030:3030:3030 > 3030:3030:3030:3030:3030:3030:3030:3030: RT6 (len=48, type=0 [Deprecated], segleft=48 [|rt6]
diff --git a/tests/ipv6-rthdr-oobr.pcap b/tests/ipv6-rthdr-oobr.pcap
new file mode 100644
index 0000000..b29d519
--- /dev/null
+++ b/tests/ipv6-rthdr-oobr.pcap
Binary files differ
diff --git a/tests/ipv6-srh-ext-header.out b/tests/ipv6-srh-ext-header.out
new file mode 100644
index 0000000..dc64a65
--- /dev/null
+++ b/tests/ipv6-srh-ext-header.out
@@ -0,0 +1 @@
+ 1 16:29:31.085223 IP6 (flowlabel 0x889ad, hlim 64, next-header Routing (43) payload length: 144) a:b:c:12::1 > a:b:c:2::f1:0: RT6 (len=4, type=4, segleft=1, last-entry=1, flags=0x0, tag=0, [0]a:b:c:3::d6, [1]a:b:c:2::f1:0) IP6 (flowlabel 0x889ad, hlim 64, next-header ICMPv6 (58) payload length: 64) a:b:c:12::1 > b2::2: [icmp6 sum ok] ICMP6, echo request, id 1774, seq 1
diff --git a/tests/ipv6-srh-ext-header.pcap b/tests/ipv6-srh-ext-header.pcap
new file mode 100644
index 0000000..871b9e4
--- /dev/null
+++ b/tests/ipv6-srh-ext-header.pcap
Binary files differ
diff --git a/tests/ipv6-srh-insert-cksum.out b/tests/ipv6-srh-insert-cksum.out
new file mode 100644
index 0000000..f16c8a3
--- /dev/null
+++ b/tests/ipv6-srh-insert-cksum.out
@@ -0,0 +1 @@
+ 1 17:59:40.591932 IP6 (flowlabel 0x8f8b8, hlim 64, next-header Routing (43) payload length: 1088) 12::1 > 2::f1:0: RT6 (len=6, type=4, segleft=2, last-entry=2, flags=0x0, tag=0, [0]b2::2, [1]3::d6, [2]2::f1:0) 57745 > 5001: [udp sum ok] UDP, length 1024
diff --git a/tests/ipv6-srh-insert-cksum.pcap b/tests/ipv6-srh-insert-cksum.pcap
new file mode 100644
index 0000000..daeb55a
--- /dev/null
+++ b/tests/ipv6-srh-insert-cksum.pcap
Binary files differ
diff --git a/tests/ipv6-srh-ipproto-ether-ev.out b/tests/ipv6-srh-ipproto-ether-ev.out
new file mode 100644
index 0000000..36dedcf
--- /dev/null
+++ b/tests/ipv6-srh-ipproto-ether-ev.out
@@ -0,0 +1 @@
+ 1 15:07:04.802036 be:f5:06:09:44:74 > d6:67:19:4e:0f:4f, ethertype IPv6 (0x86dd), length 196: (flowlabel 0xde027, hlim 63, next-header Routing (43) payload length: 142) a::1 > c::2: RT6 (len=2, type=4, segleft=0, last-entry=0, flags=0x0, tag=0, [0]c::2) ae:64:42:3b:5b:9a > 1e:1d:df:cd:54:7a, ethertype IPv6 (0x86dd), length 118: (flowlabel 0xde027, hlim 64, next-header ICMPv6 (58) payload length: 64) a::2 > e::2: [icmp6 sum ok] ICMP6, echo request, id 18516, seq 1339
diff --git a/tests/ipv6-srh-ipproto-ether-v.out b/tests/ipv6-srh-ipproto-ether-v.out
new file mode 100644
index 0000000..2d6664e
--- /dev/null
+++ b/tests/ipv6-srh-ipproto-ether-v.out
@@ -0,0 +1 @@
+ 1 15:07:04.802036 IP6 (flowlabel 0xde027, hlim 63, next-header Routing (43) payload length: 142) a::1 > c::2: RT6 (len=2, type=4, segleft=0, last-entry=0, flags=0x0, tag=0, [0]c::2) IP6 (flowlabel 0xde027, hlim 64, next-header ICMPv6 (58) payload length: 64) a::2 > e::2: [icmp6 sum ok] ICMP6, echo request, id 18516, seq 1339
diff --git a/tests/ipv6-srh-ipproto-ether.pcap b/tests/ipv6-srh-ipproto-ether.pcap
new file mode 100644
index 0000000..30181e4
--- /dev/null
+++ b/tests/ipv6-srh-ipproto-ether.pcap
Binary files differ
diff --git a/tests/ipv6-too-long-jumbo.out b/tests/ipv6-too-long-jumbo.out
new file mode 100644
index 0000000..c5ccb83
--- /dev/null
+++ b/tests/ipv6-too-long-jumbo.out
@@ -0,0 +1 @@
+ 1 12:40:23.226395 IP6 (class 0xc0, hlim 0, next-header Options (0) payload length: 0) 1:6:1a28:312:d7cb:b318:34e5:d3ea > 2b7f:cd1f:ec3c:fb9c:e731:d16b:a8fe:ba8c: HBH (opt_type 0x1a: len=0)(padn)(opt_type 0x16: len=0)(opt_type 0x64: len=114)(jumbo: 3858694210) (opt_type 0x42: len=3)(opt_type 0xfe: len=6)(pad1)(jumbo: 248 - already seen) (opt_type 0x0e: len=8)(opt_type 0x07: len=4)(opt_type 0xf1: len=60) truncated-ip6 - 3858693774 bytes missing! ip-proto-12 3858693802
diff --git a/tests/ipv6-too-long-jumbo.pcap b/tests/ipv6-too-long-jumbo.pcap
new file mode 100644
index 0000000..3a7fea9
--- /dev/null
+++ b/tests/ipv6-too-long-jumbo.pcap
Binary files differ
diff --git a/tests/ipv6hdr-heapoverflow-v.out b/tests/ipv6hdr-heapoverflow-v.out
new file mode 100644
index 0000000..87ba79d
--- /dev/null
+++ b/tests/ipv6hdr-heapoverflow-v.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 IP6 (class 0x33, flowlabel 0x03030, hlim 48, next-header Options (0) payload length: 12336) 3030:3030:3030:3030:3030:3030:3030:3030 > 3030:3030:3030:3030:3030:3030:3030:3030: HBH [|hbhopt]
diff --git a/tests/ipv6hdr-heapoverflow.out b/tests/ipv6hdr-heapoverflow.out
new file mode 100644
index 0000000..da28257
--- /dev/null
+++ b/tests/ipv6hdr-heapoverflow.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 IP6 3030:3030:3030:3030:3030:3030:3030:3030 > 3030:3030:3030:3030:3030:3030:3030:3030: HBH [|hbhopt]
diff --git a/tests/ipv6hdr-heapoverflow.pcap b/tests/ipv6hdr-heapoverflow.pcap
new file mode 100644
index 0000000..7280868
--- /dev/null
+++ b/tests/ipv6hdr-heapoverflow.pcap
Binary files differ
diff --git a/tests/ipx-invalid-length.out b/tests/ipx-invalid-length.out
new file mode 100644
index 0000000..2904e8f
--- /dev/null
+++ b/tests/ipx-invalid-length.out
@@ -0,0 +1 @@
+ 1 16:41:40.226660 IPX 0a8808aa.00:00:00:00:00:01.0451 > 8dc23c00.18:00:3e:2b:68:56.402b: [length 29 < 30] (invalid)
diff --git a/tests/ipx-invalid-length.pcap b/tests/ipx-invalid-length.pcap
new file mode 100644
index 0000000..c65e47a
--- /dev/null
+++ b/tests/ipx-invalid-length.pcap
Binary files differ
diff --git a/tests/ipx-nosmb.out b/tests/ipx-nosmb.out
new file mode 100644
index 0000000..0e23b8d
--- /dev/null
+++ b/tests/ipx-nosmb.out
@@ -0,0 +1,64 @@
+ 1 10:06:29.360507 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 2 10:06:30.201745 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 3 10:06:31.042990 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 4 10:06:31.884337 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 162
+ 5 10:06:37.582596 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 6 10:07:10.193661 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 7 10:07:14.493808 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 8 10:07:15.678126 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 9 10:07:37.591287 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 10 10:08:10.194090 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 11 10:08:14.495094 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 12 10:08:15.680165 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 13 10:08:37.599970 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 14 10:08:38.551958 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 15 10:08:39.372318 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 16 10:08:40.192665 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 17 10:09:10.194823 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 18 10:09:14.496475 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 19 10:09:15.682197 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 20 10:09:37.608654 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 21 10:10:10.195140 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 22 10:10:14.497849 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 23 10:10:15.684220 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 24 10:10:37.617332 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 25 10:11:10.195573 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 26 10:11:14.499230 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 27 10:11:15.686236 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 28 10:11:32.018797 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 29 10:11:32.839133 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 30 10:11:33.659468 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 31 10:11:34.479872 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 158
+ 32 10:11:37.612708 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 33 10:11:37.625971 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 34 10:11:38.433061 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 35 10:11:39.253404 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 36 10:11:40.073983 IPX 00000000.00:13:20:61:83:a3.0553 > 00000000.ff:ff:ff:ff:ff:ff.0553: ipx-nwlink-dgm 187
+ 37 10:12:10.196195 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 38 10:12:14.500611 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 39 10:12:15.688284 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 40 10:12:37.273549 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 41 10:12:37.634677 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 42 10:12:38.052852 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 43 10:12:38.832161 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 44 10:12:39.611592 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 157
+ 45 10:13:07.039144 IPX 00000000.00:14:85:ac:cd:ad.0553 > 00000000.ff:ff:ff:ff:ff:ff.0553: ipx-nwlink-dgm 187
+ 46 10:13:07.040801 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 47 10:13:07.820138 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 48 10:13:08.599456 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 49 10:13:10.196429 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 50 10:13:14.501998 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 51 10:13:15.690301 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 52 10:13:37.643338 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 53 10:14:02.970836 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 54 10:14:03.812078 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 55 10:14:04.653327 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 56 10:14:05.495223 IPX a8f87967.00:00:00:00:00:01.0553 > 00000000.ff:ff:ff:ff:ff:ff.0553: ipx-nwlink-dgm 187
+ 57 10:14:10.197156 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 58 10:14:14.503363 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 59 10:14:15.692322 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 60 10:14:37.652060 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 61 10:15:10.197478 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 62 10:15:14.504755 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 63 10:15:15.694341 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 64 10:15:37.660716 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
diff --git a/tests/ipx.out b/tests/ipx.out
new file mode 100644
index 0000000..e10b6c1
--- /dev/null
+++ b/tests/ipx.out
@@ -0,0 +1,100 @@
+ 1 10:06:29.360507 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 2 10:06:30.201745 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 3 10:06:31.042990 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 4 10:06:31.884337 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 162
+>>> IPX transport Data: (34 bytes)
+[000] 00 0B 41 44 4D 49 4E 54 45 53 54 20 20 20 20 20 ^@^KADMINT EST
+[010] 20 00 01 02 5F 5F 4D 53 42 52 4F 57 53 45 5F 5F ^@^A^B__MS BROWSE__
+[020] 02 01 ^B^A
+SMB PACKET: SMBtrans (REQUEST)
+ 5 10:06:37.582596 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 6 10:07:10.193661 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 7 10:07:14.493808 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 8 10:07:15.678126 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 9 10:07:37.591287 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 10 10:08:10.194090 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 11 10:08:14.495094 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 12 10:08:15.680165 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 13 10:08:37.599970 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 14 10:08:38.551958 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 15 10:08:39.372318 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 16 10:08:40.192665 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 17 10:09:10.194823 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 18 10:09:14.496475 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 19 10:09:15.682197 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 20 10:09:37.608654 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 21 10:10:10.195140 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 22 10:10:14.497849 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 23 10:10:15.684220 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 24 10:10:37.617332 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 25 10:11:10.195573 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 26 10:11:14.499230 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 27 10:11:15.686236 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 28 10:11:32.018797 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 29 10:11:32.839133 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 30 10:11:33.659468 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 31 10:11:34.479872 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 158
+>>> IPX transport Data: (34 bytes)
+[000] 00 0B 41 56 45 53 48 20 20 20 20 20 20 20 20 20 ^@^KAVESH
+[010] 20 00 01 02 5F 5F 4D 53 42 52 4F 57 53 45 5F 5F ^@^A^B__MS BROWSE__
+[020] 02 01 ^B^A
+SMB PACKET: SMBtrans (REQUEST)
+ 32 10:11:37.612708 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 33 10:11:37.625971 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 34 10:11:38.433061 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 35 10:11:39.253404 IPX 00000000.00:13:20:61:83:a3.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 36 10:11:40.073983 IPX 00000000.00:13:20:61:83:a3.0553 > 00000000.ff:ff:ff:ff:ff:ff.0553: ipx-nwlink-dgm 187
+>>> IPX transport Data: (68 bytes)
+[000] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^@^@^@^@^@^@^@^@ ^@^@^@^@^@^@^@^@
+[010] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^@^@^@^@^@^@^@^@ ^@^@^@^@^@^@^@^@
+[020] FC 02 00 00 49 4E 44 49 41 2D 49 54 20 20 20 20 M-|^B^@^@INDI A-IT
+[030] 20 20 20 00 41 56 45 53 48 20 20 20 20 20 20 20 ^@AVES H
+[040] 20 20 20 00 ^@
+SMB PACKET: SMBtrans (REQUEST)
+ 37 10:12:10.196195 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 38 10:12:14.500611 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 39 10:12:15.688284 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 40 10:12:37.273549 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 41 10:12:37.634677 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 42 10:12:38.052852 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 43 10:12:38.832161 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 44 10:12:39.611592 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 157
+>>> IPX transport Data: (34 bytes)
+[000] 00 0B 45 4B 54 41 20 20 20 20 20 20 20 20 20 20 ^@^KEKTA
+[010] 20 00 01 02 5F 5F 4D 53 42 52 4F 57 53 45 5F 5F ^@^A^B__MS BROWSE__
+[020] 02 01 ^B^A
+SMB PACKET: SMBtrans (REQUEST)
+ 45 10:13:07.039144 IPX 00000000.00:14:85:ac:cd:ad.0553 > 00000000.ff:ff:ff:ff:ff:ff.0553: ipx-nwlink-dgm 187
+>>> IPX transport Data: (68 bytes)
+[000] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^@^@^@^@^@^@^@^@ ^@^@^@^@^@^@^@^@
+[010] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^@^@^@^@^@^@^@^@ ^@^@^@^@^@^@^@^@
+[020] FC 02 00 00 57 4F 52 4B 47 52 4F 55 50 20 20 20 M-|^B^@^@WORK GROUP
+[030] 20 20 20 00 45 4B 54 41 20 20 20 20 20 20 20 20 ^@EKTA
+[040] 20 20 20 00 ^@
+SMB PACKET: SMBtrans (REQUEST)
+ 46 10:13:07.040801 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 47 10:13:07.820138 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 48 10:13:08.599456 IPX 00000000.00:14:85:ac:cd:ad.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 49 10:13:10.196429 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 50 10:13:14.501998 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 51 10:13:15.690301 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 52 10:13:37.643338 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 53 10:14:02.970836 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 54 10:14:03.812078 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 55 10:14:04.653327 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 56 10:14:05.495223 IPX a8f87967.00:00:00:00:00:01.0553 > 00000000.ff:ff:ff:ff:ff:ff.0553: ipx-nwlink-dgm 187
+>>> IPX transport Data: (68 bytes)
+[000] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^@^@^@^@^@^@^@^@ ^@^@^@^@^@^@^@^@
+[010] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^@^@^@^@^@^@^@^@ ^@^@^@^@^@^@^@^@
+[020] FC 03 00 00 52 41 44 49 55 53 20 20 20 20 20 20 M-|^C^@^@RADI US
+[030] 20 20 20 00 41 44 4D 49 4E 54 45 53 54 20 20 20 ^@ADMI NTEST
+[040] 20 20 20 00 ^@
+SMB PACKET: SMBtrans (REQUEST)
+ 57 10:14:10.197156 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 58 10:14:14.503363 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 59 10:14:15.692322 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 60 10:14:37.652060 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
+ 61 10:15:10.197478 IPX 00000000.00:30:c1:bf:57:55.0452 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 030c '0030C1BF575580D0NPIBF5755' addr 00000000.00:30:c1:bf:57:55
+ 62 10:15:14.504755 IPX 00000000.00:14:85:ac:cd:ad.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'EKTA!!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:14:85:ac:cd:ad
+ 63 10:15:15.694341 IPX 00000000.00:13:20:61:83:a3.4008 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-resp 064e 'AVESH!!!!!!!!!!A5569B20ABE511CE9CA400004C762832' addr 00000000.00:13:20:61:83:a3
+ 64 10:15:37.660716 IPX 00000000.00:03:47:1b:c1:a8.0453 > 00000000.ff:ff:ff:ff:ff:ff.0453: ipx-rip-resp a8f87967/1.2
diff --git a/tests/ipx.pcap b/tests/ipx.pcap
new file mode 100644
index 0000000..ac141f0
--- /dev/null
+++ b/tests/ipx.pcap
Binary files differ
diff --git a/tests/isakmp-3948-oobr-2.out b/tests/isakmp-3948-oobr-2.out
new file mode 100644
index 0000000..de2896b
--- /dev/null
+++ b/tests/isakmp-3948-oobr-2.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 IP 48.48.48.48.4500 > 48.48.48.48.12336: [|isakmp_rfc3948]
diff --git a/tests/isakmp-3948-oobr-2.pcap b/tests/isakmp-3948-oobr-2.pcap
new file mode 100644
index 0000000..029159d
--- /dev/null
+++ b/tests/isakmp-3948-oobr-2.pcap
Binary files differ
diff --git a/tests/isakmp-delete-segfault.pcap b/tests/isakmp-delete-segfault.pcap
new file mode 100644
index 0000000..9c4ada1
--- /dev/null
+++ b/tests/isakmp-delete-segfault.pcap
Binary files differ
diff --git a/tests/isakmp-identification-segfault.pcap b/tests/isakmp-identification-segfault.pcap
new file mode 100644
index 0000000..c14f04f
--- /dev/null
+++ b/tests/isakmp-identification-segfault.pcap
Binary files differ
diff --git a/tests/isakmp-ikev1_n_print-oobr.out b/tests/isakmp-ikev1_n_print-oobr.out
new file mode 100644
index 0000000..8bf611f
--- /dev/null
+++ b/tests/isakmp-ikev1_n_print-oobr.out
@@ -0,0 +1,8 @@
+ 1 [Error converting time] IP (tos 0x12,ECT(0), ttl 17, id 47119, offset 0, flags [+, DF, rsvd], proto UDP (17), length 296, bad cksum 1ff (->327b)!)
+ 80.236.128.20.500 > 12.251.0.45.49152: isakmp 2.12 msgid 10101010: child_sa ikev2_auth[V]:
+ (n: doi=0 proto=128 type=#24577) [|#126] (len mismatch: isakmp 4278190080/ip 268)
+ 2 [Error converting time] IP (tos 0x12,ECT(0), ttl 17, id 21263, offset 72, flags [+, DF, rsvd], proto unknown (40), length 296, bad cksum fbff (->9847)!)
+ 80.0.128.20 > 12.251.0.45: ip-proto-40
+ 3 [Error converting time] IP (tos 0x15,ECT(1), ttl 17, id 21263, offset 0, flags [+, DF, rsvd], proto UDP (17), length 296, bad cksum 1ff (->9864)!)
+ 80.0.128.20.500 > 12.251.0.45.49152: isakmp 2.12 msgid 1010100b: child_sa ikev2_auth[V]:
+ (n: doi=ipsec proto=#16 type=REPLAY-STATUS spi=04 status=( [|isakmp]
diff --git a/tests/isakmp-ikev1_n_print-oobr.pcap b/tests/isakmp-ikev1_n_print-oobr.pcap
new file mode 100644
index 0000000..48b0aeb
--- /dev/null
+++ b/tests/isakmp-ikev1_n_print-oobr.pcap
Binary files differ
diff --git a/tests/isakmp-no-none-np.out b/tests/isakmp-no-none-np.out
new file mode 100644
index 0000000..8a5c27f
--- /dev/null
+++ b/tests/isakmp-no-none-np.out
@@ -0,0 +1,78 @@
+ 1 00:00:00.000000 00:0c:29:86:c8:36 > 00:1a:4b:6a:ce:fe, ethertype IPv4 (0x0800), length 2228: (tos 0x0, ttl 128, id 28793, offset 0, flags [none], proto UDP (17), length 2214)
+ 192.168.1.25.500 > 192.168.1.10.500: [udp sum ok] isakmp 1.0 msgid 5f724dc6 cookie 0000000000000000->0000000000000000: phase 2/others ? inf:
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=000000000b1005005f724dc600000054 data=(0b00001c000000010110...0100000700000000000000000000000000000000))
+ (n: doi=ipsec proto=isakmp type=INVALID-MAJOR-VERSION spi=0000000000000000000000000010ba00 data=(00ff1d00020082001101...0100000700000000000000000000000000000000)) [|n] (len mismatch: isakmp 84/ip 2186)
diff --git a/tests/isakmp-no-none-np.pcapng b/tests/isakmp-no-none-np.pcapng
new file mode 100644
index 0000000..fd388d6
--- /dev/null
+++ b/tests/isakmp-no-none-np.pcapng
Binary files differ
diff --git a/tests/isakmp-pointer-loop.pcap b/tests/isakmp-pointer-loop.pcap
new file mode 100644
index 0000000..578da0d
--- /dev/null
+++ b/tests/isakmp-pointer-loop.pcap
Binary files differ
diff --git a/tests/isakmp-rfc3948-oobr.out b/tests/isakmp-rfc3948-oobr.out
new file mode 100644
index 0000000..11c8864
--- /dev/null
+++ b/tests/isakmp-rfc3948-oobr.out
@@ -0,0 +1,67 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 5 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 6 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 7 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 8 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 9 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 10 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 11 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 12 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 13 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 14 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 15 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 16 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 17 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 18 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 19 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 20 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 21 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 22 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 000000000000
+ 23 05:27:12.808464432 IP 48.48.48.48.4500 > 48.48.48.48.12336: [|isakmp_rfc3948]
diff --git a/tests/isakmp-rfc3948-oobr.pcap b/tests/isakmp-rfc3948-oobr.pcap
new file mode 100644
index 0000000..c3c1f72
--- /dev/null
+++ b/tests/isakmp-rfc3948-oobr.pcap
Binary files differ
diff --git a/tests/isakmp-various-oobr.out b/tests/isakmp-various-oobr.out
new file mode 100644
index 0000000..3ca8afe
--- /dev/null
+++ b/tests/isakmp-various-oobr.out
@@ -0,0 +1,5 @@
+ 1 16:22:41.001814 IP (tos 0xfb,CE, ttl 17, id 21263, offset 0, flags [+, DF, rsvd], proto UDP (17), length 296, bad cksum 1ff (->f67d)!)
+ 16.0.128.20.500 > 12.251.225.45.49152: isakmp 1.0 msgid 10101010: phase 2/others ? #16[]:
+ ( [|v2ke]) (len mismatch: isakmp 2130706432/ip 268)
+ 2 12:56:45.032768 IP (tos 0x12,ECT(0), ttl 17, id 21263, offset 4096, flags [DF, rsvd], proto UDP (17), length 296, bad cksum 1ff (->939f)!)
+ 0.0.0.5 > 0.0.0.0: ip-proto-17
diff --git a/tests/isakmp-various-oobr.pcap b/tests/isakmp-various-oobr.pcap
new file mode 100644
index 0000000..4995f9d
--- /dev/null
+++ b/tests/isakmp-various-oobr.pcap
Binary files differ
diff --git a/tests/isakmp1.out b/tests/isakmp1.out
new file mode 100644
index 0000000..8ae0355
--- /dev/null
+++ b/tests/isakmp1.out
@@ -0,0 +1 @@
+ 1 03:18:24.000000 IP 127.0.0.1.500 > 127.0.0.1.500: isakmp:
diff --git a/tests/isakmp2.out b/tests/isakmp2.out
new file mode 100644
index 0000000..746e1a8
--- /dev/null
+++ b/tests/isakmp2.out
@@ -0,0 +1 @@
+ 1 01:34:11.385215 IP 129.170.249.126.500 > 129.170.249.87.500: isakmp: phase 1 ? base
diff --git a/tests/isakmp3.out b/tests/isakmp3.out
new file mode 100644
index 0000000..8fbb0f4
--- /dev/null
+++ b/tests/isakmp3.out
@@ -0,0 +1,3 @@
+ 1 16:11:15.969263 IP (tos 0x0, ttl 255, id 41068, offset 0, flags [none], proto UDP (17), length 312)
+ 127.0.0.1.501 > 127.0.0.1.500: isakmp 1.0 msgid 00000000: phase 1 I ident:
+ (id: idtype=FQDN protoid=0 port=0 len=248 ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@)
diff --git a/tests/isakmp4.out b/tests/isakmp4.out
new file mode 100644
index 0000000..67fa88a
--- /dev/null
+++ b/tests/isakmp4.out
@@ -0,0 +1,35 @@
+ 1 00:00:00.000000 ARP, Request who-has 192.1.2.23 tell 192.1.2.254, length 28
+ 2 00:00:00.000000 ARP, Reply 192.1.2.23 is-at 10:00:00:64:64:23, length 28
+ 3 00:00:00.000000 IP 192.1.2.254.500 > 192.1.2.23.500: isakmp: phase 1 I ident
+ 4 00:00:00.000000 IP 192.1.2.23.500 > 192.1.2.254.500: isakmp: phase 1 R ident
+ 5 00:00:00.000000 IP 192.1.2.254.500 > 192.1.2.23.500: isakmp: phase 1 I ident
+ 6 00:00:00.000000 IP 192.1.2.23.500 > 192.1.2.254.500: isakmp: phase 1 R ident
+ 7 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: NONESP-encap: isakmp: phase 1 I ident[E]
+ 8 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.254.4500: NONESP-encap: isakmp: phase 1 R ident[E]
+ 9 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
+ 10 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.254.4500: NONESP-encap: isakmp: phase 2/others R oakley-quick[E]
+ 11 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
+ 12 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x1), length 132
+ 13 00:00:00.000000 ARP, Request who-has 192.1.2.254 tell 192.1.2.23, length 28
+ 14 00:00:00.000000 ARP, Reply 192.1.2.254 is-at 10:00:00:de:ad:ba, length 28
+ 15 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.254.4500: NONESP-encap: isakmp: phase 2/others R oakley-quick[E]
+ 16 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
+ 17 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x2), length 132
+ 18 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: isakmp-nat-keep-alive
+ 19 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x3), length 132
+ 20 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.254.4500: NONESP-encap: isakmp: phase 2/others R oakley-quick[E]
+ 21 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: NONESP-encap: isakmp: phase 2/others I oakley-quick[E]
+ 22 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x4), length 132
+ 23 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: isakmp-nat-keep-alive
+ 24 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x5), length 132
+ 25 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x6), length 132
+ 26 00:00:00.000000 ARP, Request who-has 192.1.2.23 tell 192.1.2.254, length 28
+ 27 00:00:00.000000 ARP, Reply 192.1.2.23 is-at 10:00:00:64:64:23, length 28
+ 28 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: isakmp-nat-keep-alive
+ 29 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x7), length 132
+ 30 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.254.4500: NONESP-encap: isakmp: phase 2/others R oakley-quick[E]
+ 31 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: UDP-encap: ESP(spi=0xf4dc0ae5,seq=0x8), length 132
+ 32 00:00:00.000000 ARP, Request who-has 192.1.2.254 tell 192.1.2.23, length 28
+ 33 00:00:00.000000 ARP, Reply 192.1.2.254 is-at 10:00:00:de:ad:ba, length 28
+ 34 00:00:00.000000 IP 192.1.2.254.4500 > 192.1.2.23.4500: isakmp-nat-keep-alive
+ 35 00:00:00.000000 IP 192.1.2.23.4500 > 192.1.2.254.4500: NONESP-encap: isakmp: phase 2/others R inf[E]
diff --git a/tests/isakmp4500.pcap b/tests/isakmp4500.pcap
new file mode 100644
index 0000000..8ff5ab4
--- /dev/null
+++ b/tests/isakmp4500.pcap
Binary files differ
diff --git a/tests/isakmp5-v.out b/tests/isakmp5-v.out
new file mode 100644
index 0000000..6c3076f
--- /dev/null
+++ b/tests/isakmp5-v.out
@@ -0,0 +1,44 @@
+ 1 12:36:53.127741 IP (tos 0xc0, ttl 255, id 101, offset 0, flags [none], proto UDP (17), length 176)
+ 10.0.0.1.500 > 10.0.0.2.500: isakmp 1.0 msgid 00000000: phase 1 I ident:
+ (sa: doi=ipsec situation=identity
+ (p: #1 protoid=isakmp transform=1
+ (t: #1 id=ike (type=enc value=aes)(type=keylen value=0080)(type=hash value=sha1)(type=group desc value=modp768)(type=auth value=preshared)(type=lifetype value=sec)(type=lifeduration len=4 value=00015180))))
+ (vid: len=16)
+ (vid: len=16)
+ (vid: len=16)
+ 2 12:36:53.187761 IP (tos 0xc0, ttl 255, id 49, offset 0, flags [none], proto UDP (17), length 136)
+ 10.0.0.2.500 > 10.0.0.1.500: isakmp 1.0 msgid 00000000: phase 1 R ident:
+ (sa: doi=ipsec situation=identity
+ (p: #1 protoid=isakmp transform=1
+ (t: #1 id=ike (type=enc value=aes)(type=keylen value=0080)(type=hash value=sha1)(type=group desc value=modp768)(type=auth value=preshared)(type=lifetype value=sec)(type=lifeduration len=4 value=00015180))))
+ (vid: len=16)
+ 3 12:36:53.199756 IP (tos 0xc0, ttl 255, id 102, offset 0, flags [none], proto UDP (17), length 300)
+ 10.0.0.1.500 > 10.0.0.2.500: isakmp 1.0 msgid 00000000: phase 1 I ident:
+ (ke: key len=96)
+ (nonce: n len=20)
+ (vid: len=16)
+ (vid: len=16)
+ (vid: len=16)
+ (vid: len=8)
+ (pay15)
+ (pay15)
+ 4 12:36:53.235776 IP (tos 0xc0, ttl 255, id 50, offset 0, flags [none], proto UDP (17), length 300)
+ 10.0.0.2.500 > 10.0.0.1.500: isakmp 1.0 msgid 00000000: phase 1 R ident:
+ (ke: key len=96)
+ (nonce: n len=20)
+ (vid: len=16)
+ (vid: len=16)
+ (vid: len=16)
+ (vid: len=8)
+ (pay15)
+ (pay15)
+ 5 12:36:53.274793 IP (tos 0xc0, ttl 255, id 103, offset 0, flags [none], proto UDP (17), length 136)
+ 10.0.0.1.500 > 10.0.0.2.500: isakmp 1.0 msgid 00000000: phase 1 I ident[E]: [encrypted id]
+ 6 12:36:53.286840 IP (tos 0xc0, ttl 255, id 51, offset 0, flags [none], proto UDP (17), length 104)
+ 10.0.0.2.500 > 10.0.0.1.500: isakmp 1.0 msgid 00000000: phase 1 R ident[E]: [encrypted id]
+ 7 12:36:53.298791 IP (tos 0xc0, ttl 255, id 104, offset 0, flags [none], proto UDP (17), length 248)
+ 10.0.0.1.500 > 10.0.0.2.500: isakmp 1.0 msgid 0f2b7862: phase 2/others I oakley-quick[E]: [encrypted hash]
+ 8 12:36:53.310849 IP (tos 0xc0, ttl 255, id 52, offset 0, flags [none], proto UDP (17), length 248)
+ 10.0.0.2.500 > 10.0.0.1.500: isakmp 1.0 msgid 0f2b7862: phase 2/others R oakley-quick[E]: [encrypted hash]
+ 9 12:36:53.322794 IP (tos 0xc0, ttl 255, id 105, offset 0, flags [none], proto UDP (17), length 88)
+ 10.0.0.1.500 > 10.0.0.2.500: isakmp 1.0 msgid 0f2b7862: phase 2/others I oakley-quick[E]: [encrypted hash]
diff --git a/tests/isakmpv1-attr-oobr.out b/tests/isakmpv1-attr-oobr.out
new file mode 100644
index 0000000..1fc6e7b
--- /dev/null
+++ b/tests/isakmpv1-attr-oobr.out
@@ -0,0 +1,3 @@
+ 1 06:45:20.587271488 IP (tos 0x60, ttl 254, id 40192, offset 0, flags [+, DF, rsvd], proto UDP (17), length 63264, options (unknown 255 [bad length 18]), bad cksum 8e30 (->f45)!)
+ 251.73.77.150.32514 > 126.172.128.5.500: isakmp 1.0 msgid 2200af01: phase 2/others ? #40:
+ (t: #243 id=241 (type=#9472 len=2 value=0619) [|isakmp]
diff --git a/tests/isakmpv1-attr-oobr.pcap b/tests/isakmpv1-attr-oobr.pcap
new file mode 100644
index 0000000..21750fc
--- /dev/null
+++ b/tests/isakmpv1-attr-oobr.pcap
Binary files differ
diff --git a/tests/isis-areaaddr-oobr-1.out b/tests/isis-areaaddr-oobr-1.out
new file mode 100644
index 0000000..c6ddc41
--- /dev/null
+++ b/tests/isis-areaaddr-oobr-1.out
@@ -0,0 +1,7 @@
+ 1 00:00:00.000000 c2:02:29:98:00:00 > 01:80:c2:00:00:15, 802.3, length 103: LLC, dsap OSI (0xfe) Individual, ssap OSI (0xfe) Command, ctrl 0x03: OSI NLPID IS-IS (0x83): length 100
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 1 (1)
+ 0x0000: 831b 0100 1401 0001
+ lsp-id: 0100.1401.0001.00-14, seq: 0x01000100, lifetime: 256s
+ chksum: 0x1401 (unverified), PDU length: 20, Flags: [ Unused 0x0 (invalid) ]
+ 0x0000: 0014 0100 0100 1401 0001 0014 0100 0100
+ 0x0010: 1401 00 [packet length 20 < 27] (invalid)
diff --git a/tests/isis-areaaddr-oobr-1.pcap b/tests/isis-areaaddr-oobr-1.pcap
new file mode 100644
index 0000000..7b1b893
--- /dev/null
+++ b/tests/isis-areaaddr-oobr-1.pcap
Binary files differ
diff --git a/tests/isis-areaaddr-oobr-2.out b/tests/isis-areaaddr-oobr-2.out
new file mode 100644
index 0000000..74954d8
--- /dev/null
+++ b/tests/isis-areaaddr-oobr-2.out
@@ -0,0 +1,6 @@
+ 1 00:00:00.000000 08:00:27:a2:43:5f > 09:00:2b:00:00:05, 802.3, length 1495: LLC, dsap OSI (0xfe) Individual, ssap OSI (0xfe) Command, ctrl 0x03: OSI NLPID IS-IS (0x83): length 1492
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 1 (1)
+ 0x0000: 8314 0100 1101 0001
+ source-id: 0e0d.0000.0000, holding time: 0s, Flags: [Level 1 only]
+ circuit-id: 0x00, PDU length: 0
+ 0x0000: 010e 0d00 0000 0000 0000 0000 [packet length 0 < 20] (invalid)
diff --git a/tests/isis-areaaddr-oobr-2.pcap b/tests/isis-areaaddr-oobr-2.pcap
new file mode 100644
index 0000000..906941d
--- /dev/null
+++ b/tests/isis-areaaddr-oobr-2.pcap
Binary files differ
diff --git a/tests/isis-extd-ipreach-oobr.out b/tests/isis-extd-ipreach-oobr.out
new file mode 100644
index 0000000..190c673
--- /dev/null
+++ b/tests/isis-extd-ipreach-oobr.out
@@ -0,0 +1,412 @@
+ 1 00:00:00.000000 08:00:27:2c:25:1e > 09:00:2b:00:00:05, 802.3, length 1495: LLC, dsap OSI (0xfe) Individual, ssap OSI (0xfe) Command, ctrl 0x03: OSI NLPID IS-IS (0x83): length 1492
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 1 (1)
+ 0x0000: 8314 0100 1101 0001
+ source-id: 8888.8888.8888, holding time: 30s, Flags: [Level 1 only]
+ circuit-id: 0x03, PDU length: 1492
+ 0x0000: 0188 8888 8888 8800 1e05 d403
+ Point-to-point Adjacency State TLV #240, length: 15
+ Adjacency State: Up (0)
+ Extended Local circuit-ID: 0x00000005
+ Neighbor System-ID: 2222.2222.2222
+ Neighbor Extended Local circuit-ID: 0x00000004
+ 0x0000: 0000 0000 0522 2222 2222 2200 0000 04
+ Protocols supported TLV #129, length: 1
+ NLPID(s): ISIS_SPB (0xc1)
+ 0x0000: c1
+ Area address(es) TLV #1, length: 14
+ Area address (length: 13): 00.0000.0000.0000.0000.0000.0000
+ 0x0000: 0d00 0000 0000 0000 0000 0000 0000
+ Multi-Topology-Aware Port Capability TLV #143, length: 141
+ RES: 0, MTID(s): 0
+ SPB MCID subTLV #4, length: 102
+ MCID: ID: 0, Name: IEEEIEEEIEEEIEEEIEEEIEEEIEEEIEEE
+ Lvl: 18757, Digest: 45 45 49 45 45 45 49 45 45 45 49 45 45 45 49 45
+ AUX-MCID: ID: 69, Name: EIEEEIEEEIEEEIEEEIEEEIEEEIEEEIEE
+ Lvl: 17737, Digest: 45 45 45 49 45 45 45 49 45 45 45 49 45 45 45 49
+ unknown subTLV #69, length: 69 (> containing TLV length)
+ 0x0000: 0000 0466 0049 4545 4549 4545 4549 4545
+ 0x0010: 4549 4545 4549 4545 4549 4545 4549 4545
+ 0x0020: 4549 4545 4549 4545 4549 4545 4549 4545
+ 0x0030: 4549 4545 4549 4545 4549 4545 4549 4545
+ 0x0040: 4549 4545 4549 4545 4549 4545 4549 4545
+ 0x0050: 4549 4545 4549 4545 4549 4545 4549 4545
+ 0x0060: 4549 4545 4549 4545 4549 4545 4549 4545
+ 0x0070: 4549 4545 4549 4545 4549 4545 4549 4545
+ 0x0080: 4549 4545 4549 4545 4549 4545 45
+ unknown TLV #73, length: 69
+ 0x0000: 4545 4945 4545 4945 4545 4945 4545 4945
+ 0x0010: 4545 4945 4545 4945 4545 4945 4545 4945
+ 0x0020: 4545 4945 4545 4945 4545 4945 4545 4945
+ 0x0030: 4545 4945 4545 4945 4545 4945 4545 4945
+ 0x0040: 4545 4945 45
+ unknown TLV #69, length: 73
+ 0x0000: 4545 4549 4545 4549 4545 4549 4545 4549
+ 0x0010: 4545 4549 4545 4549 4545 4549 4545 4549
+ 0x0020: 4545 4549 4545 4549 4545 4549 4545 4549
+ 0x0030: 4545 4549 4545 4549 4545 4549 4545 4549
+ 0x0040: 4545 4549 4545 4549 45
+ unknown TLV #69, length: 69
+ 0x0000: 4945 4545 4945 4545 4945 4545 4945 4545
+ 0x0010: 4945 4545 4945 4545 4945 4545 4945 4545
+ 0x0020: 4945 4545 4945 4545 4945 4545 4945 4545
+ 0x0030: 4945 4545 4945 4545 4945 4545 4945 4545
+ 0x0040: 4945 4545 49
+ unknown TLV #69, length: 69
+ 0x0000: 4549 4545 4549 4545 4549 4545 4549 4545
+ 0x0010: 4549 4545 4549 4545 4549 4545 4549 4545
+ 0x0020: 4549 4545 4549 4545 4549 4545 4549 4545
+ 0x0030: 4549 4545 4549 4545 4549 4545 4549 4545
+ 0x0040: 4549 4545 45
+ unknown TLV #73, length: 69
+ 0x0000: 4545 4945 4545 4945 4545 4945 4545 4945
+ 0x0010: 4545 4945 4545 4945 4545 4945 4545 4945
+ 0x0020: 4545 4945 4545 4945 4545 4945 4545 4945
+ 0x0030: 4545 4945 4545 4945 4545 4945 4545 4945
+ 0x0040: 4545 4945 45
+ unknown TLV #69, length: 73
+ 0x0000: 4545 4549 4545 4549 4545 4549 4545 452d
+ 0x0010: 3836 3739 3032 2053 5042 5350 4253 5042
+ 0x0020: 5350 4220 4465 6661 756c 7400 0000 0000
+ 0x0030: 0000 0000 0000 0000 b905 db76 3170 0992
+ 0x0040: 3cbc 933c a050 389a 00
+ unknown TLV #73, length: 69
+ 0x0000: 4545 3830 322e 3120 5350 4220 4465 6661
+ 0x0010: 756c 7400 0000 0000 0000 0000 0000 0000
+ 0x0020: b905 db76 3170 0992 3cbc 933c a050 389a
+ 0x0030: 0521 0000 2000 1800 0000 0000 0000 0000
+ 0x0040: 0000 0a0b 9e
+ IPv6 reachability TLV #236, length: 202
+ IPv6 prefix: 2aa3:88dd:a090:8ff::/91, Distribution: up, Metric: 28221769, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal
+ IPv6 prefix: ::/0, Distribution: up, Metric: 0, Internal [remaining tlv length 4 < 6] (invalid)
+ 0x0000: 01ae a149 1d5b 2aa3 88dd a090 08ff 0000
+ 0x0010: 0000 0000 0000 0000 0000 0000 0000 0000
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 0000
+ 0x0030: 0000 0000 0000 0000 0000 0000 0000 0000
+ 0x0040: 0000 0000 0000 0000 0000 0000 0000 0000
+ 0x0050: 0000 0000 0000 0000 0000 0000 0000 0000
+ 0x0060: 0000 0000 0000 0000 0000 0000 0000 0000
+ 0x0070: 0000 0000 0000 0000 0000 0000 0000 0000
+ 0x0080: 0000 0000 0000 0000 0000 0000 0000 0000
+ 0x0090: 0000 0000 0000 0000 0000 0000 0000 0000
+ 0x00a0: 0000 0000 0000 0000 0000 0000 0000 0000
+ 0x00b0: 0000 0000 0000 0000 0000 0000 0000 0000
+ 0x00c0: 0000 0000 0000 0000 0000
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 8
+ 0x0000: ff00 0000 0000 0000
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
diff --git a/tests/isis-extd-ipreach-oobr.pcap b/tests/isis-extd-ipreach-oobr.pcap
new file mode 100644
index 0000000..bb25b4a
--- /dev/null
+++ b/tests/isis-extd-ipreach-oobr.pcap
Binary files differ
diff --git a/tests/isis-extd-isreach-oobr.out b/tests/isis-extd-isreach-oobr.out
new file mode 100644
index 0000000..1fa983e
--- /dev/null
+++ b/tests/isis-extd-isreach-oobr.out
@@ -0,0 +1,44 @@
+ 1 08:33:04.1056259 OSI NLPID 0xfe unknown, length: 262140
+ 0x0000: fe7f 4a01 0066 0002 00ff ffff f200 0000
+ 0x0010: 00c6 0000 007f e6ff 00e6 6800 0000
+ 2 06:59:12.1058307 unknown CHDLC protocol (0xfafe)
+ 3 22:59:12.1056259 OSI NLPID 0xfe unknown, length: 262140
+ 0x0000: fe7f 4a01 f165 0002 0000 0000 0000 0000
+ 0x0010: 00c6 0000 007f e6ff 00e6 6800 0000
+ 4 19:08:48.2149389571 IS-IS, length 262139
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3801.0101.0101, holding time: 257s, Flags: [unknown circuit type 0x00]
+ lan-id: 0101.0101.0100.00, Priority: 1, PDU length: 257
+ Extended IS Reachability TLV #22, length: 12
+ IS Neighbor: 0d0d.0d0d.0d0d.0d, Metric: 855309, sub-TLVs present (13)
+ Remaining data in TLV shorter than a subTLV header
+ Purge Originator Identifier TLV #13, length: 13
+ Purge Originator System-ID: 0d0d.0d0d.0d0d
+ Received from System-ID: 0d0d.0d0d.0d0d
+ Purge Originator Identifier TLV #13, length: 13
+ Purge Originator System-ID: 0d0d.0d0d.0d0d
+ Received from System-ID: 0d0d.0d0d.0d0d
+ Purge Originator Identifier TLV #13, length: 13
+ Purge Originator System-ID: 0d64.0d0d.0d0d
+ Received from System-ID: 0d0d.0d0d.0d0d
+ Purge Originator Identifier TLV #13, length: 13
+ Purge Originator System-ID: 0d0d.0d0d.0d0d
+ Received from System-ID: 0d0d.0d0d.0d0d
+ Purge Originator Identifier TLV #13, length: 13
+ Purge Originator System-ID: 0d0d.0d0d.0d0d
+ Received from System-ID: 0d0d.0d0d.0d0d
+ Purge Originator Identifier TLV #13, length: 13
+ Purge Originator System-ID: 0d1c.0d0d.0d0d
+ Received from System-ID: 0d67.0d0d.0d0d
+ Purge Originator Identifier TLV #13, length: 13
+ Purge Originator System-ID: 0d0d.0000.0040
+ Received from System-ID: cc58.5303.2910
+ unknown TLV #0, length: 34
+ 0x0000: 0000 0000 0000 0000 0000 0000 0000 0000
+ 0x0010: 0000 0a16 0020 007f 0000 0036 041f 0116
+ 0x0020: 0113
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 18
+ 0x0000: 3a01 4996 0186 dd60 0000 c787 8787 6687
+ 0x0010: 0000
+ unknown TLV #0, length: 64 [|isis]
diff --git a/tests/isis-extd-isreach-oobr.pcap b/tests/isis-extd-isreach-oobr.pcap
new file mode 100644
index 0000000..c3a7680
--- /dev/null
+++ b/tests/isis-extd-isreach-oobr.pcap
Binary files differ
diff --git a/tests/isis-infinite-loop.pcap b/tests/isis-infinite-loop.pcap
new file mode 100644
index 0000000..b482fc8
--- /dev/null
+++ b/tests/isis-infinite-loop.pcap
Binary files differ
diff --git a/tests/isis-seg-fault-1-v.out b/tests/isis-seg-fault-1-v.out
new file mode 100644
index 0000000..f43db37
--- /dev/null
+++ b/tests/isis-seg-fault-1-v.out
@@ -0,0 +1,62 @@
+ 1 03:09:46.435536 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.0444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 6344.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ unknown TLV #80, length: 4
+ 0x0000: 0a00 0002
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0051
+ Padding TLV #8, length: 255
+ IS Alias ID TLV #24, length: 255
+ IS Neighbor: f500.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0056.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, sub-TLVs present (37)
+ unknown subTLV #0, length: 0
+ unknown subTLV #0, length: 0
+ unknown subTLV #0, length: 0
+ unknown subTLV #0, length: 0
+ Bandwidth Constraints subTLV #22, length: 0
+ unknown subTLV #0, length: 0
+ unknown subTLV #0, length: 0
+ unknown subTLV #64, length: 0
+ unknown subTLV #0, length: 189 (remaining data in subTLVs shorter than the current subTLV)
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.2000.0000.f0, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0059.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+ IS Neighbor: 0000.0000.0000.00, sub-TLVs present (125)
+ unknown subTLV #0, length: 0
+ Remaining data in TLV shorter than a subTLV header
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 247
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ Padding TLV #8, length: 155
diff --git a/tests/isis-seg-fault-1-v.tests b/tests/isis-seg-fault-1-v.tests
new file mode 100644
index 0000000..6d4eec5
--- /dev/null
+++ b/tests/isis-seg-fault-1-v.tests
@@ -0,0 +1,23 @@
+# -*- perl -*-
+
+# This "verbose" ISIS protocol test involves a float calculation that
+# may produce a slightly different result depending on the compiler and
+# the version of the instruction set for which it's generating code (see
+# GitHub issue #333 for another example). The test is done only if we have
+# a floating-point type, as reported by "./tcpdump --fp-type", of FPTYPE1.
+#
+# XXX - this works on my 32-bit x86 Linux virtual machine, so do this
+# regardless of the floating-point type, so always do this. If it
+# fails on some platform, we'll need to tweak tcpdump and tests/TESTrun
+# to check for *that* floating-point difference.
+
+$testlist = [
+ {
+ name => 'isis-seg-fault-1-v',
+ input => 'isis-seg-fault-1.pcapng',
+ output => 'isis-seg-fault-1-v.out',
+ args => '-v'
+ },
+ ];
+
+1;
diff --git a/tests/isis-seg-fault-1.pcapng b/tests/isis-seg-fault-1.pcapng
new file mode 100644
index 0000000..e19d082
--- /dev/null
+++ b/tests/isis-seg-fault-1.pcapng
Binary files differ
diff --git a/tests/isis-seg-fault-2-v.out b/tests/isis-seg-fault-2-v.out
new file mode 100644
index 0000000..1b9b73e
--- /dev/null
+++ b/tests/isis-seg-fault-2-v.out
@@ -0,0 +1,97 @@
+ 1 03:27:54.123192 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [unknown circuit type 0x21]
+ lan-id: 3333.5a33.3333.02, Priority: 64, PDU length: 1497
+ Multi-Topology Capability TLV #144, length: 1
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.0
+ unknown TLV #55, length: 3
+ 0x0000: 0000 00
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.cc53
+ Padding TLV #8, length: 191
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 37
+ 0x0000: 0000 0000 0000 0025 0000 0000 0000 0000
+ 0x0010: 0000 0002 0000 0000 0000 0000 0000 0000
+ 0x0020: 0000 7300 1e
+ unknown TLV #0, length: 0
+ unknown TLV #0, length: 170
+ 0x0000: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0030: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0040: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0050: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0060: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0070: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0080: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0090: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x00a0: aaaa aaaa aaaa aaaa aaaa
+ unknown TLV #170, length: 170
+ 0x0000: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0030: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0040: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0050: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0060: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0070: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0080: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0090: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x00a0: aaaa aaaa aaaa aaaa aaaa
+ unknown TLV #170, length: 170
+ 0x0000: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0030: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0040: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0050: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0060: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0070: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0080: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0090: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x00a0: aaaa aaaa aaaa aaaa aaaa
+ unknown TLV #170, length: 170
+ 0x0000: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0030: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0040: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0050: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0060: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0070: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0080: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0090: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x00a0: aaaa aaaa aaaa aaaa aaaa
+ unknown TLV #170, length: 170
+ 0x0000: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0030: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0040: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0050: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0060: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0070: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0080: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0090: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x00a0: aaaa aaaa aaaa aaaa aaaa
+ unknown TLV #170, length: 170
+ 0x0000: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0010: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0020: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0030: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0040: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0050: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0060: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0070: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0080: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x0090: aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa
+ 0x00a0: aaaa aaaa aaaa aaaa aaaa
+ unknown TLV #170, length: 170 [|isis]
diff --git a/tests/isis-seg-fault-2.pcapng b/tests/isis-seg-fault-2.pcapng
new file mode 100644
index 0000000..66a646d
--- /dev/null
+++ b/tests/isis-seg-fault-2.pcapng
Binary files differ
diff --git a/tests/isis-seg-fault-3-v.out b/tests/isis-seg-fault-3-v.out
new file mode 100644
index 0000000..d864932
--- /dev/null
+++ b/tests/isis-seg-fault-3-v.out
@@ -0,0 +1,17 @@
+ 1 03:42:06.392492 IS-IS, length 131146
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000007, lifetime: 1200s
+ chksum: 0x378e (correct), PDU length: 74, Flags: [ L2 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Hostname TLV #137, length: 2
+ Hostname: R1
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ IS Reachability TLV #2, length: 12
+ IsNotVirtual
+ IS Neighbor: 2222.2222.2222.00, Default Metric: 10, Internal
+ IPv4 Internal Reachability TLV #128, length: 12
+ IPv4 prefix: 10.0.0.0/30, Distribution: up, Metric: 10, Internal
diff --git a/tests/isis-seg-fault-3.pcapng b/tests/isis-seg-fault-3.pcapng
new file mode 100644
index 0000000..17f685f
--- /dev/null
+++ b/tests/isis-seg-fault-3.pcapng
Binary files differ
diff --git a/tests/isis_1-v.out b/tests/isis_1-v.out
new file mode 100644
index 0000000..57be4d3
--- /dev/null
+++ b/tests/isis_1-v.out
@@ -0,0 +1,270 @@
+ 1 03:27:32.633911 IS-IS, length 83
+ L1 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333.00, PDU length: 83
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 48
+ lsp-id: 2222.2222.2222.00-00, seq: 0x0000000e, lifetime: 1184s, chksum: 0x5910
+ lsp-id: 3333.3333.3333.00-00, seq: 0x00000010, lifetime: 1147s, chksum: 0x1749
+ lsp-id: 3333.3333.3333.02-00, seq: 0x00000004, lifetime: 634s, chksum: 0x7f9f
+ 2 03:27:33.849997 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 3 03:27:37.077648 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 4 03:27:39.694291 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0001
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 5 03:27:40.390399 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 6 03:27:42.552721 IS-IS, length 83
+ L1 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333.00, PDU length: 83
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 48
+ lsp-id: 2222.2222.2222.00-00, seq: 0x0000000e, lifetime: 1174s, chksum: 0x5910
+ lsp-id: 3333.3333.3333.00-00, seq: 0x00000010, lifetime: 1137s, chksum: 0x1749
+ lsp-id: 3333.3333.3333.02-00, seq: 0x00000004, lifetime: 624s, chksum: 0x7f9f
+ 7 03:27:43.160586 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 8 03:27:45.648775 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 9 03:27:46.852800 IS-IS, length 136
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 2222.2222.2222.00-00, seq: 0x0000000f, lifetime: 1199s
+ chksum: 0xb503 (correct), PDU length: 136, Flags: [ L1 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Hostname TLV #137, length: 2
+ Hostname: R2
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 192.168.10.1
+ IPv4 Internal Reachability TLV #128, length: 24
+ IPv4 prefix: 10.0.10.0/30, Distribution: up, Metric: 10, Internal
+ IPv4 prefix: 192.168.10.0/24, Distribution: up, Metric: 10, Internal
+ IS Reachability TLV #2, length: 12
+ IsNotVirtual
+ IS Neighbor: 3333.3333.3333.02, Default Metric: 10, Internal
+ IPv4 External Reachability TLV #130, length: 48
+ IPv4 prefix: 172.16.0.0/30, Distribution: up, Metric: 0, External
+ IPv4 prefix: 172.16.1.0/24, Distribution: up, Metric: 0, External
+ IPv4 prefix: 172.16.2.0/24, Distribution: up, Metric: 0, External
+ IPv4 prefix: 172.16.3.0/24, Distribution: up, Metric: 0, External
+ 10 03:27:48.064885 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0001
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 11 03:27:48.232952 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 12 03:27:50.162960 IS-IS, length 83
+ L1 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333.00, PDU length: 83
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 48
+ lsp-id: 2222.2222.2222.00-00, seq: 0x0000000f, lifetime: 1194s, chksum: 0xb503
+ lsp-id: 3333.3333.3333.00-00, seq: 0x00000010, lifetime: 1130s, chksum: 0x1749
+ lsp-id: 3333.3333.3333.02-00, seq: 0x00000004, lifetime: 616s, chksum: 0x7f9f
+ 13 03:27:51.139013 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 14 03:27:54.123192 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 15 03:27:55.803257 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0001
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
diff --git a/tests/isis_1.out b/tests/isis_1.out
new file mode 100644
index 0000000..1733e28
--- /dev/null
+++ b/tests/isis_1.out
@@ -0,0 +1,15 @@
+ 1 03:27:32.633911 IS-IS, L1 CSNP, src-id 3333.3333.3333.00, length 83
+ 2 03:27:33.849997 IS-IS, L1 Lan IIH, src-id 3333.3333.3333, lan-id 3333.3333.3333.02, prio 64, length 1497
+ 3 03:27:37.077648 IS-IS, L1 Lan IIH, src-id 3333.3333.3333, lan-id 3333.3333.3333.02, prio 64, length 1497
+ 4 03:27:39.694291 IS-IS, L1 Lan IIH, src-id 2222.2222.2222, lan-id 3333.3333.3333.02, prio 64, length 1497
+ 5 03:27:40.390399 IS-IS, L1 Lan IIH, src-id 3333.3333.3333, lan-id 3333.3333.3333.02, prio 64, length 1497
+ 6 03:27:42.552721 IS-IS, L1 CSNP, src-id 3333.3333.3333.00, length 83
+ 7 03:27:43.160586 IS-IS, L1 Lan IIH, src-id 3333.3333.3333, lan-id 3333.3333.3333.02, prio 64, length 1497
+ 8 03:27:45.648775 IS-IS, L1 Lan IIH, src-id 3333.3333.3333, lan-id 3333.3333.3333.02, prio 64, length 1497
+ 9 03:27:46.852800 IS-IS, L1 LSP, lsp-id 2222.2222.2222.00-00, seq 0x0000000f, lifetime 1199s, length 136
+ 10 03:27:48.064885 IS-IS, L1 Lan IIH, src-id 2222.2222.2222, lan-id 3333.3333.3333.02, prio 64, length 1497
+ 11 03:27:48.232952 IS-IS, L1 Lan IIH, src-id 3333.3333.3333, lan-id 3333.3333.3333.02, prio 64, length 1497
+ 12 03:27:50.162960 IS-IS, L1 CSNP, src-id 3333.3333.3333.00, length 83
+ 13 03:27:51.139013 IS-IS, L1 Lan IIH, src-id 3333.3333.3333, lan-id 3333.3333.3333.02, prio 64, length 1497
+ 14 03:27:54.123192 IS-IS, L1 Lan IIH, src-id 3333.3333.3333, lan-id 3333.3333.3333.02, prio 64, length 1497
+ 15 03:27:55.803257 IS-IS, L1 Lan IIH, src-id 2222.2222.2222, lan-id 3333.3333.3333.02, prio 64, length 1497
diff --git a/tests/isis_2-v.out b/tests/isis_2-v.out
new file mode 100644
index 0000000..1c13885
--- /dev/null
+++ b/tests/isis_2-v.out
@@ -0,0 +1,403 @@
+ 1 03:20:05.239456 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 2222.2222.2222.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 163
+ 2 03:20:14.984059 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 2222.2222.2222.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 163
+ 3 03:20:24.942714 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 2222.2222.2222.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 163
+ 4 03:20:33.017082 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 2222.2222.2222.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 163
+ 5 03:20:40.371703 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 163
+ 6 03:20:40.419679 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 2222.2222.2222.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0001
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 7 03:20:41.379768 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 8 03:20:41.419730 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0001
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 9 03:20:41.467729 IS-IS, length 86
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000009, lifetime: 1199s
+ chksum: 0x630b (correct), PDU length: 86, Flags: [ L1 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Hostname TLV #137, length: 2
+ Hostname: R2
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 192.168.10.1
+ IPv4 Internal Reachability TLV #128, length: 24
+ IPv4 prefix: 10.0.10.0/30, Distribution: up, Metric: 10, Internal
+ IPv4 prefix: 192.168.10.0/24, Distribution: up, Metric: 10, Internal
+ IS Reachability TLV #2, length: 12
+ IsNotVirtual
+ IS Neighbor: 3333.3333.3333.02, Default Metric: 10, Internal
+ 10 03:20:41.475754 IS-IS, length 74
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 3333.3333.3333.00-00, seq: 0x0000000e, lifetime: 1199s
+ chksum: 0x1b47 (correct), PDU length: 74, Flags: [ default ATT bit set, L2 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Hostname TLV #137, length: 2
+ Hostname: R3
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ IPv4 Internal Reachability TLV #128, length: 12
+ IPv4 prefix: 10.0.10.0/30, Distribution: up, Metric: 10, Internal
+ IS Reachability TLV #2, length: 12
+ IsNotVirtual
+ IS Neighbor: 3333.3333.3333.02, Default Metric: 10, Internal
+ 11 03:20:42.355830 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 12 03:20:45.596030 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 13 03:20:47.196130 IS-IS, length 83
+ L1 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333.00, PDU length: 83
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 48
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000009, lifetime: 1192s, chksum: 0x630b
+ lsp-id: 3333.3333.3333.00-00, seq: 0x0000000e, lifetime: 1194s, chksum: 0x1b47
+ lsp-id: 3333.3333.3333.02-00, seq: 0x00000004, lifetime: 1039s, chksum: 0x7f9f
+ 14 03:20:48.186074 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 15 03:20:50.982191 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0001
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 16 03:20:51.430274 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 17 03:20:54.426429 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 18 03:20:55.030460 IS-IS, length 83
+ L1 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333.00, PDU length: 83
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 48
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000009, lifetime: 1184s, chksum: 0x630b
+ lsp-id: 3333.3333.3333.00-00, seq: 0x0000000e, lifetime: 1186s, chksum: 0x1b47
+ lsp-id: 3333.3333.3333.02-00, seq: 0x00000004, lifetime: 1032s, chksum: 0x7f9f
+ 19 03:20:57.632769 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 20 03:20:59.360828 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0001
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 21 03:21:00.290790 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 22 03:21:03.062952 IS-IS, length 1497
+ L1 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 10s, Flags: [Level 1 only]
+ lan-id: 3333.3333.3333.02, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c201.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
diff --git a/tests/isis_3-v.out b/tests/isis_3-v.out
new file mode 100644
index 0000000..c5c8ecc
--- /dev/null
+++ b/tests/isis_3-v.out
@@ -0,0 +1,774 @@
+ 1 03:09:19.132065 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 163
+ 2 03:09:28.034396 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 163
+ 3 03:09:37.751013 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 163
+ 4 03:09:45.397723 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 3333.3333.3333.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 163
+ 5 03:09:45.405675 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 6 03:09:46.391559 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 3333.3333.3333.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c203.29a9.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 7 03:09:46.435536 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 8 03:09:46.483537 IS-IS, length 100
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 4444.4444.4444.00-00, seq: 0x0000000a, lifetime: 1199s
+ chksum: 0xf252 (correct), PDU length: 100, Flags: [ L2 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Hostname TLV #137, length: 2
+ Hostname: R4
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.20.1
+ IPv4 Internal Reachability TLV #128, length: 12
+ IPv4 prefix: 10.0.0.0/30, Distribution: up, Metric: 10, Internal
+ IS Reachability TLV #2, length: 12
+ IsNotVirtual
+ IS Neighbor: 4444.4444.4444.01, Default Metric: 10, Internal
+ IPv4 Internal Reachability TLV #128, length: 24
+ IPv4 prefix: 10.0.20.0/30, Distribution: up, Metric: 10, Internal
+ IPv4 prefix: 192.168.20.0/24, Distribution: up, Metric: 20, Internal
+ 9 03:09:46.523538 IS-IS, length 52
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 4444.4444.4444.01-00, seq: 0x00000003, lifetime: 1199s
+ chksum: 0x7ef7 (correct), PDU length: 52, Flags: [ L2 IS ]
+ IS Reachability TLV #2, length: 23
+ IsNotVirtual
+ IS Neighbor: 4444.4444.4444.00, Default Metric: 0, Internal
+ IS Neighbor: 3333.3333.3333.00, Default Metric: 0, Internal
+ 10 03:09:46.527565 IS-IS, length 100
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 3333.3333.3333.00-00, seq: 0x00000009, lifetime: 1199s
+ chksum: 0x24b1 (correct), PDU length: 100, Flags: [ L2 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Hostname TLV #137, length: 2
+ Hostname: R3
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.10.1
+ IPv4 Internal Reachability TLV #128, length: 12
+ IPv4 prefix: 10.0.0.0/30, Distribution: up, Metric: 10, Internal
+ IS Reachability TLV #2, length: 12
+ IsNotVirtual
+ IS Neighbor: 4444.4444.4444.01, Default Metric: 10, Internal
+ IPv4 Internal Reachability TLV #128, length: 24
+ IPv4 prefix: 10.0.10.0/30, Distribution: up, Metric: 10, Internal
+ IPv4 prefix: 192.168.10.0/24, Distribution: up, Metric: 20, Internal
+ 11 03:09:47.379619 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c203.29a9.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 12 03:09:49.489915 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 13 03:09:51.603842 IS-IS, length 83
+ L2 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444.00, PDU length: 83
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 48
+ lsp-id: 3333.3333.3333.00-00, seq: 0x00000009, lifetime: 1192s, chksum: 0x24b1
+ lsp-id: 4444.4444.4444.00-00, seq: 0x0000000a, lifetime: 1194s, chksum: 0xf252
+ lsp-id: 4444.4444.4444.01-00, seq: 0x00000003, lifetime: 1194s, chksum: 0x7ef7
+ 14 03:09:52.198066 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 15 03:09:55.122266 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 16 03:09:55.810338 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c203.29a9.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 17 03:09:57.764230 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 18 03:10:00.424404 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 19 03:10:00.640404 IS-IS, length 83
+ L2 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444.00, PDU length: 83
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 48
+ lsp-id: 3333.3333.3333.00-00, seq: 0x00000009, lifetime: 1183s, chksum: 0x24b1
+ lsp-id: 4444.4444.4444.00-00, seq: 0x0000000a, lifetime: 1185s, chksum: 0xf252
+ lsp-id: 4444.4444.4444.01-00, seq: 0x00000003, lifetime: 1185s, chksum: 0x7ef7
+ 20 03:10:03.466787 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 21 03:10:04.680689 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c203.29a9.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 22 03:10:06.176744 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 23 03:10:08.712904 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 24 03:10:09.744957 IS-IS, length 83
+ L2 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444.00, PDU length: 83
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 48
+ lsp-id: 3333.3333.3333.00-00, seq: 0x00000009, lifetime: 1174s, chksum: 0x24b1
+ lsp-id: 4444.4444.4444.00-00, seq: 0x0000000a, lifetime: 1176s, chksum: 0xf252
+ lsp-id: 4444.4444.4444.01-00, seq: 0x00000003, lifetime: 1176s, chksum: 0x7ef7
+ 25 03:10:12.005093 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 26 03:10:14.177364 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c203.29a9.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 27 03:10:15.273296 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 28 03:10:17.569439 IS-IS, length 83
+ L2 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444.00, PDU length: 83
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 48
+ lsp-id: 3333.3333.3333.00-00, seq: 0x00000009, lifetime: 1166s, chksum: 0x24b1
+ lsp-id: 4444.4444.4444.00-00, seq: 0x0000000a, lifetime: 1168s, chksum: 0xf252
+ lsp-id: 4444.4444.4444.01-00, seq: 0x00000003, lifetime: 1168s, chksum: 0x7ef7
+ 29 03:10:17.921457 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 30 03:10:20.435834 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 31 03:10:23.353792 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 32 03:10:23.801837 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c203.29a9.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 33 03:10:26.172156 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 34 03:10:27.132249 IS-IS, length 83
+ L2 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444.00, PDU length: 83
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 48
+ lsp-id: 3333.3333.3333.00-00, seq: 0x00000009, lifetime: 1157s, chksum: 0x24b1
+ lsp-id: 4444.4444.4444.00-00, seq: 0x0000000a, lifetime: 1159s, chksum: 0xf252
+ lsp-id: 4444.4444.4444.01-00, seq: 0x00000003, lifetime: 1159s, chksum: 0x7ef7
+ 35 03:10:29.004368 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 36 03:10:31.588532 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 37 03:10:33.592669 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c203.29a9.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 38 03:10:34.622453 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 39 03:10:36.668812 IS-IS, length 83
+ L2 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444.00, PDU length: 83
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 48
+ lsp-id: 3333.3333.3333.00-00, seq: 0x00000009, lifetime: 1147s, chksum: 0x24b1
+ lsp-id: 4444.4444.4444.00-00, seq: 0x0000000a, lifetime: 1149s, chksum: 0xf252
+ lsp-id: 4444.4444.4444.01-00, seq: 0x00000003, lifetime: 1149s, chksum: 0x7ef7
+ 40 03:10:37.556868 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 41 03:10:40.893119 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 42 03:10:43.139065 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 3333.3333.3333, holding time: 30s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.000a
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c203.29a9.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
+ 43 03:10:44.147031 IS-IS, length 1497
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 4444.4444.4444, holding time: 10s, Flags: [Level 2 only]
+ lan-id: 4444.4444.4444.01, Priority: 64, PDU length: 1497
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0014
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ IS Neighbor(s) TLV #6, length: 6
+ SNPA: c202.2998.0000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 155
diff --git a/tests/isis_4-v.out b/tests/isis_4-v.out
new file mode 100644
index 0000000..d951e1a
--- /dev/null
+++ b/tests/isis_4-v.out
@@ -0,0 +1,400 @@
+ 1 03:40:38.691154 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Down (2)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 2 03:40:46.923618 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Down (2)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 3 03:41:55.844926 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Down (2)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 4 03:42:05.288417 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Down (2)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 5 03:42:06.296448 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Initializing (1)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 6 03:42:06.308456 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Initializing (1)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 7 03:42:06.320445 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Up (0)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 8 03:42:06.332472 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Up (0)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 9 03:42:06.392476 IS-IS, length 74
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000007, lifetime: 1200s
+ chksum: 0x1da8 (correct), PDU length: 74, Flags: [ L2 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Hostname TLV #137, length: 2
+ Hostname: R1
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ IPv4 Internal Reachability TLV #128, length: 12
+ IPv4 prefix: 10.0.0.0/30, Distribution: up, Metric: 10, Internal
+ IS Reachability TLV #2, length: 12
+ IsNotVirtual
+ IS Neighbor: 2222.2222.2222.00, Default Metric: 10, Internal
+ 10 03:42:06.392492 IS-IS, length 74
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000007, lifetime: 1200s
+ chksum: 0x378e (correct), PDU length: 74, Flags: [ L2 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Hostname TLV #137, length: 2
+ Hostname: R1
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ IS Reachability TLV #2, length: 12
+ IsNotVirtual
+ IS Neighbor: 2222.2222.2222.00, Default Metric: 10, Internal
+ IPv4 Internal Reachability TLV #128, length: 12
+ IPv4 prefix: 10.0.0.0/30, Distribution: up, Metric: 10, Internal
+ 11 03:42:06.392512 IS-IS, length 74
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000005, lifetime: 1200s
+ chksum: 0x4382 (correct), PDU length: 74, Flags: [ L2 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Hostname TLV #137, length: 2
+ Hostname: R2
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ IPv4 Internal Reachability TLV #128, length: 12
+ IPv4 prefix: 10.0.0.0/30, Distribution: up, Metric: 10, Internal
+ IS Reachability TLV #2, length: 12
+ IsNotVirtual
+ IS Neighbor: 1111.1111.1111.00, Default Metric: 10, Internal
+ 12 03:42:06.392528 IS-IS, length 74
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000006, lifetime: 1200s
+ chksum: 0xf4cf (correct), PDU length: 74, Flags: [ L2 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Hostname TLV #137, length: 2
+ Hostname: R2
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ IS Reachability TLV #2, length: 12
+ IsNotVirtual
+ IS Neighbor: 1111.1111.1111.00, Default Metric: 10, Internal
+ IPv4 Internal Reachability TLV #128, length: 12
+ IPv4 prefix: 10.0.0.0/30, Distribution: up, Metric: 10, Internal
+ 13 03:42:06.824491 IS-IS, length 67
+ L1 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222.00, PDU length: 67
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 32
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000007, lifetime: 1198s, chksum: 0x1da8
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000005, lifetime: 1199s, chksum: 0x4382
+ 14 03:42:06.824497 IS-IS, length 67
+ L1 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111.00, PDU length: 67
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 32
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000007, lifetime: 1199s, chksum: 0x1da8
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000005, lifetime: 1198s, chksum: 0x4382
+ 15 03:42:06.824524 IS-IS, length 67
+ L2 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111.00, PDU length: 67
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 32
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000007, lifetime: 1199s, chksum: 0x378e
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000006, lifetime: 1198s, chksum: 0xf4cf
+ 16 03:42:06.824546 IS-IS, length 67
+ L2 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222.00, PDU length: 67
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ LSP entries TLV #9, length: 32
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000007, lifetime: 1198s, chksum: 0x378e
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000006, lifetime: 1199s, chksum: 0xf4cf
+ 17 03:42:07.400507 IS-IS, length 35
+ L1 PSNP, hlen: 17, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111.00, PDU length: 35
+ LSP entries TLV #9, length: 16
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000005, lifetime: 1197s, chksum: 0x4382
+ 18 03:42:07.400542 IS-IS, length 35
+ L2 PSNP, hlen: 17, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111.00, PDU length: 35
+ LSP entries TLV #9, length: 16
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000006, lifetime: 1198s, chksum: 0xf4cf
+ 19 03:42:07.412515 IS-IS, length 35
+ L1 PSNP, hlen: 17, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222.00, PDU length: 35
+ LSP entries TLV #9, length: 16
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000007, lifetime: 1197s, chksum: 0x1da8
+ 20 03:42:07.412530 IS-IS, length 35
+ L2 PSNP, hlen: 17, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222.00, PDU length: 35
+ LSP entries TLV #9, length: 16
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000007, lifetime: 1198s, chksum: 0x378e
+ 21 03:42:14.728981 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Up (0)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 22 03:42:15.388991 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Up (0)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 23 03:42:22.370484 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Up (0)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 24 03:42:24.054556 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Up (0)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 25 03:42:31.379023 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Up (0)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.2
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
+ 26 03:42:31.955027 IS-IS, length 1499
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x00, PDU length: 1499
+ Restart Signaling TLV #211, length: 3
+ Flags [none], Remaining holding time 0s
+ Point-to-point Adjacency State TLV #240, length: 1
+ Adjacency State: Up (0)
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 10.0.0.1
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 169
diff --git a/tests/isis_cap_tlv.out b/tests/isis_cap_tlv.out
new file mode 100644
index 0000000..1ffdef4
--- /dev/null
+++ b/tests/isis_cap_tlv.out
@@ -0,0 +1,99 @@
+ 1 12:36:55.841195 IS-IS, length 495
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 0192.0168.0001.00-00, seq: 0x0000000b, lifetime: 1196s
+ chksum: 0xc074 (correct), PDU length: 495, Flags: [ L2 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0002
+ LSP Buffersize TLV #14, length: 2
+ LSP Buffersize: 1492
+ Protocols supported TLV #129, length: 2
+ NLPID(s): IPv4 (0xcc), IPv6 (0x8e)
+ Traffic Engineering Router ID TLV #134, length: 4
+ Traffic Engineering Router ID: 192.168.0.1
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 192.168.0.1
+ Hostname TLV #137, length: 9
+ Hostname: vmx-18-r1
+ IS Reachability TLV #2, length: 34
+ IsNotVirtual
+ IS Neighbor: 0192.0168.0002.02, Default Metric: 10, Internal
+ IS Neighbor: 0192.0168.0003.02, Default Metric: 63, Internal
+ IS Neighbor: 0192.0168.0004.02, Default Metric: 63, Internal
+ Extended IS Reachability TLV #22, length: 184
+ IS Neighbor: 0192.0168.0002.02, Metric: 10, sub-TLVs present (81)
+ IPv4 interface address subTLV #6, length: 4, 10.0.12.1
+ Link Local/Remote Identifier subTLV #4, length: 8, 0x00000180, 0x00000000
+ Unreserved bandwidth subTLV #11, length: 32
+ TE-Class 0: 1000.000 Mbps
+ TE-Class 1: 1000.000 Mbps
+ TE-Class 2: 1000.000 Mbps
+ TE-Class 3: 1000.000 Mbps
+ TE-Class 4: 1000.000 Mbps
+ TE-Class 5: 1000.000 Mbps
+ TE-Class 6: 1000.000 Mbps
+ TE-Class 7: 1000.000 Mbps
+ Reservable link bandwidth subTLV #10, length: 4, 1000.000 Mbps
+ Maximum link bandwidth subTLV #9, length: 4, 1000.000 Mbps
+ Administrative groups subTLV #3, length: 4, 0x00000000
+ LAN Adjacency Segment Identifier subTLV #32, length: 11
+ Flags: [Value, Local significance]
+ Weight: 0
+ Neighbor System-ID: 0192.0168.0002
+ Label: 18
+ IS Neighbor: 0192.0168.0003.02, Metric: 63, sub-TLVs present (81)
+ IPv4 interface address subTLV #6, length: 4, 10.0.13.1
+ Link Local/Remote Identifier subTLV #4, length: 8, 0x00000182, 0x00000000
+ Unreserved bandwidth subTLV #11, length: 32
+ TE-Class 0: 1000.000 Mbps
+ TE-Class 1: 1000.000 Mbps
+ TE-Class 2: 1000.000 Mbps
+ TE-Class 3: 1000.000 Mbps
+ TE-Class 4: 1000.000 Mbps
+ TE-Class 5: 1000.000 Mbps
+ TE-Class 6: 1000.000 Mbps
+ TE-Class 7: 1000.000 Mbps
+ Reservable link bandwidth subTLV #10, length: 4, 1000.000 Mbps
+ Maximum link bandwidth subTLV #9, length: 4, 1000.000 Mbps
+ Administrative groups subTLV #3, length: 4, 0x00000000
+ LAN Adjacency Segment Identifier subTLV #32, length: 11
+ Flags: [Value, Local significance]
+ Weight: 0
+ Neighbor System-ID: 0192.0168.0003
+ Label: 16
+ Extended IS Reachability TLV #22, length: 92
+ IS Neighbor: 0192.0168.0004.02, Metric: 63, sub-TLVs present (81)
+ IPv4 interface address subTLV #6, length: 4, 10.0.14.1
+ Link Local/Remote Identifier subTLV #4, length: 8, 0x00000183, 0x00000000
+ Unreserved bandwidth subTLV #11, length: 32
+ TE-Class 0: 1000.000 Mbps
+ TE-Class 1: 1000.000 Mbps
+ TE-Class 2: 1000.000 Mbps
+ TE-Class 3: 1000.000 Mbps
+ TE-Class 4: 1000.000 Mbps
+ TE-Class 5: 1000.000 Mbps
+ TE-Class 6: 1000.000 Mbps
+ TE-Class 7: 1000.000 Mbps
+ Reservable link bandwidth subTLV #10, length: 4, 1000.000 Mbps
+ Maximum link bandwidth subTLV #9, length: 4, 1000.000 Mbps
+ Administrative groups subTLV #3, length: 4, 0x00000000
+ LAN Adjacency Segment Identifier subTLV #32, length: 11
+ Flags: [Value, Local significance]
+ Weight: 0
+ Neighbor System-ID: 0192.0168.0004
+ Label: 17
+ IPv4 Internal Reachability TLV #128, length: 60
+ IPv4 prefix: 10.0.12.0/24, Distribution: up, Metric: 10, Internal
+ IPv4 prefix: 10.0.13.0/24, Distribution: up, Metric: 63, Internal
+ IPv4 prefix: 10.0.14.0/24, Distribution: up, Metric: 63, Internal
+ IPv4 prefix: 172.16.11.0/24, Distribution: up, Metric: 63, Internal
+ IPv4 prefix: 192.168.0.1/32, Distribution: up, Metric: 63, Internal
+ Extended IPv4 Reachability TLV #135, length: 41
+ IPv4 prefix: 10.0.12.0/24, Distribution: up, Metric: 10
+ IPv4 prefix: 10.0.13.0/24, Distribution: up, Metric: 63
+ IPv4 prefix: 10.0.14.0/24, Distribution: up, Metric: 63
+ IPv4 prefix: 172.16.11.0/24, Distribution: up, Metric: 63
+ IPv4 prefix: 192.168.0.1/32, Distribution: up, Metric: 63
+ IS-IS Router Capability TLV #242, length: 8
+ Router-ID 192.168.0.1, Flags [none]
+ unknown subTLV #19, length: 1
+ 0x0000: 00
diff --git a/tests/isis_cap_tlv.pcap b/tests/isis_cap_tlv.pcap
new file mode 100644
index 0000000..ed8ae36
--- /dev/null
+++ b/tests/isis_cap_tlv.pcap
Binary files differ
diff --git a/tests/isis_iid_tlv.out b/tests/isis_iid_tlv.out
new file mode 100644
index 0000000..b486549
--- /dev/null
+++ b/tests/isis_iid_tlv.out
@@ -0,0 +1,777 @@
+ 1 09:29:29.268801 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 2 09:29:37.075801 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 3 09:29:46.021211 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 4 09:29:55.106207 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 5 09:30:05.025102 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 6 09:30:13.883206 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 7 09:30:22.054618 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 8 09:30:30.417192 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 9 09:30:38.433368 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 10 09:30:48.275219 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 11 09:30:55.827442 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 12 09:31:03.671874 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 13 09:31:13.148539 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 14 09:31:22.673473 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 15 09:31:31.072251 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 16 09:31:39.754349 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 17 09:31:47.777381 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 5
+ Adjacency State: Down (2)
+ Neighbor Extended Local circuit-ID: 0x00000000
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 159
+ 18 09:31:54.607871 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.2
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 15
+ Adjacency State: Initializing (1)
+ Extended Local circuit-ID: 0x00000002
+ Neighbor System-ID: 1111.1111.1111
+ Neighbor Extended Local circuit-ID: 0x00000002
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 149
+ 19 09:31:54.608673 IS-IS, length 57
+ L1 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111.00, PDU length: 57
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ LSP entries TLV #9, length: 16
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000002, lifetime: 1020s, chksum: 0x5bec
+ 20 09:31:54.608705 IS-IS, length 57
+ L2 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111.00, PDU length: 57
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ LSP entries TLV #9, length: 16
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000002, lifetime: 1020s, chksum: 0x5bec
+ 21 09:31:54.658754 IS-IS, length 95
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000003, lifetime: 1199s
+ chksum: 0xf15d (correct), PDU length: 95, Flags: [ L2 IS ]
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Extended IS Reachability TLV #22, length: 11
+ IS Neighbor: 2222.2222.2222.00, Metric: 10, no sub-TLVs present
+ IS-IS Router Capability TLV #242, length: 9
+ Router-ID 1.1.1.1, Flags [none]
+ unknown subTLV #27, length: 2
+ 0x0000: fa00
+ IPv4 Interface address(es) TLV #132, length: 8
+ IPv4 interface address: 2.2.2.1
+ IPv4 interface address: 1.1.1.1
+ Extended IPv4 Reachability TLV #135, length: 17
+ IPv4 prefix: 2.2.2.1/32, Distribution: up, Metric: 10
+ IPv4 prefix: 1.1.1.0/24, Distribution: up, Metric: 10
+ 22 09:31:54.658811 IS-IS, length 95
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000003, lifetime: 1199s
+ chksum: 0xf15d (correct), PDU length: 95, Flags: [ L2 IS ]
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Extended IS Reachability TLV #22, length: 11
+ IS Neighbor: 2222.2222.2222.00, Metric: 10, no sub-TLVs present
+ IS-IS Router Capability TLV #242, length: 9
+ Router-ID 1.1.1.1, Flags [none]
+ unknown subTLV #27, length: 2
+ 0x0000: fa00
+ IPv4 Interface address(es) TLV #132, length: 8
+ IPv4 interface address: 2.2.2.1
+ IPv4 interface address: 1.1.1.1
+ Extended IPv4 Reachability TLV #135, length: 17
+ IPv4 prefix: 2.2.2.1/32, Distribution: up, Metric: 10
+ IPv4 prefix: 1.1.1.0/24, Distribution: up, Metric: 10
+ 23 09:31:57.061599 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 15
+ Adjacency State: Up (0)
+ Extended Local circuit-ID: 0x00000002
+ Neighbor System-ID: 2222.2222.2222
+ Neighbor Extended Local circuit-ID: 0x00000002
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 149
+ 24 09:31:57.084952 IS-IS, length 57
+ L1 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222.00, PDU length: 57
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ LSP entries TLV #9, length: 16
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000004, lifetime: 1155s, chksum: 0xb02b
+ 25 09:31:57.085008 IS-IS, length 57
+ L2 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222.00, PDU length: 57
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ LSP entries TLV #9, length: 16
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000004, lifetime: 1155s, chksum: 0xb02b
+ 26 09:31:57.085353 IS-IS, length 95
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000003, lifetime: 1197s
+ chksum: 0xf15d (correct), PDU length: 95, Flags: [ L2 IS ]
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Extended IS Reachability TLV #22, length: 11
+ IS Neighbor: 2222.2222.2222.00, Metric: 10, no sub-TLVs present
+ IS-IS Router Capability TLV #242, length: 9
+ Router-ID 1.1.1.1, Flags [none]
+ unknown subTLV #27, length: 2
+ 0x0000: fa00
+ IPv4 Interface address(es) TLV #132, length: 8
+ IPv4 interface address: 2.2.2.1
+ IPv4 interface address: 1.1.1.1
+ Extended IPv4 Reachability TLV #135, length: 17
+ IPv4 prefix: 2.2.2.1/32, Distribution: up, Metric: 10
+ IPv4 prefix: 1.1.1.0/24, Distribution: up, Metric: 10
+ 27 09:31:57.085376 IS-IS, length 95
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000003, lifetime: 1197s
+ chksum: 0xf15d (correct), PDU length: 95, Flags: [ L2 IS ]
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Extended IS Reachability TLV #22, length: 11
+ IS Neighbor: 2222.2222.2222.00, Metric: 10, no sub-TLVs present
+ IS-IS Router Capability TLV #242, length: 9
+ Router-ID 1.1.1.1, Flags [none]
+ unknown subTLV #27, length: 2
+ 0x0000: fa00
+ IPv4 Interface address(es) TLV #132, length: 8
+ IPv4 interface address: 2.2.2.1
+ IPv4 interface address: 1.1.1.1
+ Extended IPv4 Reachability TLV #135, length: 17
+ IPv4 prefix: 2.2.2.1/32, Distribution: up, Metric: 10
+ IPv4 prefix: 1.1.1.0/24, Distribution: up, Metric: 10
+ 28 09:31:57.135033 IS-IS, length 95
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000005, lifetime: 1199s
+ chksum: 0xe167 (correct), PDU length: 95, Flags: [ L2 IS ]
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Extended IS Reachability TLV #22, length: 11
+ IS Neighbor: 1111.1111.1111.00, Metric: 10, no sub-TLVs present
+ IS-IS Router Capability TLV #242, length: 9
+ Router-ID 1.1.1.2, Flags [none]
+ unknown subTLV #27, length: 2
+ 0x0000: fa00
+ IPv4 Interface address(es) TLV #132, length: 8
+ IPv4 interface address: 2.2.2.2
+ IPv4 interface address: 1.1.1.2
+ Extended IPv4 Reachability TLV #135, length: 17
+ IPv4 prefix: 2.2.2.2/32, Distribution: up, Metric: 10
+ IPv4 prefix: 1.1.1.0/24, Distribution: up, Metric: 10
+ 29 09:31:57.135069 IS-IS, length 95
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000005, lifetime: 1199s
+ chksum: 0xe167 (correct), PDU length: 95, Flags: [ L2 IS ]
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Extended IS Reachability TLV #22, length: 11
+ IS Neighbor: 1111.1111.1111.00, Metric: 10, no sub-TLVs present
+ IS-IS Router Capability TLV #242, length: 9
+ Router-ID 1.1.1.2, Flags [none]
+ unknown subTLV #27, length: 2
+ 0x0000: fa00
+ IPv4 Interface address(es) TLV #132, length: 8
+ IPv4 interface address: 2.2.2.2
+ IPv4 interface address: 1.1.1.2
+ Extended IPv4 Reachability TLV #135, length: 17
+ IPv4 prefix: 2.2.2.2/32, Distribution: up, Metric: 10
+ IPv4 prefix: 1.1.1.0/24, Distribution: up, Metric: 10
+ 30 09:31:58.085559 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 1.1.1.1 tell 1.1.1.2, length 28
+ 31 09:31:58.085613 ARP, Ethernet (len 6), IPv4 (len 4), Reply 1.1.1.1 is-at 02:01:00:03:00:00, length 28
+ 32 09:31:58.135418 IS-IS, length 106
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000006, lifetime: 1199s
+ chksum: 0xd4a7 (correct), PDU length: 106, Flags: [ L2 IS ]
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Extended IS Reachability TLV #22, length: 11
+ IS Neighbor: 1111.1111.1111.00, Metric: 10, no sub-TLVs present
+ IS-IS Router Capability TLV #242, length: 9
+ Router-ID 1.1.1.2, Flags [none]
+ unknown subTLV #27, length: 2
+ 0x0000: fa00
+ Extended IPv4 Reachability TLV #135, length: 9
+ IPv4 prefix: 2.2.2.1/32, Distribution: up, Metric: 20
+ IPv4 Interface address(es) TLV #132, length: 8
+ IPv4 interface address: 2.2.2.2
+ IPv4 interface address: 1.1.1.2
+ Extended IPv4 Reachability TLV #135, length: 17
+ IPv4 prefix: 2.2.2.2/32, Distribution: up, Metric: 10
+ IPv4 prefix: 1.1.1.0/24, Distribution: up, Metric: 10
+ 33 09:31:58.186000 IS-IS, length 106
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000004, lifetime: 1199s
+ chksum: 0xf68a (correct), PDU length: 106, Flags: [ L2 IS ]
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Extended IS Reachability TLV #22, length: 11
+ IS Neighbor: 2222.2222.2222.00, Metric: 10, no sub-TLVs present
+ IS-IS Router Capability TLV #242, length: 9
+ Router-ID 1.1.1.1, Flags [none]
+ unknown subTLV #27, length: 2
+ 0x0000: fa00
+ Extended IPv4 Reachability TLV #135, length: 9
+ IPv4 prefix: 2.2.2.2/32, Distribution: up, Metric: 20
+ IPv4 Interface address(es) TLV #132, length: 8
+ IPv4 interface address: 2.2.2.1
+ IPv4 interface address: 1.1.1.1
+ Extended IPv4 Reachability TLV #135, length: 17
+ IPv4 prefix: 2.2.2.1/32, Distribution: up, Metric: 10
+ IPv4 prefix: 1.1.1.0/24, Distribution: up, Metric: 10
+ 34 09:31:59.085250 IS-IS, length 41
+ L1 PSNP, hlen: 17, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111.00, PDU length: 41
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ LSP entries TLV #9, length: 16
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000005, lifetime: 1199s, chksum: 0xe167
+ 35 09:31:59.085325 IS-IS, length 41
+ L2 PSNP, hlen: 17, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111.00, PDU length: 41
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ LSP entries TLV #9, length: 16
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000006, lifetime: 1200s, chksum: 0xd4a7
+ 36 09:31:59.085793 IS-IS, length 41
+ L1 PSNP, hlen: 17, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222.00, PDU length: 41
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ LSP entries TLV #9, length: 16
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000003, lifetime: 1198s, chksum: 0xf15d
+ 37 09:31:59.085841 IS-IS, length 41
+ L2 PSNP, hlen: 17, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222.00, PDU length: 41
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ LSP entries TLV #9, length: 16
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000004, lifetime: 1200s, chksum: 0xf68a
+ 38 09:32:03.638208 IS-IS, length 73
+ L1 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111.00, PDU length: 73
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ LSP entries TLV #9, length: 32
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000003, lifetime: 1192s, chksum: 0xf15d
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000005, lifetime: 1194s, chksum: 0xe167
+ 39 09:32:03.638269 IS-IS, length 73
+ L2 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111.00, PDU length: 73
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ LSP entries TLV #9, length: 32
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000004, lifetime: 1195s, chksum: 0xf68a
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000006, lifetime: 1195s, chksum: 0xd4a7
+ 40 09:32:04.218182 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.2
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 15
+ Adjacency State: Up (0)
+ Extended Local circuit-ID: 0x00000002
+ Neighbor System-ID: 1111.1111.1111
+ Neighbor Extended Local circuit-ID: 0x00000002
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 149
+ 41 09:32:04.627490 IS-IS, length 73
+ L1 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222.00, PDU length: 73
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ LSP entries TLV #9, length: 32
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000003, lifetime: 1193s, chksum: 0xf15d
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000005, lifetime: 1193s, chksum: 0xe167
+ 42 09:32:04.627543 IS-IS, length 73
+ L2 CSNP, hlen: 33, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 2222.2222.2222.00, PDU length: 73
+ start lsp-id: 0000.0000.0000.00-00
+ end lsp-id: ffff.ffff.ffff.ff-ff
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ LSP entries TLV #9, length: 32
+ lsp-id: 1111.1111.1111.00-00, seq: 0x00000004, lifetime: 1194s, chksum: 0xf68a
+ lsp-id: 2222.2222.2222.00-00, seq: 0x00000006, lifetime: 1194s, chksum: 0xd4a7
+ 43 09:32:05.682366 IS-IS, length 1497
+ p2p IIH, hlen: 20, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ source-id: 1111.1111.1111, holding time: 30s, Flags: [Level 1, Level 2]
+ circuit-id: 0x02, PDU length: 1497
+ Instance Identifier TLV #7, length: 4
+ Instance ID: 1, ITIDs(1): 0
+ Protocols supported TLV #129, length: 1
+ NLPID(s): IPv4 (0xcc)
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0001
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 1.1.1.1
+ Restart Signaling TLV #211, length: 1
+ Flags [none]
+ Point-to-point Adjacency State TLV #240, length: 15
+ Adjacency State: Up (0)
+ Extended Local circuit-ID: 0x00000002
+ Neighbor System-ID: 2222.2222.2222
+ Neighbor Extended Local circuit-ID: 0x00000002
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 255
+ Padding TLV #8, length: 149
diff --git a/tests/isis_iid_tlv.pcap b/tests/isis_iid_tlv.pcap
new file mode 100644
index 0000000..80b10fc
--- /dev/null
+++ b/tests/isis_iid_tlv.pcap
Binary files differ
diff --git a/tests/isis_infloop-v.out b/tests/isis_infloop-v.out
new file mode 100644
index 0000000..83ed2ca
--- /dev/null
+++ b/tests/isis_infloop-v.out
@@ -0,0 +1,35 @@
+ 1 18:10:20.233776 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto GRE (47), length 54)
+ 253.120.2.55 > 192.168.1.1: GREv0, Flags [none], length 34
+ IS-IS, length 30
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (6), max-area: 7 (7)
+ lsp-id: ffff.ffff.ffff.ff-ff, seq: 0xffffffff, lifetime: 65535s
+ chksum: 0xffff (incorrect should be 0x0fe8), PDU length: 65535, Flags: [ L1 IS ]
+ Instance Identifier TLV #7, length: 0 [|isis]
+ 2 18:10:20.286769 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto GRE (47), length 54)
+ 234.176.145.73 > 192.168.1.1: GREv0, Flags [none], length 34
+ IS-IS, length 30
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (6), max-area: 7 (7)
+ lsp-id: ffff.ffff.ffff.ff-ff, seq: 0xffffffff, lifetime: 65535s
+ chksum: 0xffff (incorrect should be 0x0fe8), PDU length: 65535, Flags: [ L1 IS ]
+ Instance Identifier TLV #7, length: 0 [|isis]
+ 3 18:10:20.346738 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto GRE (47), length 54)
+ 225.91.211.91 > 192.168.1.1: GREv0, Flags [none], length 34
+ IS-IS, length 30
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (6), max-area: 7 (7)
+ lsp-id: ffff.ffff.ffff.ff-ff, seq: 0xffffffff, lifetime: 65535s
+ chksum: 0xffff (incorrect should be 0x0fe8), PDU length: 65535, Flags: [ L1 IS ]
+ Instance Identifier TLV #7, length: 0 [|isis]
+ 4 18:10:20.406704 IP (tos 0x0, ttl 128, id 0, offset 0, flags [DF], proto GRE (47), length 54)
+ 160.196.17.46 > 192.168.1.1: GREv0, Flags [none], length 34
+ IS-IS, length 30
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (6), max-area: 7 (7)
+ lsp-id: ffff.ffff.ffff.ff-ff, seq: 0xffffffff, lifetime: 65535s
+ chksum: 0xffff (incorrect should be 0x0fe8), PDU length: 65535, Flags: [ L1 IS ]
+ Instance Identifier TLV #7, length: 0 [|isis]
+ 5 18:10:20.466677 IP (tos 0x0, ttl 128, id 0, offset 0, flags [DF], proto GRE (47), length 54)
+ 246.181.173.63 > 192.168.1.1: GREv0, Flags [none], length 34
+ IS-IS, length 30
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (6), max-area: 7 (7)
+ lsp-id: ffff.ffff.ffff.ff-ff, seq: 0xffffffff, lifetime: 65535s
+ chksum: 0xffff (incorrect should be 0x0fe8), PDU length: 65535, Flags: [ L1 IS ]
+ Instance Identifier TLV #7, length: 0 [|isis]
diff --git a/tests/isis_poi.out b/tests/isis_poi.out
new file mode 100644
index 0000000..4592b2c
--- /dev/null
+++ b/tests/isis_poi.out
@@ -0,0 +1,8 @@
+ 1 13:34:16.716938 IS-IS, length 43
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 1280.9201.9098.00-00, seq: 0x000001e2, lifetime: 0s
+ chksum: 0x0000 (unverified), PDU length: 43, Flags: [ L2 IS ]
+ Purge Originator Identifier TLV #13, length: 7
+ Purge Originator System-ID: 1280.9202.0074
+ Hostname TLV #137, length: 5
+ Hostname: P2_re
diff --git a/tests/isis_poi.pcap b/tests/isis_poi.pcap
new file mode 100644
index 0000000..fdd433c
--- /dev/null
+++ b/tests/isis_poi.pcap
Binary files differ
diff --git a/tests/isis_poi2.out b/tests/isis_poi2.out
new file mode 100644
index 0000000..485d3e4
--- /dev/null
+++ b/tests/isis_poi2.out
@@ -0,0 +1,9 @@
+ 1 06:44:23.446332 IS-IS, length 49
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 1280.9201.7082.00-00, seq: 0x0000023f, lifetime: 0s
+ chksum: 0x0000 (unverified), PDU length: 49, Flags: [ L2 IS ]
+ Purge Originator Identifier TLV #13, length: 13
+ Purge Originator System-ID: 1280.9202.7092
+ Received from System-ID: 1280.9202.0074
+ Hostname TLV #137, length: 5
+ Hostname: P1_re
diff --git a/tests/isis_poi2.pcap b/tests/isis_poi2.pcap
new file mode 100644
index 0000000..8174524
--- /dev/null
+++ b/tests/isis_poi2.pcap
Binary files differ
diff --git a/tests/isis_sid.out b/tests/isis_sid.out
new file mode 100644
index 0000000..e5799d0
--- /dev/null
+++ b/tests/isis_sid.out
@@ -0,0 +1,99 @@
+ 1 12:36:55.841195 IS-IS, length 495
+ L2 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 0192.0168.0001.00-00, seq: 0x0000000b, lifetime: 1196s
+ chksum: 0xc074 (incorrect should be 0x3cf5), PDU length: 495, Flags: [ L2 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0002
+ LSP Buffersize TLV #14, length: 2
+ LSP Buffersize: 1492
+ Protocols supported TLV #129, length: 2
+ NLPID(s): IPv4 (0xcc), IPv6 (0x8e)
+ Traffic Engineering Router ID TLV #134, length: 4
+ Traffic Engineering Router ID: 192.168.0.1
+ IPv4 Interface address(es) TLV #132, length: 4
+ IPv4 interface address: 192.168.0.1
+ Hostname TLV #137, length: 9
+ Hostname: vmx-18-r1
+ IS Reachability TLV #2, length: 34
+ IsNotVirtual
+ IS Neighbor: 0192.0168.0002.02, Default Metric: 10, Internal
+ IS Neighbor: 0192.0168.0003.02, Default Metric: 63, Internal
+ IS Neighbor: 0192.0168.0004.02, Default Metric: 63, Internal
+ Extended IS Reachability TLV #22, length: 184
+ IS Neighbor: 0192.0168.0002.02, Metric: 10, sub-TLVs present (81)
+ IPv4 interface address subTLV #6, length: 4, 10.0.12.1
+ Link Local/Remote Identifier subTLV #4, length: 8, 0x00000180, 0x00000000
+ Unreserved bandwidth subTLV #11, length: 32
+ TE-Class 0: 1000.000 Mbps
+ TE-Class 1: 1000.000 Mbps
+ TE-Class 2: 1000.000 Mbps
+ TE-Class 3: 1000.000 Mbps
+ TE-Class 4: 1000.000 Mbps
+ TE-Class 5: 1000.000 Mbps
+ TE-Class 6: 1000.000 Mbps
+ TE-Class 7: 1000.000 Mbps
+ Reservable link bandwidth subTLV #10, length: 4, 1000.000 Mbps
+ Maximum link bandwidth subTLV #9, length: 4, 1000.000 Mbps
+ Administrative groups subTLV #3, length: 4, 0x00000000
+ LAN Adjacency Segment Identifier subTLV #32, length: 11
+ Flags: [Value, Local significance]
+ Weight: 0
+ Neighbor System-ID: 0192.0168.0002
+ Label: 18
+ IS Neighbor: 0192.0168.0003.02, Metric: 63, sub-TLVs present (81)
+ IPv4 interface address subTLV #6, length: 4, 10.0.13.1
+ Link Local/Remote Identifier subTLV #4, length: 8, 0x00000182, 0x00000000
+ Unreserved bandwidth subTLV #11, length: 32
+ TE-Class 0: 1000.000 Mbps
+ TE-Class 1: 1000.000 Mbps
+ TE-Class 2: 1000.000 Mbps
+ TE-Class 3: 1000.000 Mbps
+ TE-Class 4: 1000.000 Mbps
+ TE-Class 5: 1000.000 Mbps
+ TE-Class 6: 1000.000 Mbps
+ TE-Class 7: 1000.000 Mbps
+ Reservable link bandwidth subTLV #10, length: 4, 1000.000 Mbps
+ Maximum link bandwidth subTLV #9, length: 4, 1000.000 Mbps
+ Administrative groups subTLV #3, length: 4, 0x00000000
+ LAN Adjacency Segment Identifier subTLV #32, length: 11
+ Flags: [Value, Local significance]
+ Weight: 0
+ Neighbor System-ID: 0192.0168.0003
+ Label: 16
+ Extended IS Reachability TLV #22, length: 92
+ IS Neighbor: 0192.0168.0004.02, Metric: 63, sub-TLVs present (81)
+ IPv4 interface address subTLV #6, length: 4, 10.0.14.1
+ Link Local/Remote Identifier subTLV #4, length: 8, 0x00000183, 0x00000000
+ Unreserved bandwidth subTLV #11, length: 32
+ TE-Class 0: 1000.000 Mbps
+ TE-Class 1: 1000.000 Mbps
+ TE-Class 2: 1000.000 Mbps
+ TE-Class 3: 1000.000 Mbps
+ TE-Class 4: 1000.000 Mbps
+ TE-Class 5: 1000.000 Mbps
+ TE-Class 6: 1000.000 Mbps
+ TE-Class 7: 1000.000 Mbps
+ Reservable link bandwidth subTLV #10, length: 4, 1000.000 Mbps
+ Maximum link bandwidth subTLV #9, length: 4, 1000.000 Mbps
+ Administrative groups subTLV #3, length: 4, 0x00000000
+ LAN Adjacency Segment Identifier subTLV #32, length: 11
+ Flags: [Value, Local significance]
+ Weight: 0
+ Neighbor System-ID: 0192.0168.0004
+ Label: 17
+ IPv4 Internal Reachability TLV #128, length: 60
+ IPv4 prefix: 10.0.12.0/24, Distribution: up, Metric: 10, Internal
+ IPv4 prefix: 10.0.13.0/24, Distribution: up, Metric: 63, Internal
+ IPv4 prefix: 10.0.14.0/24, Distribution: up, Metric: 63, Internal
+ IPv4 prefix: 172.16.11.0/24, Distribution: up, Metric: 63, Internal
+ IPv4 prefix: 192.168.0.1/32, Distribution: up, Metric: 63, Internal
+ Extended IPv4 Reachability TLV #135, length: 41
+ IPv4 prefix: 10.0.12.0/24, Distribution: up, Metric: 10
+ IPv4 prefix: 10.0.13.0/24, Distribution: up, Metric: 63
+ IPv4 prefix: 10.0.14.0/24, Distribution: up, Metric: 63
+ IPv4 prefix: 172.16.11.0/24, Distribution: up, Metric: 63
+ IPv4 prefix: 192.168.0.1/32, Distribution: up, Metric: 63
+ IS-IS Router Capability TLV #242, length: 8
+ Router-ID 192.168.0.1, Flags [S bit, D bit]
+ unknown subTLV #19, length: 1
+ 0x0000: 00
diff --git a/tests/isis_sid.pcap b/tests/isis_sid.pcap
new file mode 100644
index 0000000..f2c8756
--- /dev/null
+++ b/tests/isis_sid.pcap
Binary files differ
diff --git a/tests/isis_sr.out b/tests/isis_sr.out
new file mode 100644
index 0000000..9515114
--- /dev/null
+++ b/tests/isis_sr.out
@@ -0,0 +1,17 @@
+ 1 18:42:19.016934 IS-IS, length 97
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 3 (0)
+ lsp-id: 1920.0000.0008.00-00, seq: 0x00000031, lifetime: 65534s
+ chksum: 0xc3ad (correct), PDU length: 97, Flags: [ L2 IS ]
+ Area address(es) TLV #1, length: 4
+ Area address (length: 3): 49.0002
+ Protocols supported TLV #129, length: 2
+ NLPID(s): IPv6 (0x8e), IPv4 (0xcc)
+ Extended IPv4 Reachability TLV #135, length: 27
+ IPv4 prefix: 10.0.27.0/31, Distribution: up, Metric: 1000000
+ IPv4 prefix: 7.7.7.1/32, Distribution: up, Metric: 1000000, sub-TLVs present (8)
+ Prefix SID subTLV #3, length: 6, Flags [Node], Algo SPF (0), index 40
+ Extended IS Reachability TLV #22, length: 11
+ IS Neighbor: 1921.6800.1003.00, Metric: 1000000, no sub-TLVs present
+ IS-IS Router Capability TLV #242, length: 16
+ Router-ID 7.7.7.1, Flags [none]
+ SR-Capabilities subTLV #2, length: 9, Flags [ipv4, ipv6], Range 1000, SID value 4000
diff --git a/tests/isis_sr.pcapng b/tests/isis_sr.pcapng
new file mode 100644
index 0000000..c9a069e
--- /dev/null
+++ b/tests/isis_sr.pcapng
Binary files differ
diff --git a/tests/isis_stlv_asan-2.out b/tests/isis_stlv_asan-2.out
new file mode 100644
index 0000000..fca3f37
--- /dev/null
+++ b/tests/isis_stlv_asan-2.out
@@ -0,0 +1,21 @@
+ 1 [Error converting time] UI 22! IS-IS, length 262139
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 224 (224)
+ source-id: fed0.f90f.58af, holding time: 34047s, Flags: [unknown circuit type 0x00]
+ lan-id: 0100.0088.a201.1c, Priority: 65, PDU length: 4096
+ unknown TLV #0, length: 12
+ 0x0000: 0722 0583 1b01 0010 0505 0505
+ Area address(es) TLV #1, length: 157
+ IS Reachability TLV #2, length: 2
+ bogus virtual flag 0x02
+ IS Reachability TLV #2, length: 2
+ bogus virtual flag 0x02
+ IS Reachability TLV #2, length: 2
+ bogus virtual flag 0x90
+ Multi-Topology Capability TLV #144, length: 144
+ O: 1, RES: 1, MTID(s): 144
+ unknown subTLV #144, length: 2
+ unknown subTLV #2, length: 0
+ unknown subTLV #16, length: 1
+ unknown subTLV #224, length: 0
+ unknown subTLV #59, length: 0
+ unknown subTLV #5, length: 166 (> containing TLV length) [|isis]
diff --git a/tests/isis_stlv_asan-2.pcap b/tests/isis_stlv_asan-2.pcap
new file mode 100644
index 0000000..f1f84c1
--- /dev/null
+++ b/tests/isis_stlv_asan-2.pcap
Binary files differ
diff --git a/tests/isis_stlv_asan-3.out b/tests/isis_stlv_asan-3.out
new file mode 100644
index 0000000..7d77ff4
--- /dev/null
+++ b/tests/isis_stlv_asan-3.out
@@ -0,0 +1,22 @@
+ 1 [Error converting time] UI 22! IS-IS, length 262139
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 224 (224)
+ source-id: fed0.f90f.58af, holding time: 34047s, Flags: [unknown circuit type 0x00]
+ lan-id: 0100.0088.a201.1c, Priority: 65, PDU length: 4096
+ unknown TLV #0, length: 12
+ 0x0000: 0722 0583 1b01 0010 019d e000
+ unknown TLV #254, length: 0
+ Prefix Neighbors TLV #5, length: 146
+ Metric Block, Default Metric: 32, Internal
+ Expense Metric: 0, Internal
+ Error Metric: 0, Internal
+ Address: 88.99ff.ffff.7fb5.0000/76
+ Address: isonsap_string: illegal length/948
+ Address: 95/8
+ Address: 02/8
+ Address: 02/8
+ Address: 02/8
+ Address: 90/8
+ Multi-Topology Capability TLV #144, length: 144
+ O: 1, RES: 1, MTID(s): 0
+ unknown subTLV #107, length: 0
+ unknown subTLV #0, length: 208 (> containing TLV length) [|isis]
diff --git a/tests/isis_stlv_asan-3.pcap b/tests/isis_stlv_asan-3.pcap
new file mode 100644
index 0000000..8d636c8
--- /dev/null
+++ b/tests/isis_stlv_asan-3.pcap
Binary files differ
diff --git a/tests/isis_stlv_asan-4.out b/tests/isis_stlv_asan-4.out
new file mode 100644
index 0000000..853e23f
--- /dev/null
+++ b/tests/isis_stlv_asan-4.out
@@ -0,0 +1,27 @@
+ 1 [Error converting time] UI 22! Pad! IS-IS, length 262138
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 224 (224)
+ source-id: fe02.0000.d0f9, holding time: 3928s, Flags: [unknown circuit type 0x00]
+ lan-id: 1000.4101.0000.88, Priority: 127, PDU length: 44959
+ unknown TLV #162, length: 1
+ 0x0000: e2
+ IS Reachability TLV #2, length: 12
+ bogus virtual flag 0x07
+ IS Neighbor: 0100.1001.9de0.00, Default Metric: 34, Internal
+ Delay Metric: 5, Internal
+ Error Metric: 27, Internal
+ Authentication TLV #10, length: 1
+ unknown Authentication type 0x05:
+ unknown TLV #146, length: 32
+ 0x0000: 2020 2020 2020 2020 2020 2020 2020 2020
+ 0x0010: 2020 2020 2020 2020 2020 2220 2020 2020
+ unknown TLV #32, length: 32
+ 0x0000: 2000 0001 0020 2020 2020 2020 207f 0020
+ 0x0010: 2020 2020 2020 2020 2020 2e20 2020 20c9
+ unknown TLV #32, length: 32
+ 0x0000: 2020 2010 0020 2020 2020 0b20 2020 2020
+ 0x0010: 2020 2020 2020 8181 7281 8181 8181 8181
+ Multi-Topology-Aware Port Capability TLV #143, length: 129
+ RES: 8, MTID(s): 385
+ unknown subTLV #129, length: 68
+ unknown subTLV #32, length: 32
+ unknown subTLV #129, length: 129 (> containing TLV length) [|isis]
diff --git a/tests/isis_stlv_asan-4.pcap b/tests/isis_stlv_asan-4.pcap
new file mode 100644
index 0000000..84a507f
--- /dev/null
+++ b/tests/isis_stlv_asan-4.pcap
Binary files differ
diff --git a/tests/isis_stlv_asan.out b/tests/isis_stlv_asan.out
new file mode 100644
index 0000000..a7f65d7
--- /dev/null
+++ b/tests/isis_stlv_asan.out
@@ -0,0 +1,23 @@
+ 1 [Error converting time] UI 22! IS-IS, length 262139
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 224 (224)
+ source-id: fed0.f90f.58af, holding time: 34047s, Flags: [unknown circuit type 0x00]
+ lan-id: 0105.0088.a201.00, Priority: 65, PDU length: 4096
+ IS Reachability TLV #2, length: 12
+ bogus virtual flag 0x07
+ IS Neighbor: 0100.1001.9de0.00, Default Metric: 34, Internal
+ Delay Metric: 5, Internal
+ Error Metric: 27, Internal
+ unknown TLV #254, length: 3
+ 0x0000: 05f5 20
+ unknown TLV #32, length: 32
+ 0x0000: 2020 2020 2020 2020 2020 202d 2020 2020
+ 0x0010: 2020 2020 2020 2020 2020 03e8 2020 2020
+ unknown TLV #32, length: 32
+ 0x0000: 2020 2020 2020 2020 2020 207f 0020 2020
+ 0x0010: 2026 2020 2020 2020 2020 2020 2020 8f8f
+ Multi-Topology-Aware Port Capability TLV #143, length: 143
+ RES: 8, MTID(s): 3983
+ unknown subTLV #143, length: 143 (> containing TLV length)
+ Multi-Topology-Aware Port Capability TLV #143, length: 143
+ RES: 8, MTID(s): 3983
+ unknown subTLV #143, length: 143 (> containing TLV length) [|isis]
diff --git a/tests/isis_stlv_asan.pcap b/tests/isis_stlv_asan.pcap
new file mode 100644
index 0000000..acdd67b
--- /dev/null
+++ b/tests/isis_stlv_asan.pcap
Binary files differ
diff --git a/tests/isis_sysid_asan.out b/tests/isis_sysid_asan.out
new file mode 100644
index 0000000..6a9752d
--- /dev/null
+++ b/tests/isis_sysid_asan.out
@@ -0,0 +1,24 @@
+ 1 [Error converting time] UI 22! IS-IS, length 262139
+ L2 Lan IIH, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 224 (224)
+ source-id: fed0.f90f.58af, holding time: 34047s, Flags: [unknown circuit type 0x00]
+ lan-id: 0105.0088.a204.00, Priority: 65, PDU length: 4096
+ unknown TLV #64, length: 128
+ 0x0000: ff10 8e12 0001 1b01 0000 6b00 fbcf f90f
+ 0x0010: 58af 84ff 1000 4901 0000 88a2 011c 000c
+ 0x0020: 0281 0083 1b01 0010 019d e000 fed0 f90f
+ 0x0030: 58af 84ff 1000 4101 0500 88a2 011c 0272
+ 0x0040: 0c2a 2205 831b 011c 0010 0000 0583 1b01
+ 0x0050: 0010 01ab e000 fe08 0808 0808 08cb 0808
+ 0x0060: 0808 0808 0808 0880 0008 7f08 0808 0808
+ 0x0070: 08fd 0808 080c 0608 0807 0808 0808 0408
+ Padding TLV #8, length: 8
+ Padding TLV #8, length: 8
+ Padding TLV #8, length: 7
+ Padding TLV #8, length: 8
+ Padding TLV #8, length: 0
+ Padding TLV #8, length: 8
+ unknown TLV #100, length: 0
+ unknown TLV #32, length: 16
+ 0x0000: 2020 2020 3c20 2020 2020 2020 205a 1a31
+ Instance Identifier TLV #7, length: 238
+ Instance ID: 346, ITIDs(118): 17744, 18521, 21087, 17236, 19464, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2048, 8, 32, 25600, 8208, 8224, 8224, 8224, 8224, [|isis]
diff --git a/tests/isis_sysid_asan.pcap b/tests/isis_sysid_asan.pcap
new file mode 100644
index 0000000..da198da
--- /dev/null
+++ b/tests/isis_sysid_asan.pcap
Binary files differ
diff --git a/tests/isoclns-heapoverflow-2.out b/tests/isoclns-heapoverflow-2.out
new file mode 100644
index 0000000..f04e4a1
--- /dev/null
+++ b/tests/isoclns-heapoverflow-2.out
@@ -0,0 +1 @@
+ 1 16:13:04.809316400 fe:fe:fe:fe:fe:fe > 30:30:da:fe:fe:fe, ethertype OSI (0xfefe), length 262144: OSI NLPID CLNP (0x81): [|clnp]
diff --git a/tests/isoclns-heapoverflow-2.pcap b/tests/isoclns-heapoverflow-2.pcap
new file mode 100644
index 0000000..703ef03
--- /dev/null
+++ b/tests/isoclns-heapoverflow-2.pcap
Binary files differ
diff --git a/tests/isoclns-heapoverflow-3.out b/tests/isoclns-heapoverflow-3.out
new file mode 100644
index 0000000..5c24ea5
--- /dev/null
+++ b/tests/isoclns-heapoverflow-3.out
@@ -0,0 +1 @@
+ 1 16:13:04.809316400 fe:fe:fe:fe:fe:fe > 30:30:da:fe:fe:fe, ethertype OSI (0xfefe), length 262144: OSI NLPID CLNP (0x81): 00 > e8.3030, Echo Request, length 262129
diff --git a/tests/isoclns-heapoverflow-3.pcap b/tests/isoclns-heapoverflow-3.pcap
new file mode 100644
index 0000000..a49b7bb
--- /dev/null
+++ b/tests/isoclns-heapoverflow-3.pcap
Binary files differ
diff --git a/tests/isoclns-heapoverflow.out b/tests/isoclns-heapoverflow.out
new file mode 100644
index 0000000..0e2b0b2
--- /dev/null
+++ b/tests/isoclns-heapoverflow.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 [|isoclns]
diff --git a/tests/isoclns-heapoverflow.pcap b/tests/isoclns-heapoverflow.pcap
new file mode 100644
index 0000000..bf90da6
--- /dev/null
+++ b/tests/isoclns-heapoverflow.pcap
Binary files differ
diff --git a/tests/isoclns-oobr.out b/tests/isoclns-oobr.out
new file mode 100644
index 0000000..0e2b0b2
--- /dev/null
+++ b/tests/isoclns-oobr.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 [|isoclns]
diff --git a/tests/isoclns-oobr.pcap b/tests/isoclns-oobr.pcap
new file mode 100644
index 0000000..0a28b5f
--- /dev/null
+++ b/tests/isoclns-oobr.pcap
Binary files differ
diff --git a/tests/isup.out b/tests/isup.out
new file mode 100644
index 0000000..d89d376
--- /dev/null
+++ b/tests/isup.out
@@ -0,0 +1,6 @@
+ 1 13:09:59.862196 IP 10.28.6.42.2905 > 10.28.6.44.2905: sctp (1) [DATA] (B)(E) [TSN: 1822994892] [SID: 6] [SSEQ 42] [PPID M3UA]
+ 2 13:09:59.868817 IP 10.28.6.44.2905 > 10.28.6.42.2905: sctp (1) [DATA] (B)(E) [TSN: 4307] [SID: 0] [SSEQ 643] [PPID M3UA]
+ 3 13:09:59.986040 IP 10.28.6.44.2905 > 10.28.6.42.2905: sctp (1) [DATA] (B)(E) [TSN: 4308] [SID: 0] [SSEQ 644] [PPID M3UA]
+ 4 13:09:59.986353 IP 10.28.6.44.2905 > 10.28.6.42.2905: sctp (1) [DATA] (B)(E) [TSN: 4309] [SID: 0] [SSEQ 645] [PPID M3UA]
+ 5 13:10:16.931117 IP 10.28.6.42.2905 > 10.28.6.44.2905: sctp (1) [DATA] (B)(E) [TSN: 1822994893] [SID: 6] [SSEQ 43] [PPID M3UA]
+ 6 13:10:16.952114 IP 10.28.6.44.2905 > 10.28.6.42.2905: sctp (1) [DATA] (B)(E) [TSN: 4310] [SID: 0] [SSEQ 646] [PPID M3UA]
diff --git a/tests/isup.pcap b/tests/isup.pcap
new file mode 100644
index 0000000..39f16b9
--- /dev/null
+++ b/tests/isup.pcap
Binary files differ
diff --git a/tests/isupvv.out b/tests/isupvv.out
new file mode 100644
index 0000000..9ea330f
--- /dev/null
+++ b/tests/isupvv.out
@@ -0,0 +1,30 @@
+ 1 13:09:59.862196 IP (tos 0x0, ttl 64, id 38618, offset 0, flags [none], proto SCTP (132), length 132)
+ 10.28.6.42.2905 > 10.28.6.44.2905: sctp
+ 1) [DATA] (B)(E) [TSN: 1822994892] [SID: 6] [SSEQ 42] [PPID M3UA]
+ Transfer Data Message
+ Unknown Parameter (0x0002): (length 73)
+ 2 13:09:59.868817 IP (tos 0x0, ttl 255, id 50089, offset 0, flags [DF], proto SCTP (132), length 76)
+ 10.28.6.44.2905 > 10.28.6.42.2905: sctp
+ 1) [DATA] (B)(E) [TSN: 4307] [SID: 0] [SSEQ 643] [PPID M3UA]
+ Transfer Data Message
+ Unknown Parameter (0x0002): (length 18)
+ 3 13:09:59.986040 IP (tos 0x0, ttl 255, id 50090, offset 0, flags [DF], proto SCTP (132), length 72)
+ 10.28.6.44.2905 > 10.28.6.42.2905: sctp
+ 1) [DATA] (B)(E) [TSN: 4308] [SID: 0] [SSEQ 644] [PPID M3UA]
+ Transfer Data Message
+ Unknown Parameter (0x0002): (length 15)
+ 4 13:09:59.986353 IP (tos 0x0, ttl 255, id 50091, offset 0, flags [DF], proto SCTP (132), length 72)
+ 10.28.6.44.2905 > 10.28.6.42.2905: sctp
+ 1) [DATA] (B)(E) [TSN: 4309] [SID: 0] [SSEQ 645] [PPID M3UA]
+ Transfer Data Message
+ Unknown Parameter (0x0002): (length 13)
+ 5 13:10:16.931117 IP (tos 0x0, ttl 64, id 38651, offset 0, flags [none], proto SCTP (132), length 76)
+ 10.28.6.42.2905 > 10.28.6.44.2905: sctp
+ 1) [DATA] (B)(E) [TSN: 1822994893] [SID: 6] [SSEQ 43] [PPID M3UA]
+ Transfer Data Message
+ Unknown Parameter (0x0002): (length 17)
+ 6 13:10:16.952114 IP (tos 0x0, ttl 255, id 50109, offset 0, flags [DF], proto SCTP (132), length 72)
+ 10.28.6.44.2905 > 10.28.6.42.2905: sctp
+ 1) [DATA] (B)(E) [TSN: 4310] [SID: 0] [SSEQ 646] [PPID M3UA]
+ Transfer Data Message
+ Unknown Parameter (0x0002): (length 13)
diff --git a/tests/juniper_atm1_oobr.out b/tests/juniper_atm1_oobr.out
new file mode 100644
index 0000000..61f6fde
--- /dev/null
+++ b/tests/juniper_atm1_oobr.out
@@ -0,0 +1,2 @@
+ 1 05:27:12.808464432 Out
+ Juniper PCAP Flags [none]ATM1-PIC, cookie-len 4, cookie 0x30303030: [|juniper_atm1]
diff --git a/tests/juniper_atm1_oobr.pcap b/tests/juniper_atm1_oobr.pcap
new file mode 100644
index 0000000..bb4f6e0
--- /dev/null
+++ b/tests/juniper_atm1_oobr.pcap
Binary files differ
diff --git a/tests/juniper_es_oobr.out b/tests/juniper_es_oobr.out
new file mode 100644
index 0000000..438f8e5
--- /dev/null
+++ b/tests/juniper_es_oobr.out
@@ -0,0 +1,2 @@
+ 1 06:01:20.808464432 Out
+ Juniper PCAP Flags [none]ES-PIC, cookie-len 0: [|juniper_es]
diff --git a/tests/juniper_es_oobr.pcap b/tests/juniper_es_oobr.pcap
new file mode 100644
index 0000000..8537f08
--- /dev/null
+++ b/tests/juniper_es_oobr.pcap
Binary files differ
diff --git a/tests/juniper_header-heapoverflow.out b/tests/juniper_header-heapoverflow.out
new file mode 100644
index 0000000..f3e4641
--- /dev/null
+++ b/tests/juniper_header-heapoverflow.out
@@ -0,0 +1 @@
+ 1 01:10:59.680304 [extension_length 48 < 50] (invalid)
diff --git a/tests/juniper_header-heapoverflow.pcap b/tests/juniper_header-heapoverflow.pcap
new file mode 100644
index 0000000..260e303
--- /dev/null
+++ b/tests/juniper_header-heapoverflow.pcap
Binary files differ
diff --git a/tests/kday1.out b/tests/kday1.out
new file mode 100644
index 0000000..bb72c69
--- /dev/null
+++ b/tests/kday1.out
@@ -0,0 +1 @@
+ 1 10:23:33.663606 IP6, wrong link-layer encapsulation (invalid)
diff --git a/tests/kday1.pcap b/tests/kday1.pcap
new file mode 100644
index 0000000..fc8d500
--- /dev/null
+++ b/tests/kday1.pcap
Binary files differ
diff --git a/tests/kday2.out b/tests/kday2.out
new file mode 100644
index 0000000..e589cea
--- /dev/null
+++ b/tests/kday2.out
@@ -0,0 +1,21 @@
+ 1 17:19:33.663606 CFMv0 unknown (204), MD Level 0, length 168
+ First TLV offset 52
+ 0x0000: a300 0000 0080 0000 0000 0000 0000 0000
+ 0x0010: 0000 00aa 6873 54d7 060b 003c 0000 003c
+ 0x0020: d4c3 b2a1 0200 1a00 000b 003c 0000 003c
+ 0x0030: d4c3 b2a1 0200 1a00 0000 0000 3620 0a00
+ 0x0040: b600 0000 b600 0000 40b5 9cbe 3048 0cc4
+ 0x0050: ad37 1005 ffff 05cc 0934 9300 0000 0080
+ 0x0060: 0000 0000 0000 3200 0000 0000 00aa 6873
+ Port status TLV (0x02), length 26, Status: Unknown (0)
+ Unknown TLV (0x37), length 4101
+ packet is too short
+ 2 23:52:05.672232 IP (tos 0x10, ttl 62, id 64806, offset 0, flags [DF], proto TCP (6), length 52)
+ 204.9.51.132.50079 > 204.9.54.80.22: Flags [.], cksum 0x8611 (incorrect -> 0xa678), ack 1819218606, win 4094, options [nop,nop,TS val 941371775 ecr 4294967242], length 0
+ 3 17:19:33.684826 IP (tos 0x10, ttl 62, id 62920, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 4504 (->451a)!)
+ 204.9.51.132.50079 > 204.243.53.80.22: Flags [.], cksum 0x858b (incorrect -> 0x66a1), ack 2339312418, win 4092, options [nop,nop,TS val 941371913 ecr 1340592084], length 0
+ 4 17:19:33.703499 IP (tos 0x0, ttl 64, id 63178, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 3e8c (->438c)!)
+ 204.9.64.80.55936 > 204.9.40.10.443: Flags [.], cksum 0x0594 (incorrect -> 0x7767), ack 3587398274, win 1040, options [nop,nop,TS val 647770294 ecr 2364779354], length 0
+ 5 17:19:33.703625 IP (tos 0x0, ttl 64, id 36752, offset 0, flags [DF], proto TCP (6), length 399, bad cksum a46b (->a474)!)
+ 204.0.55.10.323 > 204.9.54.80.55936: Flags [P.], cksum 0xc9b6 (incorrect -> 0x8900), seq 3589495407:3589495754, ack 370428050, win 1040, options [nop,nop,TS val 2364757411 ecr 3084508609], length 347
+ RPKI-RTRv177 (unknown)
diff --git a/tests/kday2.pcap b/tests/kday2.pcap
new file mode 100644
index 0000000..81c73ae
--- /dev/null
+++ b/tests/kday2.pcap
Binary files differ
diff --git a/tests/kday3.out b/tests/kday3.out
new file mode 100644
index 0000000..560847f
--- /dev/null
+++ b/tests/kday3.out
@@ -0,0 +1,19 @@
+ 1 02:25:41.663606 IP (tos 0x10, ttl 64, id 63177, offset 0, flags [DF], proto TCP (6), length 168)
+ 204.9.54.80.22 > 204.9.51.132.50079: Flags [P.], cksum 0x0282 (incorrect -> 0x3217), seq 1819218606:1819218722, ack 1238485076, win 1039, options [nop,nop,TS val 1340592078 ecr 941371882], length 116
+ 2 17:19:33.672232 IP6, wrong link-layer encapsulation (invalid)
+ 3 17:19:33.684826 IP (tos 0x10, ttl 62, id 62920, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 4504 (->451a)!)
+ 204.9.51.132.50079 > 204.243.53.80.22: Flags [.], cksum 0x858b (incorrect -> 0x85a1), ack 1819218722, win 4092, options [nop,nop,TS val 941371913 ecr 1340592084], length 0
+ 4 17:19:33.703499 IP (tos 0x0, ttl 64, id 63178, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 3e8c (->438c)!)
+ 204.9.64.80.55936 > 204.9.40.10.443: Flags [.], cksum 0x0594 (incorrect -> 0x7767), ack 3587398274, win 1040, options [nop,nop,TS val 647770294 ecr 2364779354], length 0
+ 5 17:19:33.703625 IP (tos 0x0, ttl 64, id 36752, offset 0, flags [DF], proto TCP (6), length 399, bad cksum a46b (->a474)!)
+ 204.0.55.10.323 > 204.9.54.80.55936: Flags [P.], cksum 0xc9b6 (incorrect -> 0x0cf1), seq 3589495407:3589495754, ack 370428050, win 1040, options [nop,nop,TS val 2381534627 ecr 3084508609], length 347
+ RPKI-RTRv177 (unknown)
+ 6 23:52:05.672232 IP (tos 0x10, ttl 62, id 64806, offset 0, flags [DF], proto TCP (6), length 52)
+ 204.9.51.132.50079 > 204.9.54.80.22: Flags [.], cksum 0x8611 (incorrect -> 0xa678), ack 0, win 4094, options [nop,nop,TS val 941371775 ecr 4294967242], length 0
+ 7 17:19:33.684826 IP (tos 0x10, ttl 62, id 62920, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 4504 (->451a)!)
+ 204.9.51.132.50079 > 204.243.53.80.22: Flags [.], cksum 0x858b (incorrect -> 0x85a1), ack 1, win 4092, options [nop,nop,TS val 941371913 ecr 1340592084], length 0
+ 8 17:19:33.703499 IP (tos 0x0, ttl 64, id 63178, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 3e8c (->438c)!)
+ 204.9.64.80.55936 > 204.9.40.10.443: Flags [.], cksum 0x0594 (incorrect -> 0x8d67), ack 1, win 1040, options [nop,nop,TS val 647770294 ecr 2364773722], length 0
+ 9 17:19:33.703625 IP (tos 0x0, ttl 64, id 36752, offset 0, flags [DF], proto TCP (6), length 399, bad cksum a46b (->a474)!)
+ 204.0.55.10.323 > 204.9.54.80.55936: Flags [P.], cksum 0xc9b6 (incorrect -> 0xa6b3), seq 0:347, ack 1, win 1040, options [nop,nop,TS val 2364757411 ecr 3084508609], length 347
+ RPKI-RTRv177 (unknown)
diff --git a/tests/kday3.pcap b/tests/kday3.pcap
new file mode 100644
index 0000000..6e11de3
--- /dev/null
+++ b/tests/kday3.pcap
Binary files differ
diff --git a/tests/kday4.out b/tests/kday4.out
new file mode 100644
index 0000000..5ad5b9b
--- /dev/null
+++ b/tests/kday4.out
@@ -0,0 +1,32 @@
+ 1 17:19:33.663606 IP (tos 0x10, ttl 64, id 63177, offset 0, flags [none], proto unknown (240), length 168, bad cksum 418f (->80a5)!)
+ 204.9.54.80 > 204.9.51.132: ip-proto-240 148
+ 2 17:19:33.520765928 IP (tos 0x10, ttl 62, id 64806, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 3da6 (->35a6)!)
+ 212.9.51.132.50079 > 204.9.54.80.22: Flags [.], cksum 0x8611 (incorrect -> 0x4811), ack 1819218606, win 17918, options [nop,nop,TS val 941371903 ecr 1340592074], length 0
+ 3 17:19:33.684826 84:b5:9c:be:30:48 Unknown SSAP 0x10 > 0c:c4:7a:08:e9:12 Unknown DSAP 0x44 Information, send seq 0, rcv seq 26, Flags [Command], length 52
+ 0x0000: 4510 0034 f5c8 4000 3e06 4504 cc09 3384 E..4..@.>.E...3.
+ 0x0010: cc09 3650 c39f 0016 49d1 c854 6c6f 1322 ..6P....I..Tlo."
+ 0x0020: 8010 0ffc 858b 0000 0101 080a 381c 3209 ............8.2.
+ 0x0030: 4fe7 cfd4 O...
+ 4 17:19:33.655361 IP (tos 0x0, ttl 64, id 63178, offset 0, flags [DF], proto TCP (6), length 52)
+ 204.9.54.80.55936 > 204.9.55.10.443: Flags [.], cksum 0x0594 (incorrect -> 0x725a), ack 3589495407, win 1040, options [nop,nop,TS val 647770294 ecr 2364779354], length 0
+ 5 17:19:33.703625 IP (tos 0x0, ttl 64, id 36752, offset 0, flags [DF], proto TCP (6), length 399, bad cksum a46b (->a474)!)
+ 204.0.55.10.323 > 204.9.54.80.55936: Flags [P.], cksum 0xc9b6 (incorrect -> 0xcd5f), seq 3589495407:3589495754, ack 370436242, win 1040, options [nop,nop,TS val 2364757411 ecr 3084508609], length 347
+ RPKI-RTRv177 (unknown)
+ 6 23:52:05.672232 IP (tos 0x10, ttl 62, id 64806, offset 0, flags [DF], proto TCP (6), length 52)
+ 204.9.51.132.50079 > 204.9.54.80.22: Flags [.], cksum 0x8611 (incorrect -> 0xa678), ack 1819218606, win 4094, options [nop,nop,TS val 941371775 ecr 4294967242], length 0
+ 7 17:19:33.684826 IP (tos 0x10, ttl 62, id 62920, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 4504 (->451a)!)
+ 204.9.51.132.50079 > 204.243.53.80.22: Flags [.], cksum 0x858b (incorrect -> 0x85a1), ack 1819218722, win 4092, options [nop,nop,TS val 941371913 ecr 1340592084], length 0
+ 8 17:19:33.703499 IP (tos 0x0, ttl 64, id 63178, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 3e8c (->438c)!)
+ 204.9.64.80.55936 > 204.9.40.10.443: Flags [.], cksum 0x0594 (incorrect -> 0x8d67), ack 3587398274, win 1040, options [nop,nop,TS val 647770294 ecr 2364773722], length 0
+ 9 17:19:33.703625 IP (tos 0x0, ttl 64, id 36752, offset 0, flags [DF], proto TCP (6), length 399, bad cksum a46b (->a474)!)
+ 204.0.55.10.323 > 204.9.54.80.55936: Flags [P.], cksum 0xc9b6 (incorrect -> 0xfa70), seq 0:347, ack 4294959105, win 1040, options [nop,nop,TS val 2364757411 ecr 3084508609], length 347
+ RPKI-RTRv197 (unknown)
+ 10 23:52:05.672232 IP truncated-ip - 768 bytes missing! (tos 0x10, ttl 62, id 64806, offset 0, flags [DF], proto TCP (6), length 820, bad cksum 3da6 (->3aa6)!)
+ 204.9.51.132.50079 > 204.9.54.80.22: Flags [.], seq 0:768, ack 1, win 4094, options [nop,nop,TS val 941371775 ecr 4294967242], length 768 [|ssh]
+ 11 17:19:33.684826 IP (tos 0x6,ECT(0), ttl 62, id 62920, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 4504 (->4524)!)
+ 204.9.51.132.50079 > 204.243.53.80.22: Flags [.], cksum 0x858b (incorrect -> 0x85a1), ack 1, win 4092, options [nop,nop,TS val 941371913 ecr 1340592084], length 0
+ 12 17:19:33.703499 IP (tos 0x0, ttl 64, id 63178, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 3e8c (->438c)!)
+ 204.9.64.80.55936 > 204.9.40.10.443: Flags [.], cksum 0x0594 (incorrect -> 0x8d67), ack 1, win 1040, options [nop,nop,TS val 647770294 ecr 2364773722], length 0
+ 13 17:19:33.703113 IP (tos 0x0, ttl 64, id 36752, offset 0, flags [DF], proto TCP (6), length 399, bad cksum a46b (->a474)!)
+ 204.0.55.10.323 > 204.9.54.80.55936: Flags [P.], cksum 0xc9b6 (incorrect -> 0x3f28), seq 0:347, ack 4294959105, win 1040, options [nop,nop,TS val 2364757411 ecr 3084508609], length 347
+ RPKI-RTRv177 (unknown)
diff --git a/tests/kday4.pcap b/tests/kday4.pcap
new file mode 100644
index 0000000..6d52f9f
--- /dev/null
+++ b/tests/kday4.pcap
Binary files differ
diff --git a/tests/kday5.out b/tests/kday5.out
new file mode 100644
index 0000000..a535167
--- /dev/null
+++ b/tests/kday5.out
@@ -0,0 +1,21 @@
+ 1 17:19:33.663606 CFMv0 unknown (204), MD Level 0, length 168
+ First TLV offset 52
+ 0x0000: a300 0000 0080 0000 0000 0000 0000 0000
+ 0x0010: 0000 00aa 6873 54d7 060b 003c 0000 003c
+ 0x0020: d4c3 b2a1 0200 1a00 000b 003c 0000 003c
+ 0x0030: d4c3 b2a1 0200 1a00 0000 0000 3620 0a00
+ 0x0040: b600 0000 b600 0000 40b5 9cbe 3048 0cc4
+ 0x0050: ad37 1005 ffff 05cc 0934 9300 0000 0080
+ 0x0060: 0000 0000 0000 3200 0000 0000 00aa 6873
+ Port status TLV (0x02), length 26, Status: Unknown (0)
+ Unknown TLV (0x37), length 4101
+ packet is too short
+ 2 23:52:05.672127 IP (tos 0x10, ttl 62, id 64806, offset 0, flags [DF], proto TCP (6), length 52)
+ 204.9.51.132.50079 > 204.9.54.80.22: Flags [.], cksum 0x8611 (incorrect -> 0xa678), ack 1819218606, win 4094, options [nop,nop,TS val 941371775 ecr 4294967242], length 0
+ 3 17:19:33.684826 IP (tos 0x10, ttl 62, id 62920, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 4504 (->451a)!)
+ 204.9.51.132.50079 > 204.243.53.80.22: Flags [.], cksum 0x858b (incorrect -> 0x98c3), ack 1819279359, win 4092, options [nop,nop,TS val 941371913 ecr 1340592084], length 0
+ 4 17:19:33.703499 IP (tos 0x0, ttl 64, id 63178, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 3e8c (->438c)!)
+ 204.9.64.80.55936 > 204.9.40.10.443: Flags [.], cksum 0x0594 (incorrect -> 0x7767), ack 3587398274, win 1040, options [nop,nop,TS val 647770294 ecr 2364779354], length 0
+ 5 17:19:33.703625 IP (tos 0x0, ttl 64, id 36752, offset 0, flags [DF], proto TCP (6), length 399, bad cksum a46b (->a474)!)
+ 204.0.55.10.323 > 204.9.54.80.55936: Flags [P.], cksum 0xc9b6 (incorrect -> 0x183a), seq 3589495407:3589495754, ack 370428050, win 1040, options [nop,nop,TS val 2351322531 ecr 3084508609], length 347
+ RPKI-RTRv177 (unknown)
diff --git a/tests/kday5.pcap b/tests/kday5.pcap
new file mode 100644
index 0000000..c2a6e2b
--- /dev/null
+++ b/tests/kday5.pcap
Binary files differ
diff --git a/tests/kday6.out b/tests/kday6.out
new file mode 100644
index 0000000..f85798a
--- /dev/null
+++ b/tests/kday6.out
@@ -0,0 +1,349 @@
+ 1 07:25:56.663614 FRF.16 Frag, seq 693, Flags [Begin], UI e8! IS-IS, length 262137
+ L1 LSP, hlen: 27, v: 1, pdu-v: 1, sys-id-len: 6 (0), max-area: 131 (131)
+ lsp-id: 8383.8383.834f.00-60, seq: 0x06418fcc, lifetime: 33667s
+ chksum: 0x0900 (unverified), PDU length: 33667, Flags: [ Overload bit set, expense ATT bit set, L1 IS ]
+ Multi-Topology Capability TLV #144, length: 137
+ O: 0, RES: 4, MTID(s): 3945
+ unknown subTLV #8, length: 233 (> containing TLV length)
+ unknown TLV #213, length: 243
+ 0x0000: 5cca 8010 0410 0594 4510 0410 6e55 0000
+ 0x0010: 0101 080a 8cf3 ac2b 269c 0e2d 0e0e 0e0e
+ 0x0020: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0030: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0040: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0050: 0e0e 0e0e 0e0e 0e0e 0e1b 0100 1201 8383
+ 0x0060: 8383 8383 8383 8383 834f 0060 0641 8fcc
+ 0x0070: 0900 2590 894f 6908 e912 0025 e489 4f0e
+ 0x0080: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0090: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x00a0: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x00b0: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x00c0: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x00d0: 7f0e 0e0e 0e0e 0e0e 0e0e 0e0e 0c0e 0e0e
+ 0x00e0: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x00f0: 0e0e 0e
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ unknown TLV #100, length: 14
+ 0x0000: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ unknown TLV #96, length: 183
+ 0x0000: 0fbb 1627 4ce2 d5f3 5cca 8010 0410 0594
+ 0x0010: 4510 0410 6e55 0000 0101 080a 8cf3 ac2b
+ 0x0020: 269c 3ab9 a568 7354 404c 0c00 f702 0000
+ 0x0030: f702 0000 84b5 9cbe 8cff ffff 0040 ff3e
+ 0x0040: 88cc 0910 0410 0594 0000 0101 080a 269c
+ 0x0050: 318b 8cf3 ac0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0060: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0070: 0e0e 0e0e 0004 0e0e 0e0e 0e0e 8e0e 0e0e
+ 0x0080: 0e0e 0e0e 0e0b 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0090: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x00a0: 0e00 3e20 0a00 b60d 0000 2000 0000 84b5
+ 0x00b0: aee0 3083 8383 1b
+ Area address(es) TLV #1, length: 0
+ unknown TLV #18, length: 1
+ 0x0000: 83
+ Inter-Domain Information Type TLV #131, length: 131
+ Inter-Domain Information Type: Unknown (0x83)
+ 0x0000: 8383 8383 8383 834f 0060 0641 8fcc 0900
+ 0x0010: 2590 894f 6908 e912 0025 9089 4f69 0800
+ 0x0020: 4500 0034 9040 4001 4006 a516 cc09 370a
+ 0x0030: ccff ffff 7fbb da80 d5f3 5c05 1614 4a2d
+ 0x0040: 8010 0410 6e55 0000 0101 080a 8cf3 ac2b
+ 0x0050: 269c 30b9 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0060: 0e08 0e0e 0e0e 0e01 0e0e 0e0e 0e0e 110e
+ 0x0070: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0080: 0e0e
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ unknown TLV #172, length: 198
+ 0x0000: 2478 f620 70ac 2561 8ae3 3458 2d7a 4ea0
+ 0x0010: d056 a568 7354 180e 0e0e 0e0e 0e0e 0e0e
+ 0x0020: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0030: 0e0d f20e 0e0e 0e0e 0e0e 0e0e 0e04 0e0e
+ 0x0040: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0050: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0060: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0070: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e49 0e0e
+ 0x0080: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0d
+ 0x0090: f20e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x00a0: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x00b0: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x00c0: 0e0e 0e0e 0e0e
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3612
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 5
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3676
+ unknown TLV #92, length: 92
+ 0x0000: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0010: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0020: 5c44 4444 4444 4444 4444 4444 4444 4444
+ 0x0030: 44b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0040: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0050: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ unknown TLV #183, length: 183
+ 0x0000: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0010: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0020: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0030: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0040: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0050: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0060: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0070: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0080: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0090: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x00a0: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x00b0: b7b7 b7b7 b7b7 b7
+ unknown TLV #183, length: 183
+ 0x0000: b7b7 b7b7 b7b7 b7b7 b7c0 b7b7 b7b7 b7b7
+ 0x0010: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0020: b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7 b7b7
+ 0x0030: b7b7 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0040: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0050: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0060: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0070: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0080: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0090: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x00a0: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x00b0: 5c5c 5c5c 5c5c 5c
+ unknown TLV #92, length: 92
+ 0x0000: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0010: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0020: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0030: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0040: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0050: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ unknown TLV #92, length: 92
+ 0x0000: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0010: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0020: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0030: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0040: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0050: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ unknown TLV #92, length: 92
+ 0x0000: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0010: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0020: 5c5c 715c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0030: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0040: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0050: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ unknown TLV #92, length: 92
+ 0x0000: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0010: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0020: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0030: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0040: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0050: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ unknown TLV #92, length: 92
+ 0x0000: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0010: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0020: 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c 5c5c
+ 0x0030: 5c5c 5c5c 5c5c 5c5c 5c10 0594 4510 0410
+ 0x0040: 6e55 0000 0101 080a 8cf3 ac2b 269c 3ab9
+ 0x0050: a568 7354 404c 0c00 f702 0000
+ unknown TLV #247, length: 2
+ 0x0000: 0000
+ IPv4 Interface address(es) TLV #132, length: 181
+ IPv4 interface address: 156.190.140.255
+ IPv4 interface address: 255.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.14.14
+ IPv4 interface address: 14.14.28.14
+ IPv4 interface address: 28.14.21.14
+ IPv4 interface address: 14.14.14.130
+ IPv4 interface address: 89.186.4.171
+ IPv4 interface address: 23.3.1.0
+ IPv4 interface address: 32.144.252.48
+ IPv4 interface address: 165.128.255.255
+ IPv4 interface address: 255.246.232.117
+ IPv4 interface address: 154.157.104.136
+ IPv4 interface address: 118.103.188.123
+ IPv4 interface address: 181.119.205.109
+ IPv4 interface address: 60.22.90.116
+ IPv4 interface address: 80.127.192.14
+ IPv4 interface address: 156.165.230.105
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 61197
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 13
+ LSP Buffersize: 244
+ unknown TLV #255, length: 0
+ unknown TLV #64, length: 6
+ 0x0000: 3e88 cc09 3650
+ unknown TLV #204, length: 9
+ 0x0000: 370a da80 01bb 0404 04
+ unknown TLV #11, length: 4
+ 0x0000: 2104 0404
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ unknown TLV #234, length: 4
+ 0x0000: 0404 0404
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ unknown TLV #0, length: 0
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 5
+ Purge Originator Identifier TLV #13, length: 178
+ Purge Originator System-ID: e4f9.cb0c.e2cd
+ Received from System-ID: 2e17.5a0b.f3b4
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ Partition DIS TLV #4, length: 4
+ unknown TLV #0, length: 13
+ 0x0000: b2c4 e4f9 cb0c e2cd 2e17 5a0b f3
+ unknown TLV #180, length: 146
+ 0x0000: 01fa 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0010: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0020: 0e0e 0e28 0e0e 0e0e 0e0e fb0d 0e0e 0e0e
+ 0x0030: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0040: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0050: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0060: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0070: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0080: 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e 0e0e
+ 0x0090: 0e0e
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ IPv4 Internal Reachability TLV #128, length: 0
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ LSP Buffersize TLV #14, length: 14
+ LSP Buffersize: 3598
+ unknown TLV #58, length: 58
+ 0x0000: 3a3a 3a3a 3a3a 3a3a 3a3a 3a3a 3a3a 3a3a
+ 0x0010: 3a3a 3a [|isis]
diff --git a/tests/kday6.pcap b/tests/kday6.pcap
new file mode 100644
index 0000000..2f3a631
--- /dev/null
+++ b/tests/kday6.pcap
Binary files differ
diff --git a/tests/kday7.out b/tests/kday7.out
new file mode 100644
index 0000000..2c53200
--- /dev/null
+++ b/tests/kday7.out
@@ -0,0 +1,32 @@
+ 1 17:19:33.663606 IP (tos 0x10, ttl 64, id 63177, offset 0, flags [none], proto unknown (240), length 168, bad cksum 418f (->80a5)!)
+ 204.9.54.80 > 204.9.51.132: ip-proto-240 148
+ 2 17:19:33.520765928 IP (tos 0x10, ttl 62, id 64806, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 3da6 (->35a6)!)
+ 212.9.51.132.50079 > 204.9.54.80.22: Flags [.], cksum 0x8611 (incorrect -> 0x4811), ack 1819218606, win 17918, options [nop,nop,TS val 941371903 ecr 1340592074], length 0
+ 3 17:19:33.684826 84:b5:9c:be:30:48 Unknown SSAP 0x10 > 0c:c4:7a:08:e9:12 Unknown DSAP 0x44 Information, send seq 0, rcv seq 26, Flags [Command], length 52
+ 0x0000: 4510 0034 f5c8 4000 3e06 4504 cc09 3384 E..4..@.>.E...3.
+ 0x0010: cc09 3650 c39f 0016 49d1 c854 6c6f 1322 ..6P....I..Tlo."
+ 0x0020: 8010 0ffc 858b 0000 0101 080a 381c 3209 ............8.2.
+ 0x0030: 4fe7 cfd4 O...
+ 4 17:19:33.655361 IP (tos 0x0, ttl 64, id 63178, offset 0, flags [DF], proto TCP (6), length 52)
+ 204.9.54.80.55936 > 204.9.55.10.443: Flags [.], cksum 0x0594 (incorrect -> 0x725a), ack 3589495407, win 1040, options [nop,nop,TS val 647770294 ecr 2364779354], length 0
+ 5 17:19:33.703625 IP (tos 0x0, ttl 64, id 36752, offset 0, flags [DF], proto TCP (6), length 399, bad cksum a46b (->a474)!)
+ 204.0.55.10.323 > 204.9.54.80.55936: Flags [P.], cksum 0xc9b6 (incorrect -> 0xcd5f), seq 3589495407:3589495754, ack 370436242, win 1040, options [nop,nop,TS val 2364757411 ecr 3084508609], length 347
+ RPKI-RTRv177 (unknown)
+ 6 23:52:05.672232 IP (tos 0x10, ttl 62, id 64806, offset 0, flags [DF], proto TCP (6), length 52)
+ 204.9.51.132.50079 > 204.9.54.80.22: Flags [.], cksum 0x8611 (incorrect -> 0xa678), ack 1819218606, win 4094, options [nop,nop,TS val 941371775 ecr 4294967242], length 0
+ 7 17:19:33.684826 IP (tos 0x10, ttl 62, id 62920, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 4504 (->451a)!)
+ 204.9.51.132.50079 > 204.243.53.80.22: Flags [.], cksum 0x858b (incorrect -> 0x85a1), ack 1819218722, win 4092, options [nop,nop,TS val 941371913 ecr 1340592084], length 0
+ 8 17:19:33.703499 IP (tos 0x0, ttl 64, id 63178, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 3e8c (->438c)!)
+ 204.9.64.80.55936 > 204.9.40.10.443: Flags [.], cksum 0x0594 (incorrect -> 0x8d67), ack 3587398274, win 1040, options [nop,nop,TS val 647770294 ecr 2364773722], length 0
+ 9 17:19:33.703625 IP (tos 0x0, ttl 64, id 36752, offset 0, flags [DF], proto TCP (6), length 399, bad cksum a46b (->a474)!)
+ 204.0.55.10.323 > 204.9.54.80.55936: Flags [P.], cksum 0xc9b6 (incorrect -> 0xfa86), seq 0:347, ack 4294959105, win 1040, options [nop,nop,TS val 2364757411 ecr 3084508609], length 347
+ RPKI-RTRv197 (unknown)
+ 10 23:52:05.672232 IP truncated-ip - 768 bytes missing! (tos 0x10, ttl 62, id 64806, offset 0, flags [DF], proto TCP (6), length 820, bad cksum 3da6 (->3aa6)!)
+ 204.9.51.132.50079 > 204.9.54.80.22: Flags [.], seq 0:768, ack 1, win 4094, options [nop,nop,TS val 941371775 ecr 4294967242], length 768 [|ssh]
+ 11 17:19:33.684826 IP (tos 0x6,ECT(0), ttl 62, id 62920, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 4504 (->4524)!)
+ 204.9.51.132.50079 > 204.243.53.80.22: Flags [.], cksum 0x858b (incorrect -> 0x85a1), ack 1, win 4092, options [nop,nop,TS val 941371913 ecr 1340592084], length 0
+ 12 17:19:33.703499 IP (tos 0x0, ttl 64, id 63178, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 3e8c (->438c)!)
+ 204.9.64.80.55936 > 204.9.40.10.443: Flags [.], cksum 0x0594 (incorrect -> 0x8d67), ack 1, win 1040, options [nop,nop,TS val 647770294 ecr 2364773722], length 0
+ 13 17:19:33.703113 IP (tos 0x0, ttl 64, id 36752, offset 0, flags [DF], proto TCP (6), length 399, bad cksum a46b (->a474)!)
+ 204.0.55.10.323 > 204.9.54.80.55936: Flags [P.], cksum 0xc9b6 (incorrect -> 0x4ba9), seq 0:347, ack 4294959105, win 1040, options [nop,nop,TS val 2364757411 ecr 3084508609], length 347
+ RPKI-RTRv177 (unknown)
diff --git a/tests/kday7.pcap b/tests/kday7.pcap
new file mode 100644
index 0000000..c5a3810
--- /dev/null
+++ b/tests/kday7.pcap
Binary files differ
diff --git a/tests/kday8.out b/tests/kday8.out
new file mode 100644
index 0000000..4515bfe
--- /dev/null
+++ b/tests/kday8.out
@@ -0,0 +1,21 @@
+ 1 17:19:33.663606 CFMv0 unknown (204), MD Level 0, length 168
+ First TLV offset 52
+ 0x0000: a300 0000 0080 0000 0000 0000 0000 0000
+ 0x0010: 0000 00aa 6873 54d7 060b 003c 0000 003c
+ 0x0020: d4c3 b2a1 0200 1a00 000b 003c 0000 003c
+ 0x0030: d4c3 b2a1 0200 1a00 0000 0000 3620 0a00
+ 0x0040: b600 0000 b600 0000 40b5 9cbe 3048 0cc4
+ 0x0050: ad37 1005 ffff 05cc 0934 9300 0000 0080
+ 0x0060: fffa 0000 0000 3200 0000 0000 00aa 6873
+ Port status TLV (0x02), length 26, Status: Unknown (0)
+ Unknown TLV (0x37), length 4101
+ packet is too short
+ 2 23:52:05.672232 IP (tos 0x10, ttl 62, id 64806, offset 0, flags [DF], proto TCP (6), length 52)
+ 204.9.51.132.50079 > 204.9.54.80.22: Flags [.], cksum 0x8611 (incorrect -> 0xa678), ack 1819218606, win 4094, options [nop,nop,TS val 941371775 ecr 4294967242], length 0
+ 3 17:19:33.684826 IP (tos 0x10, ttl 62, id 62920, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 4504 (->451a)!)
+ 204.9.51.132.50079 > 204.243.53.80.22: Flags [.], cksum 0x858b (incorrect -> 0x85a1), ack 1819218722, win 4092, options [nop,nop,TS val 941371913 ecr 1340592084], length 0
+ 4 17:19:33.703499 IP (tos 0x0, ttl 64, id 63178, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 3e8c (->438c)!)
+ 204.9.64.80.55936 > 204.9.40.10.443: Flags [.], cksum 0x0594 (incorrect -> 0x7767), ack 3587398274, win 1040, options [nop,nop,TS val 647770294 ecr 2364779354], length 0
+ 5 17:19:33.703625 IP (tos 0x0, ttl 64, id 36752, offset 0, flags [DF], proto TCP (6), length 399, bad cksum a46b (->a474)!)
+ 204.0.55.10.323 > 204.9.54.80.55936: Flags [P.], cksum 0xc9b6 (incorrect -> 0xed9b), seq 3589495407:3589495754, ack 370428050, win 1040, options [nop,nop,TS val 2364757411 ecr 3084508609], length 347
+ RPKI-RTRv177 (unknown)
diff --git a/tests/kday8.pcap b/tests/kday8.pcap
new file mode 100644
index 0000000..87bfce3
--- /dev/null
+++ b/tests/kday8.pcap
Binary files differ
diff --git a/tests/kh-timed-001-oobr.out b/tests/kh-timed-001-oobr.out
new file mode 100644
index 0000000..8fd3180
--- /dev/null
+++ b/tests/kh-timed-001-oobr.out
@@ -0,0 +1,17 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 00
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 00
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 00
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 00
+ 5 05:27:12.808464432 IP truncated-ip - 14 bytes missing! 48.48.48.48.525 > 48.48.48.48.12336: (tsp_type 0x30) vers 48 seq 12336 name [|timed]
diff --git a/tests/kh-timed-001-oobr.pcap b/tests/kh-timed-001-oobr.pcap
new file mode 100644
index 0000000..cce27ef
--- /dev/null
+++ b/tests/kh-timed-001-oobr.pcap
Binary files differ
diff --git a/tests/kh-timed-002-oobr.out b/tests/kh-timed-002-oobr.out
new file mode 100644
index 0000000..a9e0f99
--- /dev/null
+++ b/tests/kh-timed-002-oobr.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 IP 48.48.48.48.525 > 48.48.48.48.12336: (tsp_type 0x30) vers 48 seq 12336 name [|timed]
diff --git a/tests/kh-timed-002-oobr.pcap b/tests/kh-timed-002-oobr.pcap
new file mode 100644
index 0000000..f38f0ec
--- /dev/null
+++ b/tests/kh-timed-002-oobr.pcap
Binary files differ
diff --git a/tests/kh-timed-004-oobr.out b/tests/kh-timed-004-oobr.out
new file mode 100644
index 0000000..2ac6f85
--- /dev/null
+++ b/tests/kh-timed-004-oobr.out
@@ -0,0 +1,5 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 00
+ 2 05:27:12.808464432 IP truncated-ip - 14 bytes missing! 48.48.48.48.525 > 48.48.48.48.12336: (tsp_type 0x30) vers 48 seq 12336 name [|timed]
diff --git a/tests/kh-timed-004-oobr.pcap b/tests/kh-timed-004-oobr.pcap
new file mode 100644
index 0000000..0a3326b
--- /dev/null
+++ b/tests/kh-timed-004-oobr.pcap
Binary files differ
diff --git a/tests/l2tp-avp-overflow.out b/tests/l2tp-avp-overflow.out
new file mode 100644
index 0000000..cc0e80c
--- /dev/null
+++ b/tests/l2tp-avp-overflow.out
@@ -0,0 +1,38 @@
+ 1 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12331, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->ab7b)!)
+ 127.0.0.229.12416 > 127.0.128.1.1701: l2tp:[TL](560/2056) AVP-#60963() [|l2tp]
+ 2 05:27:12.808464435 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->2a8b)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) AVP-#48() [|l2tp]
+ 3 05:27:32.808464432 IP (tos 0x30, ttl 48, id 12331, offset 0, flags [none], proto UDP (17), length 8752, bad cksum 1f51 (->3890)!)
+ 127.0.0.229.32767 > 127.236.0.1.1701: l2tp:[TL](560/2056) ACCM(AVP too short) [|l2tp]
+ 4 05:27:12.808464435 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->2a8b)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) ACCM(AVP too short) [|l2tp]
+ 5 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12331, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->2a90)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) ACCM(AVP too short) [|l2tp]
+ 6 05:27:12.808464435 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->ab5d)!)
+ 127.0.0.0.0 > 0.0.0.0.2048: UDP, bad length 17704 > 12308
+ 7 21:13:38.134744112 [|ether]
+ 8 05:27:12.808464435 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->2a8b)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) AVP-#48() [|l2tp]
+ 9 05:27:32.808464432 IP (tos 0x30, ttl 48, id 12331, offset 0, flags [none], proto UDP (17), length 8752, bad cksum 1f51 (->3890)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) ACCM(AVP too short) [|l2tp]
+ 10 05:27:12.808464435 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->2a8b)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) ACCM(AVP too short) [|l2tp]
+ 11 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12331, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->2a90)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) ACCM(AVP too short) [|l2tp]
+ 12 05:27:12.808464435 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->ab5d)!)
+ 127.0.0.0.0 > 0.0.0.0.2048: UDP, bad length 17704 > 12308
+ 13 21:13:38.134744112 [|ether]
+ 14 05:27:12.808464435 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->2a8b)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) AVP-#48() [|l2tp]
+ 15 05:27:32.808464432 IP (tos 0x30, ttl 48, id 12331, offset 0, flags [none], proto UDP (17), length 8752, bad cksum 1f51 (->3890)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) ACCM(AVP too short) [|l2tp]
+ 16 05:27:12.808464435 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->2a8b)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) ACCM(AVP too short) [|l2tp]
+ 17 05:26:43.808464432 IP (tos 0x30, ttl 48, id 12331, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->2a90)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) ACCM(AVP too short) [|l2tp]
+ 18 05:27:12.808464435 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->2a8b)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) AVP-#48() [|l2tp]
+ 19 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12331, offset 0, flags [none], proto UDP (17), length 8752, bad cksum 1f51 (->3890)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) VENDOR0001:ATTR0023(0530) [|l2tp]
+ 20 05:27:12.808464435 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 1f51 (->2a8b)!)
+ 127.0.0.229.12416 > 127.236.0.1.1701: l2tp:[TL](560/2056) VENDOR0080:ATTR06a5(19e8) [|l2tp]
diff --git a/tests/l2tp-avp-overflow.pcap b/tests/l2tp-avp-overflow.pcap
new file mode 100644
index 0000000..8732f3c
--- /dev/null
+++ b/tests/l2tp-avp-overflow.pcap
Binary files differ
diff --git a/tests/lacp-ev.out b/tests/lacp-ev.out
new file mode 100644
index 0000000..27adf15
--- /dev/null
+++ b/tests/lacp-ev.out
@@ -0,0 +1,200 @@
+ 1 04:02:10.267147 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Expired]
+ Partner Information TLV (0x02), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Timeout, Aggregation, Collecting, Distributing]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 2 04:02:11.184592 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Expired]
+ Partner Information TLV (0x02), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Timeout, Aggregation, Collecting, Distributing]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 3 04:02:12.147802 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Expired]
+ Partner Information TLV (0x02), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Timeout, Aggregation, Collecting, Distributing]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 4 04:02:18.675985 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Synchronization, Default]
+ Partner Information TLV (0x02), length 20
+ System 00:00:00:00:00:00, System Priority 0, Key 0, Port 0, Port Priority 0
+ State Flags [none]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 5 04:02:18.690253 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Synchronization, Collecting, Distributing, Default]
+ Partner Information TLV (0x02), length 20
+ System 00:00:00:00:00:00, System Priority 0, Key 0, Port 0, Port Priority 0
+ State Flags [none]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 6 04:02:39.216272 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Synchronization, Collecting, Distributing, Default]
+ Partner Information TLV (0x02), length 20
+ System 00:00:00:00:00:00, System Priority 0, Key 0, Port 0, Port Priority 0
+ State Flags [none]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 7 04:03:05.733028 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Synchronization, Collecting, Distributing, Default]
+ Partner Information TLV (0x02), length 20
+ System 00:00:00:00:00:00, System Priority 0, Key 0, Port 0, Port Priority 0
+ State Flags [none]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 8 04:03:31.389243 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Synchronization, Collecting, Distributing, Default]
+ Partner Information TLV (0x02), length 20
+ System 00:00:00:00:00:00, System Priority 0, Key 0, Port 0, Port Priority 0
+ State Flags [none]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 9 04:03:35.229252 00:0e:83:16:f5:10 > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Aggregation, Synchronization]
+ Partner Information TLV (0x02), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Collecting, Distributing, Default]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 10 04:03:35.244788 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Synchronization, Default]
+ Partner Information TLV (0x02), length 20
+ System 00:00:00:00:00:00, System Priority 0, Key 0, Port 0, Port Priority 0
+ State Flags [none]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 11 04:03:35.244806 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Default]
+ Partner Information TLV (0x02), length 20
+ System 00:00:00:00:00:00, System Priority 0, Key 0, Port 0, Port Priority 0
+ State Flags [none]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 12 04:03:35.248919 00:0e:83:16:f5:10 > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Aggregation]
+ Partner Information TLV (0x02), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Collecting, Distributing, Default]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 13 04:03:35.248935 00:0e:83:16:f5:10 > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Aggregation]
+ Partner Information TLV (0x02), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Collecting, Distributing, Default]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 14 04:03:36.117266 00:0e:83:16:f5:10 > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Aggregation]
+ Partner Information TLV (0x02), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Default]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 15 04:03:37.035406 00:0e:83:16:f5:10 > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Aggregation, Synchronization]
+ Partner Information TLV (0x02), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Default]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 16 04:03:40.737784 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Synchronization]
+ Partner Information TLV (0x02), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Aggregation, Synchronization]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 17 04:03:40.762840 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Synchronization, Collecting, Distributing]
+ Partner Information TLV (0x02), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Aggregation, Synchronization]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 18 04:03:40.765033 00:0e:83:16:f5:10 > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Aggregation, Synchronization, Collecting, Distributing]
+ Partner Information TLV (0x02), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Synchronization]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 19 04:03:57.637995 00:0e:83:16:f5:10 > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Aggregation, Synchronization, Collecting, Distributing]
+ Partner Information TLV (0x02), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Synchronization, Collecting, Distributing]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
+ 20 04:04:02.605882 00:13:c4:12:0f:0d > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
+ Actor Information TLV (0x01), length 20
+ System 00:13:c4:12:0f:00, System Priority 32768, Key 13, Port 22, Port Priority 32768
+ State Flags [Activity, Aggregation, Synchronization, Collecting, Distributing]
+ Partner Information TLV (0x02), length 20
+ System 00:0e:83:16:f5:00, System Priority 32768, Key 13, Port 25, Port Priority 32768
+ State Flags [Aggregation, Synchronization, Collecting, Distributing]
+ Collector Information TLV (0x03), length 16
+ Max Delay 32768
+ Terminator TLV (0x00), length 0
diff --git a/tests/ldp-infinite-loop.pcap b/tests/ldp-infinite-loop.pcap
new file mode 100644
index 0000000..ea31f0c
--- /dev/null
+++ b/tests/ldp-infinite-loop.pcap
Binary files differ
diff --git a/tests/ldp-ldp_tlv_print-oobr.out b/tests/ldp-ldp_tlv_print-oobr.out
new file mode 100644
index 0000000..f16928b
--- /dev/null
+++ b/tests/ldp-ldp_tlv_print-oobr.out
@@ -0,0 +1,6 @@
+ 1 [Error converting time] IP (tos 0x0, id 4608, offset 0, flags [+, DF, rsvd], proto UDP (17), length 25600, options (EOL), bad cksum 8e (->4023)!)
+ 24.250.219.0.4098 > 0.0.0.0.646:
+ LDP, Label-Space-ID: 0.0.127.255:796, pdu-length: 514
+ Address Withdraw Message (0x0301), length: 22, Message ID: 0x00001600, Flags: [ignore if unknown]
+ Unknown TLV (0x0404), length: 0, Flags: [ignore and don't forward if unknown]
+ Fault-Tolerant Session Parameters TLV (0x0503), length: 8, Flags: [ignore and don't forward if unknown] [tlv length 8 < 12] (invalid) [|ldp]
diff --git a/tests/ldp-ldp_tlv_print-oobr.pcap b/tests/ldp-ldp_tlv_print-oobr.pcap
new file mode 100644
index 0000000..82ddad7
--- /dev/null
+++ b/tests/ldp-ldp_tlv_print-oobr.pcap
Binary files differ
diff --git a/tests/ldp_infloop.out b/tests/ldp_infloop.out
new file mode 100644
index 0000000..c7e2ae6
--- /dev/null
+++ b/tests/ldp_infloop.out
@@ -0,0 +1,5 @@
+ 1 18:09:19.437378 IP 45.116.197.72.45307 > 192.168.1.1.646:
+ 2 18:09:19.497178 IP 90.6.30.91.34115 > 192.168.1.1.646:
+ 3 18:09:19.557147 IP 146.203.190.45.13504 > 192.168.1.1.646:
+ 4 18:09:19.617117 IP 67.199.76.127.18327 > 192.168.1.1.646:
+ 5 18:09:19.677086 IP 13.213.243.81.57100 > 192.168.1.1.646:
diff --git a/tests/ldp_tlv_print-oobr.out b/tests/ldp_tlv_print-oobr.out
new file mode 100644
index 0000000..1ec4d34
--- /dev/null
+++ b/tests/ldp_tlv_print-oobr.out
@@ -0,0 +1,7 @@
+ 1 05:27:12.1010580 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 3030 (->699d)!)
+ 48.48.48.48.12336 > 48.48.48.48.646:
+ LDP, Label-Space-ID: 48.48.48.48:12336, pdu-length: 12336
+ Hello Message (0x0100), length: 20, Message ID: 0x30303030, Flags: [ignore if unknown]
+ Unknown TLV (0x3030), length: 4, Flags: [ignore and don't forward if unknown]
+ 0x0000: 3030 3030
+ IPv4 Transport Address TLV (0x0401), length: 4, Flags: [ignore and don't forward if unknown] [|ldp]
diff --git a/tests/ldp_tlv_print-oobr.pcap b/tests/ldp_tlv_print-oobr.pcap
new file mode 100644
index 0000000..9ec507c
--- /dev/null
+++ b/tests/ldp_tlv_print-oobr.pcap
Binary files differ
diff --git a/tests/lisp_eid_notify.out b/tests/lisp_eid_notify.out
new file mode 100644
index 0000000..97e1d74
--- /dev/null
+++ b/tests/lisp_eid_notify.out
@@ -0,0 +1,62 @@
+ 1 11:09:05.156268 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 160)
+ 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Notify, flags [none],
+ 3 record(s), Authentication SHA1,
+ Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906
+ Authentication-Data: 0x0010: 836c d1d6
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.100/32, 1 locator(s)
+ LOC 20.20.8.253
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.96/32, 2 locator(s)
+ LOC 20.20.8.251
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ LOC 20.20.8.252
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.80/32, 1 locator(s)
+ LOC 20.20.8.239
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ 2 11:09:05.615558 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 156)
+ 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Notify, flags [I-xTR-ID-Present],
+ 2 record(s), Authentication SHA1,
+ Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906
+ Authentication-Data: 0x0010: 836c d1d6
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.100/32, 1 locator(s)
+ LOC 20.20.8.253
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.96/32, 2 locator(s)
+ LOC 20.20.8.251
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ LOC 20.20.8.252
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ xTR-ID: 0x0000: 9787 ad75 3caf 58a7 13fa 6920 e6d2 7a8f
+ SITE-ID: 0
+ 3 11:09:06.507423 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 160)
+ 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Notify, flags [I-xTR-ID-Present],
+ 3 record(s), Authentication SHA1,
+ Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906
+ Authentication-Data: 0x0010: 836c d1d6
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.100/32, 1 locator(s)
+ LOC 20.20.8.253
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.96/32, 2 locator(s)
+ LOC 20.20.8.251
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ LOC 20.20.8.252
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.80/32, 1 locator(s)
+ LOC 20.20.8.239
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none], (invalid)
+ 4 11:09:07.451778 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 156)
+ 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Notify, flags [none],
+ 2 record(s), Authentication SHA1,
+ Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906
+ Authentication-Data: 0x0010: 836c d1d6
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.100/32, 1 locator(s)
+ LOC 20.20.8.253
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.96/32, 2 locator(s)
+ LOC 20.20.8.251
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ LOC 20.20.8.252
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ Data: 0x0000: 9787 ad75 3caf 58a7 13fa 6920 e6d2 7a8f
+ Data: 0x0010: 0000 0000 0000 0000
diff --git a/tests/lisp_eid_notify.pcap b/tests/lisp_eid_notify.pcap
new file mode 100644
index 0000000..1f83378
--- /dev/null
+++ b/tests/lisp_eid_notify.pcap
Binary files differ
diff --git a/tests/lisp_eid_register.out b/tests/lisp_eid_register.out
new file mode 100644
index 0000000..9c921f4
--- /dev/null
+++ b/tests/lisp_eid_register.out
@@ -0,0 +1,28 @@
+ 1 19:46:29.089857 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 144)
+ 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Register, flags [I-xTR-ID-Present, M-Want-Map-Notify],
+ 2 record(s), Authentication SHA1,
+ Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906
+ Authentication-Data: 0x0010: 836c d1d6
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.100/32, 1 locator(s)
+ LOC 20.20.8.253
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.96/32, 1 locator(s)
+ LOC 20.20.8.252
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ xTR-ID: 0x0000: 9787 ad75 3caf 58a7 13fa 6920 e6d2 7a8f
+ SITE-ID: 0
+ 2 19:46:31.324329 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 156)
+ 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Register, flags [I-xTR-ID-Present, M-Want-Map-Notify],
+ 2 record(s), Authentication SHA1,
+ Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906
+ Authentication-Data: 0x0010: 836c d1d6
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.100/32, 1 locator(s)
+ LOC 20.20.8.253
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 10.30.1.96/32, 2 locator(s)
+ LOC 20.20.8.251
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ LOC 20.20.8.252
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ xTR-ID: 0x0000: 9787 ad75 3caf 58a7 13fa 6920 e6d2 7a8f
+ SITE-ID: 0
diff --git a/tests/lisp_eid_register.pcap b/tests/lisp_eid_register.pcap
new file mode 100644
index 0000000..a6d71ef
--- /dev/null
+++ b/tests/lisp_eid_register.pcap
Binary files differ
diff --git a/tests/lisp_ipv6.out b/tests/lisp_ipv6.out
new file mode 100644
index 0000000..6ee694f
--- /dev/null
+++ b/tests/lisp_ipv6.out
@@ -0,0 +1,24 @@
+ 1 19:37:39.175900 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 168)
+ 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Register, flags [I-xTR-ID-Present, M-Want-Map-Notify],
+ 2 record(s), Authentication SHA1,
+ Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906
+ Authentication-Data: 0x0010: 836c d1d6
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 2001:db8:85a3::8a2e:370:7334/80, 1 locator(s)
+ LOC 20.20.8.253
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 2001:db8:95a3::8a2e:370:7334/80, 1 locator(s)
+ LOC 20.20.8.251
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ xTR-ID: 0x0000: 9787 ad75 3caf 58a7 13fa 6920 e6d2 7a8f
+ SITE-ID: 0
+ 2 19:37:42.169026 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 144)
+ 192.168.0.105.4342 > 127.0.0.1.4342: LISP-Map-Notify, flags [none],
+ 2 record(s), Authentication SHA1,
+ Authentication-Data: 0x0000: 4bbb 9614 a67a 8604 0407 7995 4537 1906
+ Authentication-Data: 0x0010: 836c d1d6
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 2001:db8:85a3::8a2e:370:7334/80, 1 locator(s)
+ LOC 20.20.8.253
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
+ Record TTL 1440, Authoritative, No-Action, Map Version: 0, EID 2001:db8:95a3::8a2e:370:7334/80, 1 locator(s)
+ LOC 20.20.8.251
+ Priority/Weight 1/100, Multicast Priority/Weight 1/100, flags [none],
diff --git a/tests/lisp_ipv6.pcap b/tests/lisp_ipv6.pcap
new file mode 100644
index 0000000..b878efd
--- /dev/null
+++ b/tests/lisp_ipv6.pcap
Binary files differ
diff --git a/tests/llc-xid-heapoverflow.out b/tests/llc-xid-heapoverflow.out
new file mode 100644
index 0000000..8662c2b
--- /dev/null
+++ b/tests/llc-xid-heapoverflow.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 Unknown DSAP 0x30 Unnumbered, xid, Flags [Poll], length 262124 [|llc]
diff --git a/tests/llc-xid-heapoverflow.pcap b/tests/llc-xid-heapoverflow.pcap
new file mode 100644
index 0000000..ff32a2f
--- /dev/null
+++ b/tests/llc-xid-heapoverflow.pcap
Binary files differ
diff --git a/tests/lldp-app-priority.out b/tests/lldp-app-priority.out
new file mode 100644
index 0000000..08b0173
--- /dev/null
+++ b/tests/lldp-app-priority.out
@@ -0,0 +1,30 @@
+ 1 23:41:11.292336 LLDP, length 161
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:00:00:02:00:02
+ Port ID TLV (2), length 13
+ Subtype Interface Name (5): leaf0b-eth10
+ Time to Live TLV (3), length 2: TTL 120s
+ Port Description TLV (4), length 41: Big Cloud Fabric Switch Port leaf0b-eth10
+ System Name TLV (5), length 6: leaf0b
+ System Description TLV (6), length 17
+ 5c:16:c7:00:00:01
+ Organization specific TLV (127), length 5: OUI Unknown (0x0026e1)
+ 0x0000: 0026 e101 01
+ Organization specific TLV (127), length 9: OUI Unknown (0x0026e1)
+ 0x0000: 0026 e102 6c65 6166 30
+ Organization specific TLV (127), length 5: OUI Unknown (0x0026e1)
+ 0x0000: 0026 e103 01
+ Organization specific TLV (127), length 16: OUI Unknown (0x0026e1)
+ 0x0000: 0026 e104 0000 5c16 c70b ba1b 0000 0000
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Priority Flow Control Configuration Subtype (11)
+ Willing: 0, MBC: 0, RES: 0, PFC cap:1
+ PFC Enable
+ Priority : 0 1 2 3 4 5 6 7
+ Value : 0 0 0 0 1 0 0 0
+ Organization specific TLV (127), length 8: OUI Ethernet bridged (0x0080c2)
+ Application Priority Subtype (12)
+ RES: 0
+ Application Priority Table
+ Priority: 4, RES: 0, Sel: 4, Protocol ID: 3260
+ End TLV (0), length 0
diff --git a/tests/lldp-app-priority.pcap b/tests/lldp-app-priority.pcap
new file mode 100644
index 0000000..cbe89ca
--- /dev/null
+++ b/tests/lldp-app-priority.pcap
Binary files differ
diff --git a/tests/lldp-infinite-loop-1.out b/tests/lldp-infinite-loop-1.out
new file mode 100644
index 0000000..cf4d784
--- /dev/null
+++ b/tests/lldp-infinite-loop-1.out
@@ -0,0 +1,134 @@
+ 1 00:00:00.000000 08:00:27:42:ba:59 > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 1755: LLDP, length 1741
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:42:ba:59
+ 0x0000: 0408 0027 42ba 59
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:42:ba:59
+ 0x0000: 0308 0027 42ba 59
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 0
+ 0x0000: 0080 c201 0000
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0080 08
+ Organization specific TLV (127), length 263: OUI Ethernet bridged (0x0080c2)
+ Application Priority Subtype (12)
+ RES: 0
+ Application Priority Table
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 32962
+ Priority: 0, RES: 1, Sel: 4, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 4, RES: 0, Sel: 0, Protocol ID: 49676
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 128
+ Priority: 6, RES: 0, Sel: 2, Protocol ID: 3072
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 32962
+ Priority: 0, RES: 1, Sel: 4, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 4, RES: 0, Sel: 0, Protocol ID: 49676
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 128
+ Priority: 6, RES: 0, Sel: 2, Protocol ID: 3072
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 32962
+ Priority: 0, RES: 1, Sel: 4, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 4, RES: 0, Sel: 0, Protocol ID: 49676
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 128
+ Priority: 6, RES: 0, Sel: 2, Protocol ID: 3072
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 32962
+ Priority: 0, RES: 1, Sel: 4, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 4, RES: 0, Sel: 0, Protocol ID: 49676
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 128
+ Priority: 6, RES: 0, Sel: 2, Protocol ID: 3072
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 32962
+ Priority: 0, RES: 1, Sel: 4, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 4, RES: 0, Sel: 0, Protocol ID: 49676
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 128
+ Priority: 6, RES: 0, Sel: 2, Protocol ID: 3072
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 32962
+ Priority: 0, RES: 1, Sel: 4, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 4, RES: 0, Sel: 0, Protocol ID: 49676
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 128
+ Priority: 6, RES: 0, Sel: 2, Protocol ID: 3072
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 32962
+ Priority: 0, RES: 1, Sel: 4, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 4, RES: 0, Sel: 0, Protocol ID: 49676
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 128
+ Priority: 6, RES: 0, Sel: 2, Protocol ID: 3072
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 32962
+ Priority: 0, RES: 1, Sel: 4, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 4, RES: 0, Sel: 0, Protocol ID: 49676
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ Priority: 0, RES: 0, Sel: 0, Protocol ID: 0
+ 0x0000: 0080 c20c 0000 0000 0000 0000 80c2 0c00
+ 0x0010: 0000 0000 0000 0080 c20c 0000 0000 0000
+ 0x0020: 0000 80c2 0c00 0000 0000 0000 0080 c20c
+ 0x0030: 0000 0000 0000 0000 80c2 0c00 0000 0000
+ 0x0040: 0000 0080 c20c 0000 0000 0000 0000 80c2
+ 0x0050: 0c00 0000 0000 0000 0080 c20c 0000 0000
+ 0x0060: 0000 0000 80c2 0c00 0000 0000 0000 0080
+ 0x0070: c20c 0000 0000 0000 0000 80c2 0c00 0000
+ 0x0080: 0000 0000 0080 c20c 0000 0000 0000 0000
+ 0x0090: 80c2 0c00 0000 0000 0000 0080 c20c 0000
+ 0x00a0: 0000 0000 0000 80c2 0c00 0000 0000 0000
+ 0x00b0: 0080 c20c 0000 0000 0000 0000 80c2 0c00
+ 0x00c0: 0000 0000 0000 0080 c20c 0000 0000 0000
+ 0x00d0: 0000 80c2 0c00 0000 0000 0000 0080 c20c
+ 0x00e0: 0000 0000 0000 0000 80c2 0c00 0000 0000
+ 0x00f0: 0000 0080 c20c 0000 0000 0000 0000 80c2
+ 0x0100: 0c00 0000 0000 00
+ End TLV (0), length 0
diff --git a/tests/lldp-infinite-loop-1.pcap b/tests/lldp-infinite-loop-1.pcap
new file mode 100644
index 0000000..232dbbd
--- /dev/null
+++ b/tests/lldp-infinite-loop-1.pcap
Binary files differ
diff --git a/tests/lldp-infinite-loop-2.out b/tests/lldp-infinite-loop-2.out
new file mode 100644
index 0000000..93dced8
--- /dev/null
+++ b/tests/lldp-infinite-loop-2.out
@@ -0,0 +1,161 @@
+ 1 00:00:00.000000 08:00:27:0d:f1:3c > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 2130: LLDP, length 2116
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 08:00:27:0d:f1:3c
+ 0x0000: 0408 0027 0df1 3c
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 08:00:27:0d:f1:3c
+ 0x0000: 0308 0027 0df1 3c
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ 0x0000: 0080 c201 0001
+ Organization specific TLV (127), length 7: OUI Ethernet bridged (0x0080c2)
+ Port and Protocol VLAN ID Subtype (2)
+ port and protocol vlan id (PPVID): 0, flags [supported] (0x02)
+ 0x0000: 0080 c202 0200 00
+ Organization specific TLV (127), length 14: OUI Ethernet bridged (0x0080c2)
+ VLAN name Subtype (3)
+ vlan id (VID): 1
+ vlan name: default
+ 0x0000: 0080 c203 0001 0764 6566 6175 6c74
+ Organization specific TLV (127), length 13: OUI Ethernet bridged (0x0080c2)
+ Protocol Identity Subtype (4)
+ protocol identity:
+ 0x0000: 0080 c204 0800 0042 4203 0000 03
+ Organization specific TLV (127), length 9: OUI Ethernet bridged (0x0080c2)
+ EVB Subtype (13)
+ EVB Bridge Status
+ RES: 0, BGID: 0, RRCAP: 1, RRCTR: 0
+ EVB Station Status
+ RES: 0, SGID: 0, RRREQ: 0,RRSTAT: 0
+ R: 7, RTE: 21, EVB Mode: EVB Bridge [1]
+ ROL: 0, RWD: 30, RES: 0, ROL: 0, RKA: 15
+ 0x0000: 0080 c20d 0200 f55e 0f
+ Organization specific TLV (127), length 266: OUI Ethernet bridged (0x0080c2)
+ CDCP Subtype (14)
+ Role: 0, RES: 0, Scomp: 0 ChnCap: 167
+ SCID: 1, SVID: 1
+ SCID: 0, SVID: 194
+ SCID: 224, SVID: 0
+ SCID: 10, SVID: 1792
+ SCID: 256, SVID: 256
+ SCID: 12, SVID: 526
+ SCID: 0, SVID: 0
+ SCID: 2672, SVID: 16
+ SCID: 16, SVID: 0
+ SCID: 3104, SVID: 3584
+ SCID: 0, SVID: 167
+ SCID: 1, SVID: 1
+ SCID: 0, SVID: 194
+ SCID: 224, SVID: 0
+ SCID: 10, SVID: 1792
+ SCID: 256, SVID: 256
+ SCID: 12, SVID: 526
+ SCID: 0, SVID: 0
+ SCID: 2672, SVID: 16
+ SCID: 16, SVID: 0
+ SCID: 3104, SVID: 3584
+ SCID: 0, SVID: 167
+ SCID: 1, SVID: 1
+ SCID: 0, SVID: 194
+ SCID: 224, SVID: 0
+ SCID: 10, SVID: 1792
+ SCID: 256, SVID: 256
+ SCID: 12, SVID: 526
+ SCID: 0, SVID: 0
+ SCID: 2672, SVID: 16
+ SCID: 16, SVID: 0
+ SCID: 3104, SVID: 3584
+ SCID: 0, SVID: 167
+ SCID: 1, SVID: 1
+ SCID: 0, SVID: 194
+ SCID: 224, SVID: 0
+ SCID: 10, SVID: 1792
+ SCID: 256, SVID: 256
+ SCID: 12, SVID: 526
+ SCID: 0, SVID: 0
+ SCID: 2672, SVID: 16
+ SCID: 16, SVID: 0
+ SCID: 3104, SVID: 3584
+ SCID: 0, SVID: 167
+ SCID: 1, SVID: 1
+ SCID: 0, SVID: 194
+ SCID: 224, SVID: 0
+ SCID: 10, SVID: 1792
+ SCID: 256, SVID: 256
+ SCID: 12, SVID: 526
+ SCID: 0, SVID: 0
+ SCID: 2672, SVID: 16
+ SCID: 16, SVID: 0
+ SCID: 3104, SVID: 3584
+ SCID: 0, SVID: 167
+ SCID: 1, SVID: 1
+ SCID: 0, SVID: 194
+ SCID: 224, SVID: 0
+ SCID: 10, SVID: 1792
+ SCID: 256, SVID: 256
+ SCID: 12, SVID: 526
+ SCID: 0, SVID: 0
+ SCID: 2672, SVID: 16
+ SCID: 16, SVID: 0
+ SCID: 3104, SVID: 3584
+ SCID: 0, SVID: 167
+ SCID: 1, SVID: 1
+ SCID: 0, SVID: 194
+ SCID: 224, SVID: 0
+ SCID: 10, SVID: 1792
+ SCID: 256, SVID: 256
+ SCID: 12, SVID: 526
+ SCID: 0, SVID: 0
+ SCID: 2672, SVID: 16
+ SCID: 16, SVID: 0
+ SCID: 3104, SVID: 3584
+ SCID: 0, SVID: 167
+ SCID: 1, SVID: 1
+ SCID: 0, SVID: 194
+ SCID: 224, SVID: 0
+ SCID: 10, SVID: 1792
+ SCID: 256, SVID: 256
+ SCID: 12, SVID: 526
+ SCID: 0, SVID: 0
+ SCID: 2672, SVID: 16
+ SCID: 16, SVID: 0
+ 0x0000: 0080 c20e 0000 00a7 0010 0100 00c2 0e00
+ 0x0010: 0000 a700 1001 0000 c20e 0000 00a7 0010
+ 0x0020: 0100 00c2 0e00 0000 a700 1001 0000 c20e
+ 0x0030: 0000 00a7 0010 0100 00c2 0e00 0000 a700
+ 0x0040: 1001 0000 c20e 0000 00a7 0010 0100 00c2
+ 0x0050: 0e00 0000 a700 1001 0000 c20e 0000 00a7
+ 0x0060: 0010 0100 00c2 0e00 0000 a700 1001 0000
+ 0x0070: c20e 0000 00a7 0010 0100 00c2 0e00 0000
+ 0x0080: a700 1001 0000 c20e 0000 00a7 0010 0100
+ 0x0090: 00c2 0e00 0000 a700 1001 0000 c20e 0000
+ 0x00a0: 00a7 0010 0100 00c2 0e00 0000 a700 1001
+ 0x00b0: 0000 c20e 0000 00a7 0010 0100 00c2 0e00
+ 0x00c0: 0000 a700 1001 0000 c20e 0000 00a7 0010
+ 0x00d0: 0100 00c2 0e00 0000 a700 1001 0000 c20e
+ 0x00e0: 0000 00a7 0010 0100 00c2 0e00 0000 a700
+ 0x00f0: 1001 0000 c20e 0000 00a7 0010 0100 00c2
+ 0x0100: 0e00 0000 a700 1001 0000
+ Unknown TLV (97), length 14
+ 0x0000: 0000 00a7 0010 0100 00c2 0e00 0000
+ Unknown TLV (83), length 256
+ 0x0000: 1001 0000 c20e 0000 00a7 0010 0100 00c2
+ 0x0010: 0e00 0000 a700 1001 0000 c20e 0000 00a7
+ 0x0020: 0010 0100 00c2 0e00 0000 a700 1001 0000
+ 0x0030: c20e 0000 00a7 0010 0100 00c2 0e00 0000
+ 0x0040: a700 1001 0000 c20e 0000 00a7 0010 0100
+ 0x0050: 00c2 0e00 0000 a700 1001 0000 c20e 0000
+ 0x0060: 00a7 0010 0100 00c2 0e00 0000 a700 1001
+ 0x0070: 0000 c20e 0000 00a7 0010 0100 00c2 0e00
+ 0x0080: 0000 a700 1001 0000 c20e 0000 00a7 0010
+ 0x0090: 0100 00c2 0e00 0000 a700 1001 0000 c20e
+ 0x00a0: 0000 00a7 0010 0100 00c2 0e00 0000 a700
+ 0x00b0: 1001 0000 c20e 0000 00a7 0010 0100 00c2
+ 0x00c0: 0e00 0000 a700 1001 0000 c20e 0000 00a7
+ 0x00d0: 0010 0100 00c2 0e00 0000 a700 1001 0000
+ 0x00e0: c20e 0000 00a7 0010 0100 00c2 0e00 0000
+ 0x00f0: a700 1001 0000 c20e 0000 00a7 0010 0100
+ End TLV (0), length 194
diff --git a/tests/lldp-infinite-loop-2.pcap b/tests/lldp-infinite-loop-2.pcap
new file mode 100644
index 0000000..e859983
--- /dev/null
+++ b/tests/lldp-infinite-loop-2.pcap
Binary files differ
diff --git a/tests/lldp_8021_linkagg-v.out b/tests/lldp_8021_linkagg-v.out
new file mode 100644
index 0000000..d6827c5
--- /dev/null
+++ b/tests/lldp_8021_linkagg-v.out
@@ -0,0 +1,8 @@
+ 1 05:27:44.860864 LLDP, length 11
+ Organization specific TLV (127), length 9: OUI Ethernet bridged (0x0080c2)
+ Link aggregation Subtype (7)
+ aggregation status [supported, enabled], aggregation port ID 100
+ 2 05:27:46.902307 LLDP, length 11
+ Organization specific TLV (127), length 9: OUI Ethernet bridged (0x0080c2)
+ Link aggregation Subtype (7)
+ aggregation status [supported], aggregation port ID 0
diff --git a/tests/lldp_8021_linkagg-vv.out b/tests/lldp_8021_linkagg-vv.out
new file mode 100644
index 0000000..a717006
--- /dev/null
+++ b/tests/lldp_8021_linkagg-vv.out
@@ -0,0 +1,10 @@
+ 1 05:27:44.860864 LLDP, length 11
+ Organization specific TLV (127), length 9: OUI Ethernet bridged (0x0080c2)
+ Link aggregation Subtype (7)
+ aggregation status [supported, enabled], aggregation port ID 100
+ 0x0000: 0080 c207 0300 0000 64
+ 2 05:27:46.902307 LLDP, length 11
+ Organization specific TLV (127), length 9: OUI Ethernet bridged (0x0080c2)
+ Link aggregation Subtype (7)
+ aggregation status [supported], aggregation port ID 0
+ 0x0000: 0080 c207 0100 0000 00
diff --git a/tests/lldp_8021_linkagg.pcap b/tests/lldp_8021_linkagg.pcap
new file mode 100644
index 0000000..4446457
--- /dev/null
+++ b/tests/lldp_8021_linkagg.pcap
Binary files differ
diff --git a/tests/lldp_8023_mtu-oobr.out b/tests/lldp_8023_mtu-oobr.out
new file mode 100644
index 0000000..b6c624a
--- /dev/null
+++ b/tests/lldp_8023_mtu-oobr.out
@@ -0,0 +1,3 @@
+ 1 12:44:48.8388608 LLDP, length 262130
+ Organization specific TLV (127), length 4: OUI IEEE 802.3 Private (0x00120f)
+ Max frame size Subtype (4) [|lldp]
diff --git a/tests/lldp_8023_mtu-oobr.pcap b/tests/lldp_8023_mtu-oobr.pcap
new file mode 100644
index 0000000..164a0ad
--- /dev/null
+++ b/tests/lldp_8023_mtu-oobr.pcap
Binary files differ
diff --git a/tests/lldp_asan.out b/tests/lldp_asan.out
new file mode 100644
index 0000000..706936b
--- /dev/null
+++ b/tests/lldp_asan.out
@@ -0,0 +1,14 @@
+ 1 01:44:45.1048579 LLDP, length 296
+ Chassis ID TLV (1), length 6
+ Subtype Network address (5): AFI IPv4 (1): 0.0.32.0
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [none] (0x00)
+ PMD autoneg capability [10BASE-T hdx, 10BASE-T fdx, 100BASE-T4, 100BASE-TX hdx, 100BASE-TX fdx, 100BASE-T2 hdx, 100BASE-T2 fdx, Pause for fdx links, Asym PAUSE for fdx, Sym PAUSE for fdx, Asym and Sym PAUSE for fdx, 1000BASE-{X LX SX CX} hdx, 1000BASE-{X LX SX CX} fdx, 1000BASE-T hdx, 1000BASE-T fdx] (0xffff)
+ MAU type unknown (0x2000)
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [none] (0x00)
+ PMD autoneg capability [Pause for fdx links, Asym PAUSE for fdx, Sym PAUSE for fdx, Asym and Sym PAUSE for fdx, 1000BASE-{X LX SX CX} hdx, 1000BASE-{X LX SX CX} fdx, 1000BASE-T hdx] (0x00fe)
+ MAU type unknown (0x0f00)
+ End TLV (0), length 0
diff --git a/tests/lldp_asan.pcap b/tests/lldp_asan.pcap
new file mode 100644
index 0000000..8dea148
--- /dev/null
+++ b/tests/lldp_asan.pcap
Binary files differ
diff --git a/tests/lldp_cdp-ev.out b/tests/lldp_cdp-ev.out
new file mode 100644
index 0000000..ee1e8c3
--- /dev/null
+++ b/tests/lldp_cdp-ev.out
@@ -0,0 +1,252 @@
+ 1 03:00:34.141848 00:18:ba:98:68:8f > 01:00:0c:cc:cc:cc, 802.3, length 374: LLC, dsap SNAP (0xaa) Individual, ssap SNAP (0xaa) Command, ctrl 0x03: oui Cisco (0x00000c), pid CDP (0x2000), length 366: CDPv2, ttl: 180s, checksum: 0x0bea (unverified), length 366
+ Device-ID (0x01), value length: 2 bytes: 'S1'
+ Version String (0x05), value length: 190 bytes:
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)
+ Copyright (c) 1986-2008 by Cisco Systems, Inc.
+ Compiled Sat 05-Jan-08 00:15 by weiliu
+ Platform (0x06), value length: 19 bytes: 'cisco WS-C3560-24TS'
+ Address (0x02), value length: 13 bytes: IPv4 (1) 0.0.0.0
+ Port-ID (0x03), value length: 16 bytes: 'FastEthernet0/13'
+ Capability (0x04), value length: 4 bytes: (0x00000028): L2 Switch, IGMP snooping
+ Protocol-Hello option (0x08), value length: 32 bytes:
+ VTP Management Domain (0x09), value length: 0 bytes: ''
+ Native VLAN ID (0x0a), value length: 2 bytes: 1
+ Duplex (0x0b), value length: 1 byte: full
+ AVVID trust bitmap (0x12), value length: 1 byte: 0x00
+ AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00
+ Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 0.0.0.0
+ unknown field type (0x1a), value length: 12 bytes:
+ 0x0000: 0000 0001 0000 0000 ffff ffff
+ 2 03:00:39.208974 00:19:2f:a7:b2:8d > 01:00:0c:cc:cc:cc, 802.3, length 378: LLC, dsap SNAP (0xaa) Individual, ssap SNAP (0xaa) Command, ctrl 0x03: oui Cisco (0x00000c), pid CDP (0x2000), length 370: CDPv2, ttl: 180s, checksum: 0x971d (unverified), length 370
+ Device-ID (0x01), value length: 2 bytes: 'S2'
+ Version String (0x05), value length: 190 bytes:
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)
+ Copyright (c) 1986-2008 by Cisco Systems, Inc.
+ Compiled Sat 05-Jan-08 00:15 by weiliu
+ Platform (0x06), value length: 20 bytes: 'cisco WS-C3560G-24PS'
+ Address (0x02), value length: 13 bytes: IPv4 (1) 0.0.0.0
+ Port-ID (0x03), value length: 19 bytes: 'GigabitEthernet0/13'
+ Capability (0x04), value length: 4 bytes: (0x00000028): L2 Switch, IGMP snooping
+ Protocol-Hello option (0x08), value length: 32 bytes:
+ VTP Management Domain (0x09), value length: 0 bytes: ''
+ Native VLAN ID (0x0a), value length: 2 bytes: 1
+ Duplex (0x0b), value length: 1 byte: full
+ AVVID trust bitmap (0x12), value length: 1 byte: 0x00
+ AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00
+ Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 0.0.0.0
+ unknown field type (0x1a), value length: 12 bytes:
+ 0x0000: 0000 0001 0000 0000 ffff ffff
+ 3 03:00:41.163180 00:19:2f:a7:b2:8d > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 296: LLDP, length 282
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:19:2f:a7:b2:8d
+ Port ID TLV (2), length 13
+ Subtype Interface alias (1): Uplink to S1
+ Time to Live TLV (3), length 2: TTL 120s
+ System Name TLV (5), length 12: S2.cisco.com
+ System Description TLV (6), length 190
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)^JCopyright (c) 1986-2008 by Cisco Systems, Inc.^JCompiled Sat 05-Jan-08 00:15 by weiliu
+ Port Description TLV (4), length 19: GigabitEthernet0/13
+ System Capabilities TLV (7), length 4
+ System Capabilities [Bridge, Router] (0x0014)
+ Enabled Capabilities [Bridge] (0x0004)
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [supported, enabled] (0x03)
+ PMD autoneg capability [10BASE-T hdx, Sym PAUSE for fdx, Asym and Sym PAUSE for fdx, 1000BASE-{X LX SX CX} fdx, 1000BASE-T hdx] (0xc036)
+ MAU type 100BASETX fdx (0x0010)
+ End TLV (0), length 0
+ 4 03:00:42.629578 00:18:ba:98:68:8f > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 287: LLDP, length 273
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:18:ba:98:68:8f
+ Port ID TLV (2), length 7
+ Subtype Local (7): Fa0/13
+ Time to Live TLV (3), length 2: TTL 120s
+ System Name TLV (5), length 12: S1.cisco.com
+ System Description TLV (6), length 190
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)^JCopyright (c) 1986-2008 by Cisco Systems, Inc.^JCompiled Sat 05-Jan-08 00:15 by weiliu
+ Port Description TLV (4), length 16: FastEthernet0/13
+ System Capabilities TLV (7), length 4
+ System Capabilities [Bridge, Router] (0x0014)
+ Enabled Capabilities [Bridge] (0x0004)
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [supported, enabled] (0x03)
+ PMD autoneg capability [Sym PAUSE for fdx, Asym and Sym PAUSE for fdx, 1000BASE-{X LX SX CX} fdx, 1000BASE-T hdx] (0x0036)
+ MAU type 100BASETX fdx (0x0010)
+ End TLV (0), length 0
+ 5 03:01:10.968978 00:19:2f:a7:b2:8d > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 296: LLDP, length 282
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:19:2f:a7:b2:8d
+ Port ID TLV (2), length 13
+ Subtype Interface alias (1): Uplink to S1
+ Time to Live TLV (3), length 2: TTL 120s
+ System Name TLV (5), length 12: S2.cisco.com
+ System Description TLV (6), length 190
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)^JCopyright (c) 1986-2008 by Cisco Systems, Inc.^JCompiled Sat 05-Jan-08 00:15 by weiliu
+ Port Description TLV (4), length 19: GigabitEthernet0/13
+ System Capabilities TLV (7), length 4
+ System Capabilities [Bridge, Router] (0x0014)
+ Enabled Capabilities [Bridge] (0x0004)
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [supported, enabled] (0x03)
+ PMD autoneg capability [10BASE-T hdx, Sym PAUSE for fdx, Asym and Sym PAUSE for fdx, 1000BASE-{X LX SX CX} fdx, 1000BASE-T hdx] (0xc036)
+ MAU type 100BASETX fdx (0x0010)
+ End TLV (0), length 0
+ 6 03:01:12.333563 00:18:ba:98:68:8f > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 287: LLDP, length 273
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:18:ba:98:68:8f
+ Port ID TLV (2), length 7
+ Subtype Local (7): Fa0/13
+ Time to Live TLV (3), length 2: TTL 120s
+ System Name TLV (5), length 12: S1.cisco.com
+ System Description TLV (6), length 190
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)^JCopyright (c) 1986-2008 by Cisco Systems, Inc.^JCompiled Sat 05-Jan-08 00:15 by weiliu
+ Port Description TLV (4), length 16: FastEthernet0/13
+ System Capabilities TLV (7), length 4
+ System Capabilities [Bridge, Router] (0x0014)
+ Enabled Capabilities [Bridge] (0x0004)
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [supported, enabled] (0x03)
+ PMD autoneg capability [Sym PAUSE for fdx, Asym and Sym PAUSE for fdx, 1000BASE-{X LX SX CX} fdx, 1000BASE-T hdx] (0x0036)
+ MAU type 100BASETX fdx (0x0010)
+ End TLV (0), length 0
+ 7 03:01:34.144187 00:18:ba:98:68:8f > 01:00:0c:cc:cc:cc, 802.3, length 374: LLC, dsap SNAP (0xaa) Individual, ssap SNAP (0xaa) Command, ctrl 0x03: oui Cisco (0x00000c), pid CDP (0x2000), length 366: CDPv2, ttl: 180s, checksum: 0x0be9 (unverified), length 366
+ Device-ID (0x01), value length: 2 bytes: 'S1'
+ Version String (0x05), value length: 190 bytes:
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)
+ Copyright (c) 1986-2008 by Cisco Systems, Inc.
+ Compiled Sat 05-Jan-08 00:15 by weiliu
+ Platform (0x06), value length: 19 bytes: 'cisco WS-C3560-24TS'
+ Address (0x02), value length: 13 bytes: IPv4 (1) 0.0.0.0
+ Port-ID (0x03), value length: 16 bytes: 'FastEthernet0/13'
+ Capability (0x04), value length: 4 bytes: (0x00000028): L2 Switch, IGMP snooping
+ Protocol-Hello option (0x08), value length: 32 bytes:
+ VTP Management Domain (0x09), value length: 0 bytes: ''
+ Native VLAN ID (0x0a), value length: 2 bytes: 1
+ Duplex (0x0b), value length: 1 byte: full
+ AVVID trust bitmap (0x12), value length: 1 byte: 0x00
+ AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00
+ Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 0.0.0.0
+ unknown field type (0x1a), value length: 12 bytes:
+ 0x0000: 0000 0001 0000 0000 ffff ffff
+ 8 03:01:39.211811 00:19:2f:a7:b2:8d > 01:00:0c:cc:cc:cc, 802.3, length 378: LLC, dsap SNAP (0xaa) Individual, ssap SNAP (0xaa) Command, ctrl 0x03: oui Cisco (0x00000c), pid CDP (0x2000), length 370: CDPv2, ttl: 180s, checksum: 0x971c (unverified), length 370
+ Device-ID (0x01), value length: 2 bytes: 'S2'
+ Version String (0x05), value length: 190 bytes:
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)
+ Copyright (c) 1986-2008 by Cisco Systems, Inc.
+ Compiled Sat 05-Jan-08 00:15 by weiliu
+ Platform (0x06), value length: 20 bytes: 'cisco WS-C3560G-24PS'
+ Address (0x02), value length: 13 bytes: IPv4 (1) 0.0.0.0
+ Port-ID (0x03), value length: 19 bytes: 'GigabitEthernet0/13'
+ Capability (0x04), value length: 4 bytes: (0x00000028): L2 Switch, IGMP snooping
+ Protocol-Hello option (0x08), value length: 32 bytes:
+ VTP Management Domain (0x09), value length: 0 bytes: ''
+ Native VLAN ID (0x0a), value length: 2 bytes: 1
+ Duplex (0x0b), value length: 1 byte: full
+ AVVID trust bitmap (0x12), value length: 1 byte: 0x00
+ AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00
+ Management Addresses (0x16), value length: 13 bytes: IPv4 (1) 0.0.0.0
+ unknown field type (0x1a), value length: 12 bytes:
+ 0x0000: 0000 0001 0000 0000 ffff ffff
+ 9 03:01:40.932913 00:19:2f:a7:b2:8d > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 296: LLDP, length 282
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:19:2f:a7:b2:8d
+ Port ID TLV (2), length 13
+ Subtype Interface alias (1): Uplink to S1
+ Time to Live TLV (3), length 2: TTL 120s
+ System Name TLV (5), length 12: S2.cisco.com
+ System Description TLV (6), length 190
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)^JCopyright (c) 1986-2008 by Cisco Systems, Inc.^JCompiled Sat 05-Jan-08 00:15 by weiliu
+ Port Description TLV (4), length 19: GigabitEthernet0/13
+ System Capabilities TLV (7), length 4
+ System Capabilities [Bridge, Router] (0x0014)
+ Enabled Capabilities [Bridge] (0x0004)
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [supported, enabled] (0x03)
+ PMD autoneg capability [10BASE-T hdx, Sym PAUSE for fdx, Asym and Sym PAUSE for fdx, 1000BASE-{X LX SX CX} fdx, 1000BASE-T hdx] (0xc036)
+ MAU type 100BASETX fdx (0x0010)
+ End TLV (0), length 0
+ 10 03:01:42.087510 00:18:ba:98:68:8f > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 287: LLDP, length 273
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:18:ba:98:68:8f
+ Port ID TLV (2), length 7
+ Subtype Local (7): Fa0/13
+ Time to Live TLV (3), length 2: TTL 120s
+ System Name TLV (5), length 12: S1.cisco.com
+ System Description TLV (6), length 190
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)^JCopyright (c) 1986-2008 by Cisco Systems, Inc.^JCompiled Sat 05-Jan-08 00:15 by weiliu
+ Port Description TLV (4), length 16: FastEthernet0/13
+ System Capabilities TLV (7), length 4
+ System Capabilities [Bridge, Router] (0x0014)
+ Enabled Capabilities [Bridge] (0x0004)
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [supported, enabled] (0x03)
+ PMD autoneg capability [Sym PAUSE for fdx, Asym and Sym PAUSE for fdx, 1000BASE-{X LX SX CX} fdx, 1000BASE-T hdx] (0x0036)
+ MAU type 100BASETX fdx (0x0010)
+ End TLV (0), length 0
+ 11 03:02:10.693795 00:19:2f:a7:b2:8d > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 296: LLDP, length 282
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:19:2f:a7:b2:8d
+ Port ID TLV (2), length 13
+ Subtype Interface alias (1): Uplink to S1
+ Time to Live TLV (3), length 2: TTL 120s
+ System Name TLV (5), length 12: S2.cisco.com
+ System Description TLV (6), length 190
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)^JCopyright (c) 1986-2008 by Cisco Systems, Inc.^JCompiled Sat 05-Jan-08 00:15 by weiliu
+ Port Description TLV (4), length 19: GigabitEthernet0/13
+ System Capabilities TLV (7), length 4
+ System Capabilities [Bridge, Router] (0x0014)
+ Enabled Capabilities [Bridge] (0x0004)
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [supported, enabled] (0x03)
+ PMD autoneg capability [10BASE-T hdx, Sym PAUSE for fdx, Asym and Sym PAUSE for fdx, 1000BASE-{X LX SX CX} fdx, 1000BASE-T hdx] (0xc036)
+ MAU type 100BASETX fdx (0x0010)
+ End TLV (0), length 0
+ 12 03:02:11.900774 00:18:ba:98:68:8f > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 287: LLDP, length 273
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:18:ba:98:68:8f
+ Port ID TLV (2), length 7
+ Subtype Local (7): Fa0/13
+ Time to Live TLV (3), length 2: TTL 120s
+ System Name TLV (5), length 12: S1.cisco.com
+ System Description TLV (6), length 190
+ Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(44)SE, RELEASE SOFTWARE (fc1)^JCopyright (c) 1986-2008 by Cisco Systems, Inc.^JCompiled Sat 05-Jan-08 00:15 by weiliu
+ Port Description TLV (4), length 16: FastEthernet0/13
+ System Capabilities TLV (7), length 4
+ System Capabilities [Bridge, Router] (0x0014)
+ Enabled Capabilities [Bridge] (0x0004)
+ Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
+ Port VLAN Id Subtype (1)
+ port vlan id (PVID): 1
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [supported, enabled] (0x03)
+ PMD autoneg capability [Sym PAUSE for fdx, Asym and Sym PAUSE for fdx, 1000BASE-{X LX SX CX} fdx, 1000BASE-T hdx] (0x0036)
+ MAU type 100BASETX fdx (0x0010)
+ End TLV (0), length 0
diff --git a/tests/lldp_mgmt_addr_tlv_asan.out b/tests/lldp_mgmt_addr_tlv_asan.out
new file mode 100644
index 0000000..60b26c3
--- /dev/null
+++ b/tests/lldp_mgmt_addr_tlv_asan.out
@@ -0,0 +1,7 @@
+ 1 18:21:27.2686979 LLDP, length 262130
+ Management Address TLV (8), length 15
+ Management Address length 6, AFI Reserved (0), no AF printer !
+ Unknown Interface Numbering (10): 666137427 [|lldp]
+ 2 14:02:40.1109776 00:00:00:a0:d4:c3 > 06:04:e8:03:00:02, ethertype Unknown (0xb2a1), length 262144:
+ 0x0000: 0200 efff e5ff 804f 006e 0026 0000 0000 .......O.n.&....
+ 0x0010: 01 .
diff --git a/tests/lldp_mgmt_addr_tlv_asan.pcap b/tests/lldp_mgmt_addr_tlv_asan.pcap
new file mode 100644
index 0000000..f6fd949
--- /dev/null
+++ b/tests/lldp_mgmt_addr_tlv_asan.pcap
Binary files differ
diff --git a/tests/lldp_mudurl-v.out b/tests/lldp_mudurl-v.out
new file mode 100644
index 0000000..10060a9
--- /dev/null
+++ b/tests/lldp_mudurl-v.out
@@ -0,0 +1,62 @@
+ 1 13:30:12.871661 00:23:54:c2:57:02 > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 302: LLDP, length 288
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:23:54:c2:57:02
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 00:23:54:c2:57:02
+ Time to Live TLV (3), length 2: TTL 120s
+ System Name TLV (5), length 28: upstairs.ofcourseimright.com
+ System Description TLV (6), length 92
+ Ubuntu 14.04.5 LTS Linux 3.13.0-106-generic #153-Ubuntu SMP Tue Dec 6 15:45:13 UTC 2016 i686
+ System Capabilities TLV (7), length 4
+ System Capabilities [Bridge, WLAN AP, Router, Station Only] (0x009c)
+ Enabled Capabilities [WLAN AP] (0x0008)
+ Management Address TLV (8), length 12
+ Management Address length 5, AFI IPv4 (1): 62.12.173.114
+ Interface Index Interface Numbering (2): 2
+ Management Address TLV (8), length 24
+ Management Address length 17, AFI IPv6 (2): 2001:8a8:1006:4:223:54ff:fec2:5702
+ Interface Index Interface Numbering (2): 2
+ Port Description TLV (4), length 4: eth0
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ Link aggregation Subtype (3)
+ aggregation status [supported], aggregation port ID 0
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [supported, enabled] (0x03)
+ PMD autoneg capability [10BASE-T hdx, 10BASE-T fdx, 100BASE-TX hdx, 100BASE-TX fdx, Pause for fdx links, Asym PAUSE for fdx, 1000BASE-T hdx, 1000BASE-T fdx] (0xecc3)
+ MAU type 100BASETX fdx (0x0010)
+ Organization specific TLV (127), length 64: OUI IANA (0x00005e)
+ MUD-URL Subtype (1)
+ MUD-URL=https://imright.mud.example.com/.well-known/mud/v1/vomitv2.0
+ End TLV (0), length 0
+ 2 13:30:42.880485 00:23:54:c2:57:02 > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 302: LLDP, length 288
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:23:54:c2:57:02
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 00:23:54:c2:57:02
+ Time to Live TLV (3), length 2: TTL 120s
+ System Name TLV (5), length 28: upstairs.ofcourseimright.com
+ System Description TLV (6), length 92
+ Ubuntu 14.04.5 LTS Linux 3.13.0-106-generic #153-Ubuntu SMP Tue Dec 6 15:45:13 UTC 2016 i686
+ System Capabilities TLV (7), length 4
+ System Capabilities [Bridge, WLAN AP, Router, Station Only] (0x009c)
+ Enabled Capabilities [WLAN AP] (0x0008)
+ Management Address TLV (8), length 12
+ Management Address length 5, AFI IPv4 (1): 62.12.173.114
+ Interface Index Interface Numbering (2): 2
+ Management Address TLV (8), length 24
+ Management Address length 17, AFI IPv6 (2): 2001:8a8:1006:4:223:54ff:fec2:5702
+ Interface Index Interface Numbering (2): 2
+ Port Description TLV (4), length 4: eth0
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ Link aggregation Subtype (3)
+ aggregation status [supported], aggregation port ID 0
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [supported, enabled] (0x03)
+ PMD autoneg capability [10BASE-T hdx, 10BASE-T fdx, 100BASE-TX hdx, 100BASE-TX fdx, Pause for fdx links, Asym PAUSE for fdx, 1000BASE-T hdx, 1000BASE-T fdx] (0xecc3)
+ MAU type 100BASETX fdx (0x0010)
+ Organization specific TLV (127), length 64: OUI IANA (0x00005e)
+ MUD-URL Subtype (1)
+ MUD-URL=https://imright.mud.example.com/.well-known/mud/v1/vomitv2.0
+ End TLV (0), length 0
diff --git a/tests/lldp_mudurl-vv.out b/tests/lldp_mudurl-vv.out
new file mode 100644
index 0000000..0473865
--- /dev/null
+++ b/tests/lldp_mudurl-vv.out
@@ -0,0 +1,106 @@
+ 1 13:30:12.871661 00:23:54:c2:57:02 > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 302: LLDP, length 288
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:23:54:c2:57:02
+ 0x0000: 0400 2354 c257 02
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 00:23:54:c2:57:02
+ 0x0000: 0300 2354 c257 02
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ System Name TLV (5), length 28: upstairs.ofcourseimright.com
+ 0x0000: 7570 7374 6169 7273 2e6f 6663 6f75 7273
+ 0x0010: 6569 6d72 6967 6874 2e63 6f6d
+ System Description TLV (6), length 92
+ Ubuntu 14.04.5 LTS Linux 3.13.0-106-generic #153-Ubuntu SMP Tue Dec 6 15:45:13 UTC 2016 i686
+ 0x0000: 5562 756e 7475 2031 342e 3034 2e35 204c
+ 0x0010: 5453 204c 696e 7578 2033 2e31 332e 302d
+ 0x0020: 3130 362d 6765 6e65 7269 6320 2331 3533
+ 0x0030: 2d55 6275 6e74 7520 534d 5020 5475 6520
+ 0x0040: 4465 6320 3620 3135 3a34 353a 3133 2055
+ 0x0050: 5443 2032 3031 3620 6936 3836
+ System Capabilities TLV (7), length 4
+ System Capabilities [Bridge, WLAN AP, Router, Station Only] (0x009c)
+ Enabled Capabilities [WLAN AP] (0x0008)
+ 0x0000: 009c 0008
+ Management Address TLV (8), length 12
+ Management Address length 5, AFI IPv4 (1): 62.12.173.114
+ Interface Index Interface Numbering (2): 2
+ 0x0000: 0501 3e0c ad72 0200 0000 0200
+ Management Address TLV (8), length 24
+ Management Address length 17, AFI IPv6 (2): 2001:8a8:1006:4:223:54ff:fec2:5702
+ Interface Index Interface Numbering (2): 2
+ 0x0000: 1102 2001 08a8 1006 0004 0223 54ff fec2
+ 0x0010: 5702 0200 0000 0200
+ Port Description TLV (4), length 4: eth0
+ 0x0000: 6574 6830
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ Link aggregation Subtype (3)
+ aggregation status [supported], aggregation port ID 0
+ 0x0000: 0012 0f03 0100 0000 00
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [supported, enabled] (0x03)
+ PMD autoneg capability [10BASE-T hdx, 10BASE-T fdx, 100BASE-TX hdx, 100BASE-TX fdx, Pause for fdx links, Asym PAUSE for fdx, 1000BASE-T hdx, 1000BASE-T fdx] (0xecc3)
+ MAU type 100BASETX fdx (0x0010)
+ 0x0000: 0012 0f01 03ec c300 10
+ Organization specific TLV (127), length 64: OUI IANA (0x00005e)
+ MUD-URL Subtype (1)
+ MUD-URL=https://imright.mud.example.com/.well-known/mud/v1/vomitv2.0
+ 0x0000: 0000 5e01 6874 7470 733a 2f2f 696d 7269
+ 0x0010: 6768 742e 6d75 642e 6578 616d 706c 652e
+ 0x0020: 636f 6d2f 2e77 656c 6c2d 6b6e 6f77 6e2f
+ 0x0030: 6d75 642f 7631 2f76 6f6d 6974 7632 2e30
+ End TLV (0), length 0
+ 2 13:30:42.880485 00:23:54:c2:57:02 > 01:80:c2:00:00:0e, ethertype LLDP (0x88cc), length 302: LLDP, length 288
+ Chassis ID TLV (1), length 7
+ Subtype MAC address (4): 00:23:54:c2:57:02
+ 0x0000: 0400 2354 c257 02
+ Port ID TLV (2), length 7
+ Subtype MAC address (3): 00:23:54:c2:57:02
+ 0x0000: 0300 2354 c257 02
+ Time to Live TLV (3), length 2: TTL 120s
+ 0x0000: 0078
+ System Name TLV (5), length 28: upstairs.ofcourseimright.com
+ 0x0000: 7570 7374 6169 7273 2e6f 6663 6f75 7273
+ 0x0010: 6569 6d72 6967 6874 2e63 6f6d
+ System Description TLV (6), length 92
+ Ubuntu 14.04.5 LTS Linux 3.13.0-106-generic #153-Ubuntu SMP Tue Dec 6 15:45:13 UTC 2016 i686
+ 0x0000: 5562 756e 7475 2031 342e 3034 2e35 204c
+ 0x0010: 5453 204c 696e 7578 2033 2e31 332e 302d
+ 0x0020: 3130 362d 6765 6e65 7269 6320 2331 3533
+ 0x0030: 2d55 6275 6e74 7520 534d 5020 5475 6520
+ 0x0040: 4465 6320 3620 3135 3a34 353a 3133 2055
+ 0x0050: 5443 2032 3031 3620 6936 3836
+ System Capabilities TLV (7), length 4
+ System Capabilities [Bridge, WLAN AP, Router, Station Only] (0x009c)
+ Enabled Capabilities [WLAN AP] (0x0008)
+ 0x0000: 009c 0008
+ Management Address TLV (8), length 12
+ Management Address length 5, AFI IPv4 (1): 62.12.173.114
+ Interface Index Interface Numbering (2): 2
+ 0x0000: 0501 3e0c ad72 0200 0000 0200
+ Management Address TLV (8), length 24
+ Management Address length 17, AFI IPv6 (2): 2001:8a8:1006:4:223:54ff:fec2:5702
+ Interface Index Interface Numbering (2): 2
+ 0x0000: 1102 2001 08a8 1006 0004 0223 54ff fec2
+ 0x0010: 5702 0200 0000 0200
+ Port Description TLV (4), length 4: eth0
+ 0x0000: 6574 6830
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ Link aggregation Subtype (3)
+ aggregation status [supported], aggregation port ID 0
+ 0x0000: 0012 0f03 0100 0000 00
+ Organization specific TLV (127), length 9: OUI IEEE 802.3 Private (0x00120f)
+ MAC/PHY configuration/status Subtype (1)
+ autonegotiation [supported, enabled] (0x03)
+ PMD autoneg capability [10BASE-T hdx, 10BASE-T fdx, 100BASE-TX hdx, 100BASE-TX fdx, Pause for fdx links, Asym PAUSE for fdx, 1000BASE-T hdx, 1000BASE-T fdx] (0xecc3)
+ MAU type 100BASETX fdx (0x0010)
+ 0x0000: 0012 0f01 03ec c300 10
+ Organization specific TLV (127), length 64: OUI IANA (0x00005e)
+ MUD-URL Subtype (1)
+ MUD-URL=https://imright.mud.example.com/.well-known/mud/v1/vomitv2.0
+ 0x0000: 0000 5e01 6874 7470 733a 2f2f 696d 7269
+ 0x0010: 6768 742e 6d75 642e 6578 616d 706c 652e
+ 0x0020: 636f 6d2f 2e77 656c 6c2d 6b6e 6f77 6e2f
+ 0x0030: 6d75 642f 7631 2f76 6f6d 6974 7632 2e30
+ End TLV (0), length 0
diff --git a/tests/lldp_mudurl.pcap b/tests/lldp_mudurl.pcap
new file mode 100644
index 0000000..49d83a3
--- /dev/null
+++ b/tests/lldp_mudurl.pcap
Binary files differ
diff --git a/tests/lmp-lmp_print_data_link_subobjs-oobr.out b/tests/lmp-lmp_print_data_link_subobjs-oobr.out
new file mode 100644
index 0000000..f7b87a6
--- /dev/null
+++ b/tests/lmp-lmp_print_data_link_subobjs-oobr.out
@@ -0,0 +1,20 @@
+ 1 06:58:21.3858891542 IP (tos 0xfd,ECT(1), ttl 254, id 45839, offset 0, flags [+, DF, rsvd], proto UDP (17), length 56871, bad cksum fe07 (->ddf0)!)
+ 17.8.8.255.701 > 40.184.42.8.12:
+ LMPv1, msg-type: unknown, type: 249, Flags: [none], length: 212
+ Data Link Object (12), Class-Type: Unnumbered (3) Flags: [non-negotiable], length: 20
+ Flags: [none]
+ Local Interface ID: 2435832538 (0x912fdada)
+ Remote Interface ID: 3657433088 (0xda000000)
+ Subobject, Type: Interface Switching Type (1), Length: 4
+ Switching Type: Unknown (0)
+ Encoding Type: Unknown (0) [|lmp]
+ 2 00:02:08.1114902 IP (tos 0xfd,ECT(1), ttl 254, id 45839, offset 0, flags [+, DF, rsvd], proto UDP (17), length 56871, bad cksum fe07 (->ddf0)!)
+ 17.8.8.255.701 > 40.184.42.8.12:
+ LMPv1, msg-type: unknown, type: 249, Flags: [none], length: 212
+ Data Link Object (12), Class-Type: Unnumbered (3) Flags: [non-negotiable], length: 20
+ Flags: [none]
+ Local Interface ID: 2435832538 (0x912fdada)
+ Remote Interface ID: 3657433088 (0xda000000)
+ Subobject, Type: Interface Switching Type (1), Length: 4
+ Switching Type: Unknown (0)
+ Encoding Type: Unknown (0) [|lmp]
diff --git a/tests/lmp-lmp_print_data_link_subobjs-oobr.pcap b/tests/lmp-lmp_print_data_link_subobjs-oobr.pcap
new file mode 100644
index 0000000..661d9bd
--- /dev/null
+++ b/tests/lmp-lmp_print_data_link_subobjs-oobr.pcap
Binary files differ
diff --git a/tests/lmp-v-fptype1.out b/tests/lmp-v-fptype1.out
new file mode 100644
index 0000000..db6e28e
--- /dev/null
+++ b/tests/lmp-v-fptype1.out
@@ -0,0 +1,200 @@
+ 1 14:20:20.060006 IP (tos 0x0, ttl 1, id 44530, offset 0, flags [none], proto UDP (17), length 84)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Begin Verify, Flags: [none], length: 56
+ Link ID Object (3), Class-Type: IPv4 Local (1) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 1.0.0.0 (0x01000000)
+ Message ID Object (5), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Message ID: 3 (0x00000003)
+ Link ID Object (3), Class-Type: IPv4 Remote (2) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 1.0.0.0 (0x01000000)
+ Verify Begin Object (8), Class-Type: 1 (1) Flags: [negotiable], length: 24
+ Flags: none
+ Verify Interval: 20
+ Data links: 30
+ Encoding type: Lambda (photonic)
+ Verify Transport Mechanism: 32768 (0x8000)
+ Transmission Rate: 0.001 Mbps
+ Wavelength: 8
+ 2 14:20:20.061756 IP (tos 0x0, ttl 1, id 44531, offset 0, flags [none], proto UDP (17), length 56)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Hello, Flags: [none], length: 28
+ Control Channel ID Object (1), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Control Channel ID: 1 (0x00000001)
+ Hello Object (7), Class-Type: 1 (1) Flags: [non-negotiable], length: 12
+ Tx Seq: 50, Rx Seq: 60
+ 3 14:20:20.062080 IP (tos 0x0, ttl 1, id 44532, offset 0, flags [none], proto UDP (17), length 84)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Config NACK, Flags: [none], length: 56
+ Control Channel ID Object (1), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Control Channel ID: 1 (0x00000001)
+ Node ID Object (2), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Node ID: 10.0.50.1 (0x0a003201)
+ Control Channel ID Object (1), Class-Type: Remote (2) Flags: [non-negotiable], length: 8
+ Control Channel ID: 2 (0x00000002)
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 3 (0x00000003)
+ Node ID Object (2), Class-Type: Remote (2) Flags: [non-negotiable], length: 8
+ Node ID: 10.0.50.2 (0x0a003202)
+ Configuration Object (6), Class-Type: 1 (1) Flags: [negotiable], length: 8
+ Hello Interval: 5
+ Hello Dead Interval: 15
+ 4 14:20:20.062335 IP (tos 0x0, ttl 1, id 44533, offset 0, flags [none], proto UDP (17), length 76)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Config ACK, Flags: [none], length: 48
+ Control Channel ID Object (1), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Control Channel ID: 1 (0x00000001)
+ Node ID Object (2), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Node ID: 10.0.50.1 (0x0a003201)
+ Control Channel ID Object (1), Class-Type: Remote (2) Flags: [non-negotiable], length: 8
+ Control Channel ID: 2 (0x00000002)
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 3 (0x00000003)
+ Node ID Object (2), Class-Type: Remote (2) Flags: [non-negotiable], length: 8
+ Node ID: 10.0.50.2 (0x0a003202)
+ 5 14:20:20.062578 IP (tos 0x0, ttl 1, id 44534, offset 0, flags [none], proto UDP (17), length 68)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Config, Flags: [none], length: 40
+ Control Channel ID Object (1), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Control Channel ID: 1 (0x00000001)
+ Message ID Object (5), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Message ID: 3 (0x00000003)
+ Node ID Object (2), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Node ID: 10.0.50.1 (0x0a003201)
+ Configuration Object (6), Class-Type: 1 (1) Flags: [negotiable], length: 8
+ Hello Interval: 5
+ Hello Dead Interval: 15
+ 6 14:20:20.062787 IP (tos 0x0, ttl 1, id 44535, offset 0, flags [none], proto UDP (17), length 44)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Link Summary ACK, Flags: [none], length: 16
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 1 (0x00000001)
+ 7 14:20:20.063397 IP (tos 0x0, ttl 1, id 44536, offset 0, flags [none], proto UDP (17), length 124)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Link Summary NACK, Flags: [none], length: 96
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 1 (0x00000001)
+ Error Code Object (20), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Error Code: Unacceptable non-negotiable LINK-SUMMARY parameters, Renegotiate LINK-SUMMARY parameters, Invalid DATA-LINK Object, Unknown TE-LINK Object c-type, Unknown DATA-LINK Object c-type
+ Data Link Object (12), Class-Type: IPv4 (1) Flags: [non-negotiable], length: 36
+ Flags: [none]
+ Local Interface ID: 192.168.1.1 (0xc0a80101)
+ Remote Interface ID: 192.168.1.2 (0xc0a80102)
+ Subobject, Type: Interface Switching Type (1), Length: 12
+ Switching Type: Lambda-Switch Capable (150)
+ Encoding Type: Lambda (photonic) (8)
+ Min Reservable Bandwidth: 0.001 Mbps
+ Max Reservable Bandwidth: 0.001 Mbps
+ Subobject, Type: Wavelength (2), Length: 8
+ Wavelength: 6
+ Data Link Object (12), Class-Type: IPv4 (1) Flags: [non-negotiable], length: 36
+ Flags: [none]
+ Local Interface ID: 10.1.1.1 (0x0a010101)
+ Remote Interface ID: 10.1.1.2 (0x0a010102)
+ Subobject, Type: Interface Switching Type (1), Length: 12
+ Switching Type: Lambda-Switch Capable (150)
+ Encoding Type: ANSI/ETSI PDH (3)
+ Min Reservable Bandwidth: 9877.895 Mbps
+ Max Reservable Bandwidth: 10325.547 Mbps
+ Subobject, Type: Wavelength (2), Length: 8
+ Wavelength: 353
+ 8 14:20:20.063628 IP (tos 0x0, ttl 1, id 44537, offset 0, flags [none], proto UDP (17), length 68)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Begin Verify ACK, Flags: [none], length: 40
+ Link ID Object (3), Class-Type: IPv4 Local (1) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 1.0.0.0 (0x01000000)
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 1 (0x00000001)
+ Verify Begin ACK Object (9), Class-Type: 1 (1) Flags: [negotiable], length: 8
+ Verify Dead Interval: 50
+ Verify Transport Response: 100
+ Verify ID Object (10), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Verify ID: 5
+ 9 14:20:20.063845 IP (tos 0x0, ttl 1, id 44538, offset 0, flags [none], proto UDP (17), length 60)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Begin Verify NACK, Flags: [none], length: 32
+ Link ID Object (3), Class-Type: IPv4 Local (1) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 10.0.0.0 (0x0a000000)
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 3 (0x00000003)
+ Error Code Object (20), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Error Code: Link Verification Procedure Not supported, Unwilling to verify, Unsupported verification transport mechanism
+ 10 14:20:20.064049 IP (tos 0x0, ttl 1, id 44539, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: End Verify, Flags: [none], length: 24
+ Message ID Object (5), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Message ID: 3 (0x00000003)
+ Verify ID Object (10), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Verify ID: 5
+ 11 14:20:20.064259 IP (tos 0x0, ttl 1, id 44540, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: End Verify ACK, Flags: [none], length: 24
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 3 (0x00000003)
+ Verify ID Object (10), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Verify ID: 5
+ 12 14:20:20.064464 IP (tos 0x0, ttl 1, id 44541, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Test, Flags: [none], length: 24
+ Interface ID Object (4), Class-Type: IPv4 Local (1) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 1.0.0.0 (0x01000000)
+ Verify ID Object (10), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Verify ID: 5
+ 13 14:20:20.064669 IP (tos 0x0, ttl 1, id 44542, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Test Status Failure, Flags: [none], length: 24
+ Message ID Object (5), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Message ID: 1 (0x00000001)
+ Verify ID Object (10), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Verify ID: 5
+ 14 14:20:20.064873 IP (tos 0x0, ttl 1, id 44543, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Test Status ACK, Flags: [none], length: 24
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 1 (0x00000001)
+ Verify ID Object (10), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Verify ID: 5
+ 15 14:20:20.065080 IP (tos 0x0, ttl 1, id 44544, offset 0, flags [none], proto UDP (17), length 44)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Channel Status ACK, Flags: [none], length: 16
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 3 (0x00000003)
+ 16 14:20:20.065317 IP (tos 0x0, ttl 1, id 44545, offset 0, flags [none], proto UDP (17), length 64)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Channel Status Request, Flags: [none], length: 36
+ Link ID Object (3), Class-Type: IPv4 Local (1) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 1.0.0.0 (0x01000000)
+ Message ID Object (5), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Message ID: 3 (0x00000003)
+ Channel Status Request Object (14), Class-Type: IPv4 (1) Flags: [non-negotiable], length: 12
+ Interface ID: 2.0.0.0 (0x02000000)
+ Interface ID: 2.0.0.0 (0x02000000)
+ 17 14:20:20.065542 IP (tos 0x0, ttl 1, id 44546, offset 0, flags [none], proto UDP (17), length 72)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Channel Status, Flags: [none], length: 44
+ Link ID Object (3), Class-Type: IPv4 Local (1) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 1.0.0.0 (0x01000000)
+ Message ID Object (5), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Message ID: 3 (0x00000003)
+ Channel Status Object (13), Class-Type: IPv4 (1) Flags: [non-negotiable], length: 20
+ Interface ID: 1.0.0.0 (0x01000000)
+ Active: Allocated (1)
+ Direction: Transmit (1)
+ Channel Status: Signal Fail (3)
+ Interface ID: 1.0.0.0 (0x01000000)
+ Active: Allocated (1)
+ Direction: Receive (0)
+ Channel Status: Signal Degraded (2)
+ 18 14:20:20.065749 IP (tos 0x0, ttl 1, id 44547, offset 0, flags [none], proto UDP (17), length 64)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Channel Status Response, Flags: [none], length: 36
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 3 (0x00000003)
+ Channel Status Object (13), Class-Type: IPv4 (1) Flags: [non-negotiable], length: 20
+ Interface ID: 1.0.0.0 (0x01000000)
+ Active: Allocated (1)
+ Direction: Transmit (1)
+ Channel Status: Signal Degraded (2)
+ Interface ID: 1.0.0.0 (0x01000000)
+ Active: Allocated (1)
+ Direction: Transmit (1)
+ Channel Status: Signal Okay (1)
diff --git a/tests/lmp-v-fptype2.out b/tests/lmp-v-fptype2.out
new file mode 100644
index 0000000..acb28a8
--- /dev/null
+++ b/tests/lmp-v-fptype2.out
@@ -0,0 +1,200 @@
+ 1 14:20:20.060006 IP (tos 0x0, ttl 1, id 44530, offset 0, flags [none], proto UDP (17), length 84)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Begin Verify, Flags: [none], length: 56
+ Link ID Object (3), Class-Type: IPv4 Local (1) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 1.0.0.0 (0x01000000)
+ Message ID Object (5), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Message ID: 3 (0x00000003)
+ Link ID Object (3), Class-Type: IPv4 Remote (2) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 1.0.0.0 (0x01000000)
+ Verify Begin Object (8), Class-Type: 1 (1) Flags: [negotiable], length: 24
+ Flags: none
+ Verify Interval: 20
+ Data links: 30
+ Encoding type: Lambda (photonic)
+ Verify Transport Mechanism: 32768 (0x8000)
+ Transmission Rate: 0.001 Mbps
+ Wavelength: 8
+ 2 14:20:20.061756 IP (tos 0x0, ttl 1, id 44531, offset 0, flags [none], proto UDP (17), length 56)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Hello, Flags: [none], length: 28
+ Control Channel ID Object (1), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Control Channel ID: 1 (0x00000001)
+ Hello Object (7), Class-Type: 1 (1) Flags: [non-negotiable], length: 12
+ Tx Seq: 50, Rx Seq: 60
+ 3 14:20:20.062080 IP (tos 0x0, ttl 1, id 44532, offset 0, flags [none], proto UDP (17), length 84)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Config NACK, Flags: [none], length: 56
+ Control Channel ID Object (1), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Control Channel ID: 1 (0x00000001)
+ Node ID Object (2), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Node ID: 10.0.50.1 (0x0a003201)
+ Control Channel ID Object (1), Class-Type: Remote (2) Flags: [non-negotiable], length: 8
+ Control Channel ID: 2 (0x00000002)
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 3 (0x00000003)
+ Node ID Object (2), Class-Type: Remote (2) Flags: [non-negotiable], length: 8
+ Node ID: 10.0.50.2 (0x0a003202)
+ Configuration Object (6), Class-Type: 1 (1) Flags: [negotiable], length: 8
+ Hello Interval: 5
+ Hello Dead Interval: 15
+ 4 14:20:20.062335 IP (tos 0x0, ttl 1, id 44533, offset 0, flags [none], proto UDP (17), length 76)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Config ACK, Flags: [none], length: 48
+ Control Channel ID Object (1), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Control Channel ID: 1 (0x00000001)
+ Node ID Object (2), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Node ID: 10.0.50.1 (0x0a003201)
+ Control Channel ID Object (1), Class-Type: Remote (2) Flags: [non-negotiable], length: 8
+ Control Channel ID: 2 (0x00000002)
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 3 (0x00000003)
+ Node ID Object (2), Class-Type: Remote (2) Flags: [non-negotiable], length: 8
+ Node ID: 10.0.50.2 (0x0a003202)
+ 5 14:20:20.062578 IP (tos 0x0, ttl 1, id 44534, offset 0, flags [none], proto UDP (17), length 68)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Config, Flags: [none], length: 40
+ Control Channel ID Object (1), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Control Channel ID: 1 (0x00000001)
+ Message ID Object (5), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Message ID: 3 (0x00000003)
+ Node ID Object (2), Class-Type: Local (1) Flags: [non-negotiable], length: 8
+ Node ID: 10.0.50.1 (0x0a003201)
+ Configuration Object (6), Class-Type: 1 (1) Flags: [negotiable], length: 8
+ Hello Interval: 5
+ Hello Dead Interval: 15
+ 6 14:20:20.062787 IP (tos 0x0, ttl 1, id 44535, offset 0, flags [none], proto UDP (17), length 44)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Link Summary ACK, Flags: [none], length: 16
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 1 (0x00000001)
+ 7 14:20:20.063397 IP (tos 0x0, ttl 1, id 44536, offset 0, flags [none], proto UDP (17), length 124)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Link Summary NACK, Flags: [none], length: 96
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 1 (0x00000001)
+ Error Code Object (20), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Error Code: Unacceptable non-negotiable LINK-SUMMARY parameters, Renegotiate LINK-SUMMARY parameters, Invalid DATA-LINK Object, Unknown TE-LINK Object c-type, Unknown DATA-LINK Object c-type
+ Data Link Object (12), Class-Type: IPv4 (1) Flags: [non-negotiable], length: 36
+ Flags: [none]
+ Local Interface ID: 192.168.1.1 (0xc0a80101)
+ Remote Interface ID: 192.168.1.2 (0xc0a80102)
+ Subobject, Type: Interface Switching Type (1), Length: 12
+ Switching Type: Lambda-Switch Capable (150)
+ Encoding Type: Lambda (photonic) (8)
+ Min Reservable Bandwidth: 0.001 Mbps
+ Max Reservable Bandwidth: 0.001 Mbps
+ Subobject, Type: Wavelength (2), Length: 8
+ Wavelength: 6
+ Data Link Object (12), Class-Type: IPv4 (1) Flags: [non-negotiable], length: 36
+ Flags: [none]
+ Local Interface ID: 10.1.1.1 (0x0a010101)
+ Remote Interface ID: 10.1.1.2 (0x0a010102)
+ Subobject, Type: Interface Switching Type (1), Length: 12
+ Switching Type: Lambda-Switch Capable (150)
+ Encoding Type: ANSI/ETSI PDH (3)
+ Min Reservable Bandwidth: 9877.894 Mbps
+ Max Reservable Bandwidth: 10325.547 Mbps
+ Subobject, Type: Wavelength (2), Length: 8
+ Wavelength: 353
+ 8 14:20:20.063628 IP (tos 0x0, ttl 1, id 44537, offset 0, flags [none], proto UDP (17), length 68)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Begin Verify ACK, Flags: [none], length: 40
+ Link ID Object (3), Class-Type: IPv4 Local (1) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 1.0.0.0 (0x01000000)
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 1 (0x00000001)
+ Verify Begin ACK Object (9), Class-Type: 1 (1) Flags: [negotiable], length: 8
+ Verify Dead Interval: 50
+ Verify Transport Response: 100
+ Verify ID Object (10), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Verify ID: 5
+ 9 14:20:20.063845 IP (tos 0x0, ttl 1, id 44538, offset 0, flags [none], proto UDP (17), length 60)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Begin Verify NACK, Flags: [none], length: 32
+ Link ID Object (3), Class-Type: IPv4 Local (1) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 10.0.0.0 (0x0a000000)
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 3 (0x00000003)
+ Error Code Object (20), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Error Code: Link Verification Procedure Not supported, Unwilling to verify, Unsupported verification transport mechanism
+ 10 14:20:20.064049 IP (tos 0x0, ttl 1, id 44539, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: End Verify, Flags: [none], length: 24
+ Message ID Object (5), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Message ID: 3 (0x00000003)
+ Verify ID Object (10), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Verify ID: 5
+ 11 14:20:20.064259 IP (tos 0x0, ttl 1, id 44540, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: End Verify ACK, Flags: [none], length: 24
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 3 (0x00000003)
+ Verify ID Object (10), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Verify ID: 5
+ 12 14:20:20.064464 IP (tos 0x0, ttl 1, id 44541, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Test, Flags: [none], length: 24
+ Interface ID Object (4), Class-Type: IPv4 Local (1) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 1.0.0.0 (0x01000000)
+ Verify ID Object (10), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Verify ID: 5
+ 13 14:20:20.064669 IP (tos 0x0, ttl 1, id 44542, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Test Status Failure, Flags: [none], length: 24
+ Message ID Object (5), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Message ID: 1 (0x00000001)
+ Verify ID Object (10), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Verify ID: 5
+ 14 14:20:20.064873 IP (tos 0x0, ttl 1, id 44543, offset 0, flags [none], proto UDP (17), length 52)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Test Status ACK, Flags: [none], length: 24
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 1 (0x00000001)
+ Verify ID Object (10), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Verify ID: 5
+ 15 14:20:20.065080 IP (tos 0x0, ttl 1, id 44544, offset 0, flags [none], proto UDP (17), length 44)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Channel Status ACK, Flags: [none], length: 16
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 3 (0x00000003)
+ 16 14:20:20.065317 IP (tos 0x0, ttl 1, id 44545, offset 0, flags [none], proto UDP (17), length 64)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Channel Status Request, Flags: [none], length: 36
+ Link ID Object (3), Class-Type: IPv4 Local (1) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 1.0.0.0 (0x01000000)
+ Message ID Object (5), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Message ID: 3 (0x00000003)
+ Channel Status Request Object (14), Class-Type: IPv4 (1) Flags: [non-negotiable], length: 12
+ Interface ID: 2.0.0.0 (0x02000000)
+ Interface ID: 2.0.0.0 (0x02000000)
+ 17 14:20:20.065542 IP (tos 0x0, ttl 1, id 44546, offset 0, flags [none], proto UDP (17), length 72)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Channel Status, Flags: [none], length: 44
+ Link ID Object (3), Class-Type: IPv4 Local (1) Flags: [non-negotiable], length: 8
+ IPv4 Link ID: 1.0.0.0 (0x01000000)
+ Message ID Object (5), Class-Type: 1 (1) Flags: [non-negotiable], length: 8
+ Message ID: 3 (0x00000003)
+ Channel Status Object (13), Class-Type: IPv4 (1) Flags: [non-negotiable], length: 20
+ Interface ID: 1.0.0.0 (0x01000000)
+ Active: Allocated (1)
+ Direction: Transmit (1)
+ Channel Status: Signal Fail (3)
+ Interface ID: 1.0.0.0 (0x01000000)
+ Active: Allocated (1)
+ Direction: Receive (0)
+ Channel Status: Signal Degraded (2)
+ 18 14:20:20.065749 IP (tos 0x0, ttl 1, id 44547, offset 0, flags [none], proto UDP (17), length 64)
+ 10.0.12.1.49998 > 10.0.12.2.49998:
+ LMPv1, msg-type: Channel Status Response, Flags: [none], length: 36
+ Message ID Object (5), Class-Type: 2 (2) Flags: [non-negotiable], length: 8
+ Message ID Ack: 3 (0x00000003)
+ Channel Status Object (13), Class-Type: IPv4 (1) Flags: [non-negotiable], length: 20
+ Interface ID: 1.0.0.0 (0x01000000)
+ Active: Allocated (1)
+ Direction: Transmit (1)
+ Channel Status: Signal Degraded (2)
+ Interface ID: 1.0.0.0 (0x01000000)
+ Active: Allocated (1)
+ Direction: Transmit (1)
+ Channel Status: Signal Okay (1)
diff --git a/tests/lmp-v.tests b/tests/lmp-v.tests
new file mode 100644
index 0000000..c501a85
--- /dev/null
+++ b/tests/lmp-v.tests
@@ -0,0 +1,26 @@
+# -*- perl -*-
+
+# The "verbose" Link Management Protocol test involves a float calculation that
+# may produce a slightly different result depending on the compiler and the
+# version of the instruction set for which it's generating code (see GitHub
+# issue #333). The test is done with an output file that depends on the
+# floating-point type, as reported by "./tcpdump --fp-type".
+
+$testlist = [
+ {
+ config_set => 'HAVE_FPTYPE1',
+ name => 'lmp-v-fptype1',
+ input => 'lmp.pcap',
+ output => 'lmp-v-fptype1.out',
+ args => '-T lmp -v'
+ },
+ {
+ config_set => 'HAVE_FPTYPE2',
+ name => 'lmp-v-fptype2',
+ input => 'lmp.pcap',
+ output => 'lmp-v-fptype2.out',
+ args => '-T lmp -v'
+ },
+ ];
+
+1;
diff --git a/tests/lmp.out b/tests/lmp.out
new file mode 100644
index 0000000..dc484d9
--- /dev/null
+++ b/tests/lmp.out
@@ -0,0 +1,18 @@
+ 1 14:20:20.060006 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Begin Verify Message, length: 56
+ 2 14:20:20.061756 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Hello Message, length: 28
+ 3 14:20:20.062080 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Config NACK Message, length: 56
+ 4 14:20:20.062335 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Config ACK Message, length: 48
+ 5 14:20:20.062578 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Config Message, length: 40
+ 6 14:20:20.062787 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Link Summary ACK Message, length: 16
+ 7 14:20:20.063397 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Link Summary NACK Message, length: 96
+ 8 14:20:20.063628 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Begin Verify ACK Message, length: 40
+ 9 14:20:20.063845 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Begin Verify NACK Message, length: 32
+ 10 14:20:20.064049 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 End Verify Message, length: 24
+ 11 14:20:20.064259 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 End Verify ACK Message, length: 24
+ 12 14:20:20.064464 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Test Message, length: 24
+ 13 14:20:20.064669 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Test Status Failure Message, length: 24
+ 14 14:20:20.064873 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Test Status ACK Message, length: 24
+ 15 14:20:20.065080 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Channel Status ACK Message, length: 16
+ 16 14:20:20.065317 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Channel Status Request Message, length: 36
+ 17 14:20:20.065542 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Channel Status Message, length: 44
+ 18 14:20:20.065749 IP 10.0.12.1.49998 > 10.0.12.2.49998: LMPv1 Channel Status Response Message, length: 36
diff --git a/tests/lmp.pcap b/tests/lmp.pcap
new file mode 100644
index 0000000..a07e3bb
--- /dev/null
+++ b/tests/lmp.pcap
Binary files differ
diff --git a/tests/lmpv1_busyloop.out b/tests/lmpv1_busyloop.out
new file mode 100644
index 0000000..a6181b7
--- /dev/null
+++ b/tests/lmpv1_busyloop.out
@@ -0,0 +1,40 @@
+ 1 00:00:00.000000 00:80:ad:91:d8:6f > 00:0b:64:00:10:72, ethertype IPv4 (0x0800), length 725: (tos 0x0, ttl 128, id 35978, offset 0, flags [none], proto UDP (17), length 711)
+ 168.152.32.1.701 > 168.152.32.39.701: [udp sum ok]
+ LMPv1, msg-type: Config, Flags: [Control Channel Down], length: 257
+ Data Link Object (12), Class-Type: IPv4 (1) Flags: [non-negotiable], length: 516
+ Flags: [Allocated for user traffic]
+ Local Interface ID: 0.0.2.0 (0x00000200)
+ Remote Interface ID: 2.0.2.0 (0x02000200)
+ Subobject, Type: Wavelength (2), Length: 0 (too short)
+ 0x0000: 0253 e10b 0000 0200 0200 0200 0200 0200
+ 0x0010: 0200 0200 0200 0200 0200 0200 0200 0200
+ 0x0020: 0200 0200 0200 0200 0200 0200 0200 0200
+ 0x0030: 0200 0200 0200 0200 0200 0200 0200 0200
+ 0x0040: 0200 0280 6d00 0200 0200 0200 0200 0200
+ 0x0050: 0200 0200 0200 0200 0200 0200 0200 0200
+ 0x0060: 0200 0200 0200 0200 0200 0200 0200 0200
+ 0x0070: 0200 0200 0200 0200 0200 0200 0200 8202
+ 0x0080: 0002 0002 0002 0002 0002 0002 0002 0002
+ 0x0090: 0002 0002 0002 0002 0002 0002 0002 0002
+ 0x00a0: 0002 0002 0002 0002 0002 0002 0002 0002
+ 0x00b0: 2002 0002 0002 0002 0002 0002 0002 0002
+ 0x00c0: 0000 0200 0200 0002 0002 0000 0200 0200
+ 0x00d0: 0002 0002 0000 0200 0200 0002 0002 0000
+ 0x00e0: 0200 0200 0002 0002 0000 0200 0200 0002
+ 0x00f0: 0002 0000 0200 0200 0002 0002 0000 0200
+ 0x0100: 0200 0002 0002 0000 0200 0200 0002 0002
+ 0x0110: 0000 0200 0200 0002 0002 0000 0200 0200
+ 0x0120: 0002 0002 0000 0200 0200 0002 0002 0000
+ 0x0130: 0200 0200 0002 0002 0000 0200 0200 0002
+ 0x0140: 0002 0000 0200 0200 0002 0002 0000 0200
+ 0x0150: 0200 0002 0002 0000 0200 0200 0002 0002
+ 0x0160: 0000 0200 0200 0002 0002 0000 0200 0200
+ 0x0170: 0002 0002 0000 0200 0200 0002 0002 0000
+ 0x0180: 0200 0200 0002 0002 0000 0200 0200 0002
+ 0x0190: 0002 0000 0200 0200 0002 0002 0000 0200
+ 0x01a0: 0200 0002 0002 0000 0200 0200 0002 0002
+ 0x01b0: 0000 0200 0200 0002 0002 0000 0200 0200
+ 0x01c0: 0002 0002 0000 0200 0200 0002 0002 0000
+ 0x01d0: 0200 0200 0002 0002 0000 0200 0200 0002
+ 0x01e0: 0002 0000 0200 0200 0002 0002 0000 0200
+ 0x01f0: 0200 0002 0002 0000 0200 0200 0002 0002 [remaining objects length 249 < 516] (invalid)
diff --git a/tests/lmpv1_busyloop.pcap b/tests/lmpv1_busyloop.pcap
new file mode 100644
index 0000000..5f5b490
--- /dev/null
+++ b/tests/lmpv1_busyloop.pcap
Binary files differ
diff --git a/tests/loopback.out b/tests/loopback.out
new file mode 100644
index 0000000..11ee236
--- /dev/null
+++ b/tests/loopback.out
@@ -0,0 +1,6 @@
+ 1 02:02:44.201747 Loopback, skipCount 0, Forward Data, forwarding address aa:00:04:00:1d:04, data (44 octets)
+ 2 02:02:44.202162 Loopback, skipCount 8, Reply, receipt number 1, data (40 octets)
+ 3 02:02:44.202580 Loopback, skipCount 0, Forward Data, forwarding address aa:00:04:00:6a:04, data (60 octets)
+ 4 02:02:44.256740 Loopback, skipCount 8, Forward Data, forwarding address aa:00:04:00:69:04, data (52 octets)
+ 5 02:02:44.310909 Loopback, skipCount 16, Forward Data, forwarding address aa:00:04:00:1d:04, data (44 octets)
+ 6 02:02:44.311530 Loopback, skipCount 24, Reply, receipt number 2, data (40 octets)
diff --git a/tests/loopback.pcap b/tests/loopback.pcap
new file mode 100644
index 0000000..384c0d3
--- /dev/null
+++ b/tests/loopback.pcap
Binary files differ
diff --git a/tests/lsp-ping-timestamp.out b/tests/lsp-ping-timestamp.out
new file mode 100644
index 0000000..d697fd3
--- /dev/null
+++ b/tests/lsp-ping-timestamp.out
@@ -0,0 +1,8 @@
+ 1 01:24:11.327631 IP (tos 0x0, ttl 64, id 65103, offset 0, flags [DF], proto UDP (17), length 60)
+ 30.0.0.2.3503 > 1.1.1.1.39381: [bad udp cksum 0x203d -> 0x7fa4!]
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 1
+ Sender Timestamp: 3809381051.326312999 (2020-09-18T01:24:11Z) Receiver Timestamp: 3809381051.327528999 (2020-09-18T01:24:11Z)
diff --git a/tests/lsp-ping-timestamp.pcap b/tests/lsp-ping-timestamp.pcap
new file mode 100644
index 0000000..94394f0
--- /dev/null
+++ b/tests/lsp-ping-timestamp.pcap
Binary files differ
diff --git a/tests/lspping-fec-ldp-v.out b/tests/lspping-fec-ldp-v.out
new file mode 100644
index 0000000..5b55bb7
--- /dev/null
+++ b/tests/lspping-fec-ldp-v.out
@@ -0,0 +1,111 @@
+ 1 10:17:05.850284 MPLS (label 100656, tc 6, [S], ttl 64)
+ IP (tos 0xc0, ttl 64, id 40719, offset 0, flags [none], proto TCP (6), length 71)
+ 12.4.4.4.4100 > 12.8.8.8.179: Flags [P.], cksum 0xfd1b (correct), seq 1860641958:1860641977, ack 2969468967, win 16384, options [nop,nop,TS val 84784152 ecr 84770238], length 19: BGP
+ Keepalive Message (4), length: 19
+ 2 10:17:08.118493 MPLS (label 100688, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40723, offset 0, flags [none], proto UDP (17), length 76)
+ 12.4.4.4.4786 > 127.0.0.1.3503:
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 48
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 1
+ Sender Timestamp: 1087208228.000027564 (1934-06-15T10:17:08Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 12
+ LDP IPv4 prefix subTLV (1), length: 5
+ 12.1.1.1/32
+ 3 10:17:08.119504 IP (tos 0xc0, ttl 62, id 50878, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4786:
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 1
+ Sender Timestamp: 1087208228.000027564 (1934-06-15T10:17:08Z) Receiver Timestamp: 1087208228.000027928 (1934-06-15T10:17:08Z)
+ 4 10:17:08.878375 MPLS (label 100704, tc 6, [S], ttl 64)
+ IP (tos 0xc0, ttl 64, id 40725, offset 0, flags [none], proto TCP (6), length 71)
+ 12.4.4.4.2006 > 12.1.1.1.179: Flags [P.], cksum 0x6c0d (correct), seq 399708866:399708885, ack 708613212, win 16384, options [nop,nop,TS val 84784455 ecr 130411], length 19: BGP
+ Keepalive Message (4), length: 19
+ 5 10:17:08.978295 MPLS (label 100704, tc 6, [S], ttl 64)
+ IP (tos 0xc0, ttl 64, id 40726, offset 0, flags [none], proto TCP (6), length 52)
+ 12.4.4.4.2006 > 12.1.1.1.179: Flags [.], cksum 0x6451 (correct), ack 20, win 16384, options [nop,nop,TS val 84784465 ecr 133413], length 0
+ 6 10:17:09.128397 MPLS (label 100688, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40727, offset 0, flags [none], proto UDP (17), length 76)
+ 12.4.4.4.4786 > 127.0.0.1.3503:
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 48
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 2
+ Sender Timestamp: 1087208229.000029880 (1934-06-15T10:17:09Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 12
+ LDP IPv4 prefix subTLV (1), length: 5
+ 12.1.1.1/32
+ 7 10:17:09.129192 IP (tos 0xc0, ttl 62, id 50880, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4786:
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 2
+ Sender Timestamp: 1087208229.000029880 (1934-06-15T10:17:09Z) Receiver Timestamp: 1087208229.000030186 (1934-06-15T10:17:09Z)
+ 8 10:17:10.128607 MPLS (label 100688, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40729, offset 0, flags [none], proto UDP (17), length 76)
+ 12.4.4.4.4786 > 127.0.0.1.3503:
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 48
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 3
+ Sender Timestamp: 1087208230.000029928 (1934-06-15T10:17:10Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 12
+ LDP IPv4 prefix subTLV (1), length: 5
+ 12.1.1.1/32
+ 9 10:17:10.129475 IP (tos 0xc0, ttl 62, id 50882, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4786:
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 3
+ Sender Timestamp: 1087208230.000029928 (1934-06-15T10:17:10Z) Receiver Timestamp: 1087208230.000030250 (1934-06-15T10:17:10Z)
+ 10 10:17:11.128577 MPLS (label 100688, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40731, offset 0, flags [none], proto UDP (17), length 76)
+ 12.4.4.4.4786 > 127.0.0.1.3503:
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 48
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 4
+ Sender Timestamp: 1087208231.000029918 (1934-06-15T10:17:11Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 12
+ LDP IPv4 prefix subTLV (1), length: 5
+ 12.1.1.1/32
+ 11 10:17:11.129418 IP (tos 0xc0, ttl 62, id 50883, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4786:
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 4
+ Sender Timestamp: 1087208231.000029918 (1934-06-15T10:17:11Z) Receiver Timestamp: 1087208231.000030237 (1934-06-15T10:17:11Z)
+ 12 10:17:12.128655 MPLS (label 100688, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40733, offset 0, flags [none], proto UDP (17), length 76)
+ 12.4.4.4.4786 > 127.0.0.1.3503:
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 48
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 5
+ Sender Timestamp: 1087208232.000029937 (1934-06-15T10:17:12Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 12
+ LDP IPv4 prefix subTLV (1), length: 5
+ 12.1.1.1/32
+ 13 10:17:12.129573 IP (tos 0xc0, ttl 62, id 50886, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4786:
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 5
+ Sender Timestamp: 1087208232.000029937 (1934-06-15T10:17:12Z) Receiver Timestamp: 1087208232.000030273 (1934-06-15T10:17:12Z)
diff --git a/tests/lspping-fec-ldp-vv.out b/tests/lspping-fec-ldp-vv.out
new file mode 100644
index 0000000..6b9d787
--- /dev/null
+++ b/tests/lspping-fec-ldp-vv.out
@@ -0,0 +1,121 @@
+ 1 10:17:05.850284 MPLS (label 100656, tc 6, [S], ttl 64)
+ IP (tos 0xc0, ttl 64, id 40719, offset 0, flags [none], proto TCP (6), length 71)
+ 12.4.4.4.4100 > 12.8.8.8.179: Flags [P.], cksum 0xfd1b (correct), seq 1860641958:1860641977, ack 2969468967, win 16384, options [nop,nop,TS val 84784152 ecr 84770238], length 19: BGP
+ Keepalive Message (4), length: 19
+ 2 10:17:08.118493 MPLS (label 100688, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40723, offset 0, flags [none], proto UDP (17), length 76)
+ 12.4.4.4.4786 > 127.0.0.1.3503: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 48
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 1
+ Sender Timestamp: 1087208228.000027564 (1934-06-15T10:17:08Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 12
+ LDP IPv4 prefix subTLV (1), length: 5
+ 12.1.1.1/32
+ 0x0000: 0c01 0101 20
+ 0x0000: 0001 0005 0c01 0101 2000 0000
+ 3 10:17:08.119504 IP (tos 0xc0, ttl 62, id 50878, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4786: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 1
+ Sender Timestamp: 1087208228.000027564 (1934-06-15T10:17:08Z) Receiver Timestamp: 1087208228.000027928 (1934-06-15T10:17:08Z)
+ 4 10:17:08.878375 MPLS (label 100704, tc 6, [S], ttl 64)
+ IP (tos 0xc0, ttl 64, id 40725, offset 0, flags [none], proto TCP (6), length 71)
+ 12.4.4.4.2006 > 12.1.1.1.179: Flags [P.], cksum 0x6c0d (correct), seq 399708866:399708885, ack 708613212, win 16384, options [nop,nop,TS val 84784455 ecr 130411], length 19: BGP
+ Keepalive Message (4), length: 19
+ 5 10:17:08.978295 MPLS (label 100704, tc 6, [S], ttl 64)
+ IP (tos 0xc0, ttl 64, id 40726, offset 0, flags [none], proto TCP (6), length 52)
+ 12.4.4.4.2006 > 12.1.1.1.179: Flags [.], cksum 0x6451 (correct), seq 19, ack 20, win 16384, options [nop,nop,TS val 84784465 ecr 133413], length 0
+ 6 10:17:09.128397 MPLS (label 100688, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40727, offset 0, flags [none], proto UDP (17), length 76)
+ 12.4.4.4.4786 > 127.0.0.1.3503: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 48
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 2
+ Sender Timestamp: 1087208229.000029880 (1934-06-15T10:17:09Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 12
+ LDP IPv4 prefix subTLV (1), length: 5
+ 12.1.1.1/32
+ 0x0000: 0c01 0101 20
+ 0x0000: 0001 0005 0c01 0101 2000 0000
+ 7 10:17:09.129192 IP (tos 0xc0, ttl 62, id 50880, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4786: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 2
+ Sender Timestamp: 1087208229.000029880 (1934-06-15T10:17:09Z) Receiver Timestamp: 1087208229.000030186 (1934-06-15T10:17:09Z)
+ 8 10:17:10.128607 MPLS (label 100688, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40729, offset 0, flags [none], proto UDP (17), length 76)
+ 12.4.4.4.4786 > 127.0.0.1.3503: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 48
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 3
+ Sender Timestamp: 1087208230.000029928 (1934-06-15T10:17:10Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 12
+ LDP IPv4 prefix subTLV (1), length: 5
+ 12.1.1.1/32
+ 0x0000: 0c01 0101 20
+ 0x0000: 0001 0005 0c01 0101 2000 0000
+ 9 10:17:10.129475 IP (tos 0xc0, ttl 62, id 50882, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4786: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 3
+ Sender Timestamp: 1087208230.000029928 (1934-06-15T10:17:10Z) Receiver Timestamp: 1087208230.000030250 (1934-06-15T10:17:10Z)
+ 10 10:17:11.128577 MPLS (label 100688, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40731, offset 0, flags [none], proto UDP (17), length 76)
+ 12.4.4.4.4786 > 127.0.0.1.3503: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 48
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 4
+ Sender Timestamp: 1087208231.000029918 (1934-06-15T10:17:11Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 12
+ LDP IPv4 prefix subTLV (1), length: 5
+ 12.1.1.1/32
+ 0x0000: 0c01 0101 20
+ 0x0000: 0001 0005 0c01 0101 2000 0000
+ 11 10:17:11.129418 IP (tos 0xc0, ttl 62, id 50883, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4786: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 4
+ Sender Timestamp: 1087208231.000029918 (1934-06-15T10:17:11Z) Receiver Timestamp: 1087208231.000030237 (1934-06-15T10:17:11Z)
+ 12 10:17:12.128655 MPLS (label 100688, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40733, offset 0, flags [none], proto UDP (17), length 76)
+ 12.4.4.4.4786 > 127.0.0.1.3503: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 48
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 5
+ Sender Timestamp: 1087208232.000029937 (1934-06-15T10:17:12Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 12
+ LDP IPv4 prefix subTLV (1), length: 5
+ 12.1.1.1/32
+ 0x0000: 0c01 0101 20
+ 0x0000: 0001 0005 0c01 0101 2000 0000
+ 13 10:17:12.129573 IP (tos 0xc0, ttl 62, id 50886, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4786: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 5
+ Sender Timestamp: 1087208232.000029937 (1934-06-15T10:17:12Z) Receiver Timestamp: 1087208232.000030273 (1934-06-15T10:17:12Z)
diff --git a/tests/lspping-fec-ldp.out b/tests/lspping-fec-ldp.out
new file mode 100644
index 0000000..e6ff801
--- /dev/null
+++ b/tests/lspping-fec-ldp.out
@@ -0,0 +1,13 @@
+ 1 10:17:05.850284 MPLS (label 100656, tc 6, [S], ttl 64) IP 12.4.4.4.4100 > 12.8.8.8.179: Flags [P.], seq 1860641958:1860641977, ack 2969468967, win 16384, options [nop,nop,TS val 84784152 ecr 84770238], length 19: BGP
+ 2 10:17:08.118493 MPLS (label 100688, tc 7, [S], ttl 255) IP 12.4.4.4.4786 > 127.0.0.1.3503: LSP-PINGv1, MPLS Echo Request, seq 1, length: 48
+ 3 10:17:08.119504 IP 10.20.0.1.3503 > 12.4.4.4.4786: LSP-PINGv1, MPLS Echo Reply, seq 1, length: 32
+ 4 10:17:08.878375 MPLS (label 100704, tc 6, [S], ttl 64) IP 12.4.4.4.2006 > 12.1.1.1.179: Flags [P.], seq 399708866:399708885, ack 708613212, win 16384, options [nop,nop,TS val 84784455 ecr 130411], length 19: BGP
+ 5 10:17:08.978295 MPLS (label 100704, tc 6, [S], ttl 64) IP 12.4.4.4.2006 > 12.1.1.1.179: Flags [.], ack 20, win 16384, options [nop,nop,TS val 84784465 ecr 133413], length 0
+ 6 10:17:09.128397 MPLS (label 100688, tc 7, [S], ttl 255) IP 12.4.4.4.4786 > 127.0.0.1.3503: LSP-PINGv1, MPLS Echo Request, seq 2, length: 48
+ 7 10:17:09.129192 IP 10.20.0.1.3503 > 12.4.4.4.4786: LSP-PINGv1, MPLS Echo Reply, seq 2, length: 32
+ 8 10:17:10.128607 MPLS (label 100688, tc 7, [S], ttl 255) IP 12.4.4.4.4786 > 127.0.0.1.3503: LSP-PINGv1, MPLS Echo Request, seq 3, length: 48
+ 9 10:17:10.129475 IP 10.20.0.1.3503 > 12.4.4.4.4786: LSP-PINGv1, MPLS Echo Reply, seq 3, length: 32
+ 10 10:17:11.128577 MPLS (label 100688, tc 7, [S], ttl 255) IP 12.4.4.4.4786 > 127.0.0.1.3503: LSP-PINGv1, MPLS Echo Request, seq 4, length: 48
+ 11 10:17:11.129418 IP 10.20.0.1.3503 > 12.4.4.4.4786: LSP-PINGv1, MPLS Echo Reply, seq 4, length: 32
+ 12 10:17:12.128655 MPLS (label 100688, tc 7, [S], ttl 255) IP 12.4.4.4.4786 > 127.0.0.1.3503: LSP-PINGv1, MPLS Echo Request, seq 5, length: 48
+ 13 10:17:12.129573 IP 10.20.0.1.3503 > 12.4.4.4.4786: LSP-PINGv1, MPLS Echo Reply, seq 5, length: 32
diff --git a/tests/lspping-fec-ldp.pcap b/tests/lspping-fec-ldp.pcap
new file mode 100644
index 0000000..87e86c7
--- /dev/null
+++ b/tests/lspping-fec-ldp.pcap
Binary files differ
diff --git a/tests/lspping-fec-rsvp-v.out b/tests/lspping-fec-rsvp-v.out
new file mode 100644
index 0000000..cd9da30
--- /dev/null
+++ b/tests/lspping-fec-rsvp-v.out
@@ -0,0 +1,105 @@
+ 1 10:13:57.562886 MPLS (label 100704, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40269, offset 0, flags [none], proto UDP (17), length 88)
+ 12.4.4.4.4529 > 127.0.0.1.3503:
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 60
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 1
+ Sender Timestamp: 1087208037.000131030 (1934-06-15T10:13:57Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 24
+ RSVP IPv4 Session Query subTLV (3), length: 20
+ tunnel end-point 12.1.1.1, tunnel sender 12.4.4.4, lsp-id 0x0010
+ tunnel-id 0x5372, extended tunnel-id 12.4.4.4
+ 2 10:13:57.563663 IP (tos 0xc0, ttl 62, id 50634, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4529:
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 1
+ Sender Timestamp: 1087208037.000131030 (1934-06-15T10:13:57Z) Receiver Timestamp: 1087208037.000131348 (1934-06-15T10:13:57Z)
+ 3 10:13:58.572787 MPLS (label 100704, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40271, offset 0, flags [none], proto UDP (17), length 88)
+ 12.4.4.4.4529 > 127.0.0.1.3503:
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 60
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 2
+ Sender Timestamp: 1087208038.000133345 (1934-06-15T10:13:58Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 24
+ RSVP IPv4 Session Query subTLV (3), length: 20
+ tunnel end-point 12.1.1.1, tunnel sender 12.4.4.4, lsp-id 0x0010
+ tunnel-id 0x5372, extended tunnel-id 12.4.4.4
+ 4 10:13:58.585727 IP (tos 0xc0, ttl 62, id 50635, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4529:
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 2
+ Sender Timestamp: 1087208038.000133345 (1934-06-15T10:13:58Z) Receiver Timestamp: 1087208038.000136480 (1934-06-15T10:13:58Z)
+ 5 10:13:59.572866 MPLS (label 100704, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40273, offset 0, flags [none], proto UDP (17), length 88)
+ 12.4.4.4.4529 > 127.0.0.1.3503:
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 60
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 3
+ Sender Timestamp: 1087208039.000133363 (1934-06-15T10:13:59Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 24
+ RSVP IPv4 Session Query subTLV (3), length: 20
+ tunnel end-point 12.1.1.1, tunnel sender 12.4.4.4, lsp-id 0x0010
+ tunnel-id 0x5372, extended tunnel-id 12.4.4.4
+ 6 10:13:59.573713 IP (tos 0xc0, ttl 62, id 50637, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4529:
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 3
+ Sender Timestamp: 1087208039.000133363 (1934-06-15T10:13:59Z) Receiver Timestamp: 1087208039.000133684 (1934-06-15T10:13:59Z)
+ 7 10:14:00.572959 MPLS (label 100704, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40275, offset 0, flags [none], proto UDP (17), length 88)
+ 12.4.4.4.4529 > 127.0.0.1.3503:
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 60
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 4
+ Sender Timestamp: 1087208040.000133384 (1934-06-15T10:14:00Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 24
+ RSVP IPv4 Session Query subTLV (3), length: 20
+ tunnel end-point 12.1.1.1, tunnel sender 12.4.4.4, lsp-id 0x0010
+ tunnel-id 0x5372, extended tunnel-id 12.4.4.4
+ 8 10:14:00.573746 IP (tos 0xc0, ttl 62, id 50638, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4529:
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 4
+ Sender Timestamp: 1087208040.000133384 (1934-06-15T10:14:00Z) Receiver Timestamp: 1087208040.000133697 (1934-06-15T10:14:00Z)
+ 9 10:14:01.573010 MPLS (label 100704, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40278, offset 0, flags [none], proto UDP (17), length 88)
+ 12.4.4.4.4529 > 127.0.0.1.3503:
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 60
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 5
+ Sender Timestamp: 1087208041.000133401 (1934-06-15T10:14:01Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 24
+ RSVP IPv4 Session Query subTLV (3), length: 20
+ tunnel end-point 12.1.1.1, tunnel sender 12.4.4.4, lsp-id 0x0010
+ tunnel-id 0x5372, extended tunnel-id 12.4.4.4
+ 10 10:14:01.573838 IP (tos 0xc0, ttl 62, id 50641, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4529:
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 5
+ Sender Timestamp: 1087208041.000133401 (1934-06-15T10:14:01Z) Receiver Timestamp: 1087208041.000133707 (1934-06-15T10:14:01Z)
diff --git a/tests/lspping-fec-rsvp-vv.out b/tests/lspping-fec-rsvp-vv.out
new file mode 100644
index 0000000..72183fc
--- /dev/null
+++ b/tests/lspping-fec-rsvp-vv.out
@@ -0,0 +1,125 @@
+ 1 10:13:57.562886 MPLS (label 100704, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40269, offset 0, flags [none], proto UDP (17), length 88)
+ 12.4.4.4.4529 > 127.0.0.1.3503: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 60
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 1
+ Sender Timestamp: 1087208037.000131030 (1934-06-15T10:13:57Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 24
+ RSVP IPv4 Session Query subTLV (3), length: 20
+ tunnel end-point 12.1.1.1, tunnel sender 12.4.4.4, lsp-id 0x0010
+ tunnel-id 0x5372, extended tunnel-id 12.4.4.4
+ 0x0000: 0c01 0101 0000 5372 0c04 0404 0c04 0404
+ 0x0010: 0000 0010
+ 0x0000: 0003 0014 0c01 0101 0000 5372 0c04 0404
+ 0x0010: 0c04 0404 0000 0010
+ 2 10:13:57.563663 IP (tos 0xc0, ttl 62, id 50634, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4529: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 1
+ Sender Timestamp: 1087208037.000131030 (1934-06-15T10:13:57Z) Receiver Timestamp: 1087208037.000131348 (1934-06-15T10:13:57Z)
+ 3 10:13:58.572787 MPLS (label 100704, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40271, offset 0, flags [none], proto UDP (17), length 88)
+ 12.4.4.4.4529 > 127.0.0.1.3503: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 60
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 2
+ Sender Timestamp: 1087208038.000133345 (1934-06-15T10:13:58Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 24
+ RSVP IPv4 Session Query subTLV (3), length: 20
+ tunnel end-point 12.1.1.1, tunnel sender 12.4.4.4, lsp-id 0x0010
+ tunnel-id 0x5372, extended tunnel-id 12.4.4.4
+ 0x0000: 0c01 0101 0000 5372 0c04 0404 0c04 0404
+ 0x0010: 0000 0010
+ 0x0000: 0003 0014 0c01 0101 0000 5372 0c04 0404
+ 0x0010: 0c04 0404 0000 0010
+ 4 10:13:58.585727 IP (tos 0xc0, ttl 62, id 50635, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4529: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 2
+ Sender Timestamp: 1087208038.000133345 (1934-06-15T10:13:58Z) Receiver Timestamp: 1087208038.000136480 (1934-06-15T10:13:58Z)
+ 5 10:13:59.572866 MPLS (label 100704, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40273, offset 0, flags [none], proto UDP (17), length 88)
+ 12.4.4.4.4529 > 127.0.0.1.3503: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 60
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 3
+ Sender Timestamp: 1087208039.000133363 (1934-06-15T10:13:59Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 24
+ RSVP IPv4 Session Query subTLV (3), length: 20
+ tunnel end-point 12.1.1.1, tunnel sender 12.4.4.4, lsp-id 0x0010
+ tunnel-id 0x5372, extended tunnel-id 12.4.4.4
+ 0x0000: 0c01 0101 0000 5372 0c04 0404 0c04 0404
+ 0x0010: 0000 0010
+ 0x0000: 0003 0014 0c01 0101 0000 5372 0c04 0404
+ 0x0010: 0c04 0404 0000 0010
+ 6 10:13:59.573713 IP (tos 0xc0, ttl 62, id 50637, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4529: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 3
+ Sender Timestamp: 1087208039.000133363 (1934-06-15T10:13:59Z) Receiver Timestamp: 1087208039.000133684 (1934-06-15T10:13:59Z)
+ 7 10:14:00.572959 MPLS (label 100704, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40275, offset 0, flags [none], proto UDP (17), length 88)
+ 12.4.4.4.4529 > 127.0.0.1.3503: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 60
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 4
+ Sender Timestamp: 1087208040.000133384 (1934-06-15T10:14:00Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 24
+ RSVP IPv4 Session Query subTLV (3), length: 20
+ tunnel end-point 12.1.1.1, tunnel sender 12.4.4.4, lsp-id 0x0010
+ tunnel-id 0x5372, extended tunnel-id 12.4.4.4
+ 0x0000: 0c01 0101 0000 5372 0c04 0404 0c04 0404
+ 0x0010: 0000 0010
+ 0x0000: 0003 0014 0c01 0101 0000 5372 0c04 0404
+ 0x0010: 0c04 0404 0000 0010
+ 8 10:14:00.573746 IP (tos 0xc0, ttl 62, id 50638, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4529: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 4
+ Sender Timestamp: 1087208040.000133384 (1934-06-15T10:14:00Z) Receiver Timestamp: 1087208040.000133697 (1934-06-15T10:14:00Z)
+ 9 10:14:01.573010 MPLS (label 100704, tc 7, [S], ttl 255)
+ IP (tos 0x0, ttl 64, id 40278, offset 0, flags [none], proto UDP (17), length 88)
+ 12.4.4.4.4529 > 127.0.0.1.3503: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 60
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: No return code or return code contained in the Error Code TLV (0)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 5
+ Sender Timestamp: 1087208041.000133401 (1934-06-15T10:14:01Z) Receiver Timestamp: no timestamp
+ Target FEC Stack TLV (1), length: 24
+ RSVP IPv4 Session Query subTLV (3), length: 20
+ tunnel end-point 12.1.1.1, tunnel sender 12.4.4.4, lsp-id 0x0010
+ tunnel-id 0x5372, extended tunnel-id 12.4.4.4
+ 0x0000: 0c01 0101 0000 5372 0c04 0404 0c04 0404
+ 0x0010: 0000 0010
+ 0x0000: 0003 0014 0c01 0101 0000 5372 0c04 0404
+ 0x0010: 0c04 0404 0000 0010
+ 10 10:14:01.573838 IP (tos 0xc0, ttl 62, id 50641, offset 0, flags [none], proto UDP (17), length 60)
+ 10.20.0.1.3503 > 12.4.4.4.4529: [udp sum ok]
+ LSP-PINGv1, msg-type: MPLS Echo Reply (2), length: 32
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: Replying router is an egress for the FEC at stack depth 0 (3)
+ Return Subcode: (0)
+ Sender Handle: 0x00000000, Sequence: 5
+ Sender Timestamp: 1087208041.000133401 (1934-06-15T10:14:01Z) Receiver Timestamp: 1087208041.000133707 (1934-06-15T10:14:01Z)
diff --git a/tests/lspping-fec-rsvp.out b/tests/lspping-fec-rsvp.out
new file mode 100644
index 0000000..fe1bebc
--- /dev/null
+++ b/tests/lspping-fec-rsvp.out
@@ -0,0 +1,10 @@
+ 1 10:13:57.562886 MPLS (label 100704, tc 7, [S], ttl 255) IP 12.4.4.4.4529 > 127.0.0.1.3503: LSP-PINGv1, MPLS Echo Request, seq 1, length: 60
+ 2 10:13:57.563663 IP 10.20.0.1.3503 > 12.4.4.4.4529: LSP-PINGv1, MPLS Echo Reply, seq 1, length: 32
+ 3 10:13:58.572787 MPLS (label 100704, tc 7, [S], ttl 255) IP 12.4.4.4.4529 > 127.0.0.1.3503: LSP-PINGv1, MPLS Echo Request, seq 2, length: 60
+ 4 10:13:58.585727 IP 10.20.0.1.3503 > 12.4.4.4.4529: LSP-PINGv1, MPLS Echo Reply, seq 2, length: 32
+ 5 10:13:59.572866 MPLS (label 100704, tc 7, [S], ttl 255) IP 12.4.4.4.4529 > 127.0.0.1.3503: LSP-PINGv1, MPLS Echo Request, seq 3, length: 60
+ 6 10:13:59.573713 IP 10.20.0.1.3503 > 12.4.4.4.4529: LSP-PINGv1, MPLS Echo Reply, seq 3, length: 32
+ 7 10:14:00.572959 MPLS (label 100704, tc 7, [S], ttl 255) IP 12.4.4.4.4529 > 127.0.0.1.3503: LSP-PINGv1, MPLS Echo Request, seq 4, length: 60
+ 8 10:14:00.573746 IP 10.20.0.1.3503 > 12.4.4.4.4529: LSP-PINGv1, MPLS Echo Reply, seq 4, length: 32
+ 9 10:14:01.573010 MPLS (label 100704, tc 7, [S], ttl 255) IP 12.4.4.4.4529 > 127.0.0.1.3503: LSP-PINGv1, MPLS Echo Request, seq 5, length: 60
+ 10 10:14:01.573838 IP 10.20.0.1.3503 > 12.4.4.4.4529: LSP-PINGv1, MPLS Echo Reply, seq 5, length: 32
diff --git a/tests/lspping-fec-rsvp.pcap b/tests/lspping-fec-rsvp.pcap
new file mode 100644
index 0000000..d9dcf54
--- /dev/null
+++ b/tests/lspping-fec-rsvp.pcap
Binary files differ
diff --git a/tests/lwres_with_extra.out b/tests/lwres_with_extra.out
new file mode 100644
index 0000000..ec36f09
--- /dev/null
+++ b/tests/lwres_with_extra.out
@@ -0,0 +1 @@
+ 1 12:40:23.226395 IP6 fe80::b203:303:303:303.771 > 303:303:303:303:303:303:303:303.921: lwres noop? [len: 3594977026 != 428][extra]
diff --git a/tests/lwres_with_extra.pcap b/tests/lwres_with_extra.pcap
new file mode 100644
index 0000000..6323a20
--- /dev/null
+++ b/tests/lwres_with_extra.pcap
Binary files differ
diff --git a/tests/macsec-changed.out b/tests/macsec-changed.out
new file mode 100644
index 0000000..989df27
--- /dev/null
+++ b/tests/macsec-changed.out
@@ -0,0 +1,7 @@
+ 1 14:35:18.400643 2e:b7:3f:39:95:c3 > 3e:6f:f3:74:23:7c, ethertype 802.1AE MACsec (0x88e5), length 122: an 0, pn 6, flags CI, sci 2eb73f3995c3006f,
+ 0x0000: 0800 4500 0054 ab6b 4000 4001 27e9 c0a8 ..E..T.k@.@.'...
+ 0x0010: 7301 c0a8 7302 0800 c5fd 0784 0001 a636 s...s..........6
+ 0x0020: 1a57 0000 0000 a51c 0600 0000 0000 1011 .W..............
+ 0x0030: 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 ...............!
+ 0x0040: 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 "#$%&'()*+,-./01
+ 0x0050: 3233 3435 3637 72f1 e918 85fa ca0b 234567r.......
diff --git a/tests/macsec-changed.pcap b/tests/macsec-changed.pcap
new file mode 100644
index 0000000..7d05dca
--- /dev/null
+++ b/tests/macsec-changed.pcap
Binary files differ
diff --git a/tests/macsec-encrypted.out b/tests/macsec-encrypted.out
new file mode 100644
index 0000000..cc87969
--- /dev/null
+++ b/tests/macsec-encrypted.out
@@ -0,0 +1,8 @@
+ 1 14:23:56.503006 2e:b7:3f:39:95:c3 > 3e:6f:f3:74:23:7c, ethertype 802.1AE MACsec (0x88e5), length 130: an 0, pn 72, flags ECI, sci 2eb73f3995c30001,
+ 0x0000: 50c6 8aab f682 2b69 adc7 f4bc a4d8 af67 P.....+i.......g
+ 0x0010: 5437 64c9 b927 4dcb 49f5 7641 d6ee 5aaa T7d..'M.I.vA..Z.
+ 0x0020: 34b1 1748 4565 fb62 d328 810d b6ce 99b3 4..HEe.b.(......
+ 0x0030: 719f 7333 1dbe cdfe d3dc 75a4 fe35 dd96 q.s3......u..5..
+ 0x0040: 79c2 e460 9e0d 52eb e804 83a3 17ee f359 y..`..R........Y
+ 0x0050: a692 37ec d92d 194d bb66 fdf6 7812 2496 ..7..-.M.f..x.$.
+ 0x0060: 2d32 9492 13fd -2....
diff --git a/tests/macsec-encrypted.pcap b/tests/macsec-encrypted.pcap
new file mode 100644
index 0000000..1fefda9
--- /dev/null
+++ b/tests/macsec-encrypted.pcap
Binary files differ
diff --git a/tests/macsec-integonly.out b/tests/macsec-integonly.out
new file mode 100644
index 0000000..1893d03
--- /dev/null
+++ b/tests/macsec-integonly.out
@@ -0,0 +1 @@
+ 1 14:20:57.267689 2e:b7:3f:39:95:c3 > 3e:6f:f3:74:23:7c, ethertype 802.1AE MACsec (0x88e5), length 130: an 0, pn 68, flags I, sci 2eb73f3995c30001, ethertype IPv4 (0x0800), 192.168.113.1 > 192.168.113.2: ICMP echo request, id 948, seq 1, length 64
diff --git a/tests/macsec-integonly.pcap b/tests/macsec-integonly.pcap
new file mode 100644
index 0000000..5a9f8af
--- /dev/null
+++ b/tests/macsec-integonly.pcap
Binary files differ
diff --git a/tests/macsec-short-longer.out b/tests/macsec-short-longer.out
new file mode 100644
index 0000000..7613479
--- /dev/null
+++ b/tests/macsec-short-longer.out
@@ -0,0 +1 @@
+ 1 08:46:12.837554 ca:f9:df:4f:50:9a > b6:b9:5d:80:8d:79, ethertype 802.1AE MACsec (0x88e5), length 84: an 0, pn 66, flags I, sl 34, sci caf9df4f509a0064, ethertype IPv4 (0x0800), 192.168.114.1.37459 > 192.168.114.2.6666: UDP, length 4
diff --git a/tests/macsec-short-longer.pcap b/tests/macsec-short-longer.pcap
new file mode 100644
index 0000000..1130428
--- /dev/null
+++ b/tests/macsec-short-longer.pcap
Binary files differ
diff --git a/tests/macsec-short-shorter.out b/tests/macsec-short-shorter.out
new file mode 100644
index 0000000..18bda45
--- /dev/null
+++ b/tests/macsec-short-shorter.out
@@ -0,0 +1 @@
+ 1 08:51:08.799859 ca:f9:df:4f:50:9a > b6:b9:5d:80:8d:79, ethertype 802.1AE MACsec (0x88e5), length 74: an 0, pn 69, flags I, sl 34, sci caf9df4f509a0064, [|macsec]
diff --git a/tests/macsec-short-shorter.pcap b/tests/macsec-short-shorter.pcap
new file mode 100644
index 0000000..41de359
--- /dev/null
+++ b/tests/macsec-short-shorter.pcap
Binary files differ
diff --git a/tests/macsec-short-valid.out b/tests/macsec-short-valid.out
new file mode 100644
index 0000000..8ff874f
--- /dev/null
+++ b/tests/macsec-short-valid.out
@@ -0,0 +1 @@
+ 1 08:46:12.837554 ca:f9:df:4f:50:9a > b6:b9:5d:80:8d:79, ethertype 802.1AE MACsec (0x88e5), length 78: an 0, pn 66, flags I, sl 34, sci caf9df4f509a0064, ethertype IPv4 (0x0800), 192.168.114.1.37459 > 192.168.114.2.6666: UDP, length 4
diff --git a/tests/macsec-short-valid.pcap b/tests/macsec-short-valid.pcap
new file mode 100644
index 0000000..e295056
--- /dev/null
+++ b/tests/macsec-short-valid.pcap
Binary files differ
diff --git a/tests/macsec-snap.out b/tests/macsec-snap.out
new file mode 100644
index 0000000..3520b26
--- /dev/null
+++ b/tests/macsec-snap.out
@@ -0,0 +1 @@
+ 1 08:34:25.953329 ca:f9:df:4f:50:9a > b6:b9:5d:80:8d:79, ethertype 802.1AE MACsec (0x88e5), length 130: [|macsec]
diff --git a/tests/macsec-snap.pcap b/tests/macsec-snap.pcap
new file mode 100644
index 0000000..a0c0a3e
--- /dev/null
+++ b/tests/macsec-snap.pcap
Binary files differ
diff --git a/tests/mlppp-oobr.out b/tests/mlppp-oobr.out
new file mode 100644
index 0000000..96055d5
--- /dev/null
+++ b/tests/mlppp-oobr.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 MLPPP, [|mlppp]
diff --git a/tests/mlppp-oobr.pcap b/tests/mlppp-oobr.pcap
new file mode 100644
index 0000000..a215e50
--- /dev/null
+++ b/tests/mlppp-oobr.pcap
Binary files differ
diff --git a/tests/mobility_opt_asan.out b/tests/mobility_opt_asan.out
new file mode 100644
index 0000000..428679f
--- /dev/null
+++ b/tests/mobility_opt_asan.out
@@ -0,0 +1,2 @@
+ 1 07:53:17.131862 IP6 (class 0x50, flowlabel 0x00004, hlim 0, next-header Mobile IP (old) (62) payload length: 7168) d400:7fa1:0:400::6238:2949 > 9675:86dd:7300:2c:1c7f:ffff:ffc3:b2a1: mobility: BU seq#=116 A lifetime=15872(pad1) [|mobility]
+ 2 14:32:13.8916227 IP6 (class 0x50, flowlabel 0x00004, hlim 0, next-header Mobile IP (old) (62) payload length: 7168) d4c3:b2a1:200:400::6238:2949 > 9675:86dd:73f0:2c:1c7f:ffff:ebc3:b291: mobility: BU seq#=116 A lifetime=15360 [|mobility]
diff --git a/tests/mobility_opt_asan.pcap b/tests/mobility_opt_asan.pcap
new file mode 100644
index 0000000..d28de32
--- /dev/null
+++ b/tests/mobility_opt_asan.pcap
Binary files differ
diff --git a/tests/mobility_opt_asan_2.out b/tests/mobility_opt_asan_2.out
new file mode 100644
index 0000000..b7b9a63
--- /dev/null
+++ b/tests/mobility_opt_asan_2.out
@@ -0,0 +1 @@
+ 1 00:41:36.3875668758 IP6 (class 0x50, flowlabel 0x0002c, hlim 0, next-header Mobile IP (old) (62) payload length: 7168) ff:7f0f:40:0:ee00:0:b658:5203 > 205:20:1:b00:0:2200:af01:e000: mobility: BRR(type-0x06: len=0) [|mobility]
diff --git a/tests/mobility_opt_asan_2.pcap b/tests/mobility_opt_asan_2.pcap
new file mode 100644
index 0000000..7fadc58
--- /dev/null
+++ b/tests/mobility_opt_asan_2.pcap
Binary files differ
diff --git a/tests/mobility_opt_asan_3.out b/tests/mobility_opt_asan_3.out
new file mode 100644
index 0000000..de0122b
--- /dev/null
+++ b/tests/mobility_opt_asan_3.out
@@ -0,0 +1,2 @@
+ 1 07:53:17.131862 IP6 (class 0x50, flowlabel 0x00004, hlim 0, next-header Mobile IP (old) (62) payload length: 7168) d400:7fa1:200:400::6238:2949 > 9675:86dd:7300:2c:1c7f:ffff:ffc3:b2a1: mobility: CoT nonce id=0x74 Care-of Init Cookie=80570f80:00000004 [|mobility]
+ 2 14:32:13.8916227 IP6 (class 0x50, flowlabel 0x00004, hlim 0, next-header Mobile IP (old) (62) payload length: 7168) ffc3:b2a1:200:400::6238:2949 > 9675:86dd:73f0:2c:1c7f:ffff:ebc3:b2a1: mobility: BU seq#=39837 lifetime=261452 [|mobility]
diff --git a/tests/mobility_opt_asan_3.pcap b/tests/mobility_opt_asan_3.pcap
new file mode 100644
index 0000000..3926ac9
--- /dev/null
+++ b/tests/mobility_opt_asan_3.pcap
Binary files differ
diff --git a/tests/mobility_opt_asan_4.out b/tests/mobility_opt_asan_4.out
new file mode 100644
index 0000000..6f59863
--- /dev/null
+++ b/tests/mobility_opt_asan_4.out
@@ -0,0 +1 @@
+ 1 12:49:44.8916227 IP6 (class 0x50, flowlabel 0x00004, hlim 237, next-header Mobile IP (old) (62) payload length: 7168) d3c3:b2a9:200:400::6238:2949 > 9675:86dd:7300:2c:1c7f:ffff:ffc3:b2a1: mobility: BU seq#=116 A lifetime=15360(pad1)(pad1)(type-0x3c: len=19)(ni: ho=0x0400 co=0x0012) [|mobility]
diff --git a/tests/mobility_opt_asan_4.pcap b/tests/mobility_opt_asan_4.pcap
new file mode 100644
index 0000000..c03cad6
--- /dev/null
+++ b/tests/mobility_opt_asan_4.pcap
Binary files differ
diff --git a/tests/mobility_opt_asan_5.out b/tests/mobility_opt_asan_5.out
new file mode 100644
index 0000000..b7b9a63
--- /dev/null
+++ b/tests/mobility_opt_asan_5.out
@@ -0,0 +1 @@
+ 1 00:41:36.3875668758 IP6 (class 0x50, flowlabel 0x0002c, hlim 0, next-header Mobile IP (old) (62) payload length: 7168) ff:7f0f:40:0:ee00:0:b658:5203 > 205:20:1:b00:0:2200:af01:e000: mobility: BRR(type-0x06: len=0) [|mobility]
diff --git a/tests/mobility_opt_asan_5.pcap b/tests/mobility_opt_asan_5.pcap
new file mode 100644
index 0000000..77b7c55
--- /dev/null
+++ b/tests/mobility_opt_asan_5.pcap
Binary files differ
diff --git a/tests/mobility_opt_asan_6.out b/tests/mobility_opt_asan_6.out
new file mode 100644
index 0000000..428679f
--- /dev/null
+++ b/tests/mobility_opt_asan_6.out
@@ -0,0 +1,2 @@
+ 1 07:53:17.131862 IP6 (class 0x50, flowlabel 0x00004, hlim 0, next-header Mobile IP (old) (62) payload length: 7168) d400:7fa1:0:400::6238:2949 > 9675:86dd:7300:2c:1c7f:ffff:ffc3:b2a1: mobility: BU seq#=116 A lifetime=15872(pad1) [|mobility]
+ 2 14:32:13.8916227 IP6 (class 0x50, flowlabel 0x00004, hlim 0, next-header Mobile IP (old) (62) payload length: 7168) d4c3:b2a1:200:400::6238:2949 > 9675:86dd:73f0:2c:1c7f:ffff:ebc3:b291: mobility: BU seq#=116 A lifetime=15360 [|mobility]
diff --git a/tests/mobility_opt_asan_6.pcap b/tests/mobility_opt_asan_6.pcap
new file mode 100644
index 0000000..357e7a5
--- /dev/null
+++ b/tests/mobility_opt_asan_6.pcap
Binary files differ
diff --git a/tests/mobility_opt_asan_7.out b/tests/mobility_opt_asan_7.out
new file mode 100644
index 0000000..de0122b
--- /dev/null
+++ b/tests/mobility_opt_asan_7.out
@@ -0,0 +1,2 @@
+ 1 07:53:17.131862 IP6 (class 0x50, flowlabel 0x00004, hlim 0, next-header Mobile IP (old) (62) payload length: 7168) d400:7fa1:200:400::6238:2949 > 9675:86dd:7300:2c:1c7f:ffff:ffc3:b2a1: mobility: CoT nonce id=0x74 Care-of Init Cookie=80570f80:00000004 [|mobility]
+ 2 14:32:13.8916227 IP6 (class 0x50, flowlabel 0x00004, hlim 0, next-header Mobile IP (old) (62) payload length: 7168) ffc3:b2a1:200:400::6238:2949 > 9675:86dd:73f0:2c:1c7f:ffff:ebc3:b2a1: mobility: BU seq#=39837 lifetime=261452 [|mobility]
diff --git a/tests/mobility_opt_asan_7.pcap b/tests/mobility_opt_asan_7.pcap
new file mode 100644
index 0000000..4355596
--- /dev/null
+++ b/tests/mobility_opt_asan_7.pcap
Binary files differ
diff --git a/tests/mobility_opt_asan_8.out b/tests/mobility_opt_asan_8.out
new file mode 100644
index 0000000..6f59863
--- /dev/null
+++ b/tests/mobility_opt_asan_8.out
@@ -0,0 +1 @@
+ 1 12:49:44.8916227 IP6 (class 0x50, flowlabel 0x00004, hlim 237, next-header Mobile IP (old) (62) payload length: 7168) d3c3:b2a9:200:400::6238:2949 > 9675:86dd:7300:2c:1c7f:ffff:ffc3:b2a1: mobility: BU seq#=116 A lifetime=15360(pad1)(pad1)(type-0x3c: len=19)(ni: ho=0x0400 co=0x0012) [|mobility]
diff --git a/tests/mobility_opt_asan_8.pcap b/tests/mobility_opt_asan_8.pcap
new file mode 100644
index 0000000..02a9354
--- /dev/null
+++ b/tests/mobility_opt_asan_8.pcap
Binary files differ
diff --git a/tests/mpbgp-linklocal-nexthop.out b/tests/mpbgp-linklocal-nexthop.out
new file mode 100644
index 0000000..eacc48b
--- /dev/null
+++ b/tests/mpbgp-linklocal-nexthop.out
@@ -0,0 +1,10 @@
+ 1 11:30:10.196605 IP (tos 0xc0, ttl 64, id 22725, offset 0, flags [DF], proto TCP (6), length 142)
+ 30.0.0.1.49038 > 30.0.0.2.179: Flags [P.], cksum 0xd6dc (correct), seq 1284816775:1284816865, ack 1288709908, win 29, options [nop,nop,TS val 184150022 ecr 184150021], length 90: BGP
+ Update Message (2), length: 90
+ Origin (1), length: 1, Flags [T]: Incomplete
+ AS Path (2), length: 4, Flags [T]: 1
+ Next Hop (3), length: 4, Flags [T]: 0.0.0.0
+ Multi-Protocol Reach NLRI (14), length: 46, Flags [O]:
+ AFI: IPv6 (2), SAFI: Unicast (1)
+ nexthop: dead:beef::1, fe80::1ff:fe01:0, nh-length: 32, no SNPA
+ 4:5::/64
diff --git a/tests/mpbgp-linklocal-nexthop.pcap b/tests/mpbgp-linklocal-nexthop.pcap
new file mode 100644
index 0000000..1ac823d
--- /dev/null
+++ b/tests/mpbgp-linklocal-nexthop.pcap
Binary files differ
diff --git a/tests/mpls-label-heapoverflow.out b/tests/mpls-label-heapoverflow.out
new file mode 100644
index 0000000..60d3a00
--- /dev/null
+++ b/tests/mpls-label-heapoverflow.out
@@ -0,0 +1,2 @@
+ 1 05:27:12.808464432 MPLS (label 197379, tc 0, ttl 48)
+ (label 197387, tc 5, [S], ttl 48) [|mpls]
diff --git a/tests/mpls-label-heapoverflow.pcap b/tests/mpls-label-heapoverflow.pcap
new file mode 100644
index 0000000..b73f80b
--- /dev/null
+++ b/tests/mpls-label-heapoverflow.pcap
Binary files differ
diff --git a/tests/mpls-ldp-hello.out b/tests/mpls-ldp-hello.out
new file mode 100644
index 0000000..b8124e7
--- /dev/null
+++ b/tests/mpls-ldp-hello.out
@@ -0,0 +1,10 @@
+ 1 13:19:03.821076 IP (tos 0xc0, ttl 1, id 15579, offset 0, flags [none], proto UDP (17), length 70)
+ 10.1.1.3.646 > 224.0.0.2.646:
+ LDP, Label-Space-ID: 10.1.0.2:0, pdu-length: 38
+ Hello Message (0x0100), length: 28, Message ID: 0x00011970, Flags: [ignore if unknown]
+ Common Hello Parameters TLV (0x0400), length: 4, Flags: [ignore and don't forward if unknown]
+ Hold Time: 15s, Flags: [Link Hello]
+ IPv4 Transport Address TLV (0x0401), length: 4, Flags: [ignore and don't forward if unknown]
+ IPv4 Transport Address: 10.1.0.2
+ Configuration Sequence Number TLV (0x0402), length: 4, Flags: [ignore and don't forward if unknown]
+ Sequence Number: 1
diff --git a/tests/mpls-ldp-hello.pcap b/tests/mpls-ldp-hello.pcap
new file mode 100644
index 0000000..a4a42b7
--- /dev/null
+++ b/tests/mpls-ldp-hello.pcap
Binary files differ
diff --git a/tests/mpls-over-udp-v.out b/tests/mpls-over-udp-v.out
new file mode 100644
index 0000000..684a7dc
--- /dev/null
+++ b/tests/mpls-over-udp-v.out
@@ -0,0 +1,8 @@
+ 1 19:10:12.233047 IP (tos 0x0, ttl 64, id 26479, offset 0, flags [none], proto UDP (17), length 116)
+ 10.100.12.170.58699 > 10.100.13.157.6635: MPLS (label 21, tc 0, [S], ttl 63)
+ IP (tos 0x0, ttl 63, id 26479, offset 0, flags [DF], proto ICMP (1), length 84)
+ 10.3.0.10 > 10.1.0.10: ICMP echo request, id 42731, seq 16, length 64
+ 2 19:10:12.233101 IP (tos 0x0, ttl 64, id 46612, offset 0, flags [none], proto UDP (17), length 116)
+ 10.100.13.157.51348 > 10.100.12.170.6635: MPLS (label 46, tc 0, [S], ttl 63)
+ IP (tos 0x0, ttl 63, id 46612, offset 0, flags [none], proto ICMP (1), length 84)
+ 10.1.0.10 > 10.3.0.10: ICMP echo reply, id 42731, seq 16, length 64
diff --git a/tests/mpls-over-udp.out b/tests/mpls-over-udp.out
new file mode 100644
index 0000000..6bb5d6f
--- /dev/null
+++ b/tests/mpls-over-udp.out
@@ -0,0 +1,2 @@
+ 1 19:10:12.233047 IP 10.100.12.170.58699 > 10.100.13.157.6635: MPLS (label 21, tc 0, [S], ttl 63) IP 10.3.0.10 > 10.1.0.10: ICMP echo request, id 42731, seq 16, length 64
+ 2 19:10:12.233101 IP 10.100.13.157.51348 > 10.100.12.170.6635: MPLS (label 46, tc 0, [S], ttl 63) IP 10.1.0.10 > 10.3.0.10: ICMP echo reply, id 42731, seq 16, length 64
diff --git a/tests/mpls-over-udp.pcap b/tests/mpls-over-udp.pcap
new file mode 100644
index 0000000..5f3b33c
--- /dev/null
+++ b/tests/mpls-over-udp.pcap
Binary files differ
diff --git a/tests/mpls-traceroute-v.out b/tests/mpls-traceroute-v.out
new file mode 100644
index 0000000..d6f09ba
--- /dev/null
+++ b/tests/mpls-traceroute-v.out
@@ -0,0 +1,81 @@
+ 1 10:13:29.315598 MPLS (label 100704, tc 0, [S], ttl 1)
+ IP (tos 0x0, ttl 1, id 42316, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33435: UDP, length 12
+ 2 10:13:29.316413 IP (tos 0x0, ttl 255, id 5014, offset 0, flags [DF], proto ICMP (1), length 168)
+ 10.5.0.1 > 12.4.4.4: ICMP time exceeded in-transit, length 148
+ IP (tos 0x0, ttl 1, id 42316, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33435: UDP, length 12
+ ICMP Multi-Part extension v2, checksum 0xc55f (correct), length 12
+ MPLS Stack Entry Object (1), Class-Type: 1, length 8
+ label 100704, tc 0, [S], ttl 1
+ 3 10:13:29.319182 MPLS (label 100704, tc 0, [S], ttl 1)
+ IP (tos 0x0, ttl 1, id 42317, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33436: UDP, length 12
+ 4 10:13:29.326330 IP (tos 0x0, ttl 255, id 5015, offset 0, flags [DF], proto ICMP (1), length 168)
+ 10.5.0.1 > 12.4.4.4: ICMP time exceeded in-transit, length 148
+ IP (tos 0x0, ttl 1, id 42317, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33436: UDP, length 12
+ ICMP Multi-Part extension v2, checksum 0xc55f (correct), length 12
+ MPLS Stack Entry Object (1), Class-Type: 1, length 8
+ label 100704, tc 0, [S], ttl 1
+ 5 10:13:29.326697 MPLS (label 100704, tc 0, [S], ttl 1)
+ IP (tos 0x0, ttl 1, id 42318, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33437: UDP, length 12
+ 6 10:13:29.327328 IP (tos 0x0, ttl 255, id 5016, offset 0, flags [DF], proto ICMP (1), length 168)
+ 10.5.0.1 > 12.4.4.4: ICMP time exceeded in-transit, length 148
+ IP (tos 0x0, ttl 1, id 42318, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33437: UDP, length 12
+ ICMP Multi-Part extension v2, checksum 0xc55f (correct), length 12
+ MPLS Stack Entry Object (1), Class-Type: 1, length 8
+ label 100704, tc 0, [S], ttl 1
+ 7 10:13:29.327769 MPLS (label 100704, tc 0, [S], ttl 2)
+ IP (tos 0x0, ttl 2, id 42319, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33438: UDP, length 12
+ 8 10:13:29.328510 IP (tos 0x0, ttl 254, id 59166, offset 0, flags [DF], proto ICMP (1), length 168)
+ 10.4.0.2 > 12.4.4.4: ICMP time exceeded in-transit, length 148
+ IP (tos 0x0, ttl 1, id 42319, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33438: UDP, length 12
+ ICMP Multi-Part extension v2, checksum 0xc4e4 (correct), length 12
+ MPLS Stack Entry Object (1), Class-Type: 1, length 8
+ label 102672, tc 0, [S], ttl 1
+ 9 10:13:29.330110 MPLS (label 100704, tc 0, [S], ttl 2)
+ IP (tos 0x0, ttl 2, id 42320, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33439: UDP, length 12
+ 10 10:13:29.330735 IP (tos 0x0, ttl 254, id 59167, offset 0, flags [DF], proto ICMP (1), length 168)
+ 10.4.0.2 > 12.4.4.4: ICMP time exceeded in-transit, length 148
+ IP (tos 0x0, ttl 1, id 42320, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33439: UDP, length 12
+ ICMP Multi-Part extension v2, checksum 0xc4e4 (correct), length 12
+ MPLS Stack Entry Object (1), Class-Type: 1, length 8
+ label 102672, tc 0, [S], ttl 1
+ 11 10:13:29.331066 MPLS (label 100704, tc 0, [S], ttl 2)
+ IP (tos 0x0, ttl 2, id 42321, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33440: UDP, length 12
+ 12 10:13:29.331681 IP (tos 0x0, ttl 254, id 59168, offset 0, flags [DF], proto ICMP (1), length 168)
+ 10.4.0.2 > 12.4.4.4: ICMP time exceeded in-transit, length 148
+ IP (tos 0x0, ttl 1, id 42321, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33440: UDP, length 12
+ ICMP Multi-Part extension v2, checksum 0xc4e4 (correct), length 12
+ MPLS Stack Entry Object (1), Class-Type: 1, length 8
+ label 102672, tc 0, [S], ttl 1
+ 13 10:13:29.332494 MPLS (label 100704, tc 0, [S], ttl 3)
+ IP (tos 0x0, ttl 3, id 42322, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33441: UDP, length 12
+ 14 10:13:29.333151 IP (tos 0x0, ttl 253, id 50599, offset 0, flags [DF], proto ICMP (1), length 56)
+ 12.1.1.1 > 12.4.4.4: ICMP 12.1.1.1 udp port 33441 unreachable, length 36
+ IP (tos 0x0, ttl 1, id 42322, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33441: UDP, length 12
+ 15 10:13:29.609602 MPLS (label 100704, tc 0, [S], ttl 3)
+ IP (tos 0x0, ttl 3, id 42323, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33442: UDP, length 12
+ 16 10:13:29.610234 IP (tos 0x0, ttl 253, id 50600, offset 0, flags [DF], proto ICMP (1), length 56)
+ 12.1.1.1 > 12.4.4.4: ICMP 12.1.1.1 udp port 33442 unreachable, length 36
+ IP (tos 0x0, ttl 1, id 42323, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33442: UDP, length 12
+ 17 10:13:29.610710 MPLS (label 100704, tc 0, [S], ttl 3)
+ IP (tos 0x0, ttl 3, id 42324, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33443: UDP, length 12
+ 18 10:13:29.611307 IP (tos 0x0, ttl 253, id 50601, offset 0, flags [DF], proto ICMP (1), length 56)
+ 12.1.1.1 > 12.4.4.4: ICMP 12.1.1.1 udp port 33443 unreachable, length 36
+ IP (tos 0x0, ttl 1, id 42324, offset 0, flags [none], proto UDP (17), length 40)
+ 12.4.4.4.42315 > 12.1.1.1.33443: UDP, length 12
diff --git a/tests/mpls-traceroute.out b/tests/mpls-traceroute.out
new file mode 100644
index 0000000..30128c7
--- /dev/null
+++ b/tests/mpls-traceroute.out
@@ -0,0 +1,18 @@
+ 1 10:13:29.315598 MPLS (label 100704, tc 0, [S], ttl 1) IP 12.4.4.4.42315 > 12.1.1.1.33435: UDP, length 12
+ 2 10:13:29.316413 IP 10.5.0.1 > 12.4.4.4: ICMP time exceeded in-transit, length 148
+ 3 10:13:29.319182 MPLS (label 100704, tc 0, [S], ttl 1) IP 12.4.4.4.42315 > 12.1.1.1.33436: UDP, length 12
+ 4 10:13:29.326330 IP 10.5.0.1 > 12.4.4.4: ICMP time exceeded in-transit, length 148
+ 5 10:13:29.326697 MPLS (label 100704, tc 0, [S], ttl 1) IP 12.4.4.4.42315 > 12.1.1.1.33437: UDP, length 12
+ 6 10:13:29.327328 IP 10.5.0.1 > 12.4.4.4: ICMP time exceeded in-transit, length 148
+ 7 10:13:29.327769 MPLS (label 100704, tc 0, [S], ttl 2) IP 12.4.4.4.42315 > 12.1.1.1.33438: UDP, length 12
+ 8 10:13:29.328510 IP 10.4.0.2 > 12.4.4.4: ICMP time exceeded in-transit, length 148
+ 9 10:13:29.330110 MPLS (label 100704, tc 0, [S], ttl 2) IP 12.4.4.4.42315 > 12.1.1.1.33439: UDP, length 12
+ 10 10:13:29.330735 IP 10.4.0.2 > 12.4.4.4: ICMP time exceeded in-transit, length 148
+ 11 10:13:29.331066 MPLS (label 100704, tc 0, [S], ttl 2) IP 12.4.4.4.42315 > 12.1.1.1.33440: UDP, length 12
+ 12 10:13:29.331681 IP 10.4.0.2 > 12.4.4.4: ICMP time exceeded in-transit, length 148
+ 13 10:13:29.332494 MPLS (label 100704, tc 0, [S], ttl 3) IP 12.4.4.4.42315 > 12.1.1.1.33441: UDP, length 12
+ 14 10:13:29.333151 IP 12.1.1.1 > 12.4.4.4: ICMP 12.1.1.1 udp port 33441 unreachable, length 36
+ 15 10:13:29.609602 MPLS (label 100704, tc 0, [S], ttl 3) IP 12.4.4.4.42315 > 12.1.1.1.33442: UDP, length 12
+ 16 10:13:29.610234 IP 12.1.1.1 > 12.4.4.4: ICMP 12.1.1.1 udp port 33442 unreachable, length 36
+ 17 10:13:29.610710 MPLS (label 100704, tc 0, [S], ttl 3) IP 12.4.4.4.42315 > 12.1.1.1.33443: UDP, length 12
+ 18 10:13:29.611307 IP 12.1.1.1 > 12.4.4.4: ICMP 12.1.1.1 udp port 33443 unreachable, length 36
diff --git a/tests/mpls-traceroute.pcap b/tests/mpls-traceroute.pcap
new file mode 100644
index 0000000..ac0b6b3
--- /dev/null
+++ b/tests/mpls-traceroute.pcap
Binary files differ
diff --git a/tests/mptcp-aa-echo.out b/tests/mptcp-aa-echo.out
new file mode 100644
index 0000000..2cfa562
--- /dev/null
+++ b/tests/mptcp-aa-echo.out
@@ -0,0 +1,2 @@
+ 1 11:02:20.402400 IP 10.0.1.1.10000 > 10.0.3.2.54737: Flags [.], ack 2863732622, win 510, options [nop,nop,TS val 2041598247 ecr 805948318,mptcp 16 add-addr v1 id 1 10.0.2.1 hmac 0xf8295862f645df19,mptcp 8 dss ack 3502078703], length 0
+ 2 11:02:20.602589 IP 10.0.1.2.35924 > 10.0.1.1.10000: Flags [.], ack 2394667731, win 501, options [nop,nop,TS val 373322532 ecr 4275366718,mptcp 8 add-addr v1-echo id 1 10.0.2.1,mptcp 12 dss ack 17984156407873109865], length 0
diff --git a/tests/mptcp-aa-echo.pcap b/tests/mptcp-aa-echo.pcap
new file mode 100644
index 0000000..b7d7107
--- /dev/null
+++ b/tests/mptcp-aa-echo.pcap
Binary files differ
diff --git a/tests/mptcp-aa-v1.out b/tests/mptcp-aa-v1.out
new file mode 100644
index 0000000..d47bbed
--- /dev/null
+++ b/tests/mptcp-aa-v1.out
@@ -0,0 +1,24 @@
+ 1 18:44:15.949492 IP 192.168.125.165.43428 > 192.168.125.1.53: 61359+ A? proxy-chain.intel.com.network2. (48)
+ 2 18:44:15.949675 IP 192.168.125.165.43428 > 192.168.125.1.53: 30665+ AAAA? proxy-chain.intel.com.network2. (48)
+ 3 18:44:24.039044 IP 192.168.125.212.52278 > 192.168.125.165.55555: Flags [S], seq 653223703, win 64240, options [mss 1460,sackOK,TS val 2070300959 ecr 0,nop,wscale 7,mptcp 4 capable v1], length 0
+ 4 18:44:24.039622 IP 192.168.125.165.55555 > 192.168.125.212.52278: Flags [S.], seq 3797229782, ack 653223704, win 65160, options [mss 1460,sackOK,TS val 938670159 ecr 2070300959,nop,wscale 7,mptcp 12 capable v1 {0x73bb150358a0aecb}], length 0
+ 5 18:44:24.039910 IP 192.168.125.212.52278 > 192.168.125.165.55555: Flags [.], ack 1, win 502, options [nop,nop,TS val 2070300960 ecr 938670159,mptcp 20 capable v1 {0x8f0c7c64a6a32ac1,0x73bb150358a0aecb}], length 0
+ 6 18:44:24.042337 IP 192.168.125.212.52278 > 192.168.125.165.55555: Flags [P.], seq 1:17, ack 1, win 502, options [nop,nop,TS val 2070300963 ecr 938670159,mptcp 22 capable v1 {0x8f0c7c64a6a32ac1,0x73bb150358a0aecb},nop,nop], length 16
+ 7 18:44:24.042622 IP 192.168.125.165.55555 > 192.168.125.212.52278: Flags [.], ack 17, win 509, options [nop,nop,TS val 938670162 ecr 2070300963,mptcp 12 dss ack 17186763219675866565], length 0
+ 8 18:44:24.043277 IP 192.168.125.165.55555 > 192.168.125.212.52278: Flags [P.], seq 1:17, ack 17, win 509, options [nop,nop,TS val 938670163 ecr 2070300963,mptcp 26 dss ack 17186763219675866581 seq 12148165319181844526 subseq 1 len 16,nop,nop], length 16
+ 9 18:44:24.043512 IP 192.168.125.212.52278 > 192.168.125.165.55555: Flags [.], ack 17, win 502, options [nop,nop,TS val 2070300964 ecr 938670163,mptcp 12 dss ack 12148165319181844526], length 0
+ 10 18:44:24.247920 IP 192.168.125.165.55555 > 192.168.125.212.52278: Flags [P.], seq 17:33, ack 17, win 509, options [nop,nop,TS val 938670368 ecr 2070300964,mptcp 26 dss ack 17186763219675866581 seq 12148165319181844526 subseq 17 len 16,nop,nop], length 16
+ 11 18:44:24.248383 IP 192.168.125.212.52278 > 192.168.125.165.55555: Flags [.], ack 33, win 502, options [nop,nop,TS val 2070301169 ecr 938670368,mptcp 12 dss ack 12148165319181844542], length 0
+ 12 18:44:25.046480 IP 192.168.125.212.52278 > 192.168.125.165.55555: Flags [P.], seq 17:33, ack 33, win 502, options [nop,nop,TS val 2070301967 ecr 938670368,mptcp 26 dss ack 12148165319181844542 seq 17186763219675866581 subseq 17 len 16,nop,nop], length 16
+ 13 18:44:25.046726 IP 192.168.125.165.55555 > 192.168.125.212.52278: Flags [.], ack 33, win 509, options [nop,nop,TS val 938671166 ecr 2070301967,mptcp 16 add-addr v1 id 1 192.168.136.225 hmac 0x669928744366716c,mptcp 12 dss ack 17186763219675866581], length 0
+ 14 18:44:25.048465 IP 192.168.125.165.55555 > 192.168.125.212.52278: Flags [P.], seq 33:49, ack 33, win 509, options [nop,nop,TS val 938671168 ecr 2070301967,mptcp 26 dss ack 17186763219675866597 seq 12148165319181844542 subseq 33 len 16,nop,nop], length 16
+ 15 18:44:25.048568 IP 192.168.125.212.52278 > 192.168.125.165.55555: Flags [.], ack 49, win 502, options [nop,nop,TS val 2070301969 ecr 938671168,mptcp 12 dss ack 12148165319181844542], length 0
+ 16 18:44:25.256088 IP 192.168.125.165.55555 > 192.168.125.212.52278: Flags [P.], seq 49:65, ack 33, win 509, options [nop,nop,TS val 938671376 ecr 2070301969,mptcp 26 dss ack 17186763219675866597 seq 12148165319181844542 subseq 49 len 16,nop,nop], length 16
+ 17 18:44:25.256361 IP 192.168.125.212.52278 > 192.168.125.165.55555: Flags [.], ack 65, win 502, options [nop,nop,TS val 2070302177 ecr 938671376,mptcp 12 dss ack 12148165319181844558], length 0
+ 18 18:44:26.048795 IP 192.168.125.212.52278 > 192.168.125.165.55555: Flags [P.], seq 33:49, ack 65, win 502, options [nop,nop,TS val 2070302969 ecr 938671376,mptcp 26 dss ack 12148165319181844558 seq 17186763219675866597 subseq 33 len 16,nop,nop], length 16
+ 19 18:44:26.049014 IP 192.168.125.165.55555 > 192.168.125.212.52278: Flags [.], ack 49, win 509, options [nop,nop,TS val 938672169 ecr 2070302969,mptcp 12 dss ack 17186763219675866597], length 0
+ 20 18:44:26.049644 IP 192.168.125.165.55555 > 192.168.125.212.52278: Flags [P.], seq 65:81, ack 49, win 509, options [nop,nop,TS val 938672169 ecr 2070302969,mptcp 26 dss ack 17186763219675866613 seq 12148165319181844558 subseq 65 len 16,nop,nop], length 16
+ 21 18:44:26.049972 IP 192.168.125.212.52278 > 192.168.125.165.55555: Flags [.], ack 81, win 502, options [nop,nop,TS val 2070302970 ecr 938672169,mptcp 12 dss ack 12148165319181844558], length 0
+ 22 18:44:26.049982 IP 192.168.125.212.52278 > 192.168.125.165.55555: Flags [F.], seq 49, ack 81, win 502, options [nop,nop,TS val 2070302970 ecr 938672169,mptcp 26 dss fin ack 12148165319181844574 seq 17186763219675866613 subseq 0 len 1,nop,nop], length 0
+ 23 18:44:26.050692 IP 192.168.125.165.55555 > 192.168.125.212.52278: Flags [F.], seq 81, ack 50, win 509, options [nop,nop,TS val 938672171 ecr 2070302970,mptcp 26 dss fin ack 17186763219675866613 seq 12148165319181844574 subseq 0 len 1,nop,nop], length 0
+ 24 18:44:26.050757 IP 192.168.125.212.52278 > 192.168.125.165.55555: Flags [.], ack 82, win 502, options [nop,nop,TS val 2070302971 ecr 938672171,mptcp 12 dss ack 12148165319181844574], length 0
diff --git a/tests/mptcp-aa-v1.pcap b/tests/mptcp-aa-v1.pcap
new file mode 100644
index 0000000..658887c
--- /dev/null
+++ b/tests/mptcp-aa-v1.pcap
Binary files differ
diff --git a/tests/mptcp-dss-oobr.out b/tests/mptcp-dss-oobr.out
new file mode 100644
index 0000000..0e09efd
--- /dev/null
+++ b/tests/mptcp-dss-oobr.out
@@ -0,0 +1,2 @@
+ 1 03:32:08.002213 IP (tos 0x10, ttl 64, id 39991, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.57370 > 127.0.0.1.23: Flags [S], seq 1736820995, win 32792, options [mss 16396,sackOK,TS val 597120308 ecr 0,mptcp 3 dss[bad opt]]
diff --git a/tests/mptcp-dss-oobr.pcap b/tests/mptcp-dss-oobr.pcap
new file mode 100644
index 0000000..6cac7a5
--- /dev/null
+++ b/tests/mptcp-dss-oobr.pcap
Binary files differ
diff --git a/tests/mptcp-fclose.out b/tests/mptcp-fclose.out
new file mode 100644
index 0000000..a9b4d99
--- /dev/null
+++ b/tests/mptcp-fclose.out
@@ -0,0 +1,11 @@
+ 1 15:40:42.767916 ARP, Request who-has 10.2.1.2 tell 10.2.1.1, length 28
+ 2 15:40:42.768169 ARP, Reply 10.2.1.2 is-at d6:06:3c:4a:35:7a, length 28
+ 3 15:40:42.768187 IP 10.1.1.2.37479 > 10.2.1.2.2002: Flags [S], seq 1895673170, win 14600, options [mss 1460,sackOK,TS val 38230 ecr 0,nop,wscale 6,mptcp 12 capable v0 csum {0x9b59be3d695e66a7}], length 0
+ 4 15:40:42.768439 IP 10.2.1.2.2002 > 10.1.1.2.37479: Flags [S.], seq 2868811558, ack 1895673171, win 14280, options [mss 1460,sackOK,TS val 4294943148 ecr 38230,nop,wscale 6,mptcp 12 capable v0 csum {0xd005b1ab34bad344}], length 0
+ 5 15:40:42.768831 IP 10.1.1.2.37479 > 10.2.1.2.2002: Flags [.], ack 1, win 229, options [nop,nop,TS val 38230 ecr 4294943148,mptcp 20 capable v0 csum {0x9b59be3d695e66a7,0xd005b1ab34bad344}], length 0
+ 6 15:40:42.769130 IP 10.1.1.2.37479 > 10.2.1.2.2002: Flags [P.], seq 1:2, ack 1, win 229, options [nop,nop,TS val 38230 ecr 4294943148,mptcp 20 dss ack 3386645601 seq 2976985014 subseq 1 len 1 csum 0x9e91], length 1
+ 7 15:40:42.769364 IP 10.2.1.2.2002 > 10.1.1.2.37479: Flags [.], ack 2, win 224, options [nop,nop,TS val 4294943148 ecr 38230,mptcp 8 dss ack 2976985015], length 0
+ 8 15:40:43.780182 IP 10.2.1.2.2002 > 10.1.1.2.37479: Flags [P.], seq 1:2, ack 2, win 224, options [nop,nop,TS val 4294943250 ecr 38230,mptcp 20 dss ack 2976985015 seq 3386645601 subseq 1 len 1 csum 0x54ab], length 1
+ 9 15:40:43.780384 IP 10.1.1.2.37479 > 10.2.1.2.2002: Flags [.], ack 2, win 229, options [nop,nop,TS val 38334 ecr 4294943250,mptcp 8 dss ack 3386645602], length 0
+ 10 15:40:47.779986 IP 10.1.1.2.37479 > 10.2.1.2.2002: Flags [.], ack 2, win 229, options [nop,nop,TS val 38734 ecr 4294943250,mptcp 12 fast-close key 0xd005b1ab34bad344], length 0
+ 11 15:40:47.780117 IP 10.2.1.2.2002 > 10.1.1.2.37479: Flags [R.], seq 2, ack 2, win 224, options [nop,nop,TS val 4294943650 ecr 38734,mptcp 8 dss ack 2976985015], length 0
diff --git a/tests/mptcp-fclose.pcap b/tests/mptcp-fclose.pcap
new file mode 100644
index 0000000..6949548
--- /dev/null
+++ b/tests/mptcp-fclose.pcap
Binary files differ
diff --git a/tests/mptcp-v0.out b/tests/mptcp-v0.out
new file mode 100644
index 0000000..6f793f4
--- /dev/null
+++ b/tests/mptcp-v0.out
@@ -0,0 +1,264 @@
+ 1 12:56:35.701161 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [S], seq 2912457561, win 14600, options [mss 1460,sackOK,TS val 4294943152 ecr 0,nop,wscale 6,mptcp 12 capable v0 csum {0x9c9eabd1e46a33b2}], length 0
+ 2 12:56:35.701661 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [S.], seq 125971326, ack 2912457562, win 14280, options [mss 1460,sackOK,TS val 4294943467 ecr 4294943152,nop,wscale 5,mptcp 12 capable v0 csum {0x967d2770b6960552}], length 0
+ 3 12:56:35.702022 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1, win 229, options [nop,nop,TS val 4294943152 ecr 4294943467,mptcp 20 capable v0 csum {0x9c9eabd1e46a33b2,0x967d2770b6960552}], length 0
+ 4 12:56:35.786074 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1:42, ack 1, win 447, options [nop,nop,TS val 4294943474 ecr 4294943152,mptcp 8 add-addr v0-ip4 id 1 10.1.2.2,mptcp 20 dss ack 3576348362 seq 3518592144 subseq 1 len 41 csum 0x82f], length 41: SSH: SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze1
+ 5 12:56:35.786240 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 42, win 229, options [nop,nop,TS val 4294943168 ecr 4294943474,mptcp 8 dss ack 3518592185], length 0
+ 6 12:56:35.787634 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 1:42, ack 42, win 229, options [nop,nop,TS val 4294943168 ecr 4294943474,mptcp 20 dss ack 3518592185 seq 3576348362 subseq 1 len 41 csum 0x45c9], length 41: SSH: SSH-2.0-OpenSSH_5.5p1 Debian-6+squeeze2
+ 7 12:56:35.787786 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [.], ack 42, win 447, options [nop,nop,TS val 4294943474 ecr 4294943168,mptcp 8 dss ack 3576348403], length 0
+ 8 12:56:35.788254 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [S], seq 1863826096, win 14600, options [mss 1460,sackOK,TS val 4294943168 ecr 0,nop,wscale 6,mptcp 12 join id 0 token 0xe47f0142 nonce 0x1b665a18], length 0
+ 9 12:56:35.788849 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [S.], seq 1704897135, ack 1863826097, win 14280, options [mss 1460,sackOK,TS val 4294943474 ecr 4294943168,nop,wscale 5,mptcp 16 join id 1 hmac 0x5ab680c7884af03d nonce 0x33abe9d5], length 0
+ 10 12:56:35.788970 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 1, win 229, options [nop,nop,TS val 4294943168 ecr 4294943474,mptcp 24 join hmac 0xcb7b87f5e5f0502f43b535fb70ef6607df2e6c7a], length 0
+ 11 12:56:35.789119 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 42:890, ack 42, win 229, options [nop,nop,TS val 4294943168 ecr 4294943474,mptcp 20 dss ack 3518592185 seq 3576348403 subseq 42 len 848 csum 0x6d11], length 848
+ 12 12:56:35.789184 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [.], ack 1, win 447, options [nop,nop,TS val 4294943474 ecr 4294943168,mptcp 8 dss ack 3576348403], length 0
+ 13 12:56:35.789363 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [.], ack 890, win 500, options [nop,nop,TS val 4294943474 ecr 4294943168,mptcp 8 dss ack 3576349251], length 0
+ 14 12:56:35.808319 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 1:785, ack 1, win 500, options [nop,nop,TS val 4294943474 ecr 4294943168,mptcp 20 dss ack 3576349251 seq 3518592185 subseq 1 len 784 csum 0x5187], length 784
+ 15 12:56:35.808457 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 785, win 253, options [nop,nop,TS val 4294943170 ecr 4294943474,mptcp 8 dss ack 3518592969], length 0
+ 16 12:56:35.809183 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 1:25, ack 785, win 253, options [nop,nop,TS val 4294943170 ecr 4294943474,mptcp 20 dss ack 3518592969 seq 3576349251 subseq 1 len 24 csum 0xec8a], length 24
+ 17 12:56:35.809313 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [.], ack 25, win 500, options [nop,nop,TS val 4294943474 ecr 4294943170,mptcp 8 dss ack 3576349275], length 0
+ 18 12:56:35.818371 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 785:937, ack 25, win 500, options [nop,nop,TS val 4294943474 ecr 4294943170,mptcp 20 dss ack 3576349275 seq 3518592969 subseq 785 len 152 csum 0x217c], length 152
+ 19 12:56:35.820848 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 25:169, ack 937, win 258, options [nop,nop,TS val 4294943170 ecr 4294943474,mptcp 20 dss ack 3518593121 seq 3576349275 subseq 25 len 144 csum 0x7220], length 144
+ 20 12:56:35.832310 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 937:1657, ack 169, win 533, options [nop,nop,TS val 4294943474 ecr 4294943170,mptcp 20 dss ack 3576349419 seq 3518593121 subseq 937 len 720 csum 0xfb83], length 720
+ 21 12:56:35.836233 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 890:906, ack 42, win 280, options [nop,nop,TS val 4294943172 ecr 4294943474,mptcp 20 dss ack 3518593841 seq 3576349419 subseq 890 len 16 csum 0xc87], length 16
+ 22 12:56:35.836394 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [.], ack 906, win 533, options [nop,nop,TS val 4294943474 ecr 4294943172,mptcp 8 dss ack 3576349435], length 0
+ 23 12:56:35.836507 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 906:954, ack 42, win 280, options [nop,nop,TS val 4294943172 ecr 4294943474,mptcp 20 dss ack 3518593841 seq 3576349435 subseq 906 len 48 csum 0x36d0], length 48
+ 24 12:56:35.836611 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [.], ack 954, win 533, options [nop,nop,TS val 4294943474 ecr 4294943172,mptcp 8 dss ack 3576349483], length 0
+ 25 12:56:35.836876 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 1657:1705, ack 169, win 533, options [nop,nop,TS val 4294943474 ecr 4294943170,mptcp 20 dss ack 3576349483 seq 3518593841 subseq 1657 len 48 csum 0xb8f3], length 48
+ 26 12:56:35.837021 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 1705, win 280, options [nop,nop,TS val 4294943172 ecr 4294943474,mptcp 8 dss ack 3518593889], length 0
+ 27 12:56:35.837331 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 954:1018, ack 42, win 280, options [nop,nop,TS val 4294943172 ecr 4294943474,mptcp 20 dss ack 3518593889 seq 3576349483 subseq 954 len 64 csum 0x71f6], length 64
+ 28 12:56:35.837430 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [.], ack 1018, win 533, options [nop,nop,TS val 4294943474 ecr 4294943172,mptcp 8 dss ack 3576349547], length 0
+ 29 12:56:35.855648 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 1705:1769, ack 169, win 533, options [nop,nop,TS val 4294943474 ecr 4294943172,mptcp 20 dss ack 3576349547 seq 3518593889 subseq 1705 len 64 csum 0x67b9], length 64
+ 30 12:56:35.855893 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 1018:1386, ack 42, win 280, options [nop,nop,TS val 4294943175 ecr 4294943474,mptcp 20 dss ack 3518593953 seq 3576349547 subseq 1018 len 368 csum 0x81d2], length 368
+ 31 12:56:35.856045 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [.], ack 1386, win 567, options [nop,nop,TS val 4294943474 ecr 4294943175,mptcp 8 dss ack 3576349915], length 0
+ 32 12:56:35.864308 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 1769:2089, ack 169, win 567, options [nop,nop,TS val 4294943474 ecr 4294943172,mptcp 20 dss ack 3576349915 seq 3518593953 subseq 1769 len 320 csum 0x5fc5], length 320
+ 33 12:56:35.864462 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2089, win 290, options [nop,nop,TS val 4294943175 ecr 4294943474,mptcp 8 dss ack 3518594273], length 0
+ 34 12:56:35.876367 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 1386:2026, ack 42, win 290, options [nop,nop,TS val 4294943175 ecr 4294943474,mptcp 20 dss ack 3518594273 seq 3576349915 subseq 1386 len 640 csum 0x5af4], length 640
+ 35 12:56:35.876484 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [.], ack 2026, win 607, options [nop,nop,TS val 4294943485 ecr 4294943175,mptcp 8 dss ack 3576350555], length 0
+ 36 12:56:35.881115 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2089:2153, ack 169, win 607, options [nop,nop,TS val 4294943485 ecr 4294943175,mptcp 20 dss ack 3576350555 seq 3518594273 subseq 2089 len 64 csum 0x548b], length 64
+ 37 12:56:35.894682 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2153, win 290, options [nop,nop,TS val 4294943179 ecr 4294943485,mptcp 8 dss ack 3518594337], length 0
+ 38 12:56:37.122657 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2026:2170, ack 42, win 290, options [nop,nop,TS val 4294943301 ecr 4294943485,mptcp 20 dss ack 3518594337 seq 3576350555 subseq 2026 len 144 csum 0x62d7], length 144
+ 39 12:56:37.122822 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [.], ack 2170, win 640, options [nop,nop,TS val 4294943610 ecr 4294943301,mptcp 8 dss ack 3576350699], length 0
+ 40 12:56:37.150400 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 42:74, ack 2170, win 640, options [nop,nop,TS val 4294943611 ecr 4294943301,mptcp 20 dss ack 3576350699 seq 3518594337 subseq 42 len 32 csum 0x24cb], length 32
+ 41 12:56:37.152255 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2170:2298, ack 74, win 290, options [nop,nop,TS val 4294943304 ecr 4294943611,mptcp 20 dss ack 3518594369 seq 3576350699 subseq 2170 len 128 csum 0x33ac], length 128
+ 42 12:56:37.170125 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 74:122, ack 2298, win 674, options [nop,nop,TS val 4294943611 ecr 4294943304,mptcp 20 dss ack 3576350827 seq 3518594369 subseq 74 len 48 csum 0xf616], length 48
+ 43 12:56:37.170732 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 169:617, ack 2153, win 290, options [nop,nop,TS val 4294943306 ecr 4294943485,mptcp 20 dss ack 3518594417 seq 3576350827 subseq 169 len 448 csum 0xe192], length 448
+ 44 12:56:37.178205 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 122:234, ack 2298, win 707, options [nop,nop,TS val 4294943611 ecr 4294943304,mptcp 20 dss ack 3576351275 seq 3518594417 subseq 122 len 112 csum 0xeb29], length 112
+ 45 12:56:37.178417 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 234, win 290, options [nop,nop,TS val 4294943306 ecr 4294943611,mptcp 8 dss ack 3518594529], length 0
+ 46 12:56:37.194867 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 234:346, ack 2298, win 707, options [nop,nop,TS val 4294943611 ecr 4294943306,mptcp 20 dss ack 3576351275 seq 3518594529 subseq 234 len 112 csum 0x70c0], length 112
+ 47 12:56:37.195303 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 346:538, ack 2298, win 707, options [nop,nop,TS val 4294943611 ecr 4294943306,mptcp 20 dss ack 3576351275 seq 3518594641 subseq 346 len 192 csum 0x91c], length 192
+ 48 12:56:37.195478 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 538, win 296, options [nop,nop,TS val 4294943309 ecr 4294943611,mptcp 8 dss ack 3518594833], length 0
+ 49 12:56:37.195903 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 538:634, ack 2298, win 707, options [nop,nop,TS val 4294943611 ecr 4294943309,mptcp 20 dss ack 3576351275 seq 3518594833 subseq 538 len 96 csum 0x5851], length 96
+ 50 12:56:37.196257 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 634:778, ack 2298, win 707, options [nop,nop,TS val 4294943611 ecr 4294943309,mptcp 20 dss ack 3576351275 seq 3518594929 subseq 634 len 144 csum 0x405a], length 144
+ 51 12:56:37.196413 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 778, win 301, options [nop,nop,TS val 4294943309 ecr 4294943611,mptcp 8 dss ack 3518595073], length 0
+ 52 12:56:37.233594 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [.], ack 617, win 707, options [nop,nop,TS val 4294943621 ecr 4294943306,mptcp 8 dss ack 3576351275], length 0
+ 53 12:56:37.234006 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 778:858, ack 2298, win 707, options [nop,nop,TS val 4294943621 ecr 4294943309,mptcp 20 dss ack 3576351275 seq 3518595073 subseq 778 len 80 csum 0x3c7b], length 80
+ 54 12:56:37.264660 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 858, win 301, options [nop,nop,TS val 4294943316 ecr 4294943621,mptcp 8 dss ack 3518595153], length 0
+ 55 12:56:37.386418 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2298:2346, ack 858, win 301, options [nop,nop,TS val 4294943328 ecr 4294943621,mptcp 20 dss ack 3518595153 seq 3576351275 subseq 2298 len 48 csum 0xe0ce], length 48
+ 56 12:56:37.387434 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 858:906, ack 2346, win 707, options [nop,nop,TS val 4294943629 ecr 4294943328,mptcp 20 dss ack 3576351323 seq 3518595153 subseq 858 len 48 csum 0xbe20], length 48
+ 57 12:56:37.387609 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 906, win 301, options [nop,nop,TS val 4294943328 ecr 4294943629,mptcp 8 dss ack 3518595201], length 0
+ 58 12:56:37.503091 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 906:1034, ack 2346, win 707, options [nop,nop,TS val 4294943645 ecr 4294943328,mptcp 20 dss ack 3576351323 seq 3518595201 subseq 906 len 128 csum 0x3d9d], length 128
+ 59 12:56:37.503218 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1034, win 305, options [nop,nop,TS val 4294943339 ecr 4294943645,mptcp 8 dss ack 3518595329], length 0
+ 60 12:56:37.538348 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2346:2394, ack 1034, win 305, options [nop,nop,TS val 4294943343 ecr 4294943645,mptcp 20 dss ack 3518595329 seq 3576351323 subseq 2346 len 48 csum 0x8505], length 48
+ 61 12:56:37.540145 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1034:1114, ack 2394, win 707, options [nop,nop,TS val 4294943651 ecr 4294943343,mptcp 20 dss ack 3576351371 seq 3518595329 subseq 1034 len 80 csum 0xb3da], length 80
+ 62 12:56:37.540296 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1114, win 305, options [nop,nop,TS val 4294943343 ecr 4294943651,mptcp 8 dss ack 3518595409], length 0
+ 63 12:56:37.658158 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2394:2442, ack 1114, win 305, options [nop,nop,TS val 4294943355 ecr 4294943651,mptcp 20 dss ack 3518595409 seq 3576351371 subseq 2394 len 48 csum 0xd46b], length 48
+ 64 12:56:37.660394 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1114:1194, ack 2442, win 707, options [nop,nop,TS val 4294943663 ecr 4294943355,mptcp 20 dss ack 3576351419 seq 3518595409 subseq 1114 len 80 csum 0xfe3d], length 80
+ 65 12:56:37.660555 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1194, win 305, options [nop,nop,TS val 4294943355 ecr 4294943663,mptcp 8 dss ack 3518595489], length 0
+ 66 12:56:37.978284 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2442:2490, ack 1194, win 305, options [nop,nop,TS val 4294943387 ecr 4294943663,mptcp 20 dss ack 3518595489 seq 3576351419 subseq 2442 len 48 csum 0xd83], length 48
+ 67 12:56:37.979476 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1194:1242, ack 2490, win 707, options [nop,nop,TS val 4294943695 ecr 4294943387,mptcp 20 dss ack 3576351467 seq 3518595489 subseq 1194 len 48 csum 0xad99], length 48
+ 68 12:56:37.979628 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1242, win 305, options [nop,nop,TS val 4294943387 ecr 4294943695,mptcp 8 dss ack 3518595537], length 0
+ 69 12:56:38.058374 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2490:2538, ack 1242, win 305, options [nop,nop,TS val 4294943395 ecr 4294943695,mptcp 20 dss ack 3518595537 seq 3576351467 subseq 2490 len 48 csum 0x3689], length 48
+ 70 12:56:38.059543 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1242:1290, ack 2538, win 707, options [nop,nop,TS val 4294943703 ecr 4294943395,mptcp 20 dss ack 3576351515 seq 3518595537 subseq 1242 len 48 csum 0xf0cf], length 48
+ 71 12:56:38.059692 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1290, win 305, options [nop,nop,TS val 4294943395 ecr 4294943703,mptcp 8 dss ack 3518595585], length 0
+ 72 12:56:38.194189 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2538:2586, ack 1290, win 305, options [nop,nop,TS val 4294943408 ecr 4294943703,mptcp 20 dss ack 3518595585 seq 3576351515 subseq 2538 len 48 csum 0xed5f], length 48
+ 73 12:56:38.195084 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1290:1338, ack 2586, win 707, options [nop,nop,TS val 4294943717 ecr 4294943408,mptcp 20 dss ack 3576351563 seq 3518595585 subseq 1290 len 48 csum 0xf2ec], length 48
+ 74 12:56:38.195270 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1338, win 305, options [nop,nop,TS val 4294943408 ecr 4294943717,mptcp 8 dss ack 3518595633], length 0
+ 75 12:56:38.281975 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2586:2634, ack 1338, win 305, options [nop,nop,TS val 4294943417 ecr 4294943717,mptcp 20 dss ack 3518595633 seq 3576351563 subseq 2586 len 48 csum 0x3678], length 48
+ 76 12:56:38.282916 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1338:1386, ack 2634, win 707, options [nop,nop,TS val 4294943726 ecr 4294943417,mptcp 20 dss ack 3576351611 seq 3518595633 subseq 1338 len 48 csum 0xc9a1], length 48
+ 77 12:56:38.283037 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1386, win 305, options [nop,nop,TS val 4294943417 ecr 4294943726,mptcp 8 dss ack 3518595681], length 0
+ 78 12:56:38.354097 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2634:2682, ack 1386, win 305, options [nop,nop,TS val 4294943424 ecr 4294943726,mptcp 20 dss ack 3518595681 seq 3576351611 subseq 2634 len 48 csum 0x54c7], length 48
+ 79 12:56:38.355244 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1386:1434, ack 2682, win 707, options [nop,nop,TS val 4294943733 ecr 4294943424,mptcp 20 dss ack 3576351659 seq 3518595681 subseq 1386 len 48 csum 0xf5e9], length 48
+ 80 12:56:38.355394 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1434, win 305, options [nop,nop,TS val 4294943424 ecr 4294943733,mptcp 8 dss ack 3518595729], length 0
+ 81 12:56:38.458056 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2682:2730, ack 1434, win 305, options [nop,nop,TS val 4294943435 ecr 4294943733,mptcp 20 dss ack 3518595729 seq 3576351659 subseq 2682 len 48 csum 0xc90a], length 48
+ 82 12:56:38.459591 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1434:1482, ack 2730, win 707, options [nop,nop,TS val 4294943743 ecr 4294943435,mptcp 20 dss ack 3576351707 seq 3518595729 subseq 1434 len 48 csum 0x4e7d], length 48
+ 83 12:56:38.459758 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1482, win 305, options [nop,nop,TS val 4294943435 ecr 4294943743,mptcp 8 dss ack 3518595777], length 0
+ 84 12:56:38.514098 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2730:2778, ack 1482, win 305, options [nop,nop,TS val 4294943440 ecr 4294943743,mptcp 20 dss ack 3518595777 seq 3576351707 subseq 2730 len 48 csum 0x7b3d], length 48
+ 85 12:56:38.515052 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1482:1530, ack 2778, win 707, options [nop,nop,TS val 4294943749 ecr 4294943440,mptcp 20 dss ack 3576351755 seq 3518595777 subseq 1482 len 48 csum 0x83e2], length 48
+ 86 12:56:38.515220 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1530, win 305, options [nop,nop,TS val 4294943440 ecr 4294943749,mptcp 8 dss ack 3518595825], length 0
+ 87 12:56:38.642379 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2778:2826, ack 1530, win 305, options [nop,nop,TS val 4294943453 ecr 4294943749,mptcp 20 dss ack 3518595825 seq 3576351755 subseq 2778 len 48 csum 0x6e36], length 48
+ 88 12:56:38.643664 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1530:1578, ack 2826, win 707, options [nop,nop,TS val 4294943762 ecr 4294943453,mptcp 20 dss ack 3576351803 seq 3518595825 subseq 1530 len 48 csum 0xb348], length 48
+ 89 12:56:38.643820 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1578, win 305, options [nop,nop,TS val 4294943453 ecr 4294943762,mptcp 8 dss ack 3518595873], length 0
+ 90 12:56:38.689865 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2826:2874, ack 1578, win 305, options [nop,nop,TS val 4294943458 ecr 4294943762,mptcp 20 dss ack 3518595873 seq 3576351803 subseq 2826 len 48 csum 0x1991], length 48
+ 91 12:56:38.692847 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1578:1626, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943458,mptcp 20 dss ack 3576351851 seq 3518595873 subseq 1578 len 48 csum 0xb4f], length 48
+ 92 12:56:38.693226 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1626, win 305, options [nop,nop,TS val 4294943458 ecr 4294943766,mptcp 8 dss ack 3518595921], length 0
+ 93 12:56:38.704430 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1626:1722, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943458,mptcp 20 dss ack 3576351851 seq 3518595921 subseq 1626 len 96 csum 0x9334], length 96
+ 94 12:56:38.704722 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1722:1834, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943458,mptcp 20 dss ack 3576351851 seq 3518596017 subseq 1722 len 112 csum 0xdc3f], length 112
+ 95 12:56:38.704720 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1722, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518596017], length 0
+ 96 12:56:38.704912 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1834, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518596129], length 0
+ 97 12:56:38.705398 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1834:1946, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518596129 subseq 1834 len 112 csum 0x349e], length 112
+ 98 12:56:38.705503 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 1946, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518596241], length 0
+ 99 12:56:38.705834 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 1946:2042, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518596241 subseq 1946 len 96 csum 0xd5fe], length 96
+ 100 12:56:38.705918 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 2042, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518596337], length 0
+ 101 12:56:38.706030 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 2042:2154, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518596337 subseq 2042 len 112 csum 0x2c14], length 112
+ 102 12:56:38.706106 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 2154, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518596449], length 0
+ 103 12:56:38.706219 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 2154:2266, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518596449 subseq 2154 len 112 csum 0xe76e], length 112
+ 104 12:56:38.706294 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 2266, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518596561], length 0
+ 105 12:56:38.706439 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 2266:2346, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518596561 subseq 2266 len 80 csum 0x839a], length 80
+ 106 12:56:38.706579 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 2346:2442, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518596641 subseq 2346 len 96 csum 0xc1ee], length 96
+ 107 12:56:38.706621 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 2346, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518596641], length 0
+ 108 12:56:38.706745 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 2442, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518596737], length 0
+ 109 12:56:38.706787 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 2442:2506, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518596737 subseq 2442 len 64 csum 0xe67], length 64
+ 110 12:56:38.706938 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 2506:2554, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518596801 subseq 2506 len 48 csum 0x1474], length 48
+ 111 12:56:38.706974 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 2506, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518596801], length 0
+ 112 12:56:38.707090 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 2554, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518596849], length 0
+ 113 12:56:38.707290 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 2554:2650, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518596849 subseq 2554 len 96 csum 0x5dc1], length 96
+ 114 12:56:38.707368 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 2650, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518596945], length 0
+ 115 12:56:38.707479 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 2650:2762, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518596945 subseq 2650 len 112 csum 0xa20c], length 112
+ 116 12:56:38.707556 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 2762, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518597057], length 0
+ 117 12:56:38.707798 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 2762:2874, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518597057 subseq 2762 len 112 csum 0x643c], length 112
+ 118 12:56:38.707907 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 2874, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518597169], length 0
+ 119 12:56:38.708069 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 2874:2970, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518597169 subseq 2874 len 96 csum 0x5244], length 96
+ 120 12:56:38.708150 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 2970, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518597265], length 0
+ 121 12:56:38.708257 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 2970:3082, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518597265 subseq 2970 len 112 csum 0x295a], length 112
+ 122 12:56:38.708364 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 3082, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518597377], length 0
+ 123 12:56:38.708439 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 3082:3194, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518597377 subseq 3082 len 112 csum 0x510b], length 112
+ 124 12:56:38.708503 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 3194, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518597489], length 0
+ 125 12:56:38.708630 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 3194:3274, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518597489 subseq 3194 len 80 csum 0xc29a], length 80
+ 126 12:56:38.708702 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 3274, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518597569], length 0
+ 127 12:56:38.708814 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 3274:3370, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518597569 subseq 3274 len 96 csum 0x22a5], length 96
+ 128 12:56:38.708889 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 3370, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518597665], length 0
+ 129 12:56:38.709000 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 3370:3434, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518597665 subseq 3370 len 64 csum 0xe385], length 64
+ 130 12:56:38.709084 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 3434, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518597729], length 0
+ 131 12:56:38.709182 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 3434:3482, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518597729 subseq 3434 len 48 csum 0xd6b0], length 48
+ 132 12:56:38.709253 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 3482, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518597777], length 0
+ 133 12:56:38.709658 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 3482:3562, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518597777 subseq 3482 len 80 csum 0xec9d], length 80
+ 134 12:56:38.709760 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 3562, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518597857], length 0
+ 135 12:56:38.709842 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 3562:3658, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518597857 subseq 3562 len 96 csum 0x1eee], length 96
+ 136 12:56:38.709924 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 3658, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518597953], length 0
+ 137 12:56:38.710204 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 3658:3738, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518597953 subseq 3658 len 80 csum 0xbc5e], length 80
+ 138 12:56:38.710292 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 3738, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518598033], length 0
+ 139 12:56:38.710464 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 3738:3834, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518598033 subseq 3738 len 96 csum 0xe], length 96
+ 140 12:56:38.710548 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 3834, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518598129], length 0
+ 141 12:56:38.710649 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 3834:3930, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518598129 subseq 3834 len 96 csum 0xd42], length 96
+ 142 12:56:38.710725 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 3930, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518598225], length 0
+ 143 12:56:38.710836 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 3930:4042, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518598225 subseq 3930 len 112 csum 0xb006], length 112
+ 144 12:56:38.710917 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4042, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518598337], length 0
+ 145 12:56:38.711017 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4042:4122, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518598337 subseq 4042 len 80 csum 0x986f], length 80
+ 146 12:56:38.711099 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4122, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518598417], length 0
+ 147 12:56:38.711223 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4122:4218, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518598417 subseq 4122 len 96 csum 0x43ff], length 96
+ 148 12:56:38.711303 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4218, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518598513], length 0
+ 149 12:56:38.711404 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4218:4266, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518598513 subseq 4218 len 48 csum 0x8666], length 48
+ 150 12:56:38.711483 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4266, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518598561], length 0
+ 151 12:56:38.713568 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4266:4346, ack 2874, win 707, options [nop,nop,TS val 4294943766 ecr 4294943460,mptcp 20 dss ack 3576351851 seq 3518598561 subseq 4266 len 80 csum 0x9239], length 80
+ 152 12:56:38.713674 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4346, win 305, options [nop,nop,TS val 4294943460 ecr 4294943766,mptcp 8 dss ack 3518598641], length 0
+ 153 12:56:38.954239 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2874:2922, ack 4346, win 305, options [nop,nop,TS val 4294943484 ecr 4294943766,mptcp 20 dss ack 3518598641 seq 3576351851 subseq 2874 len 48 csum 0xd397], length 48
+ 154 12:56:38.955671 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4346:4394, ack 2922, win 707, options [nop,nop,TS val 4294943793 ecr 4294943484,mptcp 20 dss ack 3576351899 seq 3518598641 subseq 4346 len 48 csum 0xeeaa], length 48
+ 155 12:56:38.955827 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4394, win 305, options [nop,nop,TS val 4294943484 ecr 4294943793,mptcp 8 dss ack 3518598689], length 0
+ 156 12:56:39.074043 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2922:2970, ack 4394, win 305, options [nop,nop,TS val 4294943496 ecr 4294943793,mptcp 20 dss ack 3518598689 seq 3576351899 subseq 2922 len 48 csum 0x48a7], length 48
+ 157 12:56:39.075052 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4394:4442, ack 2970, win 707, options [nop,nop,TS val 4294943805 ecr 4294943496,mptcp 20 dss ack 3576351947 seq 3518598689 subseq 4394 len 48 csum 0xc354], length 48
+ 158 12:56:39.075234 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4442, win 305, options [nop,nop,TS val 4294943496 ecr 4294943805,mptcp 8 dss ack 3518598737], length 0
+ 159 12:56:39.242209 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 2970:3018, ack 4442, win 305, options [nop,nop,TS val 4294943513 ecr 4294943805,mptcp 20 dss ack 3518598737 seq 3576351947 subseq 2970 len 48 csum 0xf6d], length 48
+ 160 12:56:39.243635 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4442:4490, ack 3018, win 707, options [nop,nop,TS val 4294943822 ecr 4294943513,mptcp 20 dss ack 3576351995 seq 3518598737 subseq 4442 len 48 csum 0xe0e2], length 48
+ 161 12:56:39.243810 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4490, win 305, options [nop,nop,TS val 4294943513 ecr 4294943822,mptcp 8 dss ack 3518598785], length 0
+ 162 12:56:39.322026 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3018:3066, ack 4490, win 305, options [nop,nop,TS val 4294943521 ecr 4294943822,mptcp 20 dss ack 3518598785 seq 3576351995 subseq 3018 len 48 csum 0xf320], length 48
+ 163 12:56:39.323337 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4490:4538, ack 3066, win 707, options [nop,nop,TS val 4294943830 ecr 4294943521,mptcp 20 dss ack 3576352043 seq 3518598785 subseq 4490 len 48 csum 0x9c04], length 48
+ 164 12:56:39.323491 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4538, win 305, options [nop,nop,TS val 4294943521 ecr 4294943830,mptcp 8 dss ack 3518598833], length 0
+ 165 12:56:39.361866 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3066:3114, ack 4538, win 305, options [nop,nop,TS val 4294943525 ecr 4294943830,mptcp 20 dss ack 3518598833 seq 3576352043 subseq 3066 len 48 csum 0x88f6], length 48
+ 166 12:56:39.362991 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4538:4586, ack 3114, win 707, options [nop,nop,TS val 4294943834 ecr 4294943525,mptcp 20 dss ack 3576352091 seq 3518598833 subseq 4538 len 48 csum 0x8612], length 48
+ 167 12:56:39.363134 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4586, win 305, options [nop,nop,TS val 4294943525 ecr 4294943834,mptcp 8 dss ack 3518598881], length 0
+ 168 12:56:39.433951 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3114:3162, ack 4586, win 305, options [nop,nop,TS val 4294943532 ecr 4294943834,mptcp 20 dss ack 3518598881 seq 3576352091 subseq 3114 len 48 csum 0xa14c], length 48
+ 169 12:56:39.434823 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4586:4634, ack 3162, win 707, options [nop,nop,TS val 4294943841 ecr 4294943532,mptcp 20 dss ack 3576352139 seq 3518598881 subseq 4586 len 48 csum 0x7979], length 48
+ 170 12:56:39.434954 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4634, win 305, options [nop,nop,TS val 4294943532 ecr 4294943841,mptcp 8 dss ack 3518598929], length 0
+ 171 12:56:39.538085 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3162:3210, ack 4634, win 305, options [nop,nop,TS val 4294943543 ecr 4294943841,mptcp 20 dss ack 3518598929 seq 3576352139 subseq 3162 len 48 csum 0x7c49], length 48
+ 172 12:56:39.539055 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4634:4682, ack 3210, win 707, options [nop,nop,TS val 4294943851 ecr 4294943543,mptcp 20 dss ack 3576352187 seq 3518598929 subseq 4634 len 48 csum 0x7799], length 48
+ 173 12:56:39.539201 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4682, win 305, options [nop,nop,TS val 4294943543 ecr 4294943851,mptcp 8 dss ack 3518598977], length 0
+ 174 12:56:39.602143 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3210:3258, ack 4682, win 305, options [nop,nop,TS val 4294943549 ecr 4294943851,mptcp 20 dss ack 3518598977 seq 3576352187 subseq 3210 len 48 csum 0x7589], length 48
+ 175 12:56:39.603190 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4682:4730, ack 3258, win 707, options [nop,nop,TS val 4294943858 ecr 4294943549,mptcp 20 dss ack 3576352235 seq 3518598977 subseq 4682 len 48 csum 0x9da3], length 48
+ 176 12:56:39.603371 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4730, win 305, options [nop,nop,TS val 4294943549 ecr 4294943858,mptcp 8 dss ack 3518599025], length 0
+ 177 12:56:39.714195 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3258:3306, ack 4730, win 305, options [nop,nop,TS val 4294943560 ecr 4294943858,mptcp 20 dss ack 3518599025 seq 3576352235 subseq 3258 len 48 csum 0x652], length 48
+ 178 12:56:39.715277 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4730:4778, ack 3306, win 707, options [nop,nop,TS val 4294943869 ecr 4294943560,mptcp 20 dss ack 3576352283 seq 3518599025 subseq 4730 len 48 csum 0xf212], length 48
+ 179 12:56:39.715503 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4778, win 305, options [nop,nop,TS val 4294943560 ecr 4294943869,mptcp 8 dss ack 3518599073], length 0
+ 180 12:56:39.833979 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3306:3354, ack 4778, win 305, options [nop,nop,TS val 4294943572 ecr 4294943869,mptcp 20 dss ack 3518599073 seq 3576352283 subseq 3306 len 48 csum 0x757c], length 48
+ 181 12:56:39.834867 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4778:4826, ack 3354, win 707, options [nop,nop,TS val 4294943881 ecr 4294943572,mptcp 20 dss ack 3576352331 seq 3518599073 subseq 4778 len 48 csum 0x5cf1], length 48
+ 182 12:56:39.835113 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4826, win 305, options [nop,nop,TS val 4294943572 ecr 4294943881,mptcp 8 dss ack 3518599121], length 0
+ 183 12:56:39.914071 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3354:3402, ack 4826, win 305, options [nop,nop,TS val 4294943580 ecr 4294943881,mptcp 20 dss ack 3518599121 seq 3576352331 subseq 3354 len 48 csum 0x363c], length 48
+ 184 12:56:39.914889 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4826:4874, ack 3402, win 707, options [nop,nop,TS val 4294943889 ecr 4294943580,mptcp 20 dss ack 3576352379 seq 3518599121 subseq 4826 len 48 csum 0xdae4], length 48
+ 185 12:56:39.915103 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4874, win 305, options [nop,nop,TS val 4294943580 ecr 4294943889,mptcp 8 dss ack 3518599169], length 0
+ 186 12:56:40.002079 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3402:3450, ack 4874, win 305, options [nop,nop,TS val 4294943589 ecr 4294943889,mptcp 20 dss ack 3518599169 seq 3576352379 subseq 3402 len 48 csum 0x5ded], length 48
+ 187 12:56:40.003138 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4874:4922, ack 3450, win 707, options [nop,nop,TS val 4294943898 ecr 4294943589,mptcp 20 dss ack 3576352427 seq 3518599169 subseq 4874 len 48 csum 0xb977], length 48
+ 188 12:56:40.003379 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4922, win 305, options [nop,nop,TS val 4294943589 ecr 4294943898,mptcp 8 dss ack 3518599217], length 0
+ 189 12:56:40.354251 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3450:3498, ack 4922, win 305, options [nop,nop,TS val 4294943624 ecr 4294943898,mptcp 20 dss ack 3518599217 seq 3576352427 subseq 3450 len 48 csum 0x8425], length 48
+ 190 12:56:40.355428 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4922:4970, ack 3498, win 707, options [nop,nop,TS val 4294943933 ecr 4294943624,mptcp 20 dss ack 3576352475 seq 3518599217 subseq 4922 len 48 csum 0x1a42], length 48
+ 191 12:56:40.355583 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 4970, win 305, options [nop,nop,TS val 4294943624 ecr 4294943933,mptcp 8 dss ack 3518599265], length 0
+ 192 12:56:40.859118 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3498:3546, ack 4970, win 305, options [nop,nop,TS val 4294943675 ecr 4294943933,mptcp 20 dss ack 3518599265 seq 3576352475 subseq 3498 len 48 csum 0x37f5], length 48
+ 193 12:56:40.860192 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 4970:5018, ack 3546, win 707, options [nop,nop,TS val 4294943983 ecr 4294943675,mptcp 20 dss ack 3576352523 seq 3518599265 subseq 4970 len 48 csum 0xb0f0], length 48
+ 194 12:56:40.860346 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 5018, win 305, options [nop,nop,TS val 4294943675 ecr 4294943983,mptcp 8 dss ack 3518599313], length 0
+ 195 12:56:40.994318 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3546:3594, ack 5018, win 305, options [nop,nop,TS val 4294943688 ecr 4294943983,mptcp 20 dss ack 3518599313 seq 3576352523 subseq 3546 len 48 csum 0xd912], length 48
+ 196 12:56:40.995959 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 5018:5066, ack 3594, win 707, options [nop,nop,TS val 4294943997 ecr 4294943688,mptcp 20 dss ack 3576352571 seq 3518599313 subseq 5018 len 48 csum 0x5be5], length 48
+ 197 12:56:40.996118 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 5066, win 305, options [nop,nop,TS val 4294943688 ecr 4294943997,mptcp 8 dss ack 3518599361], length 0
+ 198 12:56:41.138012 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3594:3642, ack 5066, win 305, options [nop,nop,TS val 4294943703 ecr 4294943997,mptcp 20 dss ack 3518599361 seq 3576352571 subseq 3594 len 48 csum 0x539a], length 48
+ 199 12:56:41.139064 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 5066:5114, ack 3642, win 707, options [nop,nop,TS val 4294944011 ecr 4294943703,mptcp 20 dss ack 3576352619 seq 3518599361 subseq 5066 len 48 csum 0x2d9e], length 48
+ 200 12:56:41.139220 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 5114, win 305, options [nop,nop,TS val 4294943703 ecr 4294944011,mptcp 8 dss ack 3518599409], length 0
+ 201 12:56:41.233988 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3642:3690, ack 5114, win 305, options [nop,nop,TS val 4294943712 ecr 4294944011,mptcp 20 dss ack 3518599409 seq 3576352619 subseq 3642 len 48 csum 0xbda6], length 48
+ 202 12:56:41.235129 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 5114:5162, ack 3690, win 707, options [nop,nop,TS val 4294944021 ecr 4294943712,mptcp 20 dss ack 3576352667 seq 3518599409 subseq 5114 len 48 csum 0x1bc7], length 48
+ 203 12:56:41.235295 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 5162, win 305, options [nop,nop,TS val 4294943712 ecr 4294944021,mptcp 8 dss ack 3518599457], length 0
+ 204 12:56:41.361966 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3690:3738, ack 5162, win 305, options [nop,nop,TS val 4294943725 ecr 4294944021,mptcp 20 dss ack 3518599457 seq 3576352667 subseq 3690 len 48 csum 0xad71], length 48
+ 205 12:56:41.362913 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 5162:5210, ack 3738, win 707, options [nop,nop,TS val 4294944034 ecr 4294943725,mptcp 20 dss ack 3576352715 seq 3518599457 subseq 5162 len 48 csum 0xf8f7], length 48
+ 206 12:56:41.363042 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 5210, win 305, options [nop,nop,TS val 4294943725 ecr 4294944034,mptcp 8 dss ack 3518599505], length 0
+ 207 12:56:41.570122 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [P.], seq 3738:3786, ack 5210, win 305, options [nop,nop,TS val 4294943746 ecr 4294944034,mptcp 20 dss ack 3518599505 seq 3576352715 subseq 3738 len 48 csum 0xd16], length 48
+ 208 12:56:41.575162 IP 10.1.1.2.22 > 10.2.1.2.35961: Flags [P.], seq 5210:5258, ack 3786, win 707, options [nop,nop,TS val 4294944054 ecr 4294943746,mptcp 20 dss ack 3576352763 seq 3518599505 subseq 5210 len 48 csum 0x8122], length 48
+ 209 12:56:41.575354 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [.], ack 5258, win 305, options [nop,nop,TS val 4294943746 ecr 4294944054,mptcp 8 dss ack 3518599553], length 0
+ 210 12:56:41.599551 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [.], ack 617, win 707, options [nop,nop,TS val 4294944054 ecr 4294943306,mptcp 4 rem-addr id 0,mptcp 8 dss ack 3576352763], length 0
+ 211 12:56:41.599719 IP 10.2.1.2.35961 > 10.1.1.2.22: Flags [R.], seq 3786, ack 5258, win 305, options [nop,nop,TS val 4294943749 ecr 4294944054,mptcp 8 dss ack 3518599553], length 0
+ 212 12:56:41.602591 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2153:2233, ack 617, win 707, options [nop,nop,TS val 4294944054 ecr 4294943306,mptcp 20 dss ack 3576352763 seq 3518599553 subseq 2153 len 80 csum 0xe206], length 80
+ 213 12:56:41.602690 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2233, win 305, options [nop,nop,TS val 4294943749 ecr 4294944054,mptcp 8 dss ack 3518599633], length 0
+ 214 12:56:41.930276 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 617:665, ack 2233, win 305, options [nop,nop,TS val 4294943782 ecr 4294944054,mptcp 20 dss ack 3518599633 seq 3576352763 subseq 617 len 48 csum 0xa135], length 48
+ 215 12:56:41.930432 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [.], ack 665, win 707, options [nop,nop,TS val 4294944090 ecr 4294943782,mptcp 8 dss ack 3576352811], length 0
+ 216 12:56:41.932626 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2233:2313, ack 665, win 707, options [nop,nop,TS val 4294944090 ecr 4294943782,mptcp 20 dss ack 3576352811 seq 3518599633 subseq 2233 len 80 csum 0x917d], length 80
+ 217 12:56:41.932708 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2313, win 305, options [nop,nop,TS val 4294943782 ecr 4294944090,mptcp 8 dss ack 3518599713], length 0
+ 218 12:56:42.081986 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 665:713, ack 2313, win 305, options [nop,nop,TS val 4294943797 ecr 4294944090,mptcp 20 dss ack 3518599713 seq 3576352811 subseq 665 len 48 csum 0x3789], length 48
+ 219 12:56:42.083828 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2313:2393, ack 713, win 707, options [nop,nop,TS val 4294944106 ecr 4294943797,mptcp 20 dss ack 3576352859 seq 3518599713 subseq 2313 len 80 csum 0x6cf1], length 80
+ 220 12:56:42.083976 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2393, win 305, options [nop,nop,TS val 4294943797 ecr 4294944106,mptcp 8 dss ack 3518599793], length 0
+ 221 12:56:42.218171 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 713:761, ack 2393, win 305, options [nop,nop,TS val 4294943811 ecr 4294944106,mptcp 20 dss ack 3518599793 seq 3576352859 subseq 713 len 48 csum 0xc47b], length 48
+ 222 12:56:42.220075 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2393:2473, ack 761, win 707, options [nop,nop,TS val 4294944119 ecr 4294943811,mptcp 20 dss ack 3576352907 seq 3518599793 subseq 2393 len 80 csum 0x226], length 80
+ 223 12:56:42.220224 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2473, win 305, options [nop,nop,TS val 4294943811 ecr 4294944119,mptcp 8 dss ack 3518599873], length 0
+ 224 12:56:42.370244 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 761:809, ack 2473, win 305, options [nop,nop,TS val 4294943826 ecr 4294944119,mptcp 20 dss ack 3518599873 seq 3576352907 subseq 761 len 48 csum 0x187f], length 48
+ 225 12:56:42.372486 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2473:2553, ack 809, win 707, options [nop,nop,TS val 4294944134 ecr 4294943826,mptcp 20 dss ack 3576352955 seq 3518599873 subseq 2473 len 80 csum 0xe4fe], length 80
+ 226 12:56:42.372640 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2553, win 305, options [nop,nop,TS val 4294943826 ecr 4294944134,mptcp 8 dss ack 3518599953], length 0
+ 227 12:56:42.514114 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 809:857, ack 2553, win 305, options [nop,nop,TS val 4294943840 ecr 4294944134,mptcp 20 dss ack 3518599953 seq 3576352955 subseq 809 len 48 csum 0xf780], length 48
+ 228 12:56:42.516305 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2553:2633, ack 857, win 707, options [nop,nop,TS val 4294944149 ecr 4294943840,mptcp 20 dss ack 3576353003 seq 3518599953 subseq 2553 len 80 csum 0xb0e6], length 80
+ 229 12:56:42.516474 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2633, win 305, options [nop,nop,TS val 4294943841 ecr 4294944149,mptcp 8 dss ack 3518600033], length 0
+ 230 12:56:42.666380 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 857:905, ack 2633, win 305, options [nop,nop,TS val 4294943856 ecr 4294944149,mptcp 20 dss ack 3518600033 seq 3576353003 subseq 857 len 48 csum 0x1272], length 48
+ 231 12:56:42.668518 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2633:2713, ack 905, win 707, options [nop,nop,TS val 4294944164 ecr 4294943856,mptcp 20 dss ack 3576353051 seq 3518600033 subseq 2633 len 80 csum 0x2521], length 80
+ 232 12:56:42.668674 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2713, win 305, options [nop,nop,TS val 4294943856 ecr 4294944164,mptcp 8 dss ack 3518600113], length 0
+ 233 12:56:42.818341 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 905:953, ack 2713, win 305, options [nop,nop,TS val 4294943871 ecr 4294944164,mptcp 20 dss ack 3518600113 seq 3576353051 subseq 905 len 48 csum 0xeb71], length 48
+ 234 12:56:42.820464 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2713:2793, ack 953, win 707, options [nop,nop,TS val 4294944179 ecr 4294943871,mptcp 20 dss ack 3576353099 seq 3518600113 subseq 2713 len 80 csum 0xdd08], length 80
+ 235 12:56:42.820698 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2793, win 305, options [nop,nop,TS val 4294943871 ecr 4294944179,mptcp 8 dss ack 3518600193], length 0
+ 236 12:56:42.978188 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 953:1001, ack 2793, win 305, options [nop,nop,TS val 4294943887 ecr 4294944179,mptcp 20 dss ack 3518600193 seq 3576353099 subseq 953 len 48 csum 0xf047], length 48
+ 237 12:56:42.980124 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2793:2873, ack 1001, win 707, options [nop,nop,TS val 4294944195 ecr 4294943887,mptcp 20 dss ack 3576353147 seq 3518600193 subseq 2793 len 80 csum 0x3967], length 80
+ 238 12:56:42.980335 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2873, win 305, options [nop,nop,TS val 4294943887 ecr 4294944195,mptcp 8 dss ack 3518600273], length 0
+ 239 12:56:44.290226 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 1001:1049, ack 2873, win 305, options [nop,nop,TS val 4294944018 ecr 4294944195,mptcp 20 dss ack 3518600273 seq 3576353147 subseq 1001 len 48 csum 0xa43d], length 48
+ 240 12:56:44.291486 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2873:2921, ack 1049, win 707, options [nop,nop,TS val 4294944326 ecr 4294944018,mptcp 20 dss ack 3576353195 seq 3518600273 subseq 2873 len 48 csum 0x1c25], length 48
+ 241 12:56:44.291654 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2921, win 305, options [nop,nop,TS val 4294944018 ecr 4294944326,mptcp 8 dss ack 3518600321], length 0
+ 242 12:56:44.434269 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 1049:1097, ack 2921, win 305, options [nop,nop,TS val 4294944032 ecr 4294944326,mptcp 20 dss ack 3518600321 seq 3576353195 subseq 1049 len 48 csum 0xebdc], length 48
+ 243 12:56:44.435415 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2921:2969, ack 1097, win 707, options [nop,nop,TS val 4294944341 ecr 4294944032,mptcp 20 dss ack 3576353243 seq 3518600321 subseq 2921 len 48 csum 0xf7df], length 48
+ 244 12:56:44.435573 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 2969, win 305, options [nop,nop,TS val 4294944032 ecr 4294944341,mptcp 8 dss ack 3518600369], length 0
+ 245 12:56:44.482151 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 1097:1145, ack 2969, win 305, options [nop,nop,TS val 4294944037 ecr 4294944341,mptcp 20 dss ack 3518600369 seq 3576353243 subseq 1097 len 48 csum 0xb656], length 48
+ 246 12:56:44.483062 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 2969:3017, ack 1145, win 707, options [nop,nop,TS val 4294944346 ecr 4294944037,mptcp 20 dss ack 3576353291 seq 3518600369 subseq 2969 len 48 csum 0x73fb], length 48
+ 247 12:56:44.483215 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 3017, win 305, options [nop,nop,TS val 4294944037 ecr 4294944346,mptcp 8 dss ack 3518600417], length 0
+ 248 12:56:44.674296 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 1145:1193, ack 3017, win 305, options [nop,nop,TS val 4294944056 ecr 4294944346,mptcp 20 dss ack 3518600417 seq 3576353291 subseq 1145 len 48 csum 0x7813], length 48
+ 249 12:56:44.675404 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 3017:3065, ack 1193, win 707, options [nop,nop,TS val 4294944365 ecr 4294944056,mptcp 20 dss ack 3576353339 seq 3518600417 subseq 3017 len 48 csum 0xa7ff], length 48
+ 250 12:56:44.675561 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 3065, win 305, options [nop,nop,TS val 4294944056 ecr 4294944365,mptcp 8 dss ack 3518600465], length 0
+ 251 12:56:44.746191 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 1193:1241, ack 3065, win 305, options [nop,nop,TS val 4294944064 ecr 4294944365,mptcp 20 dss ack 3518600465 seq 3576353339 subseq 1193 len 48 csum 0xd43c], length 48
+ 252 12:56:44.755013 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 3065:3241, ack 1241, win 707, options [nop,nop,TS val 4294944372 ecr 4294944064,mptcp 20 dss ack 3576353387 seq 3518600465 subseq 3065 len 176 csum 0x49a0], length 176
+ 253 12:56:44.755179 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [P.], seq 3241:3305, ack 1241, win 707, options [nop,nop,TS val 4294944372 ecr 4294944064,mptcp 20 dss ack 3576353387 seq 3518600641 subseq 3241 len 64 csum 0x2541], length 64
+ 254 12:56:44.755227 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 3241, win 310, options [nop,nop,TS val 4294944064 ecr 4294944372,mptcp 8 dss ack 3518600641], length 0
+ 255 12:56:44.755349 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 3305, win 310, options [nop,nop,TS val 4294944064 ecr 4294944372,mptcp 8 dss ack 3518600705], length 0
+ 256 12:56:44.755920 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 1241:1273, ack 3305, win 310, options [nop,nop,TS val 4294944064 ecr 4294944372,mptcp 20 dss ack 3518600705 seq 3576353387 subseq 1241 len 32 csum 0xec34], length 32
+ 257 12:56:44.756076 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [P.], seq 1273:1337, ack 3305, win 310, options [nop,nop,TS val 4294944064 ecr 4294944372,mptcp 20 dss ack 3518600705 seq 3576353419 subseq 1273 len 64 csum 0x3f93], length 64
+ 258 12:56:44.756224 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [.], ack 1337, win 707, options [nop,nop,TS val 4294944372 ecr 4294944064,mptcp 8 dss ack 3576353483], length 0
+ 259 12:56:44.756736 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 3305, win 310, options [nop,nop,TS val 4294944064 ecr 4294944372,mptcp 20 dss fin ack 3518600705 seq 3576353483 subseq 0 len 1 csum 0xa51], length 0
+ 260 12:56:44.765654 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [.], ack 1337, win 707, options [nop,nop,TS val 4294944372 ecr 4294944064,mptcp 20 dss fin ack 3576353484 seq 3518600705 subseq 0 len 1 csum 0xbe46], length 0
+ 261 12:56:44.765795 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [F.], seq 1337, ack 3305, win 310, options [nop,nop,TS val 4294944066 ecr 4294944372,mptcp 8 dss ack 3518600705], length 0
+ 262 12:56:44.765879 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 3305, win 310, options [nop,nop,TS val 4294944066 ecr 4294944372,mptcp 8 dss ack 3518600706], length 0
+ 263 12:56:44.766083 IP 10.1.2.2.22 > 10.2.1.2.41221: Flags [F.], seq 3305, ack 1338, win 707, options [nop,nop,TS val 4294944372 ecr 4294944066,mptcp 8 dss ack 3576353484], length 0
+ 264 12:56:44.766202 IP 10.2.1.2.41221 > 10.1.2.2.22: Flags [.], ack 3306, win 310, options [nop,nop,TS val 4294944066 ecr 4294944372,mptcp 8 dss ack 3518600706], length 0
diff --git a/tests/mptcp-v0.pcap b/tests/mptcp-v0.pcap
new file mode 100644
index 0000000..c3eaae5
--- /dev/null
+++ b/tests/mptcp-v0.pcap
Binary files differ
diff --git a/tests/mptcp-v1.out b/tests/mptcp-v1.out
new file mode 100644
index 0000000..f7fb230
--- /dev/null
+++ b/tests/mptcp-v1.out
@@ -0,0 +1,20 @@
+ 1 15:51:06.676845 IP 10.0.1.1.33306 > 10.0.2.1.10004: Flags [S], seq 2180756989, win 65535, options [mss 1460,sackOK,TS val 464494241 ecr 0,nop,wscale 8,mptcp 4 capable v1], length 0
+ 2 15:51:06.676888 IP 10.0.2.1.10004 > 10.0.1.1.33306: Flags [S.], seq 791415661, ack 2180756990, win 65535, options [mss 1460,sackOK,TS val 3275212179 ecr 464494241,nop,wscale 8,mptcp 12 capable v1 {0x29a6c86981ad933c}], length 0
+ 3 15:51:06.676958 IP 10.0.1.1.33306 > 10.0.2.1.10004: Flags [.], ack 1, win 256, options [nop,nop,TS val 464494241 ecr 3275212179,mptcp 20 capable v1 {0x1fdb5df328bc3def,0x29a6c86981ad933c}], length 0
+ 4 15:51:06.677099 IP 10.0.1.1.33306 > 10.0.2.1.10004: Flags [P.], seq 1:7101, ack 1, win 256, options [nop,nop,TS val 464494241 ecr 3275212179,mptcp 22 capable v1 {0x1fdb5df328bc3def,0x29a6c86981ad933c},nop,nop], length 7100
+ 5 15:51:06.677113 IP 10.0.2.1.10004 > 10.0.1.1.33306: Flags [.], ack 7101, win 312, options [nop,nop,TS val 3275212179 ecr 464494241,mptcp 12 dss ack 14413541604287230030], length 0
+ 6 15:51:06.677130 IP 10.0.1.1.33306 > 10.0.2.1.10004: Flags [P.], seq 7101:8193, ack 1, win 256, options [nop,nop,TS val 464494241 ecr 3275212179,mptcp 12 dss ack 11713449205243392242], length 1092
+ 7 15:51:06.677136 IP 10.0.2.1.10004 > 10.0.1.1.33306: Flags [P.], seq 1:7101, ack 7101, win 312, options [nop,nop,TS val 3275212179 ecr 464494241,mptcp 26 dss ack 14413541604287230030 seq 11713449205243392242 subseq 1 len 8192,nop,nop], length 7100
+ 8 15:51:06.677163 IP 10.0.1.1.33306 > 10.0.2.1.10004: Flags [.], ack 7101, win 312, options [nop,nop,TS val 464494241 ecr 3275212179,mptcp 12 dss ack 11713449205243392242], length 0
+ 9 15:51:06.677173 IP 10.0.1.1.33306 > 10.0.2.1.10004: Flags [.], seq 8193:9613, ack 7101, win 312, options [nop,nop,TS val 464494241 ecr 3275212179,mptcp 26 dss ack 11713449205243392242 seq 14413541604287238222 subseq 8193 len 2076,nop,nop], length 1420
+ 10 15:51:06.677174 IP 10.0.2.1.10004 > 10.0.1.1.33306: Flags [P.], seq 7101:8193, ack 7101, win 312, options [nop,nop,TS val 3275212179 ecr 464494241,mptcp 12 dss ack 14413541604287230030], length 1092
+ 11 15:51:06.677188 IP 10.0.2.1.10004 > 10.0.1.1.33306: Flags [.], ack 8193, win 323, options [nop,nop,TS val 3275212179 ecr 464494241,mptcp 12 dss ack 14413541604287230030], length 0
+ 12 15:51:06.677188 IP 10.0.1.1.33306 > 10.0.2.1.10004: Flags [.], ack 8193, win 323, options [nop,nop,TS val 464494241 ecr 3275212179,mptcp 12 dss ack 11713449205243392242], length 0
+ 13 15:51:06.677207 IP 10.0.1.1.33306 > 10.0.2.1.10004: Flags [P.], seq 9613:10269, ack 8193, win 323, options [nop,nop,TS val 464494241 ecr 3275212179,mptcp 12 dss ack 11713449205243392242], length 656
+ 14 15:51:06.677221 IP 10.0.2.1.10004 > 10.0.1.1.33306: Flags [.], ack 9613, win 334, options [nop,nop,TS val 3275212179 ecr 464494241,mptcp 12 dss ack 14413541604287230030], length 0
+ 15 15:51:06.677237 IP 10.0.2.1.10004 > 10.0.1.1.33306: Flags [.], ack 10269, win 345, options [nop,nop,TS val 3275212179 ecr 464494241,mptcp 12 dss ack 14413541604287230030], length 0
+ 16 15:51:06.677259 IP 10.0.1.1.33306 > 10.0.2.1.10004: Flags [F.], seq 10269, ack 8193, win 323, options [nop,nop,TS val 464494241 ecr 3275212179,mptcp 26 dss fin ack 11713449205243400434 seq 14413541604287240298 subseq 0 len 1,nop,nop], length 0
+ 17 15:51:06.677321 IP 10.0.2.1.10004 > 10.0.1.1.33306: Flags [P.], seq 8193:10269, ack 10270, win 345, options [nop,nop,TS val 3275212179 ecr 464494241,mptcp 26 dss ack 14413541604287238222 seq 11713449205243400434 subseq 8193 len 2076,nop,nop], length 2076
+ 18 15:51:06.677357 IP 10.0.1.1.33306 > 10.0.2.1.10004: Flags [.], ack 10269, win 339, options [nop,nop,TS val 464494241 ecr 3275212179,mptcp 12 dss ack 11713449205243400434], length 0
+ 19 15:51:06.677404 IP 10.0.2.1.10004 > 10.0.1.1.33306: Flags [F.], seq 10269, ack 10270, win 345, options [nop,nop,TS val 3275212179 ecr 464494241,mptcp 26 dss fin ack 14413541604287240298 seq 11713449205243402510 subseq 0 len 1,nop,nop], length 0
+ 20 15:51:06.677429 IP 10.0.1.1.33306 > 10.0.2.1.10004: Flags [.], ack 10270, win 339, options [nop,nop,TS val 464494241 ecr 3275212179,mptcp 12 dss ack 11713449205243402510], length 0
diff --git a/tests/mptcp-v1.pcap b/tests/mptcp-v1.pcap
new file mode 100644
index 0000000..871e3a5
--- /dev/null
+++ b/tests/mptcp-v1.pcap
Binary files differ
diff --git a/tests/mrinfo_query.pcap b/tests/mrinfo_query.pcap
new file mode 100644
index 0000000..63a86d6
--- /dev/null
+++ b/tests/mrinfo_query.pcap
Binary files differ
diff --git a/tests/msnlb.out b/tests/msnlb.out
new file mode 100644
index 0000000..5f1074d
--- /dev/null
+++ b/tests/msnlb.out
@@ -0,0 +1,2 @@
+ 1 10:55:24.028046 MS NLB heartbeat, host priority: 2, cluster IP: 192.168.100.80, host IP: 192.168.100.82
+ 2 10:55:24.672207 MS NLB heartbeat, host priority: 1, cluster IP: 192.168.100.80, host IP: 192.168.100.81
diff --git a/tests/msnlb.pcap b/tests/msnlb.pcap
new file mode 100644
index 0000000..dab88fe
--- /dev/null
+++ b/tests/msnlb.pcap
Binary files differ
diff --git a/tests/msnlb2.out b/tests/msnlb2.out
new file mode 100644
index 0000000..0c5ff7d
--- /dev/null
+++ b/tests/msnlb2.out
@@ -0,0 +1,2 @@
+ 1 10:55:24.028046 MS NLB heartbeat [|msnlb]
+ 2 10:55:24.672207 MS NLB heartbeat [|msnlb]
diff --git a/tests/msnlb2.pcapng b/tests/msnlb2.pcapng
new file mode 100644
index 0000000..270476d
--- /dev/null
+++ b/tests/msnlb2.pcapng
Binary files differ
diff --git a/tests/mstp-v.out b/tests/mstp-v.out
new file mode 100644
index 0000000..6f363e0
--- /dev/null
+++ b/tests/mstp-v.out
@@ -0,0 +1,130 @@
+ 1 14:28:38.018637 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 134
+ port-role Root, CIST root-id 0000.00:1f:27:b4:7d:80, CIST ext-pathcost 200000
+ CIST regional-root-id 8000.00:16:46:b5:8c:80, CIST port-id 8012,
+ message-age 1.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 96, MCID Name Brewery, rev 0,
+ digest 9357ebb7a8d74dd5fef4f2bab50531aa, CIST int-root-pathcost 200000,
+ CIST bridge-id 8000.00:1e:f7:05:a8:80, CIST remaining-hops 20
+ MSTI 1, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Designated
+ MSTI regional-root-id 6001.00:1e:f7:05:a8:80, pathcost 0
+ MSTI bridge-prio 6, port-prio 8, hops 20
+ MSTI 2, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Root
+ MSTI regional-root-id 8002.00:16:46:b5:8c:80, pathcost 200000
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ 2 14:28:39.688658 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward, Agreement], length 134
+ port-role Designated, CIST root-id 0000.00:1f:27:b4:7d:80, CIST ext-pathcost 200000
+ CIST regional-root-id 8000.00:16:46:b5:8c:80, CIST port-id 800f,
+ message-age 1.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 96, MCID Name Brewery, rev 0,
+ digest 9357ebb7a8d74dd5fef4f2bab50531aa, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.00:16:46:b5:8c:80, CIST remaining-hops 20
+ MSTI 1, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Root
+ MSTI regional-root-id 6001.00:1e:f7:05:a8:80, pathcost 200000
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ MSTI 2, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Designated
+ MSTI regional-root-id 8002.00:16:46:b5:8c:80, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ 3 14:28:40.034939 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 134
+ port-role Root, CIST root-id 0000.00:1f:27:b4:7d:80, CIST ext-pathcost 200000
+ CIST regional-root-id 8000.00:16:46:b5:8c:80, CIST port-id 8012,
+ message-age 1.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 96, MCID Name Brewery, rev 0,
+ digest 9357ebb7a8d74dd5fef4f2bab50531aa, CIST int-root-pathcost 200000,
+ CIST bridge-id 8000.00:1e:f7:05:a8:80, CIST remaining-hops 20
+ MSTI 1, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Designated
+ MSTI regional-root-id 6001.00:1e:f7:05:a8:80, pathcost 0
+ MSTI bridge-prio 6, port-prio 8, hops 20
+ MSTI 2, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Root
+ MSTI regional-root-id 8002.00:16:46:b5:8c:80, pathcost 200000
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ 4 14:28:41.701562 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward, Agreement], length 134
+ port-role Designated, CIST root-id 0000.00:1f:27:b4:7d:80, CIST ext-pathcost 200000
+ CIST regional-root-id 8000.00:16:46:b5:8c:80, CIST port-id 800f,
+ message-age 1.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 96, MCID Name Brewery, rev 0,
+ digest 9357ebb7a8d74dd5fef4f2bab50531aa, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.00:16:46:b5:8c:80, CIST remaining-hops 20
+ MSTI 1, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Root
+ MSTI regional-root-id 6001.00:1e:f7:05:a8:80, pathcost 200000
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ MSTI 2, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Designated
+ MSTI regional-root-id 8002.00:16:46:b5:8c:80, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ 5 14:28:42.047598 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 134
+ port-role Root, CIST root-id 0000.00:1f:27:b4:7d:80, CIST ext-pathcost 200000
+ CIST regional-root-id 8000.00:16:46:b5:8c:80, CIST port-id 8012,
+ message-age 1.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 96, MCID Name Brewery, rev 0,
+ digest 9357ebb7a8d74dd5fef4f2bab50531aa, CIST int-root-pathcost 200000,
+ CIST bridge-id 8000.00:1e:f7:05:a8:80, CIST remaining-hops 20
+ MSTI 1, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Designated
+ MSTI regional-root-id 6001.00:1e:f7:05:a8:80, pathcost 0
+ MSTI bridge-prio 6, port-prio 8, hops 20
+ MSTI 2, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Root
+ MSTI regional-root-id 8002.00:16:46:b5:8c:80, pathcost 200000
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ 6 14:28:43.714422 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward, Agreement], length 134
+ port-role Designated, CIST root-id 0000.00:1f:27:b4:7d:80, CIST ext-pathcost 200000
+ CIST regional-root-id 8000.00:16:46:b5:8c:80, CIST port-id 800f,
+ message-age 1.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 96, MCID Name Brewery, rev 0,
+ digest 9357ebb7a8d74dd5fef4f2bab50531aa, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.00:16:46:b5:8c:80, CIST remaining-hops 20
+ MSTI 1, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Root
+ MSTI regional-root-id 6001.00:1e:f7:05:a8:80, pathcost 200000
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ MSTI 2, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Designated
+ MSTI regional-root-id 8002.00:16:46:b5:8c:80, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ 7 14:28:44.060628 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 134
+ port-role Root, CIST root-id 0000.00:1f:27:b4:7d:80, CIST ext-pathcost 200000
+ CIST regional-root-id 8000.00:16:46:b5:8c:80, CIST port-id 8012,
+ message-age 1.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 96, MCID Name Brewery, rev 0,
+ digest 9357ebb7a8d74dd5fef4f2bab50531aa, CIST int-root-pathcost 200000,
+ CIST bridge-id 8000.00:1e:f7:05:a8:80, CIST remaining-hops 20
+ MSTI 1, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Designated
+ MSTI regional-root-id 6001.00:1e:f7:05:a8:80, pathcost 0
+ MSTI bridge-prio 6, port-prio 8, hops 20
+ MSTI 2, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Root
+ MSTI regional-root-id 8002.00:16:46:b5:8c:80, pathcost 200000
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ 8 14:28:45.727298 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward, Agreement], length 134
+ port-role Designated, CIST root-id 0000.00:1f:27:b4:7d:80, CIST ext-pathcost 200000
+ CIST regional-root-id 8000.00:16:46:b5:8c:80, CIST port-id 800f,
+ message-age 1.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 96, MCID Name Brewery, rev 0,
+ digest 9357ebb7a8d74dd5fef4f2bab50531aa, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.00:16:46:b5:8c:80, CIST remaining-hops 20
+ MSTI 1, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Root
+ MSTI regional-root-id 6001.00:1e:f7:05:a8:80, pathcost 200000
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ MSTI 2, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Designated
+ MSTI regional-root-id 8002.00:16:46:b5:8c:80, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ 9 14:28:46.073429 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward], length 134
+ port-role Root, CIST root-id 0000.00:1f:27:b4:7d:80, CIST ext-pathcost 200000
+ CIST regional-root-id 8000.00:16:46:b5:8c:80, CIST port-id 8012,
+ message-age 1.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 96, MCID Name Brewery, rev 0,
+ digest 9357ebb7a8d74dd5fef4f2bab50531aa, CIST int-root-pathcost 200000,
+ CIST bridge-id 8000.00:1e:f7:05:a8:80, CIST remaining-hops 20
+ MSTI 1, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Designated
+ MSTI regional-root-id 6001.00:1e:f7:05:a8:80, pathcost 0
+ MSTI bridge-prio 6, port-prio 8, hops 20
+ MSTI 2, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Root
+ MSTI regional-root-id 8002.00:16:46:b5:8c:80, pathcost 200000
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ 10 14:28:47.740170 STP 802.1s, Rapid STP, CIST Flags [Learn, Forward, Agreement], length 134
+ port-role Designated, CIST root-id 0000.00:1f:27:b4:7d:80, CIST ext-pathcost 200000
+ CIST regional-root-id 8000.00:16:46:b5:8c:80, CIST port-id 800f,
+ message-age 1.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 96, MCID Name Brewery, rev 0,
+ digest 9357ebb7a8d74dd5fef4f2bab50531aa, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.00:16:46:b5:8c:80, CIST remaining-hops 20
+ MSTI 1, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Root
+ MSTI regional-root-id 6001.00:1e:f7:05:a8:80, pathcost 200000
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ MSTI 2, Flags [Learn, Forward, Agreement, Topology change ACK], port-role Designated
+ MSTI regional-root-id 8002.00:16:46:b5:8c:80, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
diff --git a/tests/mtrace.out b/tests/mtrace.out
new file mode 100644
index 0000000..634b53a
--- /dev/null
+++ b/tests/mtrace.out
@@ -0,0 +1,2 @@
+ 1 06:10:40.113730 IP 10.0.0.5 > 172.16.20.1: mtrace 7: 172.16.40.1 to 172.16.20.1 reply-to 172.16.40.1
+ 2 06:10:40.137809 IP 10.0.0.6 > 10.0.0.5: mtrace 7: 172.16.40.1 to 172.16.20.1 reply-to 172.16.40.1
diff --git a/tests/mtrace.pcap b/tests/mtrace.pcap
new file mode 100644
index 0000000..0d16dd3
--- /dev/null
+++ b/tests/mtrace.pcap
Binary files differ
diff --git a/tests/nbns-valgrind-nosmb.out b/tests/nbns-valgrind-nosmb.out
new file mode 100644
index 0000000..1d98a5d
--- /dev/null
+++ b/tests/nbns-valgrind-nosmb.out
@@ -0,0 +1,2 @@
+ 1 15:02:25.894083 00:0c:85:0e:a5:ff > 00:00:0c:07:ac:f0, ethertype IPv4 (0x0800), length 92: (tos 0x0, ttl 127, id 38615, offset 0, flags [none], proto UDP (17), length 78)
+ 10.49.248.228.137 > 10.48.161.241.137: UDP, length 50
diff --git a/tests/nbns-valgrind.out b/tests/nbns-valgrind.out
new file mode 100644
index 0000000..ff2f7e7
--- /dev/null
+++ b/tests/nbns-valgrind.out
@@ -0,0 +1,14 @@
+ 1 15:02:25.894083 00:0c:85:0e:a5:ff > 00:00:0c:07:ac:f0, ethertype IPv4 (0x0800), length 92: (tos 0x0, ttl 127, id 38615, offset 0, flags [none], proto UDP (17), length 78)
+ 10.49.248.228.137 > 10.48.161.241.137:
+>>> NBT UDP PACKET(137): QUERY; REQUEST; UNICAST
+TrnID=0x8D40
+OpCode=0
+NmFlags=0x10
+Rcode=0
+QueryCount=1
+AnswerCount=0
+AuthorityCount=0
+AddressRecCount=0
+QuestionRecords:
+Name= [|nbt_udp137]
+
diff --git a/tests/nbns-valgrind.pcap b/tests/nbns-valgrind.pcap
new file mode 100644
index 0000000..57657f0
--- /dev/null
+++ b/tests/nbns-valgrind.pcap
Binary files differ
diff --git a/tests/nflog-e.out b/tests/nflog-e.out
new file mode 100644
index 0000000..c353137
--- /dev/null
+++ b/tests/nflog-e.out
@@ -0,0 +1,4 @@
+ 1 18:31:59.615994 version 0, resource ID 20, family IPv4 (2), length 180: 74.82.42.42.53 > 10.0.0.20.42585: 17265 1/0/0 A 93.184.216.119 (45)
+ 2 18:31:59.616000 version 0, resource ID 20, family IPv4 (2), length 192: 74.82.42.42.53 > 10.0.0.20.45190: 52954 1/0/0 AAAA 2606:2800:220:6d:26bf:1447:1097:aa7 (57)
+ 3 18:31:59.616000 version 0, resource ID 20, family IPv4 (2), length 184: 74.82.42.42.53 > 10.0.0.20.44031: 8279 1/0/0 A 93.184.216.119 (49)
+ 4 18:31:59.616001 version 0, resource ID 20, family IPv4 (2), length 196: 74.82.42.42.53 > 10.0.0.20.48736: 2122 1/0/0 AAAA 2606:2800:220:6d:26bf:1447:1097:aa7 (61)
diff --git a/tests/nflog.pcap b/tests/nflog.pcap
new file mode 100644
index 0000000..9151d6a
--- /dev/null
+++ b/tests/nflog.pcap
Binary files differ
diff --git a/tests/nfs-attr-oobr.out b/tests/nfs-attr-oobr.out
new file mode 100644
index 0000000..5cb3e0e
--- /dev/null
+++ b/tests/nfs-attr-oobr.out
@@ -0,0 +1,305 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 0000
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 0000
+ 5 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 6 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 7 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 8 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 000000000000
+ 9 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 0000
+ 10 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 0000
+ 11 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 12 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 13 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 14 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 15 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 16 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 17 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 18 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 19 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 20 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 21 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 22 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 23 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 24 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 25 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 26 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 27 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 28 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 0000
+ 29 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 30 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 31 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 0000
+ 32 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 0000
+ 33 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 34 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 35 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 36 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 000000000000
+ 37 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 0000
+ 38 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 0000
+ 39 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 40 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 41 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 42 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 43 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 44 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 45 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 46 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0040: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0050: 3030 00
+ 47 05:27:12.808464432 IP 48.48.48.48.12336 > 48.48.48.48.2049: NFS request xid 3056611558 12308 access [|nfs]
+ 48 05:27:12.808464432 IP 48.48.48.48.2049 > 48.48.48.48.12336: NFS reply xid 3056611558 reply ok 12308 access [|nfs]
diff --git a/tests/nfs-attr-oobr.pcap b/tests/nfs-attr-oobr.pcap
new file mode 100644
index 0000000..9769a0e
--- /dev/null
+++ b/tests/nfs-attr-oobr.pcap
Binary files differ
diff --git a/tests/nfs-cannot-pad-32-bit.out b/tests/nfs-cannot-pad-32-bit.out
new file mode 100644
index 0000000..15deaa6
--- /dev/null
+++ b/tests/nfs-cannot-pad-32-bit.out
@@ -0,0 +1 @@
+ 1 20:06:29.742549 IP 127.0.0.1.63476 > 127.0.0.1.2049: NFS request xid 1168185174 80 lookup fh Unknown/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB [cannot pad to 32-bit boundaries] (invalid) [|nfs]
diff --git a/tests/nfs-cannot-pad-32-bit.pcap b/tests/nfs-cannot-pad-32-bit.pcap
new file mode 100644
index 0000000..2df699b
--- /dev/null
+++ b/tests/nfs-cannot-pad-32-bit.pcap
Binary files differ
diff --git a/tests/nfs-seg-fault-1.out b/tests/nfs-seg-fault-1.out
new file mode 100644
index 0000000..73a6659
--- /dev/null
+++ b/tests/nfs-seg-fault-1.out
@@ -0,0 +1 @@
+ 1 17:28:16.192521 IP 10.131.101.60.923 > 10.131.101.118.2049: Flags [.], seq 1192508771:1192516731, ack 3532274502, win 3819, length 7960: NFS request xid 1260897737 7956 write fh Unknown/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 2863311530 (2863311530) bytes @ 12297829382473034410
diff --git a/tests/nfs-seg-fault-1.pcapng b/tests/nfs-seg-fault-1.pcapng
new file mode 100644
index 0000000..5c2d8ee
--- /dev/null
+++ b/tests/nfs-seg-fault-1.pcapng
Binary files differ
diff --git a/tests/nfs-write-verf-cookie.out b/tests/nfs-write-verf-cookie.out
new file mode 100644
index 0000000..30ee491
--- /dev/null
+++ b/tests/nfs-write-verf-cookie.out
@@ -0,0 +1,4 @@
+ 1 08:54:32.729464 IP (tos 0x0, ttl 64, id 57143, offset 0, flags [DF], proto TCP (6), length 200)
+ 10.207.74.149.993 > 10.98.159.117.2049: Flags [P.], cksum 0xfff5 (incorrect -> 0x430b), seq 1468263659:1468263807, ack 2941950012, win 279, options [nop,nop,TS val 1641695579 ecr 608564722], length 148: NFS request xid 90477929 144 write fh Unknown/F0C862C6000010000000000014AB0200C6DD760758AA7A5B0000000000000000 3 (3) bytes @ 0 <filesync>
+ 2 08:54:32.731527 IP (tos 0x0, ttl 59, id 38294, offset 0, flags [DF], proto TCP (6), length 216)
+ 10.98.159.117.2049 > 10.207.74.149.993: Flags [P.], cksum 0x381a (correct), seq 1:165, ack 148, win 29146, options [nop,nop,TS val 608564725 ecr 1641695579], length 164: NFS reply xid 90477929 reply ok 160 write PRE: sz 0 mtime 1535100894.465310536 ctime 1535100894.464014342 POST: REG 100644 ids 65534/65534 sz 3 nlink 1 rdev 0/0 fsid 5b7aaa5800000000 fileid 2ab14 a/m/ctime 1535100894.466424000 1535100894.466424000 1535100894.466424000 3 bytes <filesync> verf 851b4
diff --git a/tests/nfs-write-verf-cookie.pcapng b/tests/nfs-write-verf-cookie.pcapng
new file mode 100644
index 0000000..11b6360
--- /dev/null
+++ b/tests/nfs-write-verf-cookie.pcapng
Binary files differ
diff --git a/tests/non-bsd.tests b/tests/non-bsd.tests
new file mode 100644
index 0000000..f44610e
--- /dev/null
+++ b/tests/non-bsd.tests
@@ -0,0 +1,15 @@
+# -*- perl -*-
+
+$testlist = [
+ # This specific test fails on OpenBSD because the .pcap file uses DLT_RAW,
+ # which OpenBSD treats as DLT_LOOP.
+ {
+ config_unset => 'IS_OPENBSD',
+ name => 'heap-overflow-1',
+ input => 'heap-overflow-1.pcap',
+ output => 'heap-overflow-1.out',
+ args => '-v'
+ },
+];
+
+1;
diff --git a/tests/nsh-over-vxlan-gpe-v.out b/tests/nsh-over-vxlan-gpe-v.out
new file mode 100644
index 0000000..7e98fa7
--- /dev/null
+++ b/tests/nsh-over-vxlan-gpe-v.out
@@ -0,0 +1,5 @@
+ 1 14:19:08.994912 IP (tos 0x0, ttl 64, id 16419, offset 0, flags [DF], proto UDP (17), length 92)
+ 127.0.0.1.4790 > 127.0.0.1.4790: VXLAN-GPE, flags [IP], vni 16777215
+ NSH, flags [O], service-path-id 0xffffff, service-index 0xff
+ IP (tos 0x0, ttl 255, id 54321, offset 0, flags [none], proto UDP (17), length 32)
+ 192.168.0.1.10000 > 192.168.0.2.20000: UDP, length 4
diff --git a/tests/nsh-over-vxlan-gpe-vv.out b/tests/nsh-over-vxlan-gpe-vv.out
new file mode 100644
index 0000000..32e390b
--- /dev/null
+++ b/tests/nsh-over-vxlan-gpe-vv.out
@@ -0,0 +1,5 @@
+ 1 14:19:08.994912 IP (tos 0x0, ttl 64, id 16419, offset 0, flags [DF], proto UDP (17), length 92)
+ 127.0.0.1.4790 > 127.0.0.1.4790: [udp sum ok] VXLAN-GPE, flags [IP], vni 16777215
+ NSH, ver 0, flags [O], next-protocol IPv4, service-path-id 0xffffff, service-index 0xff
+ IP (tos 0x0, ttl 255, id 54321, offset 0, flags [none], proto UDP (17), length 32)
+ 192.168.0.1.10000 > 192.168.0.2.20000: [udp sum ok] UDP, length 4
diff --git a/tests/nsh-over-vxlan-gpe-vvv.out b/tests/nsh-over-vxlan-gpe-vvv.out
new file mode 100644
index 0000000..95c904c
--- /dev/null
+++ b/tests/nsh-over-vxlan-gpe-vvv.out
@@ -0,0 +1,9 @@
+ 1 14:19:08.994912 IP (tos 0x0, ttl 64, id 16419, offset 0, flags [DF], proto UDP (17), length 92)
+ 127.0.0.1.4790 > 127.0.0.1.4790: [udp sum ok] VXLAN-GPE, flags [IP], vni 16777215
+ NSH, ver 0, flags [O], TTL 0, length 6, md type 2, next-protocol IPv4, service-path-id 0xffffff, service-index 0xff
+ TLV Class 1, Type 2, Len 1
+ Value: 0x12
+ TLV Class 2, Type 3, Len 1
+ Value: 0x12
+ IP (tos 0x0, ttl 255, id 54321, offset 0, flags [none], proto UDP (17), length 32)
+ 192.168.0.1.10000 > 192.168.0.2.20000: [udp sum ok] UDP, length 4
diff --git a/tests/nsh-over-vxlan-gpe.out b/tests/nsh-over-vxlan-gpe.out
new file mode 100644
index 0000000..89696e4
--- /dev/null
+++ b/tests/nsh-over-vxlan-gpe.out
@@ -0,0 +1 @@
+ 1 14:19:08.994912 IP 127.0.0.1.4790 > 127.0.0.1.4790: VXLAN-GPE, flags [IP], vni 16777215: NSH, flags [O], service-path-id 0xffffff, service-index 0xff: IP 192.168.0.1.10000 > 192.168.0.2.20000: UDP, length 4
diff --git a/tests/nsh-over-vxlan-gpe.pcap b/tests/nsh-over-vxlan-gpe.pcap
new file mode 100644
index 0000000..0cc3b67
--- /dev/null
+++ b/tests/nsh-over-vxlan-gpe.pcap
Binary files differ
diff --git a/tests/nsh-vvv.out b/tests/nsh-vvv.out
new file mode 100644
index 0000000..7a61c78
--- /dev/null
+++ b/tests/nsh-vvv.out
@@ -0,0 +1,7 @@
+ 1 23:13:40.394208 NSH, ver 0, flags [none], TTL 0, length 6, md type 1, next-protocol IPv4, service-path-id 0x000309, service-index 0x7
+ Context[00]: 0x00000001
+ Context[01]: 0x00000002
+ Context[02]: 0x00000003
+ Context[03]: 0x00000004
+ IP (tos 0x0, ttl 64, id 10308, offset 0, flags [DF], proto UDP (17), length 34)
+ 10.0.8.3.52229 > 10.13.13.13.8000: [no cksum] UDP, length 6
diff --git a/tests/nsh.out b/tests/nsh.out
new file mode 100644
index 0000000..264ae20
--- /dev/null
+++ b/tests/nsh.out
@@ -0,0 +1 @@
+ 1 23:13:40.394208 NSH, flags [none], service-path-id 0x000309, service-index 0x7: IP 10.0.8.3.52229 > 10.13.13.13.8000: UDP, length 6
diff --git a/tests/nsh.pcap b/tests/nsh.pcap
new file mode 100644
index 0000000..c919ee2
--- /dev/null
+++ b/tests/nsh.pcap
Binary files differ
diff --git a/tests/ntp-control--v.out b/tests/ntp-control--v.out
new file mode 100644
index 0000000..a110d5b
--- /dev/null
+++ b/tests/ntp-control--v.out
@@ -0,0 +1,76 @@
+ 1 12:27:00.612230 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x5280!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=68, Status=0, Assoc.=0, Offset=0, Count=0
+ 2 12:27:00.612439 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 416) ::1.123 > ::1.38531: [bad udp cksum 0x01b3 -> 0x412f!] NTPv2, Control Message, length 408
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=68, Status=0x618, Assoc.=0, Offset=0, Count=394
+ TO-BE-DONE: data not interpreted
+ 3 12:27:10.034910 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x5280!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=1
+ Sequence=69, Status=0, Assoc.=0, Offset=0, Count=0
+ 4 12:27:10.035047 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 40) ::1.123 > ::1.38531: [bad udp cksum 0x003b -> 0xfba0!] NTPv2, Control Message, length 32
+ Leap indicator: (0), Response, OK, Last, OpCode=1
+ Sequence=69, Status=0x618, Assoc.=0, Offset=0, Count=20
+ TO-BE-DONE: data not interpreted
+ 5 12:27:15.522207 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x527f!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=1
+ Sequence=70, Status=0, Assoc.=0, Offset=0, Count=0
+ 6 12:27:15.522407 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 40) ::1.123 > ::1.38531: [bad udp cksum 0x003b -> 0xfb9f!] NTPv2, Control Message, length 32
+ Leap indicator: (0), Response, OK, Last, OpCode=1
+ Sequence=70, Status=0x618, Assoc.=0, Offset=0, Count=20
+ TO-BE-DONE: data not interpreted
+ 7 12:27:15.551426 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93c3!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=71, Status=0, Assoc.=48825, Offset=0, Count=0
+ 8 12:27:15.551668 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0x5350!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=71, Status=0x8011, Assoc.=48825, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 9 12:27:15.551735 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 128) ::1.123 > ::1.38531: [bad udp cksum 0x0093 -> 0xbcc4!] NTPv2, Control Message, length 120
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=71, Status=0x8011, Assoc.=48825, Offset=468, Count=106
+ TO-BE-DONE: data not interpreted
+ 10 12:27:15.551870 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93c1!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=72, Status=0, Assoc.=48826, Offset=0, Count=0
+ 11 12:27:15.552036 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0xc0d5!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=72, Status=0x8011, Assoc.=48826, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 12 12:27:15.552099 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 128) ::1.123 > ::1.38531: [bad udp cksum 0x0093 -> 0x88c5!] NTPv2, Control Message, length 120
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=72, Status=0x8011, Assoc.=48826, Offset=468, Count=107
+ TO-BE-DONE: data not interpreted
+ 13 12:27:15.552257 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93bf!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=73, Status=0, Assoc.=48827, Offset=0, Count=0
+ 14 12:27:15.552420 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0x5c4a!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=73, Status=0x8011, Assoc.=48827, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 15 12:27:15.552459 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 124) ::1.123 > ::1.38531: [bad udp cksum 0x008f -> 0xdcfa!] NTPv2, Control Message, length 116
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=73, Status=0x8011, Assoc.=48827, Offset=468, Count=104
+ TO-BE-DONE: data not interpreted
+ 16 12:27:15.552614 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93bd!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=74, Status=0, Assoc.=48828, Offset=0, Count=0
+ 17 12:27:15.552756 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0x5634!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=74, Status=0x8011, Assoc.=48828, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 18 12:27:15.552790 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 128) ::1.123 > ::1.38531: [bad udp cksum 0x0093 -> 0x8c8c!] NTPv2, Control Message, length 120
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=74, Status=0x8011, Assoc.=48828, Offset=468, Count=108
+ TO-BE-DONE: data not interpreted
+ 19 12:27:15.552933 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93bb!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=75, Status=0, Assoc.=48829, Offset=0, Count=0
+ 20 12:27:15.553074 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0x9c1f!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=75, Status=0x961a, Assoc.=48829, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 21 12:27:15.553109 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 108) ::1.123 > ::1.38531: [bad udp cksum 0x007f -> 0x77be!] NTPv2, Control Message, length 100
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=75, Status=0x961a, Assoc.=48829, Offset=468, Count=85
+ TO-BE-DONE: data not interpreted
diff --git a/tests/ntp-control--vv.out b/tests/ntp-control--vv.out
new file mode 100644
index 0000000..a110d5b
--- /dev/null
+++ b/tests/ntp-control--vv.out
@@ -0,0 +1,76 @@
+ 1 12:27:00.612230 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x5280!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=68, Status=0, Assoc.=0, Offset=0, Count=0
+ 2 12:27:00.612439 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 416) ::1.123 > ::1.38531: [bad udp cksum 0x01b3 -> 0x412f!] NTPv2, Control Message, length 408
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=68, Status=0x618, Assoc.=0, Offset=0, Count=394
+ TO-BE-DONE: data not interpreted
+ 3 12:27:10.034910 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x5280!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=1
+ Sequence=69, Status=0, Assoc.=0, Offset=0, Count=0
+ 4 12:27:10.035047 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 40) ::1.123 > ::1.38531: [bad udp cksum 0x003b -> 0xfba0!] NTPv2, Control Message, length 32
+ Leap indicator: (0), Response, OK, Last, OpCode=1
+ Sequence=69, Status=0x618, Assoc.=0, Offset=0, Count=20
+ TO-BE-DONE: data not interpreted
+ 5 12:27:15.522207 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x527f!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=1
+ Sequence=70, Status=0, Assoc.=0, Offset=0, Count=0
+ 6 12:27:15.522407 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 40) ::1.123 > ::1.38531: [bad udp cksum 0x003b -> 0xfb9f!] NTPv2, Control Message, length 32
+ Leap indicator: (0), Response, OK, Last, OpCode=1
+ Sequence=70, Status=0x618, Assoc.=0, Offset=0, Count=20
+ TO-BE-DONE: data not interpreted
+ 7 12:27:15.551426 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93c3!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=71, Status=0, Assoc.=48825, Offset=0, Count=0
+ 8 12:27:15.551668 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0x5350!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=71, Status=0x8011, Assoc.=48825, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 9 12:27:15.551735 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 128) ::1.123 > ::1.38531: [bad udp cksum 0x0093 -> 0xbcc4!] NTPv2, Control Message, length 120
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=71, Status=0x8011, Assoc.=48825, Offset=468, Count=106
+ TO-BE-DONE: data not interpreted
+ 10 12:27:15.551870 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93c1!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=72, Status=0, Assoc.=48826, Offset=0, Count=0
+ 11 12:27:15.552036 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0xc0d5!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=72, Status=0x8011, Assoc.=48826, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 12 12:27:15.552099 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 128) ::1.123 > ::1.38531: [bad udp cksum 0x0093 -> 0x88c5!] NTPv2, Control Message, length 120
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=72, Status=0x8011, Assoc.=48826, Offset=468, Count=107
+ TO-BE-DONE: data not interpreted
+ 13 12:27:15.552257 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93bf!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=73, Status=0, Assoc.=48827, Offset=0, Count=0
+ 14 12:27:15.552420 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0x5c4a!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=73, Status=0x8011, Assoc.=48827, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 15 12:27:15.552459 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 124) ::1.123 > ::1.38531: [bad udp cksum 0x008f -> 0xdcfa!] NTPv2, Control Message, length 116
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=73, Status=0x8011, Assoc.=48827, Offset=468, Count=104
+ TO-BE-DONE: data not interpreted
+ 16 12:27:15.552614 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93bd!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=74, Status=0, Assoc.=48828, Offset=0, Count=0
+ 17 12:27:15.552756 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0x5634!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=74, Status=0x8011, Assoc.=48828, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 18 12:27:15.552790 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 128) ::1.123 > ::1.38531: [bad udp cksum 0x0093 -> 0x8c8c!] NTPv2, Control Message, length 120
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=74, Status=0x8011, Assoc.=48828, Offset=468, Count=108
+ TO-BE-DONE: data not interpreted
+ 19 12:27:15.552933 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93bb!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=75, Status=0, Assoc.=48829, Offset=0, Count=0
+ 20 12:27:15.553074 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0x9c1f!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=75, Status=0x961a, Assoc.=48829, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 21 12:27:15.553109 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 108) ::1.123 > ::1.38531: [bad udp cksum 0x007f -> 0x77be!] NTPv2, Control Message, length 100
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=75, Status=0x961a, Assoc.=48829, Offset=468, Count=85
+ TO-BE-DONE: data not interpreted
diff --git a/tests/ntp-control--vvv.out b/tests/ntp-control--vvv.out
new file mode 100644
index 0000000..a110d5b
--- /dev/null
+++ b/tests/ntp-control--vvv.out
@@ -0,0 +1,76 @@
+ 1 12:27:00.612230 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x5280!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=68, Status=0, Assoc.=0, Offset=0, Count=0
+ 2 12:27:00.612439 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 416) ::1.123 > ::1.38531: [bad udp cksum 0x01b3 -> 0x412f!] NTPv2, Control Message, length 408
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=68, Status=0x618, Assoc.=0, Offset=0, Count=394
+ TO-BE-DONE: data not interpreted
+ 3 12:27:10.034910 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x5280!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=1
+ Sequence=69, Status=0, Assoc.=0, Offset=0, Count=0
+ 4 12:27:10.035047 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 40) ::1.123 > ::1.38531: [bad udp cksum 0x003b -> 0xfba0!] NTPv2, Control Message, length 32
+ Leap indicator: (0), Response, OK, Last, OpCode=1
+ Sequence=69, Status=0x618, Assoc.=0, Offset=0, Count=20
+ TO-BE-DONE: data not interpreted
+ 5 12:27:15.522207 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x527f!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=1
+ Sequence=70, Status=0, Assoc.=0, Offset=0, Count=0
+ 6 12:27:15.522407 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 40) ::1.123 > ::1.38531: [bad udp cksum 0x003b -> 0xfb9f!] NTPv2, Control Message, length 32
+ Leap indicator: (0), Response, OK, Last, OpCode=1
+ Sequence=70, Status=0x618, Assoc.=0, Offset=0, Count=20
+ TO-BE-DONE: data not interpreted
+ 7 12:27:15.551426 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93c3!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=71, Status=0, Assoc.=48825, Offset=0, Count=0
+ 8 12:27:15.551668 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0x5350!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=71, Status=0x8011, Assoc.=48825, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 9 12:27:15.551735 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 128) ::1.123 > ::1.38531: [bad udp cksum 0x0093 -> 0xbcc4!] NTPv2, Control Message, length 120
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=71, Status=0x8011, Assoc.=48825, Offset=468, Count=106
+ TO-BE-DONE: data not interpreted
+ 10 12:27:15.551870 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93c1!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=72, Status=0, Assoc.=48826, Offset=0, Count=0
+ 11 12:27:15.552036 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0xc0d5!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=72, Status=0x8011, Assoc.=48826, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 12 12:27:15.552099 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 128) ::1.123 > ::1.38531: [bad udp cksum 0x0093 -> 0x88c5!] NTPv2, Control Message, length 120
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=72, Status=0x8011, Assoc.=48826, Offset=468, Count=107
+ TO-BE-DONE: data not interpreted
+ 13 12:27:15.552257 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93bf!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=73, Status=0, Assoc.=48827, Offset=0, Count=0
+ 14 12:27:15.552420 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0x5c4a!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=73, Status=0x8011, Assoc.=48827, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 15 12:27:15.552459 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 124) ::1.123 > ::1.38531: [bad udp cksum 0x008f -> 0xdcfa!] NTPv2, Control Message, length 116
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=73, Status=0x8011, Assoc.=48827, Offset=468, Count=104
+ TO-BE-DONE: data not interpreted
+ 16 12:27:15.552614 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93bd!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=74, Status=0, Assoc.=48828, Offset=0, Count=0
+ 17 12:27:15.552756 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0x5634!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=74, Status=0x8011, Assoc.=48828, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 18 12:27:15.552790 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 128) ::1.123 > ::1.38531: [bad udp cksum 0x0093 -> 0x8c8c!] NTPv2, Control Message, length 120
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=74, Status=0x8011, Assoc.=48828, Offset=468, Count=108
+ TO-BE-DONE: data not interpreted
+ 19 12:27:15.552933 IP6 (flowlabel 0x62d8a, hlim 64, next-header UDP (17) payload length: 20) ::1.38531 > ::1.123: [bad udp cksum 0x0027 -> 0x93bb!] NTPv2, Control Message, length 12
+ Leap indicator: (0), Request, OK, Last, OpCode=2
+ Sequence=75, Status=0, Assoc.=48829, Offset=0, Count=0
+ 20 12:27:15.553074 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 488) ::1.123 > ::1.38531: [bad udp cksum 0x01fb -> 0x9c1f!] NTPv2, Control Message, length 480
+ Leap indicator: (0), Response, OK, More, OpCode=2
+ Sequence=75, Status=0x961a, Assoc.=48829, Offset=0, Count=468
+ TO-BE-DONE: data not interpreted
+ 21 12:27:15.553109 IP6 (class 0xb8, flowlabel 0x834cf, hlim 64, next-header UDP (17) payload length: 108) ::1.123 > ::1.38531: [bad udp cksum 0x007f -> 0x77be!] NTPv2, Control Message, length 100
+ Leap indicator: (0), Response, OK, Last, OpCode=2
+ Sequence=75, Status=0x961a, Assoc.=48829, Offset=468, Count=85
+ TO-BE-DONE: data not interpreted
diff --git a/tests/ntp-control.out b/tests/ntp-control.out
new file mode 100644
index 0000000..1ff23ff
--- /dev/null
+++ b/tests/ntp-control.out
@@ -0,0 +1,21 @@
+ 1 12:27:00.612230 IP6 ::1.38531 > ::1.123: NTPv2, Control Message, length 12
+ 2 12:27:00.612439 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 408
+ 3 12:27:10.034910 IP6 ::1.38531 > ::1.123: NTPv2, Control Message, length 12
+ 4 12:27:10.035047 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 32
+ 5 12:27:15.522207 IP6 ::1.38531 > ::1.123: NTPv2, Control Message, length 12
+ 6 12:27:15.522407 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 32
+ 7 12:27:15.551426 IP6 ::1.38531 > ::1.123: NTPv2, Control Message, length 12
+ 8 12:27:15.551668 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 480
+ 9 12:27:15.551735 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 120
+ 10 12:27:15.551870 IP6 ::1.38531 > ::1.123: NTPv2, Control Message, length 12
+ 11 12:27:15.552036 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 480
+ 12 12:27:15.552099 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 120
+ 13 12:27:15.552257 IP6 ::1.38531 > ::1.123: NTPv2, Control Message, length 12
+ 14 12:27:15.552420 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 480
+ 15 12:27:15.552459 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 116
+ 16 12:27:15.552614 IP6 ::1.38531 > ::1.123: NTPv2, Control Message, length 12
+ 17 12:27:15.552756 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 480
+ 18 12:27:15.552790 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 120
+ 19 12:27:15.552933 IP6 ::1.38531 > ::1.123: NTPv2, Control Message, length 12
+ 20 12:27:15.553074 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 480
+ 21 12:27:15.553109 IP6 ::1.123 > ::1.38531: NTPv2, Control Message, length 100
diff --git a/tests/ntp-control.pcap b/tests/ntp-control.pcap
new file mode 100644
index 0000000..f309336
--- /dev/null
+++ b/tests/ntp-control.pcap
Binary files differ
diff --git a/tests/ntp-mode7--v.out b/tests/ntp-mode7--v.out
new file mode 100644
index 0000000..a1c7f34
--- /dev/null
+++ b/tests/ntp-mode7--v.out
@@ -0,0 +1,24 @@
+ 1 07:22:22.252624 IP (tos 0x0, ttl 64, id 3928, offset 0, flags [DF], proto UDP (17), length 220)
+ 127.0.0.1.32795 > 127.0.0.1.123: NTPv2, Reserved, length 192
+ Leap indicator: (0)
+ 2 07:22:22.252700 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 72)
+ 127.0.0.1.123 > 127.0.0.1.32795: NTPv2, Reserved, length 44
+ Leap indicator: -1s (128)
+ 3 07:22:29.460683 IP (tos 0x0, ttl 64, id 3929, offset 0, flags [DF], proto UDP (17), length 220)
+ 127.0.0.1.32795 > 127.0.0.1.123: NTPv2, Reserved, length 192
+ Leap indicator: (0)
+ 4 07:22:29.460754 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 60)
+ 127.0.0.1.123 > 127.0.0.1.32795: NTPv2, Reserved, length 32
+ Leap indicator: -1s (128)
+ 5 07:22:39.972764 IP (tos 0x0, ttl 64, id 3930, offset 0, flags [DF], proto UDP (17), length 220)
+ 127.0.0.1.32795 > 127.0.0.1.123: NTPv2, Reserved, length 192
+ Leap indicator: (0)
+ 6 07:22:39.972837 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 96)
+ 127.0.0.1.123 > 127.0.0.1.32795: NTPv2, Reserved, length 68
+ Leap indicator: -1s (128)
+ 7 07:22:44.396700 IP (tos 0x0, ttl 64, id 3931, offset 0, flags [DF], proto UDP (17), length 220)
+ 127.0.0.1.32795 > 127.0.0.1.123: NTPv2, Reserved, length 192
+ Leap indicator: (0)
+ 8 07:22:44.396781 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 468)
+ 127.0.0.1.123 > 127.0.0.1.32795: NTPv2, Reserved, length 440
+ Leap indicator: -1s (128)
diff --git a/tests/ntp-mode7--vv.out b/tests/ntp-mode7--vv.out
new file mode 100644
index 0000000..3d31465
--- /dev/null
+++ b/tests/ntp-mode7--vv.out
@@ -0,0 +1,24 @@
+ 1 07:22:22.252624 IP (tos 0x0, ttl 64, id 3928, offset 0, flags [DF], proto UDP (17), length 220)
+ 127.0.0.1.32795 > 127.0.0.1.123: [bad udp cksum 0xfedb -> 0x65a9!] NTPv2, Reserved, length 192
+ Leap indicator: (0)
+ 2 07:22:22.252700 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 72)
+ 127.0.0.1.123 > 127.0.0.1.32795: [bad udp cksum 0xfe47 -> 0xb900!] NTPv2, Reserved, length 44
+ Leap indicator: -1s (128)
+ 3 07:22:29.460683 IP (tos 0x0, ttl 64, id 3929, offset 0, flags [DF], proto UDP (17), length 220)
+ 127.0.0.1.32795 > 127.0.0.1.123: [bad udp cksum 0xfedb -> 0x65bd!] NTPv2, Reserved, length 192
+ Leap indicator: (0)
+ 4 07:22:29.460754 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 60)
+ 127.0.0.1.123 > 127.0.0.1.32795: [bad udp cksum 0xfe3b -> 0xeb6d!] NTPv2, Reserved, length 32
+ Leap indicator: -1s (128)
+ 5 07:22:39.972764 IP (tos 0x0, ttl 64, id 3930, offset 0, flags [DF], proto UDP (17), length 220)
+ 127.0.0.1.32795 > 127.0.0.1.123: [bad udp cksum 0xfedb -> 0x659f!] NTPv2, Reserved, length 192
+ Leap indicator: (0)
+ 6 07:22:39.972837 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 96)
+ 127.0.0.1.123 > 127.0.0.1.32795: [bad udp cksum 0xfe5f -> 0xf9f5!] NTPv2, Reserved, length 68
+ Leap indicator: -1s (128)
+ 7 07:22:44.396700 IP (tos 0x0, ttl 64, id 3931, offset 0, flags [DF], proto UDP (17), length 220)
+ 127.0.0.1.32795 > 127.0.0.1.123: [bad udp cksum 0xfedb -> 0x65c4!] NTPv2, Reserved, length 192
+ Leap indicator: (0)
+ 8 07:22:44.396781 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 468)
+ 127.0.0.1.123 > 127.0.0.1.32795: [bad udp cksum 0xffd3 -> 0xdf82!] NTPv2, Reserved, length 440
+ Leap indicator: -1s (128)
diff --git a/tests/ntp-mode7--vvv.out b/tests/ntp-mode7--vvv.out
new file mode 100644
index 0000000..3d31465
--- /dev/null
+++ b/tests/ntp-mode7--vvv.out
@@ -0,0 +1,24 @@
+ 1 07:22:22.252624 IP (tos 0x0, ttl 64, id 3928, offset 0, flags [DF], proto UDP (17), length 220)
+ 127.0.0.1.32795 > 127.0.0.1.123: [bad udp cksum 0xfedb -> 0x65a9!] NTPv2, Reserved, length 192
+ Leap indicator: (0)
+ 2 07:22:22.252700 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 72)
+ 127.0.0.1.123 > 127.0.0.1.32795: [bad udp cksum 0xfe47 -> 0xb900!] NTPv2, Reserved, length 44
+ Leap indicator: -1s (128)
+ 3 07:22:29.460683 IP (tos 0x0, ttl 64, id 3929, offset 0, flags [DF], proto UDP (17), length 220)
+ 127.0.0.1.32795 > 127.0.0.1.123: [bad udp cksum 0xfedb -> 0x65bd!] NTPv2, Reserved, length 192
+ Leap indicator: (0)
+ 4 07:22:29.460754 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 60)
+ 127.0.0.1.123 > 127.0.0.1.32795: [bad udp cksum 0xfe3b -> 0xeb6d!] NTPv2, Reserved, length 32
+ Leap indicator: -1s (128)
+ 5 07:22:39.972764 IP (tos 0x0, ttl 64, id 3930, offset 0, flags [DF], proto UDP (17), length 220)
+ 127.0.0.1.32795 > 127.0.0.1.123: [bad udp cksum 0xfedb -> 0x659f!] NTPv2, Reserved, length 192
+ Leap indicator: (0)
+ 6 07:22:39.972837 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 96)
+ 127.0.0.1.123 > 127.0.0.1.32795: [bad udp cksum 0xfe5f -> 0xf9f5!] NTPv2, Reserved, length 68
+ Leap indicator: -1s (128)
+ 7 07:22:44.396700 IP (tos 0x0, ttl 64, id 3931, offset 0, flags [DF], proto UDP (17), length 220)
+ 127.0.0.1.32795 > 127.0.0.1.123: [bad udp cksum 0xfedb -> 0x65c4!] NTPv2, Reserved, length 192
+ Leap indicator: (0)
+ 8 07:22:44.396781 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 468)
+ 127.0.0.1.123 > 127.0.0.1.32795: [bad udp cksum 0xffd3 -> 0xdf82!] NTPv2, Reserved, length 440
+ Leap indicator: -1s (128)
diff --git a/tests/ntp-mode7.out b/tests/ntp-mode7.out
new file mode 100644
index 0000000..310ec85
--- /dev/null
+++ b/tests/ntp-mode7.out
@@ -0,0 +1,8 @@
+ 1 07:22:22.252624 IP 127.0.0.1.32795 > 127.0.0.1.123: NTPv2, Reserved, length 192
+ 2 07:22:22.252700 IP 127.0.0.1.123 > 127.0.0.1.32795: NTPv2, Reserved, length 44
+ 3 07:22:29.460683 IP 127.0.0.1.32795 > 127.0.0.1.123: NTPv2, Reserved, length 192
+ 4 07:22:29.460754 IP 127.0.0.1.123 > 127.0.0.1.32795: NTPv2, Reserved, length 32
+ 5 07:22:39.972764 IP 127.0.0.1.32795 > 127.0.0.1.123: NTPv2, Reserved, length 192
+ 6 07:22:39.972837 IP 127.0.0.1.123 > 127.0.0.1.32795: NTPv2, Reserved, length 68
+ 7 07:22:44.396700 IP 127.0.0.1.32795 > 127.0.0.1.123: NTPv2, Reserved, length 192
+ 8 07:22:44.396781 IP 127.0.0.1.123 > 127.0.0.1.32795: NTPv2, Reserved, length 440
diff --git a/tests/ntp-mode7.pcap b/tests/ntp-mode7.pcap
new file mode 100644
index 0000000..6d23f80
--- /dev/null
+++ b/tests/ntp-mode7.pcap
Binary files differ
diff --git a/tests/ntp-time--v.out b/tests/ntp-time--v.out
new file mode 100644
index 0000000..373144c
--- /dev/null
+++ b/tests/ntp-time--v.out
@@ -0,0 +1,20 @@
+ 1 13:21:56.928550 IP (tos 0x0, ttl 64, id 24704, offset 0, flags [DF], proto UDP (17), length 76)
+ 132.199.152.129.49445 > 132.199.4.1.123: NTPv4, Client, length 48
+ Leap indicator: clock unsynchronized (192), Stratum 0 (unspecified), poll 8 (256s), precision 0
+ Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: (unspec)
+ Reference Timestamp: 0.000000000
+ Originator Timestamp: 0.000000000
+ Receive Timestamp: 0.000000000
+ Transmit Timestamp: 3712483316.928478999 (2017-08-23T13:21:56Z)
+ Originator - Receive Timestamp: 0.000000000
+ Originator - Transmit Timestamp: 3712483316.928478999 (2017-08-23T13:21:56Z)
+ 2 13:21:56.928851 IP (tos 0xb8, ttl 62, id 8834, offset 0, flags [DF], proto UDP (17), length 76)
+ 132.199.4.1.123 > 132.199.152.129.49445: NTPv4, Server, length 48
+ Leap indicator: (0), Stratum 2 (secondary reference), poll 8 (256s), precision -24
+ Root Delay: 0.000320, Root dispersion: 0.036407, Reference-ID: 0x84c707c9
+ Reference Timestamp: 3712482106.337741360 (2017-08-23T13:01:46Z)
+ Originator Timestamp: 3712483316.928478999 (2017-08-23T13:21:56Z)
+ Receive Timestamp: 3712483316.929920629 (2017-08-23T13:21:56Z)
+ Transmit Timestamp: 3712483316.929948437 (2017-08-23T13:21:56Z)
+ Originator - Receive Timestamp: +0.001441629
+ Originator - Transmit Timestamp: +0.001469437
diff --git a/tests/ntp-time--vv.out b/tests/ntp-time--vv.out
new file mode 100644
index 0000000..f7bc88f
--- /dev/null
+++ b/tests/ntp-time--vv.out
@@ -0,0 +1,20 @@
+ 1 13:21:56.928550 IP (tos 0x0, ttl 64, id 24704, offset 0, flags [DF], proto UDP (17), length 76)
+ 132.199.152.129.49445 > 132.199.4.1.123: [udp sum ok] NTPv4, Client, length 48
+ Leap indicator: clock unsynchronized (192), Stratum 0 (unspecified), poll 8 (256s), precision 0
+ Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: (unspec)
+ Reference Timestamp: 0.000000000
+ Originator Timestamp: 0.000000000
+ Receive Timestamp: 0.000000000
+ Transmit Timestamp: 3712483316.928478999 (2017-08-23T13:21:56Z)
+ Originator - Receive Timestamp: 0.000000000
+ Originator - Transmit Timestamp: 3712483316.928478999 (2017-08-23T13:21:56Z)
+ 2 13:21:56.928851 IP (tos 0xb8, ttl 62, id 8834, offset 0, flags [DF], proto UDP (17), length 76)
+ 132.199.4.1.123 > 132.199.152.129.49445: [udp sum ok] NTPv4, Server, length 48
+ Leap indicator: (0), Stratum 2 (secondary reference), poll 8 (256s), precision -24
+ Root Delay: 0.000320, Root dispersion: 0.036407, Reference-ID: 0x84c707c9
+ Reference Timestamp: 3712482106.337741360 (2017-08-23T13:01:46Z)
+ Originator Timestamp: 3712483316.928478999 (2017-08-23T13:21:56Z)
+ Receive Timestamp: 3712483316.929920629 (2017-08-23T13:21:56Z)
+ Transmit Timestamp: 3712483316.929948437 (2017-08-23T13:21:56Z)
+ Originator - Receive Timestamp: +0.001441629
+ Originator - Transmit Timestamp: +0.001469437
diff --git a/tests/ntp-time--vvv.out b/tests/ntp-time--vvv.out
new file mode 100644
index 0000000..f7bc88f
--- /dev/null
+++ b/tests/ntp-time--vvv.out
@@ -0,0 +1,20 @@
+ 1 13:21:56.928550 IP (tos 0x0, ttl 64, id 24704, offset 0, flags [DF], proto UDP (17), length 76)
+ 132.199.152.129.49445 > 132.199.4.1.123: [udp sum ok] NTPv4, Client, length 48
+ Leap indicator: clock unsynchronized (192), Stratum 0 (unspecified), poll 8 (256s), precision 0
+ Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: (unspec)
+ Reference Timestamp: 0.000000000
+ Originator Timestamp: 0.000000000
+ Receive Timestamp: 0.000000000
+ Transmit Timestamp: 3712483316.928478999 (2017-08-23T13:21:56Z)
+ Originator - Receive Timestamp: 0.000000000
+ Originator - Transmit Timestamp: 3712483316.928478999 (2017-08-23T13:21:56Z)
+ 2 13:21:56.928851 IP (tos 0xb8, ttl 62, id 8834, offset 0, flags [DF], proto UDP (17), length 76)
+ 132.199.4.1.123 > 132.199.152.129.49445: [udp sum ok] NTPv4, Server, length 48
+ Leap indicator: (0), Stratum 2 (secondary reference), poll 8 (256s), precision -24
+ Root Delay: 0.000320, Root dispersion: 0.036407, Reference-ID: 0x84c707c9
+ Reference Timestamp: 3712482106.337741360 (2017-08-23T13:01:46Z)
+ Originator Timestamp: 3712483316.928478999 (2017-08-23T13:21:56Z)
+ Receive Timestamp: 3712483316.929920629 (2017-08-23T13:21:56Z)
+ Transmit Timestamp: 3712483316.929948437 (2017-08-23T13:21:56Z)
+ Originator - Receive Timestamp: +0.001441629
+ Originator - Transmit Timestamp: +0.001469437
diff --git a/tests/ntp-time.out b/tests/ntp-time.out
new file mode 100644
index 0000000..93f3dc9
--- /dev/null
+++ b/tests/ntp-time.out
@@ -0,0 +1,2 @@
+ 1 13:21:56.928550 IP 132.199.152.129.49445 > 132.199.4.1.123: NTPv4, Client, length 48
+ 2 13:21:56.928851 IP 132.199.4.1.123 > 132.199.152.129.49445: NTPv4, Server, length 48
diff --git a/tests/ntp-time.pcap b/tests/ntp-time.pcap
new file mode 100644
index 0000000..da18798
--- /dev/null
+++ b/tests/ntp-time.pcap
Binary files differ
diff --git a/tests/ntp-v.out b/tests/ntp-v.out
new file mode 100644
index 0000000..26a1bcb
--- /dev/null
+++ b/tests/ntp-v.out
@@ -0,0 +1,91 @@
+ 1 14:12:10.230949 IP (tos 0x0, ttl 64, id 58037, offset 0, flags [DF], proto UDP (17), length 100)
+ 192.168.100.2.58054 > 192.168.100.1.123: NTPv4, Client, length 72
+ Leap indicator: (0), Stratum 0 (unspecified), poll 0 (1s), precision 32
+ Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: (unspec)
+ Reference Timestamp: 0.000000000
+ Originator Timestamp: 0.000000000
+ Receive Timestamp: 0.000000000
+ Transmit Timestamp: 2763234513.007738396 (1987-07-25T21:08:33Z)
+ Originator - Receive Timestamp: 0.000000000
+ Originator - Transmit Timestamp: 2763234513.007738396 (1987-07-25T21:08:33Z)
+ Key id: 8
+ Authentication: 57ea530f6d74350cc5286bfec1ab8ca747c73584
+ 2 14:12:10.231082 IP (tos 0xb8, ttl 64, id 24722, offset 0, flags [DF], proto UDP (17), length 80)
+ 192.168.100.1.123 > 192.168.100.2.58054: NTPv4, Server, length 52
+ Leap indicator: clock unsynchronized (192), Stratum 0 (unspecified), poll 3 (8s), precision -23
+ Root Delay: 0.000000, Root dispersion: 0.001373, Reference-ID: (unspec)
+ Reference Timestamp: 0.000000000
+ Originator Timestamp: 2763234513.007738396 (1987-07-25T21:08:33Z)
+ Receive Timestamp: 3706870329.516015118 (2017-06-19T14:12:09Z)
+ Transmit Timestamp: 3706870329.516074047 (2017-06-19T14:12:09Z)
+ Originator - Receive Timestamp: +943635816.508276721
+ Originator - Transmit Timestamp: +943635816.508335651
+ Key id: 0
+ 3 14:19:18.494390 IP (tos 0x0, ttl 64, id 5777, offset 0, flags [DF], proto UDP (17), length 100)
+ 192.168.100.2.42818 > 192.168.100.1.123: NTPv4, Client, length 72
+ Leap indicator: (0), Stratum 0 (unspecified), poll 0 (1s), precision 32
+ Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: (unspec)
+ Reference Timestamp: 0.000000000
+ Originator Timestamp: 3706870757.473833108 (2017-06-19T14:19:17Z)
+ Receive Timestamp: 1802554105.693999877 (1957-02-13T21:28:25Z)
+ Transmit Timestamp: 2929527464.107565978 (1992-10-31T13:37:44Z)
+ Originator - Receive Timestamp: -1904316651.779833231
+ Originator - Transmit Timestamp: -777343293.366267130
+ Key id: 8
+ Authentication: 8b7e640979156264f3faa5ae979656dd86502431
+ 4 14:19:18.494589 IP (tos 0x0, ttl 64, id 64601, offset 0, flags [DF], proto UDP (17), length 100)
+ 192.168.100.1.123 > 192.168.100.2.42818: NTPv4, Server, length 72
+ Leap indicator: (0), Stratum 2 (secondary reference), poll 0 (1s), precision -23
+ Root Delay: 0.155502, Root dispersion: 0.001571, Reference-ID: 0x0a051b0a
+ Reference Timestamp: 3706870757.720418353 (2017-06-19T14:19:17Z)
+ Originator Timestamp: 2929527464.107565978 (1992-10-31T13:37:44Z)
+ Receive Timestamp: 3706870758.494427815 (2017-06-19T14:19:18Z)
+ Transmit Timestamp: 3706870758.494546877 (2017-06-19T14:19:18Z)
+ Originator - Receive Timestamp: +777343294.386861836
+ Originator - Transmit Timestamp: +777343294.386980899
+ Key id: 8
+ Authentication: 629990a7fc22cc8467dd88b7af2d220dbe3287d6
+ 5 14:22:54.488500 IP (tos 0x0, ttl 64, id 31502, offset 0, flags [DF], proto UDP (17), length 76)
+ 192.168.100.2.53144 > 192.168.100.1.123: NTPv4, Client, length 48
+ Leap indicator: clock unsynchronized (192), Stratum 0 (unspecified), poll 3 (8s), precision -6
+ Root Delay: 1.000000, Root dispersion: 1.000000, Reference-ID: (unspec)
+ Reference Timestamp: 0.000000000
+ Originator Timestamp: 0.000000000
+ Receive Timestamp: 0.000000000
+ Transmit Timestamp: 3706870974.488488492 (2017-06-19T14:22:54Z)
+ Originator - Receive Timestamp: 0.000000000
+ Originator - Transmit Timestamp: 3706870974.488488492 (2017-06-19T14:22:54Z)
+ 6 14:22:54.488761 IP (tos 0x0, ttl 64, id 456, offset 0, flags [DF], proto UDP (17), length 76)
+ 192.168.100.1.123 > 192.168.100.2.53144: NTPv4, Server, length 48
+ Leap indicator: (0), Stratum 2 (secondary reference), poll 3 (8s), precision -23
+ Root Delay: 0.155456, Root dispersion: 0.001007, Reference-ID: 0x0a051b0a
+ Reference Timestamp: 3706870972.021018556 (2017-06-19T14:22:52Z)
+ Originator Timestamp: 3706870974.488488492 (2017-06-19T14:22:54Z)
+ Receive Timestamp: 3706870974.488540573 (2017-06-19T14:22:54Z)
+ Transmit Timestamp: 3706870974.488665335 (2017-06-19T14:22:54Z)
+ Originator - Receive Timestamp: +0.000052081
+ Originator - Transmit Timestamp: +0.000176842
+ 7 14:47:12.800853 IP (tos 0xc0, ttl 64, id 4575, offset 0, flags [DF], proto UDP (17), length 96)
+ 192.168.100.2.123 > 192.168.100.1.123: NTPv4, Client, length 68
+ Leap indicator: clock unsynchronized (192), Stratum 0 (unspecified), poll 6 (64s), precision -25
+ Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: (unspec)
+ Reference Timestamp: 0.000000000
+ Originator Timestamp: 0.000000000
+ Receive Timestamp: 0.000000000
+ Transmit Timestamp: 3706872432.800841171 (2017-06-19T14:47:12Z)
+ Originator - Receive Timestamp: 0.000000000
+ Originator - Transmit Timestamp: 3706872432.800841171 (2017-06-19T14:47:12Z)
+ Key id: 8
+ Authentication: d5378a09c04da845732097104348843a
+ 8 14:47:12.800979 IP (tos 0xb8, ttl 64, id 6653, offset 0, flags [DF], proto UDP (17), length 96)
+ 192.168.100.1.123 > 192.168.100.2.123: NTPv4, Server, length 68
+ Leap indicator: (0), Stratum 2 (secondary reference), poll 6 (64s), precision -23
+ Root Delay: 0.116577, Root dispersion: 0.001739, Reference-ID: 0x0a0ba0ee
+ Reference Timestamp: 3706872421.265296222 (2017-06-19T14:47:01Z)
+ Originator Timestamp: 3706872432.800841171 (2017-06-19T14:47:12Z)
+ Receive Timestamp: 3706872432.799168336 (2017-06-19T14:47:12Z)
+ Transmit Timestamp: 3706872432.799217265 (2017-06-19T14:47:12Z)
+ Originator - Receive Timestamp: -0.001672834
+ Originator - Transmit Timestamp: -0.001623905
+ Key id: 8
+ Authentication: a7005b034ca215fedfa0d798db37ae9e
diff --git a/tests/ntp.out b/tests/ntp.out
new file mode 100644
index 0000000..9d7213f
--- /dev/null
+++ b/tests/ntp.out
@@ -0,0 +1,8 @@
+ 1 14:12:10.230949 IP 192.168.100.2.58054 > 192.168.100.1.123: NTPv4, Client, length 72
+ 2 14:12:10.231082 IP 192.168.100.1.123 > 192.168.100.2.58054: NTPv4, Server, length 52
+ 3 14:19:18.494390 IP 192.168.100.2.42818 > 192.168.100.1.123: NTPv4, Client, length 72
+ 4 14:19:18.494589 IP 192.168.100.1.123 > 192.168.100.2.42818: NTPv4, Server, length 72
+ 5 14:22:54.488500 IP 192.168.100.2.53144 > 192.168.100.1.123: NTPv4, Client, length 48
+ 6 14:22:54.488761 IP 192.168.100.1.123 > 192.168.100.2.53144: NTPv4, Server, length 48
+ 7 14:47:12.800853 IP 192.168.100.2.123 > 192.168.100.1.123: NTPv4, Client, length 68
+ 8 14:47:12.800979 IP 192.168.100.1.123 > 192.168.100.2.123: NTPv4, Server, length 68
diff --git a/tests/ntp.pcap b/tests/ntp.pcap
new file mode 100644
index 0000000..2fd5937
--- /dev/null
+++ b/tests/ntp.pcap
Binary files differ
diff --git a/tests/of10_7050q-v.out b/tests/of10_7050q-v.out
new file mode 100644
index 0000000..28e064a
--- /dev/null
+++ b/tests/of10_7050q-v.out
@@ -0,0 +1,18 @@
+ 1 09:55:19.501959 IP (tos 0x0, ttl 64, id 53965, offset 0, flags [DF], proto TCP (6), length 104)
+ 10.0.0.80.6633 > 86.139.225.177.57145: Flags [P.], cksum 0xddb3 (correct), seq 3804035784:3804035836, ack 3936946676, win 136, options [nop,nop,TS val 256259488 ecr 12980962], length 52: OpenFlow
+ version 1.0, type VENDOR, length 24, xid 0x00000018, vendor 0x005c16c7 (Big Switch Networks)
+ subtype GET_IP_MASK_REQUEST, index 0
+ version 1.0, type VENDOR, length 20, xid 0x00000019, vendor 0x005c16c7 (Big Switch Networks)
+ subtype GET_MIRRORING_REQUEST, report_mirror_ports OFF
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x0000001a
+ 2 09:55:19.601986 IP (tos 0x0, ttl 44, id 2943, offset 0, flags [DF], proto TCP (6), length 76)
+ 86.139.225.177.57145 > 10.0.0.80.6633: Flags [P.], cksum 0xf75f (correct), seq 1:25, ack 52, win 54, options [nop,nop,TS val 12980987 ecr 256259488], length 24: OpenFlow
+ version 1.0, type VENDOR, length 24, xid 0x00000018, vendor 0x005c16c7 (Big Switch Networks)
+ subtype GET_IP_MASK_REPLY, index 0, mask 255.255.255.255
+ 3 09:55:19.641774 IP (tos 0x0, ttl 64, id 53966, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.80.6633 > 86.139.225.177.57145: Flags [.], cksum 0x42b3 (incorrect -> 0x0ee3), ack 25, win 136, options [nop,nop,TS val 256259628 ecr 12980987], length 0
+ 4 09:55:19.743669 IP (tos 0x0, ttl 44, id 2944, offset 0, flags [DF], proto TCP (6), length 80)
+ 86.139.225.177.57145 > 10.0.0.80.6633: Flags [P.], cksum 0xf55e (correct), seq 25:53, ack 52, win 54, options [nop,nop,TS val 12981023 ecr 256259628], length 28: OpenFlow
+ version 1.0, type VENDOR, length 20, xid 0x00000019, vendor 0x005c16c7 (Big Switch Networks)
+ subtype GET_MIRRORING_REPLY, report_mirror_ports OFF
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x0000001a
diff --git a/tests/of10_7050q.pcapng b/tests/of10_7050q.pcapng
new file mode 100644
index 0000000..43602af
--- /dev/null
+++ b/tests/of10_7050q.pcapng
Binary files differ
diff --git a/tests/of10_7050sx_bsn-oobr.out b/tests/of10_7050sx_bsn-oobr.out
new file mode 100644
index 0000000..15507e9
--- /dev/null
+++ b/tests/of10_7050sx_bsn-oobr.out
@@ -0,0 +1,16 @@
+ 1 16:11:54.505352 IP (tos 0x0, ttl 64, id 60713, offset 0, flags [DF], proto TCP (6), length 562)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], seq 3422281781:3422282291, ack 774258090, win 252, options [nop,nop,TS val 590230876 ecr 50526785], length 510: OpenFlow
+ version 1.0, type VENDOR, length 24, xid 0x0000001a, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SET_IP_MASK, index 1, mask 255.0.14.0
+ version 1.0, type VENDOR, length 24, xid 0x0000001b, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SET_IP_MASK, index 2, mask 255.0.28.0
+ version 1.0, type VENDOR, length 24, xid 0x0000001c, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SET_IP_MASK, index 3, mask 255.0.56.0
+ version 1.0, type VENDOR, length 24, xid 0x0000001d, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SET_IP_MASK, index 4, mask 255.0.112.0
+ version 1.0, type VENDOR, length 24, xid 0x0000001e, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SET_IP_MASK, index 5, mask 255.0.224.0
+ version 1.0, type VENDOR, length 24, xid 0x0000001f, vendor 0x005c16c7 (Big Switch Networks)
+ subtype GET_IP_MASK_REQUEST, index 3
+ version 1.0, type VENDOR, length 30, xid 0x00000020, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SHELL_COMMAND, service 0, data 'show cloc [|openflow]
diff --git a/tests/of10_7050sx_bsn-oobr.pcap b/tests/of10_7050sx_bsn-oobr.pcap
new file mode 100644
index 0000000..a564248
--- /dev/null
+++ b/tests/of10_7050sx_bsn-oobr.pcap
Binary files differ
diff --git a/tests/of10_7050sx_bsn-vv.out b/tests/of10_7050sx_bsn-vv.out
new file mode 100644
index 0000000..8a2c1aa
--- /dev/null
+++ b/tests/of10_7050sx_bsn-vv.out
@@ -0,0 +1,343 @@
+ 1 16:11:51.293880 IP (tos 0x0, ttl 55, id 5483, offset 0, flags [DF], proto TCP (6), length 60)
+ 88.150.169.52.37044 > 109.74.202.168.6653: Flags [S], cksum 0x0576 (correct), seq 1216143989, win 14600, options [mss 1460,sackOK,TS val 50525982 ecr 0,nop,wscale 7], length 0
+ 2 16:11:51.293947 IP (tos 0x0, ttl 64, id 26571, offset 0, flags [DF], proto TCP (6), length 40)
+ 109.74.202.168.6653 > 88.150.169.52.37044: Flags [R.], cksum 0xa06e (correct), seq 0, ack 1216143990, win 0, length 0
+ 3 16:11:53.295371 IP (tos 0x0, ttl 55, id 49495, offset 0, flags [DF], proto TCP (6), length 60)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [S], cksum 0x4629 (correct), seq 774256709, win 14600, options [mss 1460,sackOK,TS val 50526482 ecr 0,nop,wscale 7], length 0
+ 4 16:11:53.295463 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [S.], cksum 0x39ec (incorrect -> 0x0c04), seq 3422281440, ack 774256710, win 28960, options [mss 1460,sackOK,TS val 590230513 ecr 50526482,nop,wscale 7], length 0
+ 5 16:11:53.298824 IP (tos 0x0, ttl 55, id 49496, offset 0, flags [DF], proto TCP (6), length 52)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [.], cksum 0xab7c (correct), seq 1, ack 1, win 115, options [nop,nop,TS val 50526483 ecr 590230513], length 0
+ 6 16:11:53.305813 IP (tos 0x0, ttl 64, id 60691, offset 0, flags [DF], proto TCP (6), length 60)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x39ec (incorrect -> 0xa9f0), seq 1:9, ack 1, win 227, options [nop,nop,TS val 590230516 ecr 50526483], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0x00000001
+ 7 16:11:53.308458 IP (tos 0x0, ttl 55, id 49497, offset 0, flags [DF], proto TCP (6), length 52)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [.], cksum 0xab6e (correct), seq 1, ack 9, win 115, options [nop,nop,TS val 50526486 ecr 590230516], length 0
+ 8 16:11:54.295523 IP (tos 0x0, ttl 55, id 49498, offset 0, flags [DF], proto TCP (6), length 60)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0x7b45 (correct), seq 1:9, ack 9, win 115, options [nop,nop,TS val 50526732 ecr 590230516], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0x00002e1b
+ 9 16:11:54.295579 IP (tos 0x0, ttl 64, id 60692, offset 0, flags [DF], proto TCP (6), length 52)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [.], cksum 0x39e4 (incorrect -> 0xa8d7), seq 9, ack 9, win 227, options [nop,nop,TS val 590230813 ecr 50526732], length 0
+ 10 16:11:54.295793 IP (tos 0x0, ttl 64, id 60693, offset 0, flags [DF], proto TCP (6), length 60)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x39ec (incorrect -> 0xa7b8), seq 9:17, ack 9, win 227, options [nop,nop,TS val 590230813 ecr 50526732], length 8: OpenFlow
+ version 1.0, type FEATURES_REQUEST, length 8, xid 0x00000002
+ 11 16:11:54.298928 IP (tos 0x0, ttl 55, id 49499, offset 0, flags [DF], proto TCP (6), length 52)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [.], cksum 0xa93e (correct), seq 9, ack 17, win 115, options [nop,nop,TS val 50526733 ecr 590230813], length 0
+ 12 16:11:54.299530 IP (tos 0x0, ttl 55, id 49500, offset 0, flags [DF], proto TCP (6), length 468)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0xff61 (correct), seq 9:425, ack 17, win 115, options [nop,nop,TS val 50526733 ecr 590230813], length 416: OpenFlow
+ version 1.0, type FEATURES_REPLY, length 416, xid 0x00000002
+ dpid 0x0000001c737d280f, n_buffers 0, n_tables 1
+ capabilities 0x000000c7 (FLOW_STATS, TABLE_STATS, PORT_STATS, QUEUE_STATS, ARP_MATCH_IP)
+ actions 0x00000905 (OUTPUT, SET_VLAN_PCP, SET_NW_TOS, ENQUEUE)
+ port_no 16, hw_addr 00:1c:73:7d:28:1f, name 'Ethernet16'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000c40 (10GB_FD, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 20, hw_addr 00:1c:73:7d:28:23, name 'Ethernet20'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000c40 (10GB_FD, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 18, hw_addr 00:1c:73:7d:28:21, name 'Ethernet18'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000c40 (10GB_FD, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 22, hw_addr 00:1c:73:7d:28:25, name 'Ethernet22'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000c40 (10GB_FD, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 17, hw_addr 00:1c:73:7d:28:20, name 'Ethernet17'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000cc0 (10GB_FD, COPPER, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 21, hw_addr 00:1c:73:7d:28:24, name 'Ethernet21'
+ config 0x80000001 (PORT_DOWN) (bogus)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000cc0 (10GB_FD, COPPER, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 19, hw_addr 00:1c:73:7d:28:22, name 'Ethernet19'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000c40 (10GB_FD, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 23, hw_addr 00:1c:73:7d:28:26, name 'Ethernet23'
+ config 0x80000001 (PORT_DOWN) (bogus)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000c40 (10GB_FD, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ 13 16:11:54.303020 IP (tos 0x0, ttl 64, id 60694, offset 0, flags [DF], proto TCP (6), length 136)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x3a38 (incorrect -> 0xa414), seq 17:101, ack 425, win 235, options [nop,nop,TS val 590230815 ecr 50526733], length 84: OpenFlow
+ version 1.0, type SET_CONFIG, length 12, xid 0x00000003
+ flags FRAG_NORMAL, miss_send_len 65535
+ version 1.0, type FLOW_MOD, length 72, xid 0x00000004
+ cookie 0x0000000000000000, command DELETE, out_port NONE, flags 0x0000
+ 14 16:11:54.304964 IP (tos 0x0, ttl 64, id 60695, offset 0, flags [DF], proto TCP (6), length 60)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x39ec (incorrect -> 0xa5a0), seq 101:109, ack 425, win 235, options [nop,nop,TS val 590230816 ecr 50526733], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000005
+ 15 16:11:54.307353 IP (tos 0x0, ttl 55, id 49501, offset 0, flags [DF], proto TCP (6), length 140)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0x8297 (correct), seq 425:513, ack 109, win 115, options [nop,nop,TS val 50526735 ecr 590230815], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000ffd
+ match in_port 16
+ cookie 0x0000000000000001, priority 33000, reason DELETE, duration_sec 53, duration_nsec 990000000, packet_count 0, byte_count 0
+ 16 16:11:54.344876 IP (tos 0x0, ttl 64, id 60696, offset 0, flags [DF], proto TCP (6), length 52)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [.], cksum 0x39e4 (incorrect -> 0xa661), seq 109, ack 513, win 235, options [nop,nop,TS val 590230828 ecr 50526735], length 0
+ 17 16:11:54.350268 IP (tos 0x0, ttl 55, id 49502, offset 0, flags [DF], proto TCP (6), length 236)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0x6fdb (correct), seq 513:697, ack 109, win 115, options [nop,nop,TS val 50526745 ecr 590230828], length 184: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000ffe
+ match in_port 18
+ cookie 0x0000000000000002, priority 31000, reason DELETE, duration_sec 53, duration_nsec 990000000, packet_count 0, byte_count 0
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000fff
+ match in_port 22
+ cookie 0x0000000000000003, priority 30000, reason DELETE, duration_sec 53, duration_nsec 990000000, packet_count 0, byte_count 0
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000005
+ 18 16:11:54.350320 IP (tos 0x0, ttl 64, id 60697, offset 0, flags [DF], proto TCP (6), length 52)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [.], cksum 0x39e4 (incorrect -> 0xa596), seq 109, ack 697, win 243, options [nop,nop,TS val 590230829 ecr 50526745], length 0
+ 19 16:11:54.351010 IP (tos 0x0, ttl 64, id 60698, offset 0, flags [DF], proto TCP (6), length 140)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x3a3c (incorrect -> 0x41fa), seq 109:197, ack 697, win 243, options [nop,nop,TS val 590230829 ecr 50526745], length 88: OpenFlow
+ version 1.0, type VENDOR, length 20, xid 0x00000006, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SET_MIRRORING, report_mirror_ports ON
+ version 1.0, type VENDOR, length 20, xid 0x00000007, vendor 0x005c16c7 (Big Switch Networks)
+ subtype GET_MIRRORING_REQUEST, report_mirror_ports OFF
+ version 1.0, type VENDOR, length 20, xid 0x00000008, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SET_MIRRORING, report_mirror_ports OFF
+ version 1.0, type VENDOR, length 20, xid 0x00000009, vendor 0x005c16c7 (Big Switch Networks)
+ subtype GET_MIRRORING_REQUEST, report_mirror_ports OFF
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x0000000a
+ 20 16:11:54.354984 IP (tos 0x0, ttl 55, id 49503, offset 0, flags [DF], proto TCP (6), length 72)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0x8c59 (correct), seq 697:717, ack 197, win 115, options [nop,nop,TS val 50526747 ecr 590230829], length 20: OpenFlow
+ version 1.0, type VENDOR, length 20, xid 0x00000007, vendor 0x005c16c7 (Big Switch Networks)
+ subtype GET_MIRRORING_REPLY, report_mirror_ports ON
+ 21 16:11:54.394872 IP (tos 0x0, ttl 64, id 60699, offset 0, flags [DF], proto TCP (6), length 52)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [.], cksum 0x39e4 (incorrect -> 0xa51a), seq 197, ack 717, win 243, options [nop,nop,TS val 590230843 ecr 50526747], length 0
+ 22 16:11:54.397140 IP (tos 0x0, ttl 55, id 49504, offset 0, flags [DF], proto TCP (6), length 80)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0x8bfd (correct), seq 717:745, ack 197, win 115, options [nop,nop,TS val 50526758 ecr 590230843], length 28: OpenFlow
+ version 1.0, type VENDOR, length 20, xid 0x00000009, vendor 0x005c16c7 (Big Switch Networks)
+ subtype GET_MIRRORING_REPLY, report_mirror_ports OFF
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x0000000a
+ 23 16:11:54.397175 IP (tos 0x0, ttl 64, id 60700, offset 0, flags [DF], proto TCP (6), length 52)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [.], cksum 0x39e4 (incorrect -> 0xa4f3), seq 197, ack 745, win 243, options [nop,nop,TS val 590230843 ecr 50526758], length 0
+ 24 16:11:54.397593 IP (tos 0x0, ttl 64, id 60701, offset 0, flags [DF], proto TCP (6), length 80)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x3a00 (incorrect -> 0xa165), seq 197:225, ack 745, win 243, options [nop,nop,TS val 590230843 ecr 50526758], length 28: OpenFlow
+ version 1.0, type FEATURES_REQUEST, length 8, xid 0x0000000b
+ version 1.0, type STATS_REQUEST, length 12, xid 0x0000000c
+ type TABLE, flags 0x0000
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x0000000d
+ 25 16:11:54.400666 IP (tos 0x0, ttl 55, id 49505, offset 0, flags [DF], proto TCP (6), length 468)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0xfb70 (correct), seq 745:1161, ack 225, win 115, options [nop,nop,TS val 50526759 ecr 590230843], length 416: OpenFlow
+ version 1.0, type FEATURES_REPLY, length 416, xid 0x0000000b
+ dpid 0x0000001c737d280f, n_buffers 0, n_tables 1
+ capabilities 0x000000c7 (FLOW_STATS, TABLE_STATS, PORT_STATS, QUEUE_STATS, ARP_MATCH_IP)
+ actions 0x00000905 (OUTPUT, SET_VLAN_PCP, SET_NW_TOS, ENQUEUE)
+ port_no 16, hw_addr 00:1c:73:7d:28:1f, name 'Ethernet16'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000c40 (10GB_FD, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 20, hw_addr 00:1c:73:7d:28:23, name 'Ethernet20'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000c40 (10GB_FD, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 18, hw_addr 00:1c:73:7d:28:21, name 'Ethernet18'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000c40 (10GB_FD, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 22, hw_addr 00:1c:73:7d:28:25, name 'Ethernet22'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000c40 (10GB_FD, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 17, hw_addr 00:1c:73:7d:28:20, name 'Ethernet17'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000cc0 (10GB_FD, COPPER, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 21, hw_addr 00:1c:73:7d:28:24, name 'Ethernet21'
+ config 0x80000001 (PORT_DOWN) (bogus)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000cc0 (10GB_FD, COPPER, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 19, hw_addr 00:1c:73:7d:28:22, name 'Ethernet19'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000c40 (10GB_FD, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 23, hw_addr 00:1c:73:7d:28:26, name 'Ethernet23'
+ config 0x80000001 (PORT_DOWN) (bogus)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000040 (10GB_FD)
+ advertised 0x00000000
+ supported 0x00000c40 (10GB_FD, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ 26 16:11:54.438231 IP (tos 0x0, ttl 64, id 60702, offset 0, flags [DF], proto TCP (6), length 52)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [.], cksum 0x39e4 (incorrect -> 0xa320), seq 225, ack 1161, win 252, options [nop,nop,TS val 590230856 ecr 50526759], length 0
+ 27 16:11:54.442822 IP (tos 0x0, ttl 55, id 49506, offset 0, flags [DF], proto TCP (6), length 136)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0x4ea6 (correct), seq 1161:1245, ack 225, win 115, options [nop,nop,TS val 50526769 ecr 590230856], length 84: OpenFlow
+ version 1.0, type STATS_REPLY, length 76, xid 0x0000000c
+ type TABLE, flags 0x0000
+ table_id 0, name 'Table 0'
+ wildcards 0x003fffff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 1500, active_count 0, lookup_count 0, matched_count 0
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x0000000d
+ 28 16:11:54.442855 IP (tos 0x0, ttl 64, id 60703, offset 0, flags [DF], proto TCP (6), length 52)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [.], cksum 0x39e4 (incorrect -> 0xa2c1), seq 225, ack 1245, win 252, options [nop,nop,TS val 590230857 ecr 50526769], length 0
+ 29 16:11:54.443433 IP (tos 0x0, ttl 64, id 60704, offset 0, flags [DF], proto TCP (6), length 60)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x39ec (incorrect -> 0xa189), seq 225:233, ack 1245, win 252, options [nop,nop,TS val 590230857 ecr 50526769], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x0000000e
+ 30 16:11:54.445977 IP (tos 0x0, ttl 55, id 49507, offset 0, flags [DF], proto TCP (6), length 60)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0xa208 (correct), seq 1245:1253, ack 233, win 115, options [nop,nop,TS val 50526770 ecr 590230857], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x0000000e
+ 31 16:11:54.446147 IP (tos 0x0, ttl 64, id 60705, offset 0, flags [DF], proto TCP (6), length 60)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x39ec (incorrect -> 0xa176), seq 233:241, ack 1253, win 252, options [nop,nop,TS val 590230858 ecr 50526770], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x0000000f
+ 32 16:11:54.448750 IP (tos 0x0, ttl 55, id 49508, offset 0, flags [DF], proto TCP (6), length 60)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0xa1f5 (correct), seq 1253:1261, ack 241, win 115, options [nop,nop,TS val 50526771 ecr 590230858], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x0000000f
+ 33 16:11:54.448907 IP (tos 0x0, ttl 64, id 60706, offset 0, flags [DF], proto TCP (6), length 60)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x39ec (incorrect -> 0xa163), seq 241:249, ack 1261, win 252, options [nop,nop,TS val 590230859 ecr 50526771], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000010
+ 34 16:11:54.451413 IP (tos 0x0, ttl 55, id 49509, offset 0, flags [DF], proto TCP (6), length 60)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0xa1e3 (correct), seq 1261:1269, ack 249, win 115, options [nop,nop,TS val 50526771 ecr 590230859], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000010
+ 35 16:11:54.451718 IP (tos 0x0, ttl 64, id 60707, offset 0, flags [DF], proto TCP (6), length 60)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x39ec (incorrect -> 0xa151), seq 249:257, ack 1269, win 252, options [nop,nop,TS val 590230860 ecr 50526771], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000011
+ 36 16:11:54.454979 IP (tos 0x0, ttl 55, id 49510, offset 0, flags [DF], proto TCP (6), length 60)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0xa1d0 (correct), seq 1269:1277, ack 257, win 115, options [nop,nop,TS val 50526772 ecr 590230860], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000011
+ 37 16:11:54.455181 IP (tos 0x0, ttl 64, id 60708, offset 0, flags [DF], proto TCP (6), length 60)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x39ec (incorrect -> 0xa13e), seq 257:265, ack 1277, win 252, options [nop,nop,TS val 590230861 ecr 50526772], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000012
+ 38 16:11:54.458795 IP (tos 0x0, ttl 55, id 49511, offset 0, flags [DF], proto TCP (6), length 60)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0xa1bd (correct), seq 1277:1285, ack 265, win 115, options [nop,nop,TS val 50526773 ecr 590230861], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000012
+ 39 16:11:54.459026 IP (tos 0x0, ttl 64, id 60709, offset 0, flags [DF], proto TCP (6), length 60)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x39ec (incorrect -> 0xa12b), seq 265:273, ack 1285, win 252, options [nop,nop,TS val 590230862 ecr 50526773], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000013
+ 40 16:11:54.461429 IP (tos 0x0, ttl 55, id 49512, offset 0, flags [DF], proto TCP (6), length 60)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0xa1aa (correct), seq 1285:1293, ack 273, win 115, options [nop,nop,TS val 50526774 ecr 590230862], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000013
+ 41 16:11:54.461743 IP (tos 0x0, ttl 64, id 60710, offset 0, flags [DF], proto TCP (6), length 120)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x3a28 (incorrect -> 0x9a6c), seq 273:341, ack 1293, win 252, options [nop,nop,TS val 590230863 ecr 50526774], length 68: OpenFlow
+ version 1.0, type QUEUE_GET_CONFIG_REQUEST, length 12, xid 0x00000014
+ port 16
+ version 1.0, type QUEUE_GET_CONFIG_REQUEST, length 12, xid 0x00000015
+ port 20
+ version 1.0, type QUEUE_GET_CONFIG_REQUEST, length 12, xid 0x00000016
+ port 18
+ version 1.0, type QUEUE_GET_CONFIG_REQUEST, length 12, xid 0x00000017
+ port 22
+ version 1.0, type QUEUE_GET_CONFIG_REQUEST, length 12, xid 0x00000018
+ port 17
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000019
+ 42 16:11:54.464033 IP (tos 0x0, ttl 55, id 49513, offset 0, flags [DF], proto TCP (6), length 68)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0xa139 (correct), seq 1293:1309, ack 341, win 115, options [nop,nop,TS val 50526775 ecr 590230863], length 16: OpenFlow
+ version 1.0, type QUEUE_GET_CONFIG_REPLY, length 16, xid 0x00000014
+ port 16
+ 43 16:11:54.501564 IP (tos 0x0, ttl 64, id 60711, offset 0, flags [DF], proto TCP (6), length 52)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [.], cksum 0x39e4 (incorrect -> 0xa1f5), seq 341, ack 1309, win 252, options [nop,nop,TS val 590230875 ecr 50526775], length 0
+ 44 16:11:54.504038 IP (tos 0x0, ttl 55, id 49514, offset 0, flags [DF], proto TCP (6), length 124)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0x9bb5 (correct), seq 1309:1381, ack 341, win 115, options [nop,nop,TS val 50526785 ecr 590230875], length 72: OpenFlow
+ version 1.0, type QUEUE_GET_CONFIG_REPLY, length 16, xid 0x00000015
+ port 20
+ version 1.0, type QUEUE_GET_CONFIG_REPLY, length 16, xid 0x00000016
+ port 18
+ version 1.0, type QUEUE_GET_CONFIG_REPLY, length 16, xid 0x00000017
+ port 22
+ version 1.0, type QUEUE_GET_CONFIG_REPLY, length 16, xid 0x00000018
+ port 17
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000019
+ 45 16:11:54.504155 IP (tos 0x0, ttl 64, id 60712, offset 0, flags [DF], proto TCP (6), length 52)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [.], cksum 0x39e4 (incorrect -> 0xa1a3), seq 341, ack 1381, win 252, options [nop,nop,TS val 590230875 ecr 50526785], length 0
+ 46 16:11:54.505352 IP (tos 0x0, ttl 64, id 60713, offset 0, flags [DF], proto TCP (6), length 562)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x3be2 (incorrect -> 0x4d80), seq 341:851, ack 1381, win 252, options [nop,nop,TS val 590230876 ecr 50526785], length 510: OpenFlow
+ version 1.0, type VENDOR, length 24, xid 0x0000001a, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SET_IP_MASK, index 1, mask 255.0.14.0
+ version 1.0, type VENDOR, length 24, xid 0x0000001b, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SET_IP_MASK, index 2, mask 255.0.28.0
+ version 1.0, type VENDOR, length 24, xid 0x0000001c, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SET_IP_MASK, index 3, mask 255.0.56.0
+ version 1.0, type VENDOR, length 24, xid 0x0000001d, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SET_IP_MASK, index 4, mask 255.0.112.0
+ version 1.0, type VENDOR, length 24, xid 0x0000001e, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SET_IP_MASK, index 5, mask 255.0.224.0
+ version 1.0, type VENDOR, length 24, xid 0x0000001f, vendor 0x005c16c7 (Big Switch Networks)
+ subtype GET_IP_MASK_REQUEST, index 3
+ version 1.0, type VENDOR, length 30, xid 0x00000020, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SHELL_COMMAND, service 0, data 'show clock'
+ version 1.0, type FLOW_MOD, length 104, xid 0x00000021
+ match in_port 16
+ cookie 0x0000000000000001, command ADD, priority 33000, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type VENDOR, len 24, vendor 0x005c16c7 (Big Switch Networks)
+ subtype MIRROR, dest_port 21, vlan_tag none, copy_stage INGRESS
+ action type OUTPUT, len 8, port 17
+ version 1.0, type FLOW_MOD, length 128, xid 0x00000022
+ match in_port 18
+ cookie 0x0000000000000002, command ADD, priority 31000, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type VENDOR, len 24, vendor 0x005c16c7 (Big Switch Networks)
+ subtype MIRROR, dest_port 21, vlan_tag 802.1Q (vlan 2, p 4), copy_stage INGRESS
+ action type OUTPUT, len 8, port 19
+ action type VENDOR, len 24, vendor 0x005c16c7 (Big Switch Networks)
+ subtype MIRROR, dest_port 23, vlan_tag 802.1Q (vlan 2748, p 5, DEI), copy_stage EGRESS
+ version 1.0, type FLOW_MOD, length 96, xid 0x00000023
+ match in_port 22
+ cookie 0x0000000000000003, command ADD, priority 30000, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type VENDOR, len 24, vendor 0x005c16c7 (Big Switch Networks)
+ subtype MIRROR, dest_port 21, vlan_tag 802.1Q (vlan 0, p 1), copy_stage INGRESS
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000024
+ 47 16:11:54.508061 IP (tos 0x0, ttl 55, id 49515, offset 0, flags [DF], proto TCP (6), length 76)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0x4da3 (correct), seq 1381:1405, ack 851, win 123, options [nop,nop,TS val 50526786 ecr 590230876], length 24: OpenFlow
+ version 1.0, type VENDOR, length 24, xid 0x0000001f, vendor 0x005c16c7 (Big Switch Networks)
+ subtype GET_IP_MASK_REPLY, index 3, mask 255.0.56.0
+ 48 16:11:54.544912 IP (tos 0x0, ttl 64, id 60714, offset 0, flags [DF], proto TCP (6), length 52)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [.], cksum 0x39e4 (incorrect -> 0x9f7f), seq 851, ack 1405, win 252, options [nop,nop,TS val 590230888 ecr 50526786], length 0
+ 49 16:11:54.549108 IP (tos 0x0, ttl 55, id 49516, offset 0, flags [DF], proto TCP (6), length 80)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0x8632 (correct), seq 1405:1433, ack 851, win 123, options [nop,nop,TS val 50526795 ecr 590230888], length 28: OpenFlow
+ version 1.0, type VENDOR, length 20, xid 0x00000020, vendor 0x005c16c7 (Big Switch Networks)
+ subtype SHELL_STATUS, status 0xfffffffe
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000024
+ 50 16:11:54.549207 IP (tos 0x0, ttl 64, id 60715, offset 0, flags [DF], proto TCP (6), length 52)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [.], cksum 0x39e4 (incorrect -> 0x9f59), seq 851, ack 1433, win 252, options [nop,nop,TS val 590230889 ecr 50526795], length 0
+ 51 16:11:54.549472 IP (tos 0x0, ttl 64, id 60716, offset 0, flags [DF], proto TCP (6), length 60)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [P.], cksum 0x39ec (incorrect -> 0x9e0a), seq 851:859, ack 1433, win 252, options [nop,nop,TS val 590230889 ecr 50526795], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000025
+ 52 16:11:54.552183 IP (tos 0x0, ttl 55, id 49517, offset 0, flags [DF], proto TCP (6), length 60)
+ 88.150.169.52.4756 > 109.74.202.168.6653: Flags [P.], cksum 0x9e80 (correct), seq 1433:1441, ack 859, win 123, options [nop,nop,TS val 50526797 ecr 590230889], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000025
+ 53 16:11:54.591537 IP (tos 0x0, ttl 64, id 60717, offset 0, flags [DF], proto TCP (6), length 52)
+ 109.74.202.168.6653 > 88.150.169.52.4756: Flags [.], cksum 0x39e4 (incorrect -> 0x9f3a), seq 859, ack 1441, win 252, options [nop,nop,TS val 590230902 ecr 50526797], length 0
diff --git a/tests/of10_7050sx_bsn.pcap b/tests/of10_7050sx_bsn.pcap
new file mode 100644
index 0000000..c5164f1
--- /dev/null
+++ b/tests/of10_7050sx_bsn.pcap
Binary files differ
diff --git a/tests/of10_p3295-vv.out b/tests/of10_p3295-vv.out
new file mode 100644
index 0000000..0528302
--- /dev/null
+++ b/tests/of10_p3295-vv.out
@@ -0,0 +1,798 @@
+ 1 09:45:18.740755 IP (tos 0x0, ttl 64, id 55495, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [S], cksum 0xa230 (correct), seq 3930397949, win 5840, options [sackOK,TS val 194888762 ecr 0,mss 1460,nop,wscale 5], length 0
+ 2 09:45:18.740837 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [S.], cksum 0x1474 (incorrect -> 0x4253), seq 491620419, ack 3930397950, win 14480, options [mss 1460,sackOK,TS val 220957518 ecr 194888762,nop,wscale 7], length 0
+ 3 09:45:18.741100 IP (tos 0x0, ttl 64, id 55496, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [.], cksum 0xa8f8 (correct), seq 1, ack 1, win 183, options [nop,nop,TS val 194888762 ecr 220957518], length 0
+ 4 09:45:18.752412 IP (tos 0x0, ttl 64, id 778, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [P.], cksum 0x1474 (incorrect -> 0xa818), seq 1:9, ack 1, win 114, options [nop,nop,TS val 220957530 ecr 194888762], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0x00000001
+ 5 09:45:18.752645 IP (tos 0x0, ttl 64, id 55497, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [.], cksum 0xa8e1 (correct), seq 1, ack 9, win 183, options [nop,nop,TS val 194888765 ecr 220957530], length 0
+ 6 09:45:18.936027 IP (tos 0x0, ttl 64, id 55498, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0xa74f (correct), seq 1:9, ack 9, win 183, options [nop,nop,TS val 194888811 ecr 220957530], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0x0000004c
+ 7 09:45:18.936076 IP (tos 0x0, ttl 64, id 779, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0xa839), seq 9, ack 9, win 114, options [nop,nop,TS val 220957713 ecr 194888811], length 0
+ 8 09:45:18.936457 IP (tos 0x0, ttl 64, id 780, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [P.], cksum 0x1474 (incorrect -> 0xa719), seq 9:17, ack 9, win 114, options [nop,nop,TS val 220957714 ecr 194888811], length 8: OpenFlow
+ version 1.0, type FEATURES_REQUEST, length 8, xid 0x00000002
+ 9 09:45:18.936771 IP (tos 0x0, ttl 64, id 55499, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [.], cksum 0xa7eb (correct), seq 9, ack 17, win 183, options [nop,nop,TS val 194888811 ecr 220957714], length 0
+ 10 09:45:19.743468 IP (tos 0x0, ttl 64, id 55500, offset 0, flags [DF], proto TCP (6), length 2628)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x1e7c (incorrect -> 0xae92), seq 9:2585, ack 17, win 183, options [nop,nop,TS val 194889013 ecr 220957714], length 2576: OpenFlow
+ version 1.0, type FEATURES_REPLY, length 2576, xid 0x00000002
+ dpid 0x0000089e0162d5f4, n_buffers 256, n_tables 1
+ capabilities 0x00000087 (FLOW_STATS, TABLE_STATS, PORT_STATS, ARP_MATCH_IP)
+ actions 0x0000003f (OUTPUT, SET_VLAN_VID, SET_VLAN_PCP, STRIP_VLAN, SET_DL_SRC, SET_DL_DST)
+ port_no 42, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/42'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 33, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/33'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 36, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/36'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 31, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/31'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 48, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/48'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 40, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/40'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 1, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/1'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 28, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/28'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 20, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/20'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 10, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/10'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 22, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/22'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 29, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/29'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 44, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/44'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 41, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/41'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 21, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/21'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 16, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/16'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 45, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/45'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 49, hw_addr 08:9e:01:62:d5:f4, name 'te-1/1/49'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x00000020 (1GB_FD)
+ supported 0x00000e60 (1GB_FD, 10GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 38, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/38'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 17, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/17'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 27, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/27'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 51, hw_addr 08:9e:01:62:d5:f4, name 'te-1/1/51'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x00000020 (1GB_FD)
+ supported 0x00000e60 (1GB_FD, 10GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 46, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/46'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 6, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/6'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 50, hw_addr 08:9e:01:62:d5:f4, name 'te-1/1/50'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x00000020 (1GB_FD)
+ supported 0x00000e60 (1GB_FD, 10GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 43, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/43'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 35, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/35'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 19, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/19'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 47, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/47'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 23, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/23'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 25, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/25'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 37, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/37'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 7, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/7'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 26, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/26'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 32, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/32'
+ config 0x00000020 (NO_FWD)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 4, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/4'
+ config 0x00000000
+ state 0x00000000 (STP_LISTEN)
+ curr 0x00000020 (1GB_FD)
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ port_no 3, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/3'
+ config 0x00000000
+ state 0x00000000 (STP_LISTEN)
+ curr 0x00000020 (1GB_FD)
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ port_no 18, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/18'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 39, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/39'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 8, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/8'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 2, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/2'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 14, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/14'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 5, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/5'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 30, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/30'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 11, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/11'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 15, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/15'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 52, hw_addr 08:9e:01:62:d5:f4, name 'te-1/1/52'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x00000020 (1GB_FD)
+ supported 0x00000e60 (1GB_FD, 10GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 34, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/34'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 13, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/13'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 12, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/12'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 24, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/24'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no 9, hw_addr 08:9e:01:62:d5:f4, name 'ge-1/1/9'
+ config 0x00000000
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x0000042f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, PAUSE)
+ supported 0x00000e2f (10MB_HD, 10MB_FD, 100MB_HD, 100MB_FD, 1GB_FD, AUTONEG, PAUSE, PAUSE_ASYM)
+ peer 0x00000000
+ port_no LOCAL, hw_addr 08:9e:01:62:d5:f4, name 'br0'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000082 (10MB_FD, COPPER)
+ advertised 0x00000000
+ supported 0x00000000
+ peer 0x00000000
+ 11 09:45:19.743529 IP (tos 0x0, ttl 64, id 781, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x9a07), seq 17, ack 2585, win 154, options [nop,nop,TS val 220958521 ecr 194889013], length 0
+ 12 09:45:19.747942 IP (tos 0x0, ttl 64, id 782, offset 0, flags [DF], proto TCP (6), length 136)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [P.], cksum 0x14c0 (incorrect -> 0x96f3), seq 17:101, ack 2585, win 154, options [nop,nop,TS val 220958525 ecr 194889013], length 84: OpenFlow
+ version 1.0, type SET_CONFIG, length 12, xid 0x00000003
+ flags FRAG_NORMAL, miss_send_len 65535
+ version 1.0, type FLOW_MOD, length 72, xid 0x00000004
+ cookie 0x0000000000000000, command DELETE, out_port NONE, flags 0x0000
+ 13 09:45:19.748215 IP (tos 0x0, ttl 64, id 55502, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [.], cksum 0x9991 (correct), seq 2585, ack 101, win 183, options [nop,nop,TS val 194889014 ecr 220958525], length 0
+ 14 09:45:19.754483 IP (tos 0x0, ttl 64, id 783, offset 0, flags [DF], proto TCP (6), length 1500)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x1a14 (incorrect -> 0xcf68), seq 101:1549, ack 2585, win 154, options [nop,nop,TS val 220958532 ecr 194889014], length 1448: OpenFlow
+ version 1.0, type GET_CONFIG_REQUEST, length 8, xid 0x00000005
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000006
+ match in_port 4
+ cookie 0x0000000000000001, command ADD, priority 54321, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000007
+ match in_port 4
+ cookie 0x0000000000000002, command ADD, priority 54320, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port LOCAL
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000008
+ match in_port 4
+ cookie 0x0000000000000003, command ADD, priority 54319, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port CONTROLLER, max_len 65535
+ version 1.0, type FLOW_MOD, length 88, xid 0x00000009
+ match in_port 4
+ cookie 0x0000000000000004, command ADD, priority 54318, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_VLAN_VID, len 8, vlan_vid 2
+ action type SET_TP_SRC, len 8, tp_port 23
+ version 1.0, type FLOW_MOD, length 80, xid 0x0000000a
+ match in_port 4
+ cookie 0x0000000000000005, command ADD, priority 54317, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_VLAN_PCP, len 8, vlan_pcp 5
+ version 1.0, type FLOW_MOD, length 80, xid 0x0000000b
+ match in_port 4
+ cookie 0x0000000000000006, command ADD, priority 54316, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type STRIP_VLAN, len 8
+ version 1.0, type FLOW_MOD, length 96, xid 0x0000000c
+ match in_port 4
+ cookie 0x0000000000000007, command ADD, priority 54315, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 11:22:33:44:55:66
+ action type SET_NW_SRC, len 8, nw_addr 192.168.72.143
+ version 1.0, type FLOW_MOD, length 96, xid 0x0000000d
+ match in_port 4
+ cookie 0x0000000000000008, command ADD, priority 54314, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_DST, len 16, dl_addr 77:88:99:aa:bb:cc
+ action type SET_NW_DST, len 8, nw_addr 192.168.98.55
+ version 1.0, type FLOW_MOD, length 88, xid 0x0000000e
+ match in_port 4
+ cookie 0x0000000000000009, command ADD, priority 54313, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_NW_TOS, len 8, nw_tos 0x2c
+ action type SET_TP_DST, len 8, tp_port 80
+ version 1.0, type FLOW_MOD, length 88, xid 0x0000000f
+ match in_port 4
+ cookie 0x000000000000000a, command ADD, priority 54312, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type ENQUEUE, len 16, port 1, queue_id 2
+ version 1.0, type FLOW_MOD, length 144, xid 0x00000010
+ match in_port 4
+ cookie 0x000000000000000b, command ADD, priority 54311, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type VENDOR, len 72, vendor 0x00001234 (unknown)
+ data (64 octets)
+ 0x0000: 4469 6420 796f 7520 6b6e 6f77 2076 656e Did.you.know.ven
+ 0x0010: 646f 7220 6163 7469 6f6e 2064 6174 6120 dor.action.data.
+ 0x0020: 6c65 6e67 7468 206d 7573 7420 6265 2061 length.must.be.a
+ 0x0030: 206d 756c 7469 706c 6520 6f66 2020 383f .multiple.of..8?
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000011
+ match in_port 1
+ match dl_src 00:00:00:00:00:01
+ cookie 0x000000000000000c, command ADD, priority 43210, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 5
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000012
+ match dl_vlan 100
+ match dl_vlan_pcp 4
+ match dl_type 0x8100
+ cookie 0x000000000000000d, command ADD, priority 43209, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 5
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000013
+ match dl_type 0x0800
+ match nw_src 10.11.12.0/24
+ match nw_dst 10.13.14.0/24
+ cookie 0x000000000000000e, command ADD, priority 43208, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 5
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000014
+ match dl_type 0x0800
+ match nw_proto 17
+ match tp_src 68
+ match tp_dst 67
+ cookie 0x000000000000000f, command ADD, priority 43207, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 5
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000015
+ match dl_type 0x0800
+ match nw_proto 1
+ match icmp_type 8
+ cookie 0x0000000000000010, command ADD, priority 43206, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 5
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000016
+ match dl_type 0x0800
+ match nw_proto 1 [|openflow]
+ 15 09:45:19.754510 IP (tos 0x0, ttl 64, id 784, offset 0, flags [DF], proto TCP (6), length 740)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [P.], cksum 0x171c (incorrect -> 0xdfee), seq 1549:2237, ack 2585, win 154, options [nop,nop,TS val 220958532 ecr 194889014], length 688: OpenFlow
+ version unknown (0x00), type unknown (0x00), length 0 (too short!), xid 0x0003000d (invalid)
+ 16 09:45:19.755256 IP (tos 0x0, ttl 64, id 55503, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [.], cksum 0x9386 (correct), seq 2585, ack 1549, win 273, options [nop,nop,TS val 194889016 ecr 220958532], length 0
+ 17 09:45:19.755309 IP (tos 0x0, ttl 64, id 55504, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [.], cksum 0x907b (correct), seq 2585, ack 2237, win 364, options [nop,nop,TS val 194889016 ecr 220958532], length 0
+ 18 09:45:19.932281 IP (tos 0x0, ttl 64, id 55505, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0xba5c (correct), seq 2585:2673, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958532], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match dl_type 0x0800
+ match nw_proto 17
+ match tp_src 68
+ match tp_dst 67
+ cookie 0x000000000000000f, priority 43207, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 19 09:45:19.932323 IP (tos 0x0, ttl 64, id 55506, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x3c6a (correct), seq 2673:2761, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958532], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match dl_vlan 100
+ match dl_vlan_pcp 4
+ match dl_type 0x8100
+ cookie 0x000000000000000d, priority 43209, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 20 09:45:19.932427 IP (tos 0x0, ttl 64, id 785, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x8fbf), seq 2237, ack 2761, win 154, options [nop,nop,TS val 220958710 ecr 194889060], length 0
+ 21 09:45:19.932544 IP (tos 0x0, ttl 64, id 55507, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0xc154 (correct), seq 2761:2849, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958532], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ cookie 0x0000000000000014, priority 43202, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 22 09:45:19.933034 IP (tos 0x0, ttl 64, id 55508, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0xc04a (correct), seq 2849:2937, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958710], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ cookie 0x0000000000000015, priority 43201, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 23 09:45:19.933064 IP (tos 0x0, ttl 64, id 55509, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0xa1f0 (correct), seq 2937:3025, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958710], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match dl_type 0x0800
+ match nw_src 10.11.12.0/24
+ match nw_dst 10.13.14.0/24
+ cookie 0x000000000000000e, priority 43208, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 24 09:45:19.933154 IP (tos 0x0, ttl 64, id 786, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x8eb7), seq 2237, ack 3025, win 154, options [nop,nop,TS val 220958710 ecr 194889060], length 0
+ 25 09:45:19.933315 IP (tos 0x0, ttl 64, id 55510, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0xbf9d (correct), seq 3025:3113, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958710], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match in_port 1
+ match dl_src 00:00:00:00:00:01
+ cookie 0x000000000000000c, priority 43210, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 26 09:45:19.933587 IP (tos 0x0, ttl 64, id 55511, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x54e2 (correct), seq 3113:3201, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958710], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match dl_src aa:00:00:00:00:11
+ match dl_dst bb:00:00:00:00:22
+ cookie 0x0000000000000013, priority 43203, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 13, byte_count 1323
+ 27 09:45:19.933611 IP (tos 0x0, ttl 64, id 55512, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x6bfc (correct), seq 3201:3289, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958710], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match in_port 4
+ cookie 0x0000000000000001, priority 54321, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 100, byte_count 10027
+ 28 09:45:19.933637 IP (tos 0x0, ttl 64, id 787, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x8dae), seq 2237, ack 3289, win 154, options [nop,nop,TS val 220958711 ecr 194889060], length 0
+ 29 09:45:19.933950 IP (tos 0x0, ttl 64, id 55513, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x9333 (correct), seq 3289:3377, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958710], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match in_port 4
+ cookie 0x0000000000000002, priority 54320, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 30 09:45:19.934208 IP (tos 0x0, ttl 64, id 55514, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x92da (correct), seq 3377:3465, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958711], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match in_port 4
+ cookie 0x0000000000000003, priority 54319, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 31 09:45:19.934243 IP (tos 0x0, ttl 64, id 55515, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x9282 (correct), seq 3465:3553, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958711], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match in_port 4
+ cookie 0x0000000000000004, priority 54318, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 32 09:45:19.934360 IP (tos 0x0, ttl 64, id 788, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x8ca5), seq 2237, ack 3553, win 154, options [nop,nop,TS val 220958712 ecr 194889060], length 0
+ 33 09:45:19.934625 IP (tos 0x0, ttl 64, id 55516, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x922a (correct), seq 3553:3641, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958711], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match in_port 4
+ cookie 0x0000000000000005, priority 54317, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 34 09:45:19.934655 IP (tos 0x0, ttl 64, id 55517, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x91d1 (correct), seq 3641:3729, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958712], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match in_port 4
+ cookie 0x0000000000000006, priority 54316, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 35 09:45:19.934704 IP (tos 0x0, ttl 64, id 789, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x8bf5), seq 2237, ack 3729, win 154, options [nop,nop,TS val 220958712 ecr 194889060], length 0
+ 36 09:45:19.934943 IP (tos 0x0, ttl 64, id 55518, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x9179 (correct), seq 3729:3817, ack 2237, win 364, options [nop,nop,TS val 194889060 ecr 220958712], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match in_port 4
+ cookie 0x0000000000000007, priority 54315, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 37 09:45:19.935367 IP (tos 0x0, ttl 64, id 55519, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x9120 (correct), seq 3817:3905, ack 2237, win 364, options [nop,nop,TS val 194889061 ecr 220958712], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match in_port 4
+ cookie 0x0000000000000008, priority 54314, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 38 09:45:19.935398 IP (tos 0x0, ttl 64, id 55520, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x90c8 (correct), seq 3905:3993, ack 2237, win 364, options [nop,nop,TS val 194889061 ecr 220958712], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match in_port 4
+ cookie 0x0000000000000009, priority 54313, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 39 09:45:19.935431 IP (tos 0x0, ttl 64, id 790, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x8aec), seq 2237, ack 3993, win 154, options [nop,nop,TS val 220958713 ecr 194889060], length 0
+ 40 09:45:19.935650 IP (tos 0x0, ttl 64, id 55521, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x9070 (correct), seq 3993:4081, ack 2237, win 364, options [nop,nop,TS val 194889061 ecr 220958712], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000000
+ match in_port 4
+ cookie 0x000000000000000a, priority 54312, reason DELETE, duration_sec 122, duration_nsec 0, packet_count 0, byte_count 0
+ 41 09:45:19.935998 IP (tos 0x0, ttl 64, id 55522, offset 0, flags [DF], proto TCP (6), length 64)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x8894 (correct), seq 4081:4093, ack 2237, win 364, options [nop,nop,TS val 194889061 ecr 220958713], length 12: OpenFlow
+ version 1.0, type GET_CONFIG_REPLY, length 12, xid 0x00000005
+ flags FRAG_NORMAL, miss_send_len 65535
+ 42 09:45:19.936077 IP (tos 0x0, ttl 64, id 791, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x8a87), seq 2237, ack 4093, win 154, options [nop,nop,TS val 220958713 ecr 194889061], length 0
+ 43 09:45:19.938895 IP (tos 0x0, ttl 64, id 55523, offset 0, flags [DF], proto TCP (6), length 128)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x90e5 (correct), seq 4093:4169, ack 2237, win 364, options [nop,nop,TS val 194889061 ecr 220958713], length 76: OpenFlow
+ version 1.0, type ERROR, length 76, xid 0x00000010
+ type BAD_ACTION, code BAD_VENDOR
+ data (64 octets)
+ 0x0000: 010e 0090 0000 0010 0038 20fe 0004 0000 .........8......
+ 0x0010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+ 0x0020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
+ 0x0030: 0000 0000 0000 000b 0000 0000 0000 d427 ...............'
+ 44 09:45:19.943653 IP (tos 0x0, ttl 64, id 55524, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x8821 (correct), seq 4169:4177, ack 2237, win 364, options [nop,nop,TS val 194889063 ecr 220958713], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x0000001b
+ 45 09:45:19.943695 IP (tos 0x0, ttl 64, id 55525, offset 0, flags [DF], proto TCP (6), length 1120)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0xb778 (correct), seq 4177:5245, ack 2237, win 364, options [nop,nop,TS val 194889063 ecr 220958713], length 1068: OpenFlow
+ version 1.0, type STATS_REPLY, length 1068, xid 0x0000001c
+ type DESC, flags 0x0000
+ mfr_desc 'Nicira Networks, Inc.'
+ hw_desc 'Open vSwitch'
+ sw_desc '1.2.2'
+ serial_num 'None'
+ dp_desc 'None'
+ 46 09:45:19.943803 IP (tos 0x0, ttl 64, id 792, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x85e9), seq 2237, ack 5245, win 176, options [nop,nop,TS val 220958721 ecr 194889061], length 0
+ 47 09:45:19.943914 IP (tos 0x0, ttl 64, id 55526, offset 0, flags [DF], proto TCP (6), length 1752)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x1b10 (incorrect -> 0x7df4), seq 5245:6945, ack 2237, win 364, options [nop,nop,TS val 194889063 ecr 220958713], length 1700: OpenFlow
+ version 1.0, type STATS_REPLY, length 1700, xid 0x0000001d
+ type FLOW, flags 0x0000
+ length 96, table_id 0
+ match dl_type 0x0800
+ match nw_proto 17
+ match tp_src 68
+ match tp_dst 67
+ duration_sec 0, duration_nsec 0, priority 43207, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000f, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 5
+ length 96, table_id 0
+ match dl_vlan 100
+ match dl_vlan_pcp 4
+ match dl_type 0x8100
+ duration_sec 0, duration_nsec 0, priority 43209, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000d, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 5
+ length 96, table_id 0
+ duration_sec 0, duration_nsec 0, priority 43202, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000014, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 5
+ length 96, table_id 0
+ duration_sec 0, duration_nsec 0, priority 43201, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000015, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 5
+ length 96, table_id 0
+ match dl_type 0x0800
+ match nw_src 10.11.12.0/24
+ match nw_dst 10.13.14.0/24
+ duration_sec 0, duration_nsec 0, priority 43208, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000e, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 5
+ length 96, table_id 0
+ match in_port 1
+ match dl_src 00:00:00:00:00:01
+ duration_sec 0, duration_nsec 0, priority 43210, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000c, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 5
+ length 96, table_id 0
+ match dl_src aa:00:00:00:00:11
+ match dl_dst bb:00:00:00:00:22
+ duration_sec 0, duration_nsec 0, priority 43203, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000013, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 5
+ length 96, table_id 0
+ match in_port 4
+ duration_sec 0, duration_nsec 0, priority 54321, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000001, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 0
+ match in_port 4
+ duration_sec 0, duration_nsec 0, priority 54320, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000002, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port LOCAL
+ length 96, table_id 0
+ match in_port 4
+ duration_sec 0, duration_nsec 0, priority 54319, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000003, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port CONTROLLER, max_len 65535
+ length 104, table_id 0
+ match in_port 4
+ duration_sec 0, duration_nsec 0, priority 54318, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000004, packet_count 0, byte_count 0
+ action type SET_VLAN_VID, len 8, vlan_vid 2
+ action type SET_TP_SRC, len 8, tp_port 23
+ length 96, table_id 0
+ match in_port 4
+ duration_sec 0, duration_nsec 0, priority 54317, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000005, packet_count 0, byte_count 0
+ action type SET_VLAN_PCP, len 8, vlan_pcp 5
+ length 96, table_id 0
+ match in_port 4
+ duration_sec 0, duration_nsec 0, priority 54316, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000006, packet_count 0, byte_count 0
+ action type STRIP_VLAN, len 8
+ length 112, table_id 0
+ match in_port 4
+ duration_sec 0, duration_nsec 0, priority 54315, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000007, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 11:22:33:44:55:66
+ action type SET_NW_SRC, len 8, nw_addr 192.168.72.143
+ length 112, table_id 0
+ match in_port 4
+ duration_sec 0, duration_nsec 0, priority 54314, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000008, packet_count 0, byte_count 0
+ action type SET_DL_DST, len 16, dl_addr 77:88:99:aa:bb:cc
+ action type SET_NW_DST, len 8, nw_addr 192.168.98.55
+ length 104, table_id 0
+ match in_port 4
+ duration_sec 0, duration_nsec 0, priority 54313, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000009, packet_count 0, byte_count 0
+ action type SET_NW_TOS, len 8, nw_tos 0x2c
+ action type SET_TP_DST, len 8, tp_port 80
+ length 104, table_id 0
+ match in_port 4
+ duration_sec 0, duration_nsec 0, priority 54312, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000a, packet_count 0, byte_count 0
+ action type ENQUEUE, len 16, port 1, queue_id 2
+ 48 09:45:19.943944 IP (tos 0x0, ttl 64, id 793, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x7f28), seq 2237, ack 6945, win 203, options [nop,nop,TS val 220958721 ecr 194889063], length 0
+ 49 09:45:19.943956 IP (tos 0x0, ttl 64, id 55528, offset 0, flags [DF], proto TCP (6), length 88)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x7cfd (correct), seq 6945:6981, ack 2237, win 364, options [nop,nop,TS val 194889063 ecr 220958713], length 36: OpenFlow
+ version 1.0, type STATS_REPLY, length 36, xid 0x0000001e
+ type AGGREGATE, flags 0x0000
+ packet_count 0, byte_count 0, flow_count 17
+ 50 09:45:19.943968 IP (tos 0x0, ttl 64, id 55529, offset 0, flags [DF], proto TCP (6), length 128)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0xeac4 (correct), seq 6981:7057, ack 2237, win 364, options [nop,nop,TS val 194889063 ecr 220958713], length 76: OpenFlow
+ version 1.0, type STATS_REPLY, length 76, xid 0x0000001f
+ type TABLE, flags 0x0000
+ table_id 0, name 'classifier'
+ wildcards 0x003fffff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 1000000, active_count 26, lookup_count 1158498983736653433, matched_count 1158498983736653433
+ 51 09:45:19.944059 IP (tos 0x0, ttl 64, id 794, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x7eb8), seq 2237, ack 7057, win 203, options [nop,nop,TS val 220958721 ecr 194889063], length 0
+ 52 09:45:19.944869 IP (tos 0x0, ttl 64, id 55530, offset 0, flags [DF], proto TCP (6), length 2948)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [.], cksum 0x1fbc (incorrect -> 0x5886), seq 7057:9953, ack 2237, win 364, options [nop,nop,TS val 194889063 ecr 220958721], length 2896: OpenFlow
+ version 1.0, type STATS_REPLY, length 5524, xid 0x00000020
+ type PORT, flags 0x0000
+ port_no 42, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 33, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 36, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 31, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 48, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 40, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 1, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 28, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 20, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 10, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 22, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 29, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 44, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 41, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 21, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 16, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 45, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 49, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 38, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 17, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 27, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 51, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 46, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 6, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 50, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 43, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 35, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0, rx_frame_err 0, rx_over_err 0, rx_crc_err 0, collisions 0
+ port_no 19, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 0, tx_errors 0 [|openflow]
+ 53 09:45:19.944906 IP (tos 0x0, ttl 64, id 795, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x733a), seq 2237, ack 9953, win 248, options [nop,nop,TS val 220958722 ecr 194889063], length 0
+ 54 09:45:19.945085 IP (tos 0x0, ttl 64, id 55532, offset 0, flags [DF], proto TCP (6), length 2680)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x1eb0 (incorrect -> 0x561b), seq 9953:12581, ack 2237, win 364, options [nop,nop,TS val 194889063 ecr 220958721], length 2628: OpenFlow
+ version unknown (0x00), type unknown (0x00), length 0 (too short!), xid 0x00000000 (invalid)
+ 55 09:45:19.945117 IP (tos 0x0, ttl 64, id 796, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x68cd), seq 2237, ack 12581, win 289, options [nop,nop,TS val 220958722 ecr 194889063], length 0
+ 56 09:45:19.945132 IP (tos 0x0, ttl 64, id 55534, offset 0, flags [DF], proto TCP (6), length 64)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0x672c (correct), seq 12581:12593, ack 2237, win 364, options [nop,nop,TS val 194889063 ecr 220958721], length 12: OpenFlow
+ version 1.0, type STATS_REPLY, length 12, xid 0x00000021
+ type QUEUE, flags 0x0000
+ 57 09:45:19.945141 IP (tos 0x0, ttl 64, id 55535, offset 0, flags [DF], proto TCP (6), length 128)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [P.], cksum 0xda41 (correct), seq 12593:12669, ack 2237, win 364, options [nop,nop,TS val 194889063 ecr 220958721], length 76: OpenFlow
+ version 1.0, type ERROR, length 76, xid 0x00000022
+ type BAD_REQUEST, code BAD_VENDOR
+ data (64 octets)
+ 0x0000: 0110 0090 0000 0022 ffff 0000 0000 1234 .......".......4
+ 0x0010: afaf afaf afaf afaf afaf afaf afaf afaf ................
+ 0x0020: afaf afaf afaf afaf afaf afaf afaf afaf ................
+ 0x0030: afaf afaf afaf afaf afaf afaf afaf afaf ................
+ 58 09:45:19.945224 IP (tos 0x0, ttl 64, id 797, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x146c (incorrect -> 0x6875), seq 2237, ack 12669, win 289, options [nop,nop,TS val 220958722 ecr 194889063], length 0
+ 59 09:45:23.545389 IP (tos 0x0, ttl 64, id 798, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [F.], cksum 0x146c (incorrect -> 0x5a63), seq 2237, ack 12669, win 289, options [nop,nop,TS val 220962323 ecr 194889063], length 0
+ 60 09:45:23.583183 IP (tos 0x0, ttl 64, id 55536, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [.], cksum 0x568a (correct), seq 12669, ack 2238, win 364, options [nop,nop,TS val 194889973 ecr 220962323], length 0
+ 61 09:45:23.731365 IP (tos 0x0, ttl 64, id 55537, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.50.35256 > 10.0.0.20.6633: Flags [F.], cksum 0x5664 (correct), seq 12669, ack 2238, win 364, options [nop,nop,TS val 194890010 ecr 220962323], length 0
+ 62 09:45:23.731432 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.50.35256: Flags [.], cksum 0x55f5 (correct), seq 2238, ack 12670, win 289, options [nop,nop,TS val 220962509 ecr 194890010], length 0
diff --git a/tests/of10_p3295.pcap b/tests/of10_p3295.pcap
new file mode 100644
index 0000000..85f1b27
--- /dev/null
+++ b/tests/of10_p3295.pcap
Binary files differ
diff --git a/tests/of10_pf5240-vv.out b/tests/of10_pf5240-vv.out
new file mode 100644
index 0000000..91a1b57
--- /dev/null
+++ b/tests/of10_pf5240-vv.out
@@ -0,0 +1,428 @@
+ 1 12:21:09.940811 IP (tos 0xa0, ttl 64, id 10670, offset 0, flags [DF], proto TCP (6), length 60)
+ 172.16.1.101.62224 > 172.16.1.51.6633: Flags [S], cksum 0x6dd0 (correct), seq 2446711727, win 2048, options [mss 1460,nop,wscale 0,nop,nop,TS val 0 ecr 0], length 0
+ 2 12:21:09.940894 IP (tos 0xa0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
+ 172.16.1.51.6633 > 172.16.1.101.62224: Flags [R.], cksum 0xda97 (correct), seq 0, ack 2446711728, win 0, length 0
+ 3 12:21:13.928916 IP (tos 0xa0, ttl 64, id 10673, offset 0, flags [DF], proto TCP (6), length 60)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [S], cksum 0xa14c (correct), seq 2619186670, win 2048, options [mss 1460,nop,wscale 0,nop,nop,TS val 0 ecr 0], length 0
+ 4 12:21:13.929013 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [S.], cksum 0x5ae7 (incorrect -> 0x3c7c), seq 3998019188, ack 2619186671, win 14480, options [mss 1460,nop,nop,TS val 2256457959 ecr 0,nop,wscale 7], length 0
+ 5 12:21:13.930368 IP (tos 0xa0, ttl 64, id 10674, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [.], cksum 0x956f (correct), seq 1, ack 1, win 2920, options [nop,nop,TS val 0 ecr 2256457959], length 0
+ 6 12:21:13.930613 IP (tos 0xa0, ttl 64, id 10675, offset 0, flags [DF], proto TCP (6), length 60)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0xb6f9 (correct), seq 1:9, ack 1, win 2920, options [nop,nop,TS val 0 ecr 2256457959], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0x000cdd51
+ 7 12:21:13.930635 IP (tos 0x0, ttl 64, id 16028, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [.], cksum 0x5adf (incorrect -> 0xa05b), seq 1, ack 9, win 114, options [nop,nop,TS val 2256457961 ecr 0], length 0
+ 8 12:21:13.955911 IP (tos 0x0, ttl 64, id 16029, offset 0, flags [DF], proto TCP (6), length 60)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [P.], cksum 0x5ae7 (incorrect -> 0x9f29), seq 1:9, ack 9, win 114, options [nop,nop,TS val 2256457986 ecr 0], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0x00000001
+ 9 12:21:13.963832 IP (tos 0x0, ttl 64, id 16030, offset 0, flags [DF], proto TCP (6), length 60)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [P.], cksum 0x5ae7 (incorrect -> 0x9f13), seq 9:17, ack 9, win 114, options [nop,nop,TS val 2256457994 ecr 0], length 8: OpenFlow
+ version 1.0, type FEATURES_REQUEST, length 8, xid 0x00000002
+ 10 12:21:13.964871 IP (tos 0xa0, ttl 64, id 10676, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [.], cksum 0x9544 (correct), seq 9, ack 17, win 2912, options [nop,nop,TS val 0 ecr 2256457986], length 0
+ 11 12:21:13.972093 IP (tos 0xa0, ttl 64, id 10679, offset 0, flags [DF], proto TCP (6), length 468)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0xcacf (correct), seq 9:425, ack 17, win 2920, options [nop,nop,TS val 0 ecr 2256457986], length 416: OpenFlow
+ version 1.0, type FEATURES_REPLY, length 416, xid 0x00000002
+ dpid 0x000100255cab0c07, n_buffers 544, n_tables 11
+ capabilities 0x00000087 (FLOW_STATS, TABLE_STATS, PORT_STATS, ARP_MATCH_IP)
+ actions 0x00000fff (OUTPUT, SET_VLAN_VID, SET_VLAN_PCP, STRIP_VLAN, SET_DL_SRC, SET_DL_DST, SET_NW_SRC, SET_NW_DST, SET_NW_TOS, SET_TP_SRC, SET_TP_DST, ENQUEUE)
+ port_no 1, hw_addr 00:25:5c:ab:0c:87, name 'GBE0/1'
+ config 0x00000002 (NO_STP)
+ state 0x00000200 (STP_FORWARD)
+ curr 0x000002a0 (1GB_FD, COPPER, AUTONEG)
+ advertised 0x00000000
+ supported 0x00000000
+ peer 0x00000000
+ port_no 2, hw_addr 00:25:5c:ab:0c:47, name 'GBE0/2'
+ config 0x00000002 (NO_STP)
+ state 0x00000200 (STP_FORWARD)
+ curr 0x000002a0 (1GB_FD, COPPER, AUTONEG)
+ advertised 0x00000000
+ supported 0x00000000
+ peer 0x00000000
+ port_no 3, hw_addr 00:25:5c:ab:0c:c7, name 'GBE0/3'
+ config 0x00000002 (NO_STP)
+ state 0x00000200 (STP_FORWARD)
+ curr 0x000002a0 (1GB_FD, COPPER, AUTONEG)
+ advertised 0x00000000
+ supported 0x00000000
+ peer 0x00000000
+ port_no 4, hw_addr 00:25:5c:ab:0c:27, name 'GBE0/4'
+ config 0x00000002 (NO_STP)
+ state 0x00000201 (STP_FORWARD, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x00000000
+ supported 0x00000000
+ peer 0x00000000
+ port_no 5, hw_addr 00:25:5c:ab:0c:a7, name 'GBE0/5'
+ config 0x00000002 (NO_STP)
+ state 0x00000201 (STP_FORWARD, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x00000000
+ supported 0x00000000
+ peer 0x00000000
+ port_no 6, hw_addr 00:25:5c:ab:0c:67, name 'GBE0/6'
+ config 0x00000002 (NO_STP)
+ state 0x00000201 (STP_FORWARD, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x00000000
+ supported 0x00000000
+ peer 0x00000000
+ port_no 7, hw_addr 00:25:5c:ab:0c:e7, name 'GBE0/7'
+ config 0x00000002 (NO_STP)
+ state 0x00000201 (STP_FORWARD, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x00000000
+ supported 0x00000000
+ peer 0x00000000
+ port_no 8, hw_addr 00:25:5c:ab:0c:17, name 'GBE0/8'
+ config 0x00000002 (NO_STP)
+ state 0x00000201 (STP_FORWARD, LINK_DOWN)
+ curr 0x00000000
+ advertised 0x00000000
+ supported 0x00000000
+ peer 0x00000000
+ 12 12:21:13.979465 IP (tos 0x0, ttl 64, id 16031, offset 0, flags [DF], proto TCP (6), length 136)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [P.], cksum 0x5b33 (incorrect -> 0x9b62), seq 17:101, ack 425, win 122, options [nop,nop,TS val 2256458010 ecr 0], length 84: OpenFlow
+ version 1.0, type SET_CONFIG, length 12, xid 0x00000003
+ flags FRAG_NORMAL, miss_send_len 65535
+ version 1.0, type FLOW_MOD, length 72, xid 0x00000004
+ cookie 0x0000000000000000, command DELETE, out_port NONE, flags 0x0000
+ 13 12:21:13.983645 IP (tos 0x0, ttl 64, id 16032, offset 0, flags [DF], proto TCP (6), length 60)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [P.], cksum 0x5ae7 (incorrect -> 0x9ceb), seq 101:109, ack 425, win 122, options [nop,nop,TS val 2256458014 ecr 0], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000005
+ 14 12:21:13.984861 IP (tos 0xa0, ttl 64, id 10680, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [.], cksum 0x932f (correct), seq 425, ack 109, win 2912, options [nop,nop,TS val 1 ecr 2256458010], length 0
+ 15 12:21:13.985088 IP (tos 0xa0, ttl 64, id 10681, offset 0, flags [DF], proto TCP (6), length 60)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0x91f7 (correct), seq 425:433, ack 109, win 2920, options [nop,nop,TS val 1 ecr 2256458010], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000005
+ 16 12:21:13.986563 IP (tos 0x0, ttl 64, id 16033, offset 0, flags [DF], proto TCP (6), length 72)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [P.], cksum 0x5af3 (incorrect -> 0x9ba7), seq 109:129, ack 433, win 122, options [nop,nop,TS val 2256458017 ecr 1], length 20: OpenFlow
+ version 1.0, type STATS_REQUEST, length 12, xid 0x00000006
+ type DESC, flags 0x0000
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000007
+ 17 12:21:13.988086 IP (tos 0xa0, ttl 64, id 10682, offset 0, flags [DF], proto TCP (6), length 1120)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0x7324 (correct), seq 433:1501, ack 129, win 2912, options [nop,nop,TS val 1 ecr 2256458017], length 1068: OpenFlow
+ version 1.0, type STATS_REPLY, length 1068, xid 0x00000006
+ type DESC, flags 0x0000
+ mfr_desc 'NEC Corporation'
+ hw_desc 'PF5240F-48T4XW-AX(L1L2)'
+ sw_desc 'OS-F3PA Ver. V4.0.1.0'
+ serial_num 'Y1252CFA0000S4068C8N004'
+ dp_desc 'PFS1'
+ 18 12:21:14.028020 IP (tos 0x0, ttl 64, id 16034, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [.], cksum 0x5adf (incorrect -> 0x998b), seq 129, ack 1501, win 139, options [nop,nop,TS val 2256458059 ecr 1], length 0
+ 19 12:21:14.029070 IP (tos 0xa0, ttl 64, id 10686, offset 0, flags [DF], proto TCP (6), length 60)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0x8da6 (correct), seq 1501:1509, ack 129, win 2920, options [nop,nop,TS val 1 ecr 2256458017], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000007
+ 20 12:21:14.029095 IP (tos 0x0, ttl 64, id 16035, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [.], cksum 0x5adf (incorrect -> 0x9982), seq 129, ack 1509, win 139, options [nop,nop,TS val 2256458060 ecr 1], length 0
+ 21 12:21:14.029852 IP (tos 0x0, ttl 64, id 16036, offset 0, flags [DF], proto TCP (6), length 84)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [P.], cksum 0x5aff (incorrect -> 0x95e2), seq 129:161, ack 1509, win 139, options [nop,nop,TS val 2256458060 ecr 1], length 32: OpenFlow
+ version 1.0, type QUEUE_GET_CONFIG_REQUEST, length 12, xid 0x00000008
+ port 1
+ version 1.0, type QUEUE_GET_CONFIG_REQUEST, length 12, xid 0x00000009
+ port 2
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x0000000a
+ 22 12:21:14.030813 IP (tos 0xa0, ttl 64, id 10687, offset 0, flags [DF], proto TCP (6), length 196)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0x8b77 (correct), seq 1509:1653, ack 161, win 2900, options [nop,nop,TS val 1 ecr 2256458060], length 144: OpenFlow
+ version 1.0, type QUEUE_GET_CONFIG_REPLY, length 144, xid 0x00000008
+ port 1
+ queue_id 0, len 16
+ property NONE, len 8
+ queue_id 1, len 16
+ property NONE, len 8
+ queue_id 2, len 16
+ property NONE, len 8
+ queue_id 3, len 16
+ property NONE, len 8
+ queue_id 4, len 16
+ property NONE, len 8
+ queue_id 5, len 16
+ property NONE, len 8
+ queue_id 6, len 16
+ property NONE, len 8
+ queue_id 7, len 16
+ property NONE, len 8
+ 23 12:21:14.070016 IP (tos 0x0, ttl 64, id 16037, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [.], cksum 0x5adf (incorrect -> 0x9899), seq 161, ack 1653, win 155, options [nop,nop,TS val 2256458101 ecr 1], length 0
+ 24 12:21:14.071040 IP (tos 0xa0, ttl 64, id 10688, offset 0, flags [DF], proto TCP (6), length 204)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0x89a4 (correct), seq 1653:1805, ack 161, win 2920, options [nop,nop,TS val 1 ecr 2256458060], length 152: OpenFlow
+ version 1.0, type QUEUE_GET_CONFIG_REPLY, length 144, xid 0x00000009
+ port 2
+ queue_id 0, len 16
+ property NONE, len 8
+ queue_id 1, len 16
+ property NONE, len 8
+ queue_id 2, len 16
+ property NONE, len 8
+ queue_id 3, len 16
+ property NONE, len 8
+ queue_id 4, len 16
+ property NONE, len 8
+ queue_id 5, len 16
+ property NONE, len 8
+ queue_id 6, len 16
+ property NONE, len 8
+ queue_id 7, len 16
+ property NONE, len 8
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x0000000a
+ 25 12:21:14.071062 IP (tos 0x0, ttl 64, id 16038, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [.], cksum 0x5adf (incorrect -> 0x97ef), seq 161, ack 1805, win 172, options [nop,nop,TS val 2256458102 ecr 1], length 0
+ 26 12:21:14.071697 IP (tos 0x0, ttl 64, id 16039, offset 0, flags [DF], proto TCP (6), length 100)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [P.], cksum 0x5b0f (incorrect -> 0x9424), seq 161:209, ack 1805, win 172, options [nop,nop,TS val 2256458102 ecr 1], length 48: OpenFlow
+ version 1.0, type STATS_REQUEST, length 20, xid 0x0000000b
+ type QUEUE, flags 0x0000
+ port_no 1, queue_id ALL
+ version 1.0, type STATS_REQUEST, length 20, xid 0x0000000c
+ type QUEUE, flags 0x0000
+ port_no 2, queue_id ALL
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x0000000d
+ 27 12:21:14.073035 IP (tos 0xa0, ttl 64, id 10689, offset 0, flags [DF], proto TCP (6), length 96)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0x8b9c (correct), seq 1805:1849, ack 209, win 2892, options [nop,nop,TS val 1 ecr 2256458102], length 44: OpenFlow
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000b
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 1, queue_id 0, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ 28 12:21:14.113015 IP (tos 0x0, ttl 64, id 16040, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [.], cksum 0x5adf (incorrect -> 0x9769), seq 209, ack 1849, win 172, options [nop,nop,TS val 2256458144 ecr 1], length 0
+ 29 12:21:14.114014 IP (tos 0xa0, ttl 64, id 10690, offset 0, flags [DF], proto TCP (6), length 744)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0x72af (correct), seq 1849:2541, ack 209, win 2920, options [nop,nop,TS val 1 ecr 2256458102], length 692: OpenFlow
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000b
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 1, queue_id 1, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000b
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 1, queue_id 2, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000b
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 1, queue_id 3, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000b
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 1, queue_id 4, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000b
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 1, queue_id 5, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000b
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 1, queue_id 6, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000b
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 1, queue_id 7, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 12, xid 0x0000000b
+ type QUEUE, flags 0x0000
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000c
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 2, queue_id 0, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000c
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 2, queue_id 1, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000c
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 2, queue_id 2, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000c
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 2, queue_id 3, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000c
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 2, queue_id 4, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000c
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 2, queue_id 5, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000c
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 2, queue_id 6, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 44, xid 0x0000000c
+ type QUEUE, flags 0x0001 (MORE)
+ port_no 2, queue_id 7, tx_bytes 18446744073709551615, tx_packets 18446744073709551615, tx_errors 18446744073709551615
+ version 1.0, type STATS_REPLY, length 12, xid 0x0000000c
+ type QUEUE, flags 0x0000
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x0000000d
+ 30 12:21:14.114038 IP (tos 0x0, ttl 64, id 16041, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [.], cksum 0x5adf (incorrect -> 0x94a3), seq 209, ack 2541, win 189, options [nop,nop,TS val 2256458145 ecr 1], length 0
+ 31 12:21:14.116167 IP (tos 0x0, ttl 64, id 16042, offset 0, flags [DF], proto TCP (6), length 700)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [P.], cksum 0x5d67 (incorrect -> 0xa5e9), seq 209:857, ack 2541, win 189, options [nop,nop,TS val 2256458147 ecr 1], length 648: OpenFlow
+ version 1.0, type FLOW_MOD, length 80, xid 0x0000000e
+ match in_port 1
+ cookie 0x0000000000000001, command ADD, priority 24100, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 4
+ version 1.0, type FLOW_MOD, length 80, xid 0x0000000f
+ match in_port 2
+ cookie 0x0000000000000002, command ADD, priority 24200, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 4
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000010
+ match in_port 3
+ cookie 0x0000000000000003, command ADD, priority 24300, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 4
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000011
+ match in_port 5
+ cookie 0x0000000000000004, command ADD, priority 20500, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 8
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000012
+ match in_port 6
+ cookie 0x0000000000000005, command ADD, priority 20600, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 8
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000013
+ match in_port 7
+ cookie 0x0000000000000006, command ADD, priority 20700, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 8
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000014
+ match in_port 4
+ cookie 0x0000000000000007, command ADD, priority 25400, buffer_id NONE, flags 0x0005 (SEND_FLOW_REM, EMERG)
+ action type OUTPUT, len 8, port 8
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000015
+ match in_port 8
+ cookie 0x0000000000000008, command ADD, priority 25800, buffer_id NONE, flags 0x0005 (SEND_FLOW_REM, EMERG)
+ action type OUTPUT, len 8, port 4
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000016
+ 32 12:21:14.125259 IP (tos 0xa0, ttl 64, id 10691, offset 0, flags [DF], proto TCP (6), length 60)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0x862d (correct), seq 2541:2549, ack 857, win 2920, options [nop,nop,TS val 1 ecr 2256458147], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000016
+ 33 12:21:14.127411 IP (tos 0x0, ttl 64, id 16043, offset 0, flags [DF], proto TCP (6), length 116)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [P.], cksum 0x5b1f (incorrect -> 0x6ef4), seq 857:921, ack 2549, win 189, options [nop,nop,TS val 2256458158 ecr 1], length 64: OpenFlow
+ version 1.0, type STATS_REQUEST, length 56, xid 0x00000017
+ type FLOW, flags 0x0000
+ table_id ALL, out_port NONE
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000018
+ 34 12:21:14.128774 IP (tos 0xa0, ttl 64, id 10692, offset 0, flags [DF], proto TCP (6), length 160)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0x0485 (correct), seq 2549:2657, ack 921, win 2912, options [nop,nop,TS val 1 ecr 2256458158], length 108: OpenFlow
+ version 1.0, type STATS_REPLY, length 108, xid 0x00000017
+ type FLOW, flags 0x0001 (MORE)
+ length 96, table_id 0
+ match in_port 3
+ duration_sec 0, duration_nsec 0, priority 24300, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000003, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 4
+ 35 12:21:14.168017 IP (tos 0x0, ttl 64, id 16044, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [.], cksum 0x5adf (incorrect -> 0x9131), seq 921, ack 2657, win 189, options [nop,nop,TS val 2256458199 ecr 1], length 0
+ 36 12:21:14.168997 IP (tos 0xa0, ttl 64, id 10693, offset 0, flags [DF], proto TCP (6), length 828)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0x1544 (correct), seq 2657:3433, ack 921, win 2920, options [nop,nop,TS val 1 ecr 2256458158], length 776: OpenFlow
+ version 1.0, type STATS_REPLY, length 108, xid 0x00000017
+ type FLOW, flags 0x0001 (MORE)
+ length 96, table_id 0
+ match in_port 2
+ duration_sec 0, duration_nsec 0, priority 24200, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000002, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 4
+ version 1.0, type STATS_REPLY, length 108, xid 0x00000017
+ type FLOW, flags 0x0001 (MORE)
+ length 96, table_id 0
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 24100, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000001, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 4
+ version 1.0, type STATS_REPLY, length 108, xid 0x00000017
+ type FLOW, flags 0x0001 (MORE)
+ length 96, table_id 1
+ match in_port 7
+ duration_sec 0, duration_nsec 0, priority 20700, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000006, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 8
+ version 1.0, type STATS_REPLY, length 108, xid 0x00000017
+ type FLOW, flags 0x0001 (MORE)
+ length 96, table_id 1
+ match in_port 6
+ duration_sec 0, duration_nsec 0, priority 20600, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000005, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 8
+ version 1.0, type STATS_REPLY, length 108, xid 0x00000017
+ type FLOW, flags 0x0001 (MORE)
+ length 96, table_id 1
+ match in_port 5
+ duration_sec 0, duration_nsec 0, priority 20500, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000004, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 8
+ version 1.0, type STATS_REPLY, length 108, xid 0x00000017
+ type FLOW, flags 0x0001 (MORE)
+ length 96, table_id EMERG
+ match in_port 8
+ duration_sec 0, duration_nsec 0, priority 25800, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000008, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 4
+ version 1.0, type STATS_REPLY, length 108, xid 0x00000017
+ type FLOW, flags 0x0001 (MORE)
+ length 96, table_id EMERG
+ match in_port 4
+ duration_sec 0, duration_nsec 0, priority 25400, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000007, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 8
+ version 1.0, type STATS_REPLY, length 12, xid 0x00000017
+ type FLOW, flags 0x0000
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000018
+ 37 12:21:14.169020 IP (tos 0x0, ttl 64, id 16045, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [.], cksum 0x5adf (incorrect -> 0x8e18), seq 921, ack 3433, win 205, options [nop,nop,TS val 2256458200 ecr 1], length 0
+ 38 12:21:14.169616 IP (tos 0x0, ttl 64, id 16046, offset 0, flags [DF], proto TCP (6), length 72)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [P.], cksum 0x5af3 (incorrect -> 0x8b90), seq 921:941, ack 3433, win 205, options [nop,nop,TS val 2256458200 ecr 1], length 20: OpenFlow
+ version 1.0, type STATS_REQUEST, length 12, xid 0x00000019
+ type TABLE, flags 0x0000
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x0000001a
+ 39 12:21:14.170981 IP (tos 0xa0, ttl 64, id 10694, offset 0, flags [DF], proto TCP (6), length 128)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0xe84a (correct), seq 3433:3509, ack 941, win 2912, options [nop,nop,TS val 1 ecr 2256458200], length 76: OpenFlow
+ version 1.0, type STATS_REPLY, length 76, xid 0x00000019
+ type TABLE, flags 0x0001 (MORE)
+ table_id 0, name 'Normal 1 Flow Table'
+ wildcards 0x003820ff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 5632, active_count 3, lookup_count 18446744073709551615, matched_count 18446744073709551615
+ 40 12:21:14.210016 IP (tos 0x0, ttl 64, id 16047, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [.], cksum 0x5adf (incorrect -> 0x8d8f), seq 941, ack 3509, win 205, options [nop,nop,TS val 2256458241 ecr 1], length 0
+ 41 12:21:14.210954 IP (tos 0xa0, ttl 64, id 10695, offset 0, flags [DF], proto TCP (6), length 832)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [P.], cksum 0x198c (correct), seq 3509:4289, ack 941, win 2920, options [nop,nop,TS val 1 ecr 2256458200], length 780: OpenFlow
+ version 1.0, type STATS_REPLY, length 76, xid 0x00000019
+ type TABLE, flags 0x0001 (MORE)
+ table_id 1, name 'Expanded Flow Table'
+ wildcards 0x003820ff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 163840, active_count 3, lookup_count 18446744073709551615, matched_count 18446744073709551615
+ version 1.0, type STATS_REPLY, length 76, xid 0x00000019
+ type TABLE, flags 0x0001 (MORE)
+ table_id 20, name 'Normal 2 Flow Table'
+ wildcards 0x003820ff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 512, active_count 0, lookup_count 18446744073709551615, matched_count 18446744073709551615
+ version 1.0, type STATS_REPLY, length 76, xid 0x00000019
+ type TABLE, flags 0x0001 (MORE)
+ table_id 50, name 'Mpls 1 Flow Table'
+ wildcards 0x003820ef (IN_PORT, DL_VLAN, DL_SRC, DL_DST, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 512, active_count 0, lookup_count 18446744073709551615, matched_count 18446744073709551615
+ version 1.0, type STATS_REPLY, length 76, xid 0x00000019
+ type TABLE, flags 0x0001 (MORE)
+ table_id 51, name 'Mpls 2 Flow Table'
+ wildcards 0x003820ef (IN_PORT, DL_VLAN, DL_SRC, DL_DST, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 16384, active_count 0, lookup_count 18446744073709551615, matched_count 18446744073709551615
+ version 1.0, type STATS_REPLY, length 76, xid 0x00000019
+ type TABLE, flags 0x0001 (MORE)
+ table_id 99, name 'Software Flow Table'
+ wildcards 0x003820ff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 2048, active_count 0, lookup_count 18446744073709551615, matched_count 18446744073709551615
+ version 1.0, type STATS_REPLY, length 76, xid 0x00000019
+ type TABLE, flags 0x0001 (MORE)
+ table_id 100, name 'V-Normal 1 Flow Table'
+ wildcards 0x003820ff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 0, active_count 0, lookup_count 18446744073709551615, matched_count 18446744073709551615
+ version 1.0, type STATS_REPLY, length 76, xid 0x00000019
+ type TABLE, flags 0x0001 (MORE)
+ table_id 101, name 'V-Expanded Flow Table'
+ wildcards 0x003820ff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 0, active_count 0, lookup_count 18446744073709551615, matched_count 18446744073709551615
+ version 1.0, type STATS_REPLY, length 76, xid 0x00000019
+ type TABLE, flags 0x0001 (MORE)
+ table_id 120, name 'V-Normal 2 Flow Table'
+ wildcards 0x003820ff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 0, active_count 0, lookup_count 18446744073709551615, matched_count 18446744073709551615
+ version 1.0, type STATS_REPLY, length 76, xid 0x00000019
+ type TABLE, flags 0x0001 (MORE)
+ table_id 140, name 'Q-Normal 1 Flow Table'
+ wildcards 0x003820ff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 0, active_count 0, lookup_count 18446744073709551615, matched_count 18446744073709551615
+ version 1.0, type STATS_REPLY, length 76, xid 0x00000019
+ type TABLE, flags 0x0001 (MORE)
+ table_id EMERG, name 'Emergency Flow Cache'
+ wildcards 0x003820ff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 5632, active_count 2, lookup_count 18446744073709551615, matched_count 18446744073709551615
+ version 1.0, type STATS_REPLY, length 12, xid 0x00000019
+ type TABLE, flags 0x0000
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x0000001a
+ 42 12:21:14.210982 IP (tos 0x0, ttl 64, id 16048, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [.], cksum 0x5adf (incorrect -> 0x8a72), seq 941, ack 4289, win 222, options [nop,nop,TS val 2256458241 ecr 1], length 0
+ 43 12:21:14.486208 IP (tos 0x0, ttl 64, id 16049, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [F.], cksum 0x5adf (incorrect -> 0x895d), seq 941, ack 4289, win 222, options [nop,nop,TS val 2256458517 ecr 1], length 0
+ 44 12:21:14.489079 IP (tos 0xa0, ttl 64, id 10696, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [.], cksum 0x7ed2 (correct), seq 4289, ack 942, win 2920, options [nop,nop,TS val 2 ecr 2256458517], length 0
+ 45 12:21:14.489301 IP (tos 0xa0, ttl 64, id 10697, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.101.62221 > 172.16.1.51.6633: Flags [F.], cksum 0x7ed1 (correct), seq 4289, ack 942, win 2920, options [nop,nop,TS val 2 ecr 2256458517], length 0
+ 46 12:21:14.489341 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 172.16.1.51.6633 > 172.16.1.101.62221: Flags [.], cksum 0x8958 (correct), seq 942, ack 4290, win 222, options [nop,nop,TS val 2256458520 ecr 2], length 0
+ 47 12:21:20.463722 IP (tos 0xa0, ttl 64, id 10710, offset 0, flags [DF], proto TCP (6), length 60)
+ 172.16.1.101.62216 > 172.16.1.51.6633: Flags [S], cksum 0xf0a4 (correct), seq 2928426028, win 2048, options [mss 1460,nop,wscale 0,nop,nop,TS val 0 ecr 0], length 0
+ 48 12:21:20.463750 IP (tos 0xa0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
+ 172.16.1.51.6633 > 172.16.1.101.62216: Flags [R.], cksum 0x5d6c (correct), seq 0, ack 2928426029, win 0, length 0
diff --git a/tests/of10_pf5240.pcap b/tests/of10_pf5240.pcap
new file mode 100644
index 0000000..9f5aed2
--- /dev/null
+++ b/tests/of10_pf5240.pcap
Binary files differ
diff --git a/tests/of10_s4810-vvvv.out b/tests/of10_s4810-vvvv.out
new file mode 100644
index 0000000..d1bd288
--- /dev/null
+++ b/tests/of10_s4810-vvvv.out
@@ -0,0 +1,1333 @@
+ 1 12:51:39.368191 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 64)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [S], cksum 0xa75a (correct), seq 469952923, win 32768, options [mss 1380,nop,wscale 5,sackOK,nop,nop,nop,nop,TS val 1 ecr 0], length 0
+ 2 12:51:39.368246 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [S.], cksum 0x1493 (incorrect -> 0xa59a), seq 1198728146, ack 469952924, win 14480, options [mss 1460,sackOK,TS val 47836340 ecr 1,nop,wscale 7], length 0
+ 3 12:51:39.368494 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [.], cksum 0x08ec (correct), seq 1, ack 1, win 1035, options [nop,nop,TS val 1 ecr 47836340], length 0
+ 4 12:51:39.368546 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x293c (correct), seq 1:9, ack 1, win 1035, options [nop,nop,TS val 1 ecr 47836340], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0xf1c0ecd6
+ 5 12:51:39.368557 IP (tos 0x0, ttl 64, id 53094, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0x0c7c), seq 1, ack 9, win 114, options [nop,nop,TS val 47836341 ecr 1], length 0
+ 6 12:51:39.374809 IP (tos 0x0, ttl 64, id 53095, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x1493 (incorrect -> 0x0b5d), seq 1:9, ack 9, win 114, options [nop,nop,TS val 47836347 ecr 1], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0x00000001
+ 7 12:51:39.375581 IP (tos 0x0, ttl 64, id 53096, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x1493 (incorrect -> 0x0b4e), seq 9:17, ack 9, win 114, options [nop,nop,TS val 47836348 ecr 1], length 8: OpenFlow
+ version 1.0, type FEATURES_REQUEST, length 8, xid 0x00000002
+ 8 12:51:39.375846 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [.], cksum 0x08ce (correct), seq 9, ack 17, win 1034, options [nop,nop,TS val 1 ecr 47836347], length 0
+ 9 12:51:39.377715 IP (tos 0x0, ttl 64, id 53469, offset 0, flags [DF], proto TCP (6), length 180)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x48dc (correct), seq 9:137, ack 17, win 1035, options [nop,nop,TS val 1 ecr 47836347], length 128: OpenFlow
+ version 1.0, type FEATURES_REPLY, length 128, xid 0x00000002
+ dpid 0x00010001e88ae0e2, n_buffers 0, n_tables 6
+ capabilities 0x00000007 (FLOW_STATS, TABLE_STATS, PORT_STATS)
+ actions 0x00000137 (OUTPUT, SET_VLAN_VID, SET_VLAN_PCP, SET_DL_SRC, SET_DL_DST, SET_NW_TOS)
+ port_no 1, hw_addr 00:01:e8:8a:e0:e4, name 'Te 0/0'
+ config 0x00000000
+ state 0x00000000 (STP_LISTEN)
+ curr 0x00000340 (10GB_FD, FIBER, AUTONEG)
+ advertised 0x00000340 (10GB_FD, FIBER, AUTONEG)
+ supported 0x00000340 (10GB_FD, FIBER, AUTONEG)
+ peer 0x00000000
+ port_no 2, hw_addr 00:01:e8:8a:e0:e4, name 'Te 0/1'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000300 (FIBER, AUTONEG)
+ advertised 0x00000300 (FIBER, AUTONEG)
+ supported 0x00000300 (FIBER, AUTONEG)
+ peer 0x00000000
+ 10 12:51:39.380053 IP (tos 0x0, ttl 64, id 53097, offset 0, flags [DF], proto TCP (6), length 136)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x14df (incorrect -> 0x08c9), seq 17:101, ack 137, win 122, options [nop,nop,TS val 47836352 ecr 1], length 84: OpenFlow
+ version 1.0, type SET_CONFIG, length 12, xid 0x00000003
+ flags FRAG_NORMAL, miss_send_len 65535
+ version 1.0, type FLOW_MOD, length 72, xid 0x00000004
+ cookie 0x0000000000000000, command DELETE, out_port NONE, flags 0x0000
+ 11 12:51:39.381338 IP (tos 0x0, ttl 64, id 53098, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x1493 (incorrect -> 0x0a54), seq 101:109, ack 137, win 122, options [nop,nop,TS val 47836354 ecr 1], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000005
+ 12 12:51:39.381649 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [.], cksum 0x07ed (correct), seq 137, ack 109, win 1034, options [nop,nop,TS val 1 ecr 47836352], length 0
+ 13 12:51:39.382259 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x06bc (correct), seq 137:145, ack 109, win 1035, options [nop,nop,TS val 1 ecr 47836352], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000005
+ 14 12:51:39.382655 IP (tos 0x0, ttl 64, id 53099, offset 0, flags [DF], proto TCP (6), length 80)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x14a7 (incorrect -> 0x07f3), seq 109:137, ack 145, win 122, options [nop,nop,TS val 47836355 ecr 1], length 28: OpenFlow
+ version 1.0, type FEATURES_REQUEST, length 8, xid 0x00000006
+ version 1.0, type STATS_REQUEST, length 12, xid 0x00000007
+ type TABLE, flags 0x0000
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000008
+ 15 12:51:39.547412 IP (tos 0x0, ttl 64, id 53475, offset 0, flags [DF], proto TCP (6), length 180)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x47d0 (correct), seq 145:273, ack 137, win 1035, options [nop,nop,TS val 1 ecr 47836355], length 128: OpenFlow
+ version 1.0, type FEATURES_REPLY, length 128, xid 0x00000006
+ dpid 0x00010001e88ae0e2, n_buffers 0, n_tables 6
+ capabilities 0x00000007 (FLOW_STATS, TABLE_STATS, PORT_STATS)
+ actions 0x00000137 (OUTPUT, SET_VLAN_VID, SET_VLAN_PCP, SET_DL_SRC, SET_DL_DST, SET_NW_TOS)
+ port_no 1, hw_addr 00:01:e8:8a:e0:e4, name 'Te 0/0'
+ config 0x00000000
+ state 0x00000000 (STP_LISTEN)
+ curr 0x00000340 (10GB_FD, FIBER, AUTONEG)
+ advertised 0x00000340 (10GB_FD, FIBER, AUTONEG)
+ supported 0x00000340 (10GB_FD, FIBER, AUTONEG)
+ peer 0x00000000
+ port_no 2, hw_addr 00:01:e8:8a:e0:e4, name 'Te 0/1'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000300 (FIBER, AUTONEG)
+ advertised 0x00000300 (FIBER, AUTONEG)
+ supported 0x00000300 (FIBER, AUTONEG)
+ peer 0x00000000
+ 16 12:51:39.547442 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x0612 (correct), seq 273:281, ack 137, win 1035, options [nop,nop,TS val 1 ecr 47836355], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000008
+ 17 12:51:39.547448 IP (tos 0x0, ttl 64, id 53476, offset 0, flags [DF], proto TCP (6), length 448)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x2be8 (correct), seq 281:677, ack 137, win 1035, options [nop,nop,TS val 1 ecr 47836355], length 396: OpenFlow
+ version 1.0, type STATS_REPLY, length 396, xid 0x00000007
+ type TABLE, flags 0x0000
+ table_id 0, name 'VLAN Table'
+ wildcards 0x003ffffd (IN_PORT, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 1024, active_count 0, lookup_count 0, matched_count 0
+ table_id 0, name 'MAC Table'
+ wildcards 0x003ffff5 (IN_PORT, DL_SRC, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 49152, active_count 0, lookup_count 0, matched_count 0
+ table_id 0, name 'Route Table'
+ wildcards 0x003fffff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 6144, active_count 0, lookup_count 0, matched_count 0
+ table_id 0, name 'ACL Table'
+ wildcards 0x003fffff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 498, active_count 0, lookup_count 127028, matched_count 0
+ table_id 0, name 'Learning Switch Table'
+ wildcards 0x003fffff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 24576, active_count 0, lookup_count 0, matched_count 0
+ table_id 0, name 'Egress Port Block Table'
+ wildcards 0x003fffff (IN_PORT, DL_VLAN, DL_SRC, DL_DST, DL_TYPE, NW_PROTO, TP_SRC, TP_DST, DL_VLAN_PCP, NW_TOS)
+ max_entries 256, active_count 0, lookup_count 0, matched_count 0
+ 18 12:51:39.547502 IP (tos 0x0, ttl 64, id 53100, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0x088c), seq 137, ack 677, win 139, options [nop,nop,TS val 47836520 ecr 1], length 0
+ 19 12:51:39.554378 IP (tos 0x0, ttl 64, id 53101, offset 0, flags [DF], proto TCP (6), length 4156)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x2493 (incorrect -> 0xa671), seq 137:4241, ack 677, win 139, options [nop,nop,TS val 47836527 ecr 1], length 4104: OpenFlow
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000009
+ match in_port 1
+ cookie 0x0000000000000001, command ADD, priority 35000, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port CONTROLLER, max_len 65535
+ version 1.0, type FLOW_MOD, length 80, xid 0x0000000a
+ match in_port 1
+ cookie 0x0000000000000002, command ADD, priority 34999, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_VLAN_VID, len 8, vlan_vid 2
+ version 1.0, type FLOW_MOD, length 80, xid 0x0000000b
+ match in_port 1
+ cookie 0x0000000000000003, command ADD, priority 34998, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_VLAN_PCP, len 8, vlan_pcp 5
+ version 1.0, type FLOW_MOD, length 88, xid 0x0000000c
+ match in_port 1
+ cookie 0x0000000000000004, command ADD, priority 34997, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_VLAN_VID, len 8, vlan_vid 2
+ action type SET_VLAN_PCP, len 8, vlan_pcp 5
+ version 1.0, type FLOW_MOD, length 88, xid 0x0000000d
+ match in_port 1
+ cookie 0x0000000000000005, command ADD, priority 34996, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 11:22:33:44:55:66
+ version 1.0, type FLOW_MOD, length 88, xid 0x0000000e
+ match in_port 1
+ cookie 0x0000000000000006, command ADD, priority 34995, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_DST, len 16, dl_addr 77:88:99:aa:bb:cc
+ version 1.0, type FLOW_MOD, length 104, xid 0x0000000f
+ match in_port 1
+ cookie 0x0000000000000007, command ADD, priority 34994, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 11:22:33:44:55:66
+ action type SET_DL_DST, len 16, dl_addr 77:88:99:aa:bb:cc
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000010
+ match in_port 1
+ match dl_src 00:00:00:00:00:01
+ cookie 0x0000000000000008, command ADD, priority 34000, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000011
+ match in_port 1
+ cookie 0x0000000000000009, command ADD, priority 33000, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_NW_TOS, len 8, nw_tos 0x28
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000012
+ match dl_vlan 100
+ match dl_vlan_pcp 4
+ match dl_type 0x0800
+ cookie 0x000000000000000a, command ADD, priority 32000, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000013
+ match dl_type 0x0800
+ match nw_src 10.11.12.0/24
+ match nw_dst 10.13.14.0/24
+ cookie 0x000000000000000b, command ADD, priority 31999, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000014
+ match dl_type 0x0800
+ match nw_proto 17
+ match tp_src 68
+ match tp_dst 67
+ cookie 0x000000000000000c, command ADD, priority 31998, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000015
+ match dl_type 0x0800
+ match nw_proto 1
+ match icmp_type 8
+ cookie 0x000000000000000d, command ADD, priority 31997, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000016
+ match dl_type 0x0800
+ match nw_proto 1
+ match icmp_type 3
+ match icmp_code 13
+ cookie 0x000000000000000e, command ADD, priority 31996, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000017
+ match dl_src aa:00:00:00:00:11
+ match dl_dst bb:00:00:00:00:22
+ cookie 0x000000000000000f, command ADD, priority 31995, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000018
+ match dl_type 0x0800
+ match nw_tos 0x24
+ cookie 0x0000000000000010, command ADD, priority 31994, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000019
+ match dl_type 0x0800
+ match nw_proto 6
+ match tp_src 80
+ match tp_dst 80
+ cookie 0x0000000000000011, command ADD, priority 31993, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x0000001a
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.21.0.0/16
+ cookie 0x0000000000000012, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x0000001b
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.22.0.0/16
+ cookie 0x0000000000000013, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x0000001c
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.23.0.0/16
+ cookie 0x0000000000000014, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x0000001d
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.24.0.0/16
+ cookie 0x0000000000000015, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x0000001e
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.0.0/24
+ cookie 0x0000000000000016, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x0000001f
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.1.0/24
+ cookie 0x0000000000000017, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x00000020
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.2.0/24
+ cookie 0x0000000000000018, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x00000021
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.3.0/24
+ cookie 0x0000000000000019, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x00000022
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.4.0/24
+ cookie 0x000000000000001a, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x00000023
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.5.0/24
+ cookie 0x000000000000001b, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x00000024
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.6.0/24
+ cookie 0x000000000000001c, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x00000025
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.7.0/24
+ cookie 0x000000000000001d, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 112, xid 0x00000026
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ cookie 0x000000000000001e, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000027
+ match dl_dst 00:11:22:33:00:32
+ match dl_vlan 50
+ cookie 0x000000000000001f, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000028
+ match dl_dst 00:11:22:33:00:33
+ match dl_vlan 51
+ cookie 0x0000000000000020, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000029
+ match dl_dst 00:11:22:33:00:34
+ match dl_vlan 52
+ cookie 0x0000000000000021, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x0000002a
+ match dl_dst 00:11:22:33:00:35
+ match dl_vlan 53
+ cookie 0x0000000000000022, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x0000002b
+ match dl_dst 00:11:22:33:00:36
+ match dl_vlan 54
+ cookie 0x0000000000000023, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x0000002c
+ match dl_dst 00:11:22:33:00:37
+ match dl_vlan 55
+ cookie 0x0000000000000024, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x0000002d
+ match dl_dst 00:11:22:33:00:38
+ match dl_vlan 56
+ cookie 0x0000000000000025, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x0000002e
+ match dl_dst 00:11:22:33:00:39
+ match dl_vlan 57
+ cookie 0x0000000000000026, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x0000002f
+ match dl_src 00:11:22:33:00:0a
+ match dl_dst 00:11:22:33:00:14
+ cookie 0x0000000000000027, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000030
+ match dl_src 00:11:22:33:00:0a
+ match dl_dst 00:11:22:33:00:15
+ cookie 0x0000000000000028, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000031
+ match dl_src 00:11:22:33:00:0a
+ match dl_dst 00:11:22:33:00:16
+ cookie 0x0000000000000029, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000032
+ match dl_src 00:11:22:33:00:0b
+ match dl_dst 00:11:22:33:00:14
+ cookie 0x000000000000002a, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000033
+ match dl_src 00:11:22:33:00:0b
+ match dl_dst 00:11:22:33:00:15
+ cookie 0x000000000000002b, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000034
+ match dl_src 00:11:22:33:00:0b
+ match dl_dst 00:11:22:33:00:16
+ cookie 0x000000000000002c, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000035
+ match dl_src 00:11:22:33:00:0c
+ match dl_dst 00:11:22:33:00:14
+ cookie 0x000000000000002d, command ADD, priority 65535, buffer_id NONE, flags 0x0001 (SEND_FLOW_REM)
+ action type OUTPUT, len 8, port 1
+ version 1.0, type FLOW_MOD, length 80, xid 0x00000036
+ match dl_src 00:11:22:33:00:0c
+ match dl_dst 00:11:22:33:00:15 [|openflow]
+ 20 12:51:39.554402 IP (tos 0x0, ttl 64, id 53104, offset 0, flags [DF], proto TCP (6), length 180)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x150b (incorrect -> 0x8ec7), seq 4241:4369, ack 677, win 139, options [nop,nop,TS val 47836527 ecr 1], length 128: OpenFlow
+ version unknown (0x00), type unknown (0x00), length 0 (too short!), xid 0x00000000 (invalid)
+ 21 12:51:39.555118 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [.], cksum 0xfaa7 (correct), seq 677, ack 2873, win 952, options [nop,nop,TS val 1 ecr 47836527], length 0
+ 22 12:51:39.555156 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [.], cksum 0xf4fe (correct), seq 677, ack 4369, win 905, options [nop,nop,TS val 1 ecr 47836527], length 0
+ 23 12:51:39.556280 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [.], cksum 0xf4a7 (correct), seq 677, ack 4369, win 992, options [nop,nop,TS val 1 ecr 47836527], length 0
+ 24 12:51:39.784172 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xf318 (correct), seq 677:685, ack 4369, win 1035, options [nop,nop,TS val 2 ecr 47836527], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000038
+ 25 12:51:39.784835 IP (tos 0x0, ttl 64, id 53105, offset 0, flags [DF], proto TCP (6), length 228)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x153b (incorrect -> 0x165f), seq 4369:4545, ack 685, win 139, options [nop,nop,TS val 47836757 ecr 2], length 176: OpenFlow
+ version 1.0, type STATS_REQUEST, length 56, xid 0x00000039
+ type FLOW, flags 0x0000
+ table_id ALL, out_port NONE
+ version 1.0, type STATS_REQUEST, length 56, xid 0x0000003a
+ type FLOW, flags 0x0000
+ table_id 0, out_port NONE
+ version 1.0, type STATS_REQUEST, length 56, xid 0x0000003b
+ type FLOW, flags 0x0000
+ match dl_src 00:00:00:00:77:77
+ table_id 0, out_port CONTROLLER
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x0000003c
+ 26 12:51:39.976677 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [.], cksum 0xf2dd (correct), seq 685, ack 4545, win 1035, options [nop,nop,TS val 2 ecr 47836757], length 0
+ 27 12:51:40.027155 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 64)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xf170 (correct), seq 685:697, ack 4545, win 1035, options [nop,nop,TS val 2 ecr 47836757], length 12: OpenFlow
+ version 1.0, type STATS_REPLY, length 12, xid 0x0000003b
+ type FLOW, flags 0x0000
+ 28 12:51:40.027186 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xf16a (correct), seq 697:705, ack 4545, win 1035, options [nop,nop,TS val 2 ecr 47836757], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x0000003c
+ 29 12:51:40.027264 IP (tos 0x0, ttl 64, id 53106, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xf556), seq 4545, ack 705, win 139, options [nop,nop,TS val 47837000 ecr 2], length 0
+ 30 12:51:40.027413 IP (tos 0x0, ttl 64, id 53575, offset 0, flags [DF], proto TCP (6), length 1216)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x39b4 (correct), seq 705:1869, ack 4545, win 1035, options [nop,nop,TS val 2 ecr 47836757], length 1164: OpenFlow
+ version 1.0, type STATS_REPLY, length 1164, xid 0x00000039
+ type FLOW, flags 0x0001 (MORE)
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.21.0.0/16
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000012, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.22.0.0/16
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000013, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.23.0.0/16
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000014, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.24.0.0/16
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000015, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.0.0/24
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000016, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.1.0/24
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000017, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.2.0/24
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000018, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.3.0/24
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000019, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.4.0/24
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000001a, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ 31 12:51:40.027426 IP (tos 0x0, ttl 64, id 53576, offset 0, flags [DF], proto TCP (6), length 1176)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x6b64 (correct), seq 1869:2993, ack 4545, win 1035, options [nop,nop,TS val 2 ecr 47836757], length 1124: OpenFlow
+ version 1.0, type STATS_REPLY, length 1124, xid 0x00000039
+ type FLOW, flags 0x0001 (MORE)
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.5.0/24
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000001b, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.6.0/24
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000001c, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.7.0/24
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000001d, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ length 128, table_id 30
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000001e, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 00:01:e8:8a:e0:e4
+ action type SET_DL_DST, len 16, dl_addr 11:00:00:00:00:00
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 40
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 35000, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000001, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port CONTROLLER, max_len 65535
+ length 96, table_id 40
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 34999, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000002, packet_count 0, byte_count 0
+ action type SET_VLAN_VID, len 8, vlan_vid 2
+ length 96, table_id 40
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 34998, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000003, packet_count 0, byte_count 0
+ action type SET_VLAN_PCP, len 8, vlan_pcp 5
+ length 104, table_id 40
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 34997, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000004, packet_count 0, byte_count 0
+ action type SET_VLAN_VID, len 8, vlan_vid 2
+ action type SET_VLAN_PCP, len 8, vlan_pcp 5
+ length 104, table_id 40
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 34996, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000005, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 11:22:33:44:55:66
+ length 104, table_id 40
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 34995, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000006, packet_count 0, byte_count 0
+ action type SET_DL_DST, len 16, dl_addr 77:88:99:aa:bb:cc
+ 32 12:51:40.027435 IP (tos 0x0, ttl 64, id 53107, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xec39), seq 4545, ack 2993, win 184, options [nop,nop,TS val 47837000 ecr 2], length 0
+ 33 12:51:40.027603 IP (tos 0x0, ttl 64, id 53108, offset 0, flags [DF], proto TCP (6), length 148)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x14eb (incorrect -> 0xc5f7), seq 4545:4641, ack 2993, win 184, options [nop,nop,TS val 47837000 ecr 2], length 96: OpenFlow
+ version 1.0, type STATS_REQUEST, length 12, xid 0x0000003d
+ type DESC, flags 0x0000
+ version 1.0, type STATS_REQUEST, length 56, xid 0x0000003e
+ type AGGREGATE, flags 0x0000
+ table_id ALL, out_port NONE
+ version 1.0, type STATS_REQUEST, length 20, xid 0x0000003f
+ type PORT, flags 0x0000
+ port_no NONE
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000040
+ 34 12:51:40.027663 IP (tos 0x0, ttl 64, id 53577, offset 0, flags [DF], proto TCP (6), length 1048)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x29df (correct), seq 2993:3989, ack 4545, win 1035, options [nop,nop,TS val 2 ecr 47836757], length 996: OpenFlow
+ version 1.0, type STATS_REPLY, length 996, xid 0x00000039
+ type FLOW, flags 0x0001 (MORE)
+ length 120, table_id 40
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 34994, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000007, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 11:22:33:44:55:66
+ action type SET_DL_DST, len 16, dl_addr 77:88:99:aa:bb:cc
+ length 96, table_id 40
+ match in_port 1
+ match dl_src 00:00:00:00:00:01
+ duration_sec 0, duration_nsec 0, priority 34000, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000008, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 40
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 33000, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000009, packet_count 0, byte_count 0
+ action type SET_NW_TOS, len 8, nw_tos 0x28
+ length 96, table_id 40
+ match dl_vlan 100
+ match dl_vlan_pcp 4
+ match dl_type 0x0800
+ duration_sec 0, duration_nsec 0, priority 32000, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000a, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 40
+ match dl_type 0x0800
+ match nw_src 10.11.12.0/24
+ match nw_dst 10.13.14.0/24
+ duration_sec 0, duration_nsec 0, priority 31999, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000b, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 40
+ match dl_type 0x0800
+ match nw_proto 17
+ match tp_src 68
+ match tp_dst 67
+ duration_sec 0, duration_nsec 0, priority 31998, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000c, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 40
+ match dl_type 0x0800
+ match nw_proto 1
+ match icmp_type 8
+ duration_sec 0, duration_nsec 0, priority 31997, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000d, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 40
+ match dl_type 0x0800
+ match nw_proto 1
+ match icmp_type 3
+ match icmp_code 13
+ duration_sec 0, duration_nsec 0, priority 31996, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000e, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 40
+ match dl_src aa:00:00:00:00:11
+ match dl_dst bb:00:00:00:00:22
+ duration_sec 0, duration_nsec 0, priority 31995, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000f, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 40
+ match dl_type 0x0800
+ match nw_tos 0x24
+ duration_sec 0, duration_nsec 0, priority 31994, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000010, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ 35 12:51:40.027680 IP (tos 0x0, ttl 64, id 53578, offset 0, flags [DF], proto TCP (6), length 1024)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x45c0 (correct), seq 3989:4961, ack 4545, win 1035, options [nop,nop,TS val 2 ecr 47836757], length 972: OpenFlow
+ version 1.0, type STATS_REPLY, length 972, xid 0x00000039
+ type FLOW, flags 0x0001 (MORE)
+ length 96, table_id 40
+ match dl_type 0x0800
+ match nw_proto 6
+ match tp_src 80
+ match tp_dst 80
+ duration_sec 0, duration_nsec 0, priority 31993, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000011, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 40
+ match dl_dst 00:11:22:33:00:32
+ match dl_vlan 50
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000001f, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_dst 00:11:22:33:00:33
+ match dl_vlan 51
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000020, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_dst 00:11:22:33:00:34
+ match dl_vlan 52
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000021, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_dst 00:11:22:33:00:35
+ match dl_vlan 53
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000022, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_dst 00:11:22:33:00:36
+ match dl_vlan 54
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000023, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_dst 00:11:22:33:00:37
+ match dl_vlan 55
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000024, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_dst 00:11:22:33:00:38
+ match dl_vlan 56
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000025, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_dst 00:11:22:33:00:39
+ match dl_vlan 57
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000026, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_src 00:11:22:33:00:0a
+ match dl_dst 00:11:22:33:00:14
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000027, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ 36 12:51:40.027715 IP (tos 0x0, ttl 64, id 53109, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xe405), seq 4641, ack 4961, win 220, options [nop,nop,TS val 47837000 ecr 2], length 0
+ 37 12:51:40.027722 IP (tos 0x0, ttl 64, id 53579, offset 0, flags [DF], proto TCP (6), length 832)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x6f3d (correct), seq 4961:5741, ack 4545, win 1035, options [nop,nop,TS val 2 ecr 47836757], length 780: OpenFlow
+ version 1.0, type STATS_REPLY, length 780, xid 0x00000039
+ type FLOW, flags 0x0000
+ length 96, table_id 40
+ match dl_src 00:11:22:33:00:0a
+ match dl_dst 00:11:22:33:00:15
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000028, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_src 00:11:22:33:00:0a
+ match dl_dst 00:11:22:33:00:16
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000029, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_src 00:11:22:33:00:0b
+ match dl_dst 00:11:22:33:00:14
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000002a, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_src 00:11:22:33:00:0b
+ match dl_dst 00:11:22:33:00:15
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000002b, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_src 00:11:22:33:00:0b
+ match dl_dst 00:11:22:33:00:16
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000002c, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_src 00:11:22:33:00:0c
+ match dl_dst 00:11:22:33:00:14
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000002d, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_src 00:11:22:33:00:0c
+ match dl_dst 00:11:22:33:00:15
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000002e, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 40
+ match dl_src 00:11:22:33:00:0c
+ match dl_dst 00:11:22:33:00:16
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000002f, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ 38 12:51:40.027911 IP (tos 0x0, ttl 64, id 53580, offset 0, flags [DF], proto TCP (6), length 976)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x0dbb (correct), seq 5741:6665, ack 4545, win 1035, options [nop,nop,TS val 2 ecr 47836757], length 924: OpenFlow
+ version 1.0, type STATS_REPLY, length 924, xid 0x0000003a
+ type FLOW, flags 0x0001 (MORE)
+ length 96, table_id 0
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 35000, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000001, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port CONTROLLER, max_len 65535
+ length 96, table_id 0
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 34999, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000002, packet_count 0, byte_count 0
+ action type SET_VLAN_VID, len 8, vlan_vid 2
+ length 96, table_id 0
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 34998, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000003, packet_count 0, byte_count 0
+ action type SET_VLAN_PCP, len 8, vlan_pcp 5
+ length 104, table_id 0
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 34997, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000004, packet_count 0, byte_count 0
+ action type SET_VLAN_VID, len 8, vlan_vid 2
+ action type SET_VLAN_PCP, len 8, vlan_pcp 5
+ length 104, table_id 0
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 34996, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000005, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 11:22:33:44:55:66
+ length 104, table_id 0
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 34995, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000006, packet_count 0, byte_count 0
+ action type SET_DL_DST, len 16, dl_addr 77:88:99:aa:bb:cc
+ length 120, table_id 0
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 34994, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000007, packet_count 0, byte_count 0
+ action type SET_DL_SRC, len 16, dl_addr 11:22:33:44:55:66
+ action type SET_DL_DST, len 16, dl_addr 77:88:99:aa:bb:cc
+ length 96, table_id 0
+ match in_port 1
+ match dl_src 00:00:00:00:00:01
+ duration_sec 0, duration_nsec 0, priority 34000, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000008, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 0
+ match in_port 1
+ duration_sec 0, duration_nsec 0, priority 33000, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000009, packet_count 0, byte_count 0
+ action type SET_NW_TOS, len 8, nw_tos 0x28
+ 39 12:51:40.027920 IP (tos 0x0, ttl 64, id 53110, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xdd38), seq 4641, ack 6665, win 257, options [nop,nop,TS val 47837000 ecr 2], length 0
+ 40 12:51:40.027928 IP (tos 0x0, ttl 64, id 53581, offset 0, flags [DF], proto TCP (6), length 1500)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [.], cksum 0x2501 (correct), seq 6665:8113, ack 4545, win 1035, options [nop,nop,TS val 2 ecr 47837000], length 1448: OpenFlow
+ version 1.0, type STATS_REPLY, length 972, xid 0x0000003a
+ type FLOW, flags 0x0001 (MORE)
+ length 96, table_id 0
+ match dl_vlan 100
+ match dl_vlan_pcp 4
+ match dl_type 0x0800
+ duration_sec 0, duration_nsec 0, priority 32000, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000a, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 0
+ match dl_type 0x0800
+ match nw_src 10.11.12.0/24
+ match nw_dst 10.13.14.0/24
+ duration_sec 0, duration_nsec 0, priority 31999, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000b, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 0
+ match dl_type 0x0800
+ match nw_proto 17
+ match tp_src 68
+ match tp_dst 67
+ duration_sec 0, duration_nsec 0, priority 31998, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000c, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 0
+ match dl_type 0x0800
+ match nw_proto 1
+ match icmp_type 8
+ duration_sec 0, duration_nsec 0, priority 31997, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000d, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 0
+ match dl_type 0x0800
+ match nw_proto 1
+ match icmp_type 3
+ match icmp_code 13
+ duration_sec 0, duration_nsec 0, priority 31996, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000e, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 0
+ match dl_src aa:00:00:00:00:11
+ match dl_dst bb:00:00:00:00:22
+ duration_sec 0, duration_nsec 0, priority 31995, idle_timeout 0, hard_timeout 0, cookie 0x000000000000000f, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 0
+ match dl_type 0x0800
+ match nw_tos 0x24
+ duration_sec 0, duration_nsec 0, priority 31994, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000010, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 0
+ match dl_type 0x0800
+ match nw_proto 6
+ match tp_src 80
+ match tp_dst 80
+ duration_sec 0, duration_nsec 0, priority 31993, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000011, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 2
+ length 96, table_id 0
+ match dl_dst 00:11:22:33:00:32
+ match dl_vlan 50
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x000000000000001f, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 0
+ match dl_dst 00:11:22:33:00:33
+ match dl_vlan 51
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000020, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ version 1.0, type STATS_REPLY, length 972, xid 0x0000003a
+ type FLOW, flags 0x0001 (MORE)
+ length 96, table_id 0
+ match dl_dst 00:11:22:33:00:34
+ match dl_vlan 52
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000021, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 0
+ match dl_dst 00:11:22:33:00:35
+ match dl_vlan 53
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000022, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 0
+ match dl_dst 00:11:22:33:00:36
+ match dl_vlan 54
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000023, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 0
+ match dl_dst 00:11:22:33:00:37
+ match dl_vlan 55
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000024, packet_count 0, byte_count 0
+ action type OUTPUT, len 8, port 1
+ length 96, table_id 0
+ match dl_dst 00:11:22:33:00:38
+ match dl_vlan 56
+ duration_sec 0, duration_nsec 0, priority 65535, idle_timeout 0, hard_timeout 0, cookie 0x0000000000000025, packet_count 0 [|openflow]
+ 41 12:51:40.028159 IP (tos 0x0, ttl 64, id 53582, offset 0, flags [DF], proto TCP (6), length 1040)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x395e (correct), seq 8113:9101, ack 4545, win 1035, options [nop,nop,TS val 2 ecr 47837000], length 988: OpenFlow
+ version unknown (0x00), type unknown (0x00), length 0 (too short!), xid 0x00000000 (invalid)
+ 42 12:51:40.028172 IP (tos 0x0, ttl 64, id 53111, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xd387), seq 4641, ack 9101, win 302, options [nop,nop,TS val 47837000 ecr 2], length 0
+ 43 12:51:40.226408 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [.], cksum 0xd0aa (correct), seq 9101, ack 4641, win 1035, options [nop,nop,TS val 2 ecr 47837000], length 0
+ 44 12:51:40.239219 IP (tos 0x0, ttl 64, id 53602, offset 0, flags [DF], proto TCP (6), length 1120)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x141f (correct), seq 9101:10169, ack 4641, win 1035, options [nop,nop,TS val 3 ecr 47837000], length 1068: OpenFlow
+ version 1.0, type STATS_REPLY, length 1068, xid 0x0000003d
+ type DESC, flags 0x0000
+ mfr_desc 'Dell Force 10'
+ hw_desc 'OpenFlow switch HW ver. 1.0'
+ sw_desc 'OpenFlow switch SW ver. 1.0'
+ serial_num '02132012'
+ dp_desc 'Dell-Switch: 00:01:e8:8a:e0:e2; instance: 1'
+ 45 12:51:40.239258 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xcb12 (correct), seq 10169:10177, ack 4641, win 1035, options [nop,nop,TS val 3 ecr 47837000], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000040
+ 46 12:51:40.239264 IP (tos 0x0, ttl 64, id 53603, offset 0, flags [DF], proto TCP (6), length 88)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xcaa5 (correct), seq 10177:10213, ack 4641, win 1035, options [nop,nop,TS val 3 ecr 47837000], length 36: OpenFlow
+ version 1.0, type STATS_REPLY, length 36, xid 0x0000003e
+ type AGGREGATE, flags 0x0000
+ packet_count 0, byte_count 0, flow_count 47
+ 47 12:51:40.239267 IP (tos 0x0, ttl 64, id 53604, offset 0, flags [DF], proto TCP (6), length 189)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x03e7 (correct), seq 10213:10350, ack 4641, win 1035, options [nop,nop,TS val 3 ecr 47837000], length 137: OpenFlow
+ version 1.0, type PACKET_IN, length 137, xid 0x00000000
+ buffer_id NONE, total_len 119, in_port 1, reason ACTION
+ data (119 octets), frame decoding below
+STP 802.1s, Rapid STP, CIST Flags [Proposal, Learn, Forward, Agreement], length 102
+ port-role Designated, CIST root-id 8000.08:9e:01:62:d5:f4, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:9e:01:62:d5:f4, CIST port-id 8034,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name pica8, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:9e:01:62:d5:f4, CIST remaining-hops 20
+ 48 12:51:40.239273 IP (tos 0x0, ttl 64, id 53605, offset 0, flags [DF], proto TCP (6), length 168)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x4a03 (correct), seq 10350:10466, ack 4641, win 1035, options [nop,nop,TS val 3 ecr 47837000], length 116: OpenFlow
+ version 1.0, type STATS_REPLY, length 116, xid 0x0000003f
+ type PORT, flags 0x0001 (MORE)
+ port_no 1, rx_packets 129437, tx_packets 8061, rx_bytes 16090662, tx_bytes 515904, rx_dropped 0, tx_dropped 0, rx_errors 18446744073709551615, tx_errors 18446744073709551615, rx_frame_err 18446744073709551615, rx_over_err 18446744073709551615, rx_crc_err 0, collisions 0
+ 49 12:51:40.239276 IP (tos 0x0, ttl 64, id 53606, offset 0, flags [DF], proto TCP (6), length 168)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xc90e (correct), seq 10466:10582, ack 4641, win 1035, options [nop,nop,TS val 3 ecr 47837000], length 116: OpenFlow
+ version 1.0, type STATS_REPLY, length 116, xid 0x0000003f
+ type PORT, flags 0x0000
+ port_no 2, rx_packets 0, tx_packets 0, rx_bytes 0, tx_bytes 0, rx_dropped 0, tx_dropped 0, rx_errors 18446744073709551615, tx_errors 18446744073709551615, rx_frame_err 18446744073709551615, rx_over_err 18446744073709551615, rx_crc_err 0, collisions 0
+ 50 12:51:40.239287 IP (tos 0x0, ttl 64, id 53112, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xcccd), seq 4641, ack 10582, win 331, options [nop,nop,TS val 47837211 ecr 3], length 0
+ 51 12:51:40.239984 IP (tos 0x0, ttl 64, id 53113, offset 0, flags [DF], proto TCP (6), length 132)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x14db (incorrect -> 0xc93e), seq 4641:4721, ack 10582, win 331, options [nop,nop,TS val 47837212 ecr 3], length 80: OpenFlow
+ version 1.0, type FLOW_MOD, length 72, xid 0x00000041
+ cookie 0x0000000000000000, command DELETE, priority 65535, out_port NONE, flags 0x0001 (SEND_FLOW_REM)
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000042
+ 52 12:51:40.427977 IP (tos 0x0, ttl 64, id 53707, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xc92c (correct), seq 10582:10670, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000001a
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.21.0.0/16
+ cookie 0x0000000000000012, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 53 12:51:40.428016 IP (tos 0x0, ttl 64, id 53708, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xc8d1 (correct), seq 10670:10758, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000001b
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.22.0.0/16
+ cookie 0x0000000000000013, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 54 12:51:40.428024 IP (tos 0x0, ttl 64, id 53709, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xc876 (correct), seq 10758:10846, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000001c
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.23.0.0/16
+ cookie 0x0000000000000014, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 55 12:51:40.428028 IP (tos 0x0, ttl 64, id 53710, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xc81b (correct), seq 10846:10934, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000001d
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.24.0.0/16
+ cookie 0x0000000000000015, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 56 12:51:40.428031 IP (tos 0x0, ttl 64, id 53711, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xc7c7 (correct), seq 10934:11022, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000001e
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.0.0/24
+ cookie 0x0000000000000016, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 57 12:51:40.428033 IP (tos 0x0, ttl 64, id 53712, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xc66d (correct), seq 11022:11110, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000001f
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.1.0/24
+ cookie 0x0000000000000017, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 58 12:51:40.428035 IP (tos 0x0, ttl 64, id 53713, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xc513 (correct), seq 11110:11198, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000020
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.2.0/24
+ cookie 0x0000000000000018, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 59 12:51:40.428039 IP (tos 0x0, ttl 64, id 53714, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xc3b9 (correct), seq 11198:11286, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000021
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.3.0/24
+ cookie 0x0000000000000019, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 60 12:51:40.428072 IP (tos 0x0, ttl 64, id 53114, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xc900), seq 4721, ack 11286, win 331, options [nop,nop,TS val 47837400 ecr 3], length 0
+ 61 12:51:40.428267 IP (tos 0x0, ttl 64, id 53715, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xc25f (correct), seq 11286:11374, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000022
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.4.0/24
+ cookie 0x000000000000001a, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 62 12:51:40.428284 IP (tos 0x0, ttl 64, id 53716, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xc105 (correct), seq 11374:11462, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000023
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.5.0/24
+ cookie 0x000000000000001b, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 63 12:51:40.428289 IP (tos 0x0, ttl 64, id 53717, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xbfab (correct), seq 11462:11550, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000024
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.6.0/24
+ cookie 0x000000000000001c, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 64 12:51:40.428292 IP (tos 0x0, ttl 64, id 53718, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xbe51 (correct), seq 11550:11638, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000025
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ match nw_dst 10.20.7.0/24
+ cookie 0x000000000000001d, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 65 12:51:40.428295 IP (tos 0x0, ttl 64, id 53719, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xcf05 (correct), seq 11638:11726, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837212], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000026
+ match dl_dst 00:01:e8:8a:e0:e4
+ match dl_type 0x0800
+ cookie 0x000000000000001e, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 66 12:51:40.428298 IP (tos 0x0, ttl 64, id 53720, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x37c4 (correct), seq 11726:11814, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837400], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000009
+ match in_port 1
+ cookie 0x0000000000000001, priority 35000, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 67 12:51:40.428301 IP (tos 0x0, ttl 64, id 53721, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x376b (correct), seq 11814:11902, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837400], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000000a
+ match in_port 1
+ cookie 0x0000000000000002, priority 34999, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 68 12:51:40.428343 IP (tos 0x0, ttl 64, id 53115, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xc697), seq 4721, ack 11902, win 331, options [nop,nop,TS val 47837401 ecr 3], length 0
+ 69 12:51:40.428502 IP (tos 0x0, ttl 64, id 53722, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x3712 (correct), seq 11902:11990, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837400], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000000b
+ match in_port 1
+ cookie 0x0000000000000003, priority 34998, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 70 12:51:40.428515 IP (tos 0x0, ttl 64, id 53723, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x36b9 (correct), seq 11990:12078, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837400], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000000c
+ match in_port 1
+ cookie 0x0000000000000004, priority 34997, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 71 12:51:40.428519 IP (tos 0x0, ttl 64, id 53724, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x3660 (correct), seq 12078:12166, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837400], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000000d
+ match in_port 1
+ cookie 0x0000000000000005, priority 34996, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 72 12:51:40.428521 IP (tos 0x0, ttl 64, id 53725, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x3607 (correct), seq 12166:12254, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837400], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000000e
+ match in_port 1
+ cookie 0x0000000000000006, priority 34995, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 73 12:51:40.428524 IP (tos 0x0, ttl 64, id 53726, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x35ae (correct), seq 12254:12342, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837400], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000000f
+ match in_port 1
+ cookie 0x0000000000000007, priority 34994, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 74 12:51:40.428526 IP (tos 0x0, ttl 64, id 53727, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x3938 (correct), seq 12342:12430, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000010
+ match in_port 1
+ match dl_src 00:00:00:00:00:01
+ cookie 0x0000000000000008, priority 34000, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 75 12:51:40.428529 IP (tos 0x0, ttl 64, id 53728, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x3cc3 (correct), seq 12430:12518, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000011
+ match in_port 1
+ cookie 0x0000000000000009, priority 33000, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 76 12:51:40.428553 IP (tos 0x0, ttl 64, id 53116, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xc42f), seq 4721, ack 12518, win 331, options [nop,nop,TS val 47837401 ecr 3], length 0
+ 77 12:51:40.428793 IP (tos 0x0, ttl 64, id 53729, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x1317 (correct), seq 12518:12606, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000012
+ match dl_vlan 100
+ match dl_vlan_pcp 4
+ match dl_type 0x0800
+ cookie 0x000000000000000a, priority 32000, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 78 12:51:40.428810 IP (tos 0x0, ttl 64, id 53730, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x00fe (correct), seq 12606:12694, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000013
+ match dl_type 0x0800
+ match nw_src 10.11.12.0/24
+ match nw_dst 10.13.14.0/24
+ cookie 0x000000000000000b, priority 31999, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 79 12:51:40.428814 IP (tos 0x0, ttl 64, id 53731, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x16ff (correct), seq 12694:12782, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000014
+ match dl_type 0x0800
+ match nw_proto 17
+ match tp_src 68
+ match tp_dst 67
+ cookie 0x000000000000000c, priority 31998, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 80 12:51:40.428818 IP (tos 0x0, ttl 64, id 53732, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x16b5 (correct), seq 12782:12870, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000015
+ match dl_type 0x0800
+ match nw_proto 1
+ match icmp_type 8
+ cookie 0x000000000000000d, priority 31997, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 81 12:51:40.428821 IP (tos 0x0, ttl 64, id 53733, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x16d4 (correct), seq 12870:12958, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000016
+ match dl_type 0x0800
+ match nw_proto 1
+ match icmp_type 3
+ match icmp_code 13
+ cookie 0x000000000000000e, priority 31996, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 82 12:51:40.428821 IP (tos 0x0, ttl 64, id 53117, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xc37f), seq 4721, ack 12694, win 331, options [nop,nop,TS val 47837401 ecr 3], length 0
+ 83 12:51:40.428823 IP (tos 0x0, ttl 64, id 53734, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xd96b (correct), seq 12958:13046, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000017
+ match dl_src aa:00:00:00:00:11
+ match dl_dst bb:00:00:00:00:22
+ cookie 0x000000000000000f, priority 31995, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 84 12:51:40.428825 IP (tos 0x0, ttl 64, id 53735, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xf172 (correct), seq 13046:13134, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000018
+ match dl_type 0x0800
+ match nw_tos 0x24
+ cookie 0x0000000000000010, priority 31994, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 85 12:51:40.428830 IP (tos 0x0, ttl 64, id 53736, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x1534 (correct), seq 13134:13222, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000019
+ match dl_type 0x0800
+ match nw_proto 6
+ match tp_src 80
+ match tp_dst 80
+ cookie 0x0000000000000011, priority 31993, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 86 12:51:40.428852 IP (tos 0x0, ttl 64, id 53118, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xc16f), seq 4721, ack 13222, win 331, options [nop,nop,TS val 47837401 ecr 3], length 0
+ 87 12:51:40.429052 IP (tos 0x0, ttl 64, id 53737, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x97c9 (correct), seq 13222:13310, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000027
+ match dl_dst 00:11:22:33:00:32
+ match dl_vlan 50
+ cookie 0x000000000000001f, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 88 12:51:40.429071 IP (tos 0x0, ttl 64, id 53738, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x976d (correct), seq 13310:13398, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000028
+ match dl_dst 00:11:22:33:00:33
+ match dl_vlan 51
+ cookie 0x0000000000000020, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 89 12:51:40.429076 IP (tos 0x0, ttl 64, id 53739, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x9711 (correct), seq 13398:13486, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000029
+ match dl_dst 00:11:22:33:00:34
+ match dl_vlan 52
+ cookie 0x0000000000000021, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 90 12:51:40.429079 IP (tos 0x0, ttl 64, id 53740, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x96b5 (correct), seq 13486:13574, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000002a
+ match dl_dst 00:11:22:33:00:35
+ match dl_vlan 53
+ cookie 0x0000000000000022, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 91 12:51:40.429082 IP (tos 0x0, ttl 64, id 53741, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x9659 (correct), seq 13574:13662, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000002b
+ match dl_dst 00:11:22:33:00:36
+ match dl_vlan 54
+ cookie 0x0000000000000023, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 92 12:51:40.429085 IP (tos 0x0, ttl 64, id 53742, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x95fd (correct), seq 13662:13750, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000002c
+ match dl_dst 00:11:22:33:00:37
+ match dl_vlan 55
+ cookie 0x0000000000000024, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 93 12:51:40.429088 IP (tos 0x0, ttl 64, id 53743, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x95a1 (correct), seq 13750:13838, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000002d
+ match dl_dst 00:11:22:33:00:38
+ match dl_vlan 56
+ cookie 0x0000000000000025, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 94 12:51:40.429104 IP (tos 0x0, ttl 64, id 53119, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xbf07), seq 4721, ack 13838, win 331, options [nop,nop,TS val 47837401 ecr 3], length 0
+ 95 12:51:40.429275 IP (tos 0x0, ttl 64, id 53744, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x9545 (correct), seq 13838:13926, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000002e
+ match dl_dst 00:11:22:33:00:39
+ match dl_vlan 57
+ cookie 0x0000000000000026, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 96 12:51:40.429284 IP (tos 0x0, ttl 64, id 53745, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x72fd (correct), seq 13926:14014, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x0000002f
+ match dl_src 00:11:22:33:00:0a
+ match dl_dst 00:11:22:33:00:14
+ cookie 0x0000000000000027, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 97 12:51:40.429287 IP (tos 0x0, ttl 64, id 53746, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x72a2 (correct), seq 14014:14102, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000030
+ match dl_src 00:11:22:33:00:0a
+ match dl_dst 00:11:22:33:00:15
+ cookie 0x0000000000000028, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 98 12:51:40.429290 IP (tos 0x0, ttl 64, id 53747, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x7247 (correct), seq 14102:14190, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000031
+ match dl_src 00:11:22:33:00:0a
+ match dl_dst 00:11:22:33:00:16
+ cookie 0x0000000000000029, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 99 12:51:40.429292 IP (tos 0x0, ttl 64, id 53748, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x71ee (correct), seq 14190:14278, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000032
+ match dl_src 00:11:22:33:00:0b
+ match dl_dst 00:11:22:33:00:14
+ cookie 0x000000000000002a, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 100 12:51:40.429321 IP (tos 0x0, ttl 64, id 53120, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xbd4e), seq 4721, ack 14278, win 331, options [nop,nop,TS val 47837402 ecr 3], length 0
+ 101 12:51:40.429558 IP (tos 0x0, ttl 64, id 53749, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x7193 (correct), seq 14278:14366, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000033
+ match dl_src 00:11:22:33:00:0b
+ match dl_dst 00:11:22:33:00:15
+ cookie 0x000000000000002b, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 102 12:51:40.429594 IP (tos 0x0, ttl 64, id 53750, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x7138 (correct), seq 14366:14454, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000034
+ match dl_src 00:11:22:33:00:0b
+ match dl_dst 00:11:22:33:00:16
+ cookie 0x000000000000002c, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 103 12:51:40.429598 IP (tos 0x0, ttl 64, id 53751, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x70df (correct), seq 14454:14542, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000035
+ match dl_src 00:11:22:33:00:0c
+ match dl_dst 00:11:22:33:00:14
+ cookie 0x000000000000002d, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 104 12:51:40.429601 IP (tos 0x0, ttl 64, id 53752, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x7084 (correct), seq 14542:14630, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837401], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000036
+ match dl_src 00:11:22:33:00:0c
+ match dl_dst 00:11:22:33:00:15
+ cookie 0x000000000000002e, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 105 12:51:40.429603 IP (tos 0x0, ttl 64, id 53753, offset 0, flags [DF], proto TCP (6), length 140)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0x7028 (correct), seq 14630:14718, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837402], length 88: OpenFlow
+ version 1.0, type FLOW_REMOVED, length 88, xid 0x00000037
+ match dl_src 00:11:22:33:00:0c
+ match dl_dst 00:11:22:33:00:16
+ cookie 0x000000000000002f, priority 65535, reason DELETE, duration_sec 0, duration_nsec 0, packet_count 0, byte_count 0
+ 106 12:51:40.429605 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xb769 (correct), seq 14718:14726, ack 4721, win 1035, options [nop,nop,TS val 3 ecr 47837402], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000042
+ 107 12:51:40.429648 IP (tos 0x0, ttl 64, id 53121, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xbb8e), seq 4721, ack 14726, win 331, options [nop,nop,TS val 47837402 ecr 3], length 0
+ 108 12:51:40.429929 IP (tos 0x0, ttl 64, id 53122, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x1493 (incorrect -> 0xba21), seq 4721:4729, ack 14726, win 331, options [nop,nop,TS val 47837402 ecr 3], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000043
+ 109 12:51:40.430694 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xb758 (correct), seq 14726:14734, ack 4729, win 1035, options [nop,nop,TS val 3 ecr 47837402], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000043
+ 110 12:51:40.431060 IP (tos 0x0, ttl 64, id 53123, offset 0, flags [DF], proto TCP (6), length 144)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x14e7 (incorrect -> 0x2671), seq 4729:4821, ack 14734, win 331, options [nop,nop,TS val 47837403 ecr 3], length 92: OpenFlow
+ version 1.0, type PACKET_OUT, length 84, xid 0x00000044
+ buffer_id 0xffffffff, in_port CONTROLLER
+ action type OUTPUT, len 8, port 1
+ data (60 octets), frame decoding below
+ [|llc]
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000045
+ 111 12:51:40.432275 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xb6f1 (correct), seq 14734:14742, ack 4821, win 1035, options [nop,nop,TS val 3 ecr 47837403], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000045
+ 112 12:51:40.432599 IP (tos 0x0, ttl 64, id 53124, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x1493 (incorrect -> 0xb9a7), seq 4821:4829, ack 14742, win 331, options [nop,nop,TS val 47837405 ecr 3], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000046
+ 113 12:51:40.433290 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xb6de (correct), seq 14742:14750, ack 4829, win 1035, options [nop,nop,TS val 3 ecr 47837405], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000046
+ 114 12:51:40.433594 IP (tos 0x0, ttl 64, id 53125, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x1493 (incorrect -> 0xb995), seq 4829:4837, ack 14750, win 331, options [nop,nop,TS val 47837406 ecr 3], length 8: OpenFlow
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000047
+ 115 12:51:40.434261 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xb6cc (correct), seq 14750:14758, ack 4837, win 1035, options [nop,nop,TS val 3 ecr 47837406], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000047
+ 116 12:51:40.434511 IP (tos 0x0, ttl 64, id 53126, offset 0, flags [DF], proto TCP (6), length 72)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [P.], cksum 0x149f (incorrect -> 0xb819), seq 4837:4857, ack 14758, win 331, options [nop,nop,TS val 47837407 ecr 3], length 20: OpenFlow
+ version 1.0, type SET_CONFIG, length 12, xid 0x00000048
+ flags FRAG_NORMAL, miss_send_len 65535
+ version 1.0, type BARRIER_REQUEST, length 8, xid 0x00000049
+ 117 12:51:40.435172 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xb6ad (correct), seq 14758:14766, ack 4857, win 1035, options [nop,nop,TS val 3 ecr 47837407], length 8: OpenFlow
+ version 1.0, type BARRIER_REPLY, length 8, xid 0x00000049
+ 118 12:51:40.474288 IP (tos 0x0, ttl 64, id 53127, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xbab1), seq 4857, ack 14766, win 331, options [nop,nop,TS val 47837447 ecr 3], length 0
+ 119 12:51:41.367956 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 64)
+ 10.0.0.81.55442 > 10.0.0.20.6633: Flags [S], cksum 0xb924 (correct), seq 553833795, win 32768, options [mss 1380,nop,wscale 5,sackOK,nop,nop,nop,nop,TS val 1 ecr 0], length 0
+ 120 12:51:41.368013 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.81.55442: Flags [S.], cksum 0x1493 (incorrect -> 0x6111), seq 845973340, ack 553833796, win 14480, options [mss 1460,sackOK,TS val 47838340 ecr 1,nop,wscale 7], length 0
+ 121 12:51:41.368292 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.55442 > 10.0.0.20.6633: Flags [.], cksum 0xc462 (correct), seq 1, ack 1, win 1035, options [nop,nop,TS val 1 ecr 47838340], length 0
+ 122 12:51:41.368326 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.81.55442 > 10.0.0.20.6633: Flags [P.], cksum 0x3724 (correct), seq 1:9, ack 1, win 1035, options [nop,nop,TS val 1 ecr 47838340], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0x95e1f644
+ 123 12:51:41.368336 IP (tos 0x0, ttl 64, id 29656, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.55442: Flags [.], cksum 0x148b (incorrect -> 0xc7f2), seq 1, ack 9, win 114, options [nop,nop,TS val 47838341 ecr 1], length 0
+ 124 12:51:41.374647 IP (tos 0x0, ttl 64, id 29657, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.81.55442: Flags [P.], cksum 0x1493 (incorrect -> 0xc6d3), seq 1:9, ack 9, win 114, options [nop,nop,TS val 47838347 ecr 1], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0x00000001
+ 125 12:51:41.375407 IP (tos 0x0, ttl 64, id 29658, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.0.20.6633 > 10.0.0.81.55442: Flags [P.], cksum 0x1493 (incorrect -> 0xc6c4), seq 9:17, ack 9, win 114, options [nop,nop,TS val 47838348 ecr 1], length 8: OpenFlow
+ version 1.0, type FEATURES_REQUEST, length 8, xid 0x00000002
+ 126 12:51:41.375690 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.55442 > 10.0.0.20.6633: Flags [.], cksum 0xc444 (correct), seq 9, ack 17, win 1034, options [nop,nop,TS val 1 ecr 47838347], length 0
+ 127 12:51:41.378993 IP (tos 0x0, ttl 64, id 53761, offset 0, flags [DF], proto TCP (6), length 180)
+ 10.0.0.81.55442 > 10.0.0.20.6633: Flags [P.], cksum 0x1df1 (correct), seq 9:137, ack 17, win 1035, options [nop,nop,TS val 1 ecr 47838347], length 128: OpenFlow
+ version 1.0, type FEATURES_REPLY, length 128, xid 0x00000002
+ dpid 0x00050001e88ae0e2, n_buffers 0, n_tables 6
+ capabilities 0x00000007 (FLOW_STATS, TABLE_STATS, PORT_STATS)
+ actions 0x00000137 (OUTPUT, SET_VLAN_VID, SET_VLAN_PCP, SET_DL_SRC, SET_DL_DST, SET_NW_TOS)
+ port_no 13, hw_addr 00:01:e8:8a:e0:e4, name 'Te 0/12'
+ config 0x00000001 (PORT_DOWN)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000300 (FIBER, AUTONEG)
+ advertised 0x00000300 (FIBER, AUTONEG)
+ supported 0x00000300 (FIBER, AUTONEG)
+ peer 0x00000000
+ port_no 16, hw_addr 00:01:e8:8a:e0:e4, name 'Te 0/15'
+ config 0x00008001 (PORT_DOWN) (bogus)
+ state 0x00000001 (STP_LISTEN, LINK_DOWN)
+ curr 0x00000300 (FIBER, AUTONEG)
+ advertised 0x00000300 (FIBER, AUTONEG)
+ supported 0x00000300 (FIBER, AUTONEG)
+ peer 0x00000000
+ 128 12:51:41.380457 IP (tos 0x0, ttl 64, id 29659, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.55442: Flags [F.], cksum 0x148b (incorrect -> 0xc74d), seq 17, ack 137, win 122, options [nop,nop,TS val 47838353 ecr 1], length 0
+ 129 12:51:41.380660 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.55442 > 10.0.0.20.6633: Flags [.], cksum 0xc3bc (correct), seq 137, ack 18, win 1035, options [nop,nop,TS val 1 ecr 47838353], length 0
+ 130 12:51:41.380991 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.55442 > 10.0.0.20.6633: Flags [F.], cksum 0xc3bb (correct), seq 137, ack 18, win 1035, options [nop,nop,TS val 1 ecr 47838353], length 0
+ 131 12:51:41.381041 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.55442: Flags [.], cksum 0xc74c (correct), seq 18, ack 138, win 122, options [nop,nop,TS val 47838353 ecr 1], length 0
+ 132 12:51:42.080078 IP (tos 0x0, ttl 64, id 53775, offset 0, flags [DF], proto TCP (6), length 189)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [P.], cksum 0xf083 (correct), seq 14766:14903, ack 4857, win 1035, options [nop,nop,TS val 6 ecr 47837447], length 137: OpenFlow
+ version 1.0, type PACKET_IN, length 137, xid 0x00000000
+ buffer_id NONE, total_len 119, in_port 1, reason NO_MATCH
+ data (119 octets), frame decoding below
+STP 802.1s, Rapid STP, CIST Flags [Proposal, Learn, Forward, Agreement], length 102
+ port-role Designated, CIST root-id 8000.08:9e:01:62:d5:f4, CIST ext-pathcost 0
+ CIST regional-root-id 8000.08:9e:01:62:d5:f4, CIST port-id 8034,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 64, MCID Name pica8, rev 0,
+ digest ac36177f50283cd4b83821d8ab26de62, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.08:9e:01:62:d5:f4, CIST remaining-hops 20
+ 133 12:51:42.080120 IP (tos 0x0, ttl 64, id 53128, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0x148b (incorrect -> 0xb3e0), seq 4857, ack 14903, win 331, options [nop,nop,TS val 47839052 ecr 6], length 0
+ 134 12:51:44.046180 IP (tos 0x0, ttl 64, id 53129, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [F.], cksum 0x148b (incorrect -> 0xac31), seq 4857, ack 14903, win 331, options [nop,nop,TS val 47841018 ecr 6], length 0
+ 135 12:51:44.046638 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [.], cksum 0xa96d (correct), seq 14903, ack 4858, win 1035, options [nop,nop,TS val 10 ecr 47841018], length 0
+ 136 12:51:44.046956 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.81.56068 > 10.0.0.20.6633: Flags [F.], cksum 0xa96c (correct), seq 14903, ack 4858, win 1035, options [nop,nop,TS val 10 ecr 47841018], length 0
+ 137 12:51:44.046986 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52)
+ 10.0.0.20.6633 > 10.0.0.81.56068: Flags [.], cksum 0xac2b (correct), seq 4858, ack 14904, win 331, options [nop,nop,TS val 47841019 ecr 10], length 0
diff --git a/tests/of10_s4810.pcap b/tests/of10_s4810.pcap
new file mode 100644
index 0000000..4c9c194
--- /dev/null
+++ b/tests/of10_s4810.pcap
Binary files differ
diff --git a/tests/of13_ericsson-v.out b/tests/of13_ericsson-v.out
new file mode 100644
index 0000000..9c54a83
--- /dev/null
+++ b/tests/of13_ericsson-v.out
@@ -0,0 +1,495 @@
+ 1 15:52:49.322823 IP (tos 0x0, ttl 64, id 348, offset 0, flags [DF], proto TCP (6), length 236)
+ 127.0.0.1.6633 > 127.0.0.1.35359: Flags [P.], cksum 0xfee0 (incorrect -> 0x21d3), seq 3305197767:3305197951, ack 3938018648, win 100, options [nop,nop,TS val 534888 ecr 533649], length 184: OpenFlow
+ version 1.3, type FLOW_MOD, length 184, xid 0x00000199
+ 2 15:52:49.362355 IP (tos 0x0, ttl 64, id 61731, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.35359 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0x1ad3), ack 184, win 98, options [nop,nop,TS val 534898 ecr 534888], length 0
+ 3 15:52:49.367093 IP (tos 0x0, ttl 64, id 349, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.35359: Flags [P.], cksum 0xfe30 (incorrect -> 0x1512), seq 184:192, ack 1, win 100, options [nop,nop,TS val 534899 ecr 534898], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000019a
+ 4 15:52:49.367137 IP (tos 0x0, ttl 64, id 61732, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.35359 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0x1abf), ack 192, win 98, options [nop,nop,TS val 534899 ecr 534899], length 0
+ 5 15:52:49.367403 IP (tos 0x0, ttl 64, id 61733, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.35359 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x150a), seq 1:9, ack 192, win 98, options [nop,nop,TS val 534899 ecr 534899], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000019a
+ 6 15:52:49.367421 IP (tos 0x0, ttl 64, id 350, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.35359: Flags [.], cksum 0xfe28 (incorrect -> 0x1ab5), ack 9, win 100, options [nop,nop,TS val 534899 ecr 534899], length 0
+ 7 12:15:37.979676 IP (tos 0x0, ttl 64, id 46225, offset 0, flags [DF], proto TCP (6), length 420)
+ 127.0.0.1.6633 > 127.0.0.1.43230: Flags [P.], cksum 0xff98 (incorrect -> 0xd79d), seq 402287444:402287812, ack 1282739451, win 98, options [nop,nop,TS val 2953476 ecr 2952724], length 368: OpenFlow
+ version 1.3, type FLOW_MOD, length 368, xid 0x00000012
+ 8 12:15:37.985455 IP (tos 0x0, ttl 64, id 55504, offset 0, flags [DF], proto TCP (6), length 432)
+ 127.0.0.1.43230 > 127.0.0.1.6633: Flags [P.], cksum 0xffa4 (incorrect -> 0xcda4), seq 1:381, ack 368, win 90, options [nop,nop,TS val 2953478 ecr 2953476], length 380: OpenFlow
+ version 1.3, type ERROR, length 380, xid 0x00000012
+ type BAD_ACTION, code BAD_EXPERIMENTER
+ data (368 octets)
+ 9 12:15:37.985482 IP (tos 0x0, ttl 64, id 46226, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.43230: Flags [.], cksum 0xfe28 (incorrect -> 0xb37b), ack 381, win 103, options [nop,nop,TS val 2953478 ecr 2953478], length 0
+ 10 14:53:56.336558 IP (tos 0x0, ttl 64, id 63838, offset 0, flags [DF], proto TCP (6), length 172)
+ 127.0.0.1.6633 > 127.0.0.1.56562: Flags [P.], cksum 0xfea0 (incorrect -> 0x8c0a), seq 4055369935:4055370055, ack 963939871, win 94, options [nop,nop,TS val 3963146 ecr 3962600], length 120: OpenFlow
+ version 1.3, type GROUP_MOD, length 120, xid 0x0000008a
+ 11 14:53:56.339805 IP (tos 0x0, ttl 64, id 30929, offset 0, flags [DF], proto TCP (6), length 184)
+ 127.0.0.1.56562 > 127.0.0.1.6633: Flags [P.], cksum 0xfeac (incorrect -> 0x8455), seq 1:133, ack 120, win 86, options [nop,nop,TS val 3963147 ecr 3963146], length 132: OpenFlow
+ version 1.3, type ERROR, length 132, xid 0x0000008a
+ type GROUP_MOD_FAILED, code INVALID_GROUP
+ data (120 octets)
+ 12 14:53:56.339839 IP (tos 0x0, ttl 64, id 63839, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.56562: Flags [.], cksum 0xfe28 (incorrect -> 0xcbd6), ack 133, win 98, options [nop,nop,TS val 3963147 ecr 3963147], length 0
+ 13 07:06:07.923021 IP (tos 0x0, ttl 64, id 53050, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.56439 > 127.0.0.1.6633: Flags [S], cksum 0xfe30 (incorrect -> 0x17bd), seq 2797182347, win 43690, options [mss 65495,sackOK,TS val 1659569 ecr 0,nop,wscale 9], length 0
+ 14 07:06:07.923406 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
+ 127.0.0.1.6633 > 127.0.0.1.56439: Flags [R.], cksum 0x7727 (correct), seq 0, ack 2797182348, win 0, length 0
+ 15 07:06:11.948050 IP (tos 0x0, ttl 64, id 25056, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [S], cksum 0xfe30 (incorrect -> 0x9014), seq 2428319552, win 43690, options [mss 65495,sackOK,TS val 1660576 ecr 0,nop,wscale 9], length 0
+ 16 07:06:11.948123 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.56440: Flags [S.], cksum 0xfe30 (incorrect -> 0xf3ee), seq 2308881340, ack 2428319553, win 43690, options [mss 65495,sackOK,TS val 1660576 ecr 1660576,nop,wscale 9], length 0
+ 17 07:06:11.948171 IP (tos 0x0, ttl 64, id 25057, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xc735), ack 1, win 86, options [nop,nop,TS val 1660576 ecr 1660576], length 0
+ 18 07:06:11.948588 IP (tos 0x0, ttl 64, id 25058, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0xc10f), seq 1:9, ack 1, win 86, options [nop,nop,TS val 1660576 ecr 1660576], length 8: OpenFlow
+ version 1.3, type HELLO, length 8, xid 0x83ea7e23
+ 19 07:06:11.948646 IP (tos 0x0, ttl 64, id 60701, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.56440: Flags [.], cksum 0xfe28 (incorrect -> 0xc72d), ack 9, win 86, options [nop,nop,TS val 1660576 ecr 1660576], length 0
+ 20 07:06:11.951581 IP (tos 0x0, ttl 64, id 60702, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.56440: Flags [P.], cksum 0xfe30 (incorrect -> 0x5426), seq 1:9, ack 9, win 86, options [nop,nop,TS val 1660577 ecr 1660576], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0x95b6dc37
+ 21 07:06:11.951654 IP (tos 0x0, ttl 64, id 25059, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xc723), ack 9, win 86, options [nop,nop,TS val 1660577 ecr 1660577], length 0
+ 22 07:06:11.954851 IP (tos 0x0, ttl 64, id 25060, offset 0, flags [DF], proto TCP (6), length 150)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [P.], cksum 0xfe8a (incorrect -> 0x83b9), seq 9:107, ack 9, win 86, options [nop,nop,TS val 1660577 ecr 1660577], length 98: OpenFlow
+ version 1.3, type ERROR, length 98, xid 0xc4420f26
+ type HELLO_FAILED, code INCOMPATIBLE
+ data (86 octets)
+ 23 07:06:11.956875 IP (tos 0x0, ttl 64, id 25061, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [F.], cksum 0xfe28 (incorrect -> 0xc6bf), seq 107, ack 9, win 86, options [nop,nop,TS val 1660578 ecr 1660577], length 0
+ 24 07:06:11.995263 IP (tos 0x0, ttl 64, id 60703, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.56440: Flags [.], cksum 0xfe28 (incorrect -> 0xc6b5), ack 108, win 86, options [nop,nop,TS val 1660588 ecr 1660577], length 0
+ 25 07:06:11.996996 IP (tos 0x0, ttl 64, id 60704, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.56440: Flags [P.], cksum 0xfe30 (incorrect -> 0xc22e), seq 9:17, ack 108, win 86, options [nop,nop,TS val 1660588 ecr 1660577], length 8: OpenFlow
+ version 1.0, type FEATURES_REQUEST, length 8, xid 0x852f7e3a
+ 26 07:06:11.997117 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [R], cksum 0xf312 (correct), seq 2428319660, win 0, length 0
+ 27 20:23:02.447284 IP (tos 0x0, ttl 64, id 5822, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.37123: Flags [P.], cksum 0xfe30 (incorrect -> 0xc972), seq 3295811422:3295811430, ack 623716506, win 94, options [nop,nop,TS val 683124 ecr 682086], length 8: OpenFlow
+ version 1.3, type HELLO, length 8, xid 0x0000015f
+ 28 20:23:02.487886 IP (tos 0x0, ttl 64, id 541, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.37123 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xcad0), ack 8, win 86, options [nop,nop,TS val 683135 ecr 683124], length 0
+ 29 20:23:03.289931 IP (tos 0x0, ttl 64, id 5823, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.37123: Flags [P.], cksum 0xfe30 (incorrect -> 0xc47b), seq 8:16, ack 1, win 94, options [nop,nop,TS val 683335 ecr 683135], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000160
+ 30 20:23:03.290134 IP (tos 0x0, ttl 64, id 542, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.37123 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xc92d), ack 16, win 86, options [nop,nop,TS val 683335 ecr 683335], length 0
+ 31 20:23:03.292620 IP (tos 0x0, ttl 64, id 543, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.37123 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0xc3b1), seq 1:9, ack 16, win 86, options [nop,nop,TS val 683336 ecr 683335], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000160
+ 32 20:23:03.292690 IP (tos 0x0, ttl 64, id 5824, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.37123: Flags [.], cksum 0xfe28 (incorrect -> 0xc91b), ack 9, win 94, options [nop,nop,TS val 683336 ecr 683336], length 0
+ 33 20:23:03.674363 IP (tos 0x0, ttl 64, id 5825, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.37123: Flags [P.], cksum 0xfe38 (incorrect -> 0xc315), seq 16:32, ack 9, win 94, options [nop,nop,TS val 683431 ecr 683336], length 16: OpenFlow
+ version 1.3, type HELLO, length 16, xid 0x00000161
+ type VERSIONBITMAP, length 8, bitmap 0x00000015 (1.0, 1.2, 1.4)
+ 34 20:23:03.711246 IP (tos 0x0, ttl 64, id 544, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.37123 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xc84b), ack 32, win 86, options [nop,nop,TS val 683441 ecr 683431], length 0
+ 35 09:18:28.508689 IP (tos 0x0, ttl 64, id 8726, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.52621: Flags [P.], cksum 0xfe30 (incorrect -> 0x5466), seq 2774334230:2774334238, ack 3518786755, win 94, options [nop,nop,TS val 2174690 ecr 2173441], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000004d
+ 36 09:18:28.512206 IP (tos 0x0, ttl 64, id 48675, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.52621 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x4f83), seq 1:9, ack 8, win 86, options [nop,nop,TS val 2174691 ecr 2174690], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000004d
+ 37 09:18:28.512310 IP (tos 0x0, ttl 64, id 8727, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.52621: Flags [.], cksum 0xfe28 (incorrect -> 0x53da), ack 9, win 94, options [nop,nop,TS val 2174691 ecr 2174691], length 0
+ 38 09:18:29.938866 IP (tos 0x0, ttl 64, id 8728, offset 0, flags [DF], proto TCP (6), length 73)
+ 127.0.0.1.6633 > 127.0.0.1.52621: Flags [P.], cksum 0xfe3d (incorrect -> 0x23cf), seq 8:29, ack 9, win 94, options [nop,nop,TS val 2175048 ecr 2174691], length 21: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 21, xid 0x0000004e
+ data (13 octets)
+ 39 09:18:29.940525 IP (tos 0x0, ttl 64, id 48676, offset 0, flags [DF], proto TCP (6), length 73)
+ 127.0.0.1.52621 > 127.0.0.1.6633: Flags [P.], cksum 0xfe3d (incorrect -> 0x225c), seq 9:30, ack 29, win 86, options [nop,nop,TS val 2175048 ecr 2175048], length 21: OpenFlow
+ version 1.3, type ECHO_REPLY, length 21, xid 0x0000004e
+ data (13 octets)
+ 40 09:18:29.940621 IP (tos 0x0, ttl 64, id 8729, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.52621: Flags [.], cksum 0xfe28 (incorrect -> 0x50e6), ack 30, win 94, options [nop,nop,TS val 2175048 ecr 2175048], length 0
+ 41 15:41:10.777155 IP (tos 0x0, ttl 64, id 14454, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [P.], cksum 0xfe38 (incorrect -> 0x994a), seq 2142345193:2142345209, ack 115176160, win 94, options [nop,nop,TS val 175830 ecr 174634], length 16: OpenFlow
+ version 1.3, type EXPERIMENTER, length 16, xid 0x00000041
+ experimenter 0x00d0f0db (Ericsson), exp_type 0x00000065
+ 42 15:41:10.782182 IP (tos 0x0, ttl 64, id 51401, offset 0, flags [DF], proto TCP (6), length 80)
+ 127.0.0.1.58445 > 127.0.0.1.6633: Flags [P.], cksum 0xfe44 (incorrect -> 0x9024), seq 1:29, ack 16, win 86, options [nop,nop,TS val 175831 ecr 175830], length 28: OpenFlow
+ version 1.3, type ERROR, length 28, xid 0x00000041
+ type BAD_REQUEST, code BAD_LEN
+ data (16 octets)
+ 43 15:41:10.782279 IP (tos 0x0, ttl 64, id 14455, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [.], cksum 0xfe28 (incorrect -> 0x8aee), ack 29, win 94, options [nop,nop,TS val 175831 ecr 175831], length 0
+ 44 15:41:10.978145 IP (tos 0x0, ttl 64, id 14456, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [P.], cksum 0xfe30 (incorrect -> 0x8661), seq 16:24, ack 29, win 94, options [nop,nop,TS val 175880 ecr 175831], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000042
+ 45 15:41:10.981725 IP (tos 0x0, ttl 64, id 51402, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.58445 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x862e), seq 29:37, ack 24, win 86, options [nop,nop,TS val 175881 ecr 175880], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000042
+ 46 15:41:10.981828 IP (tos 0x0, ttl 64, id 14457, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [.], cksum 0xfe28 (incorrect -> 0x8a7a), ack 37, win 94, options [nop,nop,TS val 175881 ecr 175881], length 0
+ 47 15:41:11.640555 IP (tos 0x0, ttl 64, id 14458, offset 0, flags [DF], proto TCP (6), length 85)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [P.], cksum 0xfe49 (incorrect -> 0x4af3), seq 24:57, ack 37, win 94, options [nop,nop,TS val 176046 ecr 175881], length 33: OpenFlow
+ version 1.3, type EXPERIMENTER, length 33, xid 0x00000043
+ experimenter 0x00d0f0db (Ericsson), exp_type 0x00000065
+ data (17 octets)
+ 48 15:41:11.649632 IP (tos 0x0, ttl 64, id 51403, offset 0, flags [DF], proto TCP (6), length 97)
+ 127.0.0.1.58445 > 127.0.0.1.6633: Flags [P.], cksum 0xfe55 (incorrect -> 0x45af), seq 37:82, ack 57, win 86, options [nop,nop,TS val 176048 ecr 176046], length 45: OpenFlow
+ version 1.3, type ERROR, length 45, xid 0x00000043
+ type BAD_REQUEST, code BAD_LEN
+ data (33 octets)
+ 49 15:41:11.649721 IP (tos 0x0, ttl 64, id 14459, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [.], cksum 0xfe28 (incorrect -> 0x88de), ack 82, win 94, options [nop,nop,TS val 176048 ecr 176048], length 0
+ 50 15:47:18.960105 IP (tos 0x0, ttl 64, id 14608, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [P.], cksum 0xfe30 (incorrect -> 0xb4f6), seq 649:657, ack 698, win 94, options [nop,nop,TS val 267876 ecr 267134], length 8: OpenFlow
+ version 1.3, type FEATURES_REQUEST, length 8, xid 0x0000008e
+ 51 15:47:18.962238 IP (tos 0x0, ttl 64, id 51478, offset 0, flags [DF], proto TCP (6), length 84)
+ 127.0.0.1.58445 > 127.0.0.1.6633: Flags [P.], cksum 0xfe48 (incorrect -> 0xbbc3), seq 698:730, ack 657, win 86, options [nop,nop,TS val 267876 ecr 267876], length 32: OpenFlow
+ version 1.3, type FEATURES_REPLY, length 32, xid 0x0000008e
+ dpid 0x000026a2b46fd9ba, n_buffers 256, n_tables 64, auxiliary_id 0
+ capabilities 0x0000004f (FLOW_STATS, TABLE_STATS, PORT_STATS, GROUP_STATS, QUEUE_STATS)
+ 52 15:47:18.962333 IP (tos 0x0, ttl 64, id 14609, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [.], cksum 0xfe28 (incorrect -> 0xb693), ack 730, win 94, options [nop,nop,TS val 267876 ecr 267876], length 0
+ 53 16:32:34.623939 IP (tos 0x0, ttl 64, id 44797, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.58447: Flags [P.], cksum 0xfe30 (incorrect -> 0x3d62), seq 2583631865:2583631873, ack 3924671623, win 94, options [nop,nop,TS val 946792 ecr 945543], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000002e
+ 54 16:32:34.625658 IP (tos 0x0, ttl 64, id 3493, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.58447 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x3880), seq 1:9, ack 8, win 86, options [nop,nop,TS val 946792 ecr 946792], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000002e
+ 55 16:32:34.625750 IP (tos 0x0, ttl 64, id 44798, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58447: Flags [.], cksum 0xfe28 (incorrect -> 0x3cb9), ack 9, win 94, options [nop,nop,TS val 946792 ecr 946792], length 0
+ 56 16:32:34.844806 IP (tos 0x0, ttl 64, id 44799, offset 0, flags [DF], proto TCP (6), length 64)
+ 127.0.0.1.6633 > 127.0.0.1.58447: Flags [P.], cksum 0xfe34 (incorrect -> 0x3760), seq 8:20, ack 9, win 94, options [nop,nop,TS val 946847 ecr 946792], length 12: OpenFlow
+ version 1.3, type SET_CONFIG, length 12, xid 0x0000002f
+ flags FRAG_REASM, miss_send_len 200
+ 57 16:32:34.883698 IP (tos 0x0, ttl 64, id 3494, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.58447 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0x3c3d), ack 20, win 86, options [nop,nop,TS val 946857 ecr 946847], length 0
+ 58 16:32:36.376083 IP (tos 0x0, ttl 64, id 44800, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.58447: Flags [P.], cksum 0xfe30 (incorrect -> 0x3667), seq 20:28, ack 9, win 94, options [nop,nop,TS val 947230 ecr 946857], length 8: OpenFlow
+ version 1.3, type GET_CONFIG_REQUEST, length 8, xid 0x00000030
+ 59 16:32:36.376174 IP (tos 0x0, ttl 64, id 3495, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.58447 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0x3941), ack 28, win 86, options [nop,nop,TS val 947230 ecr 947230], length 0
+ 60 16:32:36.378403 IP (tos 0x0, ttl 64, id 3496, offset 0, flags [DF], proto TCP (6), length 64)
+ 127.0.0.1.58447 > 127.0.0.1.6633: Flags [P.], cksum 0xfe34 (incorrect -> 0x3420), seq 9:21, ack 28, win 86, options [nop,nop,TS val 947230 ecr 947230], length 12: OpenFlow
+ version 1.3, type GET_CONFIG_REPLY, length 12, xid 0x00000030
+ flags FRAG_DROP, miss_send_len 200
+ 61 16:32:36.378465 IP (tos 0x0, ttl 64, id 44801, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58447: Flags [.], cksum 0xfe28 (incorrect -> 0x392d), ack 21, win 94, options [nop,nop,TS val 947230 ecr 947230], length 0
+ 62 17:39:10.589931 IP (tos 0x0, ttl 64, id 28700, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.58449: Flags [P.], cksum 0xfe30 (incorrect -> 0x4e78), seq 359193673:359193681, ack 3843617605, win 111, options [nop,nop,TS val 1945783 ecr 1944534], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x000000a6
+ 63 17:39:10.592125 IP (tos 0x0, ttl 64, id 24186, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.58449 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x49a6), seq 1:9, ack 8, win 86, options [nop,nop,TS val 1945784 ecr 1945783], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x000000a6
+ 64 17:39:10.592223 IP (tos 0x0, ttl 64, id 28701, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58449: Flags [.], cksum 0xfe28 (incorrect -> 0x4e45), ack 9, win 111, options [nop,nop,TS val 1945784 ecr 1945784], length 0
+ 65 17:39:11.275605 IP (tos 0x0, ttl 64, id 28702, offset 0, flags [DF], proto TCP (6), length 152)
+ 127.0.0.1.6633 > 127.0.0.1.58449: Flags [P.], cksum 0xfe8c (incorrect -> 0xaa9b), seq 8:108, ack 9, win 111, options [nop,nop,TS val 1945955 ecr 1945784], length 100: OpenFlow
+ version 1.3, type PACKET_OUT, length 100, xid 0x000000a7
+ 66 17:39:11.278453 IP (tos 0x0, ttl 64, id 24187, offset 0, flags [DF], proto TCP (6), length 206)
+ 127.0.0.1.58449 > 127.0.0.1.6633: Flags [P.], cksum 0xfec2 (incorrect -> 0xa12e), seq 9:163, ack 108, win 86, options [nop,nop,TS val 1945955 ecr 1945955], length 154: OpenFlow
+ version 1.3, type PACKET_IN, length 154, xid 0x00000000
+ 67 17:39:11.278747 IP (tos 0x0, ttl 64, id 28703, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58449: Flags [.], cksum 0xfe28 (incorrect -> 0x4bec), ack 163, win 115, options [nop,nop,TS val 1945956 ecr 1945955], length 0
+ 68 17:39:11.293620 IP (tos 0x0, ttl 64, id 28704, offset 0, flags [DF], proto TCP (6), length 152)
+ 127.0.0.1.6633 > 127.0.0.1.58449: Flags [P.], cksum 0xfe8c (incorrect -> 0xa8c9), seq 108:208, ack 163, win 115, options [nop,nop,TS val 1945959 ecr 1945955], length 100: OpenFlow
+ version 1.3, type PACKET_OUT, length 100, xid 0x000000a8
+ 69 17:39:11.296836 IP (tos 0x0, ttl 64, id 24188, offset 0, flags [DF], proto TCP (6), length 234)
+ 127.0.0.1.58449 > 127.0.0.1.6633: Flags [P.], cksum 0xfede (incorrect -> 0x2262), seq 163:345, ack 208, win 86, options [nop,nop,TS val 1945960 ecr 1945959], length 182: OpenFlow
+ version 1.3, type PACKET_IN, length 182, xid 0x00000000
+ 70 17:39:11.334896 IP (tos 0x0, ttl 64, id 28705, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58449: Flags [.], cksum 0xfe28 (incorrect -> 0x4abb), ack 345, win 119, options [nop,nop,TS val 1945970 ecr 1945960], length 0
+ 71 10:22:45.030583 IP (tos 0x0, ttl 64, id 10058, offset 0, flags [DF], proto TCP (6), length 148)
+ 127.0.0.1.6633 > 127.0.0.1.53146: Flags [P.], cksum 0xfe88 (incorrect -> 0xf671), seq 1089079797:1089079893, ack 1672614427, win 94, options [nop,nop,TS val 4009818 ecr 4009376], length 96: OpenFlow
+ version 1.3, type FLOW_MOD, length 96, xid 0x00000076
+ 72 10:22:45.067011 IP (tos 0x0, ttl 64, id 11330, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.53146 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0x6e9c), ack 96, win 86, options [nop,nop,TS val 4009828 ecr 4009818], length 0
+ 73 10:22:46.038093 IP (tos 0x0, ttl 64, id 11331, offset 0, flags [DF], proto TCP (6), length 116)
+ 127.0.0.1.53146 > 127.0.0.1.6633: Flags [P.], cksum 0xfe68 (incorrect -> 0xdcd4), seq 1:65, ack 96, win 86, options [nop,nop,TS val 4010070 ecr 4009818], length 64: OpenFlow
+ version 1.3, type FLOW_REMOVED, length 64, xid 0x00000000
+ 74 10:22:46.038127 IP (tos 0x0, ttl 64, id 10059, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.53146: Flags [.], cksum 0xfe28 (incorrect -> 0x6c66), ack 65, win 94, options [nop,nop,TS val 4010070 ecr 4010070], length 0
+ 75 13:15:24.725748 IP (tos 0x0, ttl 64, id 51120, offset 0, flags [DF], proto TCP (6), length 132)
+ 127.0.0.1.38906 > 127.0.0.1.6633: Flags [P.], cksum 0xfe78 (incorrect -> 0xadc3), seq 2781543975:2781544055, ack 1865664008, win 86, options [nop,nop,TS val 1794904 ecr 1794249], length 80: OpenFlow
+ version 1.3, type PORT_STATUS, length 80, xid 0x00000000
+ reason ADD
+ port_no 2, hw_addr ca:02:9f:af:e9:1c, name 'veth0'
+ 76 13:15:24.725788 IP (tos 0x0, ttl 64, id 64306, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.38906: Flags [.], cksum 0xfe28 (incorrect -> 0x2614), ack 80, win 94, options [nop,nop,TS val 1794904 ecr 1794904], length 0
+ 77 16:37:49.792852 IP (tos 0x0, ttl 64, id 32480, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.34845: Flags [P.], cksum 0xfe38 (incorrect -> 0x4ae9), seq 2833437351:2833437367, ack 1981193718, win 98, options [nop,nop,TS val 130273 ecr 129636], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x0000004f
+ 78 16:37:49.796567 IP (tos 0x0, ttl 64, id 16409, offset 0, flags [DF], proto TCP (6), length 1124)
+ 127.0.0.1.34845 > 127.0.0.1.6633: Flags [P.], cksum 0x0259 (incorrect -> 0x9472), seq 1:1073, ack 16, win 86, options [nop,nop,TS val 130274 ecr 130273], length 1072: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 1072, xid 0x0000004f
+ 79 16:37:49.796657 IP (tos 0x0, ttl 64, id 32481, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34845: Flags [.], cksum 0xfe28 (incorrect -> 0x48ae), ack 1073, win 103, options [nop,nop,TS val 130274 ecr 130274], length 0
+ 80 17:10:39.694164 IP (tos 0x0, ttl 64, id 18557, offset 0, flags [DF], proto TCP (6), length 116)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe68 (incorrect -> 0xc9ae), seq 1963343585:1963343649, ack 2145731315, win 105, options [nop,nop,TS val 622748 ecr 622308], length 64: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 64, xid 0x00000076
+ 81 17:10:39.695936 IP (tos 0x0, ttl 64, id 19461, offset 0, flags [DF], proto TCP (6), length 236)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0xfee0 (incorrect -> 0x89dd), seq 1:185, ack 64, win 86, options [nop,nop,TS val 622748 ecr 622748], length 184: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 184, xid 0x00000076
+ 82 17:10:39.696001 IP (tos 0x0, ttl 64, id 18558, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0x5d19), ack 185, win 109, options [nop,nop,TS val 622749 ecr 622748], length 0
+ 83 17:10:39.706507 IP (tos 0x0, ttl 64, id 18559, offset 0, flags [DF], proto TCP (6), length 116)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe68 (incorrect -> 0xc6f5), seq 64:128, ack 185, win 109, options [nop,nop,TS val 622751 ecr 622748], length 64: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 64, xid 0x00000077
+ 84 17:10:39.708491 IP (tos 0x0, ttl 64, id 19462, offset 0, flags [DF], proto TCP (6), length 92)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0xfe50 (incorrect -> 0x4e7c), seq 185:225, ack 128, win 86, options [nop,nop,TS val 622752 ecr 622751], length 40: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 40, xid 0x00000077
+ 85 17:10:39.747947 IP (tos 0x0, ttl 64, id 18560, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0x5ca0), ack 225, win 109, options [nop,nop,TS val 622762 ecr 622752], length 0
+ 86 17:20:21.268792 IP (tos 0x0, ttl 64, id 18795, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe38 (incorrect -> 0xdced), seq 1072:1088, ack 2705, win 256, options [nop,nop,TS val 768142 ecr 767309], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x000000ed
+ 87 17:20:21.270799 IP (tos 0x0, ttl 64, id 19580, offset 0, flags [DF], proto TCP (6), length 1604)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0x0439 (incorrect -> 0xedc3), seq 2705:4257, ack 1088, win 86, options [nop,nop,TS val 768142 ecr 768142], length 1552: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 1552, xid 0x000000ed
+ 88 17:20:21.270887 IP (tos 0x0, ttl 64, id 18796, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0xd8b8), ack 4257, win 254, options [nop,nop,TS val 768142 ecr 768142], length 0
+ 89 17:21:32.610984 IP (tos 0x0, ttl 64, id 18829, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe40 (incorrect -> 0x48f2), seq 1248:1272, ack 4981, win 256, options [nop,nop,TS val 785977 ecr 784870], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x000000ff
+ 90 17:21:32.614400 IP (tos 0x0, ttl 64, id 19597, offset 0, flags [DF], proto TCP (6), length 628)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0x0069 (incorrect -> 0x23f8), seq 4981:5557, ack 1272, win 86, options [nop,nop,TS val 785978 ecr 785977], length 576: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 576, xid 0x000000ff
+ 91 17:21:32.614511 IP (tos 0x0, ttl 64, id 18830, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0x4793), ack 5557, win 255, options [nop,nop,TS val 785978 ecr 785978], length 0
+ 92 17:21:32.932077 IP (tos 0x0, ttl 64, id 18831, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe30 (incorrect -> 0x4228), seq 1272:1280, ack 5557, win 256, options [nop,nop,TS val 786058 ecr 785978], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000100
+ 93 17:21:32.939513 IP (tos 0x0, ttl 64, id 19598, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x4278), seq 5557:5565, ack 1280, win 86, options [nop,nop,TS val 786059 ecr 786058], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000100
+ 94 17:21:32.939617 IP (tos 0x0, ttl 64, id 18832, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0x46e0), ack 5565, win 256, options [nop,nop,TS val 786059 ecr 786059], length 0
+ 95 17:27:12.201785 IP (tos 0x0, ttl 64, id 18969, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe40 (incorrect -> 0xa9d9), seq 1840:1864, ack 6277, win 256, options [nop,nop,TS val 870875 ecr 869809], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x00000147
+ 96 17:27:12.204185 IP (tos 0x0, ttl 64, id 19667, offset 0, flags [DF], proto TCP (6), length 228)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0xfed8 (incorrect -> 0xa1c3), seq 6277:6453, ack 1864, win 86, options [nop,nop,TS val 870876 ecr 870875], length 176: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 176, xid 0x00000147
+ 97 17:27:12.204269 IP (tos 0x0, ttl 64, id 18970, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0xaa7b), ack 6453, win 256, options [nop,nop,TS val 870876 ecr 870876], length 0
+ 98 17:27:12.931668 IP (tos 0x0, ttl 64, id 18971, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe30 (incorrect -> 0xa464), seq 1864:1872, ack 6453, win 256, options [nop,nop,TS val 871057 ecr 870876], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000148
+ 99 17:27:12.938585 IP (tos 0x0, ttl 64, id 19668, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0xa44e), seq 6453:6461, ack 1872, win 86, options [nop,nop,TS val 871059 ecr 871057], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000148
+ 100 17:27:12.938697 IP (tos 0x0, ttl 64, id 18972, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0xa8fd), ack 6461, win 256, options [nop,nop,TS val 871059 ecr 871059], length 0
+ 101 17:57:16.110186 IP (tos 0x0, ttl 64, id 16966, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.6633 > 127.0.0.1.34888: Flags [P.], cksum 0xfe40 (incorrect -> 0xcf7c), seq 555521909:555521933, ack 1543280532, win 105, options [nop,nop,TS val 1321852 ecr 1321585], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x0000001f
+ 102 17:57:16.113738 IP (tos 0x0, ttl 64, id 22868, offset 0, flags [DF], proto TCP (6), length 252)
+ 127.0.0.1.34888 > 127.0.0.1.6633: Flags [P.], cksum 0xfef0 (incorrect -> 0x3421), seq 1:201, ack 24, win 86, options [nop,nop,TS val 1321853 ecr 1321852], length 200: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 200, xid 0x0000001f
+ 103 17:57:16.113974 IP (tos 0x0, ttl 64, id 16967, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34888: Flags [.], cksum 0xfe28 (incorrect -> 0xd1f7), ack 201, win 109, options [nop,nop,TS val 1321853 ecr 1321853], length 0
+ 104 17:57:17.127188 IP (tos 0x0, ttl 64, id 16968, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.34888: Flags [P.], cksum 0xfe38 (incorrect -> 0xcc99), seq 24:40, ack 201, win 109, options [nop,nop,TS val 1322106 ecr 1321853], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x00000020
+ 105 17:57:17.129487 IP (tos 0x0, ttl 64, id 22869, offset 0, flags [DF], proto TCP (6), length 204)
+ 127.0.0.1.34888 > 127.0.0.1.6633: Flags [P.], cksum 0xfec0 (incorrect -> 0xad66), seq 201:353, ack 40, win 86, options [nop,nop,TS val 1322107 ecr 1322106], length 152: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 152, xid 0x00000020
+ 106 17:57:17.130202 IP (tos 0x0, ttl 64, id 16969, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34888: Flags [.], cksum 0xfe28 (incorrect -> 0xcf4f), ack 353, win 113, options [nop,nop,TS val 1322107 ecr 1322107], length 0
+ 107 17:57:17.869382 IP (tos 0x0, ttl 64, id 16970, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.34888: Flags [P.], cksum 0xfe38 (incorrect -> 0xca33), seq 40:56, ack 353, win 113, options [nop,nop,TS val 1322292 ecr 1322107], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x00000021
+ 108 17:57:17.871408 IP (tos 0x0, ttl 64, id 22870, offset 0, flags [DF], proto TCP (6), length 108)
+ 127.0.0.1.34888 > 127.0.0.1.6633: Flags [P.], cksum 0xfe60 (incorrect -> 0xc5b3), seq 353:409, ack 56, win 86, options [nop,nop,TS val 1322292 ecr 1322292], length 56: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 56, xid 0x00000021
+ 109 17:57:17.871493 IP (tos 0x0, ttl 64, id 16971, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34888: Flags [.], cksum 0xfe28 (incorrect -> 0xcd95), ack 409, win 113, options [nop,nop,TS val 1322292 ecr 1322292], length 0
+ 110 10:02:19.814878 IP (tos 0x0, ttl 64, id 47069, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [P.], cksum 0xfe40 (incorrect -> 0x07aa), seq 260443467:260443491, ack 382342041, win 100, options [nop,nop,TS val 344035 ecr 343141], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x00000028
+ 111 10:02:19.815701 IP (tos 0x0, ttl 64, id 47114, offset 0, flags [DF], proto TCP (6), length 196)
+ 127.0.0.1.36546 > 127.0.0.1.6633: Flags [P.], cksum 0xfeb8 (incorrect -> 0x3ff1), seq 1:145, ack 24, win 88, options [nop,nop,TS val 344035 ecr 344035], length 144: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 144, xid 0x00000028
+ 112 10:02:19.815724 IP (tos 0x0, ttl 64, id 47070, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [.], cksum 0xfe28 (incorrect -> 0x07fa), ack 145, win 105, options [nop,nop,TS val 344035 ecr 344035], length 0
+ 113 10:02:20.713618 IP (tos 0x0, ttl 64, id 47071, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [P.], cksum 0xfe40 (incorrect -> 0x029c), seq 24:48, ack 145, win 105, options [nop,nop,TS val 344260 ecr 344035], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x00000029
+ 114 10:02:20.714133 IP (tos 0x0, ttl 64, id 47115, offset 0, flags [DF], proto TCP (6), length 132)
+ 127.0.0.1.36546 > 127.0.0.1.6633: Flags [P.], cksum 0xfe78 (incorrect -> 0xfe54), seq 145:225, ack 48, win 88, options [nop,nop,TS val 344260 ecr 344260], length 80: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 80, xid 0x00000029
+ 115 10:02:20.714160 IP (tos 0x0, ttl 64, id 47072, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [.], cksum 0xfe28 (incorrect -> 0x05d0), ack 225, win 105, options [nop,nop,TS val 344260 ecr 344260], length 0
+ 116 10:02:21.229978 IP (tos 0x0, ttl 64, id 47073, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [P.], cksum 0xfe30 (incorrect -> 0x010b), seq 48:56, ack 225, win 105, options [nop,nop,TS val 344389 ecr 344260], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000002a
+ 117 10:02:21.231013 IP (tos 0x0, ttl 64, id 47116, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.36546 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x0092), seq 225:233, ack 56, win 88, options [nop,nop,TS val 344389 ecr 344389], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000002a
+ 118 10:02:21.231044 IP (tos 0x0, ttl 64, id 47074, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [.], cksum 0xfe28 (incorrect -> 0x04be), ack 233, win 105, options [nop,nop,TS val 344389 ecr 344389], length 0
+ 119 10:02:21.852874 IP (tos 0x0, ttl 64, id 47075, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [P.], cksum 0xfe38 (incorrect -> 0xffb1), seq 56:72, ack 233, win 105, options [nop,nop,TS val 344545 ecr 344389], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x0000002b
+ 120 10:02:21.853489 IP (tos 0x0, ttl 64, id 47117, offset 0, flags [DF], proto TCP (6), length 84)
+ 127.0.0.1.36546 > 127.0.0.1.6633: Flags [P.], cksum 0xfe48 (incorrect -> 0xeddf), seq 233:265, ack 72, win 88, options [nop,nop,TS val 344545 ecr 344545], length 32: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 32, xid 0x0000002b
+ 121 10:02:21.853515 IP (tos 0x0, ttl 64, id 47076, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [.], cksum 0xfe28 (incorrect -> 0x0356), ack 265, win 105, options [nop,nop,TS val 344545 ecr 344545], length 0
+ 122 10:30:09.945368 IP (tos 0x0, ttl 64, id 54874, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [P.], cksum 0xfe30 (incorrect -> 0x68f4), seq 3359330522:3359330530, ack 3471458557, win 256, options [nop,nop,TS val 761568 ecr 760318], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000000d
+ 123 10:30:09.946140 IP (tos 0x0, ttl 64, id 56416, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x64b3), seq 1:9, ack 8, win 86, options [nop,nop,TS val 761568 ecr 761568], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000000d
+ 124 10:30:09.946173 IP (tos 0x0, ttl 64, id 54875, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0x6829), ack 9, win 256, options [nop,nop,TS val 761568 ecr 761568], length 0
+ 125 10:30:10.672306 IP (tos 0x0, ttl 64, id 54876, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [P.], cksum 0xfe38 (incorrect -> 0x6320), seq 8:24, ack 9, win 256, options [nop,nop,TS val 761749 ecr 761568], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x0000000e
+ 126 10:30:10.673261 IP (tos 0x0, ttl 64, id 56417, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0x30af), seq 9:11801, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761749], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 127 10:30:10.673292 IP (tos 0x0, ttl 64, id 54877, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0x38a9), ack 11801, win 244, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 128 10:30:10.675065 IP (tos 0x0, ttl 64, id 56418, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0xc66e), seq 11801:23593, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 129 10:30:10.675124 IP (tos 0x0, ttl 64, id 54878, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0x0a99), ack 23593, win 244, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 130 10:30:10.675159 IP (tos 0x0, ttl 64, id 56419, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0x62e9), seq 23593:35385, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 131 10:30:10.675174 IP (tos 0x0, ttl 64, id 54879, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0xdc94), ack 35385, win 232, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 132 10:30:10.675194 IP (tos 0x0, ttl 64, id 56420, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0xeed4), seq 35385:47177, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 133 10:30:10.675206 IP (tos 0x0, ttl 64, id 54880, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0xae91), ack 47177, win 219, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 134 10:30:10.675226 IP (tos 0x0, ttl 64, id 56421, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0x7ac0), seq 47177:58969, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 135 10:30:10.675238 IP (tos 0x0, ttl 64, id 54881, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0x808d), ack 58969, win 207, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 136 10:30:10.675257 IP (tos 0x0, ttl 64, id 56422, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0x04c0), seq 58969:70761, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 137 10:30:10.675294 IP (tos 0x0, ttl 64, id 56423, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0x90ab), seq 70761:82553, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 138 10:30:10.675314 IP (tos 0x0, ttl 64, id 56424, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0x1c98), seq 82553:94345, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 139 10:30:10.675325 IP (tos 0x0, ttl 64, id 54882, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0x2486), ack 82553, win 182, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 140 10:30:10.712539 IP (tos 0x0, ttl 64, id 54883, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0xf621), ack 94345, win 256, options [nop,nop,TS val 761760 ecr 761750], length 0
+ 141 10:46:50.838754 IP (tos 0x0, ttl 64, id 46973, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.36548: Flags [P.], cksum 0xfe38 (incorrect -> 0x2338), seq 75556183:75556199, ack 3751019041, win 98, options [nop,nop,TS val 1011791 ecr 1010724], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x0000000d
+ 142 10:46:50.839431 IP (tos 0x0, ttl 64, id 43209, offset 0, flags [DF], proto TCP (6), length 388)
+ 127.0.0.1.36548 > 127.0.0.1.6633: Flags [P.], cksum 0xff78 (incorrect -> 0x0f3d), seq 1:337, ack 16, win 86, options [nop,nop,TS val 1011791 ecr 1011791], length 336: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 336, xid 0x0000000d
+ 143 10:46:50.839471 IP (tos 0x0, ttl 64, id 46974, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36548: Flags [.], cksum 0xfe28 (incorrect -> 0x21fc), ack 337, win 103, options [nop,nop,TS val 1011791 ecr 1011791], length 0
+ 144 19:45:16.495434 IP (tos 0x0, ttl 64, id 17712, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [P.], cksum 0xfe30 (incorrect -> 0xe6e3), seq 1323837391:1323837399, ack 1278624979, win 94, options [nop,nop,TS val 6181422 ecr 6180173], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000006d
+ 145 19:45:16.496030 IP (tos 0x0, ttl 64, id 23686, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.51984 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0xe200), seq 1:9, ack 8, win 86, options [nop,nop,TS val 6181423 ecr 6181422], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000006d
+ 146 19:45:16.496057 IP (tos 0x0, ttl 64, id 17713, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [.], cksum 0xfe28 (incorrect -> 0xe677), ack 9, win 94, options [nop,nop,TS val 6181423 ecr 6181423], length 0
+ 147 19:45:17.176752 IP (tos 0x0, ttl 64, id 17714, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [P.], cksum 0xfe38 (incorrect -> 0xe026), seq 8:24, ack 9, win 94, options [nop,nop,TS val 6181593 ecr 6181423], length 16: OpenFlow
+ version 1.3, type TABLE_MOD, length 16, xid 0x0000006e
+ table_id 1, config 0x00000000
+ 148 19:45:17.215970 IP (tos 0x0, ttl 64, id 23687, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.51984 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xe511), ack 24, win 86, options [nop,nop,TS val 6181603 ecr 6181593], length 0
+ 149 19:53:23.472776 IP (tos 0x0, ttl 64, id 17917, offset 0, flags [DF], proto TCP (6), length 92)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [P.], cksum 0xfe50 (incorrect -> 0xb18a), seq 936:976, ack 1361, win 98, options [nop,nop,TS val 6303167 ecr 6302673], length 40: OpenFlow
+ version 1.3, type PORT_MOD, length 40, xid 0x000000d4
+ port_no 1, hw_addr 0a:ea:83:10:db:09
+ config 0x00000040 (NO_PACKET_IN)
+ mask 0x00000040 (NO_PACKET_IN)
+ advertise 0x0000080a (10MB_FD, 100MB_FD, COPPER)
+ 150 19:53:23.473744 IP (tos 0x0, ttl 64, id 23790, offset 0, flags [DF], proto TCP (6), length 132)
+ 127.0.0.1.51984 > 127.0.0.1.6633: Flags [P.], cksum 0xfe78 (incorrect -> 0x92a0), seq 1361:1441, ack 976, win 86, options [nop,nop,TS val 6303167 ecr 6303167], length 80: OpenFlow
+ version 1.3, type PORT_STATUS, length 80, xid 0x00000000
+ reason MODIFY
+ port_no 1, hw_addr 0a:ea:83:10:db:09, name 'veth0'
+ 151 19:53:23.473777 IP (tos 0x0, ttl 64, id 17918, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [.], cksum 0xfe28 (incorrect -> 0x25f0), ack 1441, win 98, options [nop,nop,TS val 6303167 ecr 6303167], length 0
+ 152 19:55:19.511983 IP (tos 0x0, ttl 64, id 17967, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [P.], cksum 0xfe30 (incorrect -> 0x3fa5), seq 1168:1176, ack 1633, win 98, options [nop,nop,TS val 6332177 ecr 6331422], length 8: OpenFlow
+ version 1.3, type BARRIER_REQUEST, length 8, xid 0x000000ed
+ 153 19:55:19.513048 IP (tos 0x0, ttl 64, id 23815, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.51984 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x3cb5), seq 1633:1641, ack 1176, win 86, options [nop,nop,TS val 6332177 ecr 6332177], length 8: OpenFlow
+ version 1.3, type BARRIER_REPLY, length 8, xid 0x000000ed
+ 154 19:55:19.513081 IP (tos 0x0, ttl 64, id 17968, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [.], cksum 0xfe28 (incorrect -> 0x41bb), ack 1641, win 98, options [nop,nop,TS val 6332177 ecr 6332177], length 0
+ 155 20:10:12.609713 IP (tos 0x0, ttl 64, id 45627, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], cksum 0xfe30 (incorrect -> 0x8da8), seq 2129684753:2129684761, ack 2572383599, win 96, options [nop,nop,TS val 6555451 ecr 6554199], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000007d
+ 156 20:10:12.610357 IP (tos 0x0, ttl 64, id 49206, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x88c5), seq 1:9, ack 8, win 86, options [nop,nop,TS val 6555451 ecr 6555451], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000007d
+ 157 20:10:12.610382 IP (tos 0x0, ttl 64, id 45628, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], cksum 0xfe28 (incorrect -> 0x8d4b), ack 9, win 96, options [nop,nop,TS val 6555451 ecr 6555451], length 0
+ 158 20:10:13.364783 IP (tos 0x0, ttl 64, id 45629, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], cksum 0xfe38 (incorrect -> 0x87d1), seq 8:24, ack 9, win 96, options [nop,nop,TS val 6555640 ecr 6555451], length 16: OpenFlow
+ version 1.3, type QUEUE_GET_CONFIG_REQUEST, length 16, xid 0x0000007e
+ port 1
+ 159 20:10:13.366754 IP (tos 0x0, ttl 64, id 49207, offset 0, flags [DF], proto TCP (6), length 132)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], cksum 0xfe78 (incorrect -> 0x80dc), seq 9:89, ack 24, win 86, options [nop,nop,TS val 6555640 ecr 6555640], length 80: OpenFlow
+ version 1.3, type QUEUE_GET_CONFIG_REPLY, length 80, xid 0x0000007e
+ 160 20:10:13.366788 IP (tos 0x0, ttl 64, id 45630, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], cksum 0xfe28 (incorrect -> 0x8b71), ack 89, win 96, options [nop,nop,TS val 6555640 ecr 6555640], length 0
+ 161 20:24:40.574081 IP (tos 0x0, ttl 64, id 45979, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], cksum 0xfe40 (incorrect -> 0xba52), seq 1432:1456, ack 1497, win 96, options [nop,nop,TS val 6772442 ecr 6771701], length 24: OpenFlow
+ version 1.3, type ROLE_REQUEST, length 24, xid 0x0000012f
+ role MASTER, generation_id 0x00000000012e248a
+ 162 20:24:40.574726 IP (tos 0x0, ttl 64, id 49382, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], cksum 0xfe40 (incorrect -> 0xb75e), seq 1497:1521, ack 1456, win 86, options [nop,nop,TS val 6772442 ecr 6772442], length 24: OpenFlow
+ version 1.3, type ROLE_REPLY, length 24, xid 0x0000012f
+ role MASTER, generation_id 0x00000000012e248a
+ 163 20:24:40.574748 IP (tos 0x0, ttl 64, id 45980, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], cksum 0xfe28 (incorrect -> 0xe276), ack 1521, win 96, options [nop,nop,TS val 6772442 ecr 6772442], length 0
+ 164 20:28:52.608224 IP (tos 0x0, ttl 64, id 46086, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], cksum 0xfe30 (incorrect -> 0xf205), seq 1904:1912, ack 1985, win 96, options [nop,nop,TS val 6835451 ecr 6834201], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000165
+ 165 20:28:52.609219 IP (tos 0x0, ttl 64, id 49437, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0xed24), seq 1985:1993, ack 1912, win 86, options [nop,nop,TS val 6835451 ecr 6835451], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000165
+ 166 20:28:52.609246 IP (tos 0x0, ttl 64, id 46087, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], cksum 0xfe28 (incorrect -> 0xf292), ack 1993, win 96, options [nop,nop,TS val 6835451 ecr 6835451], length 0
+ 167 20:28:54.103683 IP (tos 0x0, ttl 64, id 46088, offset 0, flags [DF], proto TCP (6), length 84)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], cksum 0xfe48 (incorrect -> 0xeb3a), seq 1912:1944, ack 1993, win 96, options [nop,nop,TS val 6835824 ecr 6835451], length 32: OpenFlow
+ version 1.3, type SET_ASYNC, length 32, xid 0x00000166
+ packet_in_mask[EM] 0x00000003 (NO_MATCH, ACTION)
+ packet_in_mask[S] 0x00000002 (ACTION)
+ port_status_mask[EM] 0x00000007 (ADD, DELETE, MODIFY)
+ port_status_mask[S] 0x00000002 (DELETE)
+ flow_removed_mask[EM] 0x00000007 (ADD, DELETE, MODIFY)
+ flow_removed_mask[S] 0x00000004 (MODIFY)
+ 168 20:28:54.140673 IP (tos 0x0, ttl 64, id 49438, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xef88), ack 1944, win 86, options [nop,nop,TS val 6835834 ecr 6835824], length 0
+ 169 20:28:56.308694 IP (tos 0x0, ttl 64, id 46089, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], cksum 0xfe30 (incorrect -> 0xe7bd), seq 1944:1952, ack 1993, win 96, options [nop,nop,TS val 6836376 ecr 6835834], length 8: OpenFlow
+ version 1.3, type GET_ASYNC_REQUEST, length 8, xid 0x00000167
+ 170 20:28:56.308754 IP (tos 0x0, ttl 64, id 49439, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xeb3a), ack 1952, win 86, options [nop,nop,TS val 6836376 ecr 6836376], length 0
+ 171 20:28:56.309209 IP (tos 0x0, ttl 64, id 49440, offset 0, flags [DF], proto TCP (6), length 84)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], cksum 0xfe48 (incorrect -> 0xe557), seq 1993:2025, ack 1952, win 86, options [nop,nop,TS val 6836376 ecr 6836376], length 32: OpenFlow
+ version 1.3, type GET_ASYNC_REPLY, length 32, xid 0x00000167
+ packet_in_mask[EM] 0x00000003 (NO_MATCH, ACTION)
+ packet_in_mask[S] 0x00000002 (ACTION)
+ port_status_mask[EM] 0x00000007 (ADD, DELETE, MODIFY)
+ port_status_mask[S] 0x00000002 (DELETE)
+ flow_removed_mask[EM] 0x00000007 (ADD, DELETE, MODIFY)
+ flow_removed_mask[S] 0x00000004 (MODIFY)
+ 172 20:28:56.309230 IP (tos 0x0, ttl 64, id 46090, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], cksum 0xfe28 (incorrect -> 0xeb10), ack 2025, win 96, options [nop,nop,TS val 6836376 ecr 6836376], length 0
+ 173 20:37:22.358712 IP (tos 0x0, ttl 64, id 18246, offset 0, flags [DF], proto TCP (6), length 100)
+ 127.0.0.1.6633 > 127.0.0.1.51989: Flags [P.], cksum 0xfe58 (incorrect -> 0x9b52), seq 1436436734:1436436782, ack 2087738396, win 96, options [nop,nop,TS val 6962888 ecr 6961981], length 48: OpenFlow
+ version 1.3, type METER_MOD, length 48, xid 0x00000010
+ 174 20:37:22.396699 IP (tos 0x0, ttl 64, id 23571, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.51989 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0x9d9e), ack 48, win 86, options [nop,nop,TS val 6962898 ecr 6962888], length 0
diff --git a/tests/of13_ericsson-vv.out b/tests/of13_ericsson-vv.out
new file mode 100644
index 0000000..6020594
--- /dev/null
+++ b/tests/of13_ericsson-vv.out
@@ -0,0 +1,556 @@
+ 1 15:52:49.322823 IP (tos 0x0, ttl 64, id 348, offset 0, flags [DF], proto TCP (6), length 236)
+ 127.0.0.1.6633 > 127.0.0.1.35359: Flags [P.], cksum 0xfee0 (incorrect -> 0x21d3), seq 3305197767:3305197951, ack 3938018648, win 100, options [nop,nop,TS val 534888 ecr 533649], length 184: OpenFlow
+ version 1.3, type FLOW_MOD, length 184, xid 0x00000199
+ 2 15:52:49.362355 IP (tos 0x0, ttl 64, id 61731, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.35359 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0x1ad3), seq 1, ack 184, win 98, options [nop,nop,TS val 534898 ecr 534888], length 0
+ 3 15:52:49.367093 IP (tos 0x0, ttl 64, id 349, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.35359: Flags [P.], cksum 0xfe30 (incorrect -> 0x1512), seq 184:192, ack 1, win 100, options [nop,nop,TS val 534899 ecr 534898], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000019a
+ 4 15:52:49.367137 IP (tos 0x0, ttl 64, id 61732, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.35359 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0x1abf), seq 1, ack 192, win 98, options [nop,nop,TS val 534899 ecr 534899], length 0
+ 5 15:52:49.367403 IP (tos 0x0, ttl 64, id 61733, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.35359 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x150a), seq 1:9, ack 192, win 98, options [nop,nop,TS val 534899 ecr 534899], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000019a
+ 6 15:52:49.367421 IP (tos 0x0, ttl 64, id 350, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.35359: Flags [.], cksum 0xfe28 (incorrect -> 0x1ab5), seq 192, ack 9, win 100, options [nop,nop,TS val 534899 ecr 534899], length 0
+ 7 12:15:37.979676 IP (tos 0x0, ttl 64, id 46225, offset 0, flags [DF], proto TCP (6), length 420)
+ 127.0.0.1.6633 > 127.0.0.1.43230: Flags [P.], cksum 0xff98 (incorrect -> 0xd79d), seq 402287444:402287812, ack 1282739451, win 98, options [nop,nop,TS val 2953476 ecr 2952724], length 368: OpenFlow
+ version 1.3, type FLOW_MOD, length 368, xid 0x00000012
+ 8 12:15:37.985455 IP (tos 0x0, ttl 64, id 55504, offset 0, flags [DF], proto TCP (6), length 432)
+ 127.0.0.1.43230 > 127.0.0.1.6633: Flags [P.], cksum 0xffa4 (incorrect -> 0xcda4), seq 1:381, ack 368, win 90, options [nop,nop,TS val 2953478 ecr 2953476], length 380: OpenFlow
+ version 1.3, type ERROR, length 380, xid 0x00000012
+ type BAD_ACTION, code BAD_EXPERIMENTER
+ data (368 octets)
+ 0x0000: 040e 0170 0000 0012 0000 0000 0001 e240 ...p...........@
+ 0x0010: 0000 0000 0009 fbf1 2a00 03e8 07d0 01f4 ........*.......
+ 0x0020: ffff ffff ffff ffff ffff ffff 0000 0000 ................
+ 0x0030: 0001 006d 8000 0004 0000 0001 8000 0204 ...m............
+ 0x0040: 0000 0002 8000 0510 0102 0304 0000 0000 ................
+ 0x0050: 0000 0000 ffff ffff 8000 0606 0a0b 0c0d ................
+ 0x0060: 0e0f 8000 0806 8f8e 8d8c 8b8a 8000 0a02 ................
+ 0x0070: 0800 8000 0c02 03e8 8000 1401 0680 0016 ................
+ 0x0080: 04c0 a801 0180 0019 08c0 a802 0000 0000 ................
+ 0x0090: ff80 001a 0203 e880 001c 0200 5000 0000 ............P...
+ 0x00a0: 0003 0070 0000 0000 0000 0010 0000 0001 ...p............
+ 0x00b0: 0080 0000 0000 0000 0000 0010 0000 0001 ................
+ 0x00c0: ffff 0000 0000 0000 0016 0008 0000 03e8 ................
+ 0x00d0: 0015 0008 0000 07d0 000f 0008 0500 0000 ................
+ 0x00e0: 0010 0008 0000 0000 0017 0008 0500 0000 ................
+ 0x00f0: 0018 0008 0000 0000 000b 0008 0000 0000 ................
+ 0x0100: ffff 0010 00d0 f0db 0001 0203 0405 0607 ................
+ 0x0110: 0004 0060 0000 0000 000c 0008 0000 0000 ...`............
+ 0x0120: 0011 0008 0800 0000 0012 0008 0000 0000 ................
+ 0x0130: 0013 0008 8847 0000 0014 0008 86dd 0000 .....G..........
+ 0x0140: 001a 0008 88a8 0000 0019 0010 8000 1604 ................
+ 0x0150: c0a8 0a01 0000 0000 0019 0018 8000 3610 ..............6.
+ 0x0160: 2001 4860 4860 0000 0000 0000 0000 8888 ..H`H`..........
+ 9 12:15:37.985482 IP (tos 0x0, ttl 64, id 46226, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.43230: Flags [.], cksum 0xfe28 (incorrect -> 0xb37b), seq 368, ack 381, win 103, options [nop,nop,TS val 2953478 ecr 2953478], length 0
+ 10 14:53:56.336558 IP (tos 0x0, ttl 64, id 63838, offset 0, flags [DF], proto TCP (6), length 172)
+ 127.0.0.1.6633 > 127.0.0.1.56562: Flags [P.], cksum 0xfea0 (incorrect -> 0x8c0a), seq 4055369935:4055370055, ack 963939871, win 94, options [nop,nop,TS val 3963146 ecr 3962600], length 120: OpenFlow
+ version 1.3, type GROUP_MOD, length 120, xid 0x0000008a
+ 11 14:53:56.339805 IP (tos 0x0, ttl 64, id 30929, offset 0, flags [DF], proto TCP (6), length 184)
+ 127.0.0.1.56562 > 127.0.0.1.6633: Flags [P.], cksum 0xfeac (incorrect -> 0x8455), seq 1:133, ack 120, win 86, options [nop,nop,TS val 3963147 ecr 3963146], length 132: OpenFlow
+ version 1.3, type ERROR, length 132, xid 0x0000008a
+ type GROUP_MOD_FAILED, code INVALID_GROUP
+ data (120 octets)
+ 0x0000: 040f 0078 0000 008a 0001 0300 0000 1388 ...x............
+ 0x0010: 0030 0064 ffff ffff ffff ffff 0000 0000 .0.d............
+ 0x0020: 0000 0010 0000 0001 ffff 0000 0000 0000 ................
+ 0x0030: 0016 0008 0000 03e8 0015 0008 0000 07d0 ................
+ 0x0040: 0028 0064 0000 1388 ffff ffff 0000 0000 .(.d............
+ 0x0050: 0017 0008 0500 0000 0018 0008 0000 0000 ................
+ 0x0060: 000b 0008 0000 0000 0010 0064 ffff ffff ...........d....
+ 0x0070: 0000 0064 0000 0000 ...d....
+ 12 14:53:56.339839 IP (tos 0x0, ttl 64, id 63839, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.56562: Flags [.], cksum 0xfe28 (incorrect -> 0xcbd6), seq 120, ack 133, win 98, options [nop,nop,TS val 3963147 ecr 3963147], length 0
+ 13 07:06:07.923021 IP (tos 0x0, ttl 64, id 53050, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.56439 > 127.0.0.1.6633: Flags [S], cksum 0xfe30 (incorrect -> 0x17bd), seq 2797182347, win 43690, options [mss 65495,sackOK,TS val 1659569 ecr 0,nop,wscale 9], length 0
+ 14 07:06:07.923406 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
+ 127.0.0.1.6633 > 127.0.0.1.56439: Flags [R.], cksum 0x7727 (correct), seq 0, ack 2797182348, win 0, length 0
+ 15 07:06:11.948050 IP (tos 0x0, ttl 64, id 25056, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [S], cksum 0xfe30 (incorrect -> 0x9014), seq 2428319552, win 43690, options [mss 65495,sackOK,TS val 1660576 ecr 0,nop,wscale 9], length 0
+ 16 07:06:11.948123 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.56440: Flags [S.], cksum 0xfe30 (incorrect -> 0xf3ee), seq 2308881340, ack 2428319553, win 43690, options [mss 65495,sackOK,TS val 1660576 ecr 1660576,nop,wscale 9], length 0
+ 17 07:06:11.948171 IP (tos 0x0, ttl 64, id 25057, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xc735), seq 1, ack 1, win 86, options [nop,nop,TS val 1660576 ecr 1660576], length 0
+ 18 07:06:11.948588 IP (tos 0x0, ttl 64, id 25058, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0xc10f), seq 1:9, ack 1, win 86, options [nop,nop,TS val 1660576 ecr 1660576], length 8: OpenFlow
+ version 1.3, type HELLO, length 8, xid 0x83ea7e23
+ 19 07:06:11.948646 IP (tos 0x0, ttl 64, id 60701, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.56440: Flags [.], cksum 0xfe28 (incorrect -> 0xc72d), seq 1, ack 9, win 86, options [nop,nop,TS val 1660576 ecr 1660576], length 0
+ 20 07:06:11.951581 IP (tos 0x0, ttl 64, id 60702, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.56440: Flags [P.], cksum 0xfe30 (incorrect -> 0x5426), seq 1:9, ack 9, win 86, options [nop,nop,TS val 1660577 ecr 1660576], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0x95b6dc37
+ 21 07:06:11.951654 IP (tos 0x0, ttl 64, id 25059, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xc723), seq 9, ack 9, win 86, options [nop,nop,TS val 1660577 ecr 1660577], length 0
+ 22 07:06:11.954851 IP (tos 0x0, ttl 64, id 25060, offset 0, flags [DF], proto TCP (6), length 150)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [P.], cksum 0xfe8a (incorrect -> 0x83b9), seq 9:107, ack 9, win 86, options [nop,nop,TS val 1660577 ecr 1660577], length 98: OpenFlow
+ version 1.3, type ERROR, length 98, xid 0xc4420f26
+ type HELLO_FAILED, code INCOMPATIBLE
+ data (86 octets)
+ 0x0000: 5765 2073 7570 706f 7274 2076 6572 7369 We.support.versi
+ 0x0010: 6f6e 7320 3078 3034 2074 6f20 3078 3034 ons.0x04.to.0x04
+ 0x0020: 2069 6e63 6c75 7369 7665 2062 7574 2079 .inclusive.but.y
+ 0x0030: 6f75 2073 7570 706f 7274 206e 6f20 6c61 ou.support.no.la
+ 0x0040: 7465 7220 7468 616e 2076 6572 7369 6f6e ter.than.version
+ 0x0050: 2030 7830 312e .0x01.
+ 23 07:06:11.956875 IP (tos 0x0, ttl 64, id 25061, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [F.], cksum 0xfe28 (incorrect -> 0xc6bf), seq 107, ack 9, win 86, options [nop,nop,TS val 1660578 ecr 1660577], length 0
+ 24 07:06:11.995263 IP (tos 0x0, ttl 64, id 60703, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.56440: Flags [.], cksum 0xfe28 (incorrect -> 0xc6b5), seq 9, ack 108, win 86, options [nop,nop,TS val 1660588 ecr 1660577], length 0
+ 25 07:06:11.996996 IP (tos 0x0, ttl 64, id 60704, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.56440: Flags [P.], cksum 0xfe30 (incorrect -> 0xc22e), seq 9:17, ack 108, win 86, options [nop,nop,TS val 1660588 ecr 1660577], length 8: OpenFlow
+ version 1.0, type FEATURES_REQUEST, length 8, xid 0x852f7e3a
+ 26 07:06:11.997117 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
+ 127.0.0.1.56440 > 127.0.0.1.6633: Flags [R], cksum 0xf312 (correct), seq 2428319660, win 0, length 0
+ 27 20:23:02.447284 IP (tos 0x0, ttl 64, id 5822, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.37123: Flags [P.], cksum 0xfe30 (incorrect -> 0xc972), seq 3295811422:3295811430, ack 623716506, win 94, options [nop,nop,TS val 683124 ecr 682086], length 8: OpenFlow
+ version 1.3, type HELLO, length 8, xid 0x0000015f
+ 28 20:23:02.487886 IP (tos 0x0, ttl 64, id 541, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.37123 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xcad0), seq 1, ack 8, win 86, options [nop,nop,TS val 683135 ecr 683124], length 0
+ 29 20:23:03.289931 IP (tos 0x0, ttl 64, id 5823, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.37123: Flags [P.], cksum 0xfe30 (incorrect -> 0xc47b), seq 8:16, ack 1, win 94, options [nop,nop,TS val 683335 ecr 683135], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000160
+ 30 20:23:03.290134 IP (tos 0x0, ttl 64, id 542, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.37123 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xc92d), seq 1, ack 16, win 86, options [nop,nop,TS val 683335 ecr 683335], length 0
+ 31 20:23:03.292620 IP (tos 0x0, ttl 64, id 543, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.37123 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0xc3b1), seq 1:9, ack 16, win 86, options [nop,nop,TS val 683336 ecr 683335], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000160
+ 32 20:23:03.292690 IP (tos 0x0, ttl 64, id 5824, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.37123: Flags [.], cksum 0xfe28 (incorrect -> 0xc91b), seq 16, ack 9, win 94, options [nop,nop,TS val 683336 ecr 683336], length 0
+ 33 20:23:03.674363 IP (tos 0x0, ttl 64, id 5825, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.37123: Flags [P.], cksum 0xfe38 (incorrect -> 0xc315), seq 16:32, ack 9, win 94, options [nop,nop,TS val 683431 ecr 683336], length 16: OpenFlow
+ version 1.3, type HELLO, length 16, xid 0x00000161
+ type VERSIONBITMAP, length 8, bitmap 0x00000015 (1.0, 1.2, 1.4)
+ 34 20:23:03.711246 IP (tos 0x0, ttl 64, id 544, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.37123 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xc84b), seq 9, ack 32, win 86, options [nop,nop,TS val 683441 ecr 683431], length 0
+ 35 09:18:28.508689 IP (tos 0x0, ttl 64, id 8726, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.52621: Flags [P.], cksum 0xfe30 (incorrect -> 0x5466), seq 2774334230:2774334238, ack 3518786755, win 94, options [nop,nop,TS val 2174690 ecr 2173441], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000004d
+ 36 09:18:28.512206 IP (tos 0x0, ttl 64, id 48675, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.52621 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x4f83), seq 1:9, ack 8, win 86, options [nop,nop,TS val 2174691 ecr 2174690], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000004d
+ 37 09:18:28.512310 IP (tos 0x0, ttl 64, id 8727, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.52621: Flags [.], cksum 0xfe28 (incorrect -> 0x53da), seq 8, ack 9, win 94, options [nop,nop,TS val 2174691 ecr 2174691], length 0
+ 38 09:18:29.938866 IP (tos 0x0, ttl 64, id 8728, offset 0, flags [DF], proto TCP (6), length 73)
+ 127.0.0.1.6633 > 127.0.0.1.52621: Flags [P.], cksum 0xfe3d (incorrect -> 0x23cf), seq 8:29, ack 9, win 94, options [nop,nop,TS val 2175048 ecr 2174691], length 21: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 21, xid 0x0000004e
+ data (13 octets)
+ 0x0000: 0001 0203 0405 0607 0809 0a0b 0c .............
+ 39 09:18:29.940525 IP (tos 0x0, ttl 64, id 48676, offset 0, flags [DF], proto TCP (6), length 73)
+ 127.0.0.1.52621 > 127.0.0.1.6633: Flags [P.], cksum 0xfe3d (incorrect -> 0x225c), seq 9:30, ack 29, win 86, options [nop,nop,TS val 2175048 ecr 2175048], length 21: OpenFlow
+ version 1.3, type ECHO_REPLY, length 21, xid 0x0000004e
+ data (13 octets)
+ 0x0000: 0001 0203 0405 0607 0809 0a0b 0c .............
+ 40 09:18:29.940621 IP (tos 0x0, ttl 64, id 8729, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.52621: Flags [.], cksum 0xfe28 (incorrect -> 0x50e6), seq 29, ack 30, win 94, options [nop,nop,TS val 2175048 ecr 2175048], length 0
+ 41 15:41:10.777155 IP (tos 0x0, ttl 64, id 14454, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [P.], cksum 0xfe38 (incorrect -> 0x994a), seq 2142345193:2142345209, ack 115176160, win 94, options [nop,nop,TS val 175830 ecr 174634], length 16: OpenFlow
+ version 1.3, type EXPERIMENTER, length 16, xid 0x00000041
+ experimenter 0x00d0f0db (Ericsson), exp_type 0x00000065
+ 42 15:41:10.782182 IP (tos 0x0, ttl 64, id 51401, offset 0, flags [DF], proto TCP (6), length 80)
+ 127.0.0.1.58445 > 127.0.0.1.6633: Flags [P.], cksum 0xfe44 (incorrect -> 0x9024), seq 1:29, ack 16, win 86, options [nop,nop,TS val 175831 ecr 175830], length 28: OpenFlow
+ version 1.3, type ERROR, length 28, xid 0x00000041
+ type BAD_REQUEST, code BAD_LEN
+ data (16 octets)
+ 0x0000: 0404 0010 0000 0041 00d0 f0db 0000 0065 .......A.......e
+ 43 15:41:10.782279 IP (tos 0x0, ttl 64, id 14455, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [.], cksum 0xfe28 (incorrect -> 0x8aee), seq 16, ack 29, win 94, options [nop,nop,TS val 175831 ecr 175831], length 0
+ 44 15:41:10.978145 IP (tos 0x0, ttl 64, id 14456, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [P.], cksum 0xfe30 (incorrect -> 0x8661), seq 16:24, ack 29, win 94, options [nop,nop,TS val 175880 ecr 175831], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000042
+ 45 15:41:10.981725 IP (tos 0x0, ttl 64, id 51402, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.58445 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x862e), seq 29:37, ack 24, win 86, options [nop,nop,TS val 175881 ecr 175880], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000042
+ 46 15:41:10.981828 IP (tos 0x0, ttl 64, id 14457, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [.], cksum 0xfe28 (incorrect -> 0x8a7a), seq 24, ack 37, win 94, options [nop,nop,TS val 175881 ecr 175881], length 0
+ 47 15:41:11.640555 IP (tos 0x0, ttl 64, id 14458, offset 0, flags [DF], proto TCP (6), length 85)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [P.], cksum 0xfe49 (incorrect -> 0x4af3), seq 24:57, ack 37, win 94, options [nop,nop,TS val 176046 ecr 175881], length 33: OpenFlow
+ version 1.3, type EXPERIMENTER, length 33, xid 0x00000043
+ experimenter 0x00d0f0db (Ericsson), exp_type 0x00000065
+ data (17 octets)
+ 0x0000: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ................
+ 0x0010: 10 .
+ 48 15:41:11.649632 IP (tos 0x0, ttl 64, id 51403, offset 0, flags [DF], proto TCP (6), length 97)
+ 127.0.0.1.58445 > 127.0.0.1.6633: Flags [P.], cksum 0xfe55 (incorrect -> 0x45af), seq 37:82, ack 57, win 86, options [nop,nop,TS val 176048 ecr 176046], length 45: OpenFlow
+ version 1.3, type ERROR, length 45, xid 0x00000043
+ type BAD_REQUEST, code BAD_LEN
+ data (33 octets)
+ 0x0000: 0404 0021 0000 0043 00d0 f0db 0000 0065 ...!...C.......e
+ 0x0010: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ................
+ 0x0020: 10 .
+ 49 15:41:11.649721 IP (tos 0x0, ttl 64, id 14459, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [.], cksum 0xfe28 (incorrect -> 0x88de), seq 57, ack 82, win 94, options [nop,nop,TS val 176048 ecr 176048], length 0
+ 50 15:47:18.960105 IP (tos 0x0, ttl 64, id 14608, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [P.], cksum 0xfe30 (incorrect -> 0xb4f6), seq 649:657, ack 698, win 94, options [nop,nop,TS val 267876 ecr 267134], length 8: OpenFlow
+ version 1.3, type FEATURES_REQUEST, length 8, xid 0x0000008e
+ 51 15:47:18.962238 IP (tos 0x0, ttl 64, id 51478, offset 0, flags [DF], proto TCP (6), length 84)
+ 127.0.0.1.58445 > 127.0.0.1.6633: Flags [P.], cksum 0xfe48 (incorrect -> 0xbbc3), seq 698:730, ack 657, win 86, options [nop,nop,TS val 267876 ecr 267876], length 32: OpenFlow
+ version 1.3, type FEATURES_REPLY, length 32, xid 0x0000008e
+ dpid 0x000026a2b46fd9ba, n_buffers 256, n_tables 64, auxiliary_id 0
+ capabilities 0x0000004f (FLOW_STATS, TABLE_STATS, PORT_STATS, GROUP_STATS, QUEUE_STATS)
+ 52 15:47:18.962333 IP (tos 0x0, ttl 64, id 14609, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58445: Flags [.], cksum 0xfe28 (incorrect -> 0xb693), seq 657, ack 730, win 94, options [nop,nop,TS val 267876 ecr 267876], length 0
+ 53 16:32:34.623939 IP (tos 0x0, ttl 64, id 44797, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.58447: Flags [P.], cksum 0xfe30 (incorrect -> 0x3d62), seq 2583631865:2583631873, ack 3924671623, win 94, options [nop,nop,TS val 946792 ecr 945543], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000002e
+ 54 16:32:34.625658 IP (tos 0x0, ttl 64, id 3493, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.58447 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x3880), seq 1:9, ack 8, win 86, options [nop,nop,TS val 946792 ecr 946792], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000002e
+ 55 16:32:34.625750 IP (tos 0x0, ttl 64, id 44798, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58447: Flags [.], cksum 0xfe28 (incorrect -> 0x3cb9), seq 8, ack 9, win 94, options [nop,nop,TS val 946792 ecr 946792], length 0
+ 56 16:32:34.844806 IP (tos 0x0, ttl 64, id 44799, offset 0, flags [DF], proto TCP (6), length 64)
+ 127.0.0.1.6633 > 127.0.0.1.58447: Flags [P.], cksum 0xfe34 (incorrect -> 0x3760), seq 8:20, ack 9, win 94, options [nop,nop,TS val 946847 ecr 946792], length 12: OpenFlow
+ version 1.3, type SET_CONFIG, length 12, xid 0x0000002f
+ flags FRAG_REASM, miss_send_len 200
+ 57 16:32:34.883698 IP (tos 0x0, ttl 64, id 3494, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.58447 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0x3c3d), seq 9, ack 20, win 86, options [nop,nop,TS val 946857 ecr 946847], length 0
+ 58 16:32:36.376083 IP (tos 0x0, ttl 64, id 44800, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.58447: Flags [P.], cksum 0xfe30 (incorrect -> 0x3667), seq 20:28, ack 9, win 94, options [nop,nop,TS val 947230 ecr 946857], length 8: OpenFlow
+ version 1.3, type GET_CONFIG_REQUEST, length 8, xid 0x00000030
+ 59 16:32:36.376174 IP (tos 0x0, ttl 64, id 3495, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.58447 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0x3941), seq 9, ack 28, win 86, options [nop,nop,TS val 947230 ecr 947230], length 0
+ 60 16:32:36.378403 IP (tos 0x0, ttl 64, id 3496, offset 0, flags [DF], proto TCP (6), length 64)
+ 127.0.0.1.58447 > 127.0.0.1.6633: Flags [P.], cksum 0xfe34 (incorrect -> 0x3420), seq 9:21, ack 28, win 86, options [nop,nop,TS val 947230 ecr 947230], length 12: OpenFlow
+ version 1.3, type GET_CONFIG_REPLY, length 12, xid 0x00000030
+ flags FRAG_DROP, miss_send_len 200
+ 61 16:32:36.378465 IP (tos 0x0, ttl 64, id 44801, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58447: Flags [.], cksum 0xfe28 (incorrect -> 0x392d), seq 28, ack 21, win 94, options [nop,nop,TS val 947230 ecr 947230], length 0
+ 62 17:39:10.589931 IP (tos 0x0, ttl 64, id 28700, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.58449: Flags [P.], cksum 0xfe30 (incorrect -> 0x4e78), seq 359193673:359193681, ack 3843617605, win 111, options [nop,nop,TS val 1945783 ecr 1944534], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x000000a6
+ 63 17:39:10.592125 IP (tos 0x0, ttl 64, id 24186, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.58449 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x49a6), seq 1:9, ack 8, win 86, options [nop,nop,TS val 1945784 ecr 1945783], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x000000a6
+ 64 17:39:10.592223 IP (tos 0x0, ttl 64, id 28701, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58449: Flags [.], cksum 0xfe28 (incorrect -> 0x4e45), seq 8, ack 9, win 111, options [nop,nop,TS val 1945784 ecr 1945784], length 0
+ 65 17:39:11.275605 IP (tos 0x0, ttl 64, id 28702, offset 0, flags [DF], proto TCP (6), length 152)
+ 127.0.0.1.6633 > 127.0.0.1.58449: Flags [P.], cksum 0xfe8c (incorrect -> 0xaa9b), seq 8:108, ack 9, win 111, options [nop,nop,TS val 1945955 ecr 1945784], length 100: OpenFlow
+ version 1.3, type PACKET_OUT, length 100, xid 0x000000a7
+ 66 17:39:11.278453 IP (tos 0x0, ttl 64, id 24187, offset 0, flags [DF], proto TCP (6), length 206)
+ 127.0.0.1.58449 > 127.0.0.1.6633: Flags [P.], cksum 0xfec2 (incorrect -> 0xa12e), seq 9:163, ack 108, win 86, options [nop,nop,TS val 1945955 ecr 1945955], length 154: OpenFlow
+ version 1.3, type PACKET_IN, length 154, xid 0x00000000
+ 67 17:39:11.278747 IP (tos 0x0, ttl 64, id 28703, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58449: Flags [.], cksum 0xfe28 (incorrect -> 0x4bec), seq 108, ack 163, win 115, options [nop,nop,TS val 1945956 ecr 1945955], length 0
+ 68 17:39:11.293620 IP (tos 0x0, ttl 64, id 28704, offset 0, flags [DF], proto TCP (6), length 152)
+ 127.0.0.1.6633 > 127.0.0.1.58449: Flags [P.], cksum 0xfe8c (incorrect -> 0xa8c9), seq 108:208, ack 163, win 115, options [nop,nop,TS val 1945959 ecr 1945955], length 100: OpenFlow
+ version 1.3, type PACKET_OUT, length 100, xid 0x000000a8
+ 69 17:39:11.296836 IP (tos 0x0, ttl 64, id 24188, offset 0, flags [DF], proto TCP (6), length 234)
+ 127.0.0.1.58449 > 127.0.0.1.6633: Flags [P.], cksum 0xfede (incorrect -> 0x2262), seq 163:345, ack 208, win 86, options [nop,nop,TS val 1945960 ecr 1945959], length 182: OpenFlow
+ version 1.3, type PACKET_IN, length 182, xid 0x00000000
+ 70 17:39:11.334896 IP (tos 0x0, ttl 64, id 28705, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.58449: Flags [.], cksum 0xfe28 (incorrect -> 0x4abb), seq 208, ack 345, win 119, options [nop,nop,TS val 1945970 ecr 1945960], length 0
+ 71 10:22:45.030583 IP (tos 0x0, ttl 64, id 10058, offset 0, flags [DF], proto TCP (6), length 148)
+ 127.0.0.1.6633 > 127.0.0.1.53146: Flags [P.], cksum 0xfe88 (incorrect -> 0xf671), seq 1089079797:1089079893, ack 1672614427, win 94, options [nop,nop,TS val 4009818 ecr 4009376], length 96: OpenFlow
+ version 1.3, type FLOW_MOD, length 96, xid 0x00000076
+ 72 10:22:45.067011 IP (tos 0x0, ttl 64, id 11330, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.53146 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0x6e9c), seq 1, ack 96, win 86, options [nop,nop,TS val 4009828 ecr 4009818], length 0
+ 73 10:22:46.038093 IP (tos 0x0, ttl 64, id 11331, offset 0, flags [DF], proto TCP (6), length 116)
+ 127.0.0.1.53146 > 127.0.0.1.6633: Flags [P.], cksum 0xfe68 (incorrect -> 0xdcd4), seq 1:65, ack 96, win 86, options [nop,nop,TS val 4010070 ecr 4009818], length 64: OpenFlow
+ version 1.3, type FLOW_REMOVED, length 64, xid 0x00000000
+ 74 10:22:46.038127 IP (tos 0x0, ttl 64, id 10059, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.53146: Flags [.], cksum 0xfe28 (incorrect -> 0x6c66), seq 96, ack 65, win 94, options [nop,nop,TS val 4010070 ecr 4010070], length 0
+ 75 13:15:24.725748 IP (tos 0x0, ttl 64, id 51120, offset 0, flags [DF], proto TCP (6), length 132)
+ 127.0.0.1.38906 > 127.0.0.1.6633: Flags [P.], cksum 0xfe78 (incorrect -> 0xadc3), seq 2781543975:2781544055, ack 1865664008, win 86, options [nop,nop,TS val 1794904 ecr 1794249], length 80: OpenFlow
+ version 1.3, type PORT_STATUS, length 80, xid 0x00000000
+ reason ADD
+ port_no 2, hw_addr ca:02:9f:af:e9:1c, name 'veth0'
+ config 0x00000000
+ state 0x00000004 (LIVE)
+ curr 0x00000840 (10GB_FD, COPPER)
+ advertised 0x00000000
+ supported 0x00000000
+ peer 0x00000000
+ curr_speed 10485760kbps
+ max_speed 0kbps
+ 76 13:15:24.725788 IP (tos 0x0, ttl 64, id 64306, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.38906: Flags [.], cksum 0xfe28 (incorrect -> 0x2614), seq 1, ack 80, win 94, options [nop,nop,TS val 1794904 ecr 1794904], length 0
+ 77 16:37:49.792852 IP (tos 0x0, ttl 64, id 32480, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.34845: Flags [P.], cksum 0xfe38 (incorrect -> 0x4ae9), seq 2833437351:2833437367, ack 1981193718, win 98, options [nop,nop,TS val 130273 ecr 129636], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x0000004f
+ 78 16:37:49.796567 IP (tos 0x0, ttl 64, id 16409, offset 0, flags [DF], proto TCP (6), length 1124)
+ 127.0.0.1.34845 > 127.0.0.1.6633: Flags [P.], cksum 0x0259 (incorrect -> 0x9472), seq 1:1073, ack 16, win 86, options [nop,nop,TS val 130274 ecr 130273], length 1072: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 1072, xid 0x0000004f
+ 79 16:37:49.796657 IP (tos 0x0, ttl 64, id 32481, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34845: Flags [.], cksum 0xfe28 (incorrect -> 0x48ae), seq 16, ack 1073, win 103, options [nop,nop,TS val 130274 ecr 130274], length 0
+ 80 17:10:39.694164 IP (tos 0x0, ttl 64, id 18557, offset 0, flags [DF], proto TCP (6), length 116)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe68 (incorrect -> 0xc9ae), seq 1963343585:1963343649, ack 2145731315, win 105, options [nop,nop,TS val 622748 ecr 622308], length 64: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 64, xid 0x00000076
+ 81 17:10:39.695936 IP (tos 0x0, ttl 64, id 19461, offset 0, flags [DF], proto TCP (6), length 236)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0xfee0 (incorrect -> 0x89dd), seq 1:185, ack 64, win 86, options [nop,nop,TS val 622748 ecr 622748], length 184: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 184, xid 0x00000076
+ 82 17:10:39.696001 IP (tos 0x0, ttl 64, id 18558, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0x5d19), seq 64, ack 185, win 109, options [nop,nop,TS val 622749 ecr 622748], length 0
+ 83 17:10:39.706507 IP (tos 0x0, ttl 64, id 18559, offset 0, flags [DF], proto TCP (6), length 116)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe68 (incorrect -> 0xc6f5), seq 64:128, ack 185, win 109, options [nop,nop,TS val 622751 ecr 622748], length 64: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 64, xid 0x00000077
+ 84 17:10:39.708491 IP (tos 0x0, ttl 64, id 19462, offset 0, flags [DF], proto TCP (6), length 92)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0xfe50 (incorrect -> 0x4e7c), seq 185:225, ack 128, win 86, options [nop,nop,TS val 622752 ecr 622751], length 40: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 40, xid 0x00000077
+ 85 17:10:39.747947 IP (tos 0x0, ttl 64, id 18560, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0x5ca0), seq 128, ack 225, win 109, options [nop,nop,TS val 622762 ecr 622752], length 0
+ 86 17:20:21.268792 IP (tos 0x0, ttl 64, id 18795, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe38 (incorrect -> 0xdced), seq 1072:1088, ack 2705, win 256, options [nop,nop,TS val 768142 ecr 767309], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x000000ed
+ 87 17:20:21.270799 IP (tos 0x0, ttl 64, id 19580, offset 0, flags [DF], proto TCP (6), length 1604)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0x0439 (incorrect -> 0xedc3), seq 2705:4257, ack 1088, win 86, options [nop,nop,TS val 768142 ecr 768142], length 1552: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 1552, xid 0x000000ed
+ 88 17:20:21.270887 IP (tos 0x0, ttl 64, id 18796, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0xd8b8), seq 1088, ack 4257, win 254, options [nop,nop,TS val 768142 ecr 768142], length 0
+ 89 17:21:32.610984 IP (tos 0x0, ttl 64, id 18829, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe40 (incorrect -> 0x48f2), seq 1248:1272, ack 4981, win 256, options [nop,nop,TS val 785977 ecr 784870], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x000000ff
+ 90 17:21:32.614400 IP (tos 0x0, ttl 64, id 19597, offset 0, flags [DF], proto TCP (6), length 628)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0x0069 (incorrect -> 0x23f8), seq 4981:5557, ack 1272, win 86, options [nop,nop,TS val 785978 ecr 785977], length 576: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 576, xid 0x000000ff
+ 91 17:21:32.614511 IP (tos 0x0, ttl 64, id 18830, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0x4793), seq 1272, ack 5557, win 255, options [nop,nop,TS val 785978 ecr 785978], length 0
+ 92 17:21:32.932077 IP (tos 0x0, ttl 64, id 18831, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe30 (incorrect -> 0x4228), seq 1272:1280, ack 5557, win 256, options [nop,nop,TS val 786058 ecr 785978], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000100
+ 93 17:21:32.939513 IP (tos 0x0, ttl 64, id 19598, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x4278), seq 5557:5565, ack 1280, win 86, options [nop,nop,TS val 786059 ecr 786058], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000100
+ 94 17:21:32.939617 IP (tos 0x0, ttl 64, id 18832, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0x46e0), seq 1280, ack 5565, win 256, options [nop,nop,TS val 786059 ecr 786059], length 0
+ 95 17:27:12.201785 IP (tos 0x0, ttl 64, id 18969, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe40 (incorrect -> 0xa9d9), seq 1840:1864, ack 6277, win 256, options [nop,nop,TS val 870875 ecr 869809], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x00000147
+ 96 17:27:12.204185 IP (tos 0x0, ttl 64, id 19667, offset 0, flags [DF], proto TCP (6), length 228)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0xfed8 (incorrect -> 0xa1c3), seq 6277:6453, ack 1864, win 86, options [nop,nop,TS val 870876 ecr 870875], length 176: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 176, xid 0x00000147
+ 97 17:27:12.204269 IP (tos 0x0, ttl 64, id 18970, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0xaa7b), seq 1864, ack 6453, win 256, options [nop,nop,TS val 870876 ecr 870876], length 0
+ 98 17:27:12.931668 IP (tos 0x0, ttl 64, id 18971, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], cksum 0xfe30 (incorrect -> 0xa464), seq 1864:1872, ack 6453, win 256, options [nop,nop,TS val 871057 ecr 870876], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000148
+ 99 17:27:12.938585 IP (tos 0x0, ttl 64, id 19668, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0xa44e), seq 6453:6461, ack 1872, win 86, options [nop,nop,TS val 871059 ecr 871057], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000148
+ 100 17:27:12.938697 IP (tos 0x0, ttl 64, id 18972, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], cksum 0xfe28 (incorrect -> 0xa8fd), seq 1872, ack 6461, win 256, options [nop,nop,TS val 871059 ecr 871059], length 0
+ 101 17:57:16.110186 IP (tos 0x0, ttl 64, id 16966, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.6633 > 127.0.0.1.34888: Flags [P.], cksum 0xfe40 (incorrect -> 0xcf7c), seq 555521909:555521933, ack 1543280532, win 105, options [nop,nop,TS val 1321852 ecr 1321585], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x0000001f
+ 102 17:57:16.113738 IP (tos 0x0, ttl 64, id 22868, offset 0, flags [DF], proto TCP (6), length 252)
+ 127.0.0.1.34888 > 127.0.0.1.6633: Flags [P.], cksum 0xfef0 (incorrect -> 0x3421), seq 1:201, ack 24, win 86, options [nop,nop,TS val 1321853 ecr 1321852], length 200: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 200, xid 0x0000001f
+ 103 17:57:16.113974 IP (tos 0x0, ttl 64, id 16967, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34888: Flags [.], cksum 0xfe28 (incorrect -> 0xd1f7), seq 24, ack 201, win 109, options [nop,nop,TS val 1321853 ecr 1321853], length 0
+ 104 17:57:17.127188 IP (tos 0x0, ttl 64, id 16968, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.34888: Flags [P.], cksum 0xfe38 (incorrect -> 0xcc99), seq 24:40, ack 201, win 109, options [nop,nop,TS val 1322106 ecr 1321853], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x00000020
+ 105 17:57:17.129487 IP (tos 0x0, ttl 64, id 22869, offset 0, flags [DF], proto TCP (6), length 204)
+ 127.0.0.1.34888 > 127.0.0.1.6633: Flags [P.], cksum 0xfec0 (incorrect -> 0xad66), seq 201:353, ack 40, win 86, options [nop,nop,TS val 1322107 ecr 1322106], length 152: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 152, xid 0x00000020
+ 106 17:57:17.130202 IP (tos 0x0, ttl 64, id 16969, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34888: Flags [.], cksum 0xfe28 (incorrect -> 0xcf4f), seq 40, ack 353, win 113, options [nop,nop,TS val 1322107 ecr 1322107], length 0
+ 107 17:57:17.869382 IP (tos 0x0, ttl 64, id 16970, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.34888: Flags [P.], cksum 0xfe38 (incorrect -> 0xca33), seq 40:56, ack 353, win 113, options [nop,nop,TS val 1322292 ecr 1322107], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x00000021
+ 108 17:57:17.871408 IP (tos 0x0, ttl 64, id 22870, offset 0, flags [DF], proto TCP (6), length 108)
+ 127.0.0.1.34888 > 127.0.0.1.6633: Flags [P.], cksum 0xfe60 (incorrect -> 0xc5b3), seq 353:409, ack 56, win 86, options [nop,nop,TS val 1322292 ecr 1322292], length 56: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 56, xid 0x00000021
+ 109 17:57:17.871493 IP (tos 0x0, ttl 64, id 16971, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.34888: Flags [.], cksum 0xfe28 (incorrect -> 0xcd95), seq 56, ack 409, win 113, options [nop,nop,TS val 1322292 ecr 1322292], length 0
+ 110 10:02:19.814878 IP (tos 0x0, ttl 64, id 47069, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [P.], cksum 0xfe40 (incorrect -> 0x07aa), seq 260443467:260443491, ack 382342041, win 100, options [nop,nop,TS val 344035 ecr 343141], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x00000028
+ 111 10:02:19.815701 IP (tos 0x0, ttl 64, id 47114, offset 0, flags [DF], proto TCP (6), length 196)
+ 127.0.0.1.36546 > 127.0.0.1.6633: Flags [P.], cksum 0xfeb8 (incorrect -> 0x3ff1), seq 1:145, ack 24, win 88, options [nop,nop,TS val 344035 ecr 344035], length 144: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 144, xid 0x00000028
+ 112 10:02:19.815724 IP (tos 0x0, ttl 64, id 47070, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [.], cksum 0xfe28 (incorrect -> 0x07fa), seq 24, ack 145, win 105, options [nop,nop,TS val 344035 ecr 344035], length 0
+ 113 10:02:20.713618 IP (tos 0x0, ttl 64, id 47071, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [P.], cksum 0xfe40 (incorrect -> 0x029c), seq 24:48, ack 145, win 105, options [nop,nop,TS val 344260 ecr 344035], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x00000029
+ 114 10:02:20.714133 IP (tos 0x0, ttl 64, id 47115, offset 0, flags [DF], proto TCP (6), length 132)
+ 127.0.0.1.36546 > 127.0.0.1.6633: Flags [P.], cksum 0xfe78 (incorrect -> 0xfe54), seq 145:225, ack 48, win 88, options [nop,nop,TS val 344260 ecr 344260], length 80: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 80, xid 0x00000029
+ 115 10:02:20.714160 IP (tos 0x0, ttl 64, id 47072, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [.], cksum 0xfe28 (incorrect -> 0x05d0), seq 48, ack 225, win 105, options [nop,nop,TS val 344260 ecr 344260], length 0
+ 116 10:02:21.229978 IP (tos 0x0, ttl 64, id 47073, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [P.], cksum 0xfe30 (incorrect -> 0x010b), seq 48:56, ack 225, win 105, options [nop,nop,TS val 344389 ecr 344260], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000002a
+ 117 10:02:21.231013 IP (tos 0x0, ttl 64, id 47116, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.36546 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x0092), seq 225:233, ack 56, win 88, options [nop,nop,TS val 344389 ecr 344389], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000002a
+ 118 10:02:21.231044 IP (tos 0x0, ttl 64, id 47074, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [.], cksum 0xfe28 (incorrect -> 0x04be), seq 56, ack 233, win 105, options [nop,nop,TS val 344389 ecr 344389], length 0
+ 119 10:02:21.852874 IP (tos 0x0, ttl 64, id 47075, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [P.], cksum 0xfe38 (incorrect -> 0xffb1), seq 56:72, ack 233, win 105, options [nop,nop,TS val 344545 ecr 344389], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x0000002b
+ 120 10:02:21.853489 IP (tos 0x0, ttl 64, id 47117, offset 0, flags [DF], proto TCP (6), length 84)
+ 127.0.0.1.36546 > 127.0.0.1.6633: Flags [P.], cksum 0xfe48 (incorrect -> 0xeddf), seq 233:265, ack 72, win 88, options [nop,nop,TS val 344545 ecr 344545], length 32: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 32, xid 0x0000002b
+ 121 10:02:21.853515 IP (tos 0x0, ttl 64, id 47076, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36546: Flags [.], cksum 0xfe28 (incorrect -> 0x0356), seq 72, ack 265, win 105, options [nop,nop,TS val 344545 ecr 344545], length 0
+ 122 10:30:09.945368 IP (tos 0x0, ttl 64, id 54874, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [P.], cksum 0xfe30 (incorrect -> 0x68f4), seq 3359330522:3359330530, ack 3471458557, win 256, options [nop,nop,TS val 761568 ecr 760318], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000000d
+ 123 10:30:09.946140 IP (tos 0x0, ttl 64, id 56416, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x64b3), seq 1:9, ack 8, win 86, options [nop,nop,TS val 761568 ecr 761568], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000000d
+ 124 10:30:09.946173 IP (tos 0x0, ttl 64, id 54875, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0x6829), seq 8, ack 9, win 256, options [nop,nop,TS val 761568 ecr 761568], length 0
+ 125 10:30:10.672306 IP (tos 0x0, ttl 64, id 54876, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [P.], cksum 0xfe38 (incorrect -> 0x6320), seq 8:24, ack 9, win 256, options [nop,nop,TS val 761749 ecr 761568], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x0000000e
+ 126 10:30:10.673261 IP (tos 0x0, ttl 64, id 56417, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0x30af), seq 9:11801, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761749], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 127 10:30:10.673292 IP (tos 0x0, ttl 64, id 54877, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0x38a9), seq 24, ack 11801, win 244, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 128 10:30:10.675065 IP (tos 0x0, ttl 64, id 56418, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0xc66e), seq 11801:23593, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 129 10:30:10.675124 IP (tos 0x0, ttl 64, id 54878, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0x0a99), seq 24, ack 23593, win 244, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 130 10:30:10.675159 IP (tos 0x0, ttl 64, id 56419, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0x62e9), seq 23593:35385, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 131 10:30:10.675174 IP (tos 0x0, ttl 64, id 54879, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0xdc94), seq 24, ack 35385, win 232, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 132 10:30:10.675194 IP (tos 0x0, ttl 64, id 56420, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0xeed4), seq 35385:47177, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 133 10:30:10.675206 IP (tos 0x0, ttl 64, id 54880, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0xae91), seq 24, ack 47177, win 219, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 134 10:30:10.675226 IP (tos 0x0, ttl 64, id 56421, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0x7ac0), seq 47177:58969, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 135 10:30:10.675238 IP (tos 0x0, ttl 64, id 54881, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0x808d), seq 24, ack 58969, win 207, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 136 10:30:10.675257 IP (tos 0x0, ttl 64, id 56422, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0x04c0), seq 58969:70761, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 137 10:30:10.675294 IP (tos 0x0, ttl 64, id 56423, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0x90ab), seq 70761:82553, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 138 10:30:10.675314 IP (tos 0x0, ttl 64, id 56424, offset 0, flags [DF], proto TCP (6), length 11844)
+ 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], cksum 0x2c39 (incorrect -> 0x1c98), seq 82553:94345, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 139 10:30:10.675325 IP (tos 0x0, ttl 64, id 54882, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0x2486), seq 24, ack 82553, win 182, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 140 10:30:10.712539 IP (tos 0x0, ttl 64, id 54883, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], cksum 0xfe28 (incorrect -> 0xf621), seq 24, ack 94345, win 256, options [nop,nop,TS val 761760 ecr 761750], length 0
+ 141 10:46:50.838754 IP (tos 0x0, ttl 64, id 46973, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.36548: Flags [P.], cksum 0xfe38 (incorrect -> 0x2338), seq 75556183:75556199, ack 3751019041, win 98, options [nop,nop,TS val 1011791 ecr 1010724], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x0000000d
+ 142 10:46:50.839431 IP (tos 0x0, ttl 64, id 43209, offset 0, flags [DF], proto TCP (6), length 388)
+ 127.0.0.1.36548 > 127.0.0.1.6633: Flags [P.], cksum 0xff78 (incorrect -> 0x0f3d), seq 1:337, ack 16, win 86, options [nop,nop,TS val 1011791 ecr 1011791], length 336: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 336, xid 0x0000000d
+ 143 10:46:50.839471 IP (tos 0x0, ttl 64, id 46974, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.36548: Flags [.], cksum 0xfe28 (incorrect -> 0x21fc), seq 16, ack 337, win 103, options [nop,nop,TS val 1011791 ecr 1011791], length 0
+ 144 19:45:16.495434 IP (tos 0x0, ttl 64, id 17712, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [P.], cksum 0xfe30 (incorrect -> 0xe6e3), seq 1323837391:1323837399, ack 1278624979, win 94, options [nop,nop,TS val 6181422 ecr 6180173], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000006d
+ 145 19:45:16.496030 IP (tos 0x0, ttl 64, id 23686, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.51984 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0xe200), seq 1:9, ack 8, win 86, options [nop,nop,TS val 6181423 ecr 6181422], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000006d
+ 146 19:45:16.496057 IP (tos 0x0, ttl 64, id 17713, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [.], cksum 0xfe28 (incorrect -> 0xe677), seq 8, ack 9, win 94, options [nop,nop,TS val 6181423 ecr 6181423], length 0
+ 147 19:45:17.176752 IP (tos 0x0, ttl 64, id 17714, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [P.], cksum 0xfe38 (incorrect -> 0xe026), seq 8:24, ack 9, win 94, options [nop,nop,TS val 6181593 ecr 6181423], length 16: OpenFlow
+ version 1.3, type TABLE_MOD, length 16, xid 0x0000006e
+ table_id 1, config 0x00000000
+ 148 19:45:17.215970 IP (tos 0x0, ttl 64, id 23687, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.51984 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xe511), seq 9, ack 24, win 86, options [nop,nop,TS val 6181603 ecr 6181593], length 0
+ 149 19:53:23.472776 IP (tos 0x0, ttl 64, id 17917, offset 0, flags [DF], proto TCP (6), length 92)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [P.], cksum 0xfe50 (incorrect -> 0xb18a), seq 936:976, ack 1361, win 98, options [nop,nop,TS val 6303167 ecr 6302673], length 40: OpenFlow
+ version 1.3, type PORT_MOD, length 40, xid 0x000000d4
+ port_no 1, hw_addr 0a:ea:83:10:db:09
+ config 0x00000040 (NO_PACKET_IN)
+ mask 0x00000040 (NO_PACKET_IN)
+ advertise 0x0000080a (10MB_FD, 100MB_FD, COPPER)
+ 150 19:53:23.473744 IP (tos 0x0, ttl 64, id 23790, offset 0, flags [DF], proto TCP (6), length 132)
+ 127.0.0.1.51984 > 127.0.0.1.6633: Flags [P.], cksum 0xfe78 (incorrect -> 0x92a0), seq 1361:1441, ack 976, win 86, options [nop,nop,TS val 6303167 ecr 6303167], length 80: OpenFlow
+ version 1.3, type PORT_STATUS, length 80, xid 0x00000000
+ reason MODIFY
+ port_no 1, hw_addr 0a:ea:83:10:db:09, name 'veth0'
+ config 0x00000040 (NO_PACKET_IN)
+ state 0x00000004 (LIVE)
+ curr 0x00000840 (10GB_FD, COPPER)
+ advertised 0x00000000
+ supported 0x00000000
+ peer 0x00000000
+ curr_speed 10485760kbps
+ max_speed 0kbps
+ 151 19:53:23.473777 IP (tos 0x0, ttl 64, id 17918, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [.], cksum 0xfe28 (incorrect -> 0x25f0), seq 976, ack 1441, win 98, options [nop,nop,TS val 6303167 ecr 6303167], length 0
+ 152 19:55:19.511983 IP (tos 0x0, ttl 64, id 17967, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [P.], cksum 0xfe30 (incorrect -> 0x3fa5), seq 1168:1176, ack 1633, win 98, options [nop,nop,TS val 6332177 ecr 6331422], length 8: OpenFlow
+ version 1.3, type BARRIER_REQUEST, length 8, xid 0x000000ed
+ 153 19:55:19.513048 IP (tos 0x0, ttl 64, id 23815, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.51984 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x3cb5), seq 1633:1641, ack 1176, win 86, options [nop,nop,TS val 6332177 ecr 6332177], length 8: OpenFlow
+ version 1.3, type BARRIER_REPLY, length 8, xid 0x000000ed
+ 154 19:55:19.513081 IP (tos 0x0, ttl 64, id 17968, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51984: Flags [.], cksum 0xfe28 (incorrect -> 0x41bb), seq 1176, ack 1641, win 98, options [nop,nop,TS val 6332177 ecr 6332177], length 0
+ 155 20:10:12.609713 IP (tos 0x0, ttl 64, id 45627, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], cksum 0xfe30 (incorrect -> 0x8da8), seq 2129684753:2129684761, ack 2572383599, win 96, options [nop,nop,TS val 6555451 ecr 6554199], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000007d
+ 156 20:10:12.610357 IP (tos 0x0, ttl 64, id 49206, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0x88c5), seq 1:9, ack 8, win 86, options [nop,nop,TS val 6555451 ecr 6555451], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000007d
+ 157 20:10:12.610382 IP (tos 0x0, ttl 64, id 45628, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], cksum 0xfe28 (incorrect -> 0x8d4b), seq 8, ack 9, win 96, options [nop,nop,TS val 6555451 ecr 6555451], length 0
+ 158 20:10:13.364783 IP (tos 0x0, ttl 64, id 45629, offset 0, flags [DF], proto TCP (6), length 68)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], cksum 0xfe38 (incorrect -> 0x87d1), seq 8:24, ack 9, win 96, options [nop,nop,TS val 6555640 ecr 6555451], length 16: OpenFlow
+ version 1.3, type QUEUE_GET_CONFIG_REQUEST, length 16, xid 0x0000007e
+ port 1
+ 159 20:10:13.366754 IP (tos 0x0, ttl 64, id 49207, offset 0, flags [DF], proto TCP (6), length 132)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], cksum 0xfe78 (incorrect -> 0x80dc), seq 9:89, ack 24, win 86, options [nop,nop,TS val 6555640 ecr 6555640], length 80: OpenFlow
+ version 1.3, type QUEUE_GET_CONFIG_REPLY, length 80, xid 0x0000007e
+ 160 20:10:13.366788 IP (tos 0x0, ttl 64, id 45630, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], cksum 0xfe28 (incorrect -> 0x8b71), seq 24, ack 89, win 96, options [nop,nop,TS val 6555640 ecr 6555640], length 0
+ 161 20:24:40.574081 IP (tos 0x0, ttl 64, id 45979, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], cksum 0xfe40 (incorrect -> 0xba52), seq 1432:1456, ack 1497, win 96, options [nop,nop,TS val 6772442 ecr 6771701], length 24: OpenFlow
+ version 1.3, type ROLE_REQUEST, length 24, xid 0x0000012f
+ role MASTER, generation_id 0x00000000012e248a
+ 162 20:24:40.574726 IP (tos 0x0, ttl 64, id 49382, offset 0, flags [DF], proto TCP (6), length 76)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], cksum 0xfe40 (incorrect -> 0xb75e), seq 1497:1521, ack 1456, win 86, options [nop,nop,TS val 6772442 ecr 6772442], length 24: OpenFlow
+ version 1.3, type ROLE_REPLY, length 24, xid 0x0000012f
+ role MASTER, generation_id 0x00000000012e248a
+ 163 20:24:40.574748 IP (tos 0x0, ttl 64, id 45980, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], cksum 0xfe28 (incorrect -> 0xe276), seq 1456, ack 1521, win 96, options [nop,nop,TS val 6772442 ecr 6772442], length 0
+ 164 20:28:52.608224 IP (tos 0x0, ttl 64, id 46086, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], cksum 0xfe30 (incorrect -> 0xf205), seq 1904:1912, ack 1985, win 96, options [nop,nop,TS val 6835451 ecr 6834201], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000165
+ 165 20:28:52.609219 IP (tos 0x0, ttl 64, id 49437, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], cksum 0xfe30 (incorrect -> 0xed24), seq 1985:1993, ack 1912, win 86, options [nop,nop,TS val 6835451 ecr 6835451], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000165
+ 166 20:28:52.609246 IP (tos 0x0, ttl 64, id 46087, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], cksum 0xfe28 (incorrect -> 0xf292), seq 1912, ack 1993, win 96, options [nop,nop,TS val 6835451 ecr 6835451], length 0
+ 167 20:28:54.103683 IP (tos 0x0, ttl 64, id 46088, offset 0, flags [DF], proto TCP (6), length 84)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], cksum 0xfe48 (incorrect -> 0xeb3a), seq 1912:1944, ack 1993, win 96, options [nop,nop,TS val 6835824 ecr 6835451], length 32: OpenFlow
+ version 1.3, type SET_ASYNC, length 32, xid 0x00000166
+ packet_in_mask[EM] 0x00000003 (NO_MATCH, ACTION)
+ packet_in_mask[S] 0x00000002 (ACTION)
+ port_status_mask[EM] 0x00000007 (ADD, DELETE, MODIFY)
+ port_status_mask[S] 0x00000002 (DELETE)
+ flow_removed_mask[EM] 0x00000007 (ADD, DELETE, MODIFY)
+ flow_removed_mask[S] 0x00000004 (MODIFY)
+ 168 20:28:54.140673 IP (tos 0x0, ttl 64, id 49438, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xef88), seq 1993, ack 1944, win 86, options [nop,nop,TS val 6835834 ecr 6835824], length 0
+ 169 20:28:56.308694 IP (tos 0x0, ttl 64, id 46089, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], cksum 0xfe30 (incorrect -> 0xe7bd), seq 1944:1952, ack 1993, win 96, options [nop,nop,TS val 6836376 ecr 6835834], length 8: OpenFlow
+ version 1.3, type GET_ASYNC_REQUEST, length 8, xid 0x00000167
+ 170 20:28:56.308754 IP (tos 0x0, ttl 64, id 49439, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0xeb3a), seq 1993, ack 1952, win 86, options [nop,nop,TS val 6836376 ecr 6836376], length 0
+ 171 20:28:56.309209 IP (tos 0x0, ttl 64, id 49440, offset 0, flags [DF], proto TCP (6), length 84)
+ 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], cksum 0xfe48 (incorrect -> 0xe557), seq 1993:2025, ack 1952, win 86, options [nop,nop,TS val 6836376 ecr 6836376], length 32: OpenFlow
+ version 1.3, type GET_ASYNC_REPLY, length 32, xid 0x00000167
+ packet_in_mask[EM] 0x00000003 (NO_MATCH, ACTION)
+ packet_in_mask[S] 0x00000002 (ACTION)
+ port_status_mask[EM] 0x00000007 (ADD, DELETE, MODIFY)
+ port_status_mask[S] 0x00000002 (DELETE)
+ flow_removed_mask[EM] 0x00000007 (ADD, DELETE, MODIFY)
+ flow_removed_mask[S] 0x00000004 (MODIFY)
+ 172 20:28:56.309230 IP (tos 0x0, ttl 64, id 46090, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], cksum 0xfe28 (incorrect -> 0xeb10), seq 1952, ack 2025, win 96, options [nop,nop,TS val 6836376 ecr 6836376], length 0
+ 173 20:37:22.358712 IP (tos 0x0, ttl 64, id 18246, offset 0, flags [DF], proto TCP (6), length 100)
+ 127.0.0.1.6633 > 127.0.0.1.51989: Flags [P.], cksum 0xfe58 (incorrect -> 0x9b52), seq 1436436734:1436436782, ack 2087738396, win 96, options [nop,nop,TS val 6962888 ecr 6961981], length 48: OpenFlow
+ version 1.3, type METER_MOD, length 48, xid 0x00000010
+ 174 20:37:22.396699 IP (tos 0x0, ttl 64, id 23571, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.51989 > 127.0.0.1.6633: Flags [.], cksum 0xfe28 (incorrect -> 0x9d9e), seq 1, ack 48, win 86, options [nop,nop,TS val 6962898 ecr 6962888], length 0
diff --git a/tests/of13_ericsson.out b/tests/of13_ericsson.out
new file mode 100644
index 0000000..5d243ab
--- /dev/null
+++ b/tests/of13_ericsson.out
@@ -0,0 +1,277 @@
+ 1 15:52:49.322823 IP 127.0.0.1.6633 > 127.0.0.1.35359: Flags [P.], seq 3305197767:3305197951, ack 3938018648, win 100, options [nop,nop,TS val 534888 ecr 533649], length 184: OpenFlow
+ version 1.3, type FLOW_MOD, length 184, xid 0x00000199
+ 2 15:52:49.362355 IP 127.0.0.1.35359 > 127.0.0.1.6633: Flags [.], ack 184, win 98, options [nop,nop,TS val 534898 ecr 534888], length 0
+ 3 15:52:49.367093 IP 127.0.0.1.6633 > 127.0.0.1.35359: Flags [P.], seq 184:192, ack 1, win 100, options [nop,nop,TS val 534899 ecr 534898], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000019a
+ 4 15:52:49.367137 IP 127.0.0.1.35359 > 127.0.0.1.6633: Flags [.], ack 192, win 98, options [nop,nop,TS val 534899 ecr 534899], length 0
+ 5 15:52:49.367403 IP 127.0.0.1.35359 > 127.0.0.1.6633: Flags [P.], seq 1:9, ack 192, win 98, options [nop,nop,TS val 534899 ecr 534899], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000019a
+ 6 15:52:49.367421 IP 127.0.0.1.6633 > 127.0.0.1.35359: Flags [.], ack 9, win 100, options [nop,nop,TS val 534899 ecr 534899], length 0
+ 7 12:15:37.979676 IP 127.0.0.1.6633 > 127.0.0.1.43230: Flags [P.], seq 402287444:402287812, ack 1282739451, win 98, options [nop,nop,TS val 2953476 ecr 2952724], length 368: OpenFlow
+ version 1.3, type FLOW_MOD, length 368, xid 0x00000012
+ 8 12:15:37.985455 IP 127.0.0.1.43230 > 127.0.0.1.6633: Flags [P.], seq 1:381, ack 368, win 90, options [nop,nop,TS val 2953478 ecr 2953476], length 380: OpenFlow
+ version 1.3, type ERROR, length 380, xid 0x00000012
+ 9 12:15:37.985482 IP 127.0.0.1.6633 > 127.0.0.1.43230: Flags [.], ack 381, win 103, options [nop,nop,TS val 2953478 ecr 2953478], length 0
+ 10 14:53:56.336558 IP 127.0.0.1.6633 > 127.0.0.1.56562: Flags [P.], seq 4055369935:4055370055, ack 963939871, win 94, options [nop,nop,TS val 3963146 ecr 3962600], length 120: OpenFlow
+ version 1.3, type GROUP_MOD, length 120, xid 0x0000008a
+ 11 14:53:56.339805 IP 127.0.0.1.56562 > 127.0.0.1.6633: Flags [P.], seq 1:133, ack 120, win 86, options [nop,nop,TS val 3963147 ecr 3963146], length 132: OpenFlow
+ version 1.3, type ERROR, length 132, xid 0x0000008a
+ 12 14:53:56.339839 IP 127.0.0.1.6633 > 127.0.0.1.56562: Flags [.], ack 133, win 98, options [nop,nop,TS val 3963147 ecr 3963147], length 0
+ 13 07:06:07.923021 IP 127.0.0.1.56439 > 127.0.0.1.6633: Flags [S], seq 2797182347, win 43690, options [mss 65495,sackOK,TS val 1659569 ecr 0,nop,wscale 9], length 0
+ 14 07:06:07.923406 IP 127.0.0.1.6633 > 127.0.0.1.56439: Flags [R.], seq 0, ack 2797182348, win 0, length 0
+ 15 07:06:11.948050 IP 127.0.0.1.56440 > 127.0.0.1.6633: Flags [S], seq 2428319552, win 43690, options [mss 65495,sackOK,TS val 1660576 ecr 0,nop,wscale 9], length 0
+ 16 07:06:11.948123 IP 127.0.0.1.6633 > 127.0.0.1.56440: Flags [S.], seq 2308881340, ack 2428319553, win 43690, options [mss 65495,sackOK,TS val 1660576 ecr 1660576,nop,wscale 9], length 0
+ 17 07:06:11.948171 IP 127.0.0.1.56440 > 127.0.0.1.6633: Flags [.], ack 1, win 86, options [nop,nop,TS val 1660576 ecr 1660576], length 0
+ 18 07:06:11.948588 IP 127.0.0.1.56440 > 127.0.0.1.6633: Flags [P.], seq 1:9, ack 1, win 86, options [nop,nop,TS val 1660576 ecr 1660576], length 8: OpenFlow
+ version 1.3, type HELLO, length 8, xid 0x83ea7e23
+ 19 07:06:11.948646 IP 127.0.0.1.6633 > 127.0.0.1.56440: Flags [.], ack 9, win 86, options [nop,nop,TS val 1660576 ecr 1660576], length 0
+ 20 07:06:11.951581 IP 127.0.0.1.6633 > 127.0.0.1.56440: Flags [P.], seq 1:9, ack 9, win 86, options [nop,nop,TS val 1660577 ecr 1660576], length 8: OpenFlow
+ version 1.0, type HELLO, length 8, xid 0x95b6dc37
+ 21 07:06:11.951654 IP 127.0.0.1.56440 > 127.0.0.1.6633: Flags [.], ack 9, win 86, options [nop,nop,TS val 1660577 ecr 1660577], length 0
+ 22 07:06:11.954851 IP 127.0.0.1.56440 > 127.0.0.1.6633: Flags [P.], seq 9:107, ack 9, win 86, options [nop,nop,TS val 1660577 ecr 1660577], length 98: OpenFlow
+ version 1.3, type ERROR, length 98, xid 0xc4420f26
+ 23 07:06:11.956875 IP 127.0.0.1.56440 > 127.0.0.1.6633: Flags [F.], seq 107, ack 9, win 86, options [nop,nop,TS val 1660578 ecr 1660577], length 0
+ 24 07:06:11.995263 IP 127.0.0.1.6633 > 127.0.0.1.56440: Flags [.], ack 108, win 86, options [nop,nop,TS val 1660588 ecr 1660577], length 0
+ 25 07:06:11.996996 IP 127.0.0.1.6633 > 127.0.0.1.56440: Flags [P.], seq 9:17, ack 108, win 86, options [nop,nop,TS val 1660588 ecr 1660577], length 8: OpenFlow
+ version 1.0, type FEATURES_REQUEST, length 8, xid 0x852f7e3a
+ 26 07:06:11.997117 IP 127.0.0.1.56440 > 127.0.0.1.6633: Flags [R], seq 2428319660, win 0, length 0
+ 27 20:23:02.447284 IP 127.0.0.1.6633 > 127.0.0.1.37123: Flags [P.], seq 3295811422:3295811430, ack 623716506, win 94, options [nop,nop,TS val 683124 ecr 682086], length 8: OpenFlow
+ version 1.3, type HELLO, length 8, xid 0x0000015f
+ 28 20:23:02.487886 IP 127.0.0.1.37123 > 127.0.0.1.6633: Flags [.], ack 8, win 86, options [nop,nop,TS val 683135 ecr 683124], length 0
+ 29 20:23:03.289931 IP 127.0.0.1.6633 > 127.0.0.1.37123: Flags [P.], seq 8:16, ack 1, win 94, options [nop,nop,TS val 683335 ecr 683135], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000160
+ 30 20:23:03.290134 IP 127.0.0.1.37123 > 127.0.0.1.6633: Flags [.], ack 16, win 86, options [nop,nop,TS val 683335 ecr 683335], length 0
+ 31 20:23:03.292620 IP 127.0.0.1.37123 > 127.0.0.1.6633: Flags [P.], seq 1:9, ack 16, win 86, options [nop,nop,TS val 683336 ecr 683335], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000160
+ 32 20:23:03.292690 IP 127.0.0.1.6633 > 127.0.0.1.37123: Flags [.], ack 9, win 94, options [nop,nop,TS val 683336 ecr 683336], length 0
+ 33 20:23:03.674363 IP 127.0.0.1.6633 > 127.0.0.1.37123: Flags [P.], seq 16:32, ack 9, win 94, options [nop,nop,TS val 683431 ecr 683336], length 16: OpenFlow
+ version 1.3, type HELLO, length 16, xid 0x00000161
+ 34 20:23:03.711246 IP 127.0.0.1.37123 > 127.0.0.1.6633: Flags [.], ack 32, win 86, options [nop,nop,TS val 683441 ecr 683431], length 0
+ 35 09:18:28.508689 IP 127.0.0.1.6633 > 127.0.0.1.52621: Flags [P.], seq 2774334230:2774334238, ack 3518786755, win 94, options [nop,nop,TS val 2174690 ecr 2173441], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000004d
+ 36 09:18:28.512206 IP 127.0.0.1.52621 > 127.0.0.1.6633: Flags [P.], seq 1:9, ack 8, win 86, options [nop,nop,TS val 2174691 ecr 2174690], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000004d
+ 37 09:18:28.512310 IP 127.0.0.1.6633 > 127.0.0.1.52621: Flags [.], ack 9, win 94, options [nop,nop,TS val 2174691 ecr 2174691], length 0
+ 38 09:18:29.938866 IP 127.0.0.1.6633 > 127.0.0.1.52621: Flags [P.], seq 8:29, ack 9, win 94, options [nop,nop,TS val 2175048 ecr 2174691], length 21: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 21, xid 0x0000004e
+ 39 09:18:29.940525 IP 127.0.0.1.52621 > 127.0.0.1.6633: Flags [P.], seq 9:30, ack 29, win 86, options [nop,nop,TS val 2175048 ecr 2175048], length 21: OpenFlow
+ version 1.3, type ECHO_REPLY, length 21, xid 0x0000004e
+ 40 09:18:29.940621 IP 127.0.0.1.6633 > 127.0.0.1.52621: Flags [.], ack 30, win 94, options [nop,nop,TS val 2175048 ecr 2175048], length 0
+ 41 15:41:10.777155 IP 127.0.0.1.6633 > 127.0.0.1.58445: Flags [P.], seq 2142345193:2142345209, ack 115176160, win 94, options [nop,nop,TS val 175830 ecr 174634], length 16: OpenFlow
+ version 1.3, type EXPERIMENTER, length 16, xid 0x00000041
+ 42 15:41:10.782182 IP 127.0.0.1.58445 > 127.0.0.1.6633: Flags [P.], seq 1:29, ack 16, win 86, options [nop,nop,TS val 175831 ecr 175830], length 28: OpenFlow
+ version 1.3, type ERROR, length 28, xid 0x00000041
+ 43 15:41:10.782279 IP 127.0.0.1.6633 > 127.0.0.1.58445: Flags [.], ack 29, win 94, options [nop,nop,TS val 175831 ecr 175831], length 0
+ 44 15:41:10.978145 IP 127.0.0.1.6633 > 127.0.0.1.58445: Flags [P.], seq 16:24, ack 29, win 94, options [nop,nop,TS val 175880 ecr 175831], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000042
+ 45 15:41:10.981725 IP 127.0.0.1.58445 > 127.0.0.1.6633: Flags [P.], seq 29:37, ack 24, win 86, options [nop,nop,TS val 175881 ecr 175880], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000042
+ 46 15:41:10.981828 IP 127.0.0.1.6633 > 127.0.0.1.58445: Flags [.], ack 37, win 94, options [nop,nop,TS val 175881 ecr 175881], length 0
+ 47 15:41:11.640555 IP 127.0.0.1.6633 > 127.0.0.1.58445: Flags [P.], seq 24:57, ack 37, win 94, options [nop,nop,TS val 176046 ecr 175881], length 33: OpenFlow
+ version 1.3, type EXPERIMENTER, length 33, xid 0x00000043
+ 48 15:41:11.649632 IP 127.0.0.1.58445 > 127.0.0.1.6633: Flags [P.], seq 37:82, ack 57, win 86, options [nop,nop,TS val 176048 ecr 176046], length 45: OpenFlow
+ version 1.3, type ERROR, length 45, xid 0x00000043
+ 49 15:41:11.649721 IP 127.0.0.1.6633 > 127.0.0.1.58445: Flags [.], ack 82, win 94, options [nop,nop,TS val 176048 ecr 176048], length 0
+ 50 15:47:18.960105 IP 127.0.0.1.6633 > 127.0.0.1.58445: Flags [P.], seq 649:657, ack 698, win 94, options [nop,nop,TS val 267876 ecr 267134], length 8: OpenFlow
+ version 1.3, type FEATURES_REQUEST, length 8, xid 0x0000008e
+ 51 15:47:18.962238 IP 127.0.0.1.58445 > 127.0.0.1.6633: Flags [P.], seq 698:730, ack 657, win 86, options [nop,nop,TS val 267876 ecr 267876], length 32: OpenFlow
+ version 1.3, type FEATURES_REPLY, length 32, xid 0x0000008e
+ 52 15:47:18.962333 IP 127.0.0.1.6633 > 127.0.0.1.58445: Flags [.], ack 730, win 94, options [nop,nop,TS val 267876 ecr 267876], length 0
+ 53 16:32:34.623939 IP 127.0.0.1.6633 > 127.0.0.1.58447: Flags [P.], seq 2583631865:2583631873, ack 3924671623, win 94, options [nop,nop,TS val 946792 ecr 945543], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000002e
+ 54 16:32:34.625658 IP 127.0.0.1.58447 > 127.0.0.1.6633: Flags [P.], seq 1:9, ack 8, win 86, options [nop,nop,TS val 946792 ecr 946792], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000002e
+ 55 16:32:34.625750 IP 127.0.0.1.6633 > 127.0.0.1.58447: Flags [.], ack 9, win 94, options [nop,nop,TS val 946792 ecr 946792], length 0
+ 56 16:32:34.844806 IP 127.0.0.1.6633 > 127.0.0.1.58447: Flags [P.], seq 8:20, ack 9, win 94, options [nop,nop,TS val 946847 ecr 946792], length 12: OpenFlow
+ version 1.3, type SET_CONFIG, length 12, xid 0x0000002f
+ 57 16:32:34.883698 IP 127.0.0.1.58447 > 127.0.0.1.6633: Flags [.], ack 20, win 86, options [nop,nop,TS val 946857 ecr 946847], length 0
+ 58 16:32:36.376083 IP 127.0.0.1.6633 > 127.0.0.1.58447: Flags [P.], seq 20:28, ack 9, win 94, options [nop,nop,TS val 947230 ecr 946857], length 8: OpenFlow
+ version 1.3, type GET_CONFIG_REQUEST, length 8, xid 0x00000030
+ 59 16:32:36.376174 IP 127.0.0.1.58447 > 127.0.0.1.6633: Flags [.], ack 28, win 86, options [nop,nop,TS val 947230 ecr 947230], length 0
+ 60 16:32:36.378403 IP 127.0.0.1.58447 > 127.0.0.1.6633: Flags [P.], seq 9:21, ack 28, win 86, options [nop,nop,TS val 947230 ecr 947230], length 12: OpenFlow
+ version 1.3, type GET_CONFIG_REPLY, length 12, xid 0x00000030
+ 61 16:32:36.378465 IP 127.0.0.1.6633 > 127.0.0.1.58447: Flags [.], ack 21, win 94, options [nop,nop,TS val 947230 ecr 947230], length 0
+ 62 17:39:10.589931 IP 127.0.0.1.6633 > 127.0.0.1.58449: Flags [P.], seq 359193673:359193681, ack 3843617605, win 111, options [nop,nop,TS val 1945783 ecr 1944534], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x000000a6
+ 63 17:39:10.592125 IP 127.0.0.1.58449 > 127.0.0.1.6633: Flags [P.], seq 1:9, ack 8, win 86, options [nop,nop,TS val 1945784 ecr 1945783], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x000000a6
+ 64 17:39:10.592223 IP 127.0.0.1.6633 > 127.0.0.1.58449: Flags [.], ack 9, win 111, options [nop,nop,TS val 1945784 ecr 1945784], length 0
+ 65 17:39:11.275605 IP 127.0.0.1.6633 > 127.0.0.1.58449: Flags [P.], seq 8:108, ack 9, win 111, options [nop,nop,TS val 1945955 ecr 1945784], length 100: OpenFlow
+ version 1.3, type PACKET_OUT, length 100, xid 0x000000a7
+ 66 17:39:11.278453 IP 127.0.0.1.58449 > 127.0.0.1.6633: Flags [P.], seq 9:163, ack 108, win 86, options [nop,nop,TS val 1945955 ecr 1945955], length 154: OpenFlow
+ version 1.3, type PACKET_IN, length 154, xid 0x00000000
+ 67 17:39:11.278747 IP 127.0.0.1.6633 > 127.0.0.1.58449: Flags [.], ack 163, win 115, options [nop,nop,TS val 1945956 ecr 1945955], length 0
+ 68 17:39:11.293620 IP 127.0.0.1.6633 > 127.0.0.1.58449: Flags [P.], seq 108:208, ack 163, win 115, options [nop,nop,TS val 1945959 ecr 1945955], length 100: OpenFlow
+ version 1.3, type PACKET_OUT, length 100, xid 0x000000a8
+ 69 17:39:11.296836 IP 127.0.0.1.58449 > 127.0.0.1.6633: Flags [P.], seq 163:345, ack 208, win 86, options [nop,nop,TS val 1945960 ecr 1945959], length 182: OpenFlow
+ version 1.3, type PACKET_IN, length 182, xid 0x00000000
+ 70 17:39:11.334896 IP 127.0.0.1.6633 > 127.0.0.1.58449: Flags [.], ack 345, win 119, options [nop,nop,TS val 1945970 ecr 1945960], length 0
+ 71 10:22:45.030583 IP 127.0.0.1.6633 > 127.0.0.1.53146: Flags [P.], seq 1089079797:1089079893, ack 1672614427, win 94, options [nop,nop,TS val 4009818 ecr 4009376], length 96: OpenFlow
+ version 1.3, type FLOW_MOD, length 96, xid 0x00000076
+ 72 10:22:45.067011 IP 127.0.0.1.53146 > 127.0.0.1.6633: Flags [.], ack 96, win 86, options [nop,nop,TS val 4009828 ecr 4009818], length 0
+ 73 10:22:46.038093 IP 127.0.0.1.53146 > 127.0.0.1.6633: Flags [P.], seq 1:65, ack 96, win 86, options [nop,nop,TS val 4010070 ecr 4009818], length 64: OpenFlow
+ version 1.3, type FLOW_REMOVED, length 64, xid 0x00000000
+ 74 10:22:46.038127 IP 127.0.0.1.6633 > 127.0.0.1.53146: Flags [.], ack 65, win 94, options [nop,nop,TS val 4010070 ecr 4010070], length 0
+ 75 13:15:24.725748 IP 127.0.0.1.38906 > 127.0.0.1.6633: Flags [P.], seq 2781543975:2781544055, ack 1865664008, win 86, options [nop,nop,TS val 1794904 ecr 1794249], length 80: OpenFlow
+ version 1.3, type PORT_STATUS, length 80, xid 0x00000000
+ 76 13:15:24.725788 IP 127.0.0.1.6633 > 127.0.0.1.38906: Flags [.], ack 80, win 94, options [nop,nop,TS val 1794904 ecr 1794904], length 0
+ 77 16:37:49.792852 IP 127.0.0.1.6633 > 127.0.0.1.34845: Flags [P.], seq 2833437351:2833437367, ack 1981193718, win 98, options [nop,nop,TS val 130273 ecr 129636], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x0000004f
+ 78 16:37:49.796567 IP 127.0.0.1.34845 > 127.0.0.1.6633: Flags [P.], seq 1:1073, ack 16, win 86, options [nop,nop,TS val 130274 ecr 130273], length 1072: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 1072, xid 0x0000004f
+ 79 16:37:49.796657 IP 127.0.0.1.6633 > 127.0.0.1.34845: Flags [.], ack 1073, win 103, options [nop,nop,TS val 130274 ecr 130274], length 0
+ 80 17:10:39.694164 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], seq 1963343585:1963343649, ack 2145731315, win 105, options [nop,nop,TS val 622748 ecr 622308], length 64: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 64, xid 0x00000076
+ 81 17:10:39.695936 IP 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], seq 1:185, ack 64, win 86, options [nop,nop,TS val 622748 ecr 622748], length 184: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 184, xid 0x00000076
+ 82 17:10:39.696001 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], ack 185, win 109, options [nop,nop,TS val 622749 ecr 622748], length 0
+ 83 17:10:39.706507 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], seq 64:128, ack 185, win 109, options [nop,nop,TS val 622751 ecr 622748], length 64: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 64, xid 0x00000077
+ 84 17:10:39.708491 IP 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], seq 185:225, ack 128, win 86, options [nop,nop,TS val 622752 ecr 622751], length 40: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 40, xid 0x00000077
+ 85 17:10:39.747947 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], ack 225, win 109, options [nop,nop,TS val 622762 ecr 622752], length 0
+ 86 17:20:21.268792 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], seq 1072:1088, ack 2705, win 256, options [nop,nop,TS val 768142 ecr 767309], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x000000ed
+ 87 17:20:21.270799 IP 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], seq 2705:4257, ack 1088, win 86, options [nop,nop,TS val 768142 ecr 768142], length 1552: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 1552, xid 0x000000ed
+ 88 17:20:21.270887 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], ack 4257, win 254, options [nop,nop,TS val 768142 ecr 768142], length 0
+ 89 17:21:32.610984 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], seq 1248:1272, ack 4981, win 256, options [nop,nop,TS val 785977 ecr 784870], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x000000ff
+ 90 17:21:32.614400 IP 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], seq 4981:5557, ack 1272, win 86, options [nop,nop,TS val 785978 ecr 785977], length 576: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 576, xid 0x000000ff
+ 91 17:21:32.614511 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], ack 5557, win 255, options [nop,nop,TS val 785978 ecr 785978], length 0
+ 92 17:21:32.932077 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], seq 1272:1280, ack 5557, win 256, options [nop,nop,TS val 786058 ecr 785978], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000100
+ 93 17:21:32.939513 IP 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], seq 5557:5565, ack 1280, win 86, options [nop,nop,TS val 786059 ecr 786058], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000100
+ 94 17:21:32.939617 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], ack 5565, win 256, options [nop,nop,TS val 786059 ecr 786059], length 0
+ 95 17:27:12.201785 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], seq 1840:1864, ack 6277, win 256, options [nop,nop,TS val 870875 ecr 869809], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x00000147
+ 96 17:27:12.204185 IP 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], seq 6277:6453, ack 1864, win 86, options [nop,nop,TS val 870876 ecr 870875], length 176: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 176, xid 0x00000147
+ 97 17:27:12.204269 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], ack 6453, win 256, options [nop,nop,TS val 870876 ecr 870876], length 0
+ 98 17:27:12.931668 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [P.], seq 1864:1872, ack 6453, win 256, options [nop,nop,TS val 871057 ecr 870876], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000148
+ 99 17:27:12.938585 IP 127.0.0.1.34887 > 127.0.0.1.6633: Flags [P.], seq 6453:6461, ack 1872, win 86, options [nop,nop,TS val 871059 ecr 871057], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000148
+ 100 17:27:12.938697 IP 127.0.0.1.6633 > 127.0.0.1.34887: Flags [.], ack 6461, win 256, options [nop,nop,TS val 871059 ecr 871059], length 0
+ 101 17:57:16.110186 IP 127.0.0.1.6633 > 127.0.0.1.34888: Flags [P.], seq 555521909:555521933, ack 1543280532, win 105, options [nop,nop,TS val 1321852 ecr 1321585], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x0000001f
+ 102 17:57:16.113738 IP 127.0.0.1.34888 > 127.0.0.1.6633: Flags [P.], seq 1:201, ack 24, win 86, options [nop,nop,TS val 1321853 ecr 1321852], length 200: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 200, xid 0x0000001f
+ 103 17:57:16.113974 IP 127.0.0.1.6633 > 127.0.0.1.34888: Flags [.], ack 201, win 109, options [nop,nop,TS val 1321853 ecr 1321853], length 0
+ 104 17:57:17.127188 IP 127.0.0.1.6633 > 127.0.0.1.34888: Flags [P.], seq 24:40, ack 201, win 109, options [nop,nop,TS val 1322106 ecr 1321853], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x00000020
+ 105 17:57:17.129487 IP 127.0.0.1.34888 > 127.0.0.1.6633: Flags [P.], seq 201:353, ack 40, win 86, options [nop,nop,TS val 1322107 ecr 1322106], length 152: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 152, xid 0x00000020
+ 106 17:57:17.130202 IP 127.0.0.1.6633 > 127.0.0.1.34888: Flags [.], ack 353, win 113, options [nop,nop,TS val 1322107 ecr 1322107], length 0
+ 107 17:57:17.869382 IP 127.0.0.1.6633 > 127.0.0.1.34888: Flags [P.], seq 40:56, ack 353, win 113, options [nop,nop,TS val 1322292 ecr 1322107], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x00000021
+ 108 17:57:17.871408 IP 127.0.0.1.34888 > 127.0.0.1.6633: Flags [P.], seq 353:409, ack 56, win 86, options [nop,nop,TS val 1322292 ecr 1322292], length 56: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 56, xid 0x00000021
+ 109 17:57:17.871493 IP 127.0.0.1.6633 > 127.0.0.1.34888: Flags [.], ack 409, win 113, options [nop,nop,TS val 1322292 ecr 1322292], length 0
+ 110 10:02:19.814878 IP 127.0.0.1.6633 > 127.0.0.1.36546: Flags [P.], seq 260443467:260443491, ack 382342041, win 100, options [nop,nop,TS val 344035 ecr 343141], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x00000028
+ 111 10:02:19.815701 IP 127.0.0.1.36546 > 127.0.0.1.6633: Flags [P.], seq 1:145, ack 24, win 88, options [nop,nop,TS val 344035 ecr 344035], length 144: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 144, xid 0x00000028
+ 112 10:02:19.815724 IP 127.0.0.1.6633 > 127.0.0.1.36546: Flags [.], ack 145, win 105, options [nop,nop,TS val 344035 ecr 344035], length 0
+ 113 10:02:20.713618 IP 127.0.0.1.6633 > 127.0.0.1.36546: Flags [P.], seq 24:48, ack 145, win 105, options [nop,nop,TS val 344260 ecr 344035], length 24: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 24, xid 0x00000029
+ 114 10:02:20.714133 IP 127.0.0.1.36546 > 127.0.0.1.6633: Flags [P.], seq 145:225, ack 48, win 88, options [nop,nop,TS val 344260 ecr 344260], length 80: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 80, xid 0x00000029
+ 115 10:02:20.714160 IP 127.0.0.1.6633 > 127.0.0.1.36546: Flags [.], ack 225, win 105, options [nop,nop,TS val 344260 ecr 344260], length 0
+ 116 10:02:21.229978 IP 127.0.0.1.6633 > 127.0.0.1.36546: Flags [P.], seq 48:56, ack 225, win 105, options [nop,nop,TS val 344389 ecr 344260], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000002a
+ 117 10:02:21.231013 IP 127.0.0.1.36546 > 127.0.0.1.6633: Flags [P.], seq 225:233, ack 56, win 88, options [nop,nop,TS val 344389 ecr 344389], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000002a
+ 118 10:02:21.231044 IP 127.0.0.1.6633 > 127.0.0.1.36546: Flags [.], ack 233, win 105, options [nop,nop,TS val 344389 ecr 344389], length 0
+ 119 10:02:21.852874 IP 127.0.0.1.6633 > 127.0.0.1.36546: Flags [P.], seq 56:72, ack 233, win 105, options [nop,nop,TS val 344545 ecr 344389], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x0000002b
+ 120 10:02:21.853489 IP 127.0.0.1.36546 > 127.0.0.1.6633: Flags [P.], seq 233:265, ack 72, win 88, options [nop,nop,TS val 344545 ecr 344545], length 32: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 32, xid 0x0000002b
+ 121 10:02:21.853515 IP 127.0.0.1.6633 > 127.0.0.1.36546: Flags [.], ack 265, win 105, options [nop,nop,TS val 344545 ecr 344545], length 0
+ 122 10:30:09.945368 IP 127.0.0.1.6633 > 127.0.0.1.36547: Flags [P.], seq 3359330522:3359330530, ack 3471458557, win 256, options [nop,nop,TS val 761568 ecr 760318], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000000d
+ 123 10:30:09.946140 IP 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], seq 1:9, ack 8, win 86, options [nop,nop,TS val 761568 ecr 761568], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000000d
+ 124 10:30:09.946173 IP 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], ack 9, win 256, options [nop,nop,TS val 761568 ecr 761568], length 0
+ 125 10:30:10.672306 IP 127.0.0.1.6633 > 127.0.0.1.36547: Flags [P.], seq 8:24, ack 9, win 256, options [nop,nop,TS val 761749 ecr 761568], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x0000000e
+ 126 10:30:10.673261 IP 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], seq 9:11801, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761749], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 127 10:30:10.673292 IP 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], ack 11801, win 244, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 128 10:30:10.675065 IP 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], seq 11801:23593, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 129 10:30:10.675124 IP 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], ack 23593, win 244, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 130 10:30:10.675159 IP 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], seq 23593:35385, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 131 10:30:10.675174 IP 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], ack 35385, win 232, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 132 10:30:10.675194 IP 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], seq 35385:47177, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 133 10:30:10.675206 IP 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], ack 47177, win 219, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 134 10:30:10.675226 IP 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], seq 47177:58969, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 135 10:30:10.675238 IP 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], ack 58969, win 207, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 136 10:30:10.675257 IP 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], seq 58969:70761, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 137 10:30:10.675294 IP 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], seq 70761:82553, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 138 10:30:10.675314 IP 127.0.0.1.36547 > 127.0.0.1.6633: Flags [P.], seq 82553:94345, ack 24, win 86, options [nop,nop,TS val 761750 ecr 761750], length 11792: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 11792, xid 0x0000000e
+ 139 10:30:10.675325 IP 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], ack 82553, win 182, options [nop,nop,TS val 761750 ecr 761750], length 0
+ 140 10:30:10.712539 IP 127.0.0.1.6633 > 127.0.0.1.36547: Flags [.], ack 94345, win 256, options [nop,nop,TS val 761760 ecr 761750], length 0
+ 141 10:46:50.838754 IP 127.0.0.1.6633 > 127.0.0.1.36548: Flags [P.], seq 75556183:75556199, ack 3751019041, win 98, options [nop,nop,TS val 1011791 ecr 1010724], length 16: OpenFlow
+ version 1.3, type MULTIPART_REQUEST, length 16, xid 0x0000000d
+ 142 10:46:50.839431 IP 127.0.0.1.36548 > 127.0.0.1.6633: Flags [P.], seq 1:337, ack 16, win 86, options [nop,nop,TS val 1011791 ecr 1011791], length 336: OpenFlow
+ version 1.3, type MULTIPART_REPLY, length 336, xid 0x0000000d
+ 143 10:46:50.839471 IP 127.0.0.1.6633 > 127.0.0.1.36548: Flags [.], ack 337, win 103, options [nop,nop,TS val 1011791 ecr 1011791], length 0
+ 144 19:45:16.495434 IP 127.0.0.1.6633 > 127.0.0.1.51984: Flags [P.], seq 1323837391:1323837399, ack 1278624979, win 94, options [nop,nop,TS val 6181422 ecr 6180173], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000006d
+ 145 19:45:16.496030 IP 127.0.0.1.51984 > 127.0.0.1.6633: Flags [P.], seq 1:9, ack 8, win 86, options [nop,nop,TS val 6181423 ecr 6181422], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000006d
+ 146 19:45:16.496057 IP 127.0.0.1.6633 > 127.0.0.1.51984: Flags [.], ack 9, win 94, options [nop,nop,TS val 6181423 ecr 6181423], length 0
+ 147 19:45:17.176752 IP 127.0.0.1.6633 > 127.0.0.1.51984: Flags [P.], seq 8:24, ack 9, win 94, options [nop,nop,TS val 6181593 ecr 6181423], length 16: OpenFlow
+ version 1.3, type TABLE_MOD, length 16, xid 0x0000006e
+ 148 19:45:17.215970 IP 127.0.0.1.51984 > 127.0.0.1.6633: Flags [.], ack 24, win 86, options [nop,nop,TS val 6181603 ecr 6181593], length 0
+ 149 19:53:23.472776 IP 127.0.0.1.6633 > 127.0.0.1.51984: Flags [P.], seq 936:976, ack 1361, win 98, options [nop,nop,TS val 6303167 ecr 6302673], length 40: OpenFlow
+ version 1.3, type PORT_MOD, length 40, xid 0x000000d4
+ 150 19:53:23.473744 IP 127.0.0.1.51984 > 127.0.0.1.6633: Flags [P.], seq 1361:1441, ack 976, win 86, options [nop,nop,TS val 6303167 ecr 6303167], length 80: OpenFlow
+ version 1.3, type PORT_STATUS, length 80, xid 0x00000000
+ 151 19:53:23.473777 IP 127.0.0.1.6633 > 127.0.0.1.51984: Flags [.], ack 1441, win 98, options [nop,nop,TS val 6303167 ecr 6303167], length 0
+ 152 19:55:19.511983 IP 127.0.0.1.6633 > 127.0.0.1.51984: Flags [P.], seq 1168:1176, ack 1633, win 98, options [nop,nop,TS val 6332177 ecr 6331422], length 8: OpenFlow
+ version 1.3, type BARRIER_REQUEST, length 8, xid 0x000000ed
+ 153 19:55:19.513048 IP 127.0.0.1.51984 > 127.0.0.1.6633: Flags [P.], seq 1633:1641, ack 1176, win 86, options [nop,nop,TS val 6332177 ecr 6332177], length 8: OpenFlow
+ version 1.3, type BARRIER_REPLY, length 8, xid 0x000000ed
+ 154 19:55:19.513081 IP 127.0.0.1.6633 > 127.0.0.1.51984: Flags [.], ack 1641, win 98, options [nop,nop,TS val 6332177 ecr 6332177], length 0
+ 155 20:10:12.609713 IP 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], seq 2129684753:2129684761, ack 2572383599, win 96, options [nop,nop,TS val 6555451 ecr 6554199], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x0000007d
+ 156 20:10:12.610357 IP 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], seq 1:9, ack 8, win 86, options [nop,nop,TS val 6555451 ecr 6555451], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x0000007d
+ 157 20:10:12.610382 IP 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], ack 9, win 96, options [nop,nop,TS val 6555451 ecr 6555451], length 0
+ 158 20:10:13.364783 IP 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], seq 8:24, ack 9, win 96, options [nop,nop,TS val 6555640 ecr 6555451], length 16: OpenFlow
+ version 1.3, type QUEUE_GET_CONFIG_REQUEST, length 16, xid 0x0000007e
+ 159 20:10:13.366754 IP 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], seq 9:89, ack 24, win 86, options [nop,nop,TS val 6555640 ecr 6555640], length 80: OpenFlow
+ version 1.3, type QUEUE_GET_CONFIG_REPLY, length 80, xid 0x0000007e
+ 160 20:10:13.366788 IP 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], ack 89, win 96, options [nop,nop,TS val 6555640 ecr 6555640], length 0
+ 161 20:24:40.574081 IP 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], seq 1432:1456, ack 1497, win 96, options [nop,nop,TS val 6772442 ecr 6771701], length 24: OpenFlow
+ version 1.3, type ROLE_REQUEST, length 24, xid 0x0000012f
+ 162 20:24:40.574726 IP 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], seq 1497:1521, ack 1456, win 86, options [nop,nop,TS val 6772442 ecr 6772442], length 24: OpenFlow
+ version 1.3, type ROLE_REPLY, length 24, xid 0x0000012f
+ 163 20:24:40.574748 IP 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], ack 1521, win 96, options [nop,nop,TS val 6772442 ecr 6772442], length 0
+ 164 20:28:52.608224 IP 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], seq 1904:1912, ack 1985, win 96, options [nop,nop,TS val 6835451 ecr 6834201], length 8: OpenFlow
+ version 1.3, type ECHO_REQUEST, length 8, xid 0x00000165
+ 165 20:28:52.609219 IP 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], seq 1985:1993, ack 1912, win 86, options [nop,nop,TS val 6835451 ecr 6835451], length 8: OpenFlow
+ version 1.3, type ECHO_REPLY, length 8, xid 0x00000165
+ 166 20:28:52.609246 IP 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], ack 1993, win 96, options [nop,nop,TS val 6835451 ecr 6835451], length 0
+ 167 20:28:54.103683 IP 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], seq 1912:1944, ack 1993, win 96, options [nop,nop,TS val 6835824 ecr 6835451], length 32: OpenFlow
+ version 1.3, type SET_ASYNC, length 32, xid 0x00000166
+ 168 20:28:54.140673 IP 127.0.0.1.51987 > 127.0.0.1.6633: Flags [.], ack 1944, win 86, options [nop,nop,TS val 6835834 ecr 6835824], length 0
+ 169 20:28:56.308694 IP 127.0.0.1.6633 > 127.0.0.1.51987: Flags [P.], seq 1944:1952, ack 1993, win 96, options [nop,nop,TS val 6836376 ecr 6835834], length 8: OpenFlow
+ version 1.3, type GET_ASYNC_REQUEST, length 8, xid 0x00000167
+ 170 20:28:56.308754 IP 127.0.0.1.51987 > 127.0.0.1.6633: Flags [.], ack 1952, win 86, options [nop,nop,TS val 6836376 ecr 6836376], length 0
+ 171 20:28:56.309209 IP 127.0.0.1.51987 > 127.0.0.1.6633: Flags [P.], seq 1993:2025, ack 1952, win 86, options [nop,nop,TS val 6836376 ecr 6836376], length 32: OpenFlow
+ version 1.3, type GET_ASYNC_REPLY, length 32, xid 0x00000167
+ 172 20:28:56.309230 IP 127.0.0.1.6633 > 127.0.0.1.51987: Flags [.], ack 2025, win 96, options [nop,nop,TS val 6836376 ecr 6836376], length 0
+ 173 20:37:22.358712 IP 127.0.0.1.6633 > 127.0.0.1.51989: Flags [P.], seq 1436436734:1436436782, ack 2087738396, win 96, options [nop,nop,TS val 6962888 ecr 6961981], length 48: OpenFlow
+ version 1.3, type METER_MOD, length 48, xid 0x00000010
+ 174 20:37:22.396699 IP 127.0.0.1.51989 > 127.0.0.1.6633: Flags [.], ack 48, win 86, options [nop,nop,TS val 6962898 ecr 6962888], length 0
diff --git a/tests/of13_ericsson.pcapng b/tests/of13_ericsson.pcapng
new file mode 100644
index 0000000..8f00fe9
--- /dev/null
+++ b/tests/of13_ericsson.pcapng
Binary files differ
diff --git a/tests/olsr-oobr-1.out b/tests/olsr-oobr-1.out
new file mode 100644
index 0000000..37e2ed6
--- /dev/null
+++ b/tests/olsr-oobr-1.out
@@ -0,0 +1,16 @@
+ 1 13:38:25.134349078 IP truncated-ip - 2315 bytes missing! (tos 0x0, ttl 18, id 4111, offset 0, flags [+, DF, rsvd], proto UDP (17), length 5373, bad cksum 8e7f (->9764)!)
+ 15.251.128.192.698 > 193.192.186.0.122: OLSRv4, seq 0x0800, length 2056
+ Nameservice Message (0x82), originator 126.198.193.192, ttl 26, hop 145
+ vtime 0.062s, msg-seq 0x0008, length 127 [|olsr]
+ 2 [Error converting time] IP truncated-ip - 2315 bytes missing! (tos 0x0, ttl 18, id 4111, offset 0, flags [+, DF, rsvd], proto UDP (17), length 5373, bad cksum 8e7f (->975f)!)
+ 16.0.128.192.698 > 193.192.186.0.122: OLSRv4, seq 0x0400, length 512
+ Powerinfo Message (0x80), originator 0.1.0.0, ttl 255, hop 255
+ vtime 0.500s, msg-seq 0x0000, length 9216 (invalid)
+ 3 13:38:25.134349078 IP truncated-ip - 2315 bytes missing! (tos 0x0, ttl 18, id 4111, offset 0, flags [+, DF, rsvd], proto UDP (17), length 5373, bad cksum 8e7f (->9764)!)
+ 15.251.128.192.698 > 193.192.186.0.122: OLSRv4, seq 0x0800, length 2056
+ Nameservice Message (0x82), originator 126.198.193.192, ttl 26, hop 145
+ vtime 0.062s, msg-seq 0x0008, length 100 [|olsr]
+ 4 [Error converting time] IP truncated-ip - 2315 bytes missing! (tos 0x0, ttl 18, id 4111, offset 0, flags [+, DF, rsvd], proto UDP (17), length 5373, bad cksum 8e7f (->975f)!)
+ 16.0.128.192.698 > 193.192.186.0.122: OLSRv4, seq 0x0800, length 2056
+ Nameservice Message (0x82), originator 126.198.193.192, ttl 26, hop 145
+ vtime 0.062s, msg-seq 0x5c50, length 185 [|olsr]
diff --git a/tests/olsr-oobr-1.pcap b/tests/olsr-oobr-1.pcap
new file mode 100644
index 0000000..2abfe3e
--- /dev/null
+++ b/tests/olsr-oobr-1.pcap
Binary files differ
diff --git a/tests/olsr-oobr-2.out b/tests/olsr-oobr-2.out
new file mode 100644
index 0000000..07db946
--- /dev/null
+++ b/tests/olsr-oobr-2.out
@@ -0,0 +1,3 @@
+ 1 [Invalid header: caplen==0]
+ 2 [Invalid header: caplen==0]
+ 3 19:48:15.8389398 IP6 (flowlabel 0x06400, hlim 0, next-header UDP (17) payload length: 5401) 0:24::1e:a0a:141e.698 > 38fd:7f49:eaff:ffff:2025:7373:7562:2573.2: OLSRv6, seq 0x0201, length 5393 [|olsr]
diff --git a/tests/olsr-oobr-2.pcap b/tests/olsr-oobr-2.pcap
new file mode 100644
index 0000000..ca6123c
--- /dev/null
+++ b/tests/olsr-oobr-2.pcap
Binary files differ
diff --git a/tests/ospf-gmpls.out b/tests/ospf-gmpls.out
new file mode 100644
index 0000000..0fdc9bf
--- /dev/null
+++ b/tests/ospf-gmpls.out
@@ -0,0 +1,86 @@
+ 1 19:34:06.369909 IP (tos 0xc0, ttl 1, id 4052, offset 0, flags [none], proto OSPF (89), length 172)
+ 40.35.1.2 > 224.0.0.5: OSPFv2, LS-Update, length 152
+ Router-ID 10.255.245.35, Backbone Area, Authentication Type: none (0), 1 LSA
+ LSA #1
+ Advertising Router 10.255.245.37, seq 0x80000002, age 9s, length 104
+ Area Local Opaque LSA (10), Opaque-Type Traffic Engineering LSA (1), Opaque-ID 8
+ Options: [External]
+ Link TLV (2), length: 100
+ Link Type subTLV (1), length: 1, Point-to-point (1)
+ Link ID subTLV (2), length: 4, 10.255.245.69 (0x0afff545)
+ Local Interface IP address subTLV (3), length: 4, 10.9.142.1
+ Remote Interface IP address subTLV (4), length: 4, 10.9.142.2
+ Traffic Engineering Metric subTLV (5), length: 4, Metric 63
+ Maximum Bandwidth subTLV (6), length: 4, 622.080 Mbps
+ Maximum Reservable Bandwidth subTLV (7), length: 4, 622.080 Mbps
+ Unreserved Bandwidth subTLV (8), length: 32
+ TE-Class 0: 622.080 Mbps
+ TE-Class 1: 622.080 Mbps
+ TE-Class 2: 622.080 Mbps
+ TE-Class 3: 622.080 Mbps
+ TE-Class 4: 622.080 Mbps
+ TE-Class 5: 622.080 Mbps
+ TE-Class 6: 622.080 Mbps
+ TE-Class 7: 622.080 Mbps
+ Administrative Group subTLV (9), length: 4, 0x00000000
+ 2 19:35:00.904198 IP (tos 0xc0, ttl 1, id 4106, offset 0, flags [none], proto OSPF (89), length 172)
+ 40.35.1.2 > 224.0.0.5: OSPFv2, LS-Update, length 152
+ Router-ID 10.255.245.35, Backbone Area, Authentication Type: none (0), 1 LSA
+ LSA #1
+ Advertising Router 10.255.245.37, seq 0x80000002, age 9s, length 104
+ Area Local Opaque LSA (10), Opaque-Type Traffic Engineering LSA (1), Opaque-ID 9
+ Options: [External]
+ Link TLV (2), length: 100
+ Link Type subTLV (1), length: 1, Point-to-point (1)
+ Link ID subTLV (2), length: 4, 10.255.245.69 (0x0afff545)
+ Local Interface IP address subTLV (3), length: 4, 10.9.143.1
+ Remote Interface IP address subTLV (4), length: 4, 10.9.143.2
+ Traffic Engineering Metric subTLV (5), length: 4, Metric 63
+ Maximum Bandwidth subTLV (6), length: 4, 622.080 Mbps
+ Maximum Reservable Bandwidth subTLV (7), length: 4, 622.080 Mbps
+ Unreserved Bandwidth subTLV (8), length: 32
+ TE-Class 0: 622.080 Mbps
+ TE-Class 1: 622.080 Mbps
+ TE-Class 2: 622.080 Mbps
+ TE-Class 3: 622.080 Mbps
+ TE-Class 4: 622.080 Mbps
+ TE-Class 5: 622.080 Mbps
+ TE-Class 6: 622.080 Mbps
+ TE-Class 7: 622.080 Mbps
+ Administrative Group subTLV (9), length: 4, 0x00000000
+ 3 19:35:53.408629 IP (tos 0xc0, ttl 1, id 4160, offset 0, flags [none], proto OSPF (89), length 212)
+ 40.35.1.2 > 224.0.0.5: OSPFv2, LS-Update, length 192
+ Router-ID 10.255.245.35, Backbone Area, Authentication Type: none (0), 1 LSA
+ LSA #1
+ Advertising Router 10.255.245.35, seq 0x80000003, age 3s, length 144
+ Area Local Opaque LSA (10), Opaque-Type Traffic Engineering LSA (1), Opaque-ID 3
+ Options: [External]
+ Link TLV (2), length: 140
+ Link Type subTLV (1), length: 1, Point-to-point (1)
+ Link ID subTLV (2), length: 4, 10.255.245.40 (0x0afff528)
+ Local Interface IP address subTLV (3), length: 4, 10.40.35.14
+ Remote Interface IP address subTLV (4), length: 4, 10.40.35.13
+ Traffic Engineering Metric subTLV (5), length: 4, Metric 1
+ Maximum Bandwidth subTLV (6), length: 4, 100.000 Mbps
+ Maximum Reservable Bandwidth subTLV (7), length: 4, 100.000 Mbps
+ Unreserved Bandwidth subTLV (8), length: 32
+ TE-Class 0: 0.000 Mbps
+ TE-Class 1: 0.000 Mbps
+ TE-Class 2: 0.000 Mbps
+ TE-Class 3: 0.000 Mbps
+ TE-Class 4: 0.000 Mbps
+ TE-Class 5: 0.000 Mbps
+ TE-Class 6: 0.000 Mbps
+ TE-Class 7: 0.000 Mbps
+ Interface Switching Capability subTLV (15), length: 44
+ Interface Switching Capability: Packet-Switch Capable-1
+ LSP Encoding: Ethernet V2/DIX
+ Max LSP Bandwidth:
+ priority level 0: 0.000 Mbps
+ priority level 1: 0.000 Mbps
+ priority level 2: 0.000 Mbps
+ priority level 3: 0.000 Mbps
+ priority level 4: 0.000 Mbps
+ priority level 5: 0.000 Mbps
+ priority level 6: 0.000 Mbps
+ priority level 7: 0.000 Mbps
diff --git a/tests/ospf-gmpls.pcap b/tests/ospf-gmpls.pcap
new file mode 100644
index 0000000..d36982a
--- /dev/null
+++ b/tests/ospf-gmpls.pcap
Binary files differ
diff --git a/tests/ospf-nssa-bitnt.out b/tests/ospf-nssa-bitnt.out
new file mode 100644
index 0000000..c4e9ff6
--- /dev/null
+++ b/tests/ospf-nssa-bitnt.out
@@ -0,0 +1,12 @@
+ 1 21:48:17.261490 IP (tos 0xc0, ttl 1, id 52, offset 0, flags [none], proto OSPF (89), length 96)
+ 10.0.34.3 > 224.0.0.5: OSPFv2, LS-Update, length 76
+ Router-ID 10.0.34.3, Area 0.0.0.1, Authentication Type: none (0), 1 LSA
+ LSA #1
+ Advertising Router 10.0.34.3, seq 0x80000004, age 1s, length 28
+ Router LSA (1), LSA-ID: 10.0.34.3
+ Options: [NSSA, Demand Circuit]
+ Router LSA Options: [ABR, ASBR, Nt]
+ Neighbor Router-ID: 10.0.34.4, Interface Address: 10.0.34.3
+ topology default (0), metric 1
+ Stub Network: 10.0.34.0, Mask: 255.255.255.0
+ topology default (0), metric 1
diff --git a/tests/ospf-nssa-bitnt.pcap b/tests/ospf-nssa-bitnt.pcap
new file mode 100644
index 0000000..2f0eca1
--- /dev/null
+++ b/tests/ospf-nssa-bitnt.pcap
Binary files differ
diff --git a/tests/ospf2-seg-fault-1-v.out b/tests/ospf2-seg-fault-1-v.out
new file mode 100644
index 0000000..a03eabb
--- /dev/null
+++ b/tests/ospf2-seg-fault-1-v.out
@@ -0,0 +1,9 @@
+ 1 19:35:00.904198 IP (tos 0xc0, ttl 1, id 4106, offset 0, flags [none], proto OSPF (89), length 172)
+ 40.35.1.2 > 224.0.0.5: OSPFv2, LS-Update, length 152
+ Router-ID 10.255.245.35, Backbone Area, Authentication Type: none (0), 1 LSA
+ LSA #1
+ Advertising Router 10.255.245.37, seq 0x80000002, age 9s, length 104
+ Area Local Opaque LSA (10), Opaque-Type Traffic Engineering LSA (1), Opaque-ID 9
+ Options: [External]
+ Link TLV (2), length: 100
+ Bandwidth Constraints subTLV (17), length: 1 < 4 (invalid)
diff --git a/tests/ospf2-seg-fault-1.pcapng b/tests/ospf2-seg-fault-1.pcapng
new file mode 100644
index 0000000..269c6df
--- /dev/null
+++ b/tests/ospf2-seg-fault-1.pcapng
Binary files differ
diff --git a/tests/ospf3_ah-vv.out b/tests/ospf3_ah-vv.out
new file mode 100644
index 0000000..7b6e024
--- /dev/null
+++ b/tests/ospf3_ah-vv.out
@@ -0,0 +1,645 @@
+ 1 17:12:15.459206 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 60) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x13,icv=0x21d3a95c5ffd4d184622b9f8): OSPFv3, Hello, length 36
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 2 17:12:20.303003 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 60) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0xd,icv=0xc628c844e31fdc17a050b06c): OSPFv3, Hello, length 36
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 3 17:12:25.479174 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x14,icv=0xa0e7f8abf9691a8bf39f7cae): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 2.2.2.2
+ 4 17:12:30.294469 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0xe,icv=0x518a0e7168d8b094b7276620): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 1.1.1.1
+ 5 17:12:35.486054 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x15,icv=0x561efba194c33d4d23f46ab9): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 2.2.2.2
+ 6 17:12:40.293859 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0xf,icv=0xeeef2d75c764d8a19cc7d1b3): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 1.1.1.1
+ 7 17:12:45.457555 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x17,icv=0xad97d931a5730d1104f8e3a5): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 2.2.2.2
+ 8 17:12:45.461542 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 52) fe80::1 > fe80::2: AH(length=4(24-bytes),spi=0x00000100,seq=0x16,icv=0xd0883638d39101562e836679): OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x000012fd
+ 9 17:12:50.289278 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x10,icv=0x2f2d2f2245eed38b3d0675f3): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 1.1.1.1
+ 10 17:12:50.457230 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 52) fe80::1 > fe80::2: AH(length=4(24-bytes),spi=0x00000100,seq=0x18,icv=0xf5a9fb53080623fc810acf79): OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x000012fd
+ 11 17:12:55.477004 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x19,icv=0x645a90245a71dab252dbf2f4): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 2.2.2.2
+ 12 17:12:55.480991 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 52) fe80::1 > fe80::2: AH(length=4(24-bytes),spi=0x00000100,seq=0x1a,icv=0x2900ef1dc176fc0ff5378cc6): OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x000012fd
+ 13 17:13:00.288763 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 52) fe80::2 > fe80::1: AH(length=4(24-bytes),spi=0x00000100,seq=0x11,icv=0x158a31130c31d72ba8e7101f): OSPFv3, Database Description, length 28
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x00000b91
+ 14 17:13:00.292754 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 352) fe80::1 > fe80::2: AH(length=4(24-bytes),spi=0x00000100,seq=0x1b,icv=0xacf107d71d4187f95f585884): OSPFv3, Database Description, length 328
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [More], MTU 1500, DD-Sequence 0x00000b91
+ Advertising Router 1.1.1.1, seq 0x8000000b, age 14s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000008, age 69s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000003, age 74s, length 12
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1, seq 0x80000001, age 54s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1, seq 0x80000001, age 54s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 54s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.7
+ Advertising Router 1.1.1.1, seq 0x80000001, age 54s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.8
+ Advertising Router 2.2.2.2, seq 0x80000001, age 1019s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000001, age 873s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 2.2.2.2, seq 0x80000001, age 873s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2, seq 0x80000001, age 873s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1, seq 0x80000002, age 49s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000002, age 1082s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1, seq 0x80000001, age 49s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000003, age 74s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.20.0
+ 15 17:13:00.292824 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x12,icv=0xb5b47354a26fe7ee9913cf94): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 16 17:13:00.300834 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 312) fe80::2 > fe80::1: AH(length=4(24-bytes),spi=0x00000100,seq=0x13,icv=0x5ffa313eb7f0338e9ba350aa): OSPFv3, Database Description, length 288
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [More, Master], MTU 1500, DD-Sequence 0x00000b92
+ Advertising Router 1.1.1.1, seq 0x80000008, age 68s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x8000000a, age 39s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 1020s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000001, age 865s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 1.1.1.1, seq 0x80000001, age 865s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 1.1.1.1, seq 0x80000001, age 865s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 2.2.2.2, seq 0x80000001, age 40s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000001, age 40s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x80000001, age 40s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.7
+ Advertising Router 2.2.2.2, seq 0x80000001, age 40s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.8
+ Advertising Router 1.1.1.1, seq 0x80000002, age 1084s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000002, age 33s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000001, age 33s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 17 17:13:00.304744 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 52) fe80::1 > fe80::2: AH(length=4(24-bytes),spi=0x00000100,seq=0x1c,icv=0x0034f84434217c95ebf0bd9d): OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x00000b92
+ 18 17:13:00.304788 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 196) fe80::2 > fe80::1: AH(length=4(24-bytes),spi=0x00000100,seq=0x14,icv=0x1bf27a80c9d328ac53986ff8): OSPFv3, LS-Request, length 172
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 1.1.1.1
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.8
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.7
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.20.0
+ Advertising Router 1.1.1.1
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 19 17:13:00.308754 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 172) fe80::1 > fe80::2: AH(length=4(24-bytes),spi=0x00000100,seq=0x1d,icv=0xf54df3116b53419805351244): OSPFv3, LS-Request, length 148
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 2.2.2.2
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.8
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.7
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 2.2.2.2
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 20 17:13:00.308805 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 52) fe80::2 > fe80::1: AH(length=4(24-bytes),spi=0x00000100,seq=0x15,icv=0x8f7457e3c2d413ef5ef1ff13): OSPFv3, Database Description, length 28
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [Master], MTU 1500, DD-Sequence 0x00000b93
+ 21 17:13:00.312726 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 532) fe80::1 > fe80::2: AH(length=4(24-bytes),spi=0x00000100,seq=0x1e,icv=0x0a6ab0b271917e05f7a01c58): OSPFv3, LS-Update, length 508
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x8000000b, age 15s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 2.2.2.2, seq 0x80000003, age 75s, length 12
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.5
+ Options [V6, External, Router, Demand Circuit]
+ Connected Routers:
+ 2.2.2.2
+ 1.1.1.1
+ Advertising Router 2.2.2.2, seq 0x80000001, age 874s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 74
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 874s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 84
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 874s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2, metric 74
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 1020s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1, metric 64
+ 2001:db8::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 55s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.8, metric 74
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 55s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.7, metric 84
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 55s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.6, metric 74
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 55s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5, metric 64
+ 2001:db8::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 50s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::1, Prefixes 1:
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000003, age 75s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.20.0
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.5
+ Prefixes 1:
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 50s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8:0:12::/64, metric 10
+ 22 17:13:00.316747 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 52) fe80::1 > fe80::2: AH(length=4(24-bytes),spi=0x00000100,seq=0x1f,icv=0xe01c45cbcae2c53512028aa0): OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x00000b93
+ 23 17:13:00.316781 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 456) fe80::2 > fe80::1: AH(length=4(24-bytes),spi=0x00000100,seq=0x16,icv=0x26e6d9fd8bb10453d74abd33): OSPFv3, LS-Update, length 432
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x8000000a, age 40s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 2.2.2.2, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.8, metric 74
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.7, metric 84
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.6, metric 74
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5, metric 64
+ 2001:db8::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 866s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 74
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 866s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 84
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 866s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2, metric 74
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 1021s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1, metric 64
+ 2001:db8::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000002, age 34s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::2, Prefixes 1:
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 34s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8:0:12::/64, metric 10
+ 24 17:13:00.828736 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 116) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x17,icv=0xac9ea3ab1d0ca3ac857a38ae): OSPFv3, LS-Update, length 92
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ Advertising Router 2.2.2.2, seq 0x8000000b, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 2.2.2.2
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ 25 17:13:00.832711 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 116) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x20,icv=0x5d916c84dab086c9d4fdf00c): OSPFv3, LS-Update, length 92
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x8000000c, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 2.2.2.2
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ 26 17:13:02.820622 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 300) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x18,icv=0xcc6e0ea336b0165fdc7f3990): OSPFv3, LS-Ack, length 276
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x8000000b, age 15s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000003, age 75s, length 12
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000001, age 874s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 2.2.2.2, seq 0x80000001, age 874s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2, seq 0x80000001, age 874s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 2.2.2.2, seq 0x80000001, age 1020s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000001, age 55s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.8
+ Advertising Router 1.1.1.1, seq 0x80000001, age 55s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.7
+ Advertising Router 1.1.1.1, seq 0x80000001, age 55s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 55s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1, seq 0x80000002, age 50s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000003, age 75s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.20.0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 50s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 27 17:13:02.824584 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 260) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x21,icv=0xccc4c494f0c3ba87e0c45d20): OSPFv3, LS-Ack, length 236
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x8000000a, age 40s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.8
+ Advertising Router 2.2.2.2, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.7
+ Advertising Router 2.2.2.2, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1, seq 0x80000001, age 866s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1, seq 0x80000001, age 866s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 1.1.1.1, seq 0x80000001, age 866s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 1.1.1.1, seq 0x80000001, age 1021s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000002, age 34s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000001, age 34s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 28 17:13:05.460439 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x22,icv=0xed712abfbf6179ac7692d454): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 29 17:13:05.592475 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 116) fe80::2 > fe80::1: AH(length=4(24-bytes),spi=0x00000100,seq=0x19,icv=0x512471be36a6d6c424a53c27): OSPFv3, LS-Update, length 92
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ Advertising Router 2.2.2.2, seq 0x8000000b, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 2.2.2.2
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ 30 17:13:05.632476 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 264) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x1a,icv=0x6923254fd693ecf12919f6a7): OSPFv3, LS-Update, length 240
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000004, age 1s, length 12
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.5
+ Options [V6, External, Router, Demand Circuit]
+ Connected Routers:
+ 2.2.2.2
+ 1.1.1.1
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 16777215
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 16777215
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2, metric 16777215
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1, metric 16777215
+ 2001:db8::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000004, age 1s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.20.0
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.5
+ Prefixes 1:
+ 2001:db8:0:12::/64, metric 0
+ 31 17:13:05.724441 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 116) fe80::1 > fe80::2: AH(length=4(24-bytes),spi=0x00000100,seq=0x23,icv=0x0187b35d597f9b0663b36da2): OSPFv3, LS-Update, length 92
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x8000000c, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 2.2.2.2
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ 32 17:13:06.012442 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 84) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x1b,icv=0xd907759aae217cab32c9aa29): OSPFv3, LS-Update, length 60
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x8000000c, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 2.2.2.2
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ 33 17:13:06.380396 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 188) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x24,icv=0xcd6f1175b5f31215677b2d99): OSPFv3, LS-Update, length 164
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 16777215
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 16777215
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2, metric 16777215
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1, metric 16777215
+ 2001:db8::/64, metric 0
+ 34 17:13:08.096263 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 200) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x25,icv=0x50c0d88910df7304ce384f1a): OSPFv3, LS-Ack, length 176
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x8000000b, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000004, age 1s, length 12
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000004, age 1s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.20.0
+ 35 17:13:08.252274 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 160) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x1c,icv=0x618ca39b965c6e07ea34d5e4): OSPFv3, LS-Ack, length 136
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x8000000c, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ 36 17:13:10.274555 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x1d,icv=0x57b21c74699d03bb9de3f801): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 37 17:13:10.610521 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 84) fe80::2 > fe80::1: AH(length=4(24-bytes),spi=0x00000100,seq=0x1e,icv=0x9440847fc8a41f41e22a5906): OSPFv3, LS-Update, length 60
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x8000000c, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 2.2.2.2
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ 38 17:13:13.114832 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 60) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x26,icv=0x6895d800fb544a61678b8945): OSPFv3, LS-Ack, length 36
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x8000000c, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 39 17:13:15.486676 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x27,icv=0xaaa0cde12c4d19e00cb6ca02): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 40 17:13:20.303679 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x1f,icv=0x59c431c7939bd84f899c9e23): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 41 17:13:25.458102 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x28,icv=0xc4e54d94662a9c1fae05ff03): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 42 17:13:30.301380 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x20,icv=0x35482148b2435a23dcdd5536): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 43 17:13:35.461594 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x29,icv=0x073e0e18b545454cc1b4585c): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 44 17:13:40.288904 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x21,icv=0xe1b93db5c8cf1d96b2d1d2e9): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 45 17:13:45.457035 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x2a,icv=0x718fffb1fb95b90563b52148): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 46 17:13:50.300820 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x22,icv=0x396f6ba58895a0180334448f): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 47 17:13:55.461659 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x2b,icv=0x94247e66b627b684e919e9ad): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 48 17:14:00.273418 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x23,icv=0x3f908ebb9b5a12e3a655e2d7): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 49 17:14:05.461068 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x2c,icv=0x29791530ce123d4dff77d7c1): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 50 17:14:10.272863 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x24,icv=0xe8d556f45a475f61ce396aed): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 51 17:14:15.480521 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x2d,icv=0xd50c0ee2c81eb98ad2f83ee1): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 52 17:14:20.276308 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x25,icv=0x5af6d65854ed073768e3a5e6): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 53 17:14:25.459906 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x2e,icv=0x2a2c2bd9de727bb3c47ac070): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 54 17:14:30.295685 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x26,icv=0x221c813c67ced0dec23c1fd1): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 55 17:14:35.475366 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x2f,icv=0x2298732ee27631bf7c519380): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 56 17:14:40.283128 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x27,icv=0x91490764b9291bb6099eed61): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 57 17:14:45.462797 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x30,icv=0x283066ae49c2baae04ab4185): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 58 17:14:50.302556 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x28,icv=0x2734394eda9d6eb93f851969): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 59 17:14:55.458188 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x31,icv=0xd4adde00e63669e53bc9c8ec): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 60 17:15:00.290036 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::2 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x29,icv=0xa84fd415ad72d9bf5667272d): OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 1.1.1.1
+ 61 17:15:05.453721 IP6 (class 0xe0, hlim 1, next-header AH (51) payload length: 64) fe80::1 > ff02::5: AH(length=4(24-bytes),spi=0x00000100,seq=0x32,icv=0xa75576e4613e1e4d1b166960): OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 2.2.2.2, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
diff --git a/tests/ospf3_auth-vv.out b/tests/ospf3_auth-vv.out
new file mode 100644
index 0000000..f0559cc
--- /dev/null
+++ b/tests/ospf3_auth-vv.out
@@ -0,0 +1,10 @@
+ 1 13:28:51.311277 IP6 (class 0xc0, hlim 1, next-header OSPF (89) payload length: 88) fe80::20c:29ff:fe9e:c1b2 > ff02::5: OSPFv3, Hello, length 88
+ Router-ID 10.10.10.2, Backbone Area
+ Options [V6, External, Router, Authentication Trailer]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.2, Priority 1
+ Designated Router 10.10.10.1, Backup Designated Router 10.10.10.2
+ Neighbor List:
+ 10.10.10.1
+ Authentication Type HMAC, Length 48, SAID 1, CSN 0x00000000:52da4e0e
+ Authentication Data 0x0000: ca4d 7d58 69a5 da3c 2a69 0eda a732 9bee
+ Authentication Data 0x0010: 9d7f 448c 9f31 fbe4 a0e9 b39c 6da6 cca1
diff --git a/tests/ospf3_auth.pcapng b/tests/ospf3_auth.pcapng
new file mode 100644
index 0000000..4b5bc81
--- /dev/null
+++ b/tests/ospf3_auth.pcapng
Binary files differ
diff --git a/tests/ospf3_bc-vv.out b/tests/ospf3_bc-vv.out
new file mode 100644
index 0000000..5f830ab
--- /dev/null
+++ b/tests/ospf3_bc-vv.out
@@ -0,0 +1,335 @@
+ 1 12:43:11.663317 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 2 12:43:21.639415 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 3 12:43:31.662021 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 4 12:43:41.642109 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 5 12:43:46.469862 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::2 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 6 12:43:51.641566 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::1 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 1.1.1.1
+ Neighbor List:
+ 2.2.2.2
+ 7 12:43:51.657571 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::2 > fe80::1: OSPFv3, Database Description, length 28
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x00001d46
+ 8 12:43:51.661568 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::1 > fe80::2: OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x0000242c
+ 9 12:43:51.665572 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 168) fe80::1 > fe80::2: OSPFv3, Database Description, length 168
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [More], MTU 1500, DD-Sequence 0x00001d46
+ Advertising Router 1.1.1.1, seq 0x80000002, age 39s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 40s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 40s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000001, age 40s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 1.1.1.1, seq 0x80000001, age 40s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 1.1.1.1, seq 0x80000002, age 34s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1, seq 0x80000001, age 34s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 10 12:43:51.669564 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 148) fe80::2 > fe80::1: OSPFv3, Database Description, length 148
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [More, Master], MTU 1500, DD-Sequence 0x00001d47
+ Advertising Router 2.2.2.2, seq 0x80000002, age 4s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 5s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 5s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000001, age 5s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 2.2.2.2, seq 0x80000001, age 5s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2, seq 0x80000001, age 4s, length 24
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ 11 12:43:51.673558 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::1 > fe80::2: OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x00001d47
+ 12 12:43:51.673584 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 100) fe80::2 > fe80::1: OSPFv3, LS-Request, length 100
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 1.1.1.1
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 13 12:43:51.677560 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 88) fe80::1 > fe80::2: OSPFv3, LS-Request, length 88
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 2.2.2.2
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ 14 12:43:51.677587 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::2 > fe80::1: OSPFv3, Database Description, length 28
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [Master], MTU 1500, DD-Sequence 0x00001d48
+ 15 12:43:51.681554 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 288) fe80::1 > fe80::2: OSPFv3, LS-Update, length 288
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000002, age 40s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 1.1.1.1, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 74
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2, metric 84
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1, metric 74
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0, metric 64
+ 2001:db8::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 35s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::1, Prefixes 1:
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 35s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8:0:12::/64, metric 10
+ 16 12:43:51.681579 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 232) fe80::2 > fe80::1: OSPFv3, LS-Update, length 232
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000002, age 5s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 2.2.2.2, seq 0x80000001, age 6s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 74
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 6s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2, metric 84
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 6s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1, metric 74
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 6s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0, metric 64
+ 2001:db8::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 5s, length 24
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::2, Prefixes 0:
+ 17 12:43:51.685573 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::1 > fe80::2: OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x00001d48
+ 18 12:43:52.169543 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::2 > ff02::5: OSPFv3, LS-Update, length 60
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000003, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ 19 12:43:52.173536 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 168) fe80::1 > ff02::5: OSPFv3, LS-Update, length 168
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000001, age 1s, length 12
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.5
+ Options [V6, External, Router, Demand Circuit]
+ Connected Routers:
+ 1.1.1.1
+ 2.2.2.2
+ Advertising Router 1.1.1.1, seq 0x80000001, age 1s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.20.0
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.5
+ Prefixes 1:
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ Advertising Router 1.1.1.1, seq 0x80000003, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ 20 12:43:52.657486 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 76) fe80::2 > ff02::5: OSPFv3, LS-Update, length 76
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000002, age 1s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::2, Prefixes 1:
+ 2001:db8:0:12::/64, metric 0
+ 21 12:43:54.185384 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 136) fe80::1 > ff02::5: OSPFv3, LS-Ack, length 136
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000002, age 5s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 6s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2, seq 0x80000001, age 6s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 2.2.2.2, seq 0x80000001, age 6s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000001, age 6s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 5s, length 24
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ 22 12:43:54.189410 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 196) fe80::2 > ff02::5: OSPFv3, LS-Ack, length 196
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000002, age 40s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 1.1.1.1, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 1.1.1.1, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000001, age 41s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 35s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1, seq 0x80000001, age 35s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 1s, length 12
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1, seq 0x80000001, age 1s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.20.0
+ 23 12:43:56.473237 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::2 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 1.1.1.1, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 1.1.1.1
+ 24 12:43:57.029218 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::2 > fe80::1: OSPFv3, LS-Update, length 60
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000003, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ 25 12:43:57.177184 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 92) fe80::1 > fe80::2: OSPFv3, LS-Update, length 92
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ Advertising Router 1.1.1.1, seq 0x80000003, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ 26 12:43:57.361169 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::1 > ff02::5: OSPFv3, LS-Update, length 60
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000004, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ 27 12:43:57.589177 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 76) fe80::2 > fe80::1: OSPFv3, LS-Update, length 76
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000002, age 5s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::2, Prefixes 1:
+ 2001:db8:0:12::/64, metric 0
+ 28 12:43:59.512989 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::1 > ff02::5: OSPFv3, LS-Ack, length 56
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000003, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000002, age 5s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.5
+ 29 12:43:59.697003 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::2 > ff02::5: OSPFv3, LS-Ack, length 56
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000003, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 30 12:44:01.660902 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::1 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 1.1.1.1, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 2.2.2.2
+ 31 12:44:02.136860 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::1 > fe80::2: OSPFv3, LS-Update, length 60
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000004, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ 32 12:44:02.176890 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::2 > ff02::5: OSPFv3, LS-Update, length 60
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000004, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.5, Interface 0.0.0.5, metric 10
+ 33 12:44:04.652686 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::2 > ff02::5: OSPFv3, LS-Ack, length 36
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 1.1.1.1, seq 0x80000004, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 34 12:44:04.696653 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > ff02::5: OSPFv3, LS-Ack, length 36
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 2.2.2.2, seq 0x80000004, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 35 12:44:06.479868 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::2 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 1.1.1.1, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 1.1.1.1
+ 36 12:44:11.632208 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::1 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 1.1.1.1, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 2.2.2.2
+ 37 12:44:16.451231 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::2 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 1.1.1.1, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 1.1.1.1
+ 38 12:44:21.651575 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::1 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 1.1.1.1, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 2.2.2.2
diff --git a/tests/ospf3_mp-vv.out b/tests/ospf3_mp-vv.out
new file mode 100644
index 0000000..0db69db
--- /dev/null
+++ b/tests/ospf3_mp-vv.out
@@ -0,0 +1,817 @@
+ 1 13:07:32.713508 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::3 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Neighbor List:
+ 2 13:07:32.713546 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::3 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Neighbor List:
+ 3 13:07:32.721510 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::3 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Neighbor List:
+ 4 13:07:32.801518 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::3 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Neighbor List:
+ 5 13:07:35.261394 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::1 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Neighbor List:
+ 3.3.3.3
+ 6 13:07:35.261448 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::1 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Neighbor List:
+ 3.3.3.3
+ 7 13:07:35.265318 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::3 > fe80::1: OSPFv3, Database Description, length 28
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x00000bbd
+ 8 13:07:35.277404 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::1 > fe80::3: OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x000015b5
+ 9 13:07:35.277432 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 268) fe80::1 > fe80::3: OSPFv3, Database Description, length 268
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router], DD Flags [More], MTU 1500, DD-Sequence 0x00000bbd
+ Advertising Router 1.1.1.1, seq 0x80000012, age 29s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x8000000f, age 436s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x8000000a, age 445s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 476s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 30s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000001, age 810s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3, seq 0x80000001, age 605s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 605s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3, seq 0x80000001, age 595s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 1.1.1.1, seq 0x80000001, age 29s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 29s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 476s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ 10 13:07:35.281316 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 228) fe80::3 > fe80::1: OSPFv3, Database Description, length 228
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router], DD Flags [More, Master], MTU 1500, DD-Sequence 0x00000bbe
+ Advertising Router 1.1.1.1, seq 0x8000000f, age 435s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x8000000f, age 435s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x8000000d, age 32s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 811s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 2.2.2.2, seq 0x80000001, age 809s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3, seq 0x80000001, age 32s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 3.3.3.3, seq 0x80000001, age 32s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3, seq 0x80000001, age 32s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 3.3.3.3, seq 0x80000001, age 32s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000001, age 32s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 11 13:07:35.281336 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 124) fe80::3 > fe80::1: OSPFv3, LS-Request, length 124
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Advertising Router 1.1.1.1
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 12 13:07:35.293388 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::1 > fe80::3: OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x00000bbe
+ 13 13:07:35.293411 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 100) fe80::1 > fe80::3: OSPFv3, LS-Request, length 100
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 3.3.3.3
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 14 13:07:35.297316 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::3 > fe80::1: OSPFv3, Database Description, length 28
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router], DD Flags [Master], MTU 1500, DD-Sequence 0x00000bbf
+ 15 13:07:35.297335 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 296) fe80::3 > fe80::1: OSPFv3, LS-Update, length 296
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000d, age 33s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 3.3.3.3, seq 0x80000001, age 33s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5, metric 10
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 33s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 20
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 33s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 10
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 812s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 33s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 100, Link-local address fe80::3, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 33s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::3/128, Options [Local address], metric 0
+ 16 13:07:35.301381 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 376) fe80::1 > fe80::3: OSPFv3, LS-Update, length 376
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000012, age 30s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 3.3.3.3, seq 0x80000002, age 477s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Connected Routers:
+ 3.3.3.3
+ 2.2.2.2
+ 1.1.1.1
+ Advertising Router 3.3.3.3, seq 0x80000001, age 596s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2, metric 20
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 606s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1, metric 10
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 606s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0, metric 10
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 31s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 30s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::1, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 477s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 30s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::1/128, Options [Local address], metric 0
+ 17 13:07:35.309393 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::1 > fe80::3: OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x00000bbf
+ 18 13:07:35.865286 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::1: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000e, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 19 13:07:35.869363 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::1 > fe80::3: OSPFv3, LS-Update, length 60
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000013, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 20 13:07:37.805249 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::2 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Neighbor List:
+ 3.3.3.3
+ 21 13:07:37.805289 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::2 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Neighbor List:
+ 3.3.3.3
+ 22 13:07:37.817171 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::3 > fe80::2: OSPFv3, Database Description, length 28
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x00000d54
+ 23 13:07:37.817197 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 196) fe80::3 > fe80::2: OSPFv3, LS-Ack, length 196
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000012, age 30s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 477s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000001, age 596s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3, seq 0x80000001, age 606s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3, seq 0x80000001, age 606s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 31s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1, seq 0x80000001, age 30s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000002, age 477s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 30s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 24 13:07:37.821236 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::2 > fe80::3: OSPFv3, Database Description, length 28
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x00000b59
+ 25 13:07:37.821253 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 268) fe80::2 > fe80::3: OSPFv3, Database Description, length 268
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router], DD Flags [More], MTU 1500, DD-Sequence 0x00000d54
+ Advertising Router 1.1.1.1, seq 0x8000000f, age 439s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000012, age 29s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x8000000a, age 448s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 478s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 814s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 2.2.2.2, seq 0x80000001, age 30s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 3.3.3.3, seq 0x80000001, age 608s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 608s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3, seq 0x80000001, age 598s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 2.2.2.2, seq 0x80000001, age 29s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x80000001, age 29s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 478s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ 26 13:07:37.829237 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 156) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 156
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000d, age 33s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 33s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 3.3.3.3, seq 0x80000001, age 33s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3, seq 0x80000001, age 33s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 1.1.1.1, seq 0x80000001, age 812s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3, seq 0x80000001, age 33s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000001, age 33s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 27 13:07:37.833166 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 196) fe80::3 > fe80::1: OSPFv3, LS-Ack, length 196
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000012, age 30s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 477s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000001, age 596s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3, seq 0x80000001, age 606s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3, seq 0x80000001, age 606s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 31s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 1.1.1.1, seq 0x80000001, age 30s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000002, age 477s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 30s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 28 13:07:37.833184 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 368) fe80::3 > fe80::2: OSPFv3, Database Description, length 368
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router], DD Flags [More, Master], MTU 1500, DD-Sequence 0x00000d55
+ Advertising Router 1.1.1.1, seq 0x80000012, age 32s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x8000000f, age 438s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x8000000e, age 2s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 479s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 814s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1, seq 0x80000001, age 33s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000001, age 811s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3, seq 0x80000001, age 608s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 608s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3, seq 0x80000001, age 598s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3, seq 0x80000001, age 35s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 3.3.3.3, seq 0x80000001, age 35s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3, seq 0x80000001, age 35s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 3.3.3.3, seq 0x80000001, age 34s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 32s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 34s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 479s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ 29 13:07:37.837243 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::2 > fe80::3: OSPFv3, Database Description, length 28
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x00000d55
+ 30 13:07:37.837269 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 136) fe80::2 > fe80::3: OSPFv3, LS-Request, length 136
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 3.3.3.3
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 3.3.3.3
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 31 13:07:37.841168 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 64) fe80::3 > fe80::2: OSPFv3, LS-Request, length 64
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 32 13:07:37.841187 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::3 > fe80::2: OSPFv3, Database Description, length 28
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router], DD Flags [Master], MTU 1500, DD-Sequence 0x00000d56
+ 33 13:07:37.849161 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 424) fe80::3 > fe80::2: OSPFv3, LS-Update, length 424
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000e, age 3s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ Advertising Router 1.1.1.1, seq 0x80000012, age 33s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 3.3.3.3, seq 0x80000001, age 36s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5, metric 10
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 36s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 20
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 36s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 10
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 812s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 34s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 35s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 100, Link-local address fe80::3, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 35s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::3/128, Options [Local address], metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 33s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::1/128, Options [Local address], metric 0
+ 34 13:07:37.853237 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 188) fe80::2 > fe80::3: OSPFv3, LS-Update, length 188
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000012, age 30s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 2.2.2.2, seq 0x80000001, age 31s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 30s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::2, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 30s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::2/128, Options [Local address], metric 0
+ 35 13:07:37.853255 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::2 > fe80::3: OSPFv3, Database Description, length 28
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x00000d56
+ 36 13:07:37.897163 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 188) fe80::3 > fe80::2: OSPFv3, LS-Update, length 188
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000001, age 31s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::2, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000012, age 31s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 2.2.2.2, seq 0x80000001, age 32s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 31s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::2/128, Options [Local address], metric 0
+ 37 13:07:37.897182 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 188) fe80::3 > fe80::1: OSPFv3, LS-Update, length 188
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000001, age 31s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::2, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000012, age 31s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 2.2.2.2, seq 0x80000001, age 32s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 31s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::2/128, Options [Local address], metric 0
+ 38 13:07:37.909237 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 96) fe80::2 > fe80::3: OSPFv3, LS-Ack, length 96
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000001, age 31s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x80000012, age 31s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 32s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000001, age 31s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 39 13:07:38.421201 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::2 > fe80::3: OSPFv3, LS-Update, length 60
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000013, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 40 13:07:40.381118 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 216) fe80::2 > fe80::3: OSPFv3, LS-Ack, length 216
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000e, age 3s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000012, age 33s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 36s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 3.3.3.3, seq 0x80000001, age 36s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3, seq 0x80000001, age 36s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2, seq 0x80000001, age 812s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1, seq 0x80000001, age 34s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 3.3.3.3, seq 0x80000001, age 35s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000001, age 35s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 33s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 41 13:07:40.385057 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 96) fe80::3 > fe80::2: OSPFv3, LS-Ack, length 96
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000012, age 30s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 31s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000001, age 30s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x80000001, age 30s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 42 13:07:40.385070 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 96) fe80::3 > fe80::1: OSPFv3, LS-Ack, length 96
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000012, age 30s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 31s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000001, age 30s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x80000001, age 30s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 43 13:07:40.397091 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 96) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 96
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000001, age 31s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x80000012, age 31s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 32s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.5
+ Advertising Router 2.2.2.2, seq 0x80000001, age 31s, length 32
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 44 13:07:40.565080 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::1 > fe80::3: OSPFv3, LS-Update, length 60
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000013, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 45 13:07:40.609042 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::2: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000013, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 46 13:07:40.609083 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::1: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000013, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 47 13:07:40.689050 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::1: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000e, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 48 13:07:41.221043 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::1 > fe80::3: OSPFv3, LS-Update, length 56
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 16777215
+ 2001:db8:0:12::/64, metric 0
+ 49 13:07:41.265000 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 300) fe80::3 > fe80::2: OSPFv3, LS-Update, length 300
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Connected Routers:
+ 3.3.3.3
+ 2.2.2.2
+ 1.1.1.1
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2, metric 16777215
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1, metric 16777215
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0, metric 16777215
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x8000000f, age 1s, length 36
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 2.2.2.2
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ Neighbor Router-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 16777215
+ 2001:db8:0:12::/64, metric 0
+ 50 13:07:41.265021 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 300) fe80::3 > fe80::1: OSPFv3, LS-Update, length 300
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Connected Routers:
+ 3.3.3.3
+ 2.2.2.2
+ 1.1.1.1
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2, metric 16777215
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1, metric 16777215
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0, metric 16777215
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x8000000f, age 1s, length 36
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 2.2.2.2
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ Neighbor Router-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 16777215
+ 2001:db8:0:12::/64, metric 0
+ 51 13:07:43.056893 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::3 > fe80::2: OSPFv3, LS-Ack, length 56
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000013, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ 52 13:07:43.056930 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::3 > fe80::1: OSPFv3, LS-Ack, length 56
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000013, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ 53 13:07:43.116967 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 176) fe80::2 > fe80::3: OSPFv3, LS-Ack, length 176
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000013, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Advertising Router 3.3.3.3, seq 0x8000000f, age 1s, length 36
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ 54 13:07:43.188925 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 136) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 136
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000e, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ 55 13:07:43.372910 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::2 > fe80::3: OSPFv3, LS-Update, length 60
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000013, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 56 13:07:43.416878 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::2: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000013, age 7s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 57 13:07:43.416898 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::1: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000013, age 7s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 58 13:07:43.652899 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::2 > fe80::3: OSPFv3, LS-Update, length 56
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 16777215
+ 2001:db8:0:12::/64, metric 0
+ 59 13:07:43.696883 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::3 > fe80::2: OSPFv3, LS-Update, length 56
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 16777215
+ 2001:db8:0:12::/64, metric 0
+ 60 13:07:43.696906 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::3 > fe80::1: OSPFv3, LS-Update, length 56
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 16777215
+ 2001:db8:0:12::/64, metric 0
+ 61 13:07:45.862050 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::3 > fe80::2: OSPFv3, LS-Ack, length 56
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000013, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ 62 13:07:45.862092 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::3 > fe80::1: OSPFv3, LS-Ack, length 56
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000013, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ 63 13:07:45.942015 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 76) fe80::3 > fe80::1: OSPFv3, LS-Update, length 76
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000f, age 5s, length 36
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Router-ID 2.2.2.2
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ Neighbor Router-ID 1.1.1.1
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 64 13:07:45.948734 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 56
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000013, age 7s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ 65 13:07:48.436589 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 36
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000f, age 5s, length 36
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 66 13:08:02.739714 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 44) fe80::3 > ff02::5: OSPFv3, Hello, length 44
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Neighbor List:
+ 2.2.2.2
+ 1.1.1.1
+ 67 13:08:02.739757 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 44) fe80::3 > ff02::5: OSPFv3, Hello, length 44
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Neighbor List:
+ 2.2.2.2
+ 1.1.1.1
+ 68 13:08:02.747721 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 44) fe80::3 > ff02::5: OSPFv3, Hello, length 44
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Neighbor List:
+ 2.2.2.2
+ 1.1.1.1
+ 69 13:08:02.835724 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 44) fe80::3 > ff02::5: OSPFv3, Hello, length 44
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Neighbor List:
+ 2.2.2.2
+ 1.1.1.1
+ 70 13:08:05.275615 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::1 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Neighbor List:
+ 3.3.3.3
+ 71 13:08:05.275656 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::1 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Neighbor List:
+ 3.3.3.3
+ 72 13:08:07.859447 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::2 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Neighbor List:
+ 3.3.3.3
+ 73 13:08:07.859479 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::2 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Neighbor List:
+ 3.3.3.3
diff --git a/tests/ospf3_nbma-vv.out b/tests/ospf3_nbma-vv.out
new file mode 100644
index 0000000..c0f99ee
--- /dev/null
+++ b/tests/ospf3_nbma-vv.out
@@ -0,0 +1,912 @@
+ 1 12:56:10.520124 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::3 > fe80::2: OSPFv3, Hello, length 36
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Designated Router 3.3.3.3
+ Neighbor List:
+ 2 12:56:10.520170 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::3 > fe80::1: OSPFv3, Hello, length 36
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Designated Router 3.3.3.3
+ Neighbor List:
+ 3 12:56:25.058759 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::1 > fe80::3: OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Designated Router 1.1.1.1
+ Neighbor List:
+ 3.3.3.3
+ 4 12:56:25.066653 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::3 > fe80::1: OSPFv3, Database Description, length 28
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x0000149b
+ 5 12:56:25.074755 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::1 > fe80::3: OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x00001b67
+ 6 12:56:25.074796 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 308) fe80::1 > fe80::3: OSPFv3, Database Description, length 308
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router], DD Flags [More], MTU 1500, DD-Sequence 0x0000149b
+ Advertising Router 1.1.1.1, seq 0x8000000d, age 209s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x8000000a, age 517s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000006, age 1127s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1157s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 330s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 2.2.2.2, seq 0x80000001, age 509s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1303s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1303s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1303s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1, seq 0x80000001, age 329s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x80000001, age 1307s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1303s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 329s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1157s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ 7 12:56:25.114651 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 148) fe80::3 > fe80::1: OSPFv3, Database Description, length 148
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router], DD Flags [More, Master], MTU 1500, DD-Sequence 0x0000149c
+ Advertising Router 3.3.3.3, seq 0x80000002, age 14s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 124s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 124s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3, seq 0x80000001, age 114s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3, seq 0x80000001, age 134s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000001, age 134s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 8 12:56:25.114684 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 160) fe80::3 > fe80::1: OSPFv3, LS-Request, length 160
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 2.2.2.2
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Advertising Router 1.1.1.1
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 9 12:56:25.122754 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::1 > fe80::3: OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x0000149c
+ 10 12:56:25.122782 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 76) fe80::1 > fe80::3: OSPFv3, LS-Request, length 76
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 11 12:56:25.130647 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::3 > fe80::1: OSPFv3, Database Description, length 28
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router], DD Flags [Master], MTU 1500, DD-Sequence 0x0000149d
+ 12 12:56:25.130664 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 228) fe80::3 > fe80::1: OSPFv3, LS-Update, length 228
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000001, age 115s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2, metric 20
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 125s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1, metric 10
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 125s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0, metric 10
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 135s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 100, Link-local address fe80::3, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 135s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::/64, metric 64
+ 13 12:56:25.131366 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 504) fe80::1 > fe80::3: OSPFv3, LS-Update, length 504
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000006, age 1128s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ Advertising Router 2.2.2.2, seq 0x8000000a, age 518s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ Advertising Router 1.1.1.1, seq 0x8000000d, age 210s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1158s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Connected Routers:
+ 3.3.3.3
+ 2.2.2.2
+ 1.1.1.1
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1304s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 10
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1304s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 20
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 510s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 331s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 1308s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::2, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 330s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::1, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1158s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 330s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::/64, metric 64
+ 14 12:56:25.138746 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::1 > fe80::3: OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x0000149d
+ 15 12:56:25.186648 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 44) fe80::3 > fe80::1: OSPFv3, LS-Update, length 44
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000007, age 1s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ 16 12:56:25.634702 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 92) fe80::1 > fe80::3: OSPFv3, LS-Update, length 92
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ Advertising Router 1.1.1.1, seq 0x8000000e, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 17 12:56:25.682616 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 52) fe80::3 > fe80::1: OSPFv3, LS-Update, length 52
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ 18 12:56:27.602521 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::2 > fe80::3: OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Designated Router 2.2.2.2
+ Neighbor List:
+ 3.3.3.3
+ 19 12:56:27.610537 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::3 > fe80::2: OSPFv3, Database Description, length 28
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x0000027c
+ 20 12:56:27.618511 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::2 > fe80::3: OSPFv3, Database Description, length 28
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x00000cd9
+ 21 12:56:27.618552 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 308) fe80::2 > fe80::3: OSPFv3, Database Description, length 308
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router], DD Flags [More], MTU 1500, DD-Sequence 0x0000027c
+ Advertising Router 1.1.1.1, seq 0x8000000a, age 556s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x8000000d, age 209s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000006, age 1130s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1160s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 546s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2, seq 0x80000001, age 330s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1306s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1306s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1306s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1, seq 0x80000001, age 1310s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x80000001, age 329s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1305s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x80000001, age 329s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1160s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ 22 12:56:27.626537 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 348) fe80::3 > fe80::2: OSPFv3, Database Description, length 348
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router], DD Flags [More, Master], MTU 1500, DD-Sequence 0x0000027d
+ Advertising Router 1.1.1.1, seq 0x8000000d, age 212s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x8000000a, age 520s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000007, age 2s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1160s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 333s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 2.2.2.2, seq 0x80000001, age 512s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 3.3.3.3, seq 0x80000001, age 127s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 127s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3, seq 0x80000001, age 117s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1306s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1306s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1, seq 0x80000001, age 332s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x80000001, age 1310s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000001, age 136s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 332s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 1160s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ 23 12:56:27.626583 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 76) fe80::3 > fe80::2: OSPFv3, LS-Request, length 76
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 24 12:56:27.634505 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::2 > fe80::3: OSPFv3, Database Description, length 28
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x0000027d
+ 25 12:56:27.634553 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 136) fe80::2 > fe80::3: OSPFv3, LS-Request, length 136
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 3.3.3.3
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 1.1.1.1
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 26 12:56:27.642506 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 216) fe80::2 > fe80::3: OSPFv3, LS-Update, length 216
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x8000000d, age 210s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 2.2.2.2, seq 0x80000001, age 331s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 547s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 330s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::2, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 330s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::/64, metric 64
+ 27 12:56:27.642536 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::3 > fe80::2: OSPFv3, Database Description, length 28
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router], DD Flags [Master], MTU 1500, DD-Sequence 0x0000027e
+ 28 12:56:27.642577 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 404) fe80::3 > fe80::2: OSPFv3, LS-Update, length 404
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000007, age 3s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 1.1.1.1, seq 0x8000000d, age 213s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 3.3.3.3, seq 0x80000001, age 118s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2, metric 20
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 128s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1, metric 10
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 128s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0, metric 10
+ 2001:db8:0:3::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 513s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 334s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 137s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 100, Link-local address fe80::3, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 333s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::1, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 333s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::/64, metric 64
+ 29 12:56:27.650514 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::2 > fe80::3: OSPFv3, Database Description, length 28
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x0000027e
+ 30 12:56:27.650559 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 136) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 136
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000001, age 115s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3, seq 0x80000001, age 125s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3, seq 0x80000001, age 125s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 135s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000001, age 135s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000007, age 1s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 31 12:56:27.690533 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 216) fe80::3 > fe80::2: OSPFv3, LS-Update, length 216
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000001, age 331s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::2, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x8000000d, age 211s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 2.2.2.2, seq 0x80000001, age 332s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 548s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 331s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::/64, metric 64
+ 32 12:56:27.690575 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 216) fe80::3 > fe80::1: OSPFv3, LS-Update, length 216
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000001, age 331s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Priority 1, Link-local address fe80::2, Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x8000000d, age 211s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Advertising Router 2.2.2.2, seq 0x80000001, age 332s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 1.1.1.1, seq 0x80000001, age 548s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 10
+ 2001:db8:0:12::/64, metric 0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 331s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 1:
+ 2001:db8::/64, metric 64
+ 33 12:56:27.698520 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 116) fe80::2 > fe80::3: OSPFv3, LS-Ack, length 116
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000001, age 331s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x8000000d, age 211s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 332s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1, seq 0x80000001, age 548s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2, seq 0x80000001, age 331s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 34 12:56:28.178492 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 92) fe80::2 > fe80::3: OSPFv3, LS-Update, length 92
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ Advertising Router 2.2.2.2, seq 0x8000000e, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 35 12:56:30.154361 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 216) fe80::2 > fe80::3: OSPFv3, LS-Ack, length 216
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000007, age 3s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x8000000d, age 213s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000001, age 118s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.2
+ Advertising Router 3.3.3.3, seq 0x80000001, age 128s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.1
+ Advertising Router 3.3.3.3, seq 0x80000001, age 128s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 513s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 1.1.1.1, seq 0x80000001, age 334s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3, seq 0x80000001, age 137s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 333s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 1.1.1.1, seq 0x80000001, age 333s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 36 12:56:30.202365 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 116) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 116
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000001, age 331s, length 36
+ Link LSA (8), Link Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 2.2.2.2, seq 0x8000000d, age 211s, length 4
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000001, age 332s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 1.1.1.1, seq 0x80000001, age 548s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2, seq 0x80000001, age 331s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 37 12:56:30.466348 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 92) fe80::1 > fe80::3: OSPFv3, LS-Update, length 92
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ Advertising Router 1.1.1.1, seq 0x8000000e, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 38 12:56:30.514365 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 92) fe80::3 > fe80::2: OSPFv3, LS-Update, length 92
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ Advertising Router 1.1.1.1, seq 0x8000000e, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 39 12:56:30.514436 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 92) fe80::3 > fe80::1: OSPFv3, LS-Update, length 92
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ Advertising Router 1.1.1.1, seq 0x8000000e, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 40 12:56:30.690347 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 52) fe80::3 > fe80::1: OSPFv3, LS-Update, length 52
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ 41 12:56:30.738374 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 244) fe80::3 > fe80::2: OSPFv3, LS-Update, length 244
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000002, age 1s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Connected Routers:
+ 3.3.3.3
+ 2.2.2.2
+ 1.1.1.1
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 16777215
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 16777215
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 1s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000008, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ 42 12:56:30.738401 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 244) fe80::3 > fe80::1: OSPFv3, LS-Update, length 244
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000002, age 1s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Options [V6, External, Router, Demand Circuit]
+ Connected Routers:
+ 3.3.3.3
+ 2.2.2.2
+ 1.1.1.1
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4, metric 16777215
+ 2001:db8:0:34::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 16777215
+ 2001:db8:0:4::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 1s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Prefixes 1:
+ 2001:db8::/64, metric 0
+ Advertising Router 3.3.3.3, seq 0x80000008, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ 43 12:56:30.746343 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::2 > fe80::3: OSPFv3, LS-Ack, length 36
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 44 12:56:32.778226 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::1 > fe80::3: OSPFv3, LS-Update, length 56
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 16777215
+ 2001:db8:0:12::/64, metric 0
+ 45 12:56:32.818200 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::3 > fe80::2: OSPFv3, LS-Update, length 56
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 16777215
+ 2001:db8:0:12::/64, metric 0
+ 46 12:56:32.818219 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::3 > fe80::1: OSPFv3, LS-Update, length 56
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 16777215
+ 2001:db8:0:12::/64, metric 0
+ 47 12:56:32.978223 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 92) fe80::2 > fe80::3: OSPFv3, LS-Update, length 92
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ Advertising Router 2.2.2.2, seq 0x8000000e, age 5s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 48 12:56:33.018222 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 176) fe80::2 > fe80::3: OSPFv3, LS-Ack, length 176
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x8000000e, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 1s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 3.3.3.3, seq 0x80000002, age 1s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Advertising Router 3.3.3.3, seq 0x80000008, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ 49 12:56:33.026182 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 92) fe80::3 > fe80::2: OSPFv3, LS-Update, length 92
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ Advertising Router 2.2.2.2, seq 0x8000000e, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 50 12:56:33.026198 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 92) fe80::3 > fe80::1: OSPFv3, LS-Update, length 92
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ Advertising Router 2.2.2.2, seq 0x8000000e, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 51 12:56:33.034261 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 236) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 236
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x8000000e, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 3.3.3.3, seq 0x80000002, age 1s, length 16
+ Network LSA (2), Area Local Scope, LSA-ID 0.0.0.6
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.4
+ Advertising Router 3.3.3.3, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 3.3.3.3, seq 0x80000002, age 1s, length 24
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.24.0
+ Advertising Router 3.3.3.3, seq 0x80000008, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 1.1.1.1, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x8000000e, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 52 12:56:33.146248 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::2 > fe80::3: OSPFv3, LS-Update, length 56
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 16777215
+ 2001:db8:0:12::/64, metric 0
+ 53 12:56:33.186180 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::3 > fe80::2: OSPFv3, LS-Update, length 56
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 16777215
+ 2001:db8:0:12::/64, metric 0
+ 54 12:56:33.186194 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 56) fe80::3 > fe80::1: OSPFv3, LS-Update, length 56
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3, metric 16777215
+ 2001:db8:0:12::/64, metric 0
+ 55 12:56:35.546112 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 76) fe80::2 > fe80::3: OSPFv3, LS-Ack, length 76
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x8000000e, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ 56 12:56:35.630120 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 52) fe80::3 > fe80::1: OSPFv3, LS-Update, length 52
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Prefixes 0:
+ 57 12:56:35.634107 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 36
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000003, age 3600s, length 12
+ Intra-Area Prefix LSA (9), Area Local Scope, LSA-ID 0.0.0.0
+ 58 12:56:35.682093 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 36
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x80000002, age 3600s, length 16
+ Inter-Area Prefix LSA (3), Area Local Scope, LSA-ID 0.0.0.3
+ 59 12:56:40.513861 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 44) fe80::3 > fe80::2: OSPFv3, Hello, length 44
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Designated Router 3.3.3.3
+ Neighbor List:
+ 2.2.2.2
+ 1.1.1.1
+ 60 12:56:40.513903 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 44) fe80::3 > fe80::1: OSPFv3, Hello, length 44
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Designated Router 3.3.3.3
+ Neighbor List:
+ 2.2.2.2
+ 1.1.1.1
+ 61 12:56:55.077529 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::1 > fe80::3: OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Designated Router 3.3.3.3, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 3.3.3.3
+ 62 12:56:55.621439 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::2: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000009, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 63 12:56:55.621503 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::1: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000009, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 64 12:56:57.597350 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::2 > fe80::3: OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Designated Router 3.3.3.3, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 3.3.3.3
+ 65 12:56:58.129308 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::2 > fe80::3: OSPFv3, LS-Ack, length 36
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000009, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 66 12:56:58.137304 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 36
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x80000009, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 67 12:57:01.428622 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::2: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000a, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 68 12:57:01.428665 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::1: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000a, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 69 12:57:03.920484 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 36
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000a, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 70 12:57:03.964500 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::2 > fe80::3: OSPFv3, LS-Ack, length 36
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 3.3.3.3, seq 0x8000000a, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 71 12:57:10.516537 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 44) fe80::3 > fe80::2: OSPFv3, Hello, length 44
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Designated Router 3.3.3.3, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 2.2.2.2
+ 1.1.1.1
+ 72 12:57:10.516615 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 44) fe80::3 > fe80::1: OSPFv3, Hello, length 44
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Designated Router 3.3.3.3, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 2.2.2.2
+ 1.1.1.1
+ 73 12:57:11.052537 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::2 > fe80::3: OSPFv3, LS-Update, length 60
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x8000000f, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 74 12:57:11.064532 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::1 > fe80::3: OSPFv3, LS-Update, length 60
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x8000000f, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 75 12:57:11.111825 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::2: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x8000000f, age 2s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 76 12:57:11.111865 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::1: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x8000000f, age 2s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 77 12:57:13.559693 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::3 > fe80::2: OSPFv3, LS-Ack, length 36
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x8000000f, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 78 12:57:13.559729 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::3 > fe80::1: OSPFv3, LS-Ack, length 36
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x8000000f, age 1s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 79 12:57:13.619680 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::2 > fe80::3: OSPFv3, LS-Ack, length 36
+ Router-ID 2.2.2.2, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x8000000f, age 2s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 80 12:57:13.635674 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 36
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 1.1.1.1, seq 0x8000000f, age 2s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 81 12:57:16.008230 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 60) fe80::3 > fe80::1: OSPFv3, LS-Update, length 60
+ Router-ID 3.3.3.3, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x8000000f, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ Options [V6, External, Router, Demand Circuit], RLA-Flags [ABR]
+ Neighbor Network-ID 3.3.3.3
+ Neighbor Interface-ID 0.0.0.6, Interface 0.0.0.6, metric 64
+ 82 12:57:18.523425 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > fe80::3: OSPFv3, LS-Ack, length 36
+ Router-ID 1.1.1.1, Backbone Area
+ Advertising Router 2.2.2.2, seq 0x8000000f, age 6s, length 20
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0
+ 83 12:57:25.052641 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::1 > fe80::3: OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Designated Router 3.3.3.3, Backup Designated Router 1.1.1.1
+ Neighbor List:
+ 3.3.3.3
+ 84 12:57:27.615077 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::2 > fe80::3: OSPFv3, Hello, length 40
+ Router-ID 2.2.2.2, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 1
+ Designated Router 3.3.3.3, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 3.3.3.3
+ 85 12:57:40.521937 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 44) fe80::3 > fe80::2: OSPFv3, Hello, length 44
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Designated Router 3.3.3.3, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 2.2.2.2
+ 1.1.1.1
+ 86 12:57:40.521984 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 44) fe80::3 > fe80::1: OSPFv3, Hello, length 44
+ Router-ID 3.3.3.3, Backbone Area
+ Options [V6, External, Router]
+ Hello Timer 30s, Dead Timer 120s, Interface-ID 0.0.0.6, Priority 100
+ Designated Router 3.3.3.3, Backup Designated Router 2.2.2.2
+ Neighbor List:
+ 2.2.2.2
+ 1.1.1.1
diff --git a/tests/ospf6_decode_v3_asan.out b/tests/ospf6_decode_v3_asan.out
new file mode 100644
index 0000000..d046fef
--- /dev/null
+++ b/tests/ospf6_decode_v3_asan.out
@@ -0,0 +1,2 @@
+ 1 12:49:49.8916227 IP6 (class 0x76, flowlabel 0xf6701, hlim 109, next-header OSPF (89) payload length: 30311) 6767:6780:6767:a102:4:b6:5853:f040 > 1000:a32:8847:1::116: OSPFv3, Hello, length 30311
+ Router-ID 1.1.0.34, Area 0.255.2.2, Instance 82 [|ospf3]
diff --git a/tests/ospf6_decode_v3_asan.pcap b/tests/ospf6_decode_v3_asan.pcap
new file mode 100644
index 0000000..f27648a
--- /dev/null
+++ b/tests/ospf6_decode_v3_asan.pcap
Binary files differ
diff --git a/tests/ospf6_print_lshdr-oobr.out b/tests/ospf6_print_lshdr-oobr.out
new file mode 100644
index 0000000..e5bd0e3
--- /dev/null
+++ b/tests/ospf6_print_lshdr-oobr.out
@@ -0,0 +1,59 @@
+ 1 12:43:11.663317 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 2 12:43:21.639415 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 3 12:43:31.662021 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 4 12:43:41.1756221 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::1 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 5 12:43:46.469862 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 36) fe80::2 > ff02::5: OSPFv3, Hello, length 36
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Neighbor List:
+ 6 12:43:51.641566 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 40) fe80::1 > ff02::5: OSPFv3, Hello, length 40
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router]
+ Hello Timer 10s, Dead Timer 40s, Interface-ID 0.0.0.5, Priority 1
+ Designated Router 1.1.1.1
+ Neighbor List: [|ospf3]
+ 7 12:43:51.657571 IP6 (class 0xe0, flowlabel 0x00100, hlim 1, next-header OSPF (89) payload length: 28) fe80::2 > fe80::1: OSPFv3, Database Description, length 28
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x00001d46
+ 8 12:43:51.661568 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::1 > fe80::2: OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [Init, More, Master], MTU 1500, DD-Sequence 0x0000242c
+ 9 12:43:51.665572 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 168) fe80::1 > fe80::2: OSPFv3, Database Description, length 168
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [More], MTU 1500, DD-Sequence 0x00001d46 [|ospf3]
+ 10 12:43:51.669564 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 148) fe80::2 > fe80::1: OSPFv3, Database Description, length 148
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [More, Master], MTU 1500, DD-Sequence 0x00001d47 [|ospf3]
+ 11 12:43:51.673558 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::1 > fe80::2: OSPFv3, Database Description, length 28
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [none], MTU 1500, DD-Sequence 0x00001d47
+ 12 12:43:51.673584 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 100) fe80::2 > fe80::1: OSPFv3, LS-Request, length 100
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Advertising Router 1.1.1.1
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0 [|ospf3]
+ 13 12:43:51.677560 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 88) fe80::1 > fe80::2: OSPFv3, LS-Request, length 88
+ Router-ID 1.1.1.1, Area 0.0.0.1
+ Advertising Router 2.2.2.2
+ Router LSA (1), Area Local Scope, LSA-ID 0.0.0.0 [|ospf3]
+ 14 12:43:51.677587 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 28) fe80::2 > fe80::1: OSPFv3, Database Description, length 28
+ Router-ID 2.2.2.2, Area 0.0.0.1
+ Options [V6, External, Router], DD Flags [Master], MTU 1500, DD-Sequence 0x00001d48
+ 15 12:43:51.681554 IP6 (class 0xe0, hlim 1, next-header OSPF (89) payload length: 288) fe80::1 > fe80:0:ff:ffff:f000::2: OSPFv3, LS-Update, length 288
+ Router-ID 1.1.1.1, Area 0.0.0.1 [|ospf3]
diff --git a/tests/ospf6_print_lshdr-oobr.pcap b/tests/ospf6_print_lshdr-oobr.pcap
new file mode 100644
index 0000000..67fe02e
--- /dev/null
+++ b/tests/ospf6_print_lshdr-oobr.pcap
Binary files differ
diff --git a/tests/otv-heapoverflow-1.out b/tests/otv-heapoverflow-1.out
new file mode 100644
index 0000000..c002f9d
--- /dev/null
+++ b/tests/otv-heapoverflow-1.out
@@ -0,0 +1,10 @@
+ 1 15:08:45.910679 IP 192.168.0.134.47808 > 192.168.0.24.47808: UDP, length 6
+ 2 15:08:45.910728 IP 192.168.0.134.47808 > 192.168.0.24.47808: UDP, length 12
+ 3 15:08:45.916723 IP 192.168.0.24.47808 > 192.168.0.134.47808: UDP, length 6
+ 4 15:08:45.919556 IP 192.168.0.24.47808 > 192.168.0.255.47808: UDP, length 18
+ 5 15:08:45.919723 IP 192.168.0.105.47808 > 192.168.0.255.47808: UDP, length 25
+ 6 15:08:45.936414 IP 192.168.0.24.47808 > 192.168.0.134.47808: UDP, length 31
+ 7 15:08:45.937216 IP 192.168.0.18.47808 > 192.168.0.255.47808: UDP, length 24
+ 8 15:08:45.948725 IP 192.168.0.24.40896 > 192.168.0.134.47808: UDP, length 30
+ 9 15:08:45.960097 IP 192.168.0.24.47808 > 192.168.0.255.47808: UDP, length 20
+ 10 15:08:45.963239 IP 192.168.0.9.37123 > 97.34.1.224.8472: OTV, flags [I] (0x9d), overlay 12124160, [|otv]
diff --git a/tests/otv-heapoverflow-1.pcap b/tests/otv-heapoverflow-1.pcap
new file mode 100644
index 0000000..6e78e70
--- /dev/null
+++ b/tests/otv-heapoverflow-1.pcap
Binary files differ
diff --git a/tests/otv-heapoverflow-2.out b/tests/otv-heapoverflow-2.out
new file mode 100644
index 0000000..d24d97a
--- /dev/null
+++ b/tests/otv-heapoverflow-2.out
@@ -0,0 +1,11 @@
+ 1 15:08:45.910679 IP 192.168.0.134.47808 > 192.168.0.24.47808: UDP, length 6
+ 2 15:08:45.910728 IP 192.168.0.134.47808 > 192.168.0.24.47808: UDP, length 12
+ 3 15:08:45.916723 IP 192.168.0.24.47808 > 192.168.0.134.47808: UDP, length 6
+ 4 15:08:45.919556 IP 192.168.0.24.47808 > 192.168.0.255.47808: UDP, length 18
+ 5 15:08:45.919723 IP 192.168.0.105.47808 > 192.168.0.255.47808: UDP, length 25
+ 6 15:08:45.936414 IP 192.168.0.24.47808 > 192.168.0.134.47808: UDP, length 31
+ 7 15:08:45.937216 IP 192.168.0.18.47808 > 192.168.0.255.47808: UDP, length 24
+ 8 15:08:45.948725 IP 192.168.0.24.40896 > 192.168.0.134.47808: UDP, length 30
+ 9 15:08:45.960097 IP 192.168.0.24.47808 > 192.168.0.255.47808: UDP, length 20
+ 10 15:08:45.963239 IP 192.168.0.9.37123 > 97.34.1.224.8472: OTV, flags [I] (0x9d), overlay 12124160, instance 4587520
+ [|ether]
diff --git a/tests/otv-heapoverflow-2.pcap b/tests/otv-heapoverflow-2.pcap
new file mode 100644
index 0000000..5bb3c4a
--- /dev/null
+++ b/tests/otv-heapoverflow-2.pcap
Binary files differ
diff --git a/tests/pgm_group_addr_asan.out b/tests/pgm_group_addr_asan.out
new file mode 100644
index 0000000..8d1627d
--- /dev/null
+++ b/tests/pgm_group_addr_asan.out
@@ -0,0 +1,2 @@
+ 1 21:09:23.132118 IP (tos 0x41,ECT(1), id 40256, offset 0, flags [none], proto PGM (113), length 768, options (unknown 89 [bad length 232]), bad cksum 5959 (->5afd)!)
+ 89.121.89.107 > 89.89.89.89: 89.121.89.107.32322 > 89.89.89.89.500: PGM, length 24818 0x00ff7f010347 [|pgm]
diff --git a/tests/pgm_group_addr_asan.pcap b/tests/pgm_group_addr_asan.pcap
new file mode 100644
index 0000000..6ec9092
--- /dev/null
+++ b/tests/pgm_group_addr_asan.pcap
Binary files differ
diff --git a/tests/pgm_opts_asan.out b/tests/pgm_opts_asan.out
new file mode 100644
index 0000000..6cc9b06
--- /dev/null
+++ b/tests/pgm_opts_asan.out
@@ -0,0 +1,2 @@
+ 1 00:04:16.587271427 IP (tos 0x41,ECT(1), id 0, offset 0, flags [none], proto PGM (113), length 32639, options (unknown 89 [bad length 232]), bad cksum 5959 (->9eb9)!)
+ 128.121.89.107 > 89.89.16.63: 128.121.89.107.4 > 89.89.16.63.225: PGM, length 0 0x3414eb1f0022 UNKNOWN type 0x1f OPTS LEN 225 OPT_1F [13] OPT_06 [26] PATH_NLA [4] [|pgm]
diff --git a/tests/pgm_opts_asan.pcap b/tests/pgm_opts_asan.pcap
new file mode 100644
index 0000000..3374665
--- /dev/null
+++ b/tests/pgm_opts_asan.pcap
Binary files differ
diff --git a/tests/pgm_opts_asan_2.out b/tests/pgm_opts_asan_2.out
new file mode 100644
index 0000000..1785a57
--- /dev/null
+++ b/tests/pgm_opts_asan_2.out
@@ -0,0 +1,2 @@
+ 1 00:04:16.587271427 IP (tos 0x41,ECT(1), id 0, offset 0, flags [none], proto PGM (113), length 32639, options (unknown 89 [bad length 232]), bad cksum 5959 (->96b9)!)
+ 128.121.89.107 > 89.89.16.63: 128.121.89.107.4 > 89.89.16.63.225: PGM, length 0 0x3414eb1f0022 UNKNOWN type 0x1f OPTS LEN 225 OPT_1F [13] OPT_06 [26] [Bad OPT_PGMCC_DATA option, length 4 < 12]
diff --git a/tests/pgm_opts_asan_2.pcap b/tests/pgm_opts_asan_2.pcap
new file mode 100644
index 0000000..1c55ed7
--- /dev/null
+++ b/tests/pgm_opts_asan_2.pcap
Binary files differ
diff --git a/tests/pgm_opts_asan_3.out b/tests/pgm_opts_asan_3.out
new file mode 100644
index 0000000..2e35f2f
--- /dev/null
+++ b/tests/pgm_opts_asan_3.out
@@ -0,0 +1,2 @@
+ 1 00:04:16.587271427 IP (tos 0x41,ECT(1), id 0, offset 0, flags [none], proto PGM (113), length 32639, options (unknown 89 [bad length 232]), bad cksum 5959 (->f814)!)
+ 128.121.89.16 > 0.89.16.63: 128.121.89.16.4 > 0.89.16.63.225: PGM, length 0 0x3414eb1f0022 UNKNOWN type 0x1f OPTS LEN 225 OPT_1F [13] OPT_06 [26] [Bad OPT_REDIRECT option, length 4 < 8]
diff --git a/tests/pgm_opts_asan_3.pcap b/tests/pgm_opts_asan_3.pcap
new file mode 100644
index 0000000..f89aeef
--- /dev/null
+++ b/tests/pgm_opts_asan_3.pcap
Binary files differ
diff --git a/tests/pgm_poll_polr.out b/tests/pgm_poll_polr.out
new file mode 100644
index 0000000..1494aa0
--- /dev/null
+++ b/tests/pgm_poll_polr.out
@@ -0,0 +1,40 @@
+ 1 00:23:25.857579 IP (tos 0x0, ttl 1, id 45546, offset 0, flags [DF], proto PGM (113), length 64)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.1234 > 239.255.194.10.5678: PGM, length 0 0x83f2d6491cb3 POLL seq 0 round 0 nla 10.0.2.15 ivl 0 rnd 0x00000000 mask 0x00000000 [44]
+ 2 00:23:25.858513 IP (tos 0x0, ttl 1, id 45547, offset 0, flags [DF], proto PGM (113), length 44)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.5678 > 239.255.194.10.1234: PGM, length 0 0x83f2d6491cb3 POLR seq 0 round 0 [24]
+ 3 00:23:26.860519 IP (tos 0x0, ttl 1, id 45553, offset 0, flags [DF], proto PGM (113), length 64)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.1234 > 239.255.194.10.5678: PGM, length 0 0x83f2d6491cb3 POLL seq 1 round 0 nla 10.0.2.15 ivl 0 rnd 0x00000000 mask 0x00000000 [44]
+ 4 00:23:26.861113 IP (tos 0x0, ttl 1, id 45554, offset 0, flags [DF], proto PGM (113), length 44)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.5678 > 239.255.194.10.1234: PGM, length 0 0x83f2d6491cb3 POLR seq 1 round 0 [24]
+ 5 00:23:27.861861 IP (tos 0x0, ttl 1, id 45664, offset 0, flags [DF], proto PGM (113), length 64)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.1234 > 239.255.194.10.5678: PGM, length 0 0x83f2d6491cb3 POLL seq 2 round 0 nla 10.0.2.15 ivl 0 rnd 0x00000000 mask 0x00000000 [44]
+ 6 00:23:27.862356 IP (tos 0x0, ttl 1, id 45665, offset 0, flags [DF], proto PGM (113), length 44)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.5678 > 239.255.194.10.1234: PGM, length 0 0x83f2d6491cb3 POLR seq 2 round 0 [24]
+ 7 00:23:28.904540 IP (tos 0x0, ttl 1, id 45785, offset 0, flags [DF], proto PGM (113), length 64)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.1234 > 239.255.194.10.5678: PGM, length 0 0x83f2d6491cb3 POLL seq 3 round 0 nla 10.0.2.15 ivl 0 rnd 0x00000000 mask 0x00000000 [44]
+ 8 00:23:28.904976 IP (tos 0x0, ttl 1, id 45786, offset 0, flags [DF], proto PGM (113), length 44)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.5678 > 239.255.194.10.1234: PGM, length 0 0x83f2d6491cb3 POLR seq 3 round 0 [24]
+ 9 00:23:29.911224 IP (tos 0x0, ttl 1, id 45828, offset 0, flags [DF], proto PGM (113), length 64)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.1234 > 239.255.194.10.5678: PGM, length 0 0x83f2d6491cb3 POLL seq 4 round 0 nla 10.0.2.15 ivl 0 rnd 0x00000000 mask 0x00000000 [44]
+ 10 00:23:29.911436 IP (tos 0x0, ttl 1, id 45829, offset 0, flags [DF], proto PGM (113), length 44)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.5678 > 239.255.194.10.1234: PGM, length 0 0x83f2d6491cb3 POLR seq 4 round 0 [24]
+ 11 00:23:30.912040 IP (tos 0x0, ttl 1, id 45879, offset 0, flags [DF], proto PGM (113), length 64)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.1234 > 239.255.194.10.5678: PGM, length 0 0x83f2d6491cb3 POLL seq 5 round 0 nla 10.0.2.15 ivl 0 rnd 0x00000000 mask 0x00000000 [44]
+ 12 00:23:30.912181 IP (tos 0x0, ttl 1, id 45880, offset 0, flags [DF], proto PGM (113), length 44)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.5678 > 239.255.194.10.1234: PGM, length 0 0x83f2d6491cb3 POLR seq 5 round 0 [24]
+ 13 00:23:31.912569 IP (tos 0x0, ttl 1, id 46126, offset 0, flags [DF], proto PGM (113), length 64)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.1234 > 239.255.194.10.5678: PGM, length 0 0x83f2d6491cb3 POLL seq 6 round 0 nla 10.0.2.15 ivl 0 rnd 0x00000000 mask 0x00000000 [44]
+ 14 00:23:31.912784 IP (tos 0x0, ttl 1, id 46127, offset 0, flags [DF], proto PGM (113), length 44)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.5678 > 239.255.194.10.1234: PGM, length 0 0x83f2d6491cb3 POLR seq 6 round 0 [24]
+ 15 00:23:32.914834 IP (tos 0x0, ttl 1, id 46360, offset 0, flags [DF], proto PGM (113), length 64)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.1234 > 239.255.194.10.5678: PGM, length 0 0x83f2d6491cb3 POLL seq 7 round 0 nla 10.0.2.15 ivl 0 rnd 0x00000000 mask 0x00000000 [44]
+ 16 00:23:32.915259 IP (tos 0x0, ttl 1, id 46361, offset 0, flags [DF], proto PGM (113), length 44)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.5678 > 239.255.194.10.1234: PGM, length 0 0x83f2d6491cb3 POLR seq 7 round 0 [24]
+ 17 00:23:33.915505 IP (tos 0x0, ttl 1, id 46372, offset 0, flags [DF], proto PGM (113), length 64)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.1234 > 239.255.194.10.5678: PGM, length 0 0x83f2d6491cb3 POLL seq 8 round 0 nla 10.0.2.15 ivl 0 rnd 0x00000000 mask 0x00000000 [44]
+ 18 00:23:33.917959 IP (tos 0x0, ttl 1, id 46373, offset 0, flags [DF], proto PGM (113), length 44)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.5678 > 239.255.194.10.1234: PGM, length 0 0x83f2d6491cb3 POLR seq 8 round 0 [24]
+ 19 00:23:34.915913 IP (tos 0x0, ttl 1, id 46546, offset 0, flags [DF], proto PGM (113), length 64)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.1234 > 239.255.194.10.5678: PGM, length 0 0x83f2d6491cb3 POLL seq 9 round 0 nla 10.0.2.15 ivl 0 rnd 0x00000000 mask 0x00000000 [44]
+ 20 00:23:34.916198 IP (tos 0x0, ttl 1, id 46547, offset 0, flags [DF], proto PGM (113), length 44)
+ 10.0.2.15 > 239.255.194.10: 10.0.2.15.5678 > 239.255.194.10.1234: PGM, length 0 0x83f2d6491cb3 POLR seq 9 round 0 [24]
diff --git a/tests/pgm_poll_polr.pcap b/tests/pgm_poll_polr.pcap
new file mode 100644
index 0000000..fc44d82
--- /dev/null
+++ b/tests/pgm_poll_polr.pcap
Binary files differ
diff --git a/tests/pgm_zmtp1.pcap b/tests/pgm_zmtp1.pcap
new file mode 100644
index 0000000..ee01e91
--- /dev/null
+++ b/tests/pgm_zmtp1.pcap
Binary files differ
diff --git a/tests/pgm_zmtp1v.out b/tests/pgm_zmtp1v.out
new file mode 100644
index 0000000..e5d6a71
--- /dev/null
+++ b/tests/pgm_zmtp1v.out
@@ -0,0 +1,70 @@
+ 1 16:21:11.849644 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92190 trail 21618 lead 54950 nla 10.0.0.45 [36]
+ 2 16:21:11.950169 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92191 trail 21618 lead 54950 nla 10.0.0.45 [36]
+ 3 16:21:12.050601 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92192 trail 21618 lead 54950 nla 10.0.0.45 [36]
+ 4 16:21:12.548313 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 1480)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 1436 0x3329041eba74 ODATA trail 21618 seq 54951 [1460]
+ frame offset 0x0000
+ frame flags+body (8-bit) length 116, flags 0x00 (-|-|-|-|-|-|-|-), first 115 byte(s) of body:
+ 0x0000: 5468 6973 2069 7320 6120 7368 6f72 7420 This.is.a.short.
+ 0x0010: 4153 4349 4920 6d65 7373 6167 6520 666f ASCII.message.fo
+ 0x0020: 6c6c 6f77 6564 2062 7920 6120 7368 6f72 llowed.by.a.shor
+ 0x0030: 7420 6269 6e61 7279 206d 6573 7361 6765 t.binary.message
+ 0x0040: 2c20 6120 6c6f 6e67 6572 2041 5343 4949 ,.a.longer.ASCII
+ 0x0050: 206d 6573 7361 6765 2061 6e64 2061 2073 .message.and.a.s
+ 0x0060: 686f 7274 2041 5343 4949 206d 6573 7361 hort.ASCII.messa
+ 0x0070: 6765 2e ge.
+ frame flags+body (8-bit) length 17, flags 0x00 (-|-|-|-|-|-|-|-), first 16 byte(s) of body:
+ 0x0000: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ................
+ frame flags+body (64-bit) length 2790 (1290 captured), flags 0x00 (-|-|-|-|-|-|-|-), first 128 byte(s) of body:
+ 0x0000: 5468 6520 7175 6963 6b20 6272 6f77 6e20 The.quick.brown.
+ 0x0010: 666f 7820 6a75 6d70 7320 6f76 6572 2074 fox.jumps.over.t
+ 0x0020: 6865 206c 617a 7920 646f 672e 2054 6865 he.lazy.dog..The
+ 0x0030: 2071 7569 636b 2062 726f 776e 2066 6f78 .quick.brown.fox
+ 0x0040: 206a 756d 7073 206f 7665 7220 7468 6520 .jumps.over.the.
+ 0x0050: 6c61 7a79 2064 6f67 2e20 5468 6520 7175 lazy.dog..The.qu
+ 0x0060: 6963 6b20 6272 6f77 6e20 666f 7820 6a75 ick.brown.fox.ju
+ 0x0070: 6d70 7320 6f76 6572 2074 6865 206c 617a mps.over.the.laz [|zmtp1]
+ 5 16:21:12.548346 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 1480)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 1436 0x3329041eba74 ODATA trail 21619 seq 54952 [1460]
+ frame offset 0xffff
+ frame intermediate part, 1434 bytes, first 128 byte(s):
+ 0x0000: 7220 7468 6520 6c61 7a79 2064 6f67 2e20 r.the.lazy.dog..
+ 0x0010: 5468 6520 7175 6963 6b20 6272 6f77 6e20 The.quick.brown.
+ 0x0020: 666f 7820 6a75 6d70 7320 6f76 6572 2074 fox.jumps.over.t
+ 0x0030: 6865 206c 617a 7920 646f 672e 2054 6865 he.lazy.dog..The
+ 0x0040: 2071 7569 636b 2062 726f 776e 2066 6f78 .quick.brown.fox
+ 0x0050: 206a 756d 7073 206f 7665 7220 7468 6520 .jumps.over.the.
+ 0x0060: 6c61 7a79 2064 6f67 2e20 5468 6520 7175 lazy.dog..The.qu
+ 0x0070: 6963 6b20 6272 6f77 6e20 666f 7820 6a75 ick.brown.fox.ju
+ 6 16:21:12.548392 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 149)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 105 0x3329041eba74 ODATA trail 21620 seq 54953 [129]
+ frame offset 0x0042
+ frame intermediate part, 66 bytes, first 66 byte(s):
+ 0x0000: 7073 206f 7665 7220 7468 6520 6c61 7a79 ps.over.the.lazy
+ 0x0010: 2064 6f67 2e20 5468 6520 7175 6963 6b20 .dog..The.quick.
+ 0x0020: 6272 6f77 6e20 666f 7820 6a75 6d70 7320 brown.fox.jumps.
+ 0x0030: 6f76 6572 2074 6865 206c 617a 7920 646f over.the.lazy.do
+ 0x0040: 672e g.
+ frame flags+body (8-bit) length 36, flags 0x00 (-|-|-|-|-|-|-|-), first 35 byte(s) of body:
+ 0x0000: 5468 6973 2069 7320 7468 6520 7472 6169 This.is.the.trai
+ 0x0010: 6c69 6e67 2041 5343 4949 206d 6573 7361 ling.ASCII.messa
+ 0x0020: 6765 2e ge.
+ 7 16:21:12.648918 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92193 trail 21621 lead 54953 nla 10.0.0.45 [36]
+ 8 16:21:12.649033 IP (tos 0xb8, ttl 1, id 0, offset 0, flags [DF], proto PGM (113), length 36)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.5563 > 239.255.0.16.13320: PGM, length 0 0x3329041eba74 SPMR [16]
+ 9 16:21:12.649074 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92194 trail 21621 lead 54953 nla 10.0.0.45 [36]
+ 10 16:21:12.649103 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92195 trail 21621 lead 54953 nla 10.0.0.45 [36]
+ 11 16:21:12.749500 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92196 trail 21621 lead 54953 nla 10.0.0.45 [36]
+ 12 16:21:12.850043 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92197 trail 21621 lead 54953 nla 10.0.0.45 [36]
+ 13 16:21:12.950473 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92198 trail 21621 lead 54953 nla 10.0.0.45 [36]
+ 14 16:21:13.050985 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92199 trail 21621 lead 54953 nla 10.0.0.45 [36]
diff --git a/tests/pgmv.out b/tests/pgmv.out
new file mode 100644
index 0000000..6a49dfe
--- /dev/null
+++ b/tests/pgmv.out
@@ -0,0 +1,28 @@
+ 1 16:21:11.849644 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92190 trail 21618 lead 54950 nla 10.0.0.45 [36]
+ 2 16:21:11.950169 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92191 trail 21618 lead 54950 nla 10.0.0.45 [36]
+ 3 16:21:12.050601 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92192 trail 21618 lead 54950 nla 10.0.0.45 [36]
+ 4 16:21:12.548313 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 1480)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 1436 0x3329041eba74 ODATA trail 21618 seq 54951 [1460]
+ 5 16:21:12.548346 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 1480)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 1436 0x3329041eba74 ODATA trail 21619 seq 54952 [1460]
+ 6 16:21:12.548392 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 149)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 105 0x3329041eba74 ODATA trail 21620 seq 54953 [129]
+ 7 16:21:12.648918 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92193 trail 21621 lead 54953 nla 10.0.0.45 [36]
+ 8 16:21:12.649033 IP (tos 0xb8, ttl 1, id 0, offset 0, flags [DF], proto PGM (113), length 36)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.5563 > 239.255.0.16.13320: PGM, length 0 0x3329041eba74 SPMR [16]
+ 9 16:21:12.649074 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92194 trail 21621 lead 54953 nla 10.0.0.45 [36]
+ 10 16:21:12.649103 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92195 trail 21621 lead 54953 nla 10.0.0.45 [36]
+ 11 16:21:12.749500 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92196 trail 21621 lead 54953 nla 10.0.0.45 [36]
+ 12 16:21:12.850043 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92197 trail 21621 lead 54953 nla 10.0.0.45 [36]
+ 13 16:21:12.950473 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92198 trail 21621 lead 54953 nla 10.0.0.45 [36]
+ 14 16:21:13.050985 IP (tos 0xb8, ttl 16, id 0, offset 0, flags [DF], proto PGM (113), length 56)
+ 10.0.0.45 > 239.255.0.16: 10.0.0.45.13320 > 239.255.0.16.5563: PGM, length 0 0x3329041eba74 SPM seq 92199 trail 21621 lead 54953 nla 10.0.0.45 [36]
diff --git a/tests/pim-packet-assortment-v.out b/tests/pim-packet-assortment-v.out
new file mode 100644
index 0000000..c30d51f
--- /dev/null
+++ b/tests/pim-packet-assortment-v.out
@@ -0,0 +1,1876 @@
+ 1 17:10:44.789433 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 34)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 14
+ Bootstrap, cksum 0xcaa5 (correct) tag=17c hashmlen=4 BSRprio=93 BSR=10.0.0.1
+ 2 17:10:59.798983 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 34)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 14
+ Bootstrap, cksum 0xcaa5 (correct) tag=17c hashmlen=4 BSRprio=93 BSR=10.0.0.1
+ 3 17:11:14.807715 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 34)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 14
+ Bootstrap, cksum 0xc306 (correct) tag=177 hashmlen=12 BSRprio=0 BSR=10.0.0.2
+ 4 17:11:14.823339 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 34)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 14
+ Bootstrap, cksum 0xc384 (correct) tag=ca hashmlen=12 BSRprio=46 BSR=10.0.0.3
+ 5 17:11:14.838646 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 26
+ Bootstrap, cksum 0xd6ab (correct) tag=1b6 hashmlen=21 BSRprio=248 BSR=10.0.0.4 (group0: 225.0.0.1 RPcnt=0 FRPcnt=0)
+ 6 17:11:14.854392 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 78)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 58
+ Bootstrap, cksum 0x5abd (correct) tag=21 hashmlen=5 BSRprio=45 BSR=10.0.0.7 (group0: 225.0.0.2(0x01) RPcnt=1 FRPcnt=1 RP0=10.0.0.5,holdtime=1m58s,prio=107) (group1: 225.0.0.3 RPcnt=1 FRPcnt=1 RP0=10.0.0.6,holdtime=2m43s,prio=39)
+ 7 17:11:14.870050 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 34)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 14
+ Bootstrap, cksum 0xc296 (correct) tag=166 hashmlen=12 BSRprio=123 BSR=10.0.0.8
+ 8 17:11:29.877641 IP (tos 0xc0, ttl 1, id 5368, offset 0, flags [DF], proto PIM (103), length 34)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 14
+ Bootstrap, cksum 0xc2e0 (correct) tag=ea hashmlen=12 BSRprio=172 BSR=10.0.0.9
+ 9 17:11:29.882313 IP (tos 0xc0, ttl 1, id 5369, offset 0, flags [DF], proto PIM (103), length 34)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 14
+ Bootstrap, cksum 0xbdd6 (correct) tag=cb hashmlen=17 BSRprio=212 BSR=10.0.0.10
+ 10 17:11:29.886825 IP (tos 0xc0, ttl 1, id 5370, offset 0, flags [DF], proto PIM (103), length 46)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 26
+ Bootstrap, cksum 0xd12c (correct) tag=139 hashmlen=27 BSRprio=234 BSR=10.0.0.11 (group0: 225.0.0.4 RPcnt=0 FRPcnt=0)
+ 11 17:11:29.891835 IP (tos 0xc0, ttl 1, id 5371, offset 0, flags [DF], proto PIM (103), length 78)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 58
+ Bootstrap, cksum 0x58fb (correct) tag=c9 hashmlen=1 BSRprio=90 BSR=10.0.0.14 (group0: 225.0.0.5(0x01) RPcnt=1 FRPcnt=1 RP0=10.0.0.12,holdtime=1m28s,prio=58) (group1: 225.0.0.6 RPcnt=1 FRPcnt=1 RP0=10.0.0.13,holdtime=2m27s,prio=93)
+ 12 17:11:52.114000 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe833 (correct) prefix-cnt=1 prio=78 holdtime=1m31s RP=10.0.0.1 Group0=225.0.0.1(0x01)
+ 13 17:11:52.129609 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe824 (correct) prefix-cnt=1 prio=155 holdtime=4m43s RP=10.0.0.2 Group0=225.0.0.2
+ 14 17:11:52.144922 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 50)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 30
+ Candidate RP Advertisement, cksum 0x051a (correct) prefix-cnt=2 prio=213 holdtime=3m17s RP=10.0.0.3 Group0=225.0.0.3 Group1=225.0.0.4
+ 15 17:11:52.160444 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe743 (correct) prefix-cnt=1 prio=180 holdtime=3m42s RP=10.0.0.4 Group0=225.0.0.5(0x01)
+ 16 17:11:52.176120 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe743 (correct) prefix-cnt=1 prio=180 holdtime=3m42s RP=10.0.0.4 Group0=225.0.0.5(0x01)
+ 17 17:11:52.191149 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe53f (correct) prefix-cnt=1 prio=85 holdtime=13m51s RP=10.0.0.5 Group0=225.0.0.6(0x01)
+ 18 17:12:07.197582 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 114)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 94
+ Candidate RP Advertisement, cksum 0xe860 (correct) prefix-cnt=2 prio=63 holdtime=11m10s RP=10.0.0.6 Group0=225.0.0.7(0x01) Group1=225.0.0.8(0x01)
+ 19 17:12:22.207593 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe789 (correct) prefix-cnt=1 prio=139 holdtime=2m58s RP=10.0.0.7 Group0=225.0.0.17(0x01)
+ 20 17:12:37.213829 IP (tos 0xc0, ttl 255, id 32347, offset 0, flags [DF], proto PIM (103), length 42)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe4a6 (correct) prefix-cnt=1 prio=100 holdtime=15m54s RP=10.0.0.8 Group0=225.0.0.18(0x01)
+ 21 17:12:37.218303 IP (tos 0xc0, ttl 255, id 32348, offset 0, flags [DF], proto PIM (103), length 42)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe622 (correct) prefix-cnt=1 prio=118 holdtime=13m30s RP=10.0.0.9 Group0=225.0.0.19
+ 22 17:12:37.222610 IP (tos 0xc0, ttl 255, id 32349, offset 0, flags [DF], proto PIM (103), length 50)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 30
+ Candidate RP Advertisement, cksum 0x0551 (correct) prefix-cnt=2 prio=39 holdtime=4m35s RP=10.0.0.10 Group0=225.0.0.20 Group1=225.0.0.21
+ 23 17:12:37.228304 IP (tos 0xc0, ttl 255, id 32350, offset 0, flags [DF], proto PIM (103), length 50)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 30
+ Candidate RP Advertisement, cksum 0x0544 (correct) prefix-cnt=2 prio=151 holdtime=2m51s RP=10.0.0.11 Group0=225.0.0.23 Group1=225.0.0.22
+ 24 17:12:37.233724 IP (tos 0xc0, ttl 255, id 44910, offset 0, flags [DF], proto PIM (103), length 50)
+ 10.0.0.13 > 10.0.0.2: PIMv2, length 30
+ Candidate RP Advertisement, cksum 0x0252 (correct) prefix-cnt=2 prio=24 holdtime=8m55s RP=10.0.0.12 Group0=225.0.0.25(0x01) Group1=225.0.0.24(0x01)
+ 25 17:12:49.443041 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x9453 (correct), upstream-neighbor: 10.0.0.8
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.3(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.3(R)
+ joined source #2: 10.0.0.1(S)
+ joined source #3: 10.0.0.4(WR)
+ joined source #4: 10.0.0.2(R)
+ pruned source #1: 10.0.0.7(R)
+ pruned source #2: 10.0.0.6(R)
+ pruned source #3: 10.0.0.5(S)
+ group #2: 225.0.0.1(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.3(R)
+ joined source #2: 10.0.0.1(S)
+ joined source #3: 10.0.0.4(WR)
+ joined source #4: 10.0.0.2(R)
+ pruned source #1: 10.0.0.7(R)
+ pruned source #2: 10.0.0.6(R)
+ pruned source #3: 10.0.0.5(S)
+ group #3: 225.0.0.2(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.3(R)
+ joined source #2: 10.0.0.1(S)
+ joined source #3: 10.0.0.4(WR)
+ joined source #4: 10.0.0.2(R)
+ pruned source #1: 10.0.0.7(R)
+ pruned source #2: 10.0.0.6(R)
+ pruned source #3: 10.0.0.5(S)
+ 26 17:12:49.459068 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x9453 (correct), upstream-neighbor: 10.0.0.8
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.3(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.3(R)
+ joined source #2: 10.0.0.1(S)
+ joined source #3: 10.0.0.4(WR)
+ joined source #4: 10.0.0.2(R)
+ pruned source #1: 10.0.0.7(R)
+ pruned source #2: 10.0.0.6(R)
+ pruned source #3: 10.0.0.5(S)
+ group #2: 225.0.0.1(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.3(R)
+ joined source #2: 10.0.0.1(S)
+ joined source #3: 10.0.0.4(WR)
+ joined source #4: 10.0.0.2(R)
+ pruned source #1: 10.0.0.7(R)
+ pruned source #2: 10.0.0.6(R)
+ pruned source #3: 10.0.0.5(S)
+ group #3: 225.0.0.2(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.3(R)
+ joined source #2: 10.0.0.1(S)
+ joined source #3: 10.0.0.4(WR)
+ joined source #4: 10.0.0.2(R)
+ pruned source #1: 10.0.0.7(R)
+ pruned source #2: 10.0.0.6(R)
+ pruned source #3: 10.0.0.5(S)
+ 27 17:12:49.474922 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x939a (correct), upstream-neighbor: 10.0.0.16
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.4(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.10(R)
+ joined source #2: 10.0.0.12(WR)
+ joined source #3: 10.0.0.9(S)
+ joined source #4: 10.0.0.11(R)
+ pruned source #1: 10.0.0.14(R)
+ pruned source #2: 10.0.0.13(S)
+ pruned source #3: 10.0.0.15(R)
+ group #2: 225.0.0.5(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.10(R)
+ joined source #2: 10.0.0.12(WR)
+ joined source #3: 10.0.0.9(S)
+ joined source #4: 10.0.0.11(R)
+ pruned source #1: 10.0.0.14(R)
+ pruned source #2: 10.0.0.13(S)
+ pruned source #3: 10.0.0.15(R)
+ group #3: 225.0.0.6(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.10(R)
+ joined source #2: 10.0.0.12(WR)
+ joined source #3: 10.0.0.9(S)
+ joined source #4: 10.0.0.11(R)
+ pruned source #1: 10.0.0.14(R)
+ pruned source #2: 10.0.0.13(S)
+ pruned source #3: 10.0.0.15(R)
+ 28 17:13:04.482150 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x939a (correct), upstream-neighbor: 10.0.0.16
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.4(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.10(R)
+ joined source #2: 10.0.0.12(WR)
+ joined source #3: 10.0.0.9(S)
+ joined source #4: 10.0.0.11(R)
+ pruned source #1: 10.0.0.14(R)
+ pruned source #2: 10.0.0.13(S)
+ pruned source #3: 10.0.0.15(R)
+ group #2: 225.0.0.5(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.10(R)
+ joined source #2: 10.0.0.12(WR)
+ joined source #3: 10.0.0.9(S)
+ joined source #4: 10.0.0.11(R)
+ pruned source #1: 10.0.0.14(R)
+ pruned source #2: 10.0.0.13(S)
+ pruned source #3: 10.0.0.15(R)
+ group #3: 225.0.0.6(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.10(R)
+ joined source #2: 10.0.0.12(WR)
+ joined source #3: 10.0.0.9(S)
+ joined source #4: 10.0.0.11(R)
+ pruned source #1: 10.0.0.14(R)
+ pruned source #2: 10.0.0.13(S)
+ pruned source #3: 10.0.0.15(R)
+ 29 17:13:19.491684 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x12e3 (correct), upstream-neighbor: 10.0.0.24
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.7, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.18(R)
+ joined source #2: 10.0.0.17(S)
+ joined source #3: 10.0.0.20(WR)
+ joined source #4: 10.0.0.19(R)
+ pruned source #1: 10.0.0.21(S)
+ pruned source #2: 10.0.0.22(R)
+ pruned source #3: 10.0.0.23(R)
+ group #2: 225.0.0.8, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.18(R)
+ joined source #2: 10.0.0.17(S)
+ joined source #3: 10.0.0.20(WR)
+ joined source #4: 10.0.0.19(R)
+ pruned source #1: 10.0.0.21(S)
+ pruned source #2: 10.0.0.22(R)
+ pruned source #3: 10.0.0.23(R)
+ group #3: 225.0.0.9, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.18(R)
+ joined source #2: 10.0.0.17(S)
+ joined source #3: 10.0.0.20(WR)
+ joined source #4: 10.0.0.19(R)
+ pruned source #1: 10.0.0.21(S)
+ pruned source #2: 10.0.0.22(R)
+ pruned source #3: 10.0.0.23(R)
+ 30 17:13:34.502041 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x12e3 (correct), upstream-neighbor: 10.0.0.24
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.7, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.18(R)
+ joined source #2: 10.0.0.17(S)
+ joined source #3: 10.0.0.20(WR)
+ joined source #4: 10.0.0.19(R)
+ pruned source #1: 10.0.0.21(S)
+ pruned source #2: 10.0.0.22(R)
+ pruned source #3: 10.0.0.23(R)
+ group #2: 225.0.0.8, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.18(R)
+ joined source #2: 10.0.0.17(S)
+ joined source #3: 10.0.0.20(WR)
+ joined source #4: 10.0.0.19(R)
+ pruned source #1: 10.0.0.21(S)
+ pruned source #2: 10.0.0.22(R)
+ pruned source #3: 10.0.0.23(R)
+ group #3: 225.0.0.9, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.18(R)
+ joined source #2: 10.0.0.17(S)
+ joined source #3: 10.0.0.20(WR)
+ joined source #4: 10.0.0.19(R)
+ pruned source #1: 10.0.0.21(S)
+ pruned source #2: 10.0.0.22(R)
+ pruned source #3: 10.0.0.23(R)
+ 31 17:13:49.515669 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x122a (correct), upstream-neighbor: 10.0.0.32
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.11, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.25(S)
+ joined source #2: 10.0.0.27(R)
+ joined source #3: 10.0.0.26(R)
+ joined source #4: 10.0.0.28(WR)
+ pruned source #1: 10.0.0.29(S)
+ pruned source #2: 10.0.0.31(R)
+ pruned source #3: 10.0.0.30(R)
+ group #2: 225.0.0.12, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.25(S)
+ joined source #2: 10.0.0.27(R)
+ joined source #3: 10.0.0.26(R)
+ joined source #4: 10.0.0.28(WR)
+ pruned source #1: 10.0.0.29(S)
+ pruned source #2: 10.0.0.31(R)
+ pruned source #3: 10.0.0.30(R)
+ group #3: 225.0.0.10, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.25(S)
+ joined source #2: 10.0.0.27(R)
+ joined source #3: 10.0.0.26(R)
+ joined source #4: 10.0.0.28(WR)
+ pruned source #1: 10.0.0.29(S)
+ pruned source #2: 10.0.0.31(R)
+ pruned source #3: 10.0.0.30(R)
+ 32 17:13:49.535091 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x122a (correct), upstream-neighbor: 10.0.0.32
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.11, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.25(S)
+ joined source #2: 10.0.0.27(R)
+ joined source #3: 10.0.0.26(R)
+ joined source #4: 10.0.0.28(WR)
+ pruned source #1: 10.0.0.29(S)
+ pruned source #2: 10.0.0.31(R)
+ pruned source #3: 10.0.0.30(R)
+ group #2: 225.0.0.12, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.25(S)
+ joined source #2: 10.0.0.27(R)
+ joined source #3: 10.0.0.26(R)
+ joined source #4: 10.0.0.28(WR)
+ pruned source #1: 10.0.0.29(S)
+ pruned source #2: 10.0.0.31(R)
+ pruned source #3: 10.0.0.30(R)
+ group #3: 225.0.0.10, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.25(S)
+ joined source #2: 10.0.0.27(R)
+ joined source #3: 10.0.0.26(R)
+ joined source #4: 10.0.0.28(WR)
+ pruned source #1: 10.0.0.29(S)
+ pruned source #2: 10.0.0.31(R)
+ pruned source #3: 10.0.0.30(R)
+ 33 17:13:49.555281 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x1171 (correct), upstream-neighbor: 10.0.0.40
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.15, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.36(WR)
+ joined source #2: 10.0.0.34(R)
+ joined source #3: 10.0.0.35(R)
+ joined source #4: 10.0.0.33(S)
+ pruned source #1: 10.0.0.39(R)
+ pruned source #2: 10.0.0.38(R)
+ pruned source #3: 10.0.0.37(S)
+ group #2: 225.0.0.13, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.36(WR)
+ joined source #2: 10.0.0.34(R)
+ joined source #3: 10.0.0.35(R)
+ joined source #4: 10.0.0.33(S)
+ pruned source #1: 10.0.0.39(R)
+ pruned source #2: 10.0.0.38(R)
+ pruned source #3: 10.0.0.37(S)
+ group #3: 225.0.0.14, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.36(WR)
+ joined source #2: 10.0.0.34(R)
+ joined source #3: 10.0.0.35(R)
+ joined source #4: 10.0.0.33(S)
+ pruned source #1: 10.0.0.39(R)
+ pruned source #2: 10.0.0.38(R)
+ pruned source #3: 10.0.0.37(S)
+ 34 17:14:04.567818 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x1171 (correct), upstream-neighbor: 10.0.0.40
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.15, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.36(WR)
+ joined source #2: 10.0.0.34(R)
+ joined source #3: 10.0.0.35(R)
+ joined source #4: 10.0.0.33(S)
+ pruned source #1: 10.0.0.39(R)
+ pruned source #2: 10.0.0.38(R)
+ pruned source #3: 10.0.0.37(S)
+ group #2: 225.0.0.13, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.36(WR)
+ joined source #2: 10.0.0.34(R)
+ joined source #3: 10.0.0.35(R)
+ joined source #4: 10.0.0.33(S)
+ pruned source #1: 10.0.0.39(R)
+ pruned source #2: 10.0.0.38(R)
+ pruned source #3: 10.0.0.37(S)
+ group #3: 225.0.0.14, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.36(WR)
+ joined source #2: 10.0.0.34(R)
+ joined source #3: 10.0.0.35(R)
+ joined source #4: 10.0.0.33(S)
+ pruned source #1: 10.0.0.39(R)
+ pruned source #2: 10.0.0.38(R)
+ pruned source #3: 10.0.0.37(S)
+ 35 17:14:19.578882 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 334)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 314
+ Join / Prune, cksum 0x6ad5 (correct), upstream-neighbor: 10.0.0.52
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.16, joined sources: 4, pruned sources: 7
+ joined source #1: 10.0.0.43(R)
+ joined source #2: 10.0.0.41(S)
+ joined source #3: 10.0.0.44(WR)
+ joined source #4: 10.0.0.42(R)
+ pruned source #1: 10.0.0.47(S)
+ pruned source #2: 10.0.0.45(S)
+ pruned source #3: 10.0.0.50(R)
+ pruned source #4: 10.0.0.48(R)
+ pruned source #5: 10.0.0.46(S)
+ pruned source #6: 10.0.0.51(R)
+ pruned source #7: 10.0.0.49(R)
+ group #2: 225.0.0.17, joined sources: 4, pruned sources: 7
+ joined source #1: 10.0.0.43(R)
+ joined source #2: 10.0.0.41(S)
+ joined source #3: 10.0.0.44(WR)
+ joined source #4: 10.0.0.42(R)
+ pruned source #1: 10.0.0.47(S)
+ pruned source #2: 10.0.0.45(S)
+ pruned source #3: 10.0.0.50(R)
+ pruned source #4: 10.0.0.48(R)
+ pruned source #5: 10.0.0.46(S)
+ pruned source #6: 10.0.0.51(R)
+ pruned source #7: 10.0.0.49(R)
+ group #3: 225.0.0.18, joined sources: 4, pruned sources: 7
+ joined source #1: 10.0.0.43(R)
+ joined source #2: 10.0.0.41(S)
+ joined source #3: 10.0.0.44(WR)
+ joined source #4: 10.0.0.42(R)
+ pruned source #1: 10.0.0.47(S)
+ pruned source #2: 10.0.0.45(S)
+ pruned source #3: 10.0.0.50(R)
+ pruned source #4: 10.0.0.48(R)
+ pruned source #5: 10.0.0.46(S)
+ pruned source #6: 10.0.0.51(R)
+ pruned source #7: 10.0.0.49(R)
+ 36 17:14:34.586658 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 262)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 242
+ Join / Prune, cksum 0xd88e (correct), upstream-neighbor: 10.0.0.61
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.19, joined sources: 4, pruned sources: 4
+ joined source #1: 10.0.0.54(R)
+ joined source #2: 10.0.0.56(WR)
+ joined source #3: 10.0.0.55(R)
+ joined source #4: 10.0.0.53(S)
+ pruned source #1: 10.0.0.60(R)
+ pruned source #2: 10.0.0.57(S)
+ pruned source #3: 10.0.0.58(S)
+ pruned source #4: 10.0.0.59(S)
+ group #2: 225.0.0.20, joined sources: 4, pruned sources: 4
+ joined source #1: 10.0.0.54(R)
+ joined source #2: 10.0.0.56(WR)
+ joined source #3: 10.0.0.55(R)
+ joined source #4: 10.0.0.53(S)
+ pruned source #1: 10.0.0.60(R)
+ pruned source #2: 10.0.0.57(S)
+ pruned source #3: 10.0.0.58(S)
+ pruned source #4: 10.0.0.59(S)
+ group #3: 225.0.0.21, joined sources: 4, pruned sources: 4
+ joined source #1: 10.0.0.54(R)
+ joined source #2: 10.0.0.56(WR)
+ joined source #3: 10.0.0.55(R)
+ joined source #4: 10.0.0.53(S)
+ pruned source #1: 10.0.0.60(R)
+ pruned source #2: 10.0.0.57(S)
+ pruned source #3: 10.0.0.58(S)
+ pruned source #4: 10.0.0.59(S)
+ 37 17:14:49.597897 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 334)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 314
+ Join / Prune, cksum 0x67f9 (correct), upstream-neighbor: 10.0.0.73
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.24, joined sources: 4, pruned sources: 7
+ joined source #1: 10.0.0.62(S)
+ joined source #2: 10.0.0.65(WR)
+ joined source #3: 10.0.0.63(R)
+ joined source #4: 10.0.0.64(R)
+ pruned source #1: 10.0.0.72(R)
+ pruned source #2: 10.0.0.66(S)
+ pruned source #3: 10.0.0.70(R)
+ pruned source #4: 10.0.0.69(R)
+ pruned source #5: 10.0.0.71(R)
+ pruned source #6: 10.0.0.67(S)
+ pruned source #7: 10.0.0.68(S)
+ group #2: 225.0.0.23, joined sources: 4, pruned sources: 7
+ joined source #1: 10.0.0.62(S)
+ joined source #2: 10.0.0.65(WR)
+ joined source #3: 10.0.0.63(R)
+ joined source #4: 10.0.0.64(R)
+ pruned source #1: 10.0.0.72(R)
+ pruned source #2: 10.0.0.66(S)
+ pruned source #3: 10.0.0.70(R)
+ pruned source #4: 10.0.0.69(R)
+ pruned source #5: 10.0.0.71(R)
+ pruned source #6: 10.0.0.67(S)
+ pruned source #7: 10.0.0.68(S)
+ group #3: 225.0.0.22, joined sources: 4, pruned sources: 7
+ joined source #1: 10.0.0.62(S)
+ joined source #2: 10.0.0.65(WR)
+ joined source #3: 10.0.0.63(R)
+ joined source #4: 10.0.0.64(R)
+ pruned source #1: 10.0.0.72(R)
+ pruned source #2: 10.0.0.66(S)
+ pruned source #3: 10.0.0.70(R)
+ pruned source #4: 10.0.0.69(R)
+ pruned source #5: 10.0.0.71(R)
+ pruned source #6: 10.0.0.67(S)
+ pruned source #7: 10.0.0.68(S)
+ 38 17:15:04.609866 IP (tos 0xc0, ttl 1, id 33130, offset 0, flags [DF], proto PIM (103), length 238)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x51c5 (correct), upstream-neighbor: 10.0.0.81
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.26(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.76(SR)
+ joined source #2: 10.0.0.75(SR)
+ joined source #3: 10.0.0.74(S)
+ joined source #4: 10.0.0.77(SWR)
+ pruned source #1: 10.0.0.79(SR)
+ pruned source #2: 10.0.0.80(SR)
+ pruned source #3: 10.0.0.78(S)
+ group #2: 225.0.0.25(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.76(SR)
+ joined source #2: 10.0.0.75(SR)
+ joined source #3: 10.0.0.74(S)
+ joined source #4: 10.0.0.77(SWR)
+ pruned source #1: 10.0.0.79(SR)
+ pruned source #2: 10.0.0.80(SR)
+ pruned source #3: 10.0.0.78(S)
+ group #3: 225.0.0.27(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.76(SR)
+ joined source #2: 10.0.0.75(SR)
+ joined source #3: 10.0.0.74(S)
+ joined source #4: 10.0.0.77(SWR)
+ pruned source #1: 10.0.0.79(SR)
+ pruned source #2: 10.0.0.80(SR)
+ pruned source #3: 10.0.0.78(S)
+ 39 17:15:04.615696 IP (tos 0xc0, ttl 1, id 33132, offset 0, flags [DF], proto PIM (103), length 238)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x51c5 (correct), upstream-neighbor: 10.0.0.81
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.26(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.76(SR)
+ joined source #2: 10.0.0.75(SR)
+ joined source #3: 10.0.0.74(S)
+ joined source #4: 10.0.0.77(SWR)
+ pruned source #1: 10.0.0.79(SR)
+ pruned source #2: 10.0.0.80(SR)
+ pruned source #3: 10.0.0.78(S)
+ group #2: 225.0.0.25(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.76(SR)
+ joined source #2: 10.0.0.75(SR)
+ joined source #3: 10.0.0.74(S)
+ joined source #4: 10.0.0.77(SWR)
+ pruned source #1: 10.0.0.79(SR)
+ pruned source #2: 10.0.0.80(SR)
+ pruned source #3: 10.0.0.78(S)
+ group #3: 225.0.0.27(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.76(SR)
+ joined source #2: 10.0.0.75(SR)
+ joined source #3: 10.0.0.74(S)
+ joined source #4: 10.0.0.77(SWR)
+ pruned source #1: 10.0.0.79(SR)
+ pruned source #2: 10.0.0.80(SR)
+ pruned source #3: 10.0.0.78(S)
+ 40 17:15:24.642963 IP (tos 0xc0, ttl 1, id 35347, offset 0, flags [DF], proto PIM (103), length 238)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0xcf9b (correct), upstream-neighbor: 10.0.0.105
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.36, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.99(SR)
+ joined source #2: 10.0.0.100(SR)
+ joined source #3: 10.0.0.98(S)
+ joined source #4: 10.0.0.101(SWR)
+ pruned source #1: 10.0.0.103(SR)
+ pruned source #2: 10.0.0.104(SR)
+ pruned source #3: 10.0.0.102(S)
+ group #2: 225.0.0.35, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.99(SR)
+ joined source #2: 10.0.0.100(SR)
+ joined source #3: 10.0.0.98(S)
+ joined source #4: 10.0.0.101(SWR)
+ pruned source #1: 10.0.0.103(SR)
+ pruned source #2: 10.0.0.104(SR)
+ pruned source #3: 10.0.0.102(S)
+ group #3: 225.0.0.34, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.99(SR)
+ joined source #2: 10.0.0.100(SR)
+ joined source #3: 10.0.0.98(S)
+ joined source #4: 10.0.0.101(SWR)
+ pruned source #1: 10.0.0.103(SR)
+ pruned source #2: 10.0.0.104(SR)
+ pruned source #3: 10.0.0.102(S)
+ 41 17:15:24.649511 IP (tos 0xc0, ttl 1, id 35349, offset 0, flags [DF], proto PIM (103), length 238)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0xcf9b (correct), upstream-neighbor: 10.0.0.105
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.36, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.99(SR)
+ joined source #2: 10.0.0.100(SR)
+ joined source #3: 10.0.0.98(S)
+ joined source #4: 10.0.0.101(SWR)
+ pruned source #1: 10.0.0.103(SR)
+ pruned source #2: 10.0.0.104(SR)
+ pruned source #3: 10.0.0.102(S)
+ group #2: 225.0.0.35, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.99(SR)
+ joined source #2: 10.0.0.100(SR)
+ joined source #3: 10.0.0.98(S)
+ joined source #4: 10.0.0.101(SWR)
+ pruned source #1: 10.0.0.103(SR)
+ pruned source #2: 10.0.0.104(SR)
+ pruned source #3: 10.0.0.102(S)
+ group #3: 225.0.0.34, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.99(SR)
+ joined source #2: 10.0.0.100(SR)
+ joined source #3: 10.0.0.98(S)
+ joined source #4: 10.0.0.101(SWR)
+ pruned source #1: 10.0.0.103(SR)
+ pruned source #2: 10.0.0.104(SR)
+ pruned source #3: 10.0.0.102(S)
+ 42 17:15:36.844192 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xeddc (correct) group=225.0.0.1 src=10.0.0.1 pref=0 metric=0
+ 43 17:15:36.858926 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xeddc (correct) group=225.0.0.1 src=10.0.0.1 pref=0 metric=0
+ 44 17:15:36.875457 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xedda (correct) group=225.0.0.2 src=10.0.0.2 pref=0 metric=0
+ 45 17:15:51.885935 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xedda (correct) group=225.0.0.2 src=10.0.0.2 pref=0 metric=0
+ 46 17:16:06.895682 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 26
+ Assert, cksum 0xedd8 (correct) group=225.0.0.3 src=10.0.0.3 pref=0 metric=0
+ 47 17:16:21.901980 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xedd6 (correct) group=225.0.0.4 src=10.0.0.4 pref=0 metric=0
+ 48 17:16:36.912545 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 26
+ Assert, cksum 0xedd4 (correct) group=225.0.0.5 src=10.0.0.5 pref=0 metric=0
+ 49 17:16:51.922176 IP (tos 0xc0, ttl 1, id 46328, offset 0, flags [DF], proto PIM (103), length 46)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xedd2 (correct) group=225.0.0.6 src=10.0.0.6 pref=0 metric=0
+ 50 17:16:51.927014 IP (tos 0xc0, ttl 1, id 46329, offset 0, flags [DF], proto PIM (103), length 46)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xedd2 (correct) group=225.0.0.6 src=10.0.0.6 pref=0 metric=0
+ 51 17:17:04.134866 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.1 > 225.0.0.1: [|pim]
+ 52 17:17:04.152086 IP (tos 0x1,ECT(1), ttl 10, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.1 > 225.0.0.1: [|pim]
+ 53 17:17:04.168215 IP (tos 0x4, ttl 30, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.1 > 225.0.0.1: [|pim]
+ 54 17:17:04.184607 IP (tos 0x7,CE, ttl 63, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.1 > 225.0.0.1: [|pim]
+ 55 17:17:04.203347 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 1400)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 1380
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1372)
+ 10.0.0.2.2468 > 225.0.0.2.2468: UDP, length 1344
+ 56 17:17:04.222232 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 1500)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 1480
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1472)
+ 10.0.0.3.2468 > 225.0.0.3.2468: UDP, length 1444
+ 57 17:17:04.241206 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 32000)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 31980
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 31972)
+ 10.0.0.4.2468 > 225.0.0.4.2468: UDP, length 31944
+ 58 17:17:04.260981 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 65535)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 65515
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 65507)
+ 10.0.0.5.2468 > 225.0.0.5.2468: UDP, length 65479
+ 59 17:17:04.279594 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.6 > 225.0.0.6: [|pim]
+ 60 17:17:04.297659 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.6 > 225.0.0.6: [|pim]
+ 61 17:17:04.314768 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.7 > 225.0.0.7: [|pim]
+ 62 17:17:19.324443 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.8 > 225.0.0.8: [|pim]
+ 63 17:17:34.361348 IP (tos 0x1,ECT(1), ttl 255, id 739, offset 0, flags [DF], proto PIM (103), length 156)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 136
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 128)
+ 10.0.0.9.2468 > 225.0.0.9.2468: UDP, length 100
+ 64 17:17:34.370054 IP (tos 0x2,ECT(0), ttl 1, id 51552, offset 0, flags [DF], proto PIM (103), length 156)
+ 10.0.0.10 > 10.0.0.2: PIMv2, length 136
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 128)
+ 10.0.0.9.2468 > 225.0.0.9.2468: UDP, length 100
+ 65 17:17:34.379510 IP (tos 0x4, ttl 10, id 744, offset 0, flags [DF], proto PIM (103), length 156)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 136
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 128)
+ 10.0.0.9.2468 > 225.0.0.9.2468: UDP, length 100
+ 66 17:17:34.387689 IP (tos 0x5,ECT(1), ttl 200, id 746, offset 0, flags [DF], proto PIM (103), length 156)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 136
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 128)
+ 10.0.0.9.2468 > 225.0.0.9.2468: UDP, length 100
+ 67 17:17:34.395915 IP (tos 0x7,CE, ttl 20, id 747, offset 0, flags [DF], proto PIM (103), length 156)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 136
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 128)
+ 10.0.0.9.2468 > 225.0.0.9.2468: UDP, length 100
+ 68 17:17:34.474538 IP (tos 0xc0, ttl 255, id 759, offset 0, flags [DF], proto PIM (103), length 48)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.11 > 225.0.0.10: [|pim]
+ 69 17:17:34.496073 IP (tos 0x0, ttl 10, id 762, offset 0, flags [DF], proto PIM (103), length 1300)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 1280
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1272)
+ 10.0.0.12.2468 > 225.0.0.11.2468: UDP, length 1244
+ 70 17:17:34.505618 IP (tos 0x0, ttl 10, id 764, offset 0, flags [DF], proto PIM (103), length 1400)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 1380
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1372)
+ 10.0.0.13.2468 > 225.0.0.12.2468: UDP, length 1344
+ 71 17:17:34.517256 IP (tos 0x0, ttl 10, id 766, offset 0, flags [none], proto PIM (103), length 1500)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 1480
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1472)
+ 10.0.0.14.2468 > 225.0.0.13.2468: UDP, length 1444
+ 72 17:17:34.547489 IP (tos 0x0, ttl 10, id 769, offset 0, flags [DF], proto PIM (103), length 1400)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 1380
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1372)
+ 10.0.0.15.2468 > 225.0.0.14.2468: UDP, length 1344
+ 73 17:17:34.556376 IP (tos 0x0, ttl 10, id 772, offset 0, flags [DF], proto PIM (103), length 1500)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 1480
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1472)
+ 10.0.0.16.2468 > 225.0.0.15.2468: UDP, length 1444
+ 74 17:17:34.566673 IP (tos 0x0, ttl 10, id 774, offset 0, flags [none], proto PIM (103), length 1600)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 1580
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1572)
+ 10.0.0.17.2468 > 225.0.0.16.2468: UDP, length 1544
+ 75 17:17:34.595128 IP (tos 0x0, ttl 10, id 775, offset 0, flags [DF], proto PIM (103), length 9800)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 9780
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 9772)
+ 10.0.0.18.2468 > 225.0.0.17.2468: UDP, length 9744
+ 76 17:17:34.604864 IP (tos 0x0, ttl 10, id 776, offset 0, flags [DF], proto PIM (103), length 9900)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 9880
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 9872)
+ 10.0.0.19.2468 > 225.0.0.18.2468: UDP, length 9844
+ 77 17:17:34.616241 IP (tos 0x0, ttl 10, id 778, offset 0, flags [none], proto PIM (103), length 10000)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 9980
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 9972)
+ 10.0.0.20.2468 > 225.0.0.19.2468: UDP, length 9944
+ 78 17:17:34.642771 IP (tos 0xc0, ttl 255, id 779, offset 0, flags [DF], proto PIM (103), length 48)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.21 > 225.0.0.20: [|pim]
+ 79 17:17:41.832778 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 18
+ Register Stop, cksum 0xf0dc (correct) group=225.0.0.1 source=10.0.0.1
+ 80 17:17:41.848183 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 18
+ Register Stop, cksum 0xf0dc (correct) group=225.0.0.1 source=10.0.0.1
+ 81 17:17:41.863647 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 18
+ Register Stop, cksum 0xf0da (correct) group=225.0.0.2 source=10.0.0.2
+ 82 17:17:41.879212 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 18
+ Register Stop, cksum 0xf0da (correct) group=225.0.0.2 source=10.0.0.2
+ 83 17:17:41.894033 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ Register Stop, cksum 0xf0d8 (correct) group=225.0.0.3 source=10.0.0.3
+ 84 17:17:56.904772 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ Register Stop, cksum 0xf0d6 (correct) group=225.0.0.4 source=10.0.0.4
+ 85 17:18:11.915223 IP (tos 0xc0, ttl 255, id 6730, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 18
+ Register Stop, cksum 0xf0d4 (correct) group=225.0.0.5 source=10.0.0.5
+ 86 17:18:11.920116 IP (tos 0xc0, ttl 255, id 6731, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 18
+ Register Stop, cksum 0xf0d4 (correct) group=225.0.0.5 source=10.0.0.5
+ 87 17:18:11.924496 IP (tos 0xc0, ttl 255, id 6732, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 18
+ Register Stop, cksum 0xf0d4 (correct) group=225.0.0.5 source=10.0.0.5
+ 88 17:18:11.929456 IP (tos 0xc0, ttl 255, id 6733, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 18
+ Register Stop, cksum 0xf0d2 (correct) group=225.0.0.6 source=10.0.0.6
+ 89 17:18:19.135202 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca80 (correct)
+ Offer, rpa=10.0.0.1 sender pref=100 sender metric=10
+ 90 17:18:19.151462 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca80 (correct)
+ Offer, rpa=10.0.0.1 sender pref=100 sender metric=10
+ 91 17:18:19.167261 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca6f (correct)
+ Winner, rpa=10.0.0.2 sender pref=100 sender metric=10
+ 92 17:18:19.183508 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca6f (correct)
+ Winner, rpa=10.0.0.2 sender pref=100 sender metric=10
+ 93 17:18:19.199269 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ DF Election, cksum 0x6d52 (correct)
+ Backoff, rpa=10.0.0.3 sender pref=100 sender metric=10
+ offer addr=10.0.0.4 offer pref=1000 offer metric=10000 interval 10000ms
+ 94 17:18:19.215274 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ DF Election, cksum 0x6d52 (correct)
+ Backoff, rpa=10.0.0.3 sender pref=100 sender metric=10
+ offer addr=10.0.0.4 offer pref=1000 offer metric=10000 interval 10000ms
+ 95 17:18:19.231330 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 52)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 32
+ DF Election, cksum 0x944e (correct)
+ Pass, rpa=10.0.0.5 sender pref=100 sender metric=10
+ new winner addr=10.0.0.6 new winner pref=1000 new winner metric=10000
+ 96 17:18:19.247063 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 52)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 32
+ DF Election, cksum 0x944e (correct)
+ Pass, rpa=10.0.0.5 sender pref=100 sender metric=10
+ new winner addr=10.0.0.6 new winner pref=1000 new winner metric=10000
+ 97 17:18:19.263010 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca7a (correct)
+ Offer, rpa=10.0.0.7 sender pref=100 sender metric=10
+ 98 17:18:34.278440 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca7a (correct)
+ Offer, rpa=10.0.0.7 sender pref=100 sender metric=10
+ 99 17:18:49.292244 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 18
+ DF Election, cksum 0xca79 (correct)
+ Offer, rpa=10.0.0.8 sender pref=100 sender metric=10
+ 100 17:19:04.301082 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca78 (correct)
+ Offer, rpa=10.0.0.9 sender pref=100 sender metric=10
+ 101 17:19:19.311519 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 18
+ DF Election, cksum 0xca77 (correct)
+ Offer, rpa=10.0.0.10 sender pref=100 sender metric=10
+ 102 17:19:34.317677 IP (tos 0xc0, ttl 1, id 53314, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca76 (correct)
+ Offer, rpa=10.0.0.11 sender pref=100 sender metric=10
+ 103 17:19:34.323132 IP (tos 0xc0, ttl 1, id 53315, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca76 (correct)
+ Offer, rpa=10.0.0.11 sender pref=100 sender metric=10
+ 104 17:19:34.328241 IP (tos 0xc0, ttl 1, id 53317, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca65 (correct)
+ Winner, rpa=10.0.0.12 sender pref=100 sender metric=10
+ 105 17:19:34.333292 IP (tos 0xc0, ttl 1, id 53318, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca65 (correct)
+ Winner, rpa=10.0.0.12 sender pref=100 sender metric=10
+ 106 17:19:34.338277 IP (tos 0xc0, ttl 1, id 53319, offset 0, flags [DF], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ DF Election, cksum 0x6d3e (correct)
+ Backoff, rpa=10.0.0.13 sender pref=100 sender metric=10
+ offer addr=10.0.0.14 offer pref=1000 offer metric=10000 interval 10000ms
+ 107 17:19:34.345622 IP (tos 0xc0, ttl 1, id 53320, offset 0, flags [DF], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ DF Election, cksum 0x6d3e (correct)
+ Backoff, rpa=10.0.0.13 sender pref=100 sender metric=10
+ offer addr=10.0.0.14 offer pref=1000 offer metric=10000 interval 10000ms
+ 108 17:19:34.350734 IP (tos 0xc0, ttl 1, id 53321, offset 0, flags [DF], proto PIM (103), length 52)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 32
+ DF Election, cksum 0x943a (correct)
+ Pass, rpa=10.0.0.15 sender pref=100 sender metric=10
+ new winner addr=10.0.0.16 new winner pref=1000 new winner metric=10000
+ 109 17:19:34.355785 IP (tos 0xc0, ttl 1, id 53323, offset 0, flags [DF], proto PIM (103), length 52)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 32
+ DF Election, cksum 0x943a (correct)
+ Pass, rpa=10.0.0.15 sender pref=100 sender metric=10
+ new winner addr=10.0.0.16 new winner pref=1000 new winner metric=10000
+ 110 17:19:46.562048 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 24)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 4
+ Graft, cksum 0xd9ff (correct), upstream-neighbor: [|pimv2]
+ 111 17:20:08.767127 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 74)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 54
+ Hello, cksum 0xc62e (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 12, Value:
+ 112 17:20:08.785732 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 12, Value:
+ 113 17:20:08.801265 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 12, Value:
+ 114 17:20:08.815202 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 74)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 54
+ Hello, cksum 0xc62e (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 12, Value:
+ 115 17:20:08.829259 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 74)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 54
+ Hello, cksum 0xc62e (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 12, Value:
+ 116 17:20:08.843547 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 12, Value:
+ 117 17:20:08.857616 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 74)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 54
+ Hello, cksum 0xc62e (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 12, Value:
+ 118 17:20:08.871960 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 12, Value:
+ 119 17:20:08.885812 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 12, Value:
+ 120 17:20:08.899908 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 12, Value:
+ 121 17:20:08.913880 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 12, Value:
+ 122 17:20:08.928954 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc640 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 12, Value:
+ 123 17:20:23.938011 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc640 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 12, Value:
+ 124 17:20:38.945661 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 34
+ Hello, cksum 0xdc6b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 125 17:20:53.953435 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 34
+ Hello, cksum 0xdc6b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 126 17:21:08.961835 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto PIM (103), length 74)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 54
+ Hello, cksum 0xc626 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 12, Value:
+ 127 17:21:08.966281 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto PIM (103), length 74)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 54
+ Hello, cksum 0xc626 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 12, Value:
+ 128 17:21:08.970800 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto PIM (103), length 70)
+ 10.0.0.7 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc636 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 12, Value:
+ 129 17:21:21.305747 IP6 (hlim 64, next-header PIM (103) payload length: 26) 10::2 > ff02::d: PIMv2, length 26
+ Bootstrap, cksum 0xbc73 (correct) tag=5f hashmlen=29 BSRprio=7 BSR=1::2
+ 130 17:21:36.317463 IP6 (hlim 64, next-header PIM (103) payload length: 26) 10::2 > ff02::d: PIMv2, length 26
+ Bootstrap, cksum 0xbc73 (correct) tag=5f hashmlen=29 BSRprio=7 BSR=1::2
+ 131 17:21:51.327358 IP6 (hlim 64, next-header PIM (103) payload length: 26) 10::2 > ff02::d: PIMv2, length 26
+ Bootstrap, cksum 0xc1d1 (correct) tag=195 hashmlen=22 BSRprio=114 BSR=1::3
+ 132 17:21:51.342877 IP6 (hlim 64, next-header PIM (103) payload length: 26) 10::2 > ff02::d: PIMv2, length 26
+ Bootstrap, cksum 0xcd68 (correct) tag=133 hashmlen=11 BSRprio=60 BSR=1::4
+ 133 17:21:51.359070 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > ff02::d: PIMv2, length 50
+ Bootstrap, cksum 0xbe23 (correct) tag=116 hashmlen=25 BSRprio=1 BSR=1::5 (group0: ff02::1 RPcnt=0 FRPcnt=0)
+ 134 17:21:51.375173 IP6 (hlim 64, next-header PIM (103) payload length: 118) 10::2 > ff02::d: PIMv2, length 118
+ Bootstrap, cksum 0x9791 (correct) tag=1e9 hashmlen=16 BSRprio=59 BSR=1::8 (group0: ff02::2(0x01) RPcnt=1 FRPcnt=1 RP0=1::6,holdtime=1m15s,prio=64) (group1: ff02::3 RPcnt=1 FRPcnt=1 RP0=1::7,holdtime=1m30s,prio=229)
+ 135 17:21:51.389973 IP6 (hlim 64, next-header PIM (103) payload length: 26) 10::2 > 10::1: PIMv2, length 26
+ Bootstrap, cksum 0xbadd (correct) tag=9e hashmlen=29 BSRprio=86 BSR=1::9
+ 136 17:22:06.397655 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 26) 10::1 > ff02::d: PIMv2, length 26
+ Bootstrap, cksum 0xcdee (correct) tag=6c hashmlen=11 BSRprio=120 BSR=1::a
+ 137 17:22:06.401467 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 26) 10::1 > ff02::d: PIMv2, length 26
+ Bootstrap, cksum 0xd0dc (correct) tag=75 hashmlen=8 BSRprio=128 BSR=1::b
+ 138 17:22:06.405175 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 50) 10::1 > ff02::d: PIMv2, length 50
+ Bootstrap, cksum 0xcfd8 (correct) tag=1f9 hashmlen=6 BSRprio=96 BSR=1::c (group0: ff02::4 RPcnt=0 FRPcnt=0)
+ 139 17:22:06.409793 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 118) 10::1 > ff02::d: PIMv2, length 118
+ Bootstrap, cksum 0x773d (correct) tag=110 hashmlen=18 BSRprio=218 BSR=1::f (group0: ff02::5(0x01) RPcnt=1 FRPcnt=1 RP0=1::d,holdtime=1m52s,prio=205) (group1: ff02::6 RPcnt=1 FRPcnt=1 RP0=1::e,holdtime=2m49s,prio=118)
+ 140 17:22:28.670554 IP6 (hlim 64, next-header PIM (103) payload length: 46) 10::2 > 10::1: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xce65 (correct) prefix-cnt=1 prio=73 holdtime=13m6s RP=1::2 Group0=ff02::1(0x01)
+ 141 17:22:28.686085 IP6 (hlim 64, next-header PIM (103) payload length: 46) 10::2 > 10::1: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xcedd (correct) prefix-cnt=1 prio=152 holdtime=14m1s RP=1::3 Group0=ff02::2
+ 142 17:22:28.701051 IP6 (hlim 64, next-header PIM (103) payload length: 66) 10::2 > 10::1: PIMv2, length 66
+ Candidate RP Advertisement, cksum 0xcd13 (correct) prefix-cnt=2 prio=131 holdtime=10m51s RP=1::4 Group0=ff02::3 Group1=ff02::4
+ 143 17:22:28.716663 IP6 (hlim 64, next-header PIM (103) payload length: 46) 10::2 > 10::1: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xcfa4 (correct) prefix-cnt=1 prio=75 holdtime=7m38s RP=1::5 Group0=ff02::5(0x01)
+ 144 17:22:28.732342 IP6 (hlim 64, next-header PIM (103) payload length: 46) 10::2 > 10::1: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xcfa4 (correct) prefix-cnt=1 prio=75 holdtime=7m38s RP=1::5 Group0=ff02::5(0x01)
+ 145 17:22:28.747319 IP6 (hlim 64, next-header PIM (103) payload length: 46) 10::2 > ff02::d: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xd0bf (correct) prefix-cnt=1 prio=211 holdtime=4m54s RP=1::6 Group0=ff02::6(0x01)
+ 146 17:22:43.754936 IP6 (hlim 64, next-header PIM (103) payload length: 226) 10::2 > 10::1: PIMv2, length 226
+ Candidate RP Advertisement, cksum 0xb46b (correct) prefix-cnt=2 prio=242 holdtime=15m25s RP=1::7 Group0=ff02::7(0x01) Group1=ff02::8(0x01)
+ 147 17:22:58.764755 IP6 (hlim 64, next-header PIM (103) payload length: 46) 10::2 > ff02::d: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xce10 (correct) prefix-cnt=1 prio=189 holdtime=16m30s RP=1::8 Group0=ff02::11(0x01)
+ 148 17:23:13.771504 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 46) 10::1 > 10::2: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xccca (correct) prefix-cnt=1 prio=233 holdtime=16m53s RP=1::9 Group0=ff02::12(0x01)
+ 149 17:23:13.775525 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 46) 10::1 > 10::2: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xcf2c (correct) prefix-cnt=1 prio=48 holdtime=14m2s RP=1::a Group0=ff02::13
+ 150 17:23:13.779819 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 66) 10::1 > 10::2: PIMv2, length 66
+ Candidate RP Advertisement, cksum 0xceda (correct) prefix-cnt=2 prio=113 holdtime=2m53s RP=1::b Group0=ff02::15 Group1=ff02::14
+ 151 17:23:13.784515 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 66) 10::1 > 10::2: PIMv2, length 66
+ Candidate RP Advertisement, cksum 0xcca8 (incorrect) prefix-cnt=2 prio=49 holdtime=13m31s RP=1::c Group0=ff02::17 Group1=ff02::16
+ 152 17:23:26.044171 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0xf292 (correct), upstream-neighbor: 1::9
+ 3 group(s), holdtime: 45s
+ group #1: ff02::3(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::5(WR)
+ joined source #2: 1::3(R)
+ joined source #3: 1::2(S)
+ joined source #4: 1::4(R)
+ pruned source #1: 1::8(R)
+ pruned source #2: 1::7(R)
+ pruned source #3: 1::6(S)
+ group #2: ff02::2(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::5(WR)
+ joined source #2: 1::3(R)
+ joined source #3: 1::2(S)
+ joined source #4: 1::4(R)
+ pruned source #1: 1::8(R)
+ pruned source #2: 1::7(R)
+ pruned source #3: 1::6(S)
+ group #3: ff02::1(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::5(WR)
+ joined source #2: 1::3(R)
+ joined source #3: 1::2(S)
+ joined source #4: 1::4(R)
+ pruned source #1: 1::8(R)
+ pruned source #2: 1::7(R)
+ pruned source #3: 1::6(S)
+ 153 17:23:26.059514 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0xf292 (correct), upstream-neighbor: 1::9
+ 3 group(s), holdtime: 45s
+ group #1: ff02::3(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::5(WR)
+ joined source #2: 1::3(R)
+ joined source #3: 1::2(S)
+ joined source #4: 1::4(R)
+ pruned source #1: 1::8(R)
+ pruned source #2: 1::7(R)
+ pruned source #3: 1::6(S)
+ group #2: ff02::2(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::5(WR)
+ joined source #2: 1::3(R)
+ joined source #3: 1::2(S)
+ joined source #4: 1::4(R)
+ pruned source #1: 1::8(R)
+ pruned source #2: 1::7(R)
+ pruned source #3: 1::6(S)
+ group #3: ff02::1(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::5(WR)
+ joined source #2: 1::3(R)
+ joined source #3: 1::2(S)
+ joined source #4: 1::4(R)
+ pruned source #1: 1::8(R)
+ pruned source #2: 1::7(R)
+ pruned source #3: 1::6(S)
+ 154 17:23:26.075326 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0xf1d9 (correct), upstream-neighbor: 1::11
+ 3 group(s), holdtime: 45s
+ group #1: ff02::6(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::c(R)
+ joined source #2: 1::a(S)
+ joined source #3: 1::b(R)
+ joined source #4: 1::d(WR)
+ pruned source #1: 1::e(S)
+ pruned source #2: 1::10(R)
+ pruned source #3: 1::f(R)
+ group #2: ff02::5(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::c(R)
+ joined source #2: 1::a(S)
+ joined source #3: 1::b(R)
+ joined source #4: 1::d(WR)
+ pruned source #1: 1::e(S)
+ pruned source #2: 1::10(R)
+ pruned source #3: 1::f(R)
+ group #3: ff02::4(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::c(R)
+ joined source #2: 1::a(S)
+ joined source #3: 1::b(R)
+ joined source #4: 1::d(WR)
+ pruned source #1: 1::e(S)
+ pruned source #2: 1::10(R)
+ pruned source #3: 1::f(R)
+ 155 17:23:41.083345 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0xf1d9 (correct), upstream-neighbor: 1::11
+ 3 group(s), holdtime: 45s
+ group #1: ff02::6(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::c(R)
+ joined source #2: 1::a(S)
+ joined source #3: 1::b(R)
+ joined source #4: 1::d(WR)
+ pruned source #1: 1::e(S)
+ pruned source #2: 1::10(R)
+ pruned source #3: 1::f(R)
+ group #2: ff02::5(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::c(R)
+ joined source #2: 1::a(S)
+ joined source #3: 1::b(R)
+ joined source #4: 1::d(WR)
+ pruned source #1: 1::e(S)
+ pruned source #2: 1::10(R)
+ pruned source #3: 1::f(R)
+ group #3: ff02::4(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::c(R)
+ joined source #2: 1::a(S)
+ joined source #3: 1::b(R)
+ joined source #4: 1::d(WR)
+ pruned source #1: 1::e(S)
+ pruned source #2: 1::10(R)
+ pruned source #3: 1::f(R)
+ 156 17:23:56.095440 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x7122 (correct), upstream-neighbor: 1::19
+ 3 group(s), holdtime: 45s
+ group #1: ff02::7, joined sources: 4, pruned sources: 3
+ joined source #1: 1::15(WR)
+ joined source #2: 1::13(R)
+ joined source #3: 1::14(R)
+ joined source #4: 1::12(S)
+ pruned source #1: 1::18(R)
+ pruned source #2: 1::17(R)
+ pruned source #3: 1::16(S)
+ group #2: ff02::9, joined sources: 4, pruned sources: 3
+ joined source #1: 1::15(WR)
+ joined source #2: 1::13(R)
+ joined source #3: 1::14(R)
+ joined source #4: 1::12(S)
+ pruned source #1: 1::18(R)
+ pruned source #2: 1::17(R)
+ pruned source #3: 1::16(S)
+ group #3: ff02::8, joined sources: 4, pruned sources: 3
+ joined source #1: 1::15(WR)
+ joined source #2: 1::13(R)
+ joined source #3: 1::14(R)
+ joined source #4: 1::12(S)
+ pruned source #1: 1::18(R)
+ pruned source #2: 1::17(R)
+ pruned source #3: 1::16(S)
+ 157 17:24:11.103070 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x7122 (correct), upstream-neighbor: 1::19
+ 3 group(s), holdtime: 45s
+ group #1: ff02::7, joined sources: 4, pruned sources: 3
+ joined source #1: 1::15(WR)
+ joined source #2: 1::13(R)
+ joined source #3: 1::14(R)
+ joined source #4: 1::12(S)
+ pruned source #1: 1::18(R)
+ pruned source #2: 1::17(R)
+ pruned source #3: 1::16(S)
+ group #2: ff02::9, joined sources: 4, pruned sources: 3
+ joined source #1: 1::15(WR)
+ joined source #2: 1::13(R)
+ joined source #3: 1::14(R)
+ joined source #4: 1::12(S)
+ pruned source #1: 1::18(R)
+ pruned source #2: 1::17(R)
+ pruned source #3: 1::16(S)
+ group #3: ff02::8, joined sources: 4, pruned sources: 3
+ joined source #1: 1::15(WR)
+ joined source #2: 1::13(R)
+ joined source #3: 1::14(R)
+ joined source #4: 1::12(S)
+ pruned source #1: 1::18(R)
+ pruned source #2: 1::17(R)
+ pruned source #3: 1::16(S)
+ 158 17:24:26.112599 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x7069 (correct), upstream-neighbor: 1::21
+ 3 group(s), holdtime: 45s
+ group #1: ff02::c, joined sources: 4, pruned sources: 3
+ joined source #1: 1::1c(R)
+ joined source #2: 1::1d(WR)
+ joined source #3: 1::1a(S)
+ joined source #4: 1::1b(R)
+ pruned source #1: 1::1e(S)
+ pruned source #2: 1::20(R)
+ pruned source #3: 1::1f(R)
+ group #2: ff02::b, joined sources: 4, pruned sources: 3
+ joined source #1: 1::1c(R)
+ joined source #2: 1::1d(WR)
+ joined source #3: 1::1a(S)
+ joined source #4: 1::1b(R)
+ pruned source #1: 1::1e(S)
+ pruned source #2: 1::20(R)
+ pruned source #3: 1::1f(R)
+ group #3: ff02::a, joined sources: 4, pruned sources: 3
+ joined source #1: 1::1c(R)
+ joined source #2: 1::1d(WR)
+ joined source #3: 1::1a(S)
+ joined source #4: 1::1b(R)
+ pruned source #1: 1::1e(S)
+ pruned source #2: 1::20(R)
+ pruned source #3: 1::1f(R)
+ 159 17:24:26.128184 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x7069 (correct), upstream-neighbor: 1::21
+ 3 group(s), holdtime: 45s
+ group #1: ff02::c, joined sources: 4, pruned sources: 3
+ joined source #1: 1::1c(R)
+ joined source #2: 1::1d(WR)
+ joined source #3: 1::1a(S)
+ joined source #4: 1::1b(R)
+ pruned source #1: 1::1e(S)
+ pruned source #2: 1::20(R)
+ pruned source #3: 1::1f(R)
+ group #2: ff02::b, joined sources: 4, pruned sources: 3
+ joined source #1: 1::1c(R)
+ joined source #2: 1::1d(WR)
+ joined source #3: 1::1a(S)
+ joined source #4: 1::1b(R)
+ pruned source #1: 1::1e(S)
+ pruned source #2: 1::20(R)
+ pruned source #3: 1::1f(R)
+ group #3: ff02::a, joined sources: 4, pruned sources: 3
+ joined source #1: 1::1c(R)
+ joined source #2: 1::1d(WR)
+ joined source #3: 1::1a(S)
+ joined source #4: 1::1b(R)
+ pruned source #1: 1::1e(S)
+ pruned source #2: 1::20(R)
+ pruned source #3: 1::1f(R)
+ 160 17:24:26.144272 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x6fb0 (correct), upstream-neighbor: 1::29
+ 3 group(s), holdtime: 45s
+ group #1: ff02::f, joined sources: 4, pruned sources: 3
+ joined source #1: 1::25(WR)
+ joined source #2: 1::23(R)
+ joined source #3: 1::22(S)
+ joined source #4: 1::24(R)
+ pruned source #1: 1::28(R)
+ pruned source #2: 1::26(S)
+ pruned source #3: 1::27(R)
+ group #2: ff02::e, joined sources: 4, pruned sources: 3
+ joined source #1: 1::25(WR)
+ joined source #2: 1::23(R)
+ joined source #3: 1::22(S)
+ joined source #4: 1::24(R)
+ pruned source #1: 1::28(R)
+ pruned source #2: 1::26(S)
+ pruned source #3: 1::27(R)
+ group #3: ff02::d, joined sources: 4, pruned sources: 3
+ joined source #1: 1::25(WR)
+ joined source #2: 1::23(R)
+ joined source #3: 1::22(S)
+ joined source #4: 1::24(R)
+ pruned source #1: 1::28(R)
+ pruned source #2: 1::26(S)
+ pruned source #3: 1::27(R)
+ 161 17:24:41.152302 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x6fb0 (correct), upstream-neighbor: 1::29
+ 3 group(s), holdtime: 45s
+ group #1: ff02::f, joined sources: 4, pruned sources: 3
+ joined source #1: 1::25(WR)
+ joined source #2: 1::23(R)
+ joined source #3: 1::22(S)
+ joined source #4: 1::24(R)
+ pruned source #1: 1::28(R)
+ pruned source #2: 1::26(S)
+ pruned source #3: 1::27(R)
+ group #2: ff02::e, joined sources: 4, pruned sources: 3
+ joined source #1: 1::25(WR)
+ joined source #2: 1::23(R)
+ joined source #3: 1::22(S)
+ joined source #4: 1::24(R)
+ pruned source #1: 1::28(R)
+ pruned source #2: 1::26(S)
+ pruned source #3: 1::27(R)
+ group #3: ff02::d, joined sources: 4, pruned sources: 3
+ joined source #1: 1::25(WR)
+ joined source #2: 1::23(R)
+ joined source #3: 1::22(S)
+ joined source #4: 1::24(R)
+ pruned source #1: 1::28(R)
+ pruned source #2: 1::26(S)
+ pruned source #3: 1::27(R)
+ 162 17:24:56.163412 IP6 (hlim 64, next-header PIM (103) payload length: 758) 10::2 > 10::1: PIMv2, length 758
+ Join / Prune, cksum 0x2e8c (correct), upstream-neighbor: 1::35
+ 3 group(s), holdtime: 45s
+ group #1: ff02::12, joined sources: 4, pruned sources: 7
+ joined source #1: 1::2c(R)
+ joined source #2: 1::2a(S)
+ joined source #3: 1::2b(R)
+ joined source #4: 1::2d(WR)
+ pruned source #1: 1::33(R)
+ pruned source #2: 1::2e(S)
+ pruned source #3: 1::2f(S)
+ pruned source #4: 1::30(S)
+ pruned source #5: 1::32(R)
+ pruned source #6: 1::31(R)
+ pruned source #7: 1::34(R)
+ group #2: ff02::11, joined sources: 4, pruned sources: 7
+ joined source #1: 1::2c(R)
+ joined source #2: 1::2a(S)
+ joined source #3: 1::2b(R)
+ joined source #4: 1::2d(WR)
+ pruned source #1: 1::33(R)
+ pruned source #2: 1::2e(S)
+ pruned source #3: 1::2f(S)
+ pruned source #4: 1::30(S)
+ pruned source #5: 1::32(R)
+ pruned source #6: 1::31(R)
+ pruned source #7: 1::34(R)
+ group #3: ff02::10, joined sources: 4, pruned sources: 7
+ joined source #1: 1::2c(R)
+ joined source #2: 1::2a(S)
+ joined source #3: 1::2b(R)
+ joined source #4: 1::2d(WR)
+ pruned source #1: 1::33(R)
+ pruned source #2: 1::2e(S)
+ pruned source #3: 1::2f(S)
+ pruned source #4: 1::30(S)
+ pruned source #5: 1::32(R)
+ pruned source #6: 1::31(R)
+ pruned source #7: 1::34(R)
+ 163 17:25:11.174870 IP6 (hlim 64, next-header PIM (103) payload length: 578) 10::2 > ff02::d: PIMv2, length 578
+ Join / Prune, cksum 0x506c (correct), upstream-neighbor: 1::3e
+ 3 group(s), holdtime: 45s
+ group #1: ff02::13, joined sources: 4, pruned sources: 4
+ joined source #1: 1::36(S)
+ joined source #2: 1::38(R)
+ joined source #3: 1::37(R)
+ joined source #4: 1::39(WR)
+ pruned source #1: 1::3c(S)
+ pruned source #2: 1::3b(S)
+ pruned source #3: 1::3a(S)
+ pruned source #4: 1::3d(R)
+ group #2: ff02::15, joined sources: 4, pruned sources: 4
+ joined source #1: 1::36(S)
+ joined source #2: 1::38(R)
+ joined source #3: 1::37(R)
+ joined source #4: 1::39(WR)
+ pruned source #1: 1::3c(S)
+ pruned source #2: 1::3b(S)
+ pruned source #3: 1::3a(S)
+ pruned source #4: 1::3d(R)
+ group #3: ff02::14, joined sources: 4, pruned sources: 4
+ joined source #1: 1::36(S)
+ joined source #2: 1::38(R)
+ joined source #3: 1::37(R)
+ joined source #4: 1::39(WR)
+ pruned source #1: 1::3c(S)
+ pruned source #2: 1::3b(S)
+ pruned source #3: 1::3a(S)
+ pruned source #4: 1::3d(R)
+ 164 17:25:26.184381 IP6 (hlim 64, next-header PIM (103) payload length: 758) 10::2 > 10::1: PIMv2, length 758
+ Join / Prune, cksum 0x2bb0 (correct), upstream-neighbor: 1::4a
+ 3 group(s), holdtime: 45s
+ group #1: ff02::17, joined sources: 4, pruned sources: 7
+ joined source #1: 1::3f(S)
+ joined source #2: 1::40(R)
+ joined source #3: 1::42(WR)
+ joined source #4: 1::41(R)
+ pruned source #1: 1::46(R)
+ pruned source #2: 1::43(S)
+ pruned source #3: 1::45(S)
+ pruned source #4: 1::47(R)
+ pruned source #5: 1::44(S)
+ pruned source #6: 1::49(R)
+ pruned source #7: 1::48(R)
+ group #2: ff02::16, joined sources: 4, pruned sources: 7
+ joined source #1: 1::3f(S)
+ joined source #2: 1::40(R)
+ joined source #3: 1::42(WR)
+ joined source #4: 1::41(R)
+ pruned source #1: 1::46(R)
+ pruned source #2: 1::43(S)
+ pruned source #3: 1::45(S)
+ pruned source #4: 1::47(R)
+ pruned source #5: 1::44(S)
+ pruned source #6: 1::49(R)
+ pruned source #7: 1::48(R)
+ group #3: ff02::18, joined sources: 4, pruned sources: 7
+ joined source #1: 1::3f(S)
+ joined source #2: 1::40(R)
+ joined source #3: 1::42(WR)
+ joined source #4: 1::41(R)
+ pruned source #1: 1::46(R)
+ pruned source #2: 1::43(S)
+ pruned source #3: 1::45(S)
+ pruned source #4: 1::47(R)
+ pruned source #5: 1::44(S)
+ pruned source #6: 1::49(R)
+ pruned source #7: 1::48(R)
+ 165 17:25:41.195284 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 518) 10::1 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0xb005 (correct), upstream-neighbor: 1::52
+ 3 group(s), holdtime: 45s
+ group #1: ff02::1a(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::4d(SR)
+ joined source #2: 1::4c(SR)
+ joined source #3: 1::4b(S)
+ joined source #4: 1::4e(SWR)
+ pruned source #1: 1::50(SR)
+ pruned source #2: 1::51(SR)
+ pruned source #3: 1::4f(S)
+ group #2: ff02::19(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::4d(SR)
+ joined source #2: 1::4c(SR)
+ joined source #3: 1::4b(S)
+ joined source #4: 1::4e(SWR)
+ pruned source #1: 1::50(SR)
+ pruned source #2: 1::51(SR)
+ pruned source #3: 1::4f(S)
+ group #3: ff02::1b(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::4d(SR)
+ joined source #2: 1::4c(SR)
+ joined source #3: 1::4b(S)
+ joined source #4: 1::4e(SWR)
+ pruned source #1: 1::50(SR)
+ pruned source #2: 1::51(SR)
+ pruned source #3: 1::4f(S)
+ 166 17:25:41.202437 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 518) 10::1 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0xb005 (correct), upstream-neighbor: 1::52
+ 3 group(s), holdtime: 45s
+ group #1: ff02::1a(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::4d(SR)
+ joined source #2: 1::4c(SR)
+ joined source #3: 1::4b(S)
+ joined source #4: 1::4e(SWR)
+ pruned source #1: 1::50(SR)
+ pruned source #2: 1::51(SR)
+ pruned source #3: 1::4f(S)
+ group #2: ff02::19(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::4d(SR)
+ joined source #2: 1::4c(SR)
+ joined source #3: 1::4b(S)
+ joined source #4: 1::4e(SWR)
+ pruned source #1: 1::50(SR)
+ pruned source #2: 1::51(SR)
+ pruned source #3: 1::4f(S)
+ group #3: ff02::1b(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::4d(SR)
+ joined source #2: 1::4c(SR)
+ joined source #3: 1::4b(S)
+ joined source #4: 1::4e(SWR)
+ pruned source #1: 1::50(SR)
+ pruned source #2: 1::51(SR)
+ pruned source #3: 1::4f(S)
+ 167 17:26:01.234759 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 518) 10::1 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x2ddc (correct), upstream-neighbor: 1::6a
+ 3 group(s), holdtime: 45s
+ group #1: ff02::23, joined sources: 4, pruned sources: 3
+ joined source #1: 1::65(SR)
+ joined source #2: 1::64(SR)
+ joined source #3: 1::63(S)
+ joined source #4: 1::66(SWR)
+ pruned source #1: 1::68(SR)
+ pruned source #2: 1::69(SR)
+ pruned source #3: 1::67(S)
+ group #2: ff02::22, joined sources: 4, pruned sources: 3
+ joined source #1: 1::65(SR)
+ joined source #2: 1::64(SR)
+ joined source #3: 1::63(S)
+ joined source #4: 1::66(SWR)
+ pruned source #1: 1::68(SR)
+ pruned source #2: 1::69(SR)
+ pruned source #3: 1::67(S)
+ group #3: ff02::24, joined sources: 4, pruned sources: 3
+ joined source #1: 1::65(SR)
+ joined source #2: 1::64(SR)
+ joined source #3: 1::63(S)
+ joined source #4: 1::66(SWR)
+ pruned source #1: 1::68(SR)
+ pruned source #2: 1::69(SR)
+ pruned source #3: 1::67(S)
+ 168 17:26:01.241645 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 518) 10::1 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x2ddc (correct), upstream-neighbor: 1::6a
+ 3 group(s), holdtime: 45s
+ group #1: ff02::23, joined sources: 4, pruned sources: 3
+ joined source #1: 1::65(SR)
+ joined source #2: 1::64(SR)
+ joined source #3: 1::63(S)
+ joined source #4: 1::66(SWR)
+ pruned source #1: 1::68(SR)
+ pruned source #2: 1::69(SR)
+ pruned source #3: 1::67(S)
+ group #2: ff02::22, joined sources: 4, pruned sources: 3
+ joined source #1: 1::65(SR)
+ joined source #2: 1::64(SR)
+ joined source #3: 1::63(S)
+ joined source #4: 1::66(SWR)
+ pruned source #1: 1::68(SR)
+ pruned source #2: 1::69(SR)
+ pruned source #3: 1::67(S)
+ group #3: ff02::24, joined sources: 4, pruned sources: 3
+ joined source #1: 1::65(SR)
+ joined source #2: 1::64(SR)
+ joined source #3: 1::63(S)
+ joined source #4: 1::66(SWR)
+ pruned source #1: 1::68(SR)
+ pruned source #2: 1::69(SR)
+ pruned source #3: 1::67(S)
+ 169 17:26:13.486913 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7bd (correct) group=ff02::1 src=1::2 pref=0 metric=0
+ 170 17:26:13.501898 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7bd (correct) group=ff02::1 src=1::2 pref=0 metric=0
+ 171 17:26:13.517759 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7bb (correct) group=ff02::2 src=1::3 pref=0 metric=0
+ 172 17:26:28.527906 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7bb (correct) group=ff02::2 src=1::3 pref=0 metric=0
+ 173 17:26:43.534167 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > 10::1: PIMv2, length 50
+ Assert, cksum 0xd6b8 (correct) group=ff02::3 src=1::4 pref=0 metric=0
+ 174 17:26:58.543141 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7b7 (correct) group=ff02::4 src=1::5 pref=0 metric=0
+ 175 17:27:13.553752 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > 10::1: PIMv2, length 50
+ Assert, cksum 0xd6b4 (correct) group=ff02::5 src=1::6 pref=0 metric=0
+ 176 17:27:28.562985 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 50) 10::1 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7b4 (correct) group=ff02::6 src=1::7 pref=0 metric=0
+ 177 17:27:28.566721 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 50) 10::1 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7b4 (correct) group=ff02::6 src=1::7 pref=0 metric=0
+ 178 17:27:40.810753 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > 10::1: PIMv2, length 48
+ Register, cksum 0xcc3c (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::2 > ff02::1: [|pim]
+ 179 17:27:40.827314 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > 10::1: PIMv2, length 48
+ Register, cksum 0xcc3c (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::2 > ff02::1: [|pim]
+ 180 17:27:40.843664 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > 10::1: PIMv2, length 48
+ Register, cksum 0xcc3c (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::2 > ff02::1: [|pim]
+ 181 17:27:40.860071 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > 10::1: PIMv2, length 48
+ Register, cksum 0xcc3c (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::2 > ff02::1: [|pim]
+ 182 17:27:40.879398 IP6 (hlim 64, next-header PIM (103) payload length: 1400) 10::2 > 10::1: PIMv2, length 1400
+ Register, cksum 0x67ce (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 1352) 1::3.2468 > ff02::2.2468: [udp sum ok] UDP, length 1344
+ 183 17:27:40.898565 IP6 (hlim 64, next-header PIM (103) payload length: 1500) 10::2 > 10::1: PIMv2, length 1500
+ Register, cksum 0x676a (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 1452) 1::4.2468 > ff02::3.2468: [udp sum ok] UDP, length 1444
+ 184 17:27:40.918476 IP6 (hlim 64, next-header PIM (103) payload length: 32000) 10::2 > 10::1: PIMv2, length 32000
+ Register, cksum 0xf045 (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 31952) 1::5.2468 > ff02::4.2468: [udp sum ok] UDP, length 31944
+ 185 17:27:40.939877 IP6 (hlim 64, next-header PIM (103) payload length: 65535) 10::2 > 10::1: PIMv2, length 65535
+ Register, cksum 0x6d46 (unverified), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 65487) 1::6.2468 > ff02::5.2468: UDP, length 65479
+ 186 17:27:40.957722 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > 10::1: PIMv2, length 48
+ Register, cksum 0xcc32 (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::7 > ff02::6: [|pim]
+ 187 17:27:40.975732 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > 10::1: PIMv2, length 48
+ Register, cksum 0xcc32 (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::7 > ff02::6: [|pim]
+ 188 17:27:40.993200 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > ff02::d: PIMv2, length 48
+ Register, cksum 0xcd31 (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::8 > ff02::7: [|pim]
+ 189 17:27:56.005578 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > ff02::d: PIMv2, length 48
+ Register, cksum 0xcd2f (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::9 > ff02::8: [|pim]
+ 190 17:28:11.113454 IP6 (class 0xc0, flowlabel 0xe75c5, hlim 255, next-header PIM (103) payload length: 156) 1::b > 10::2: PIMv2, length 156
+ Register, cksum 0xde72 (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
+ 191 17:28:11.122290 IP6 (class 0xc0, flowlabel 0xe75c5, hlim 1, next-header PIM (103) payload length: 156) 1::b > 10::2: PIMv2, length 156
+ Register, cksum 0xde72 (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
+ 192 17:28:11.130752 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 10, next-header PIM (103) payload length: 156) 10::1 > 10::2: PIMv2, length 156
+ Register, cksum 0xde6d (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
+ 193 17:28:11.138877 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 200, next-header PIM (103) payload length: 156) 10::1 > 10::2: PIMv2, length 156
+ Register, cksum 0xde6d (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
+ 194 17:28:11.147140 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 20, next-header PIM (103) payload length: 156) 10::1 > 10::2: PIMv2, length 156
+ Register, cksum 0xde6d (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
+ 195 17:28:11.213700 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 48) 10::1 > 10::2: PIMv2, length 48
+ Register, cksum 0x9e6d (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::c > ff02::a: [|pim]
+ 196 17:28:11.228981 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 48) 10::1 > 10::2: PIMv2, length 48
+ Register, cksum 0x9e7e (incorrect), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::d > ff02::b: [|pim]
+ 197 17:28:18.502726 IP6 (hlim 64, next-header PIM (103) payload length: 42) 10::2 > 10::1: PIMv2, length 42
+ Register Stop, cksum 0xd9c4 (correct) group=ff02::1 source=1::2
+ 198 17:28:18.517840 IP6 (hlim 64, next-header PIM (103) payload length: 42) 10::2 > 10::1: PIMv2, length 42
+ Register Stop, cksum 0xd9c4 (correct) group=ff02::1 source=1::2
+ 199 17:28:18.533422 IP6 (hlim 64, next-header PIM (103) payload length: 42) 10::2 > 10::1: PIMv2, length 42
+ Register Stop, cksum 0xd9c2 (correct) group=ff02::2 source=1::3
+ 200 17:28:18.549676 IP6 (hlim 64, next-header PIM (103) payload length: 42) 10::2 > 10::1: PIMv2, length 42
+ Register Stop, cksum 0xd9c2 (correct) group=ff02::2 source=1::3
+ 201 17:28:18.564554 IP6 (hlim 64, next-header PIM (103) payload length: 42) 10::2 > ff02::d: PIMv2, length 42
+ Register Stop, cksum 0xdac1 (correct) group=ff02::3 source=1::4
+ 202 17:28:33.570694 IP6 (hlim 64, next-header PIM (103) payload length: 42) 10::2 > ff02::d: PIMv2, length 42
+ Register Stop, cksum 0xdabf (correct) group=ff02::4 source=1::5
+ 203 17:28:48.578934 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 42) 10::1 > 10::2: PIMv2, length 42
+ Register Stop, cksum 0xd9bc (correct) group=ff02::5 source=1::6
+ 204 17:28:48.582687 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 42) 10::1 > 10::2: PIMv2, length 42
+ Register Stop, cksum 0xd9bc (correct) group=ff02::5 source=1::6
+ 205 17:28:48.586062 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 42) 10::1 > 10::2: PIMv2, length 42
+ Register Stop, cksum 0xd9bc (correct) group=ff02::5 source=1::6
+ 206 17:28:48.590187 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 42) 10::1 > 10::2: PIMv2, length 42
+ Register Stop, cksum 0xd9cb (incorrect) group=ff02::6 source=1::7
+ 207 17:28:55.824177 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3d7 (correct)
+ Offer, rpa=1::2 sender pref=100 sender metric=10
+ 208 17:28:55.839949 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3d7 (correct)
+ Offer, rpa=1::2 sender pref=100 sender metric=10
+ 209 17:28:55.855650 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3c6 (correct)
+ Winner, rpa=1::3 sender pref=100 sender metric=10
+ 210 17:28:55.871248 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3c6 (correct)
+ Winner, rpa=1::3 sender pref=100 sender metric=10
+ 211 17:28:55.887289 IP6 (hlim 64, next-header PIM (103) payload length: 58) 10::2 > ff02::d: PIMv2, length 58
+ DF Election, cksum 0x7f8b (correct)
+ Backoff, rpa=1::4 sender pref=100 sender metric=10
+ offer addr=1::5 offer pref=1000 offer metric=10000 interval 10000ms
+ 212 17:28:55.903013 IP6 (hlim 64, next-header PIM (103) payload length: 58) 10::2 > ff02::d: PIMv2, length 58
+ DF Election, cksum 0x7f8b (correct)
+ Backoff, rpa=1::4 sender pref=100 sender metric=10
+ offer addr=1::5 offer pref=1000 offer metric=10000 interval 10000ms
+ 213 17:28:55.919550 IP6 (hlim 64, next-header PIM (103) payload length: 56) 10::2 > ff02::d: PIMv2, length 56
+ DF Election, cksum 0xa689 (correct)
+ Pass, rpa=1::6 sender pref=100 sender metric=10
+ new winner addr=1::7 new winner pref=1000 new winner metric=10000
+ 214 17:28:55.935209 IP6 (hlim 64, next-header PIM (103) payload length: 56) 10::2 > ff02::d: PIMv2, length 56
+ DF Election, cksum 0xa689 (correct)
+ Pass, rpa=1::6 sender pref=100 sender metric=10
+ new winner addr=1::7 new winner pref=1000 new winner metric=10000
+ 215 17:28:55.951452 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3d1 (correct)
+ Offer, rpa=1::8 sender pref=100 sender metric=10
+ 216 17:29:10.963613 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3d1 (correct)
+ Offer, rpa=1::8 sender pref=100 sender metric=10
+ 217 17:29:25.974998 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > 10::1: PIMv2, length 30
+ DF Election, cksum 0xd2cf (correct)
+ Offer, rpa=1::9 sender pref=100 sender metric=10
+ 218 17:29:40.984969 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3cf (correct)
+ Offer, rpa=1::a sender pref=100 sender metric=10
+ 219 17:29:55.998320 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > 10::1: PIMv2, length 30
+ DF Election, cksum 0xd2cd (correct)
+ Offer, rpa=1::b sender pref=100 sender metric=10
+ 220 17:30:11.006628 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 30) 10::1 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3ce (correct)
+ Offer, rpa=1::c sender pref=100 sender metric=10
+ 221 17:30:11.011282 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 30) 10::1 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3ce (correct)
+ Offer, rpa=1::c sender pref=100 sender metric=10
+ 222 17:30:11.015823 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 30) 10::1 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3bd (correct)
+ Winner, rpa=1::d sender pref=100 sender metric=10
+ 223 17:30:11.020041 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 30) 10::1 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3bd (correct)
+ Winner, rpa=1::d sender pref=100 sender metric=10
+ 224 17:30:11.024077 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 58) 10::1 > ff02::d: PIMv2, length 58
+ DF Election, cksum 0x7f78 (correct)
+ Backoff, rpa=1::e sender pref=100 sender metric=10
+ offer addr=1::f offer pref=1000 offer metric=10000 interval 10000ms
+ 225 17:30:11.028134 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 58) 10::1 > ff02::d: PIMv2, length 58
+ DF Election, cksum 0x7f78 (correct)
+ Backoff, rpa=1::e sender pref=100 sender metric=10
+ offer addr=1::f offer pref=1000 offer metric=10000 interval 10000ms
+ 226 17:30:11.032519 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 56) 10::1 > ff02::d: PIMv2, length 56
+ DF Election, cksum 0xa676 (correct)
+ Pass, rpa=1::10 sender pref=100 sender metric=10
+ new winner addr=1::11 new winner pref=1000 new winner metric=10000
+ 227 17:30:11.037060 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 56) 10::1 > ff02::d: PIMv2, length 56
+ DF Election, cksum 0xa676 (correct)
+ Pass, rpa=1::10 sender pref=100 sender metric=10
+ new winner addr=1::11 new winner pref=1000 new winner metric=10000
+ 228 17:30:23.287232 IP6 (hlim 64, next-header PIM (103) payload length: 4) 10::2 > ff02::d: PIMv2, length 4
+ Graft, cksum 0xda72 (correct), upstream-neighbor: [|pimv2]
+ 229 17:30:45.519013 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 230 17:30:45.534657 IP6 (hlim 64, next-header PIM (103) payload length: 74) 10::2 > ff02::d: PIMv2, length 74
+ Hello, cksum 0xd855 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 36, Value:
+ 231 17:30:45.549731 IP6 (hlim 64, next-header PIM (103) payload length: 74) 10::2 > ff02::d: PIMv2, length 74
+ Hello, cksum 0xd855 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 36, Value:
+ 232 17:30:45.564397 IP6 (hlim 64, next-header PIM (103) payload length: 74) 10::2 > ff02::d: PIMv2, length 74
+ Hello, cksum 0xd855 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 36, Value:
+ 233 17:30:45.580862 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 234 17:30:45.595688 IP6 (hlim 64, next-header PIM (103) payload length: 74) 10::2 > ff02::d: PIMv2, length 74
+ Hello, cksum 0xd855 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 36, Value:
+ 235 17:30:45.610185 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 236 17:30:45.624903 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 237 17:30:45.639276 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 238 17:30:45.653978 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 239 17:30:45.668528 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 240 17:30:45.684110 IP6 (hlim 64, next-header PIM (103) payload length: 74) 10::2 > ff02::d: PIMv2, length 74
+ Hello, cksum 0xd851 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 36, Value:
+ 241 17:31:00.691792 IP6 (hlim 64, next-header PIM (103) payload length: 74) 10::2 > ff02::d: PIMv2, length 74
+ Hello, cksum 0xd851 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Address List Option (24), length 36, Value:
+ 242 17:31:15.702513 IP6 (hlim 64, next-header PIM (103) payload length: 34) 10::2 > 10::1: PIMv2, length 34
+ Hello, cksum 0xdbbf (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 243 17:31:30.708003 IP6 (hlim 64, next-header PIM (103) payload length: 34) 10::2 > 10::1: PIMv2, length 34
+ Hello, cksum 0xdbbf (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 244 17:31:45.717892 IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 78) 10::1 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd834 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 245 17:31:45.723603 IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 78) 10::1 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd834 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ DR Priority Option (19), length 4, Value: 150
+ Generation ID Option (20), length 4, Value: 0x00000226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
diff --git a/tests/pim-packet-assortment-vv.out b/tests/pim-packet-assortment-vv.out
new file mode 100644
index 0000000..b8c7d83
--- /dev/null
+++ b/tests/pim-packet-assortment-vv.out
@@ -0,0 +1,2139 @@
+ 1 17:10:44.789433 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 34)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 14
+ Bootstrap, cksum 0xcaa5 (correct) tag=17c hashmlen=4 BSRprio=93 BSR=10.0.0.1
+ 2 17:10:59.798983 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 34)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 14
+ Bootstrap, cksum 0xcaa5 (correct) tag=17c hashmlen=4 BSRprio=93 BSR=10.0.0.1
+ 3 17:11:14.807715 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 34)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 14
+ Bootstrap, cksum 0xc306 (correct) tag=177 hashmlen=12 BSRprio=0 BSR=10.0.0.2
+ 4 17:11:14.823339 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 34)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 14
+ Bootstrap, cksum 0xc384 (correct) tag=ca hashmlen=12 BSRprio=46 BSR=10.0.0.3
+ 5 17:11:14.838646 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 26
+ Bootstrap, cksum 0xd6ab (correct) tag=1b6 hashmlen=21 BSRprio=248 BSR=10.0.0.4 (group0: 225.0.0.1 RPcnt=0 FRPcnt=0)
+ 6 17:11:14.854392 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 78)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 58
+ Bootstrap, cksum 0x5abd (correct) tag=21 hashmlen=5 BSRprio=45 BSR=10.0.0.7 (group0: 225.0.0.2(0x01) RPcnt=1 FRPcnt=1 RP0=10.0.0.5,holdtime=1m58s,prio=107) (group1: 225.0.0.3 RPcnt=1 FRPcnt=1 RP0=10.0.0.6,holdtime=2m43s,prio=39)
+ 7 17:11:14.870050 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 34)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 14
+ Bootstrap, cksum 0xc296 (correct) tag=166 hashmlen=12 BSRprio=123 BSR=10.0.0.8
+ 8 17:11:29.877641 IP (tos 0xc0, ttl 1, id 5368, offset 0, flags [DF], proto PIM (103), length 34)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 14
+ Bootstrap, cksum 0xc2e0 (correct) tag=ea hashmlen=12 BSRprio=172 BSR=10.0.0.9
+ 9 17:11:29.882313 IP (tos 0xc0, ttl 1, id 5369, offset 0, flags [DF], proto PIM (103), length 34)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 14
+ Bootstrap, cksum 0xbdd6 (correct) tag=cb hashmlen=17 BSRprio=212 BSR=10.0.0.10
+ 10 17:11:29.886825 IP (tos 0xc0, ttl 1, id 5370, offset 0, flags [DF], proto PIM (103), length 46)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 26
+ Bootstrap, cksum 0xd12c (correct) tag=139 hashmlen=27 BSRprio=234 BSR=10.0.0.11 (group0: 225.0.0.4 RPcnt=0 FRPcnt=0)
+ 11 17:11:29.891835 IP (tos 0xc0, ttl 1, id 5371, offset 0, flags [DF], proto PIM (103), length 78)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 58
+ Bootstrap, cksum 0x58fb (correct) tag=c9 hashmlen=1 BSRprio=90 BSR=10.0.0.14 (group0: 225.0.0.5(0x01) RPcnt=1 FRPcnt=1 RP0=10.0.0.12,holdtime=1m28s,prio=58) (group1: 225.0.0.6 RPcnt=1 FRPcnt=1 RP0=10.0.0.13,holdtime=2m27s,prio=93)
+ 12 17:11:52.114000 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe833 (correct) prefix-cnt=1 prio=78 holdtime=1m31s RP=10.0.0.1 Group0=225.0.0.1(0x01)
+ 13 17:11:52.129609 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe824 (correct) prefix-cnt=1 prio=155 holdtime=4m43s RP=10.0.0.2 Group0=225.0.0.2
+ 14 17:11:52.144922 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 50)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 30
+ Candidate RP Advertisement, cksum 0x051a (correct) prefix-cnt=2 prio=213 holdtime=3m17s RP=10.0.0.3 Group0=225.0.0.3 Group1=225.0.0.4
+ 15 17:11:52.160444 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe743 (correct) prefix-cnt=1 prio=180 holdtime=3m42s RP=10.0.0.4 Group0=225.0.0.5(0x01)
+ 16 17:11:52.176120 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe743 (correct) prefix-cnt=1 prio=180 holdtime=3m42s RP=10.0.0.4 Group0=225.0.0.5(0x01)
+ 17 17:11:52.191149 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe53f (correct) prefix-cnt=1 prio=85 holdtime=13m51s RP=10.0.0.5 Group0=225.0.0.6(0x01)
+ 18 17:12:07.197582 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 114)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 94
+ Candidate RP Advertisement, cksum 0xe860 (correct) prefix-cnt=2 prio=63 holdtime=11m10s RP=10.0.0.6 Group0=225.0.0.7(0x01) Group1=225.0.0.8(0x01)
+ 19 17:12:22.207593 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe789 (correct) prefix-cnt=1 prio=139 holdtime=2m58s RP=10.0.0.7 Group0=225.0.0.17(0x01)
+ 20 17:12:37.213829 IP (tos 0xc0, ttl 255, id 32347, offset 0, flags [DF], proto PIM (103), length 42)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe4a6 (correct) prefix-cnt=1 prio=100 holdtime=15m54s RP=10.0.0.8 Group0=225.0.0.18(0x01)
+ 21 17:12:37.218303 IP (tos 0xc0, ttl 255, id 32348, offset 0, flags [DF], proto PIM (103), length 42)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xe622 (correct) prefix-cnt=1 prio=118 holdtime=13m30s RP=10.0.0.9 Group0=225.0.0.19
+ 22 17:12:37.222610 IP (tos 0xc0, ttl 255, id 32349, offset 0, flags [DF], proto PIM (103), length 50)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 30
+ Candidate RP Advertisement, cksum 0x0551 (correct) prefix-cnt=2 prio=39 holdtime=4m35s RP=10.0.0.10 Group0=225.0.0.20 Group1=225.0.0.21
+ 23 17:12:37.228304 IP (tos 0xc0, ttl 255, id 32350, offset 0, flags [DF], proto PIM (103), length 50)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 30
+ Candidate RP Advertisement, cksum 0x0544 (correct) prefix-cnt=2 prio=151 holdtime=2m51s RP=10.0.0.11 Group0=225.0.0.23 Group1=225.0.0.22
+ 24 17:12:37.233724 IP (tos 0xc0, ttl 255, id 44910, offset 0, flags [DF], proto PIM (103), length 50)
+ 10.0.0.13 > 10.0.0.2: PIMv2, length 30
+ Candidate RP Advertisement, cksum 0x0252 (correct) prefix-cnt=2 prio=24 holdtime=8m55s RP=10.0.0.12 Group0=225.0.0.25(0x01) Group1=225.0.0.24(0x01)
+ 25 17:12:49.443041 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x9453 (correct), upstream-neighbor: 10.0.0.8
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.3(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.3(R)
+ joined source #2: 10.0.0.1(S)
+ joined source #3: 10.0.0.4(WR)
+ joined source #4: 10.0.0.2(R)
+ pruned source #1: 10.0.0.7(R)
+ pruned source #2: 10.0.0.6(R)
+ pruned source #3: 10.0.0.5(S)
+ group #2: 225.0.0.1(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.3(R)
+ joined source #2: 10.0.0.1(S)
+ joined source #3: 10.0.0.4(WR)
+ joined source #4: 10.0.0.2(R)
+ pruned source #1: 10.0.0.7(R)
+ pruned source #2: 10.0.0.6(R)
+ pruned source #3: 10.0.0.5(S)
+ group #3: 225.0.0.2(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.3(R)
+ joined source #2: 10.0.0.1(S)
+ joined source #3: 10.0.0.4(WR)
+ joined source #4: 10.0.0.2(R)
+ pruned source #1: 10.0.0.7(R)
+ pruned source #2: 10.0.0.6(R)
+ pruned source #3: 10.0.0.5(S)
+ 26 17:12:49.459068 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x9453 (correct), upstream-neighbor: 10.0.0.8
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.3(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.3(R)
+ joined source #2: 10.0.0.1(S)
+ joined source #3: 10.0.0.4(WR)
+ joined source #4: 10.0.0.2(R)
+ pruned source #1: 10.0.0.7(R)
+ pruned source #2: 10.0.0.6(R)
+ pruned source #3: 10.0.0.5(S)
+ group #2: 225.0.0.1(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.3(R)
+ joined source #2: 10.0.0.1(S)
+ joined source #3: 10.0.0.4(WR)
+ joined source #4: 10.0.0.2(R)
+ pruned source #1: 10.0.0.7(R)
+ pruned source #2: 10.0.0.6(R)
+ pruned source #3: 10.0.0.5(S)
+ group #3: 225.0.0.2(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.3(R)
+ joined source #2: 10.0.0.1(S)
+ joined source #3: 10.0.0.4(WR)
+ joined source #4: 10.0.0.2(R)
+ pruned source #1: 10.0.0.7(R)
+ pruned source #2: 10.0.0.6(R)
+ pruned source #3: 10.0.0.5(S)
+ 27 17:12:49.474922 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x939a (correct), upstream-neighbor: 10.0.0.16
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.4(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.10(R)
+ joined source #2: 10.0.0.12(WR)
+ joined source #3: 10.0.0.9(S)
+ joined source #4: 10.0.0.11(R)
+ pruned source #1: 10.0.0.14(R)
+ pruned source #2: 10.0.0.13(S)
+ pruned source #3: 10.0.0.15(R)
+ group #2: 225.0.0.5(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.10(R)
+ joined source #2: 10.0.0.12(WR)
+ joined source #3: 10.0.0.9(S)
+ joined source #4: 10.0.0.11(R)
+ pruned source #1: 10.0.0.14(R)
+ pruned source #2: 10.0.0.13(S)
+ pruned source #3: 10.0.0.15(R)
+ group #3: 225.0.0.6(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.10(R)
+ joined source #2: 10.0.0.12(WR)
+ joined source #3: 10.0.0.9(S)
+ joined source #4: 10.0.0.11(R)
+ pruned source #1: 10.0.0.14(R)
+ pruned source #2: 10.0.0.13(S)
+ pruned source #3: 10.0.0.15(R)
+ 28 17:13:04.482150 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x939a (correct), upstream-neighbor: 10.0.0.16
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.4(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.10(R)
+ joined source #2: 10.0.0.12(WR)
+ joined source #3: 10.0.0.9(S)
+ joined source #4: 10.0.0.11(R)
+ pruned source #1: 10.0.0.14(R)
+ pruned source #2: 10.0.0.13(S)
+ pruned source #3: 10.0.0.15(R)
+ group #2: 225.0.0.5(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.10(R)
+ joined source #2: 10.0.0.12(WR)
+ joined source #3: 10.0.0.9(S)
+ joined source #4: 10.0.0.11(R)
+ pruned source #1: 10.0.0.14(R)
+ pruned source #2: 10.0.0.13(S)
+ pruned source #3: 10.0.0.15(R)
+ group #3: 225.0.0.6(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.10(R)
+ joined source #2: 10.0.0.12(WR)
+ joined source #3: 10.0.0.9(S)
+ joined source #4: 10.0.0.11(R)
+ pruned source #1: 10.0.0.14(R)
+ pruned source #2: 10.0.0.13(S)
+ pruned source #3: 10.0.0.15(R)
+ 29 17:13:19.491684 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x12e3 (correct), upstream-neighbor: 10.0.0.24
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.7, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.18(R)
+ joined source #2: 10.0.0.17(S)
+ joined source #3: 10.0.0.20(WR)
+ joined source #4: 10.0.0.19(R)
+ pruned source #1: 10.0.0.21(S)
+ pruned source #2: 10.0.0.22(R)
+ pruned source #3: 10.0.0.23(R)
+ group #2: 225.0.0.8, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.18(R)
+ joined source #2: 10.0.0.17(S)
+ joined source #3: 10.0.0.20(WR)
+ joined source #4: 10.0.0.19(R)
+ pruned source #1: 10.0.0.21(S)
+ pruned source #2: 10.0.0.22(R)
+ pruned source #3: 10.0.0.23(R)
+ group #3: 225.0.0.9, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.18(R)
+ joined source #2: 10.0.0.17(S)
+ joined source #3: 10.0.0.20(WR)
+ joined source #4: 10.0.0.19(R)
+ pruned source #1: 10.0.0.21(S)
+ pruned source #2: 10.0.0.22(R)
+ pruned source #3: 10.0.0.23(R)
+ 30 17:13:34.502041 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x12e3 (correct), upstream-neighbor: 10.0.0.24
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.7, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.18(R)
+ joined source #2: 10.0.0.17(S)
+ joined source #3: 10.0.0.20(WR)
+ joined source #4: 10.0.0.19(R)
+ pruned source #1: 10.0.0.21(S)
+ pruned source #2: 10.0.0.22(R)
+ pruned source #3: 10.0.0.23(R)
+ group #2: 225.0.0.8, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.18(R)
+ joined source #2: 10.0.0.17(S)
+ joined source #3: 10.0.0.20(WR)
+ joined source #4: 10.0.0.19(R)
+ pruned source #1: 10.0.0.21(S)
+ pruned source #2: 10.0.0.22(R)
+ pruned source #3: 10.0.0.23(R)
+ group #3: 225.0.0.9, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.18(R)
+ joined source #2: 10.0.0.17(S)
+ joined source #3: 10.0.0.20(WR)
+ joined source #4: 10.0.0.19(R)
+ pruned source #1: 10.0.0.21(S)
+ pruned source #2: 10.0.0.22(R)
+ pruned source #3: 10.0.0.23(R)
+ 31 17:13:49.515669 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x122a (correct), upstream-neighbor: 10.0.0.32
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.11, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.25(S)
+ joined source #2: 10.0.0.27(R)
+ joined source #3: 10.0.0.26(R)
+ joined source #4: 10.0.0.28(WR)
+ pruned source #1: 10.0.0.29(S)
+ pruned source #2: 10.0.0.31(R)
+ pruned source #3: 10.0.0.30(R)
+ group #2: 225.0.0.12, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.25(S)
+ joined source #2: 10.0.0.27(R)
+ joined source #3: 10.0.0.26(R)
+ joined source #4: 10.0.0.28(WR)
+ pruned source #1: 10.0.0.29(S)
+ pruned source #2: 10.0.0.31(R)
+ pruned source #3: 10.0.0.30(R)
+ group #3: 225.0.0.10, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.25(S)
+ joined source #2: 10.0.0.27(R)
+ joined source #3: 10.0.0.26(R)
+ joined source #4: 10.0.0.28(WR)
+ pruned source #1: 10.0.0.29(S)
+ pruned source #2: 10.0.0.31(R)
+ pruned source #3: 10.0.0.30(R)
+ 32 17:13:49.535091 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x122a (correct), upstream-neighbor: 10.0.0.32
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.11, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.25(S)
+ joined source #2: 10.0.0.27(R)
+ joined source #3: 10.0.0.26(R)
+ joined source #4: 10.0.0.28(WR)
+ pruned source #1: 10.0.0.29(S)
+ pruned source #2: 10.0.0.31(R)
+ pruned source #3: 10.0.0.30(R)
+ group #2: 225.0.0.12, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.25(S)
+ joined source #2: 10.0.0.27(R)
+ joined source #3: 10.0.0.26(R)
+ joined source #4: 10.0.0.28(WR)
+ pruned source #1: 10.0.0.29(S)
+ pruned source #2: 10.0.0.31(R)
+ pruned source #3: 10.0.0.30(R)
+ group #3: 225.0.0.10, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.25(S)
+ joined source #2: 10.0.0.27(R)
+ joined source #3: 10.0.0.26(R)
+ joined source #4: 10.0.0.28(WR)
+ pruned source #1: 10.0.0.29(S)
+ pruned source #2: 10.0.0.31(R)
+ pruned source #3: 10.0.0.30(R)
+ 33 17:13:49.555281 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x1171 (correct), upstream-neighbor: 10.0.0.40
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.15, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.36(WR)
+ joined source #2: 10.0.0.34(R)
+ joined source #3: 10.0.0.35(R)
+ joined source #4: 10.0.0.33(S)
+ pruned source #1: 10.0.0.39(R)
+ pruned source #2: 10.0.0.38(R)
+ pruned source #3: 10.0.0.37(S)
+ group #2: 225.0.0.13, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.36(WR)
+ joined source #2: 10.0.0.34(R)
+ joined source #3: 10.0.0.35(R)
+ joined source #4: 10.0.0.33(S)
+ pruned source #1: 10.0.0.39(R)
+ pruned source #2: 10.0.0.38(R)
+ pruned source #3: 10.0.0.37(S)
+ group #3: 225.0.0.14, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.36(WR)
+ joined source #2: 10.0.0.34(R)
+ joined source #3: 10.0.0.35(R)
+ joined source #4: 10.0.0.33(S)
+ pruned source #1: 10.0.0.39(R)
+ pruned source #2: 10.0.0.38(R)
+ pruned source #3: 10.0.0.37(S)
+ 34 17:14:04.567818 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 238)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x1171 (correct), upstream-neighbor: 10.0.0.40
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.15, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.36(WR)
+ joined source #2: 10.0.0.34(R)
+ joined source #3: 10.0.0.35(R)
+ joined source #4: 10.0.0.33(S)
+ pruned source #1: 10.0.0.39(R)
+ pruned source #2: 10.0.0.38(R)
+ pruned source #3: 10.0.0.37(S)
+ group #2: 225.0.0.13, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.36(WR)
+ joined source #2: 10.0.0.34(R)
+ joined source #3: 10.0.0.35(R)
+ joined source #4: 10.0.0.33(S)
+ pruned source #1: 10.0.0.39(R)
+ pruned source #2: 10.0.0.38(R)
+ pruned source #3: 10.0.0.37(S)
+ group #3: 225.0.0.14, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.36(WR)
+ joined source #2: 10.0.0.34(R)
+ joined source #3: 10.0.0.35(R)
+ joined source #4: 10.0.0.33(S)
+ pruned source #1: 10.0.0.39(R)
+ pruned source #2: 10.0.0.38(R)
+ pruned source #3: 10.0.0.37(S)
+ 35 17:14:19.578882 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 334)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 314
+ Join / Prune, cksum 0x6ad5 (correct), upstream-neighbor: 10.0.0.52
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.16, joined sources: 4, pruned sources: 7
+ joined source #1: 10.0.0.43(R)
+ joined source #2: 10.0.0.41(S)
+ joined source #3: 10.0.0.44(WR)
+ joined source #4: 10.0.0.42(R)
+ pruned source #1: 10.0.0.47(S)
+ pruned source #2: 10.0.0.45(S)
+ pruned source #3: 10.0.0.50(R)
+ pruned source #4: 10.0.0.48(R)
+ pruned source #5: 10.0.0.46(S)
+ pruned source #6: 10.0.0.51(R)
+ pruned source #7: 10.0.0.49(R)
+ group #2: 225.0.0.17, joined sources: 4, pruned sources: 7
+ joined source #1: 10.0.0.43(R)
+ joined source #2: 10.0.0.41(S)
+ joined source #3: 10.0.0.44(WR)
+ joined source #4: 10.0.0.42(R)
+ pruned source #1: 10.0.0.47(S)
+ pruned source #2: 10.0.0.45(S)
+ pruned source #3: 10.0.0.50(R)
+ pruned source #4: 10.0.0.48(R)
+ pruned source #5: 10.0.0.46(S)
+ pruned source #6: 10.0.0.51(R)
+ pruned source #7: 10.0.0.49(R)
+ group #3: 225.0.0.18, joined sources: 4, pruned sources: 7
+ joined source #1: 10.0.0.43(R)
+ joined source #2: 10.0.0.41(S)
+ joined source #3: 10.0.0.44(WR)
+ joined source #4: 10.0.0.42(R)
+ pruned source #1: 10.0.0.47(S)
+ pruned source #2: 10.0.0.45(S)
+ pruned source #3: 10.0.0.50(R)
+ pruned source #4: 10.0.0.48(R)
+ pruned source #5: 10.0.0.46(S)
+ pruned source #6: 10.0.0.51(R)
+ pruned source #7: 10.0.0.49(R)
+ 36 17:14:34.586658 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 262)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 242
+ Join / Prune, cksum 0xd88e (correct), upstream-neighbor: 10.0.0.61
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.19, joined sources: 4, pruned sources: 4
+ joined source #1: 10.0.0.54(R)
+ joined source #2: 10.0.0.56(WR)
+ joined source #3: 10.0.0.55(R)
+ joined source #4: 10.0.0.53(S)
+ pruned source #1: 10.0.0.60(R)
+ pruned source #2: 10.0.0.57(S)
+ pruned source #3: 10.0.0.58(S)
+ pruned source #4: 10.0.0.59(S)
+ group #2: 225.0.0.20, joined sources: 4, pruned sources: 4
+ joined source #1: 10.0.0.54(R)
+ joined source #2: 10.0.0.56(WR)
+ joined source #3: 10.0.0.55(R)
+ joined source #4: 10.0.0.53(S)
+ pruned source #1: 10.0.0.60(R)
+ pruned source #2: 10.0.0.57(S)
+ pruned source #3: 10.0.0.58(S)
+ pruned source #4: 10.0.0.59(S)
+ group #3: 225.0.0.21, joined sources: 4, pruned sources: 4
+ joined source #1: 10.0.0.54(R)
+ joined source #2: 10.0.0.56(WR)
+ joined source #3: 10.0.0.55(R)
+ joined source #4: 10.0.0.53(S)
+ pruned source #1: 10.0.0.60(R)
+ pruned source #2: 10.0.0.57(S)
+ pruned source #3: 10.0.0.58(S)
+ pruned source #4: 10.0.0.59(S)
+ 37 17:14:49.597897 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 334)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 314
+ Join / Prune, cksum 0x67f9 (correct), upstream-neighbor: 10.0.0.73
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.24, joined sources: 4, pruned sources: 7
+ joined source #1: 10.0.0.62(S)
+ joined source #2: 10.0.0.65(WR)
+ joined source #3: 10.0.0.63(R)
+ joined source #4: 10.0.0.64(R)
+ pruned source #1: 10.0.0.72(R)
+ pruned source #2: 10.0.0.66(S)
+ pruned source #3: 10.0.0.70(R)
+ pruned source #4: 10.0.0.69(R)
+ pruned source #5: 10.0.0.71(R)
+ pruned source #6: 10.0.0.67(S)
+ pruned source #7: 10.0.0.68(S)
+ group #2: 225.0.0.23, joined sources: 4, pruned sources: 7
+ joined source #1: 10.0.0.62(S)
+ joined source #2: 10.0.0.65(WR)
+ joined source #3: 10.0.0.63(R)
+ joined source #4: 10.0.0.64(R)
+ pruned source #1: 10.0.0.72(R)
+ pruned source #2: 10.0.0.66(S)
+ pruned source #3: 10.0.0.70(R)
+ pruned source #4: 10.0.0.69(R)
+ pruned source #5: 10.0.0.71(R)
+ pruned source #6: 10.0.0.67(S)
+ pruned source #7: 10.0.0.68(S)
+ group #3: 225.0.0.22, joined sources: 4, pruned sources: 7
+ joined source #1: 10.0.0.62(S)
+ joined source #2: 10.0.0.65(WR)
+ joined source #3: 10.0.0.63(R)
+ joined source #4: 10.0.0.64(R)
+ pruned source #1: 10.0.0.72(R)
+ pruned source #2: 10.0.0.66(S)
+ pruned source #3: 10.0.0.70(R)
+ pruned source #4: 10.0.0.69(R)
+ pruned source #5: 10.0.0.71(R)
+ pruned source #6: 10.0.0.67(S)
+ pruned source #7: 10.0.0.68(S)
+ 38 17:15:04.609866 IP (tos 0xc0, ttl 1, id 33130, offset 0, flags [DF], proto PIM (103), length 238)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x51c5 (correct), upstream-neighbor: 10.0.0.81
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.26(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.76(SR)
+ joined source #2: 10.0.0.75(SR)
+ joined source #3: 10.0.0.74(S)
+ joined source #4: 10.0.0.77(SWR)
+ pruned source #1: 10.0.0.79(SR)
+ pruned source #2: 10.0.0.80(SR)
+ pruned source #3: 10.0.0.78(S)
+ group #2: 225.0.0.25(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.76(SR)
+ joined source #2: 10.0.0.75(SR)
+ joined source #3: 10.0.0.74(S)
+ joined source #4: 10.0.0.77(SWR)
+ pruned source #1: 10.0.0.79(SR)
+ pruned source #2: 10.0.0.80(SR)
+ pruned source #3: 10.0.0.78(S)
+ group #3: 225.0.0.27(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.76(SR)
+ joined source #2: 10.0.0.75(SR)
+ joined source #3: 10.0.0.74(S)
+ joined source #4: 10.0.0.77(SWR)
+ pruned source #1: 10.0.0.79(SR)
+ pruned source #2: 10.0.0.80(SR)
+ pruned source #3: 10.0.0.78(S)
+ 39 17:15:04.615696 IP (tos 0xc0, ttl 1, id 33132, offset 0, flags [DF], proto PIM (103), length 238)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0x51c5 (correct), upstream-neighbor: 10.0.0.81
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.26(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.76(SR)
+ joined source #2: 10.0.0.75(SR)
+ joined source #3: 10.0.0.74(S)
+ joined source #4: 10.0.0.77(SWR)
+ pruned source #1: 10.0.0.79(SR)
+ pruned source #2: 10.0.0.80(SR)
+ pruned source #3: 10.0.0.78(S)
+ group #2: 225.0.0.25(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.76(SR)
+ joined source #2: 10.0.0.75(SR)
+ joined source #3: 10.0.0.74(S)
+ joined source #4: 10.0.0.77(SWR)
+ pruned source #1: 10.0.0.79(SR)
+ pruned source #2: 10.0.0.80(SR)
+ pruned source #3: 10.0.0.78(S)
+ group #3: 225.0.0.27(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.76(SR)
+ joined source #2: 10.0.0.75(SR)
+ joined source #3: 10.0.0.74(S)
+ joined source #4: 10.0.0.77(SWR)
+ pruned source #1: 10.0.0.79(SR)
+ pruned source #2: 10.0.0.80(SR)
+ pruned source #3: 10.0.0.78(S)
+ 40 17:15:24.642963 IP (tos 0xc0, ttl 1, id 35347, offset 0, flags [DF], proto PIM (103), length 238)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0xcf9b (correct), upstream-neighbor: 10.0.0.105
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.36, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.99(SR)
+ joined source #2: 10.0.0.100(SR)
+ joined source #3: 10.0.0.98(S)
+ joined source #4: 10.0.0.101(SWR)
+ pruned source #1: 10.0.0.103(SR)
+ pruned source #2: 10.0.0.104(SR)
+ pruned source #3: 10.0.0.102(S)
+ group #2: 225.0.0.35, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.99(SR)
+ joined source #2: 10.0.0.100(SR)
+ joined source #3: 10.0.0.98(S)
+ joined source #4: 10.0.0.101(SWR)
+ pruned source #1: 10.0.0.103(SR)
+ pruned source #2: 10.0.0.104(SR)
+ pruned source #3: 10.0.0.102(S)
+ group #3: 225.0.0.34, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.99(SR)
+ joined source #2: 10.0.0.100(SR)
+ joined source #3: 10.0.0.98(S)
+ joined source #4: 10.0.0.101(SWR)
+ pruned source #1: 10.0.0.103(SR)
+ pruned source #2: 10.0.0.104(SR)
+ pruned source #3: 10.0.0.102(S)
+ 41 17:15:24.649511 IP (tos 0xc0, ttl 1, id 35349, offset 0, flags [DF], proto PIM (103), length 238)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 218
+ Join / Prune, cksum 0xcf9b (correct), upstream-neighbor: 10.0.0.105
+ 3 group(s), holdtime: 45s
+ group #1: 225.0.0.36, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.99(SR)
+ joined source #2: 10.0.0.100(SR)
+ joined source #3: 10.0.0.98(S)
+ joined source #4: 10.0.0.101(SWR)
+ pruned source #1: 10.0.0.103(SR)
+ pruned source #2: 10.0.0.104(SR)
+ pruned source #3: 10.0.0.102(S)
+ group #2: 225.0.0.35, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.99(SR)
+ joined source #2: 10.0.0.100(SR)
+ joined source #3: 10.0.0.98(S)
+ joined source #4: 10.0.0.101(SWR)
+ pruned source #1: 10.0.0.103(SR)
+ pruned source #2: 10.0.0.104(SR)
+ pruned source #3: 10.0.0.102(S)
+ group #3: 225.0.0.34, joined sources: 4, pruned sources: 3
+ joined source #1: 10.0.0.99(SR)
+ joined source #2: 10.0.0.100(SR)
+ joined source #3: 10.0.0.98(S)
+ joined source #4: 10.0.0.101(SWR)
+ pruned source #1: 10.0.0.103(SR)
+ pruned source #2: 10.0.0.104(SR)
+ pruned source #3: 10.0.0.102(S)
+ 42 17:15:36.844192 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xeddc (correct) group=225.0.0.1 src=10.0.0.1 pref=0 metric=0
+ 43 17:15:36.858926 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xeddc (correct) group=225.0.0.1 src=10.0.0.1 pref=0 metric=0
+ 44 17:15:36.875457 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xedda (correct) group=225.0.0.2 src=10.0.0.2 pref=0 metric=0
+ 45 17:15:51.885935 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xedda (correct) group=225.0.0.2 src=10.0.0.2 pref=0 metric=0
+ 46 17:16:06.895682 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 26
+ Assert, cksum 0xedd8 (correct) group=225.0.0.3 src=10.0.0.3 pref=0 metric=0
+ 47 17:16:21.901980 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xedd6 (correct) group=225.0.0.4 src=10.0.0.4 pref=0 metric=0
+ 48 17:16:36.912545 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 46)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 26
+ Assert, cksum 0xedd4 (correct) group=225.0.0.5 src=10.0.0.5 pref=0 metric=0
+ 49 17:16:51.922176 IP (tos 0xc0, ttl 1, id 46328, offset 0, flags [DF], proto PIM (103), length 46)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xedd2 (correct) group=225.0.0.6 src=10.0.0.6 pref=0 metric=0
+ 50 17:16:51.927014 IP (tos 0xc0, ttl 1, id 46329, offset 0, flags [DF], proto PIM (103), length 46)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 26
+ Assert, cksum 0xedd2 (correct) group=225.0.0.6 src=10.0.0.6 pref=0 metric=0
+ 51 17:17:04.134866 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.1 > 225.0.0.1: [|pim]
+ 52 17:17:04.152086 IP (tos 0x1,ECT(1), ttl 10, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.1 > 225.0.0.1: [|pim]
+ 53 17:17:04.168215 IP (tos 0x4, ttl 30, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.1 > 225.0.0.1: [|pim]
+ 54 17:17:04.184607 IP (tos 0x7,CE, ttl 63, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.1 > 225.0.0.1: [|pim]
+ 55 17:17:04.203347 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 1400)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 1380
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1372)
+ 10.0.0.2.2468 > 225.0.0.2.2468: [udp sum ok] UDP, length 1344
+ 56 17:17:04.222232 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 1500)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 1480
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1472)
+ 10.0.0.3.2468 > 225.0.0.3.2468: [udp sum ok] UDP, length 1444
+ 57 17:17:04.241206 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 32000)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 31980
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 31972)
+ 10.0.0.4.2468 > 225.0.0.4.2468: [udp sum ok] UDP, length 31944
+ 58 17:17:04.260981 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 65535)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 65515
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 65507)
+ 10.0.0.5.2468 > 225.0.0.5.2468: UDP, length 65479
+ 59 17:17:04.279594 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.6 > 225.0.0.6: [|pim]
+ 60 17:17:04.297659 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.6 > 225.0.0.6: [|pim]
+ 61 17:17:04.314768 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.7 > 225.0.0.7: [|pim]
+ 62 17:17:19.324443 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 48)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.8 > 225.0.0.8: [|pim]
+ 63 17:17:34.361348 IP (tos 0x1,ECT(1), ttl 255, id 739, offset 0, flags [DF], proto PIM (103), length 156)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 136
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 128)
+ 10.0.0.9.2468 > 225.0.0.9.2468: [udp sum ok] UDP, length 100
+ 64 17:17:34.370054 IP (tos 0x2,ECT(0), ttl 1, id 51552, offset 0, flags [DF], proto PIM (103), length 156)
+ 10.0.0.10 > 10.0.0.2: PIMv2, length 136
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 128)
+ 10.0.0.9.2468 > 225.0.0.9.2468: [udp sum ok] UDP, length 100
+ 65 17:17:34.379510 IP (tos 0x4, ttl 10, id 744, offset 0, flags [DF], proto PIM (103), length 156)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 136
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 128)
+ 10.0.0.9.2468 > 225.0.0.9.2468: [udp sum ok] UDP, length 100
+ 66 17:17:34.387689 IP (tos 0x5,ECT(1), ttl 200, id 746, offset 0, flags [DF], proto PIM (103), length 156)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 136
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 128)
+ 10.0.0.9.2468 > 225.0.0.9.2468: [udp sum ok] UDP, length 100
+ 67 17:17:34.395915 IP (tos 0x7,CE, ttl 20, id 747, offset 0, flags [DF], proto PIM (103), length 156)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 136
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 128)
+ 10.0.0.9.2468 > 225.0.0.9.2468: [udp sum ok] UDP, length 100
+ 68 17:17:34.474538 IP (tos 0xc0, ttl 255, id 759, offset 0, flags [DF], proto PIM (103), length 48)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.11 > 225.0.0.10: [|pim]
+ 69 17:17:34.496073 IP (tos 0x0, ttl 10, id 762, offset 0, flags [DF], proto PIM (103), length 1300)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 1280
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1272)
+ 10.0.0.12.2468 > 225.0.0.11.2468: [udp sum ok] UDP, length 1244
+ 70 17:17:34.505618 IP (tos 0x0, ttl 10, id 764, offset 0, flags [DF], proto PIM (103), length 1400)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 1380
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1372)
+ 10.0.0.13.2468 > 225.0.0.12.2468: [udp sum ok] UDP, length 1344
+ 71 17:17:34.517256 IP (tos 0x0, ttl 10, id 766, offset 0, flags [none], proto PIM (103), length 1500)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 1480
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1472)
+ 10.0.0.14.2468 > 225.0.0.13.2468: [udp sum ok] UDP, length 1444
+ 72 17:17:34.547489 IP (tos 0x0, ttl 10, id 769, offset 0, flags [DF], proto PIM (103), length 1400)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 1380
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1372)
+ 10.0.0.15.2468 > 225.0.0.14.2468: [udp sum ok] UDP, length 1344
+ 73 17:17:34.556376 IP (tos 0x0, ttl 10, id 772, offset 0, flags [DF], proto PIM (103), length 1500)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 1480
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1472)
+ 10.0.0.16.2468 > 225.0.0.15.2468: [udp sum ok] UDP, length 1444
+ 74 17:17:34.566673 IP (tos 0x0, ttl 10, id 774, offset 0, flags [none], proto PIM (103), length 1600)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 1580
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 1572)
+ 10.0.0.17.2468 > 225.0.0.16.2468: [udp sum ok] UDP, length 1544
+ 75 17:17:34.595128 IP (tos 0x0, ttl 10, id 775, offset 0, flags [DF], proto PIM (103), length 9800)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 9780
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 9772)
+ 10.0.0.18.2468 > 225.0.0.17.2468: [udp sum ok] UDP, length 9744
+ 76 17:17:34.604864 IP (tos 0x0, ttl 10, id 776, offset 0, flags [DF], proto PIM (103), length 9900)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 9880
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 9872)
+ 10.0.0.19.2468 > 225.0.0.18.2468: [udp sum ok] UDP, length 9844
+ 77 17:17:34.616241 IP (tos 0x0, ttl 10, id 778, offset 0, flags [none], proto PIM (103), length 10000)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 9980
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto UDP (17), length 9972)
+ 10.0.0.20.2468 > 225.0.0.19.2468: [udp sum ok] UDP, length 9944
+ 78 17:17:34.642771 IP (tos 0xc0, ttl 255, id 779, offset 0, flags [DF], proto PIM (103), length 48)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 28
+ Register, cksum 0x9eff (correct), Flags [ Null ]
+ IP (tos 0x0, ttl 1, id 1, offset 0, flags [DF], proto PIM (103), length 20)
+ 10.0.0.21 > 225.0.0.20: [|pim]
+ 79 17:17:41.832778 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 18
+ Register Stop, cksum 0xf0dc (correct) group=225.0.0.1 source=10.0.0.1
+ 80 17:17:41.848183 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 18
+ Register Stop, cksum 0xf0dc (correct) group=225.0.0.1 source=10.0.0.1
+ 81 17:17:41.863647 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 18
+ Register Stop, cksum 0xf0da (correct) group=225.0.0.2 source=10.0.0.2
+ 82 17:17:41.879212 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 18
+ Register Stop, cksum 0xf0da (correct) group=225.0.0.2 source=10.0.0.2
+ 83 17:17:41.894033 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ Register Stop, cksum 0xf0d8 (correct) group=225.0.0.3 source=10.0.0.3
+ 84 17:17:56.904772 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ Register Stop, cksum 0xf0d6 (correct) group=225.0.0.4 source=10.0.0.4
+ 85 17:18:11.915223 IP (tos 0xc0, ttl 255, id 6730, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 18
+ Register Stop, cksum 0xf0d4 (correct) group=225.0.0.5 source=10.0.0.5
+ 86 17:18:11.920116 IP (tos 0xc0, ttl 255, id 6731, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 18
+ Register Stop, cksum 0xf0d4 (correct) group=225.0.0.5 source=10.0.0.5
+ 87 17:18:11.924496 IP (tos 0xc0, ttl 255, id 6732, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 18
+ Register Stop, cksum 0xf0d4 (correct) group=225.0.0.5 source=10.0.0.5
+ 88 17:18:11.929456 IP (tos 0xc0, ttl 255, id 6733, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 10.0.0.2: PIMv2, length 18
+ Register Stop, cksum 0xf0d2 (correct) group=225.0.0.6 source=10.0.0.6
+ 89 17:18:19.135202 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca80 (correct)
+ Offer, rpa=10.0.0.1 sender pref=100 sender metric=10
+ 90 17:18:19.151462 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca80 (correct)
+ Offer, rpa=10.0.0.1 sender pref=100 sender metric=10
+ 91 17:18:19.167261 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca6f (correct)
+ Winner, rpa=10.0.0.2 sender pref=100 sender metric=10
+ 92 17:18:19.183508 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca6f (correct)
+ Winner, rpa=10.0.0.2 sender pref=100 sender metric=10
+ 93 17:18:19.199269 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ DF Election, cksum 0x6d52 (correct)
+ Backoff, rpa=10.0.0.3 sender pref=100 sender metric=10
+ offer addr=10.0.0.4 offer pref=1000 offer metric=10000 interval 10000ms
+ 94 17:18:19.215274 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ DF Election, cksum 0x6d52 (correct)
+ Backoff, rpa=10.0.0.3 sender pref=100 sender metric=10
+ offer addr=10.0.0.4 offer pref=1000 offer metric=10000 interval 10000ms
+ 95 17:18:19.231330 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 52)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 32
+ DF Election, cksum 0x944e (correct)
+ Pass, rpa=10.0.0.5 sender pref=100 sender metric=10
+ new winner addr=10.0.0.6 new winner pref=1000 new winner metric=10000
+ 96 17:18:19.247063 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 52)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 32
+ DF Election, cksum 0x944e (correct)
+ Pass, rpa=10.0.0.5 sender pref=100 sender metric=10
+ new winner addr=10.0.0.6 new winner pref=1000 new winner metric=10000
+ 97 17:18:19.263010 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca7a (correct)
+ Offer, rpa=10.0.0.7 sender pref=100 sender metric=10
+ 98 17:18:34.278440 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca7a (correct)
+ Offer, rpa=10.0.0.7 sender pref=100 sender metric=10
+ 99 17:18:49.292244 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 18
+ DF Election, cksum 0xca79 (correct)
+ Offer, rpa=10.0.0.8 sender pref=100 sender metric=10
+ 100 17:19:04.301082 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca78 (correct)
+ Offer, rpa=10.0.0.9 sender pref=100 sender metric=10
+ 101 17:19:19.311519 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 38)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 18
+ DF Election, cksum 0xca77 (correct)
+ Offer, rpa=10.0.0.10 sender pref=100 sender metric=10
+ 102 17:19:34.317677 IP (tos 0xc0, ttl 1, id 53314, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca76 (correct)
+ Offer, rpa=10.0.0.11 sender pref=100 sender metric=10
+ 103 17:19:34.323132 IP (tos 0xc0, ttl 1, id 53315, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca76 (correct)
+ Offer, rpa=10.0.0.11 sender pref=100 sender metric=10
+ 104 17:19:34.328241 IP (tos 0xc0, ttl 1, id 53317, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca65 (correct)
+ Winner, rpa=10.0.0.12 sender pref=100 sender metric=10
+ 105 17:19:34.333292 IP (tos 0xc0, ttl 1, id 53318, offset 0, flags [DF], proto PIM (103), length 38)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 18
+ DF Election, cksum 0xca65 (correct)
+ Winner, rpa=10.0.0.12 sender pref=100 sender metric=10
+ 106 17:19:34.338277 IP (tos 0xc0, ttl 1, id 53319, offset 0, flags [DF], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ DF Election, cksum 0x6d3e (correct)
+ Backoff, rpa=10.0.0.13 sender pref=100 sender metric=10
+ offer addr=10.0.0.14 offer pref=1000 offer metric=10000 interval 10000ms
+ 107 17:19:34.345622 IP (tos 0xc0, ttl 1, id 53320, offset 0, flags [DF], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ DF Election, cksum 0x6d3e (correct)
+ Backoff, rpa=10.0.0.13 sender pref=100 sender metric=10
+ offer addr=10.0.0.14 offer pref=1000 offer metric=10000 interval 10000ms
+ 108 17:19:34.350734 IP (tos 0xc0, ttl 1, id 53321, offset 0, flags [DF], proto PIM (103), length 52)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 32
+ DF Election, cksum 0x943a (correct)
+ Pass, rpa=10.0.0.15 sender pref=100 sender metric=10
+ new winner addr=10.0.0.16 new winner pref=1000 new winner metric=10000
+ 109 17:19:34.355785 IP (tos 0xc0, ttl 1, id 53323, offset 0, flags [DF], proto PIM (103), length 52)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 32
+ DF Election, cksum 0x943a (correct)
+ Pass, rpa=10.0.0.15 sender pref=100 sender metric=10
+ new winner addr=10.0.0.16 new winner pref=1000 new winner metric=10000
+ 110 17:19:46.562048 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 24)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 4
+ Graft, cksum 0xd9ff (correct), upstream-neighbor: [|pimv2]
+ 111 17:20:08.767127 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 74)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 54
+ Hello, cksum 0xc62e (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 12, Value:
+ 10.0.0.1
+ 10.0.0.2
+ 0x0000: 0100 0a00 0001 0100 0a00 0002
+ 112 17:20:08.785732 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 12, Value:
+ 10.0.0.1
+ 10.0.0.2
+ 0x0000: 0100 0a00 0001 0100 0a00 0002
+ 113 17:20:08.801265 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 12, Value:
+ 10.0.0.1
+ 10.0.0.2
+ 0x0000: 0100 0a00 0001 0100 0a00 0002
+ 114 17:20:08.815202 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 74)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 54
+ Hello, cksum 0xc62e (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 12, Value:
+ 10.0.0.1
+ 10.0.0.2
+ 0x0000: 0100 0a00 0001 0100 0a00 0002
+ 115 17:20:08.829259 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 74)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 54
+ Hello, cksum 0xc62e (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 12, Value:
+ 10.0.0.1
+ 10.0.0.2
+ 0x0000: 0100 0a00 0001 0100 0a00 0002
+ 116 17:20:08.843547 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 12, Value:
+ 10.0.0.1
+ 10.0.0.2
+ 0x0000: 0100 0a00 0001 0100 0a00 0002
+ 117 17:20:08.857616 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 74)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 54
+ Hello, cksum 0xc62e (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 12, Value:
+ 10.0.0.1
+ 10.0.0.2
+ 0x0000: 0100 0a00 0001 0100 0a00 0002
+ 118 17:20:08.871960 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 12, Value:
+ 10.0.0.1
+ 10.0.0.2
+ 0x0000: 0100 0a00 0001 0100 0a00 0002
+ 119 17:20:08.885812 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 12, Value:
+ 10.0.0.1
+ 10.0.0.2
+ 0x0000: 0100 0a00 0001 0100 0a00 0002
+ 120 17:20:08.899908 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 12, Value:
+ 10.0.0.1
+ 10.0.0.2
+ 0x0000: 0100 0a00 0001 0100 0a00 0002
+ 121 17:20:08.913880 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc644 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 12, Value:
+ 10.0.0.1
+ 10.0.0.2
+ 0x0000: 0100 0a00 0001 0100 0a00 0002
+ 122 17:20:08.928954 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc640 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 12, Value:
+ 10.0.0.3
+ 10.0.0.4
+ 0x0000: 0100 0a00 0003 0100 0a00 0004
+ 123 17:20:23.938011 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 70)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc640 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 12, Value:
+ 10.0.0.3
+ 10.0.0.4
+ 0x0000: 0100 0a00 0003 0100 0a00 0004
+ 124 17:20:38.945661 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 34
+ Hello, cksum 0xdc6b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ 125 17:20:53.953435 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 10.0.0.1: PIMv2, length 34
+ Hello, cksum 0xdc6b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ 126 17:21:08.961835 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto PIM (103), length 74)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 54
+ Hello, cksum 0xc626 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 12, Value:
+ 10.0.0.6
+ 10.0.0.5
+ 0x0000: 0100 0a00 0006 0100 0a00 0005
+ 127 17:21:08.966281 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto PIM (103), length 74)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 54
+ Hello, cksum 0xc626 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 12, Value:
+ 10.0.0.6
+ 10.0.0.5
+ 0x0000: 0100 0a00 0006 0100 0a00 0005
+ 128 17:21:08.970800 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto PIM (103), length 70)
+ 10.0.0.7 > 224.0.0.13: PIMv2, length 50
+ Hello, cksum 0xc636 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 12, Value:
+ 10.0.0.9
+ 10.0.0.8
+ 0x0000: 0100 0a00 0009 0100 0a00 0008
+ 129 17:21:21.305747 IP6 (hlim 64, next-header PIM (103) payload length: 26) 10::2 > ff02::d: PIMv2, length 26
+ Bootstrap, cksum 0xbc73 (correct) tag=5f hashmlen=29 BSRprio=7 BSR=1::2
+ 130 17:21:36.317463 IP6 (hlim 64, next-header PIM (103) payload length: 26) 10::2 > ff02::d: PIMv2, length 26
+ Bootstrap, cksum 0xbc73 (correct) tag=5f hashmlen=29 BSRprio=7 BSR=1::2
+ 131 17:21:51.327358 IP6 (hlim 64, next-header PIM (103) payload length: 26) 10::2 > ff02::d: PIMv2, length 26
+ Bootstrap, cksum 0xc1d1 (correct) tag=195 hashmlen=22 BSRprio=114 BSR=1::3
+ 132 17:21:51.342877 IP6 (hlim 64, next-header PIM (103) payload length: 26) 10::2 > ff02::d: PIMv2, length 26
+ Bootstrap, cksum 0xcd68 (correct) tag=133 hashmlen=11 BSRprio=60 BSR=1::4
+ 133 17:21:51.359070 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > ff02::d: PIMv2, length 50
+ Bootstrap, cksum 0xbe23 (correct) tag=116 hashmlen=25 BSRprio=1 BSR=1::5 (group0: ff02::1 RPcnt=0 FRPcnt=0)
+ 134 17:21:51.375173 IP6 (hlim 64, next-header PIM (103) payload length: 118) 10::2 > ff02::d: PIMv2, length 118
+ Bootstrap, cksum 0x9791 (correct) tag=1e9 hashmlen=16 BSRprio=59 BSR=1::8 (group0: ff02::2(0x01) RPcnt=1 FRPcnt=1 RP0=1::6,holdtime=1m15s,prio=64) (group1: ff02::3 RPcnt=1 FRPcnt=1 RP0=1::7,holdtime=1m30s,prio=229)
+ 135 17:21:51.389973 IP6 (hlim 64, next-header PIM (103) payload length: 26) 10::2 > 10::1: PIMv2, length 26
+ Bootstrap, cksum 0xbadd (correct) tag=9e hashmlen=29 BSRprio=86 BSR=1::9
+ 136 17:22:06.397655 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 26) 10::1 > ff02::d: PIMv2, length 26
+ Bootstrap, cksum 0xcdee (correct) tag=6c hashmlen=11 BSRprio=120 BSR=1::a
+ 137 17:22:06.401467 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 26) 10::1 > ff02::d: PIMv2, length 26
+ Bootstrap, cksum 0xd0dc (correct) tag=75 hashmlen=8 BSRprio=128 BSR=1::b
+ 138 17:22:06.405175 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 50) 10::1 > ff02::d: PIMv2, length 50
+ Bootstrap, cksum 0xcfd8 (correct) tag=1f9 hashmlen=6 BSRprio=96 BSR=1::c (group0: ff02::4 RPcnt=0 FRPcnt=0)
+ 139 17:22:06.409793 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 118) 10::1 > ff02::d: PIMv2, length 118
+ Bootstrap, cksum 0x773d (correct) tag=110 hashmlen=18 BSRprio=218 BSR=1::f (group0: ff02::5(0x01) RPcnt=1 FRPcnt=1 RP0=1::d,holdtime=1m52s,prio=205) (group1: ff02::6 RPcnt=1 FRPcnt=1 RP0=1::e,holdtime=2m49s,prio=118)
+ 140 17:22:28.670554 IP6 (hlim 64, next-header PIM (103) payload length: 46) 10::2 > 10::1: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xce65 (correct) prefix-cnt=1 prio=73 holdtime=13m6s RP=1::2 Group0=ff02::1(0x01)
+ 141 17:22:28.686085 IP6 (hlim 64, next-header PIM (103) payload length: 46) 10::2 > 10::1: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xcedd (correct) prefix-cnt=1 prio=152 holdtime=14m1s RP=1::3 Group0=ff02::2
+ 142 17:22:28.701051 IP6 (hlim 64, next-header PIM (103) payload length: 66) 10::2 > 10::1: PIMv2, length 66
+ Candidate RP Advertisement, cksum 0xcd13 (correct) prefix-cnt=2 prio=131 holdtime=10m51s RP=1::4 Group0=ff02::3 Group1=ff02::4
+ 143 17:22:28.716663 IP6 (hlim 64, next-header PIM (103) payload length: 46) 10::2 > 10::1: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xcfa4 (correct) prefix-cnt=1 prio=75 holdtime=7m38s RP=1::5 Group0=ff02::5(0x01)
+ 144 17:22:28.732342 IP6 (hlim 64, next-header PIM (103) payload length: 46) 10::2 > 10::1: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xcfa4 (correct) prefix-cnt=1 prio=75 holdtime=7m38s RP=1::5 Group0=ff02::5(0x01)
+ 145 17:22:28.747319 IP6 (hlim 64, next-header PIM (103) payload length: 46) 10::2 > ff02::d: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xd0bf (correct) prefix-cnt=1 prio=211 holdtime=4m54s RP=1::6 Group0=ff02::6(0x01)
+ 146 17:22:43.754936 IP6 (hlim 64, next-header PIM (103) payload length: 226) 10::2 > 10::1: PIMv2, length 226
+ Candidate RP Advertisement, cksum 0xb46b (correct) prefix-cnt=2 prio=242 holdtime=15m25s RP=1::7 Group0=ff02::7(0x01) Group1=ff02::8(0x01)
+ 147 17:22:58.764755 IP6 (hlim 64, next-header PIM (103) payload length: 46) 10::2 > ff02::d: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xce10 (correct) prefix-cnt=1 prio=189 holdtime=16m30s RP=1::8 Group0=ff02::11(0x01)
+ 148 17:23:13.771504 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 46) 10::1 > 10::2: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xccca (correct) prefix-cnt=1 prio=233 holdtime=16m53s RP=1::9 Group0=ff02::12(0x01)
+ 149 17:23:13.775525 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 46) 10::1 > 10::2: PIMv2, length 46
+ Candidate RP Advertisement, cksum 0xcf2c (correct) prefix-cnt=1 prio=48 holdtime=14m2s RP=1::a Group0=ff02::13
+ 150 17:23:13.779819 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 66) 10::1 > 10::2: PIMv2, length 66
+ Candidate RP Advertisement, cksum 0xceda (correct) prefix-cnt=2 prio=113 holdtime=2m53s RP=1::b Group0=ff02::15 Group1=ff02::14
+ 151 17:23:13.784515 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 66) 10::1 > 10::2: PIMv2, length 66
+ Candidate RP Advertisement, cksum 0xcca8 (incorrect) prefix-cnt=2 prio=49 holdtime=13m31s RP=1::c Group0=ff02::17 Group1=ff02::16
+ 152 17:23:26.044171 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0xf292 (correct), upstream-neighbor: 1::9
+ 3 group(s), holdtime: 45s
+ group #1: ff02::3(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::5(WR)
+ joined source #2: 1::3(R)
+ joined source #3: 1::2(S)
+ joined source #4: 1::4(R)
+ pruned source #1: 1::8(R)
+ pruned source #2: 1::7(R)
+ pruned source #3: 1::6(S)
+ group #2: ff02::2(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::5(WR)
+ joined source #2: 1::3(R)
+ joined source #3: 1::2(S)
+ joined source #4: 1::4(R)
+ pruned source #1: 1::8(R)
+ pruned source #2: 1::7(R)
+ pruned source #3: 1::6(S)
+ group #3: ff02::1(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::5(WR)
+ joined source #2: 1::3(R)
+ joined source #3: 1::2(S)
+ joined source #4: 1::4(R)
+ pruned source #1: 1::8(R)
+ pruned source #2: 1::7(R)
+ pruned source #3: 1::6(S)
+ 153 17:23:26.059514 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0xf292 (correct), upstream-neighbor: 1::9
+ 3 group(s), holdtime: 45s
+ group #1: ff02::3(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::5(WR)
+ joined source #2: 1::3(R)
+ joined source #3: 1::2(S)
+ joined source #4: 1::4(R)
+ pruned source #1: 1::8(R)
+ pruned source #2: 1::7(R)
+ pruned source #3: 1::6(S)
+ group #2: ff02::2(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::5(WR)
+ joined source #2: 1::3(R)
+ joined source #3: 1::2(S)
+ joined source #4: 1::4(R)
+ pruned source #1: 1::8(R)
+ pruned source #2: 1::7(R)
+ pruned source #3: 1::6(S)
+ group #3: ff02::1(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::5(WR)
+ joined source #2: 1::3(R)
+ joined source #3: 1::2(S)
+ joined source #4: 1::4(R)
+ pruned source #1: 1::8(R)
+ pruned source #2: 1::7(R)
+ pruned source #3: 1::6(S)
+ 154 17:23:26.075326 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0xf1d9 (correct), upstream-neighbor: 1::11
+ 3 group(s), holdtime: 45s
+ group #1: ff02::6(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::c(R)
+ joined source #2: 1::a(S)
+ joined source #3: 1::b(R)
+ joined source #4: 1::d(WR)
+ pruned source #1: 1::e(S)
+ pruned source #2: 1::10(R)
+ pruned source #3: 1::f(R)
+ group #2: ff02::5(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::c(R)
+ joined source #2: 1::a(S)
+ joined source #3: 1::b(R)
+ joined source #4: 1::d(WR)
+ pruned source #1: 1::e(S)
+ pruned source #2: 1::10(R)
+ pruned source #3: 1::f(R)
+ group #3: ff02::4(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::c(R)
+ joined source #2: 1::a(S)
+ joined source #3: 1::b(R)
+ joined source #4: 1::d(WR)
+ pruned source #1: 1::e(S)
+ pruned source #2: 1::10(R)
+ pruned source #3: 1::f(R)
+ 155 17:23:41.083345 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0xf1d9 (correct), upstream-neighbor: 1::11
+ 3 group(s), holdtime: 45s
+ group #1: ff02::6(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::c(R)
+ joined source #2: 1::a(S)
+ joined source #3: 1::b(R)
+ joined source #4: 1::d(WR)
+ pruned source #1: 1::e(S)
+ pruned source #2: 1::10(R)
+ pruned source #3: 1::f(R)
+ group #2: ff02::5(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::c(R)
+ joined source #2: 1::a(S)
+ joined source #3: 1::b(R)
+ joined source #4: 1::d(WR)
+ pruned source #1: 1::e(S)
+ pruned source #2: 1::10(R)
+ pruned source #3: 1::f(R)
+ group #3: ff02::4(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::c(R)
+ joined source #2: 1::a(S)
+ joined source #3: 1::b(R)
+ joined source #4: 1::d(WR)
+ pruned source #1: 1::e(S)
+ pruned source #2: 1::10(R)
+ pruned source #3: 1::f(R)
+ 156 17:23:56.095440 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x7122 (correct), upstream-neighbor: 1::19
+ 3 group(s), holdtime: 45s
+ group #1: ff02::7, joined sources: 4, pruned sources: 3
+ joined source #1: 1::15(WR)
+ joined source #2: 1::13(R)
+ joined source #3: 1::14(R)
+ joined source #4: 1::12(S)
+ pruned source #1: 1::18(R)
+ pruned source #2: 1::17(R)
+ pruned source #3: 1::16(S)
+ group #2: ff02::9, joined sources: 4, pruned sources: 3
+ joined source #1: 1::15(WR)
+ joined source #2: 1::13(R)
+ joined source #3: 1::14(R)
+ joined source #4: 1::12(S)
+ pruned source #1: 1::18(R)
+ pruned source #2: 1::17(R)
+ pruned source #3: 1::16(S)
+ group #3: ff02::8, joined sources: 4, pruned sources: 3
+ joined source #1: 1::15(WR)
+ joined source #2: 1::13(R)
+ joined source #3: 1::14(R)
+ joined source #4: 1::12(S)
+ pruned source #1: 1::18(R)
+ pruned source #2: 1::17(R)
+ pruned source #3: 1::16(S)
+ 157 17:24:11.103070 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x7122 (correct), upstream-neighbor: 1::19
+ 3 group(s), holdtime: 45s
+ group #1: ff02::7, joined sources: 4, pruned sources: 3
+ joined source #1: 1::15(WR)
+ joined source #2: 1::13(R)
+ joined source #3: 1::14(R)
+ joined source #4: 1::12(S)
+ pruned source #1: 1::18(R)
+ pruned source #2: 1::17(R)
+ pruned source #3: 1::16(S)
+ group #2: ff02::9, joined sources: 4, pruned sources: 3
+ joined source #1: 1::15(WR)
+ joined source #2: 1::13(R)
+ joined source #3: 1::14(R)
+ joined source #4: 1::12(S)
+ pruned source #1: 1::18(R)
+ pruned source #2: 1::17(R)
+ pruned source #3: 1::16(S)
+ group #3: ff02::8, joined sources: 4, pruned sources: 3
+ joined source #1: 1::15(WR)
+ joined source #2: 1::13(R)
+ joined source #3: 1::14(R)
+ joined source #4: 1::12(S)
+ pruned source #1: 1::18(R)
+ pruned source #2: 1::17(R)
+ pruned source #3: 1::16(S)
+ 158 17:24:26.112599 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x7069 (correct), upstream-neighbor: 1::21
+ 3 group(s), holdtime: 45s
+ group #1: ff02::c, joined sources: 4, pruned sources: 3
+ joined source #1: 1::1c(R)
+ joined source #2: 1::1d(WR)
+ joined source #3: 1::1a(S)
+ joined source #4: 1::1b(R)
+ pruned source #1: 1::1e(S)
+ pruned source #2: 1::20(R)
+ pruned source #3: 1::1f(R)
+ group #2: ff02::b, joined sources: 4, pruned sources: 3
+ joined source #1: 1::1c(R)
+ joined source #2: 1::1d(WR)
+ joined source #3: 1::1a(S)
+ joined source #4: 1::1b(R)
+ pruned source #1: 1::1e(S)
+ pruned source #2: 1::20(R)
+ pruned source #3: 1::1f(R)
+ group #3: ff02::a, joined sources: 4, pruned sources: 3
+ joined source #1: 1::1c(R)
+ joined source #2: 1::1d(WR)
+ joined source #3: 1::1a(S)
+ joined source #4: 1::1b(R)
+ pruned source #1: 1::1e(S)
+ pruned source #2: 1::20(R)
+ pruned source #3: 1::1f(R)
+ 159 17:24:26.128184 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x7069 (correct), upstream-neighbor: 1::21
+ 3 group(s), holdtime: 45s
+ group #1: ff02::c, joined sources: 4, pruned sources: 3
+ joined source #1: 1::1c(R)
+ joined source #2: 1::1d(WR)
+ joined source #3: 1::1a(S)
+ joined source #4: 1::1b(R)
+ pruned source #1: 1::1e(S)
+ pruned source #2: 1::20(R)
+ pruned source #3: 1::1f(R)
+ group #2: ff02::b, joined sources: 4, pruned sources: 3
+ joined source #1: 1::1c(R)
+ joined source #2: 1::1d(WR)
+ joined source #3: 1::1a(S)
+ joined source #4: 1::1b(R)
+ pruned source #1: 1::1e(S)
+ pruned source #2: 1::20(R)
+ pruned source #3: 1::1f(R)
+ group #3: ff02::a, joined sources: 4, pruned sources: 3
+ joined source #1: 1::1c(R)
+ joined source #2: 1::1d(WR)
+ joined source #3: 1::1a(S)
+ joined source #4: 1::1b(R)
+ pruned source #1: 1::1e(S)
+ pruned source #2: 1::20(R)
+ pruned source #3: 1::1f(R)
+ 160 17:24:26.144272 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x6fb0 (correct), upstream-neighbor: 1::29
+ 3 group(s), holdtime: 45s
+ group #1: ff02::f, joined sources: 4, pruned sources: 3
+ joined source #1: 1::25(WR)
+ joined source #2: 1::23(R)
+ joined source #3: 1::22(S)
+ joined source #4: 1::24(R)
+ pruned source #1: 1::28(R)
+ pruned source #2: 1::26(S)
+ pruned source #3: 1::27(R)
+ group #2: ff02::e, joined sources: 4, pruned sources: 3
+ joined source #1: 1::25(WR)
+ joined source #2: 1::23(R)
+ joined source #3: 1::22(S)
+ joined source #4: 1::24(R)
+ pruned source #1: 1::28(R)
+ pruned source #2: 1::26(S)
+ pruned source #3: 1::27(R)
+ group #3: ff02::d, joined sources: 4, pruned sources: 3
+ joined source #1: 1::25(WR)
+ joined source #2: 1::23(R)
+ joined source #3: 1::22(S)
+ joined source #4: 1::24(R)
+ pruned source #1: 1::28(R)
+ pruned source #2: 1::26(S)
+ pruned source #3: 1::27(R)
+ 161 17:24:41.152302 IP6 (hlim 64, next-header PIM (103) payload length: 518) 10::2 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x6fb0 (correct), upstream-neighbor: 1::29
+ 3 group(s), holdtime: 45s
+ group #1: ff02::f, joined sources: 4, pruned sources: 3
+ joined source #1: 1::25(WR)
+ joined source #2: 1::23(R)
+ joined source #3: 1::22(S)
+ joined source #4: 1::24(R)
+ pruned source #1: 1::28(R)
+ pruned source #2: 1::26(S)
+ pruned source #3: 1::27(R)
+ group #2: ff02::e, joined sources: 4, pruned sources: 3
+ joined source #1: 1::25(WR)
+ joined source #2: 1::23(R)
+ joined source #3: 1::22(S)
+ joined source #4: 1::24(R)
+ pruned source #1: 1::28(R)
+ pruned source #2: 1::26(S)
+ pruned source #3: 1::27(R)
+ group #3: ff02::d, joined sources: 4, pruned sources: 3
+ joined source #1: 1::25(WR)
+ joined source #2: 1::23(R)
+ joined source #3: 1::22(S)
+ joined source #4: 1::24(R)
+ pruned source #1: 1::28(R)
+ pruned source #2: 1::26(S)
+ pruned source #3: 1::27(R)
+ 162 17:24:56.163412 IP6 (hlim 64, next-header PIM (103) payload length: 758) 10::2 > 10::1: PIMv2, length 758
+ Join / Prune, cksum 0x2e8c (correct), upstream-neighbor: 1::35
+ 3 group(s), holdtime: 45s
+ group #1: ff02::12, joined sources: 4, pruned sources: 7
+ joined source #1: 1::2c(R)
+ joined source #2: 1::2a(S)
+ joined source #3: 1::2b(R)
+ joined source #4: 1::2d(WR)
+ pruned source #1: 1::33(R)
+ pruned source #2: 1::2e(S)
+ pruned source #3: 1::2f(S)
+ pruned source #4: 1::30(S)
+ pruned source #5: 1::32(R)
+ pruned source #6: 1::31(R)
+ pruned source #7: 1::34(R)
+ group #2: ff02::11, joined sources: 4, pruned sources: 7
+ joined source #1: 1::2c(R)
+ joined source #2: 1::2a(S)
+ joined source #3: 1::2b(R)
+ joined source #4: 1::2d(WR)
+ pruned source #1: 1::33(R)
+ pruned source #2: 1::2e(S)
+ pruned source #3: 1::2f(S)
+ pruned source #4: 1::30(S)
+ pruned source #5: 1::32(R)
+ pruned source #6: 1::31(R)
+ pruned source #7: 1::34(R)
+ group #3: ff02::10, joined sources: 4, pruned sources: 7
+ joined source #1: 1::2c(R)
+ joined source #2: 1::2a(S)
+ joined source #3: 1::2b(R)
+ joined source #4: 1::2d(WR)
+ pruned source #1: 1::33(R)
+ pruned source #2: 1::2e(S)
+ pruned source #3: 1::2f(S)
+ pruned source #4: 1::30(S)
+ pruned source #5: 1::32(R)
+ pruned source #6: 1::31(R)
+ pruned source #7: 1::34(R)
+ 163 17:25:11.174870 IP6 (hlim 64, next-header PIM (103) payload length: 578) 10::2 > ff02::d: PIMv2, length 578
+ Join / Prune, cksum 0x506c (correct), upstream-neighbor: 1::3e
+ 3 group(s), holdtime: 45s
+ group #1: ff02::13, joined sources: 4, pruned sources: 4
+ joined source #1: 1::36(S)
+ joined source #2: 1::38(R)
+ joined source #3: 1::37(R)
+ joined source #4: 1::39(WR)
+ pruned source #1: 1::3c(S)
+ pruned source #2: 1::3b(S)
+ pruned source #3: 1::3a(S)
+ pruned source #4: 1::3d(R)
+ group #2: ff02::15, joined sources: 4, pruned sources: 4
+ joined source #1: 1::36(S)
+ joined source #2: 1::38(R)
+ joined source #3: 1::37(R)
+ joined source #4: 1::39(WR)
+ pruned source #1: 1::3c(S)
+ pruned source #2: 1::3b(S)
+ pruned source #3: 1::3a(S)
+ pruned source #4: 1::3d(R)
+ group #3: ff02::14, joined sources: 4, pruned sources: 4
+ joined source #1: 1::36(S)
+ joined source #2: 1::38(R)
+ joined source #3: 1::37(R)
+ joined source #4: 1::39(WR)
+ pruned source #1: 1::3c(S)
+ pruned source #2: 1::3b(S)
+ pruned source #3: 1::3a(S)
+ pruned source #4: 1::3d(R)
+ 164 17:25:26.184381 IP6 (hlim 64, next-header PIM (103) payload length: 758) 10::2 > 10::1: PIMv2, length 758
+ Join / Prune, cksum 0x2bb0 (correct), upstream-neighbor: 1::4a
+ 3 group(s), holdtime: 45s
+ group #1: ff02::17, joined sources: 4, pruned sources: 7
+ joined source #1: 1::3f(S)
+ joined source #2: 1::40(R)
+ joined source #3: 1::42(WR)
+ joined source #4: 1::41(R)
+ pruned source #1: 1::46(R)
+ pruned source #2: 1::43(S)
+ pruned source #3: 1::45(S)
+ pruned source #4: 1::47(R)
+ pruned source #5: 1::44(S)
+ pruned source #6: 1::49(R)
+ pruned source #7: 1::48(R)
+ group #2: ff02::16, joined sources: 4, pruned sources: 7
+ joined source #1: 1::3f(S)
+ joined source #2: 1::40(R)
+ joined source #3: 1::42(WR)
+ joined source #4: 1::41(R)
+ pruned source #1: 1::46(R)
+ pruned source #2: 1::43(S)
+ pruned source #3: 1::45(S)
+ pruned source #4: 1::47(R)
+ pruned source #5: 1::44(S)
+ pruned source #6: 1::49(R)
+ pruned source #7: 1::48(R)
+ group #3: ff02::18, joined sources: 4, pruned sources: 7
+ joined source #1: 1::3f(S)
+ joined source #2: 1::40(R)
+ joined source #3: 1::42(WR)
+ joined source #4: 1::41(R)
+ pruned source #1: 1::46(R)
+ pruned source #2: 1::43(S)
+ pruned source #3: 1::45(S)
+ pruned source #4: 1::47(R)
+ pruned source #5: 1::44(S)
+ pruned source #6: 1::49(R)
+ pruned source #7: 1::48(R)
+ 165 17:25:41.195284 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 518) 10::1 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0xb005 (correct), upstream-neighbor: 1::52
+ 3 group(s), holdtime: 45s
+ group #1: ff02::1a(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::4d(SR)
+ joined source #2: 1::4c(SR)
+ joined source #3: 1::4b(S)
+ joined source #4: 1::4e(SWR)
+ pruned source #1: 1::50(SR)
+ pruned source #2: 1::51(SR)
+ pruned source #3: 1::4f(S)
+ group #2: ff02::19(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::4d(SR)
+ joined source #2: 1::4c(SR)
+ joined source #3: 1::4b(S)
+ joined source #4: 1::4e(SWR)
+ pruned source #1: 1::50(SR)
+ pruned source #2: 1::51(SR)
+ pruned source #3: 1::4f(S)
+ group #3: ff02::1b(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::4d(SR)
+ joined source #2: 1::4c(SR)
+ joined source #3: 1::4b(S)
+ joined source #4: 1::4e(SWR)
+ pruned source #1: 1::50(SR)
+ pruned source #2: 1::51(SR)
+ pruned source #3: 1::4f(S)
+ 166 17:25:41.202437 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 518) 10::1 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0xb005 (correct), upstream-neighbor: 1::52
+ 3 group(s), holdtime: 45s
+ group #1: ff02::1a(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::4d(SR)
+ joined source #2: 1::4c(SR)
+ joined source #3: 1::4b(S)
+ joined source #4: 1::4e(SWR)
+ pruned source #1: 1::50(SR)
+ pruned source #2: 1::51(SR)
+ pruned source #3: 1::4f(S)
+ group #2: ff02::19(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::4d(SR)
+ joined source #2: 1::4c(SR)
+ joined source #3: 1::4b(S)
+ joined source #4: 1::4e(SWR)
+ pruned source #1: 1::50(SR)
+ pruned source #2: 1::51(SR)
+ pruned source #3: 1::4f(S)
+ group #3: ff02::1b(0x80), joined sources: 4, pruned sources: 3
+ joined source #1: 1::4d(SR)
+ joined source #2: 1::4c(SR)
+ joined source #3: 1::4b(S)
+ joined source #4: 1::4e(SWR)
+ pruned source #1: 1::50(SR)
+ pruned source #2: 1::51(SR)
+ pruned source #3: 1::4f(S)
+ 167 17:26:01.234759 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 518) 10::1 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x2ddc (correct), upstream-neighbor: 1::6a
+ 3 group(s), holdtime: 45s
+ group #1: ff02::23, joined sources: 4, pruned sources: 3
+ joined source #1: 1::65(SR)
+ joined source #2: 1::64(SR)
+ joined source #3: 1::63(S)
+ joined source #4: 1::66(SWR)
+ pruned source #1: 1::68(SR)
+ pruned source #2: 1::69(SR)
+ pruned source #3: 1::67(S)
+ group #2: ff02::22, joined sources: 4, pruned sources: 3
+ joined source #1: 1::65(SR)
+ joined source #2: 1::64(SR)
+ joined source #3: 1::63(S)
+ joined source #4: 1::66(SWR)
+ pruned source #1: 1::68(SR)
+ pruned source #2: 1::69(SR)
+ pruned source #3: 1::67(S)
+ group #3: ff02::24, joined sources: 4, pruned sources: 3
+ joined source #1: 1::65(SR)
+ joined source #2: 1::64(SR)
+ joined source #3: 1::63(S)
+ joined source #4: 1::66(SWR)
+ pruned source #1: 1::68(SR)
+ pruned source #2: 1::69(SR)
+ pruned source #3: 1::67(S)
+ 168 17:26:01.241645 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 518) 10::1 > ff02::d: PIMv2, length 518
+ Join / Prune, cksum 0x2ddc (correct), upstream-neighbor: 1::6a
+ 3 group(s), holdtime: 45s
+ group #1: ff02::23, joined sources: 4, pruned sources: 3
+ joined source #1: 1::65(SR)
+ joined source #2: 1::64(SR)
+ joined source #3: 1::63(S)
+ joined source #4: 1::66(SWR)
+ pruned source #1: 1::68(SR)
+ pruned source #2: 1::69(SR)
+ pruned source #3: 1::67(S)
+ group #2: ff02::22, joined sources: 4, pruned sources: 3
+ joined source #1: 1::65(SR)
+ joined source #2: 1::64(SR)
+ joined source #3: 1::63(S)
+ joined source #4: 1::66(SWR)
+ pruned source #1: 1::68(SR)
+ pruned source #2: 1::69(SR)
+ pruned source #3: 1::67(S)
+ group #3: ff02::24, joined sources: 4, pruned sources: 3
+ joined source #1: 1::65(SR)
+ joined source #2: 1::64(SR)
+ joined source #3: 1::63(S)
+ joined source #4: 1::66(SWR)
+ pruned source #1: 1::68(SR)
+ pruned source #2: 1::69(SR)
+ pruned source #3: 1::67(S)
+ 169 17:26:13.486913 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7bd (correct) group=ff02::1 src=1::2 pref=0 metric=0
+ 170 17:26:13.501898 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7bd (correct) group=ff02::1 src=1::2 pref=0 metric=0
+ 171 17:26:13.517759 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7bb (correct) group=ff02::2 src=1::3 pref=0 metric=0
+ 172 17:26:28.527906 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7bb (correct) group=ff02::2 src=1::3 pref=0 metric=0
+ 173 17:26:43.534167 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > 10::1: PIMv2, length 50
+ Assert, cksum 0xd6b8 (correct) group=ff02::3 src=1::4 pref=0 metric=0
+ 174 17:26:58.543141 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7b7 (correct) group=ff02::4 src=1::5 pref=0 metric=0
+ 175 17:27:13.553752 IP6 (hlim 64, next-header PIM (103) payload length: 50) 10::2 > 10::1: PIMv2, length 50
+ Assert, cksum 0xd6b4 (correct) group=ff02::5 src=1::6 pref=0 metric=0
+ 176 17:27:28.562985 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 50) 10::1 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7b4 (correct) group=ff02::6 src=1::7 pref=0 metric=0
+ 177 17:27:28.566721 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 50) 10::1 > ff02::d: PIMv2, length 50
+ Assert, cksum 0xd7b4 (correct) group=ff02::6 src=1::7 pref=0 metric=0
+ 178 17:27:40.810753 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > 10::1: PIMv2, length 48
+ Register, cksum 0xcc3c (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::2 > ff02::1: [|pim]
+ 179 17:27:40.827314 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > 10::1: PIMv2, length 48
+ Register, cksum 0xcc3c (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::2 > ff02::1: [|pim]
+ 180 17:27:40.843664 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > 10::1: PIMv2, length 48
+ Register, cksum 0xcc3c (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::2 > ff02::1: [|pim]
+ 181 17:27:40.860071 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > 10::1: PIMv2, length 48
+ Register, cksum 0xcc3c (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::2 > ff02::1: [|pim]
+ 182 17:27:40.879398 IP6 (hlim 64, next-header PIM (103) payload length: 1400) 10::2 > 10::1: PIMv2, length 1400
+ Register, cksum 0x67ce (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 1352) 1::3.2468 > ff02::2.2468: [udp sum ok] UDP, length 1344
+ 183 17:27:40.898565 IP6 (hlim 64, next-header PIM (103) payload length: 1500) 10::2 > 10::1: PIMv2, length 1500
+ Register, cksum 0x676a (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 1452) 1::4.2468 > ff02::3.2468: [udp sum ok] UDP, length 1444
+ 184 17:27:40.918476 IP6 (hlim 64, next-header PIM (103) payload length: 32000) 10::2 > 10::1: PIMv2, length 32000
+ Register, cksum 0xf045 (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 31952) 1::5.2468 > ff02::4.2468: [udp sum ok] UDP, length 31944
+ 185 17:27:40.939877 IP6 (hlim 64, next-header PIM (103) payload length: 65535) 10::2 > 10::1: PIMv2, length 65535
+ Register, cksum 0x6d46 (unverified), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 65487) 1::6.2468 > ff02::5.2468: UDP, length 65479
+ 186 17:27:40.957722 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > 10::1: PIMv2, length 48
+ Register, cksum 0xcc32 (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::7 > ff02::6: [|pim]
+ 187 17:27:40.975732 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > 10::1: PIMv2, length 48
+ Register, cksum 0xcc32 (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::7 > ff02::6: [|pim]
+ 188 17:27:40.993200 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > ff02::d: PIMv2, length 48
+ Register, cksum 0xcd31 (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::8 > ff02::7: [|pim]
+ 189 17:27:56.005578 IP6 (hlim 64, next-header PIM (103) payload length: 48) 10::2 > ff02::d: PIMv2, length 48
+ Register, cksum 0xcd2f (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::9 > ff02::8: [|pim]
+ 190 17:28:11.113454 IP6 (class 0xc0, flowlabel 0xe75c5, hlim 255, next-header PIM (103) payload length: 156) 1::b > 10::2: PIMv2, length 156
+ Register, cksum 0xde72 (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
+ 191 17:28:11.122290 IP6 (class 0xc0, flowlabel 0xe75c5, hlim 1, next-header PIM (103) payload length: 156) 1::b > 10::2: PIMv2, length 156
+ Register, cksum 0xde72 (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
+ 192 17:28:11.130752 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 10, next-header PIM (103) payload length: 156) 10::1 > 10::2: PIMv2, length 156
+ Register, cksum 0xde6d (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
+ 193 17:28:11.138877 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 200, next-header PIM (103) payload length: 156) 10::1 > 10::2: PIMv2, length 156
+ Register, cksum 0xde6d (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
+ 194 17:28:11.147140 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 20, next-header PIM (103) payload length: 156) 10::1 > 10::2: PIMv2, length 156
+ Register, cksum 0xde6d (correct), Flags [ none ]
+ IP6 (hlim 64, next-header UDP (17) payload length: 108) 1::a.2468 > ff02::9.2468: [udp sum ok] UDP, length 100
+ 195 17:28:11.213700 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 48) 10::1 > 10::2: PIMv2, length 48
+ Register, cksum 0x9e6d (correct), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::c > ff02::a: [|pim]
+ 196 17:28:11.228981 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 48) 10::1 > 10::2: PIMv2, length 48
+ Register, cksum 0x9e7e (incorrect), Flags [ Null ]
+ IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 0) 1::d > ff02::b: [|pim]
+ 197 17:28:18.502726 IP6 (hlim 64, next-header PIM (103) payload length: 42) 10::2 > 10::1: PIMv2, length 42
+ Register Stop, cksum 0xd9c4 (correct) group=ff02::1 source=1::2
+ 198 17:28:18.517840 IP6 (hlim 64, next-header PIM (103) payload length: 42) 10::2 > 10::1: PIMv2, length 42
+ Register Stop, cksum 0xd9c4 (correct) group=ff02::1 source=1::2
+ 199 17:28:18.533422 IP6 (hlim 64, next-header PIM (103) payload length: 42) 10::2 > 10::1: PIMv2, length 42
+ Register Stop, cksum 0xd9c2 (correct) group=ff02::2 source=1::3
+ 200 17:28:18.549676 IP6 (hlim 64, next-header PIM (103) payload length: 42) 10::2 > 10::1: PIMv2, length 42
+ Register Stop, cksum 0xd9c2 (correct) group=ff02::2 source=1::3
+ 201 17:28:18.564554 IP6 (hlim 64, next-header PIM (103) payload length: 42) 10::2 > ff02::d: PIMv2, length 42
+ Register Stop, cksum 0xdac1 (correct) group=ff02::3 source=1::4
+ 202 17:28:33.570694 IP6 (hlim 64, next-header PIM (103) payload length: 42) 10::2 > ff02::d: PIMv2, length 42
+ Register Stop, cksum 0xdabf (correct) group=ff02::4 source=1::5
+ 203 17:28:48.578934 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 42) 10::1 > 10::2: PIMv2, length 42
+ Register Stop, cksum 0xd9bc (correct) group=ff02::5 source=1::6
+ 204 17:28:48.582687 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 42) 10::1 > 10::2: PIMv2, length 42
+ Register Stop, cksum 0xd9bc (correct) group=ff02::5 source=1::6
+ 205 17:28:48.586062 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 42) 10::1 > 10::2: PIMv2, length 42
+ Register Stop, cksum 0xd9bc (correct) group=ff02::5 source=1::6
+ 206 17:28:48.590187 IP6 (class 0xc0, flowlabel 0xfe48b, hlim 255, next-header PIM (103) payload length: 42) 10::1 > 10::2: PIMv2, length 42
+ Register Stop, cksum 0xd9cb (incorrect) group=ff02::6 source=1::7
+ 207 17:28:55.824177 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3d7 (correct)
+ Offer, rpa=1::2 sender pref=100 sender metric=10
+ 208 17:28:55.839949 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3d7 (correct)
+ Offer, rpa=1::2 sender pref=100 sender metric=10
+ 209 17:28:55.855650 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3c6 (correct)
+ Winner, rpa=1::3 sender pref=100 sender metric=10
+ 210 17:28:55.871248 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3c6 (correct)
+ Winner, rpa=1::3 sender pref=100 sender metric=10
+ 211 17:28:55.887289 IP6 (hlim 64, next-header PIM (103) payload length: 58) 10::2 > ff02::d: PIMv2, length 58
+ DF Election, cksum 0x7f8b (correct)
+ Backoff, rpa=1::4 sender pref=100 sender metric=10
+ offer addr=1::5 offer pref=1000 offer metric=10000 interval 10000ms
+ 212 17:28:55.903013 IP6 (hlim 64, next-header PIM (103) payload length: 58) 10::2 > ff02::d: PIMv2, length 58
+ DF Election, cksum 0x7f8b (correct)
+ Backoff, rpa=1::4 sender pref=100 sender metric=10
+ offer addr=1::5 offer pref=1000 offer metric=10000 interval 10000ms
+ 213 17:28:55.919550 IP6 (hlim 64, next-header PIM (103) payload length: 56) 10::2 > ff02::d: PIMv2, length 56
+ DF Election, cksum 0xa689 (correct)
+ Pass, rpa=1::6 sender pref=100 sender metric=10
+ new winner addr=1::7 new winner pref=1000 new winner metric=10000
+ 214 17:28:55.935209 IP6 (hlim 64, next-header PIM (103) payload length: 56) 10::2 > ff02::d: PIMv2, length 56
+ DF Election, cksum 0xa689 (correct)
+ Pass, rpa=1::6 sender pref=100 sender metric=10
+ new winner addr=1::7 new winner pref=1000 new winner metric=10000
+ 215 17:28:55.951452 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3d1 (correct)
+ Offer, rpa=1::8 sender pref=100 sender metric=10
+ 216 17:29:10.963613 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3d1 (correct)
+ Offer, rpa=1::8 sender pref=100 sender metric=10
+ 217 17:29:25.974998 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > 10::1: PIMv2, length 30
+ DF Election, cksum 0xd2cf (correct)
+ Offer, rpa=1::9 sender pref=100 sender metric=10
+ 218 17:29:40.984969 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3cf (correct)
+ Offer, rpa=1::a sender pref=100 sender metric=10
+ 219 17:29:55.998320 IP6 (hlim 64, next-header PIM (103) payload length: 30) 10::2 > 10::1: PIMv2, length 30
+ DF Election, cksum 0xd2cd (correct)
+ Offer, rpa=1::b sender pref=100 sender metric=10
+ 220 17:30:11.006628 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 30) 10::1 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3ce (correct)
+ Offer, rpa=1::c sender pref=100 sender metric=10
+ 221 17:30:11.011282 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 30) 10::1 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3ce (correct)
+ Offer, rpa=1::c sender pref=100 sender metric=10
+ 222 17:30:11.015823 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 30) 10::1 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3bd (correct)
+ Winner, rpa=1::d sender pref=100 sender metric=10
+ 223 17:30:11.020041 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 30) 10::1 > ff02::d: PIMv2, length 30
+ DF Election, cksum 0xd3bd (correct)
+ Winner, rpa=1::d sender pref=100 sender metric=10
+ 224 17:30:11.024077 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 58) 10::1 > ff02::d: PIMv2, length 58
+ DF Election, cksum 0x7f78 (correct)
+ Backoff, rpa=1::e sender pref=100 sender metric=10
+ offer addr=1::f offer pref=1000 offer metric=10000 interval 10000ms
+ 225 17:30:11.028134 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 58) 10::1 > ff02::d: PIMv2, length 58
+ DF Election, cksum 0x7f78 (correct)
+ Backoff, rpa=1::e sender pref=100 sender metric=10
+ offer addr=1::f offer pref=1000 offer metric=10000 interval 10000ms
+ 226 17:30:11.032519 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 56) 10::1 > ff02::d: PIMv2, length 56
+ DF Election, cksum 0xa676 (correct)
+ Pass, rpa=1::10 sender pref=100 sender metric=10
+ new winner addr=1::11 new winner pref=1000 new winner metric=10000
+ 227 17:30:11.037060 IP6 (class 0xc0, flowlabel 0x4b462, hlim 1, next-header PIM (103) payload length: 56) 10::1 > ff02::d: PIMv2, length 56
+ DF Election, cksum 0xa676 (correct)
+ Pass, rpa=1::10 sender pref=100 sender metric=10
+ new winner addr=1::11 new winner pref=1000 new winner metric=10000
+ 228 17:30:23.287232 IP6 (hlim 64, next-header PIM (103) payload length: 4) 10::2 > ff02::d: PIMv2, length 4
+ Graft, cksum 0xda72 (correct), upstream-neighbor: [|pimv2]
+ 229 17:30:45.519013 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 1::2
+ 1::3
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0002 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0003
+ 230 17:30:45.534657 IP6 (hlim 64, next-header PIM (103) payload length: 74) 10::2 > ff02::d: PIMv2, length 74
+ Hello, cksum 0xd855 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 36, Value:
+ 1::2
+ 1::3
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0002 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0003
+ 231 17:30:45.549731 IP6 (hlim 64, next-header PIM (103) payload length: 74) 10::2 > ff02::d: PIMv2, length 74
+ Hello, cksum 0xd855 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 36, Value:
+ 1::2
+ 1::3
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0002 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0003
+ 232 17:30:45.564397 IP6 (hlim 64, next-header PIM (103) payload length: 74) 10::2 > ff02::d: PIMv2, length 74
+ Hello, cksum 0xd855 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 36, Value:
+ 1::2
+ 1::3
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0002 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0003
+ 233 17:30:45.580862 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 1::2
+ 1::3
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0002 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0003
+ 234 17:30:45.595688 IP6 (hlim 64, next-header PIM (103) payload length: 74) 10::2 > ff02::d: PIMv2, length 74
+ Hello, cksum 0xd855 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 36, Value:
+ 1::2
+ 1::3
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0002 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0003
+ 235 17:30:45.610185 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 1::2
+ 1::3
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0002 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0003
+ 236 17:30:45.624903 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 1::2
+ 1::3
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0002 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0003
+ 237 17:30:45.639276 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 1::2
+ 1::3
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0002 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0003
+ 238 17:30:45.653978 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 1::2
+ 1::3
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0002 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0003
+ 239 17:30:45.668528 IP6 (hlim 64, next-header PIM (103) payload length: 78) 10::2 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd83b (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 1::2
+ 1::3
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0002 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0003
+ 240 17:30:45.684110 IP6 (hlim 64, next-header PIM (103) payload length: 74) 10::2 > ff02::d: PIMv2, length 74
+ Hello, cksum 0xd851 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 36, Value:
+ 1::4
+ 1::5
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0004 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0005
+ 241 17:31:00.691792 IP6 (hlim 64, next-header PIM (103) payload length: 74) 10::2 > ff02::d: PIMv2, length 74
+ Hello, cksum 0xd851 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Address List Option (24), length 36, Value:
+ 1::4
+ 1::5
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0004 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0005
+ 242 17:31:15.702513 IP6 (hlim 64, next-header PIM (103) payload length: 34) 10::2 > 10::1: PIMv2, length 34
+ Hello, cksum 0xdbbf (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ 243 17:31:30.708003 IP6 (hlim 64, next-header PIM (103) payload length: 34) 10::2 > 10::1: PIMv2, length 34
+ Hello, cksum 0xdbbf (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ 244 17:31:45.717892 IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 78) 10::1 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd834 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 1::7
+ 1::6
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0007 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0006
+ 245 17:31:45.723603 IP6 (class 0xc0, hlim 1, next-header PIM (103) payload length: 78) 10::1 > ff02::d: PIMv2, length 78
+ Hello, cksum 0xd834 (correct)
+ Hold Time Option (1), length 2, Value: 50s
+ 0x0000: 0032
+ LAN Prune Delay Option (2), length 4, Value:
+ T-bit=0, LAN delay 10ms, Override interval 100ms
+ 0x0000: 000a 0064
+ DR Priority Option (19), length 4, Value: 150
+ 0x0000: 0000 0096
+ Generation ID Option (20), length 4, Value: 0x00000226
+ 0x0000: 0000 0226
+ Bi-Directional Capability Option (22), length 0, Value:
+ Address List Option (24), length 36, Value:
+ 1::7
+ 1::6
+ 0x0000: 0200 0001 0000 0000 0000 0000 0000 0000
+ 0x0010: 0007 0200 0001 0000 0000 0000 0000 0000
+ 0x0020: 0000 0006
diff --git a/tests/pim-packet-assortment.out b/tests/pim-packet-assortment.out
new file mode 100644
index 0000000..6f66528
--- /dev/null
+++ b/tests/pim-packet-assortment.out
@@ -0,0 +1,245 @@
+ 1 17:10:44.789433 IP 10.0.0.2 > 224.0.0.13: PIMv2, Bootstrap, length 14
+ 2 17:10:59.798983 IP 10.0.0.2 > 224.0.0.13: PIMv2, Bootstrap, length 14
+ 3 17:11:14.807715 IP 10.0.0.2 > 224.0.0.13: PIMv2, Bootstrap, length 14
+ 4 17:11:14.823339 IP 10.0.0.2 > 224.0.0.13: PIMv2, Bootstrap, length 14
+ 5 17:11:14.838646 IP 10.0.0.2 > 224.0.0.13: PIMv2, Bootstrap, length 26
+ 6 17:11:14.854392 IP 10.0.0.2 > 224.0.0.13: PIMv2, Bootstrap, length 58
+ 7 17:11:14.870050 IP 10.0.0.2 > 10.0.0.1: PIMv2, Bootstrap, length 14
+ 8 17:11:29.877641 IP 10.0.0.1 > 224.0.0.13: PIMv2, Bootstrap, length 14
+ 9 17:11:29.882313 IP 10.0.0.1 > 224.0.0.13: PIMv2, Bootstrap, length 14
+ 10 17:11:29.886825 IP 10.0.0.1 > 224.0.0.13: PIMv2, Bootstrap, length 26
+ 11 17:11:29.891835 IP 10.0.0.1 > 224.0.0.13: PIMv2, Bootstrap, length 58
+ 12 17:11:52.114000 IP 10.0.0.2 > 10.0.0.1: PIMv2, Candidate RP Advertisement, length 22
+ 13 17:11:52.129609 IP 10.0.0.2 > 10.0.0.1: PIMv2, Candidate RP Advertisement, length 22
+ 14 17:11:52.144922 IP 10.0.0.2 > 10.0.0.1: PIMv2, Candidate RP Advertisement, length 30
+ 15 17:11:52.160444 IP 10.0.0.2 > 10.0.0.1: PIMv2, Candidate RP Advertisement, length 22
+ 16 17:11:52.176120 IP 10.0.0.2 > 10.0.0.1: PIMv2, Candidate RP Advertisement, length 22
+ 17 17:11:52.191149 IP 10.0.0.2 > 224.0.0.13: PIMv2, Candidate RP Advertisement, length 22
+ 18 17:12:07.197582 IP 10.0.0.2 > 10.0.0.1: PIMv2, Candidate RP Advertisement, length 94
+ 19 17:12:22.207593 IP 10.0.0.2 > 224.0.0.13: PIMv2, Candidate RP Advertisement, length 22
+ 20 17:12:37.213829 IP 10.0.0.1 > 10.0.0.2: PIMv2, Candidate RP Advertisement, length 22
+ 21 17:12:37.218303 IP 10.0.0.1 > 10.0.0.2: PIMv2, Candidate RP Advertisement, length 22
+ 22 17:12:37.222610 IP 10.0.0.1 > 10.0.0.2: PIMv2, Candidate RP Advertisement, length 30
+ 23 17:12:37.228304 IP 10.0.0.1 > 10.0.0.2: PIMv2, Candidate RP Advertisement, length 30
+ 24 17:12:37.233724 IP 10.0.0.13 > 10.0.0.2: PIMv2, Candidate RP Advertisement, length 30
+ 25 17:12:49.443041 IP 10.0.0.2 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 26 17:12:49.459068 IP 10.0.0.2 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 27 17:12:49.474922 IP 10.0.0.2 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 28 17:13:04.482150 IP 10.0.0.2 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 29 17:13:19.491684 IP 10.0.0.2 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 30 17:13:34.502041 IP 10.0.0.2 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 31 17:13:49.515669 IP 10.0.0.2 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 32 17:13:49.535091 IP 10.0.0.2 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 33 17:13:49.555281 IP 10.0.0.2 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 34 17:14:04.567818 IP 10.0.0.2 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 35 17:14:19.578882 IP 10.0.0.2 > 10.0.0.1: PIMv2, Join / Prune, length 314
+ 36 17:14:34.586658 IP 10.0.0.2 > 224.0.0.13: PIMv2, Join / Prune, length 242
+ 37 17:14:49.597897 IP 10.0.0.2 > 10.0.0.1: PIMv2, Join / Prune, length 314
+ 38 17:15:04.609866 IP 10.0.0.1 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 39 17:15:04.615696 IP 10.0.0.1 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 40 17:15:24.642963 IP 10.0.0.1 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 41 17:15:24.649511 IP 10.0.0.1 > 224.0.0.13: PIMv2, Join / Prune, length 218
+ 42 17:15:36.844192 IP 10.0.0.2 > 224.0.0.13: PIMv2, Assert, length 26
+ 43 17:15:36.858926 IP 10.0.0.2 > 224.0.0.13: PIMv2, Assert, length 26
+ 44 17:15:36.875457 IP 10.0.0.2 > 224.0.0.13: PIMv2, Assert, length 26
+ 45 17:15:51.885935 IP 10.0.0.2 > 224.0.0.13: PIMv2, Assert, length 26
+ 46 17:16:06.895682 IP 10.0.0.2 > 10.0.0.1: PIMv2, Assert, length 26
+ 47 17:16:21.901980 IP 10.0.0.2 > 224.0.0.13: PIMv2, Assert, length 26
+ 48 17:16:36.912545 IP 10.0.0.2 > 10.0.0.1: PIMv2, Assert, length 26
+ 49 17:16:51.922176 IP 10.0.0.1 > 224.0.0.13: PIMv2, Assert, length 26
+ 50 17:16:51.927014 IP 10.0.0.1 > 224.0.0.13: PIMv2, Assert, length 26
+ 51 17:17:04.134866 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register, length 28
+ 52 17:17:04.152086 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register, length 28
+ 53 17:17:04.168215 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register, length 28
+ 54 17:17:04.184607 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register, length 28
+ 55 17:17:04.203347 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register, length 1380
+ 56 17:17:04.222232 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register, length 1480
+ 57 17:17:04.241206 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register, length 31980
+ 58 17:17:04.260981 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register, length 65515
+ 59 17:17:04.279594 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register, length 28
+ 60 17:17:04.297659 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register, length 28
+ 61 17:17:04.314768 IP 10.0.0.2 > 224.0.0.13: PIMv2, Register, length 28
+ 62 17:17:19.324443 IP 10.0.0.2 > 224.0.0.13: PIMv2, Register, length 28
+ 63 17:17:34.361348 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 136
+ 64 17:17:34.370054 IP 10.0.0.10 > 10.0.0.2: PIMv2, Register, length 136
+ 65 17:17:34.379510 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 136
+ 66 17:17:34.387689 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 136
+ 67 17:17:34.395915 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 136
+ 68 17:17:34.474538 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 28
+ 69 17:17:34.496073 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 1280
+ 70 17:17:34.505618 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 1380
+ 71 17:17:34.517256 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 1480
+ 72 17:17:34.547489 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 1380
+ 73 17:17:34.556376 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 1480
+ 74 17:17:34.566673 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 1580
+ 75 17:17:34.595128 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 9780
+ 76 17:17:34.604864 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 9880
+ 77 17:17:34.616241 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 9980
+ 78 17:17:34.642771 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register, length 28
+ 79 17:17:41.832778 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register Stop, length 18
+ 80 17:17:41.848183 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register Stop, length 18
+ 81 17:17:41.863647 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register Stop, length 18
+ 82 17:17:41.879212 IP 10.0.0.2 > 10.0.0.1: PIMv2, Register Stop, length 18
+ 83 17:17:41.894033 IP 10.0.0.2 > 224.0.0.13: PIMv2, Register Stop, length 18
+ 84 17:17:56.904772 IP 10.0.0.2 > 224.0.0.13: PIMv2, Register Stop, length 18
+ 85 17:18:11.915223 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register Stop, length 18
+ 86 17:18:11.920116 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register Stop, length 18
+ 87 17:18:11.924496 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register Stop, length 18
+ 88 17:18:11.929456 IP 10.0.0.1 > 10.0.0.2: PIMv2, Register Stop, length 18
+ 89 17:18:19.135202 IP 10.0.0.2 > 224.0.0.13: PIMv2, DF Election, length 18
+ 90 17:18:19.151462 IP 10.0.0.2 > 224.0.0.13: PIMv2, DF Election, length 18
+ 91 17:18:19.167261 IP 10.0.0.2 > 224.0.0.13: PIMv2, DF Election, length 18
+ 92 17:18:19.183508 IP 10.0.0.2 > 224.0.0.13: PIMv2, DF Election, length 18
+ 93 17:18:19.199269 IP 10.0.0.2 > 224.0.0.13: PIMv2, DF Election, length 34
+ 94 17:18:19.215274 IP 10.0.0.2 > 224.0.0.13: PIMv2, DF Election, length 34
+ 95 17:18:19.231330 IP 10.0.0.2 > 224.0.0.13: PIMv2, DF Election, length 32
+ 96 17:18:19.247063 IP 10.0.0.2 > 224.0.0.13: PIMv2, DF Election, length 32
+ 97 17:18:19.263010 IP 10.0.0.2 > 224.0.0.13: PIMv2, DF Election, length 18
+ 98 17:18:34.278440 IP 10.0.0.2 > 224.0.0.13: PIMv2, DF Election, length 18
+ 99 17:18:49.292244 IP 10.0.0.2 > 10.0.0.1: PIMv2, DF Election, length 18
+ 100 17:19:04.301082 IP 10.0.0.2 > 224.0.0.13: PIMv2, DF Election, length 18
+ 101 17:19:19.311519 IP 10.0.0.2 > 10.0.0.1: PIMv2, DF Election, length 18
+ 102 17:19:34.317677 IP 10.0.0.1 > 224.0.0.13: PIMv2, DF Election, length 18
+ 103 17:19:34.323132 IP 10.0.0.1 > 224.0.0.13: PIMv2, DF Election, length 18
+ 104 17:19:34.328241 IP 10.0.0.1 > 224.0.0.13: PIMv2, DF Election, length 18
+ 105 17:19:34.333292 IP 10.0.0.1 > 224.0.0.13: PIMv2, DF Election, length 18
+ 106 17:19:34.338277 IP 10.0.0.1 > 224.0.0.13: PIMv2, DF Election, length 34
+ 107 17:19:34.345622 IP 10.0.0.1 > 224.0.0.13: PIMv2, DF Election, length 34
+ 108 17:19:34.350734 IP 10.0.0.1 > 224.0.0.13: PIMv2, DF Election, length 32
+ 109 17:19:34.355785 IP 10.0.0.1 > 224.0.0.13: PIMv2, DF Election, length 32
+ 110 17:19:46.562048 IP 10.0.0.2 > 224.0.0.13: PIMv2, Graft, length 4
+ 111 17:20:08.767127 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 54
+ 112 17:20:08.785732 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 50
+ 113 17:20:08.801265 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 50
+ 114 17:20:08.815202 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 54
+ 115 17:20:08.829259 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 54
+ 116 17:20:08.843547 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 50
+ 117 17:20:08.857616 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 54
+ 118 17:20:08.871960 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 50
+ 119 17:20:08.885812 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 50
+ 120 17:20:08.899908 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 50
+ 121 17:20:08.913880 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 50
+ 122 17:20:08.928954 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 50
+ 123 17:20:23.938011 IP 10.0.0.2 > 224.0.0.13: PIMv2, Hello, length 50
+ 124 17:20:38.945661 IP 10.0.0.2 > 10.0.0.1: PIMv2, Hello, length 34
+ 125 17:20:53.953435 IP 10.0.0.2 > 10.0.0.1: PIMv2, Hello, length 34
+ 126 17:21:08.961835 IP 10.0.0.1 > 224.0.0.13: PIMv2, Hello, length 54
+ 127 17:21:08.966281 IP 10.0.0.1 > 224.0.0.13: PIMv2, Hello, length 54
+ 128 17:21:08.970800 IP 10.0.0.7 > 224.0.0.13: PIMv2, Hello, length 50
+ 129 17:21:21.305747 IP6 10::2 > ff02::d: PIMv2, Bootstrap, length 26
+ 130 17:21:36.317463 IP6 10::2 > ff02::d: PIMv2, Bootstrap, length 26
+ 131 17:21:51.327358 IP6 10::2 > ff02::d: PIMv2, Bootstrap, length 26
+ 132 17:21:51.342877 IP6 10::2 > ff02::d: PIMv2, Bootstrap, length 26
+ 133 17:21:51.359070 IP6 10::2 > ff02::d: PIMv2, Bootstrap, length 50
+ 134 17:21:51.375173 IP6 10::2 > ff02::d: PIMv2, Bootstrap, length 118
+ 135 17:21:51.389973 IP6 10::2 > 10::1: PIMv2, Bootstrap, length 26
+ 136 17:22:06.397655 IP6 10::1 > ff02::d: PIMv2, Bootstrap, length 26
+ 137 17:22:06.401467 IP6 10::1 > ff02::d: PIMv2, Bootstrap, length 26
+ 138 17:22:06.405175 IP6 10::1 > ff02::d: PIMv2, Bootstrap, length 50
+ 139 17:22:06.409793 IP6 10::1 > ff02::d: PIMv2, Bootstrap, length 118
+ 140 17:22:28.670554 IP6 10::2 > 10::1: PIMv2, Candidate RP Advertisement, length 46
+ 141 17:22:28.686085 IP6 10::2 > 10::1: PIMv2, Candidate RP Advertisement, length 46
+ 142 17:22:28.701051 IP6 10::2 > 10::1: PIMv2, Candidate RP Advertisement, length 66
+ 143 17:22:28.716663 IP6 10::2 > 10::1: PIMv2, Candidate RP Advertisement, length 46
+ 144 17:22:28.732342 IP6 10::2 > 10::1: PIMv2, Candidate RP Advertisement, length 46
+ 145 17:22:28.747319 IP6 10::2 > ff02::d: PIMv2, Candidate RP Advertisement, length 46
+ 146 17:22:43.754936 IP6 10::2 > 10::1: PIMv2, Candidate RP Advertisement, length 226
+ 147 17:22:58.764755 IP6 10::2 > ff02::d: PIMv2, Candidate RP Advertisement, length 46
+ 148 17:23:13.771504 IP6 10::1 > 10::2: PIMv2, Candidate RP Advertisement, length 46
+ 149 17:23:13.775525 IP6 10::1 > 10::2: PIMv2, Candidate RP Advertisement, length 46
+ 150 17:23:13.779819 IP6 10::1 > 10::2: PIMv2, Candidate RP Advertisement, length 66
+ 151 17:23:13.784515 IP6 10::1 > 10::2: PIMv2, Candidate RP Advertisement, length 66
+ 152 17:23:26.044171 IP6 10::2 > ff02::d: PIMv2, Join / Prune, length 518
+ 153 17:23:26.059514 IP6 10::2 > ff02::d: PIMv2, Join / Prune, length 518
+ 154 17:23:26.075326 IP6 10::2 > ff02::d: PIMv2, Join / Prune, length 518
+ 155 17:23:41.083345 IP6 10::2 > ff02::d: PIMv2, Join / Prune, length 518
+ 156 17:23:56.095440 IP6 10::2 > ff02::d: PIMv2, Join / Prune, length 518
+ 157 17:24:11.103070 IP6 10::2 > ff02::d: PIMv2, Join / Prune, length 518
+ 158 17:24:26.112599 IP6 10::2 > ff02::d: PIMv2, Join / Prune, length 518
+ 159 17:24:26.128184 IP6 10::2 > ff02::d: PIMv2, Join / Prune, length 518
+ 160 17:24:26.144272 IP6 10::2 > ff02::d: PIMv2, Join / Prune, length 518
+ 161 17:24:41.152302 IP6 10::2 > ff02::d: PIMv2, Join / Prune, length 518
+ 162 17:24:56.163412 IP6 10::2 > 10::1: PIMv2, Join / Prune, length 758
+ 163 17:25:11.174870 IP6 10::2 > ff02::d: PIMv2, Join / Prune, length 578
+ 164 17:25:26.184381 IP6 10::2 > 10::1: PIMv2, Join / Prune, length 758
+ 165 17:25:41.195284 IP6 10::1 > ff02::d: PIMv2, Join / Prune, length 518
+ 166 17:25:41.202437 IP6 10::1 > ff02::d: PIMv2, Join / Prune, length 518
+ 167 17:26:01.234759 IP6 10::1 > ff02::d: PIMv2, Join / Prune, length 518
+ 168 17:26:01.241645 IP6 10::1 > ff02::d: PIMv2, Join / Prune, length 518
+ 169 17:26:13.486913 IP6 10::2 > ff02::d: PIMv2, Assert, length 50
+ 170 17:26:13.501898 IP6 10::2 > ff02::d: PIMv2, Assert, length 50
+ 171 17:26:13.517759 IP6 10::2 > ff02::d: PIMv2, Assert, length 50
+ 172 17:26:28.527906 IP6 10::2 > ff02::d: PIMv2, Assert, length 50
+ 173 17:26:43.534167 IP6 10::2 > 10::1: PIMv2, Assert, length 50
+ 174 17:26:58.543141 IP6 10::2 > ff02::d: PIMv2, Assert, length 50
+ 175 17:27:13.553752 IP6 10::2 > 10::1: PIMv2, Assert, length 50
+ 176 17:27:28.562985 IP6 10::1 > ff02::d: PIMv2, Assert, length 50
+ 177 17:27:28.566721 IP6 10::1 > ff02::d: PIMv2, Assert, length 50
+ 178 17:27:40.810753 IP6 10::2 > 10::1: PIMv2, Register, length 48
+ 179 17:27:40.827314 IP6 10::2 > 10::1: PIMv2, Register, length 48
+ 180 17:27:40.843664 IP6 10::2 > 10::1: PIMv2, Register, length 48
+ 181 17:27:40.860071 IP6 10::2 > 10::1: PIMv2, Register, length 48
+ 182 17:27:40.879398 IP6 10::2 > 10::1: PIMv2, Register, length 1400
+ 183 17:27:40.898565 IP6 10::2 > 10::1: PIMv2, Register, length 1500
+ 184 17:27:40.918476 IP6 10::2 > 10::1: PIMv2, Register, length 32000
+ 185 17:27:40.939877 IP6 10::2 > 10::1: PIMv2, Register, length 65535
+ 186 17:27:40.957722 IP6 10::2 > 10::1: PIMv2, Register, length 48
+ 187 17:27:40.975732 IP6 10::2 > 10::1: PIMv2, Register, length 48
+ 188 17:27:40.993200 IP6 10::2 > ff02::d: PIMv2, Register, length 48
+ 189 17:27:56.005578 IP6 10::2 > ff02::d: PIMv2, Register, length 48
+ 190 17:28:11.113454 IP6 1::b > 10::2: PIMv2, Register, length 156
+ 191 17:28:11.122290 IP6 1::b > 10::2: PIMv2, Register, length 156
+ 192 17:28:11.130752 IP6 10::1 > 10::2: PIMv2, Register, length 156
+ 193 17:28:11.138877 IP6 10::1 > 10::2: PIMv2, Register, length 156
+ 194 17:28:11.147140 IP6 10::1 > 10::2: PIMv2, Register, length 156
+ 195 17:28:11.213700 IP6 10::1 > 10::2: PIMv2, Register, length 48
+ 196 17:28:11.228981 IP6 10::1 > 10::2: PIMv2, Register, length 48
+ 197 17:28:18.502726 IP6 10::2 > 10::1: PIMv2, Register Stop, length 42
+ 198 17:28:18.517840 IP6 10::2 > 10::1: PIMv2, Register Stop, length 42
+ 199 17:28:18.533422 IP6 10::2 > 10::1: PIMv2, Register Stop, length 42
+ 200 17:28:18.549676 IP6 10::2 > 10::1: PIMv2, Register Stop, length 42
+ 201 17:28:18.564554 IP6 10::2 > ff02::d: PIMv2, Register Stop, length 42
+ 202 17:28:33.570694 IP6 10::2 > ff02::d: PIMv2, Register Stop, length 42
+ 203 17:28:48.578934 IP6 10::1 > 10::2: PIMv2, Register Stop, length 42
+ 204 17:28:48.582687 IP6 10::1 > 10::2: PIMv2, Register Stop, length 42
+ 205 17:28:48.586062 IP6 10::1 > 10::2: PIMv2, Register Stop, length 42
+ 206 17:28:48.590187 IP6 10::1 > 10::2: PIMv2, Register Stop, length 42
+ 207 17:28:55.824177 IP6 10::2 > ff02::d: PIMv2, DF Election, length 30
+ 208 17:28:55.839949 IP6 10::2 > ff02::d: PIMv2, DF Election, length 30
+ 209 17:28:55.855650 IP6 10::2 > ff02::d: PIMv2, DF Election, length 30
+ 210 17:28:55.871248 IP6 10::2 > ff02::d: PIMv2, DF Election, length 30
+ 211 17:28:55.887289 IP6 10::2 > ff02::d: PIMv2, DF Election, length 58
+ 212 17:28:55.903013 IP6 10::2 > ff02::d: PIMv2, DF Election, length 58
+ 213 17:28:55.919550 IP6 10::2 > ff02::d: PIMv2, DF Election, length 56
+ 214 17:28:55.935209 IP6 10::2 > ff02::d: PIMv2, DF Election, length 56
+ 215 17:28:55.951452 IP6 10::2 > ff02::d: PIMv2, DF Election, length 30
+ 216 17:29:10.963613 IP6 10::2 > ff02::d: PIMv2, DF Election, length 30
+ 217 17:29:25.974998 IP6 10::2 > 10::1: PIMv2, DF Election, length 30
+ 218 17:29:40.984969 IP6 10::2 > ff02::d: PIMv2, DF Election, length 30
+ 219 17:29:55.998320 IP6 10::2 > 10::1: PIMv2, DF Election, length 30
+ 220 17:30:11.006628 IP6 10::1 > ff02::d: PIMv2, DF Election, length 30
+ 221 17:30:11.011282 IP6 10::1 > ff02::d: PIMv2, DF Election, length 30
+ 222 17:30:11.015823 IP6 10::1 > ff02::d: PIMv2, DF Election, length 30
+ 223 17:30:11.020041 IP6 10::1 > ff02::d: PIMv2, DF Election, length 30
+ 224 17:30:11.024077 IP6 10::1 > ff02::d: PIMv2, DF Election, length 58
+ 225 17:30:11.028134 IP6 10::1 > ff02::d: PIMv2, DF Election, length 58
+ 226 17:30:11.032519 IP6 10::1 > ff02::d: PIMv2, DF Election, length 56
+ 227 17:30:11.037060 IP6 10::1 > ff02::d: PIMv2, DF Election, length 56
+ 228 17:30:23.287232 IP6 10::2 > ff02::d: PIMv2, Graft, length 4
+ 229 17:30:45.519013 IP6 10::2 > ff02::d: PIMv2, Hello, length 78
+ 230 17:30:45.534657 IP6 10::2 > ff02::d: PIMv2, Hello, length 74
+ 231 17:30:45.549731 IP6 10::2 > ff02::d: PIMv2, Hello, length 74
+ 232 17:30:45.564397 IP6 10::2 > ff02::d: PIMv2, Hello, length 74
+ 233 17:30:45.580862 IP6 10::2 > ff02::d: PIMv2, Hello, length 78
+ 234 17:30:45.595688 IP6 10::2 > ff02::d: PIMv2, Hello, length 74
+ 235 17:30:45.610185 IP6 10::2 > ff02::d: PIMv2, Hello, length 78
+ 236 17:30:45.624903 IP6 10::2 > ff02::d: PIMv2, Hello, length 78
+ 237 17:30:45.639276 IP6 10::2 > ff02::d: PIMv2, Hello, length 78
+ 238 17:30:45.653978 IP6 10::2 > ff02::d: PIMv2, Hello, length 78
+ 239 17:30:45.668528 IP6 10::2 > ff02::d: PIMv2, Hello, length 78
+ 240 17:30:45.684110 IP6 10::2 > ff02::d: PIMv2, Hello, length 74
+ 241 17:31:00.691792 IP6 10::2 > ff02::d: PIMv2, Hello, length 74
+ 242 17:31:15.702513 IP6 10::2 > 10::1: PIMv2, Hello, length 34
+ 243 17:31:30.708003 IP6 10::2 > 10::1: PIMv2, Hello, length 34
+ 244 17:31:45.717892 IP6 10::1 > ff02::d: PIMv2, Hello, length 78
+ 245 17:31:45.723603 IP6 10::1 > ff02::d: PIMv2, Hello, length 78
diff --git a/tests/pim-packet-assortment.pcap b/tests/pim-packet-assortment.pcap
new file mode 100644
index 0000000..ddb392d
--- /dev/null
+++ b/tests/pim-packet-assortment.pcap
Binary files differ
diff --git a/tests/pim_header_asan-2.out b/tests/pim_header_asan-2.out
new file mode 100644
index 0000000..ea39b05
--- /dev/null
+++ b/tests/pim_header_asan-2.out
@@ -0,0 +1,5 @@
+ 1 06:24:03.8916227 IP6 (class 0x76, flowlabel 0xf6767, hlim 109, next-header PIM (103) payload length: 13927) 6767:ff:ffff:ff67:6767:6778:6767:6767 > 6700:7f:e664:24:2424:2424:2424:25eb: PIMv2, length 13927
+ Register, RFC2117-encoding, cksum 0x4e23 (unverified), Flags [ none ]
+ [|pimv2]
+ 2 [Invalid header: caplen==0]
+ 3 [Invalid header: len==0]
diff --git a/tests/pim_header_asan-2.pcap b/tests/pim_header_asan-2.pcap
new file mode 100644
index 0000000..a1fdeb5
--- /dev/null
+++ b/tests/pim_header_asan-2.pcap
Binary files differ
diff --git a/tests/pim_header_asan-3.out b/tests/pim_header_asan-3.out
new file mode 100644
index 0000000..25764fe
--- /dev/null
+++ b/tests/pim_header_asan-3.out
@@ -0,0 +1,4 @@
+ 1 22:58:08.2294010 IP (tos 0x0, ttl 47, id 40445, offset 0, flags [+, DF, rsvd], proto PIM (103), length 8744, bad cksum a (->9c6e)!)
+ 22.3.2.7 > 54.0.0.249: PIMv2, length 8724
+ Register, cksum 0x0e00 (unverified), Flags [ none ]
+ [|pimv2]
diff --git a/tests/pim_header_asan-3.pcap b/tests/pim_header_asan-3.pcap
new file mode 100644
index 0000000..f676262
--- /dev/null
+++ b/tests/pim_header_asan-3.pcap
Binary files differ
diff --git a/tests/pim_header_asan-4.out b/tests/pim_header_asan-4.out
new file mode 100644
index 0000000..9974a09
--- /dev/null
+++ b/tests/pim_header_asan-4.out
@@ -0,0 +1,7 @@
+ 1 07:49:01.133910 IP6 (class 0x76, flowlabel 0xf6767, hlim 103, next-header PIM (103) payload length: 30209) 6767:6767::1:ff:ff00 > 4501:5:1400::1300:33ed:1ee: PIMv2, length 30209
+ Register, cksum 0x000f (unverified), Flags [ none ]
+ [|pimv2]
+ 2 11:48:16.1048861 7e:c0:c1:c0:a0:ff > 00:0c:fb:4d:20:96, ethertype Unknown (0x7f08), length 262144:
+ 0x0000: 0000 ..
+ 3 02:39:59.1048861 04:01:0b:00:00:d7 > 00:00:00:00:00:00, ethertype Unknown (0xffff), length 262144:
+ 0x0000: fd00 ..
diff --git a/tests/pim_header_asan-4.pcap b/tests/pim_header_asan-4.pcap
new file mode 100644
index 0000000..dc87309
--- /dev/null
+++ b/tests/pim_header_asan-4.pcap
Binary files differ
diff --git a/tests/pim_header_asan.out b/tests/pim_header_asan.out
new file mode 100644
index 0000000..eacdaff
--- /dev/null
+++ b/tests/pim_header_asan.out
@@ -0,0 +1,2 @@
+ 1 11:22:21.587271427 IP6 (class 0x76, flowlabel 0xf6767, hlim 109, next-header PIM (103) payload length: 30311) 6767:6767:6767:8267:6767:6765:6767:6767 > 6700:80:74:24:2424:2424:2424:2509: PIMv2, length 30311
+ Bootstrap, RFC2117-encoding [|pimv2]
diff --git a/tests/pim_header_asan.pcap b/tests/pim_header_asan.pcap
new file mode 100644
index 0000000..22cb1fc
--- /dev/null
+++ b/tests/pim_header_asan.pcap
Binary files differ
diff --git a/tests/pimv2-oobr-1.out b/tests/pimv2-oobr-1.out
new file mode 100644
index 0000000..7ecaff9
--- /dev/null
+++ b/tests/pimv2-oobr-1.out
@@ -0,0 +1,10 @@
+ 1 00:00:00.000000 c2:02:3d:80:00:01 > 01:00:5e:00:00:0d, ethertype IPv4 (0x0800), length 65535: (tos 0xc0, ttl 1, id 353, offset 0, flags [none], proto PIM (103), length 65521)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 65501
+ Hello, cksum 0x41fe (incorrect)
+ Hold Time Option (1), length 2, Value: 1m45s
+ 0x0000: 0069
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ 0x0000: d76f c4dc
+ DR Priority Option (19), length 4, Value: 1
+ 0x0000: 0000 0001
+ Generation ID Option (20), length 0, Value: [option length 0 != 4] (invalid)
diff --git a/tests/pimv2-oobr-1.pcap b/tests/pimv2-oobr-1.pcap
new file mode 100644
index 0000000..0d78acc
--- /dev/null
+++ b/tests/pimv2-oobr-1.pcap
Binary files differ
diff --git a/tests/pimv2-oobr-2.out b/tests/pimv2-oobr-2.out
new file mode 100644
index 0000000..6211cf3
--- /dev/null
+++ b/tests/pimv2-oobr-2.out
@@ -0,0 +1,29 @@
+ 1 00:00:00.000000 c2:02:52:72:00:00 > 01:00:5e:00:00:0d, ethertype IPv4 (0x0800), length 65535: (tos 0xc0, ttl 1, id 895, offset 0, flags [none], proto PIM (103), length 65521)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 65501
+ Hello, cksum 0xaa6e (incorrect)
+ Hold Time Option (1), length 2, Value: 1m45s
+ 0x0000: 0069
+ Generation ID Option (20), length 4, Value: 0x3f0ef4cd
+ 0x0000: 3f0e f4cd
+ DR Priority Option (19), length 4, Value: 1
+ 0x0000: 0000 0001
+ Unknown Option (0), length 256, Value:
+ 0x0000: 0001 0000 0100 0001 0000 0100 0001 0000
+ 0x0010: 0100 0001 0000 0100 0001 0000 0100 0001
+ 0x0020: 0000 0100 0001 0000 0100 0001 0000 0100
+ 0x0030: 0001 0000 0100 0001 0000 0100 0001 0000
+ 0x0040: 0100 0001 0000 0100 0001 0000 0100 0001
+ 0x0050: 0000 0100 0001 0000 0100 0001 0000 0100
+ 0x0060: 0001 0000 0100 0001 0000 0100 0002 0000
+ 0x0070: 0100 0001 0000 0100 0001 0000 0100 0001
+ 0x0080: 0000 0100 0001 0000 0100 0001 0000 0100
+ 0x0090: 0001 0000 0100 0001 0000 0100 0001 0000
+ 0x00a0: 0100 0001 0000 0100 0001 0000 0100 0001
+ 0x00b0: 0000 0100 0001 0000 0100 0001 0000 0100
+ 0x00c0: 0001 0000 0100 0001 0000 0100 0001 0000
+ 0x00d0: 0100 0001 0000 0100 0001 0000 0100 0001
+ 0x00e0: 0000 0100 0001 0000 0100 0001 0000 0100
+ 0x00f0: 0001 0000 0100 0001 0000 0100 0001 0000
+ Unknown Option (256), length 1, Value:
+ 0x0000: 00
+ Hold Time Option (1), length 0, Value: [option length 0 != 2] (invalid)
diff --git a/tests/pimv2-oobr-2.pcap b/tests/pimv2-oobr-2.pcap
new file mode 100644
index 0000000..320a277
--- /dev/null
+++ b/tests/pimv2-oobr-2.pcap
Binary files differ
diff --git a/tests/pimv2-oobr-3.out b/tests/pimv2-oobr-3.out
new file mode 100644
index 0000000..2b9277f
--- /dev/null
+++ b/tests/pimv2-oobr-3.out
@@ -0,0 +1,10 @@
+ 1 00:00:00.000000 c2:02:52:72:00:00 > 01:00:5e:00:00:0d, ethertype IPv4 (0x0800), length 65535: (tos 0xc0, ttl 1, id 927, offset 0, flags [none], proto PIM (103), length 65521)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 65501
+ Hello, cksum 0xaa6e (incorrect)
+ Hold Time Option (1), length 2, Value: 1m45s
+ 0x0000: 0069
+ Generation ID Option (20), length 4, Value: 0x3f0ef4cd
+ 0x0000: 3f0e f4cd
+ DR Priority Option (19), length 4, Value: 1
+ 0x0000: 0000 0001
+ State Refresh Capability Option (21), length 2, Value: [option length 2 != 4] (invalid)
diff --git a/tests/pimv2-oobr-3.pcap b/tests/pimv2-oobr-3.pcap
new file mode 100644
index 0000000..d0aba55
--- /dev/null
+++ b/tests/pimv2-oobr-3.pcap
Binary files differ
diff --git a/tests/pimv2-oobr-4.out b/tests/pimv2-oobr-4.out
new file mode 100644
index 0000000..83dfce2
--- /dev/null
+++ b/tests/pimv2-oobr-4.out
@@ -0,0 +1,10 @@
+ 1 00:00:00.000000 c2:02:52:72:00:00 > 01:00:5e:00:00:0d, ethertype IPv4 (0x0800), length 65535: (tos 0xc0, ttl 1, id 123, offset 0, flags [none], proto PIM (103), length 65521)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 65501
+ Hello, cksum 0x4fce (incorrect)
+ Hold Time Option (1), length 2, Value: 1m45s
+ 0x0000: 0069
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ 0x0000: d767 b714
+ Unknown Option (0), length 4, Value:
+ 0x0000: 0000 0001
+ State Refresh Capability Option (21), length 0, Value: [option length 0 != 4] (invalid)
diff --git a/tests/pimv2-oobr-4.pcap b/tests/pimv2-oobr-4.pcap
new file mode 100644
index 0000000..b3590a2
--- /dev/null
+++ b/tests/pimv2-oobr-4.pcap
Binary files differ
diff --git a/tests/pimv2_bootstrap-v.out b/tests/pimv2_bootstrap-v.out
new file mode 100644
index 0000000..3ca24ac
--- /dev/null
+++ b/tests/pimv2_bootstrap-v.out
@@ -0,0 +1,24 @@
+ 1 12:00:44.237771 IP (tos 0xc0, ttl 1, id 477, offset 0, flags [none], proto PIM (103), length 66)
+ 10.0.0.5 > 224.0.0.13: PIMv2, length 46
+ Bootstrap, cksum 0xe410 (correct) tag=4b0 hashmlen=0 BSRprio=0 BSR=1.1.1.1 (group0: 224.0.0.0/4 RPcnt=2 FRPcnt=2 RP0=2.2.2.2,holdtime=2m30s,prio=0 RP1=3.3.3.3,holdtime=2m30s,prio=0)
+ 2 12:00:48.338174 IP (tos 0xc0, ttl 255, id 433, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.6 > 1.1.1.1: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xee5e (correct) prefix-cnt=1 prio=0 holdtime=2m30s RP=3.3.3.3 Group0=224.0.0.0/4
+ 3 12:01:44.256450 IP (tos 0xc0, ttl 1, id 520, offset 0, flags [none], proto PIM (103), length 66)
+ 10.0.0.5 > 224.0.0.13: PIMv2, length 46
+ Bootstrap, cksum 0xdf74 (correct) tag=94c hashmlen=0 BSRprio=0 BSR=1.1.1.1 (group0: 224.0.0.0/4 RPcnt=2 FRPcnt=2 RP0=2.2.2.2,holdtime=2m30s,prio=0 RP1=3.3.3.3,holdtime=2m30s,prio=0)
+ 4 12:01:48.372867 IP (tos 0xc0, ttl 255, id 471, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.6 > 1.1.1.1: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xee5e (correct) prefix-cnt=1 prio=0 holdtime=2m30s RP=3.3.3.3 Group0=224.0.0.0/4
+ 5 12:02:44.323540 IP (tos 0xc0, ttl 1, id 563, offset 0, flags [none], proto PIM (103), length 66)
+ 10.0.0.5 > 224.0.0.13: PIMv2, length 46
+ Bootstrap, cksum 0xd555 (correct) tag=136b hashmlen=0 BSRprio=0 BSR=1.1.1.1 (group0: 224.0.0.0/4 RPcnt=2 FRPcnt=2 RP0=2.2.2.2,holdtime=2m30s,prio=0 RP1=3.3.3.3,holdtime=2m30s,prio=0)
+ 6 12:02:48.387562 IP (tos 0xc0, ttl 255, id 508, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.6 > 1.1.1.1: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xee5e (correct) prefix-cnt=1 prio=0 holdtime=2m30s RP=3.3.3.3 Group0=224.0.0.0/4
+ 7 12:03:44.349992 IP (tos 0xc0, ttl 1, id 606, offset 0, flags [none], proto PIM (103), length 66)
+ 10.0.0.5 > 224.0.0.13: PIMv2, length 46
+ Bootstrap, cksum 0xe3ab (correct) tag=515 hashmlen=0 BSRprio=0 BSR=1.1.1.1 (group0: 224.0.0.0/4 RPcnt=2 FRPcnt=2 RP0=2.2.2.2,holdtime=2m30s,prio=0 RP1=3.3.3.3,holdtime=2m30s,prio=0)
+ 8 12:03:48.378148 IP (tos 0xc0, ttl 255, id 547, offset 0, flags [none], proto PIM (103), length 42)
+ 10.0.0.6 > 1.1.1.1: PIMv2, length 22
+ Candidate RP Advertisement, cksum 0xee5e (correct) prefix-cnt=1 prio=0 holdtime=2m30s RP=3.3.3.3 Group0=224.0.0.0/4
diff --git a/tests/pimv2_dm-v.out b/tests/pimv2_dm-v.out
new file mode 100644
index 0000000..253317b
--- /dev/null
+++ b/tests/pimv2_dm-v.out
@@ -0,0 +1,238 @@
+ 1 11:24:49.507206 IP (tos 0xc0, ttl 1, id 121, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 2 11:24:51.235302 IP (tos 0xc0, ttl 1, id 115, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 3 11:25:18.248887 IP (tos 0x0, ttl 31, id 4621, offset 0, flags [none], proto UDP (17), length 1498)
+ 172.16.40.10.1064 > 239.123.123.123.5001: UDP, length 1470
+ 4 11:25:18.264929 IP (tos 0xc0, ttl 1, id 122, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Join / Prune, cksum 0x8fd8 (correct), upstream-neighbor: 10.0.0.1
+ 1 group(s), holdtime: 3m30s
+ group #1: 239.123.123.123, joined sources: 0, pruned sources: 1
+ pruned source #1: 172.16.40.10
+ 5 11:25:18.976928 IP (tos 0xc0, ttl 1, id 130, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 6 11:25:20.861148 IP (tos 0xc0, ttl 1, id 123, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 7 11:25:48.467092 IP (tos 0xc0, ttl 1, id 141, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 8 11:25:50.187220 IP (tos 0xc0, ttl 1, id 131, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 9 11:26:18.025108 IP (tos 0xc0, ttl 1, id 150, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 10 11:26:20.125308 IP (tos 0xc0, ttl 1, id 138, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 11 11:26:47.215142 IP (tos 0xc0, ttl 1, id 160, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 12 11:26:49.391607 IP (tos 0xc0, ttl 1, id 147, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 13 11:27:16.465250 IP (tos 0xc0, ttl 1, id 168, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 14 11:27:19.041483 IP (tos 0xc0, ttl 1, id 154, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 15 11:27:45.991368 IP (tos 0xc0, ttl 1, id 179, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 16 11:27:48.171581 IP (tos 0xc0, ttl 1, id 162, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 17 11:28:15.669486 IP (tos 0xc0, ttl 1, id 187, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 18 11:28:17.653642 IP (tos 0xc0, ttl 1, id 169, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 19 11:28:18.261679 IP (tos 0x0, ttl 31, id 4804, offset 0, flags [none], proto UDP (17), length 1498)
+ 172.16.40.10.1064 > 239.123.123.123.5001: UDP, length 1470
+ 20 11:28:19.229764 IP (tos 0x0, ttl 31, id 4805, offset 0, flags [none], proto UDP (17), length 1498)
+ 172.16.40.10.1064 > 239.123.123.123.5001: UDP, length 1470
+ 21 11:28:19.277777 IP (tos 0xc0, ttl 1, id 171, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Join / Prune, cksum 0x8fd8 (correct), upstream-neighbor: 10.0.0.1
+ 1 group(s), holdtime: 3m30s
+ group #1: 239.123.123.123, joined sources: 0, pruned sources: 1
+ pruned source #1: 172.16.40.10
+ 22 11:28:44.871635 IP (tos 0xc0, ttl 1, id 198, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 23 11:28:47.383857 IP (tos 0xc0, ttl 1, id 178, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 24 11:29:13.985819 IP (tos 0xc0, ttl 1, id 206, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 25 11:29:16.802018 IP (tos 0xc0, ttl 1, id 185, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 26 11:29:43.591980 IP (tos 0xc0, ttl 1, id 217, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 27 11:29:46.152176 IP (tos 0xc0, ttl 1, id 194, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 28 11:30:12.938093 IP (tos 0xc0, ttl 1, id 225, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 29 11:30:15.726324 IP (tos 0xc0, ttl 1, id 201, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 30 11:30:42.024271 IP (tos 0xc0, ttl 1, id 236, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 31 11:30:45.644614 IP (tos 0xc0, ttl 1, id 209, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 32 11:31:12.038371 IP (tos 0xc0, ttl 1, id 245, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 33 11:31:15.122666 IP (tos 0xc0, ttl 1, id 216, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 34 11:31:19.216941 IP (tos 0x0, ttl 31, id 4988, offset 0, flags [none], proto UDP (17), length 1498)
+ 172.16.40.10.1064 > 239.123.123.123.5001: UDP, length 1470
+ 35 11:31:20.227000 IP (tos 0x0, ttl 31, id 4989, offset 0, flags [none], proto UDP (17), length 1498)
+ 172.16.40.10.1064 > 239.123.123.123.5001: UDP, length 1470
+ 36 11:31:20.315065 IP (tos 0xc0, ttl 1, id 218, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Join / Prune, cksum 0x8fd8 (correct), upstream-neighbor: 10.0.0.1
+ 1 group(s), holdtime: 3m30s
+ group #1: 239.123.123.123, joined sources: 0, pruned sources: 1
+ pruned source #1: 172.16.40.10
+ 37 11:31:41.344525 IP (tos 0xc0, ttl 1, id 255, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb3eb (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76852f6
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 38 11:31:44.552814 IP (tos 0xc0, ttl 1, id 226, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x4fce (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd767b714
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
diff --git a/tests/pimv2_hellos-v.out b/tests/pimv2_hellos-v.out
new file mode 100644
index 0000000..8752b38
--- /dev/null
+++ b/tests/pimv2_hellos-v.out
@@ -0,0 +1,42 @@
+ 1 09:28:00.418966 IP (tos 0xc0, ttl 1, id 895, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xaa6e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0x3f0ef4cd
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 2 09:28:04.003125 IP (tos 0xc0, ttl 1, id 1093, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x6083 (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0x3ef93ece
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 3 09:28:30.093927 IP (tos 0xc0, ttl 1, id 912, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xaa6e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0x3f0ef4cd
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 4 09:28:33.742059 IP (tos 0xc0, ttl 1, id 1112, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x6083 (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0x3ef93ece
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 5 09:28:59.271605 IP (tos 0xc0, ttl 1, id 927, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.2 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xaa6e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0x3f0ef4cd
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 6 09:29:03.603836 IP (tos 0xc0, ttl 1, id 1129, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.1 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x6083 (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0x3ef93ece
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
diff --git a/tests/pimv2_register-v.out b/tests/pimv2_register-v.out
new file mode 100644
index 0000000..800781c
--- /dev/null
+++ b/tests/pimv2_register-v.out
@@ -0,0 +1,8 @@
+ 1 10:32:56.889022 IP (tos 0x0, ttl 255, id 350, offset 0, flags [none], proto PIM (103), length 128)
+ 192.168.0.6 > 192.168.1.254: PIMv2, length 108
+ Register, cksum 0xdeff (correct), Flags [ none ]
+ IP (tos 0x0, ttl 254, id 15, offset 0, flags [none], proto ICMP (1), length 100)
+ 192.168.20.10 > 239.1.2.3: ICMP echo request, id 3, seq 0, length 80
+ 2 10:32:57.054022 IP (tos 0xc0, ttl 255, id 642, offset 0, flags [none], proto PIM (103), length 38)
+ 192.168.1.254 > 192.168.0.6: PIMv2, length 18
+ Register Stop, cksum 0x1628 (correct) group=239.1.2.3 source=192.168.20.10
diff --git a/tests/pimv2_sm-v.out b/tests/pimv2_sm-v.out
new file mode 100644
index 0000000..729dc33
--- /dev/null
+++ b/tests/pimv2_sm-v.out
@@ -0,0 +1,300 @@
+ 1 06:57:52.145303 IP (tos 0xc0, ttl 1, id 130, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 2 06:57:52.809369 IP (tos 0xc0, ttl 1, id 129, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 3 06:58:02.994044 IP (tos 0xc0, ttl 1, id 139, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Join / Prune, cksum 0x5ae5 (correct), upstream-neighbor: 10.0.0.13
+ 1 group(s), holdtime: 3m30s
+ group #1: 239.123.123.123, joined sources: 1, pruned sources: 0
+ joined source #1: 1.1.1.1(SWR)
+ 4 06:58:21.507543 IP (tos 0xc0, ttl 1, id 150, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 5 06:58:22.315022 IP (tos 0xc0, ttl 1, id 146, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 6 06:58:51.500694 IP (tos 0xc0, ttl 1, id 169, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 7 06:58:51.548732 IP (tos 0xc0, ttl 1, id 163, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 8 06:59:01.317976 IP (tos 0xc0, ttl 1, id 175, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Join / Prune, cksum 0x5ae5 (correct), upstream-neighbor: 10.0.0.13
+ 1 group(s), holdtime: 3m30s
+ group #1: 239.123.123.123, joined sources: 1, pruned sources: 0
+ joined source #1: 1.1.1.1(SWR)
+ 9 06:59:20.870535 IP (tos 0xc0, ttl 1, id 186, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 10 06:59:21.414583 IP (tos 0xc0, ttl 1, id 179, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 11 06:59:33.191272 IP (tos 0xc0, ttl 1, id 186, offset 0, flags [none], proto IGMP (2), length 44)
+ 1.1.1.1 > 224.0.0.2: igmp pimv1 RP-reachable group 239.123.123.123 RP 1.1.1.1 hold 4m30s
+ 12 06:59:50.376254 IP (tos 0xc0, ttl 1, id 205, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 13 06:59:50.648871 IP (tos 0xc0, ttl 1, id 197, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 14 07:00:01.224934 IP (tos 0xc0, ttl 1, id 213, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Join / Prune, cksum 0x5ae5 (correct), upstream-neighbor: 10.0.0.13
+ 1 group(s), holdtime: 3m30s
+ group #1: 239.123.123.123, joined sources: 1, pruned sources: 0
+ joined source #1: 1.1.1.1(SWR)
+ 15 07:00:20.218579 IP (tos 0xc0, ttl 1, id 224, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 16 07:00:20.226601 IP (tos 0xc0, ttl 1, id 214, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 17 07:00:49.944357 IP (tos 0xc0, ttl 1, id 230, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 18 07:00:50.072355 IP (tos 0xc0, ttl 1, id 243, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 19 07:00:59.672391 IP (tos 0xc0, ttl 1, id 250, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Join / Prune, cksum 0x5ae5 (correct), upstream-neighbor: 10.0.0.13
+ 1 group(s), holdtime: 3m30s
+ group #1: 239.123.123.123, joined sources: 1, pruned sources: 0
+ joined source #1: 1.1.1.1(SWR)
+ 20 07:01:03.337108 IP (tos 0xc0, ttl 1, id 240, offset 0, flags [none], proto IGMP (2), length 44)
+ 1.1.1.1 > 224.0.0.2: igmp pimv1 RP-reachable group 239.123.123.123 RP 1.1.1.1 hold 4m30s
+ 21 07:01:19.770051 IP (tos 0xc0, ttl 1, id 250, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 22 07:01:19.938036 IP (tos 0xc0, ttl 1, id 261, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 23 07:01:49.087751 IP (tos 0xc0, ttl 1, id 280, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 24 07:01:49.231769 IP (tos 0xc0, ttl 1, id 266, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 25 07:01:58.735847 IP (tos 0xc0, ttl 1, id 287, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Join / Prune, cksum 0x5ae5 (correct), upstream-neighbor: 10.0.0.13
+ 1 group(s), holdtime: 3m30s
+ group #1: 239.123.123.123, joined sources: 1, pruned sources: 0
+ joined source #1: 1.1.1.1(SWR)
+ 26 07:02:18.649136 IP (tos 0xc0, ttl 1, id 300, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 27 07:02:18.945068 IP (tos 0xc0, ttl 1, id 285, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 28 07:02:33.485950 IP (tos 0xc0, ttl 1, id 292, offset 0, flags [none], proto IGMP (2), length 44)
+ 1.1.1.1 > 224.0.0.2: igmp pimv1 RP-reachable group 239.123.123.123 RP 1.1.1.1 hold 4m30s
+ 29 07:02:48.515439 IP (tos 0xc0, ttl 1, id 316, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 30 07:02:48.603341 IP (tos 0xc0, ttl 1, id 301, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 31 07:02:57.455847 IP (tos 0xc0, ttl 1, id 326, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Join / Prune, cksum 0x5ae5 (correct), upstream-neighbor: 10.0.0.13
+ 1 group(s), holdtime: 3m30s
+ group #1: 239.123.123.123, joined sources: 1, pruned sources: 0
+ joined source #1: 1.1.1.1(SWR)
+ 32 07:03:17.925048 IP (tos 0xc0, ttl 1, id 337, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 33 07:03:18.053082 IP (tos 0xc0, ttl 1, id 319, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 34 07:03:47.046253 IP (tos 0xc0, ttl 1, id 353, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 35 07:03:47.334300 IP (tos 0xc0, ttl 1, id 335, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 36 07:03:56.910879 IP (tos 0xc0, ttl 1, id 362, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Join / Prune, cksum 0x5ae5 (correct), upstream-neighbor: 10.0.0.13
+ 1 group(s), holdtime: 3m30s
+ group #1: 239.123.123.123, joined sources: 1, pruned sources: 0
+ joined source #1: 1.1.1.1(SWR)
+ 37 07:04:03.639355 IP (tos 0xc0, ttl 1, id 346, offset 0, flags [none], proto IGMP (2), length 44)
+ 1.1.1.1 > 224.0.0.2: igmp pimv1 RP-reachable group 239.123.123.123 RP 1.1.1.1 hold 4m30s
+ 38 07:04:16.199987 IP (tos 0xc0, ttl 1, id 374, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 39 07:04:16.488041 IP (tos 0xc0, ttl 1, id 354, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 40 07:04:45.714322 IP (tos 0xc0, ttl 1, id 390, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 41 07:04:46.186375 IP (tos 0xc0, ttl 1, id 372, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 42 07:04:56.018349 IP (tos 0xc0, ttl 1, id 399, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Join / Prune, cksum 0x5ae5 (correct), upstream-neighbor: 10.0.0.13
+ 1 group(s), holdtime: 3m30s
+ group #1: 239.123.123.123, joined sources: 1, pruned sources: 0
+ joined source #1: 1.1.1.1(SWR)
+ 43 07:05:15.416053 IP (tos 0xc0, ttl 1, id 412, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 44 07:05:15.824099 IP (tos 0xc0, ttl 1, id 388, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 45 07:05:26.200107 IP (tos 0xc0, ttl 1, id 420, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Join / Prune, cksum 0x5ae5 (correct), upstream-neighbor: 10.0.0.13
+ 1 group(s), holdtime: 3m30s
+ group #1: 239.123.123.123, joined sources: 0, pruned sources: 1
+ pruned source #1: 1.1.1.1(SWR)
+ 46 07:05:44.917811 IP (tos 0xc0, ttl 1, id 431, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.14 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0x41fe (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd76fc4dc
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
+ 47 07:05:45.085883 IP (tos 0xc0, ttl 1, id 404, offset 0, flags [none], proto PIM (103), length 54)
+ 10.0.0.13 > 224.0.0.13: PIMv2, length 34
+ Hello, cksum 0xb52e (correct)
+ Hold Time Option (1), length 2, Value: 1m45s
+ Generation ID Option (20), length 4, Value: 0xd77051ab
+ DR Priority Option (19), length 4, Value: 1
+ State Refresh Capability Option (21), length 4, Value: v1
diff --git a/tests/pktap-heap-overflow.out b/tests/pktap-heap-overflow.out
new file mode 100644
index 0000000..00440a2
--- /dev/null
+++ b/tests/pktap-heap-overflow.out
@@ -0,0 +1,2 @@
+ 1 05:27:35.808464432 (pkt_len too small, 0 < 108) (invalid)
+ 2 05:27:12.808595504 [|ppp_hdlc]
diff --git a/tests/pktap-heap-overflow.pcap b/tests/pktap-heap-overflow.pcap
new file mode 100644
index 0000000..3058b4e
--- /dev/null
+++ b/tests/pktap-heap-overflow.pcap
Binary files differ
diff --git a/tests/ppp-invalid-lengths.out b/tests/ppp-invalid-lengths.out
new file mode 100644
index 0000000..729c9ee
--- /dev/null
+++ b/tests/ppp-invalid-lengths.out
@@ -0,0 +1,751 @@
+ 1 20:31:09.16721442 IPCP, Conf-Nack (0x03), id 128, length 58454
+ encoded length 8451 (=Option(s) length 8447)
+ IP-Comp Option (0x02), length 218: IP Header Compression (0x61):
+ TCP Space 24929, non-TCP Space 24929, maxPeriod 25441, maxTime 24929, maxHdr 24953
+ Suboptions, length 204
+ Unknown Suboption #220, length 220 [remaining suboptions length 204 < 220] (invalid)
+ unknown Option (0x7b), length 123
+ 0x0000: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0010: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0020: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0030: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0040: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0050: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0060: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0070: 7b7b 7b7b 7b7b 7b7b 7b
+ unknown Option (0x7b), length 123
+ 0x0000: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0010: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0020: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0030: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0040: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0050: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0060: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0070: 7b7b 7b7b 7b7b 7b7b 7b
+ unknown Option (0x7b), length 123
+ 0x0000: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0010: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0020: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0030: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0040: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0050: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0060: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0070: 7b7b 7b7b 7b7b 7b7b 7b
+ unknown Option (0x7b), length 123
+ 0x0000: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0010: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0020: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0030: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0040: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0050: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0060: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0070: 7b7b 7b7b 7b7b 7b7b 7b
+ unknown Option (0x7b), length 123
+ 0x0000: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0010: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0020: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0030: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0040: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0050: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0060: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0070: 7b7b 7b7b 7b7b 7b7b 7b
+ unknown Option (0x7b), length 123
+ 0x0000: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0010: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b
+ 0x0020: 7b7b 7b7b 7b7b 7b7b 7b7b 7b7b 7b12 1212
+ 0x0030: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0040: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0050: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0060: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0070: 1212 1212 1212 1212 12
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 121d 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 2c12 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1200
+ unknown Option (0x00), length 4
+ 0x0000: 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 3d12 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1210 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 ff12 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 0000 0400 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 123d 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1012
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 e6e6 e6e6 e6e6 e612 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 12f6 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 11f9 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 7fff 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 127f
+ unknown Option (0xff), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1202 0012
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: fd12 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1264 0000 0012 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1292 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 255
+ 0x0000: ffff 7f12 1212 1212 1218 1212 484d 5f43
+ 0x0010: 544c 1212 1212 1212 1212 1212 1212 1212
+ 0x0020: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0030: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0040: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0050: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0060: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0070: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0080: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0090: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x00a0: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x00b0: 1212 1212 1212 1212 1212 1212 1212 12a0
+ 0x00c0: 0012 1212 1212 1212 1212 1212 1212 1212
+ 0x00d0: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x00e0: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x00f0: 1212 1212 1212 1212 1212 1212 12
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 12e6 e6e6 e6e6 e6e6
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 122f 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 12e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e67f ffe6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 1212 1212 1212 1212
+ 0x00d0: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x00e0: 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 2912 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1200 0000 4012
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 1212 1212 1212 1212 1212 1212 1212
+ unknown Option (0x12), length 18
+ 0x0000: 1212 12e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6ff e6e6 e6e6 e6e6 e6e6 e6e6 24e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e664 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e680 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 1212 1212 1212
+ 0x0070: 1212 1212 1212 1212 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e1e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0050: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0060: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0070: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0080: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0090: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00a0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00b0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00c0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00d0: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x00e0: e6e6 e6e6
+ unknown Option (0xe6), length 230
+ 0x0000: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0010: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0020: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0030: e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6 e6e6
+ 0x0040: e6e6 e6e6 e6e6 1212 1212 1212 1212 1212
+ 0x0050: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0060: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0070: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0080: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x0090: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x00a0: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x00b0: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x00c0: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x00d0: 1212 1212 1212 1212 1212 1212 1212 1212
+ 0x00e0: 1212 1212 [remaining options length 38 < 230] (invalid)
diff --git a/tests/ppp-invalid-lengths.pcap b/tests/ppp-invalid-lengths.pcap
new file mode 100644
index 0000000..5a4658e
--- /dev/null
+++ b/tests/ppp-invalid-lengths.pcap
Binary files differ
diff --git a/tests/ppp_ccp_config_deflate_option_asan.out b/tests/ppp_ccp_config_deflate_option_asan.out
new file mode 100644
index 0000000..ca47b86
--- /dev/null
+++ b/tests/ppp_ccp_config_deflate_option_asan.out
@@ -0,0 +1,3 @@
+ 1 06:58:21.4006871043 : CCP, Conf-Request (0x01), id 223, length 125685
+ encoded length 15 (=Option(s) length 11)
+ MVRCA Option (0x18), length 5 [|ppp]
diff --git a/tests/ppp_ccp_config_deflate_option_asan.pcap b/tests/ppp_ccp_config_deflate_option_asan.pcap
new file mode 100644
index 0000000..e3be3ee
--- /dev/null
+++ b/tests/ppp_ccp_config_deflate_option_asan.pcap
Binary files differ
diff --git a/tests/pppoe.out b/tests/pppoe.out
new file mode 100644
index 0000000..9a67b7d
--- /dev/null
+++ b/tests/pppoe.out
@@ -0,0 +1 @@
+ 1 16:37:21.568643 PPPoE PADI [Service-Name] [PPP-Max-Payload 0x05DC] [Host-Uniq 0x16372C16]
diff --git a/tests/pppoe.pcap b/tests/pppoe.pcap
new file mode 100644
index 0000000..3296174
--- /dev/null
+++ b/tests/pppoe.pcap
Binary files differ
diff --git a/tests/pppoes.out b/tests/pppoes.out
new file mode 100644
index 0000000..1bd9e70
--- /dev/null
+++ b/tests/pppoes.out
@@ -0,0 +1,2 @@
+ 1 14:46:11.554753 PPPoE [ses 0x17] LCP, Echo-Request (0x09), id 106, length 14
+ 2 14:46:12.322723 PPPoE [ses 0x3b] LCP, Echo-Request (0x09), id 103, length 14
diff --git a/tests/pppoes.pcap b/tests/pppoes.pcap
new file mode 100644
index 0000000..a2c7698
--- /dev/null
+++ b/tests/pppoes.pcap
Binary files differ
diff --git a/tests/pppoes_id.out b/tests/pppoes_id.out
new file mode 100644
index 0000000..71b0976
--- /dev/null
+++ b/tests/pppoes_id.out
@@ -0,0 +1 @@
+ 1 14:46:12.322723 PPPoE [ses 0x3b] LCP, Echo-Request (0x09), id 103, length 14
diff --git a/tests/pptp-v.out b/tests/pptp-v.out
new file mode 100644
index 0000000..843dbb3
--- /dev/null
+++ b/tests/pptp-v.out
@@ -0,0 +1,54 @@
+ 1 08:56:35.148077 IP (tos 0x0, ttl 128, id 951, offset 0, flags [DF], proto TCP (6), length 48)
+ 10.1.1.11.3025 > 10.1.1.10.1723: Flags [S], cksum 0x531d (correct), seq 3648253419, win 16384, options [mss 1460,nop,nop,sackOK], length 0
+ 2 08:56:35.148207 IP (tos 0x0, ttl 64, id 20404, offset 0, flags [DF], proto TCP (6), length 48)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [S.], cksum 0x6a5e (correct), seq 2339250119, ack 3648253420, win 32120, options [mss 1460,nop,nop,sackOK], length 0
+ 3 08:56:35.148313 IP (tos 0x0, ttl 64, id 20404, offset 0, flags [DF], proto TCP (6), length 48)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [S.], cksum 0x6a5e (correct), seq 2339250119, ack 3648253420, win 32120, options [mss 1460,nop,nop,sackOK], length 0
+ 4 08:56:35.148666 IP (tos 0x0, ttl 128, id 952, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.1.1.11.3025 > 10.1.1.10.1723: Flags [.], cksum 0xd02a (correct), ack 1, win 17520, length 0
+ 5 08:56:35.148886 IP (tos 0x0, ttl 128, id 953, offset 0, flags [DF], proto TCP (6), length 196)
+ 10.1.1.11.3025 > 10.1.1.10.1723: Flags [P.], cksum 0x746e (correct), seq 1:157, ack 1, win 17520, length 156: pptp Length=156 CTRL-MSG Magic-Cookie=1a2b3c4d CTRL_MSGTYPE=SCCRQ PROTO_VER(1.0) FRAME_CAP(A) BEARER_CAP(A) MAX_CHAN(0) FIRM_REV(2160) HOSTNAME() VENDOR(Microsoft Windows NT)
+ 6 08:56:35.148956 IP (tos 0x0, ttl 64, id 20405, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], cksum 0x9686 (correct), ack 157, win 32120, length 0
+ 7 08:56:35.149056 IP (tos 0x0, ttl 64, id 20405, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], cksum 0x9686 (correct), ack 157, win 32120, length 0
+ 8 08:56:35.217355 IP (tos 0x0, ttl 64, id 20406, offset 0, flags [DF], proto TCP (6), length 196)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [P.], cksum 0xfcf7 (correct), seq 1:157, ack 157, win 32120, length 156: pptp Length=156 CTRL-MSG Magic-Cookie=1a2b3c4d CTRL_MSGTYPE=SCCRP PROTO_VER(1.0) RESULT_CODE(1:Successful channel establishment) ERR_CODE(0:None) FRAME_CAP() BEARER_CAP() MAX_CHAN(1) FIRM_REV(1) HOSTNAME(local) VENDOR(MoretonBay)
+ 9 08:56:35.217591 IP (tos 0x0, ttl 64, id 20406, offset 0, flags [DF], proto TCP (6), length 196)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [P.], cksum 0xfcf7 (correct), seq 1:157, ack 157, win 32120, length 156: pptp Length=156 CTRL-MSG Magic-Cookie=1a2b3c4d CTRL_MSGTYPE=SCCRP PROTO_VER(1.0) RESULT_CODE(1:Successful channel establishment) ERR_CODE(0:None) FRAME_CAP() BEARER_CAP() MAX_CHAN(1) FIRM_REV(1) HOSTNAME(local) VENDOR(MoretonBay)
+ 10 08:56:35.218221 IP (tos 0x0, ttl 128, id 954, offset 0, flags [DF], proto TCP (6), length 208)
+ 10.1.1.11.3025 > 10.1.1.10.1723: Flags [P.], cksum 0x1726 (correct), seq 157:325, ack 157, win 17364, length 168: pptp Length=168 CTRL-MSG Magic-Cookie=1a2b3c4d CTRL_MSGTYPE=OCRQ CALL_ID(0) CALL_SER_NUM(30760) MIN_BPS(300) MAX_BPS(100000000) BEARER_TYPE(Any) FRAME_TYPE(E) RECV_WIN(64) PROC_DELAY(0) PHONE_NO_LEN(0) PHONE_NO() SUB_ADDR()
+ 11 08:56:35.232225 IP (tos 0x0, ttl 64, id 20407, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], cksum 0x9542 (correct), ack 325, win 32120, length 0
+ 12 08:56:35.232337 IP (tos 0x0, ttl 64, id 20407, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], cksum 0x9542 (correct), ack 325, win 32120, length 0
+ 13 08:56:35.387060 IP (tos 0x0, ttl 64, id 20408, offset 0, flags [DF], proto TCP (6), length 72)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [P.], cksum 0x5643 (correct), seq 157:189, ack 325, win 32120, length 32: pptp Length=32 CTRL-MSG Magic-Cookie=1a2b3c4d CTRL_MSGTYPE=OCRP CALL_ID(0) PEER_CALL_ID(0) RESULT_CODE(1:Connected) ERR_CODE(0:None) CAUSE_CODE(0) CONN_SPEED(100000000) RECV_WIN(64) PROC_DELAY(0) PHY_CHAN_ID(0)
+ 14 08:56:35.387196 IP (tos 0x0, ttl 64, id 20408, offset 0, flags [DF], proto TCP (6), length 72)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [P.], cksum 0x5643 (correct), seq 157:189, ack 325, win 32120, length 32: pptp Length=32 CTRL-MSG Magic-Cookie=1a2b3c4d CTRL_MSGTYPE=OCRP CALL_ID(0) PEER_CALL_ID(0) RESULT_CODE(1:Connected) ERR_CODE(0:None) CAUSE_CODE(0) CONN_SPEED(100000000) RECV_WIN(64) PROC_DELAY(0) PHY_CHAN_ID(0)
+ 15 08:56:35.395885 IP (tos 0x0, ttl 128, id 955, offset 0, flags [DF], proto TCP (6), length 64)
+ 10.1.1.11.3025 > 10.1.1.10.1723: Flags [P.], cksum 0x7826 (correct), seq 325:349, ack 189, win 17332, length 24: pptp Length=24 CTRL-MSG Magic-Cookie=1a2b3c4d CTRL_MSGTYPE=SLI PEER_CALL_ID(0) SEND_ACCM(0xffffffff) RECV_ACCM(0xffffffff)
+ 16 08:56:35.411903 IP (tos 0x0, ttl 128, id 956, offset 0, flags [none], proto GRE (47), length 80)
+ 10.1.1.11 > 10.1.1.10: GREv1, Flags [key present, sequence# present], call 0, seq 0, length 60
+ LCP, Conf-Request (0x01), id 0, length 46
+ encoded length 44 (=Option(s) length 40)
+ Magic-Num Option (0x05), length 6: 0x021952cf
+ PFC Option (0x07), length 2
+ ACFC Option (0x08), length 2
+ Call-Back Option (0x0d), length 3: : Callback Operation CBCP (6)
+ MRRU Option (0x11), length 4: 1614
+ End-Disc Option (0x13), length 23: Local
+ 17 08:56:35.412217 IP (tos 0x0, ttl 64, id 20409, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], cksum 0x950a (correct), ack 349, win 32120, length 0
+ 18 08:56:35.412318 IP (tos 0x0, ttl 64, id 20409, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], cksum 0x950a (correct), ack 349, win 32120, length 0
+ 19 08:56:36.347146 IP (tos 0x0, ttl 64, id 20410, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [F.], cksum 0x9509 (correct), seq 189, ack 349, win 32120, length 0
+ 20 08:56:36.347265 IP (tos 0x0, ttl 64, id 20410, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [F.], cksum 0x9509 (correct), seq 189, ack 349, win 32120, length 0
+ 21 08:56:36.347587 IP (tos 0x0, ttl 128, id 957, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.1.1.11.3025 > 10.1.1.10.1723: Flags [F.], cksum 0xcecc (correct), seq 349, ack 190, win 17332, length 0
+ 22 08:56:36.347676 IP (tos 0x0, ttl 64, id 20411, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], cksum 0x9508 (correct), ack 350, win 32120, length 0
+ 23 08:56:36.347775 IP (tos 0x0, ttl 64, id 20411, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], cksum 0x9508 (correct), ack 350, win 32120, length 0
diff --git a/tests/pptp.out b/tests/pptp.out
new file mode 100644
index 0000000..7fd74e4
--- /dev/null
+++ b/tests/pptp.out
@@ -0,0 +1,23 @@
+ 1 08:56:35.148077 IP 10.1.1.11.3025 > 10.1.1.10.1723: Flags [S], seq 3648253419, win 16384, options [mss 1460,nop,nop,sackOK], length 0
+ 2 08:56:35.148207 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [S.], seq 2339250119, ack 3648253420, win 32120, options [mss 1460,nop,nop,sackOK], length 0
+ 3 08:56:35.148313 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [S.], seq 2339250119, ack 3648253420, win 32120, options [mss 1460,nop,nop,sackOK], length 0
+ 4 08:56:35.148666 IP 10.1.1.11.3025 > 10.1.1.10.1723: Flags [.], ack 1, win 17520, length 0
+ 5 08:56:35.148886 IP 10.1.1.11.3025 > 10.1.1.10.1723: Flags [P.], seq 1:157, ack 1, win 17520, length 156: pptp CTRL_MSGTYPE=SCCRQ PROTO_VER(1.0) FRAME_CAP(A) BEARER_CAP(A) MAX_CHAN(0) FIRM_REV(2160) HOSTNAME() VENDOR(Microsoft Windows NT)
+ 6 08:56:35.148956 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], ack 157, win 32120, length 0
+ 7 08:56:35.149056 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], ack 157, win 32120, length 0
+ 8 08:56:35.217355 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [P.], seq 1:157, ack 157, win 32120, length 156: pptp CTRL_MSGTYPE=SCCRP PROTO_VER(1.0) RESULT_CODE(1) ERR_CODE(0) FRAME_CAP() BEARER_CAP() MAX_CHAN(1) FIRM_REV(1) HOSTNAME(local) VENDOR(MoretonBay)
+ 9 08:56:35.217591 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [P.], seq 1:157, ack 157, win 32120, length 156: pptp CTRL_MSGTYPE=SCCRP PROTO_VER(1.0) RESULT_CODE(1) ERR_CODE(0) FRAME_CAP() BEARER_CAP() MAX_CHAN(1) FIRM_REV(1) HOSTNAME(local) VENDOR(MoretonBay)
+ 10 08:56:35.218221 IP 10.1.1.11.3025 > 10.1.1.10.1723: Flags [P.], seq 157:325, ack 157, win 17364, length 168: pptp CTRL_MSGTYPE=OCRQ CALL_ID(0) CALL_SER_NUM(30760) MIN_BPS(300) MAX_BPS(100000000) BEARER_TYPE(Any) FRAME_TYPE(E) RECV_WIN(64) PROC_DELAY(0) PHONE_NO_LEN(0) PHONE_NO() SUB_ADDR()
+ 11 08:56:35.232225 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], ack 325, win 32120, length 0
+ 12 08:56:35.232337 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], ack 325, win 32120, length 0
+ 13 08:56:35.387060 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [P.], seq 157:189, ack 325, win 32120, length 32: pptp CTRL_MSGTYPE=OCRP CALL_ID(0) PEER_CALL_ID(0) RESULT_CODE(1) ERR_CODE(0) CAUSE_CODE(0) CONN_SPEED(100000000) RECV_WIN(64) PROC_DELAY(0) PHY_CHAN_ID(0)
+ 14 08:56:35.387196 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [P.], seq 157:189, ack 325, win 32120, length 32: pptp CTRL_MSGTYPE=OCRP CALL_ID(0) PEER_CALL_ID(0) RESULT_CODE(1) ERR_CODE(0) CAUSE_CODE(0) CONN_SPEED(100000000) RECV_WIN(64) PROC_DELAY(0) PHY_CHAN_ID(0)
+ 15 08:56:35.395885 IP 10.1.1.11.3025 > 10.1.1.10.1723: Flags [P.], seq 325:349, ack 189, win 17332, length 24: pptp CTRL_MSGTYPE=SLI PEER_CALL_ID(0) SEND_ACCM(0xffffffff) RECV_ACCM(0xffffffff)
+ 16 08:56:35.411903 IP 10.1.1.11 > 10.1.1.10: GREv1, call 0, seq 0, length 60: LCP, Conf-Request (0x01), id 0, length 46
+ 17 08:56:35.412217 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], ack 349, win 32120, length 0
+ 18 08:56:35.412318 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], ack 349, win 32120, length 0
+ 19 08:56:36.347146 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [F.], seq 189, ack 349, win 32120, length 0
+ 20 08:56:36.347265 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [F.], seq 189, ack 349, win 32120, length 0
+ 21 08:56:36.347587 IP 10.1.1.11.3025 > 10.1.1.10.1723: Flags [F.], seq 349, ack 190, win 17332, length 0
+ 22 08:56:36.347676 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], ack 350, win 32120, length 0
+ 23 08:56:36.347775 IP 10.1.1.10.1723 > 10.1.1.11.3025: Flags [.], ack 350, win 32120, length 0
diff --git a/tests/pptp.pcap b/tests/pptp.pcap
new file mode 100644
index 0000000..b330905
--- /dev/null
+++ b/tests/pptp.pcap
Binary files differ
diff --git a/tests/print-A.out b/tests/print-A.out
new file mode 100644
index 0000000..1caf30c
--- /dev/null
+++ b/tests/print-A.out
@@ -0,0 +1,193 @@
+ 1 03:57:35.938066 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [S], seq 928549246, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 0,nop,wscale 2], length 0
+E..<.h@.@.!R.........p.P7X.~.........!....@....
+M...........
+ 2 03:57:35.938122 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [S.], seq 930778609, ack 928549247, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 1306300950,nop,wscale 2], length 0
+E..<..@.@.<..........P.p7z..7X......n.....@....
+M...M.......
+ 3 03:57:35.938167 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 1, win 8192, options [nop,nop,TS val 1306300950 ecr 1306300950], length 0
+E..4.j@.@.!X.........p.P7X..7z.... .7......
+M...M...
+ 4 03:57:35.939423 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [P.], seq 1:203, ack 1, win 8192, options [nop,nop,TS val 1306300951 ecr 1306300950], length 202: HTTP: GET / HTTP/1.1
+E....l@.@. ..........p.P7X..7z.... ........
+M...M...GET / HTTP/1.1
+Host: localhost
+User-Agent: ELinks/0.10.4-7-debian (textmode; Linux 2.6.11-1-686-smp i686; 132x56-2)
+Accept: */*
+Accept-Encoding: gzip
+Accept-Language: en
+Connection: Keep-Alive
+
+
+ 5 03:57:35.940474 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [.], ack 203, win 8192, options [nop,nop,TS val 1306300952 ecr 1306300951], length 0
+E..4..@.@............P.p7z..7X.I.. .7......
+M...M...
+ 6 03:57:35.941232 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [P.], seq 1:5560, ack 203, win 8192, options [nop,nop,TS val 1306300953 ecr 1306300951], length 5559: HTTP: HTTP/1.1 200 OK
+E.....@.@..%.........P.p7z..7X.I.. ........
+M...M...HTTP/1.1 200 OK
+Date: Wed, 06 Jul 2005 03:57:35 GMT
+Server: Apache/1.3.33
+Last-Modified: Sun, 15 Aug 2004 00:43:41 GMT
+ETag: "6e80f0-148a-411eb1bd"
+Accept-Ranges: bytes
+Content-Length: 5258
+Keep-Alive: timeout=15, max=100
+Connection: Keep-Alive
+Content-Type: text/html; charset=iso-8859-1
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+ <META NAME="Description" CONTENT="The initial installation of Debian apache.">
+ <TITLE>Placeholder page</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#55188A" ALINK="#FF0000">
+
+<H1>Placeholder page</H1>
+<H2>If you are just browsing the web</h2>
+
+<P>The owner of this web site has not put up any web pages yet.
+Please come back later.</P>
+
+<P><SMALL><CITE>Move along, nothing to see here...</CITE> :-)</SMALL></P>
+
+<H2>If you are trying to locate the administrator of this machine</H2>
+
+<P>If you want to report something about this host's behavior, please
+contact the Internet Service Provider (ISP) involved directly.</P>
+
+<P>See the <A href="http://www.abuse.net/">Network Abuse
+Clearinghouse</A> for how to do this.</P>
+
+<H2>If you are the administrator of this machine</H2>
+
+<P>The initial installation of <A href="http://www.debian.org/">Debian's
+apache</A> web server package was successful.</P>
+
+<P><STRONG>You should replace this page with your own web pages as
+soon as possible.</STRONG></P>
+
+<P>Unless you changed its configuration, your new server is configured as follows:
+<UL>
+<LI>
+Configuration files can be found in <TT>/etc/apache</TT>.</LI>
+
+<LI>
+The <TT>DocumentRoot</TT>, which is the directory under which all your
+HTML files should exist, is set to <TT>/var/www</TT>.</LI>
+
+<LI>
+CGI scripts are looked for in <TT>/usr/lib/cgi-bin</TT>, which is where
+Debian packages will place their scripts.</LI>
+
+<LI>
+Log files are placed in <TT>/var/log/apache</TT>, and will be rotated
+weekly. The frequency of rotation can be easily changed by editing
+<TT>/etc/logrotate.d/apache</TT>.</LI>
+
+<LI>
+The default directory index is <TT>index.html</TT>, meaning that requests
+for a directory <TT>/foo/bar/</TT> will give the contents of the file <TT>/var/www/foo/bar/index.html</TT>
+if it exists (assuming that <TT>/var/www</TT> is your <TT>DocumentRoot</TT>).</LI>
+
+<LI>
+User directories are enabled, and user documents will be looked for
+in the <TT>public_html</TT> directory of the users' homes. These dirs
+should be under <TT>/home</TT>, and users will not be able to symlink
+to files they don't own.</LI>
+
+</UL>
+All the standard apache modules are available with this release and are
+now managed with debconf. Type <TT>dpkg-reconfigure apache</TT> to
+select which modules you want enabled. Many other modules are available
+through the Debian package system with the names <TT>libapache-mod-*</TT>.
+If you need to compile a module yourself, you will need to install the
+<TT>apache-dev</TT> package.
+
+<P>More documentation on Apache can be found on:
+<UL>
+<LI>
+The <A HREF="/doc/apache-doc/manual/">Apache documentation</A> stored on your server.</LI>
+
+<LI>
+The <A HREF="http://www.apache.org/">Apache Project</A> home site.</LI>
+
+<LI>
+The <A HREF="http://www.apache-ssl.org/">Apache-SSL</A> home site.</LI>
+
+<LI>
+The <A HREF="http://perl.apache.org/">mod perl</A> home site.</LI>
+
+<LI>
+The <A HREF="http://www.apacheweek.com/">ApacheWeek</A> newsletter.</LI>
+
+<LI>
+The <A HREF="http://www.debian.org/doc/">Debian Project
+Documentation</A> which contains HOWTOs, FAQs, and software updates.</LI>
+</UL>
+
+<P>You can also consult the list of <A HREF="http://www.boutell.com/faq/">World
+Wide Web Frequently Asked Questions</A> for information.
+
+<H2>Let other people know about this server</H2>
+
+<A HREF="http://netcraft.com/">Netcraft</A> provides an interesting free
+service for web site monitoring and statistic collection.
+You can let them know about your server using their
+<A HREF="http://uptime.netcraft.com/">interface</A>.
+Enabling the monitoring of your server will provide a better global overview
+of who is using what and where, and it would give Debian a better
+overview of the apache package usage.
+
+<H2>About this page</H2>
+
+<IMG ALIGN="right" ALT="" HEIGHT="247" WIDTH="278" SRC="icons/jhe061.png">
+
+<P>This is a placeholder page installed by the <A
+HREF="http://www.debian.org/">Debian</A>
+release of the apache Web server package.
+
+<P>This computer has installed the Debian GNU/Linux operating system,
+but it has <strong>nothing to do with the Debian
+Project</strong>. Please do <strong>not</strong> contact the Debian
+Project about it.</P>
+
+<P>If you find a bug in this apache package, or in Apache itself,
+please file a bug report on it. Instructions on doing this, and the
+list of <A HREF="http://bugs.debian.org/src:apache">known bugs</A> of this
+package, can be found in the
+<A HREF="http://www.debian.org/Bugs/Reporting">Debian Bug Tracking System</A>.
+
+<P>Thanks for using this package, and congratulations for your choice of
+a Debian system!</P>
+
+<DIV align="center">
+<a href="http://www.debian.org/">
+<IMG align="middle" height="30" width="25" src="icons/debian/openlogo-25.jpg" alt="Debian">
+</a>
+<a href="http://www.apache.org/">
+<IMG align="middle" height="32" width="259" src="icons/apache_pb.png" alt="Apache">
+</a>
+</DIV>
+
+<!--
+ This page was initially created by Johnie Ingram (http://netgod.net/)
+ It was later edited by Matthew Wilcox and Josip Rodin.
+ Last modified: $Date: 2004/06/20 15:33:57 $.
+ -->
+
+</BODY>
+</HTML>
+
+ 7 03:57:35.941260 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5560, win 12383, options [nop,nop,TS val 1306300953 ecr 1306300953], length 0
+E..4.n@.@.!T.........p.P7X.I7z....0_.......
+M...M...
+ 8 03:57:37.229575 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [F.], seq 203, ack 5560, win 12383, options [nop,nop,TS val 1306302241 ecr 1306300953], length 0
+E..4.p@.@.!R.........p.P7X.I7z....0_.......
+M..!M...
+ 9 03:57:37.230839 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [F.], seq 5560, ack 204, win 8192, options [nop,nop,TS val 1306302243 ecr 1306302241], length 0
+E..4..@.@............P.p7z..7X.J.. ..5.....
+M..#M..!
+ 10 03:57:37.230900 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5561, win 12383, options [nop,nop,TS val 1306302243 ecr 1306302243], length 0
+E..4.r@.@.!P.........p.P7X.J7z....0_.......
+M..#M..#
diff --git a/tests/print-AA.out b/tests/print-AA.out
new file mode 100644
index 0000000..ad11b46
--- /dev/null
+++ b/tests/print-AA.out
@@ -0,0 +1,193 @@
+ 1 03:57:35.938066 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [S], seq 928549246, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 0,nop,wscale 2], length 0
+..............E..<.h@.@.!R.........p.P7X.~.........!....@....
+M...........
+ 2 03:57:35.938122 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [S.], seq 930778609, ack 928549247, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 1306300950,nop,wscale 2], length 0
+..............E..<..@.@.<..........P.p7z..7X......n.....@....
+M...M.......
+ 3 03:57:35.938167 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 1, win 8192, options [nop,nop,TS val 1306300950 ecr 1306300950], length 0
+..............E..4.j@.@.!X.........p.P7X..7z.... .7......
+M...M...
+ 4 03:57:35.939423 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [P.], seq 1:203, ack 1, win 8192, options [nop,nop,TS val 1306300951 ecr 1306300950], length 202: HTTP: GET / HTTP/1.1
+..............E....l@.@. ..........p.P7X..7z.... ........
+M...M...GET / HTTP/1.1
+Host: localhost
+User-Agent: ELinks/0.10.4-7-debian (textmode; Linux 2.6.11-1-686-smp i686; 132x56-2)
+Accept: */*
+Accept-Encoding: gzip
+Accept-Language: en
+Connection: Keep-Alive
+
+
+ 5 03:57:35.940474 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [.], ack 203, win 8192, options [nop,nop,TS val 1306300952 ecr 1306300951], length 0
+..............E..4..@.@............P.p7z..7X.I.. .7......
+M...M...
+ 6 03:57:35.941232 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [P.], seq 1:5560, ack 203, win 8192, options [nop,nop,TS val 1306300953 ecr 1306300951], length 5559: HTTP: HTTP/1.1 200 OK
+..............E.....@.@..%.........P.p7z..7X.I.. ........
+M...M...HTTP/1.1 200 OK
+Date: Wed, 06 Jul 2005 03:57:35 GMT
+Server: Apache/1.3.33
+Last-Modified: Sun, 15 Aug 2004 00:43:41 GMT
+ETag: "6e80f0-148a-411eb1bd"
+Accept-Ranges: bytes
+Content-Length: 5258
+Keep-Alive: timeout=15, max=100
+Connection: Keep-Alive
+Content-Type: text/html; charset=iso-8859-1
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+ <META NAME="Description" CONTENT="The initial installation of Debian apache.">
+ <TITLE>Placeholder page</TITLE>
+</HEAD>
+<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#55188A" ALINK="#FF0000">
+
+<H1>Placeholder page</H1>
+<H2>If you are just browsing the web</h2>
+
+<P>The owner of this web site has not put up any web pages yet.
+Please come back later.</P>
+
+<P><SMALL><CITE>Move along, nothing to see here...</CITE> :-)</SMALL></P>
+
+<H2>If you are trying to locate the administrator of this machine</H2>
+
+<P>If you want to report something about this host's behavior, please
+contact the Internet Service Provider (ISP) involved directly.</P>
+
+<P>See the <A href="http://www.abuse.net/">Network Abuse
+Clearinghouse</A> for how to do this.</P>
+
+<H2>If you are the administrator of this machine</H2>
+
+<P>The initial installation of <A href="http://www.debian.org/">Debian's
+apache</A> web server package was successful.</P>
+
+<P><STRONG>You should replace this page with your own web pages as
+soon as possible.</STRONG></P>
+
+<P>Unless you changed its configuration, your new server is configured as follows:
+<UL>
+<LI>
+Configuration files can be found in <TT>/etc/apache</TT>.</LI>
+
+<LI>
+The <TT>DocumentRoot</TT>, which is the directory under which all your
+HTML files should exist, is set to <TT>/var/www</TT>.</LI>
+
+<LI>
+CGI scripts are looked for in <TT>/usr/lib/cgi-bin</TT>, which is where
+Debian packages will place their scripts.</LI>
+
+<LI>
+Log files are placed in <TT>/var/log/apache</TT>, and will be rotated
+weekly. The frequency of rotation can be easily changed by editing
+<TT>/etc/logrotate.d/apache</TT>.</LI>
+
+<LI>
+The default directory index is <TT>index.html</TT>, meaning that requests
+for a directory <TT>/foo/bar/</TT> will give the contents of the file <TT>/var/www/foo/bar/index.html</TT>
+if it exists (assuming that <TT>/var/www</TT> is your <TT>DocumentRoot</TT>).</LI>
+
+<LI>
+User directories are enabled, and user documents will be looked for
+in the <TT>public_html</TT> directory of the users' homes. These dirs
+should be under <TT>/home</TT>, and users will not be able to symlink
+to files they don't own.</LI>
+
+</UL>
+All the standard apache modules are available with this release and are
+now managed with debconf. Type <TT>dpkg-reconfigure apache</TT> to
+select which modules you want enabled. Many other modules are available
+through the Debian package system with the names <TT>libapache-mod-*</TT>.
+If you need to compile a module yourself, you will need to install the
+<TT>apache-dev</TT> package.
+
+<P>More documentation on Apache can be found on:
+<UL>
+<LI>
+The <A HREF="/doc/apache-doc/manual/">Apache documentation</A> stored on your server.</LI>
+
+<LI>
+The <A HREF="http://www.apache.org/">Apache Project</A> home site.</LI>
+
+<LI>
+The <A HREF="http://www.apache-ssl.org/">Apache-SSL</A> home site.</LI>
+
+<LI>
+The <A HREF="http://perl.apache.org/">mod perl</A> home site.</LI>
+
+<LI>
+The <A HREF="http://www.apacheweek.com/">ApacheWeek</A> newsletter.</LI>
+
+<LI>
+The <A HREF="http://www.debian.org/doc/">Debian Project
+Documentation</A> which contains HOWTOs, FAQs, and software updates.</LI>
+</UL>
+
+<P>You can also consult the list of <A HREF="http://www.boutell.com/faq/">World
+Wide Web Frequently Asked Questions</A> for information.
+
+<H2>Let other people know about this server</H2>
+
+<A HREF="http://netcraft.com/">Netcraft</A> provides an interesting free
+service for web site monitoring and statistic collection.
+You can let them know about your server using their
+<A HREF="http://uptime.netcraft.com/">interface</A>.
+Enabling the monitoring of your server will provide a better global overview
+of who is using what and where, and it would give Debian a better
+overview of the apache package usage.
+
+<H2>About this page</H2>
+
+<IMG ALIGN="right" ALT="" HEIGHT="247" WIDTH="278" SRC="icons/jhe061.png">
+
+<P>This is a placeholder page installed by the <A
+HREF="http://www.debian.org/">Debian</A>
+release of the apache Web server package.
+
+<P>This computer has installed the Debian GNU/Linux operating system,
+but it has <strong>nothing to do with the Debian
+Project</strong>. Please do <strong>not</strong> contact the Debian
+Project about it.</P>
+
+<P>If you find a bug in this apache package, or in Apache itself,
+please file a bug report on it. Instructions on doing this, and the
+list of <A HREF="http://bugs.debian.org/src:apache">known bugs</A> of this
+package, can be found in the
+<A HREF="http://www.debian.org/Bugs/Reporting">Debian Bug Tracking System</A>.
+
+<P>Thanks for using this package, and congratulations for your choice of
+a Debian system!</P>
+
+<DIV align="center">
+<a href="http://www.debian.org/">
+<IMG align="middle" height="30" width="25" src="icons/debian/openlogo-25.jpg" alt="Debian">
+</a>
+<a href="http://www.apache.org/">
+<IMG align="middle" height="32" width="259" src="icons/apache_pb.png" alt="Apache">
+</a>
+</DIV>
+
+<!--
+ This page was initially created by Johnie Ingram (http://netgod.net/)
+ It was later edited by Matthew Wilcox and Josip Rodin.
+ Last modified: $Date: 2004/06/20 15:33:57 $.
+ -->
+
+</BODY>
+</HTML>
+
+ 7 03:57:35.941260 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5560, win 12383, options [nop,nop,TS val 1306300953 ecr 1306300953], length 0
+..............E..4.n@.@.!T.........p.P7X.I7z....0_.......
+M...M...
+ 8 03:57:37.229575 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [F.], seq 203, ack 5560, win 12383, options [nop,nop,TS val 1306302241 ecr 1306300953], length 0
+..............E..4.p@.@.!R.........p.P7X.I7z....0_.......
+M..!M...
+ 9 03:57:37.230839 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [F.], seq 5560, ack 204, win 8192, options [nop,nop,TS val 1306302243 ecr 1306302241], length 0
+..............E..4..@.@............P.p7z..7X.J.. ..5.....
+M..#M..!
+ 10 03:57:37.230900 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5561, win 12383, options [nop,nop,TS val 1306302243 ecr 1306302243], length 0
+..............E..4.r@.@.!P.........p.P7X.J7z....0_.......
+M..#M..#
diff --git a/tests/print-capX.out b/tests/print-capX.out
new file mode 100644
index 0000000..92aaa6e
--- /dev/null
+++ b/tests/print-capX.out
@@ -0,0 +1,409 @@
+ 1 03:57:35.938066 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [S], seq 928549246, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 0,nop,wscale 2], length 0
+ 0x0000: 4500 003c 1b68 4000 4006 2152 7f00 0001 E..<.h@.@.!R....
+ 0x0010: 7f00 0001 da70 0050 3758 897e 0000 0000 .....p.P7X.~....
+ 0x0020: a002 7fff 1421 0000 0204 400c 0402 080a .....!....@.....
+ 0x0030: 4ddc 9216 0000 0000 0103 0302 M...........
+ 2 03:57:35.938122 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [S.], seq 930778609, ack 928549247, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 1306300950,nop,wscale 2], length 0
+ 0x0000: 4500 003c 0000 4000 4006 3cba 7f00 0001 E..<..@.@.<.....
+ 0x0010: 7f00 0001 0050 da70 377a 8df1 3758 897f .....P.p7z..7X..
+ 0x0020: a012 7fff 6eb1 0000 0204 400c 0402 080a ....n.....@.....
+ 0x0030: 4ddc 9216 4ddc 9216 0103 0302 M...M.......
+ 3 03:57:35.938167 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 1, win 8192, options [nop,nop,TS val 1306300950 ecr 1306300950], length 0
+ 0x0000: 4500 0034 1b6a 4000 4006 2158 7f00 0001 E..4.j@.@.!X....
+ 0x0010: 7f00 0001 da70 0050 3758 897f 377a 8df2 .....p.P7X..7z..
+ 0x0020: 8010 2000 37d0 0000 0101 080a 4ddc 9216 ....7.......M...
+ 0x0030: 4ddc 9216 M...
+ 4 03:57:35.939423 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [P.], seq 1:203, ack 1, win 8192, options [nop,nop,TS val 1306300951 ecr 1306300950], length 202: HTTP: GET / HTTP/1.1
+ 0x0000: 4500 00fe 1b6c 4000 4006 208c 7f00 0001 E....l@.@.......
+ 0x0010: 7f00 0001 da70 0050 3758 897f 377a 8df2 .....p.P7X..7z..
+ 0x0020: 8018 2000 fef2 0000 0101 080a 4ddc 9217 ............M...
+ 0x0030: 4ddc 9216 4745 5420 2f20 4854 5450 2f31 M...GET./.HTTP/1
+ 0x0040: 2e31 0d0a 486f 7374 3a20 6c6f 6361 6c68 .1..Host:.localh
+ 0x0050: 6f73 740d 0a55 7365 722d 4167 656e 743a ost..User-Agent:
+ 0x0060: 2045 4c69 6e6b 732f 302e 3130 2e34 2d37 .ELinks/0.10.4-7
+ 0x0070: 2d64 6562 6961 6e20 2874 6578 746d 6f64 -debian.(textmod
+ 0x0080: 653b 204c 696e 7578 2032 2e36 2e31 312d e;.Linux.2.6.11-
+ 0x0090: 312d 3638 362d 736d 7020 6936 3836 3b20 1-686-smp.i686;.
+ 0x00a0: 3133 3278 3536 2d32 290d 0a41 6363 6570 132x56-2)..Accep
+ 0x00b0: 743a 202a 2f2a 0d0a 4163 6365 7074 2d45 t:.*/*..Accept-E
+ 0x00c0: 6e63 6f64 696e 673a 2067 7a69 700d 0a41 ncoding:.gzip..A
+ 0x00d0: 6363 6570 742d 4c61 6e67 7561 6765 3a20 ccept-Language:.
+ 0x00e0: 656e 0d0a 436f 6e6e 6563 7469 6f6e 3a20 en..Connection:.
+ 0x00f0: 4b65 6570 2d41 6c69 7665 0d0a 0d0a Keep-Alive....
+ 5 03:57:35.940474 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [.], ack 203, win 8192, options [nop,nop,TS val 1306300952 ecr 1306300951], length 0
+ 0x0000: 4500 0034 1fe4 4000 4006 1cde 7f00 0001 E..4..@.@.......
+ 0x0010: 7f00 0001 0050 da70 377a 8df2 3758 8a49 .....P.p7z..7X.I
+ 0x0020: 8010 2000 3703 0000 0101 080a 4ddc 9218 ....7.......M...
+ 0x0030: 4ddc 9217 M...
+ 6 03:57:35.941232 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [P.], seq 1:5560, ack 203, win 8192, options [nop,nop,TS val 1306300953 ecr 1306300951], length 5559: HTTP: HTTP/1.1 200 OK
+ 0x0000: 4500 15eb 1fe6 4000 4006 0725 7f00 0001 E.....@.@..%....
+ 0x0010: 7f00 0001 0050 da70 377a 8df2 3758 8a49 .....P.p7z..7X.I
+ 0x0020: 8018 2000 13e0 0000 0101 080a 4ddc 9219 ............M...
+ 0x0030: 4ddc 9217 4854 5450 2f31 2e31 2032 3030 M...HTTP/1.1.200
+ 0x0040: 204f 4b0d 0a44 6174 653a 2057 6564 2c20 .OK..Date:.Wed,.
+ 0x0050: 3036 204a 756c 2032 3030 3520 3033 3a35 06.Jul.2005.03:5
+ 0x0060: 373a 3335 2047 4d54 0d0a 5365 7276 6572 7:35.GMT..Server
+ 0x0070: 3a20 4170 6163 6865 2f31 2e33 2e33 330d :.Apache/1.3.33.
+ 0x0080: 0a4c 6173 742d 4d6f 6469 6669 6564 3a20 .Last-Modified:.
+ 0x0090: 5375 6e2c 2031 3520 4175 6720 3230 3034 Sun,.15.Aug.2004
+ 0x00a0: 2030 303a 3433 3a34 3120 474d 540d 0a45 .00:43:41.GMT..E
+ 0x00b0: 5461 673a 2022 3665 3830 6630 2d31 3438 Tag:."6e80f0-148
+ 0x00c0: 612d 3431 3165 6231 6264 220d 0a41 6363 a-411eb1bd"..Acc
+ 0x00d0: 6570 742d 5261 6e67 6573 3a20 6279 7465 ept-Ranges:.byte
+ 0x00e0: 730d 0a43 6f6e 7465 6e74 2d4c 656e 6774 s..Content-Lengt
+ 0x00f0: 683a 2035 3235 380d 0a4b 6565 702d 416c h:.5258..Keep-Al
+ 0x0100: 6976 653a 2074 696d 656f 7574 3d31 352c ive:.timeout=15,
+ 0x0110: 206d 6178 3d31 3030 0d0a 436f 6e6e 6563 .max=100..Connec
+ 0x0120: 7469 6f6e 3a20 4b65 6570 2d41 6c69 7665 tion:.Keep-Alive
+ 0x0130: 0d0a 436f 6e74 656e 742d 5479 7065 3a20 ..Content-Type:.
+ 0x0140: 7465 7874 2f68 746d 6c3b 2063 6861 7273 text/html;.chars
+ 0x0150: 6574 3d69 736f 2d38 3835 392d 310d 0a0d et=iso-8859-1...
+ 0x0160: 0a3c 2144 4f43 5459 5045 2048 544d 4c20 .<!DOCTYPE.HTML.
+ 0x0170: 5055 424c 4943 2022 2d2f 2f57 3343 2f2f PUBLIC."-//W3C//
+ 0x0180: 4454 4420 4854 4d4c 2034 2e30 3120 5472 DTD.HTML.4.01.Tr
+ 0x0190: 616e 7369 7469 6f6e 616c 2f2f 454e 223e ansitional//EN">
+ 0x01a0: 0a3c 4854 4d4c 3e0a 3c48 4541 443e 0a20 .<HTML>.<HEAD>..
+ 0x01b0: 2020 3c4d 4554 4120 4854 5450 2d45 5155 ..<META.HTTP-EQU
+ 0x01c0: 4956 3d22 436f 6e74 656e 742d 5479 7065 IV="Content-Type
+ 0x01d0: 2220 434f 4e54 454e 543d 2274 6578 742f ".CONTENT="text/
+ 0x01e0: 6874 6d6c 3b20 6368 6172 7365 743d 6973 html;.charset=is
+ 0x01f0: 6f2d 3838 3539 2d31 223e 0a20 2020 3c4d o-8859-1">....<M
+ 0x0200: 4554 4120 4e41 4d45 3d22 4465 7363 7269 ETA.NAME="Descri
+ 0x0210: 7074 696f 6e22 2043 4f4e 5445 4e54 3d22 ption".CONTENT="
+ 0x0220: 5468 6520 696e 6974 6961 6c20 696e 7374 The.initial.inst
+ 0x0230: 616c 6c61 7469 6f6e 206f 6620 4465 6269 allation.of.Debi
+ 0x0240: 616e 2061 7061 6368 652e 223e 0a20 2020 an.apache.">....
+ 0x0250: 3c54 4954 4c45 3e50 6c61 6365 686f 6c64 <TITLE>Placehold
+ 0x0260: 6572 2070 6167 653c 2f54 4954 4c45 3e0a er.page</TITLE>.
+ 0x0270: 3c2f 4845 4144 3e0a 3c42 4f44 5920 5445 </HEAD>.<BODY.TE
+ 0x0280: 5854 3d22 2330 3030 3030 3022 2042 4743 XT="#000000".BGC
+ 0x0290: 4f4c 4f52 3d22 2346 4646 4646 4622 204c OLOR="#FFFFFF".L
+ 0x02a0: 494e 4b3d 2223 3030 3030 4546 2220 564c INK="#0000EF".VL
+ 0x02b0: 494e 4b3d 2223 3535 3138 3841 2220 414c INK="#55188A".AL
+ 0x02c0: 494e 4b3d 2223 4646 3030 3030 223e 0a0a INK="#FF0000">..
+ 0x02d0: 3c48 313e 506c 6163 6568 6f6c 6465 7220 <H1>Placeholder.
+ 0x02e0: 7061 6765 3c2f 4831 3e0a 3c48 323e 4966 page</H1>.<H2>If
+ 0x02f0: 2079 6f75 2061 7265 206a 7573 7420 6272 .you.are.just.br
+ 0x0300: 6f77 7369 6e67 2074 6865 2077 6562 3c2f owsing.the.web</
+ 0x0310: 6832 3e0a 0a3c 503e 5468 6520 6f77 6e65 h2>..<P>The.owne
+ 0x0320: 7220 6f66 2074 6869 7320 7765 6220 7369 r.of.this.web.si
+ 0x0330: 7465 2068 6173 206e 6f74 2070 7574 2075 te.has.not.put.u
+ 0x0340: 7020 616e 7920 7765 6220 7061 6765 7320 p.any.web.pages.
+ 0x0350: 7965 742e 0a50 6c65 6173 6520 636f 6d65 yet..Please.come
+ 0x0360: 2062 6163 6b20 6c61 7465 722e 3c2f 503e .back.later.</P>
+ 0x0370: 0a0a 3c50 3e3c 534d 414c 4c3e 3c43 4954 ..<P><SMALL><CIT
+ 0x0380: 453e 4d6f 7665 2061 6c6f 6e67 2c20 6e6f E>Move.along,.no
+ 0x0390: 7468 696e 6720 746f 2073 6565 2068 6572 thing.to.see.her
+ 0x03a0: 652e 2e2e 3c2f 4349 5445 3e20 3a2d 293c e...</CITE>.:-)<
+ 0x03b0: 2f53 4d41 4c4c 3e3c 2f50 3e0a 0a3c 4832 /SMALL></P>..<H2
+ 0x03c0: 3e49 6620 796f 7520 6172 6520 7472 7969 >If.you.are.tryi
+ 0x03d0: 6e67 2074 6f20 6c6f 6361 7465 2074 6865 ng.to.locate.the
+ 0x03e0: 2061 646d 696e 6973 7472 6174 6f72 206f .administrator.o
+ 0x03f0: 6620 7468 6973 206d 6163 6869 6e65 3c2f f.this.machine</
+ 0x0400: 4832 3e0a 0a3c 503e 4966 2079 6f75 2077 H2>..<P>If.you.w
+ 0x0410: 616e 7420 746f 2072 6570 6f72 7420 736f ant.to.report.so
+ 0x0420: 6d65 7468 696e 6720 6162 6f75 7420 7468 mething.about.th
+ 0x0430: 6973 2068 6f73 7427 7320 6265 6861 7669 is.host's.behavi
+ 0x0440: 6f72 2c20 706c 6561 7365 0a63 6f6e 7461 or,.please.conta
+ 0x0450: 6374 2074 6865 2049 6e74 6572 6e65 7420 ct.the.Internet.
+ 0x0460: 5365 7276 6963 6520 5072 6f76 6964 6572 Service.Provider
+ 0x0470: 2028 4953 5029 2069 6e76 6f6c 7665 6420 .(ISP).involved.
+ 0x0480: 6469 7265 6374 6c79 2e3c 2f50 3e0a 0a3c directly.</P>..<
+ 0x0490: 503e 5365 6520 7468 6520 3c41 2068 7265 P>See.the.<A.hre
+ 0x04a0: 663d 2268 7474 703a 2f2f 7777 772e 6162 f="http://www.ab
+ 0x04b0: 7573 652e 6e65 742f 223e 4e65 7477 6f72 use.net/">Networ
+ 0x04c0: 6b20 4162 7573 650a 436c 6561 7269 6e67 k.Abuse.Clearing
+ 0x04d0: 686f 7573 653c 2f41 3e20 666f 7220 686f house</A>.for.ho
+ 0x04e0: 7720 746f 2064 6f20 7468 6973 2e3c 2f50 w.to.do.this.</P
+ 0x04f0: 3e0a 0a3c 4832 3e49 6620 796f 7520 6172 >..<H2>If.you.ar
+ 0x0500: 6520 7468 6520 6164 6d69 6e69 7374 7261 e.the.administra
+ 0x0510: 746f 7220 6f66 2074 6869 7320 6d61 6368 tor.of.this.mach
+ 0x0520: 696e 653c 2f48 323e 0a0a 3c50 3e54 6865 ine</H2>..<P>The
+ 0x0530: 2069 6e69 7469 616c 2069 6e73 7461 6c6c .initial.install
+ 0x0540: 6174 696f 6e20 6f66 203c 4120 6872 6566 ation.of.<A.href
+ 0x0550: 3d22 6874 7470 3a2f 2f77 7777 2e64 6562 ="http://www.deb
+ 0x0560: 6961 6e2e 6f72 672f 223e 4465 6269 616e ian.org/">Debian
+ 0x0570: 2773 0a61 7061 6368 653c 2f41 3e20 7765 's.apache</A>.we
+ 0x0580: 6220 7365 7276 6572 2070 6163 6b61 6765 b.server.package
+ 0x0590: 2077 6173 2073 7563 6365 7373 6675 6c2e .was.successful.
+ 0x05a0: 3c2f 503e 0a0a 3c50 3e3c 5354 524f 4e47 </P>..<P><STRONG
+ 0x05b0: 3e59 6f75 2073 686f 756c 6420 7265 706c >You.should.repl
+ 0x05c0: 6163 6520 7468 6973 2070 6167 6520 7769 ace.this.page.wi
+ 0x05d0: 7468 2079 6f75 7220 6f77 6e20 7765 6220 th.your.own.web.
+ 0x05e0: 7061 6765 7320 6173 0a73 6f6f 6e20 6173 pages.as.soon.as
+ 0x05f0: 2070 6f73 7369 626c 652e 3c2f 5354 524f .possible.</STRO
+ 0x0600: 4e47 3e3c 2f50 3e0a 0a3c 503e 556e 6c65 NG></P>..<P>Unle
+ 0x0610: 7373 2079 6f75 2063 6861 6e67 6564 2069 ss.you.changed.i
+ 0x0620: 7473 2063 6f6e 6669 6775 7261 7469 6f6e ts.configuration
+ 0x0630: 2c20 796f 7572 206e 6577 2073 6572 7665 ,.your.new.serve
+ 0x0640: 7220 6973 2063 6f6e 6669 6775 7265 6420 r.is.configured.
+ 0x0650: 6173 2066 6f6c 6c6f 7773 3a0a 3c55 4c3e as.follows:.<UL>
+ 0x0660: 0a3c 4c49 3e0a 436f 6e66 6967 7572 6174 .<LI>.Configurat
+ 0x0670: 696f 6e20 6669 6c65 7320 6361 6e20 6265 ion.files.can.be
+ 0x0680: 2066 6f75 6e64 2069 6e20 3c54 543e 2f65 .found.in.<TT>/e
+ 0x0690: 7463 2f61 7061 6368 653c 2f54 543e 2e3c tc/apache</TT>.<
+ 0x06a0: 2f4c 493e 0a0a 3c4c 493e 0a54 6865 203c /LI>..<LI>.The.<
+ 0x06b0: 5454 3e44 6f63 756d 656e 7452 6f6f 743c TT>DocumentRoot<
+ 0x06c0: 2f54 543e 2c20 7768 6963 6820 6973 2074 /TT>,.which.is.t
+ 0x06d0: 6865 2064 6972 6563 746f 7279 2075 6e64 he.directory.und
+ 0x06e0: 6572 2077 6869 6368 2061 6c6c 2079 6f75 er.which.all.you
+ 0x06f0: 720a 4854 4d4c 2066 696c 6573 2073 686f r.HTML.files.sho
+ 0x0700: 756c 6420 6578 6973 742c 2069 7320 7365 uld.exist,.is.se
+ 0x0710: 7420 746f 203c 5454 3e2f 7661 722f 7777 t.to.<TT>/var/ww
+ 0x0720: 773c 2f54 543e 2e3c 2f4c 493e 0a0a 3c4c w</TT>.</LI>..<L
+ 0x0730: 493e 0a43 4749 2073 6372 6970 7473 2061 I>.CGI.scripts.a
+ 0x0740: 7265 206c 6f6f 6b65 6420 666f 7220 696e re.looked.for.in
+ 0x0750: 203c 5454 3e2f 7573 722f 6c69 622f 6367 .<TT>/usr/lib/cg
+ 0x0760: 692d 6269 6e3c 2f54 543e 2c20 7768 6963 i-bin</TT>,.whic
+ 0x0770: 6820 6973 2077 6865 7265 0a44 6562 6961 h.is.where.Debia
+ 0x0780: 6e20 7061 636b 6167 6573 2077 696c 6c20 n.packages.will.
+ 0x0790: 706c 6163 6520 7468 6569 7220 7363 7269 place.their.scri
+ 0x07a0: 7074 732e 3c2f 4c49 3e0a 0a3c 4c49 3e0a pts.</LI>..<LI>.
+ 0x07b0: 4c6f 6720 6669 6c65 7320 6172 6520 706c Log.files.are.pl
+ 0x07c0: 6163 6564 2069 6e20 3c54 543e 2f76 6172 aced.in.<TT>/var
+ 0x07d0: 2f6c 6f67 2f61 7061 6368 653c 2f54 543e /log/apache</TT>
+ 0x07e0: 2c20 616e 6420 7769 6c6c 2062 6520 726f ,.and.will.be.ro
+ 0x07f0: 7461 7465 640a 7765 656b 6c79 2e20 2054 tated.weekly...T
+ 0x0800: 6865 2066 7265 7175 656e 6379 206f 6620 he.frequency.of.
+ 0x0810: 726f 7461 7469 6f6e 2063 616e 2062 6520 rotation.can.be.
+ 0x0820: 6561 7369 6c79 2063 6861 6e67 6564 2062 easily.changed.b
+ 0x0830: 7920 6564 6974 696e 670a 3c54 543e 2f65 y.editing.<TT>/e
+ 0x0840: 7463 2f6c 6f67 726f 7461 7465 2e64 2f61 tc/logrotate.d/a
+ 0x0850: 7061 6368 653c 2f54 543e 2e3c 2f4c 493e pache</TT>.</LI>
+ 0x0860: 0a0a 3c4c 493e 0a54 6865 2064 6566 6175 ..<LI>.The.defau
+ 0x0870: 6c74 2064 6972 6563 746f 7279 2069 6e64 lt.directory.ind
+ 0x0880: 6578 2069 7320 3c54 543e 696e 6465 782e ex.is.<TT>index.
+ 0x0890: 6874 6d6c 3c2f 5454 3e2c 206d 6561 6e69 html</TT>,.meani
+ 0x08a0: 6e67 2074 6861 7420 7265 7175 6573 7473 ng.that.requests
+ 0x08b0: 0a66 6f72 2061 2064 6972 6563 746f 7279 .for.a.directory
+ 0x08c0: 203c 5454 3e2f 666f 6f2f 6261 722f 3c2f .<TT>/foo/bar/</
+ 0x08d0: 5454 3e20 7769 6c6c 2067 6976 6520 7468 TT>.will.give.th
+ 0x08e0: 6520 636f 6e74 656e 7473 206f 6620 7468 e.contents.of.th
+ 0x08f0: 6520 6669 6c65 203c 5454 3e2f 7661 722f e.file.<TT>/var/
+ 0x0900: 7777 772f 666f 6f2f 6261 722f 696e 6465 www/foo/bar/inde
+ 0x0910: 782e 6874 6d6c 3c2f 5454 3e0a 6966 2069 x.html</TT>.if.i
+ 0x0920: 7420 6578 6973 7473 2028 6173 7375 6d69 t.exists.(assumi
+ 0x0930: 6e67 2074 6861 7420 3c54 543e 2f76 6172 ng.that.<TT>/var
+ 0x0940: 2f77 7777 3c2f 5454 3e20 6973 2079 6f75 /www</TT>.is.you
+ 0x0950: 7220 3c54 543e 446f 6375 6d65 6e74 526f r.<TT>DocumentRo
+ 0x0960: 6f74 3c2f 5454 3e29 2e3c 2f4c 493e 0a0a ot</TT>).</LI>..
+ 0x0970: 3c4c 493e 0a55 7365 7220 6469 7265 6374 <LI>.User.direct
+ 0x0980: 6f72 6965 7320 6172 6520 656e 6162 6c65 ories.are.enable
+ 0x0990: 642c 2061 6e64 2075 7365 7220 646f 6375 d,.and.user.docu
+ 0x09a0: 6d65 6e74 7320 7769 6c6c 2062 6520 6c6f ments.will.be.lo
+ 0x09b0: 6f6b 6564 2066 6f72 0a69 6e20 7468 6520 oked.for.in.the.
+ 0x09c0: 3c54 543e 7075 626c 6963 5f68 746d 6c3c <TT>public_html<
+ 0x09d0: 2f54 543e 2064 6972 6563 746f 7279 206f /TT>.directory.o
+ 0x09e0: 6620 7468 6520 7573 6572 7327 2068 6f6d f.the.users'.hom
+ 0x09f0: 6573 2e20 2054 6865 7365 2064 6972 730a es...These.dirs.
+ 0x0a00: 7368 6f75 6c64 2062 6520 756e 6465 7220 should.be.under.
+ 0x0a10: 3c54 543e 2f68 6f6d 653c 2f54 543e 2c20 <TT>/home</TT>,.
+ 0x0a20: 616e 6420 7573 6572 7320 7769 6c6c 206e and.users.will.n
+ 0x0a30: 6f74 2062 6520 6162 6c65 2074 6f20 7379 ot.be.able.to.sy
+ 0x0a40: 6d6c 696e 6b0a 746f 2066 696c 6573 2074 mlink.to.files.t
+ 0x0a50: 6865 7920 646f 6e27 7420 6f77 6e2e 3c2f hey.don't.own.</
+ 0x0a60: 4c49 3e0a 0a3c 2f55 4c3e 0a41 6c6c 2074 LI>..</UL>.All.t
+ 0x0a70: 6865 2073 7461 6e64 6172 6420 6170 6163 he.standard.apac
+ 0x0a80: 6865 206d 6f64 756c 6573 2061 7265 2061 he.modules.are.a
+ 0x0a90: 7661 696c 6162 6c65 2077 6974 6820 7468 vailable.with.th
+ 0x0aa0: 6973 2072 656c 6561 7365 2061 6e64 2061 is.release.and.a
+ 0x0ab0: 7265 0a6e 6f77 206d 616e 6167 6564 2077 re.now.managed.w
+ 0x0ac0: 6974 6820 6465 6263 6f6e 662e 2020 5479 ith.debconf...Ty
+ 0x0ad0: 7065 203c 5454 3e64 706b 672d 7265 636f pe.<TT>dpkg-reco
+ 0x0ae0: 6e66 6967 7572 6520 6170 6163 6865 3c2f nfigure.apache</
+ 0x0af0: 5454 3e20 746f 0a73 656c 6563 7420 7768 TT>.to.select.wh
+ 0x0b00: 6963 6820 6d6f 6475 6c65 7320 796f 7520 ich.modules.you.
+ 0x0b10: 7761 6e74 2065 6e61 626c 6564 2e20 204d want.enabled...M
+ 0x0b20: 616e 7920 6f74 6865 7220 6d6f 6475 6c65 any.other.module
+ 0x0b30: 7320 6172 6520 6176 6169 6c61 626c 650a s.are.available.
+ 0x0b40: 7468 726f 7567 6820 7468 6520 4465 6269 through.the.Debi
+ 0x0b50: 616e 2070 6163 6b61 6765 2073 7973 7465 an.package.syste
+ 0x0b60: 6d20 7769 7468 2074 6865 206e 616d 6573 m.with.the.names
+ 0x0b70: 203c 5454 3e6c 6962 6170 6163 6865 2d6d .<TT>libapache-m
+ 0x0b80: 6f64 2d2a 3c2f 5454 3e2e 0a49 6620 796f od-*</TT>..If.yo
+ 0x0b90: 7520 6e65 6564 2074 6f20 636f 6d70 696c u.need.to.compil
+ 0x0ba0: 6520 6120 6d6f 6475 6c65 2079 6f75 7273 e.a.module.yours
+ 0x0bb0: 656c 662c 2079 6f75 2077 696c 6c20 6e65 elf,.you.will.ne
+ 0x0bc0: 6564 2074 6f20 696e 7374 616c 6c20 7468 ed.to.install.th
+ 0x0bd0: 650a 3c54 543e 6170 6163 6865 2d64 6576 e.<TT>apache-dev
+ 0x0be0: 3c2f 5454 3e20 7061 636b 6167 652e 0a0a </TT>.package...
+ 0x0bf0: 3c50 3e4d 6f72 6520 646f 6375 6d65 6e74 <P>More.document
+ 0x0c00: 6174 696f 6e20 6f6e 2041 7061 6368 6520 ation.on.Apache.
+ 0x0c10: 6361 6e20 6265 2066 6f75 6e64 206f 6e3a can.be.found.on:
+ 0x0c20: 0a3c 554c 3e0a 3c4c 493e 0a54 6865 203c .<UL>.<LI>.The.<
+ 0x0c30: 4120 4852 4546 3d22 2f64 6f63 2f61 7061 A.HREF="/doc/apa
+ 0x0c40: 6368 652d 646f 632f 6d61 6e75 616c 2f22 che-doc/manual/"
+ 0x0c50: 3e41 7061 6368 6520 646f 6375 6d65 6e74 >Apache.document
+ 0x0c60: 6174 696f 6e3c 2f41 3e20 7374 6f72 6564 ation</A>.stored
+ 0x0c70: 206f 6e20 796f 7572 2073 6572 7665 722e .on.your.server.
+ 0x0c80: 3c2f 4c49 3e0a 0a3c 4c49 3e0a 5468 6520 </LI>..<LI>.The.
+ 0x0c90: 3c41 2048 5245 463d 2268 7474 703a 2f2f <A.HREF="http://
+ 0x0ca0: 7777 772e 6170 6163 6865 2e6f 7267 2f22 www.apache.org/"
+ 0x0cb0: 3e41 7061 6368 6520 5072 6f6a 6563 743c >Apache.Project<
+ 0x0cc0: 2f41 3e20 686f 6d65 2073 6974 652e 3c2f /A>.home.site.</
+ 0x0cd0: 4c49 3e0a 0a3c 4c49 3e0a 5468 6520 3c41 LI>..<LI>.The.<A
+ 0x0ce0: 2048 5245 463d 2268 7474 703a 2f2f 7777 .HREF="http://ww
+ 0x0cf0: 772e 6170 6163 6865 2d73 736c 2e6f 7267 w.apache-ssl.org
+ 0x0d00: 2f22 3e41 7061 6368 652d 5353 4c3c 2f41 /">Apache-SSL</A
+ 0x0d10: 3e20 686f 6d65 2073 6974 652e 3c2f 4c49 >.home.site.</LI
+ 0x0d20: 3e0a 0a3c 4c49 3e0a 5468 6520 3c41 2048 >..<LI>.The.<A.H
+ 0x0d30: 5245 463d 2268 7474 703a 2f2f 7065 726c REF="http://perl
+ 0x0d40: 2e61 7061 6368 652e 6f72 672f 223e 6d6f .apache.org/">mo
+ 0x0d50: 6420 7065 726c 3c2f 413e 2068 6f6d 6520 d.perl</A>.home.
+ 0x0d60: 7369 7465 2e3c 2f4c 493e 0a0a 3c4c 493e site.</LI>..<LI>
+ 0x0d70: 0a54 6865 203c 4120 4852 4546 3d22 6874 .The.<A.HREF="ht
+ 0x0d80: 7470 3a2f 2f77 7777 2e61 7061 6368 6577 tp://www.apachew
+ 0x0d90: 6565 6b2e 636f 6d2f 223e 4170 6163 6865 eek.com/">Apache
+ 0x0da0: 5765 656b 3c2f 413e 206e 6577 736c 6574 Week</A>.newslet
+ 0x0db0: 7465 722e 3c2f 4c49 3e0a 0a3c 4c49 3e0a ter.</LI>..<LI>.
+ 0x0dc0: 5468 6520 3c41 2048 5245 463d 2268 7474 The.<A.HREF="htt
+ 0x0dd0: 703a 2f2f 7777 772e 6465 6269 616e 2e6f p://www.debian.o
+ 0x0de0: 7267 2f64 6f63 2f22 3e44 6562 6961 6e20 rg/doc/">Debian.
+ 0x0df0: 5072 6f6a 6563 740a 446f 6375 6d65 6e74 Project.Document
+ 0x0e00: 6174 696f 6e3c 2f41 3e20 7768 6963 6820 ation</A>.which.
+ 0x0e10: 636f 6e74 6169 6e73 2048 4f57 544f 732c contains.HOWTOs,
+ 0x0e20: 2046 4151 732c 2061 6e64 2073 6f66 7477 .FAQs,.and.softw
+ 0x0e30: 6172 6520 7570 6461 7465 732e 3c2f 4c49 are.updates.</LI
+ 0x0e40: 3e0a 3c2f 554c 3e0a 0a3c 503e 596f 7520 >.</UL>..<P>You.
+ 0x0e50: 6361 6e20 616c 736f 2063 6f6e 7375 6c74 can.also.consult
+ 0x0e60: 2074 6865 206c 6973 7420 6f66 203c 4120 .the.list.of.<A.
+ 0x0e70: 4852 4546 3d22 6874 7470 3a2f 2f77 7777 HREF="http://www
+ 0x0e80: 2e62 6f75 7465 6c6c 2e63 6f6d 2f66 6171 .boutell.com/faq
+ 0x0e90: 2f22 3e57 6f72 6c64 0a57 6964 6520 5765 /">World.Wide.We
+ 0x0ea0: 6220 4672 6571 7565 6e74 6c79 2041 736b b.Frequently.Ask
+ 0x0eb0: 6564 2051 7565 7374 696f 6e73 3c2f 413e ed.Questions</A>
+ 0x0ec0: 2066 6f72 2069 6e66 6f72 6d61 7469 6f6e .for.information
+ 0x0ed0: 2e0a 0a3c 4832 3e4c 6574 206f 7468 6572 ...<H2>Let.other
+ 0x0ee0: 2070 656f 706c 6520 6b6e 6f77 2061 626f .people.know.abo
+ 0x0ef0: 7574 2074 6869 7320 7365 7276 6572 3c2f ut.this.server</
+ 0x0f00: 4832 3e0a 0a3c 4120 4852 4546 3d22 6874 H2>..<A.HREF="ht
+ 0x0f10: 7470 3a2f 2f6e 6574 6372 6166 742e 636f tp://netcraft.co
+ 0x0f20: 6d2f 223e 4e65 7463 7261 6674 3c2f 413e m/">Netcraft</A>
+ 0x0f30: 2070 726f 7669 6465 7320 616e 2069 6e74 .provides.an.int
+ 0x0f40: 6572 6573 7469 6e67 2066 7265 650a 7365 eresting.free.se
+ 0x0f50: 7276 6963 6520 666f 7220 7765 6220 7369 rvice.for.web.si
+ 0x0f60: 7465 206d 6f6e 6974 6f72 696e 6720 616e te.monitoring.an
+ 0x0f70: 6420 7374 6174 6973 7469 6320 636f 6c6c d.statistic.coll
+ 0x0f80: 6563 7469 6f6e 2e0a 596f 7520 6361 6e20 ection..You.can.
+ 0x0f90: 6c65 7420 7468 656d 206b 6e6f 7720 6162 let.them.know.ab
+ 0x0fa0: 6f75 7420 796f 7572 2073 6572 7665 7220 out.your.server.
+ 0x0fb0: 7573 696e 6720 7468 6569 720a 3c41 2048 using.their.<A.H
+ 0x0fc0: 5245 463d 2268 7474 703a 2f2f 7570 7469 REF="http://upti
+ 0x0fd0: 6d65 2e6e 6574 6372 6166 742e 636f 6d2f me.netcraft.com/
+ 0x0fe0: 223e 696e 7465 7266 6163 653c 2f41 3e2e ">interface</A>.
+ 0x0ff0: 0a45 6e61 626c 696e 6720 7468 6520 6d6f .Enabling.the.mo
+ 0x1000: 6e69 746f 7269 6e67 206f 6620 796f 7572 nitoring.of.your
+ 0x1010: 2073 6572 7665 7220 7769 6c6c 2070 726f .server.will.pro
+ 0x1020: 7669 6465 2061 2062 6574 7465 7220 676c vide.a.better.gl
+ 0x1030: 6f62 616c 206f 7665 7276 6965 770a 6f66 obal.overview.of
+ 0x1040: 2077 686f 2069 7320 7573 696e 6720 7768 .who.is.using.wh
+ 0x1050: 6174 2061 6e64 2077 6865 7265 2c20 616e at.and.where,.an
+ 0x1060: 6420 6974 2077 6f75 6c64 2067 6976 6520 d.it.would.give.
+ 0x1070: 4465 6269 616e 2061 2062 6574 7465 720a Debian.a.better.
+ 0x1080: 6f76 6572 7669 6577 206f 6620 7468 6520 overview.of.the.
+ 0x1090: 6170 6163 6865 2070 6163 6b61 6765 2075 apache.package.u
+ 0x10a0: 7361 6765 2e0a 0a3c 4832 3e41 626f 7574 sage...<H2>About
+ 0x10b0: 2074 6869 7320 7061 6765 3c2f 4832 3e0a .this.page</H2>.
+ 0x10c0: 0a3c 494d 4720 414c 4947 4e3d 2272 6967 .<IMG.ALIGN="rig
+ 0x10d0: 6874 2220 414c 543d 2222 2048 4549 4748 ht".ALT="".HEIGH
+ 0x10e0: 543d 2232 3437 2220 5749 4454 483d 2232 T="247".WIDTH="2
+ 0x10f0: 3738 2220 5352 433d 2269 636f 6e73 2f6a 78".SRC="icons/j
+ 0x1100: 6865 3036 312e 706e 6722 3e0a 0a3c 503e he061.png">..<P>
+ 0x1110: 5468 6973 2069 7320 6120 706c 6163 6568 This.is.a.placeh
+ 0x1120: 6f6c 6465 7220 7061 6765 2069 6e73 7461 older.page.insta
+ 0x1130: 6c6c 6564 2062 7920 7468 6520 3c41 0a48 lled.by.the.<A.H
+ 0x1140: 5245 463d 2268 7474 703a 2f2f 7777 772e REF="http://www.
+ 0x1150: 6465 6269 616e 2e6f 7267 2f22 3e44 6562 debian.org/">Deb
+ 0x1160: 6961 6e3c 2f41 3e0a 7265 6c65 6173 6520 ian</A>.release.
+ 0x1170: 6f66 2074 6865 2061 7061 6368 6520 5765 of.the.apache.We
+ 0x1180: 6220 7365 7276 6572 2070 6163 6b61 6765 b.server.package
+ 0x1190: 2e0a 0a3c 503e 5468 6973 2063 6f6d 7075 ...<P>This.compu
+ 0x11a0: 7465 7220 6861 7320 696e 7374 616c 6c65 ter.has.installe
+ 0x11b0: 6420 7468 6520 4465 6269 616e 2047 4e55 d.the.Debian.GNU
+ 0x11c0: 2f4c 696e 7578 206f 7065 7261 7469 6e67 /Linux.operating
+ 0x11d0: 2073 7973 7465 6d2c 0a62 7574 2069 7420 .system,.but.it.
+ 0x11e0: 6861 7320 3c73 7472 6f6e 673e 6e6f 7468 has.<strong>noth
+ 0x11f0: 696e 6720 746f 2064 6f20 7769 7468 2074 ing.to.do.with.t
+ 0x1200: 6865 2044 6562 6961 6e0a 5072 6f6a 6563 he.Debian.Projec
+ 0x1210: 743c 2f73 7472 6f6e 673e 2e20 506c 6561 t</strong>..Plea
+ 0x1220: 7365 2064 6f20 3c73 7472 6f6e 673e 6e6f se.do.<strong>no
+ 0x1230: 743c 2f73 7472 6f6e 673e 2063 6f6e 7461 t</strong>.conta
+ 0x1240: 6374 2074 6865 2044 6562 6961 6e0a 5072 ct.the.Debian.Pr
+ 0x1250: 6f6a 6563 7420 6162 6f75 7420 6974 2e3c oject.about.it.<
+ 0x1260: 2f50 3e0a 0a3c 503e 4966 2079 6f75 2066 /P>..<P>If.you.f
+ 0x1270: 696e 6420 6120 6275 6720 696e 2074 6869 ind.a.bug.in.thi
+ 0x1280: 7320 6170 6163 6865 2070 6163 6b61 6765 s.apache.package
+ 0x1290: 2c20 6f72 2069 6e20 4170 6163 6865 2069 ,.or.in.Apache.i
+ 0x12a0: 7473 656c 662c 0a70 6c65 6173 6520 6669 tself,.please.fi
+ 0x12b0: 6c65 2061 2062 7567 2072 6570 6f72 7420 le.a.bug.report.
+ 0x12c0: 6f6e 2069 742e 2020 496e 7374 7275 6374 on.it...Instruct
+ 0x12d0: 696f 6e73 206f 6e20 646f 696e 6720 7468 ions.on.doing.th
+ 0x12e0: 6973 2c20 616e 6420 7468 650a 6c69 7374 is,.and.the.list
+ 0x12f0: 206f 6620 3c41 2048 5245 463d 2268 7474 .of.<A.HREF="htt
+ 0x1300: 703a 2f2f 6275 6773 2e64 6562 6961 6e2e p://bugs.debian.
+ 0x1310: 6f72 672f 7372 633a 6170 6163 6865 223e org/src:apache">
+ 0x1320: 6b6e 6f77 6e20 6275 6773 3c2f 413e 206f known.bugs</A>.o
+ 0x1330: 6620 7468 6973 0a70 6163 6b61 6765 2c20 f.this.package,.
+ 0x1340: 6361 6e20 6265 2066 6f75 6e64 2069 6e20 can.be.found.in.
+ 0x1350: 7468 6520 0a3c 4120 4852 4546 3d22 6874 the..<A.HREF="ht
+ 0x1360: 7470 3a2f 2f77 7777 2e64 6562 6961 6e2e tp://www.debian.
+ 0x1370: 6f72 672f 4275 6773 2f52 6570 6f72 7469 org/Bugs/Reporti
+ 0x1380: 6e67 223e 4465 6269 616e 2042 7567 2054 ng">Debian.Bug.T
+ 0x1390: 7261 636b 696e 6720 5379 7374 656d 3c2f racking.System</
+ 0x13a0: 413e 2e0a 0a3c 503e 5468 616e 6b73 2066 A>...<P>Thanks.f
+ 0x13b0: 6f72 2075 7369 6e67 2074 6869 7320 7061 or.using.this.pa
+ 0x13c0: 636b 6167 652c 2061 6e64 2063 6f6e 6772 ckage,.and.congr
+ 0x13d0: 6174 756c 6174 696f 6e73 2066 6f72 2079 atulations.for.y
+ 0x13e0: 6f75 7220 6368 6f69 6365 206f 660a 6120 our.choice.of.a.
+ 0x13f0: 4465 6269 616e 2073 7973 7465 6d21 3c2f Debian.system!</
+ 0x1400: 503e 0a0a 3c44 4956 2061 6c69 676e 3d22 P>..<DIV.align="
+ 0x1410: 6365 6e74 6572 223e 0a3c 6120 6872 6566 center">.<a.href
+ 0x1420: 3d22 6874 7470 3a2f 2f77 7777 2e64 6562 ="http://www.deb
+ 0x1430: 6961 6e2e 6f72 672f 223e 0a3c 494d 4720 ian.org/">.<IMG.
+ 0x1440: 616c 6967 6e3d 226d 6964 646c 6522 2068 align="middle".h
+ 0x1450: 6569 6768 743d 2233 3022 2077 6964 7468 eight="30".width
+ 0x1460: 3d22 3235 2220 7372 633d 2269 636f 6e73 ="25".src="icons
+ 0x1470: 2f64 6562 6961 6e2f 6f70 656e 6c6f 676f /debian/openlogo
+ 0x1480: 2d32 352e 6a70 6722 2061 6c74 3d22 4465 -25.jpg".alt="De
+ 0x1490: 6269 616e 223e 0a3c 2f61 3e0a 3c61 2068 bian">.</a>.<a.h
+ 0x14a0: 7265 663d 2268 7474 703a 2f2f 7777 772e ref="http://www.
+ 0x14b0: 6170 6163 6865 2e6f 7267 2f22 3e0a 3c49 apache.org/">.<I
+ 0x14c0: 4d47 2061 6c69 676e 3d22 6d69 6464 6c65 MG.align="middle
+ 0x14d0: 2220 6865 6967 6874 3d22 3332 2220 7769 ".height="32".wi
+ 0x14e0: 6474 683d 2232 3539 2220 7372 633d 2269 dth="259".src="i
+ 0x14f0: 636f 6e73 2f61 7061 6368 655f 7062 2e70 cons/apache_pb.p
+ 0x1500: 6e67 2220 616c 743d 2241 7061 6368 6522 ng".alt="Apache"
+ 0x1510: 3e0a 3c2f 613e 0a3c 2f44 4956 3e0a 0a3c >.</a>.</DIV>..<
+ 0x1520: 212d 2d0a 2020 5468 6973 2070 6167 6520 !--...This.page.
+ 0x1530: 7761 7320 696e 6974 6961 6c6c 7920 6372 was.initially.cr
+ 0x1540: 6561 7465 6420 6279 204a 6f68 6e69 6520 eated.by.Johnie.
+ 0x1550: 496e 6772 616d 2028 6874 7470 3a2f 2f6e Ingram.(http://n
+ 0x1560: 6574 676f 642e 6e65 742f 290a 2020 4974 etgod.net/)...It
+ 0x1570: 2077 6173 206c 6174 6572 2065 6469 7465 .was.later.edite
+ 0x1580: 6420 6279 204d 6174 7468 6577 2057 696c d.by.Matthew.Wil
+ 0x1590: 636f 7820 616e 6420 4a6f 7369 7020 526f cox.and.Josip.Ro
+ 0x15a0: 6469 6e2e 0a20 204c 6173 7420 6d6f 6469 din....Last.modi
+ 0x15b0: 6669 6564 3a20 2444 6174 653a 2032 3030 fied:.$Date:.200
+ 0x15c0: 342f 3036 2f32 3020 3135 3a33 333a 3537 4/06/20.15:33:57
+ 0x15d0: 2024 2e0a 2020 2d2d 3e0a 0a3c 2f42 4f44 .$....-->..</BOD
+ 0x15e0: 593e 0a3c 2f48 544d 4c3e 0a Y>.</HTML>.
+ 7 03:57:35.941260 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5560, win 12383, options [nop,nop,TS val 1306300953 ecr 1306300953], length 0
+ 0x0000: 4500 0034 1b6e 4000 4006 2154 7f00 0001 E..4.n@.@.!T....
+ 0x0010: 7f00 0001 da70 0050 3758 8a49 377a a3a9 .....p.P7X.I7z..
+ 0x0020: 8010 305f 10ea 0000 0101 080a 4ddc 9219 ..0_........M...
+ 0x0030: 4ddc 9219 M...
+ 8 03:57:37.229575 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [F.], seq 203, ack 5560, win 12383, options [nop,nop,TS val 1306302241 ecr 1306300953], length 0
+ 0x0000: 4500 0034 1b70 4000 4006 2152 7f00 0001 E..4.p@.@.!R....
+ 0x0010: 7f00 0001 da70 0050 3758 8a49 377a a3a9 .....p.P7X.I7z..
+ 0x0020: 8011 305f 0be1 0000 0101 080a 4ddc 9721 ..0_........M..!
+ 0x0030: 4ddc 9219 M...
+ 9 03:57:37.230839 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [F.], seq 5560, ack 204, win 8192, options [nop,nop,TS val 1306302243 ecr 1306302241], length 0
+ 0x0000: 4500 0034 1fe8 4000 4006 1cda 7f00 0001 E..4..@.@.......
+ 0x0010: 7f00 0001 0050 da70 377a a3a9 3758 8a4a .....P.p7z..7X.J
+ 0x0020: 8011 2000 1735 0000 0101 080a 4ddc 9723 .....5......M..#
+ 0x0030: 4ddc 9721 M..!
+ 10 03:57:37.230900 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5561, win 12383, options [nop,nop,TS val 1306302243 ecr 1306302243], length 0
+ 0x0000: 4500 0034 1b72 4000 4006 2150 7f00 0001 E..4.r@.@.!P....
+ 0x0010: 7f00 0001 da70 0050 3758 8a4a 377a a3aa .....p.P7X.J7z..
+ 0x0020: 8010 305f 06d4 0000 0101 080a 4ddc 9723 ..0_........M..#
+ 0x0030: 4ddc 9723 M..#
diff --git a/tests/print-capXX.out b/tests/print-capXX.out
new file mode 100644
index 0000000..11baba2
--- /dev/null
+++ b/tests/print-capXX.out
@@ -0,0 +1,419 @@
+ 1 03:57:35.938066 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [S], seq 928549246, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 0,nop,wscale 2], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
+ 0x0010: 003c 1b68 4000 4006 2152 7f00 0001 7f00 .<.h@.@.!R......
+ 0x0020: 0001 da70 0050 3758 897e 0000 0000 a002 ...p.P7X.~......
+ 0x0030: 7fff 1421 0000 0204 400c 0402 080a 4ddc ...!....@.....M.
+ 0x0040: 9216 0000 0000 0103 0302 ..........
+ 2 03:57:35.938122 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [S.], seq 930778609, ack 928549247, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 1306300950,nop,wscale 2], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
+ 0x0010: 003c 0000 4000 4006 3cba 7f00 0001 7f00 .<..@.@.<.......
+ 0x0020: 0001 0050 da70 377a 8df1 3758 897f a012 ...P.p7z..7X....
+ 0x0030: 7fff 6eb1 0000 0204 400c 0402 080a 4ddc ..n.....@.....M.
+ 0x0040: 9216 4ddc 9216 0103 0302 ..M.......
+ 3 03:57:35.938167 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 1, win 8192, options [nop,nop,TS val 1306300950 ecr 1306300950], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
+ 0x0010: 0034 1b6a 4000 4006 2158 7f00 0001 7f00 .4.j@.@.!X......
+ 0x0020: 0001 da70 0050 3758 897f 377a 8df2 8010 ...p.P7X..7z....
+ 0x0030: 2000 37d0 0000 0101 080a 4ddc 9216 4ddc ..7.......M...M.
+ 0x0040: 9216 ..
+ 4 03:57:35.939423 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [P.], seq 1:203, ack 1, win 8192, options [nop,nop,TS val 1306300951 ecr 1306300950], length 202: HTTP: GET / HTTP/1.1
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
+ 0x0010: 00fe 1b6c 4000 4006 208c 7f00 0001 7f00 ...l@.@.........
+ 0x0020: 0001 da70 0050 3758 897f 377a 8df2 8018 ...p.P7X..7z....
+ 0x0030: 2000 fef2 0000 0101 080a 4ddc 9217 4ddc ..........M...M.
+ 0x0040: 9216 4745 5420 2f20 4854 5450 2f31 2e31 ..GET./.HTTP/1.1
+ 0x0050: 0d0a 486f 7374 3a20 6c6f 6361 6c68 6f73 ..Host:.localhos
+ 0x0060: 740d 0a55 7365 722d 4167 656e 743a 2045 t..User-Agent:.E
+ 0x0070: 4c69 6e6b 732f 302e 3130 2e34 2d37 2d64 Links/0.10.4-7-d
+ 0x0080: 6562 6961 6e20 2874 6578 746d 6f64 653b ebian.(textmode;
+ 0x0090: 204c 696e 7578 2032 2e36 2e31 312d 312d .Linux.2.6.11-1-
+ 0x00a0: 3638 362d 736d 7020 6936 3836 3b20 3133 686-smp.i686;.13
+ 0x00b0: 3278 3536 2d32 290d 0a41 6363 6570 743a 2x56-2)..Accept:
+ 0x00c0: 202a 2f2a 0d0a 4163 6365 7074 2d45 6e63 .*/*..Accept-Enc
+ 0x00d0: 6f64 696e 673a 2067 7a69 700d 0a41 6363 oding:.gzip..Acc
+ 0x00e0: 6570 742d 4c61 6e67 7561 6765 3a20 656e ept-Language:.en
+ 0x00f0: 0d0a 436f 6e6e 6563 7469 6f6e 3a20 4b65 ..Connection:.Ke
+ 0x0100: 6570 2d41 6c69 7665 0d0a 0d0a ep-Alive....
+ 5 03:57:35.940474 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [.], ack 203, win 8192, options [nop,nop,TS val 1306300952 ecr 1306300951], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
+ 0x0010: 0034 1fe4 4000 4006 1cde 7f00 0001 7f00 .4..@.@.........
+ 0x0020: 0001 0050 da70 377a 8df2 3758 8a49 8010 ...P.p7z..7X.I..
+ 0x0030: 2000 3703 0000 0101 080a 4ddc 9218 4ddc ..7.......M...M.
+ 0x0040: 9217 ..
+ 6 03:57:35.941232 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [P.], seq 1:5560, ack 203, win 8192, options [nop,nop,TS val 1306300953 ecr 1306300951], length 5559: HTTP: HTTP/1.1 200 OK
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
+ 0x0010: 15eb 1fe6 4000 4006 0725 7f00 0001 7f00 ....@.@..%......
+ 0x0020: 0001 0050 da70 377a 8df2 3758 8a49 8018 ...P.p7z..7X.I..
+ 0x0030: 2000 13e0 0000 0101 080a 4ddc 9219 4ddc ..........M...M.
+ 0x0040: 9217 4854 5450 2f31 2e31 2032 3030 204f ..HTTP/1.1.200.O
+ 0x0050: 4b0d 0a44 6174 653a 2057 6564 2c20 3036 K..Date:.Wed,.06
+ 0x0060: 204a 756c 2032 3030 3520 3033 3a35 373a .Jul.2005.03:57:
+ 0x0070: 3335 2047 4d54 0d0a 5365 7276 6572 3a20 35.GMT..Server:.
+ 0x0080: 4170 6163 6865 2f31 2e33 2e33 330d 0a4c Apache/1.3.33..L
+ 0x0090: 6173 742d 4d6f 6469 6669 6564 3a20 5375 ast-Modified:.Su
+ 0x00a0: 6e2c 2031 3520 4175 6720 3230 3034 2030 n,.15.Aug.2004.0
+ 0x00b0: 303a 3433 3a34 3120 474d 540d 0a45 5461 0:43:41.GMT..ETa
+ 0x00c0: 673a 2022 3665 3830 6630 2d31 3438 612d g:."6e80f0-148a-
+ 0x00d0: 3431 3165 6231 6264 220d 0a41 6363 6570 411eb1bd"..Accep
+ 0x00e0: 742d 5261 6e67 6573 3a20 6279 7465 730d t-Ranges:.bytes.
+ 0x00f0: 0a43 6f6e 7465 6e74 2d4c 656e 6774 683a .Content-Length:
+ 0x0100: 2035 3235 380d 0a4b 6565 702d 416c 6976 .5258..Keep-Aliv
+ 0x0110: 653a 2074 696d 656f 7574 3d31 352c 206d e:.timeout=15,.m
+ 0x0120: 6178 3d31 3030 0d0a 436f 6e6e 6563 7469 ax=100..Connecti
+ 0x0130: 6f6e 3a20 4b65 6570 2d41 6c69 7665 0d0a on:.Keep-Alive..
+ 0x0140: 436f 6e74 656e 742d 5479 7065 3a20 7465 Content-Type:.te
+ 0x0150: 7874 2f68 746d 6c3b 2063 6861 7273 6574 xt/html;.charset
+ 0x0160: 3d69 736f 2d38 3835 392d 310d 0a0d 0a3c =iso-8859-1....<
+ 0x0170: 2144 4f43 5459 5045 2048 544d 4c20 5055 !DOCTYPE.HTML.PU
+ 0x0180: 424c 4943 2022 2d2f 2f57 3343 2f2f 4454 BLIC."-//W3C//DT
+ 0x0190: 4420 4854 4d4c 2034 2e30 3120 5472 616e D.HTML.4.01.Tran
+ 0x01a0: 7369 7469 6f6e 616c 2f2f 454e 223e 0a3c sitional//EN">.<
+ 0x01b0: 4854 4d4c 3e0a 3c48 4541 443e 0a20 2020 HTML>.<HEAD>....
+ 0x01c0: 3c4d 4554 4120 4854 5450 2d45 5155 4956 <META.HTTP-EQUIV
+ 0x01d0: 3d22 436f 6e74 656e 742d 5479 7065 2220 ="Content-Type".
+ 0x01e0: 434f 4e54 454e 543d 2274 6578 742f 6874 CONTENT="text/ht
+ 0x01f0: 6d6c 3b20 6368 6172 7365 743d 6973 6f2d ml;.charset=iso-
+ 0x0200: 3838 3539 2d31 223e 0a20 2020 3c4d 4554 8859-1">....<MET
+ 0x0210: 4120 4e41 4d45 3d22 4465 7363 7269 7074 A.NAME="Descript
+ 0x0220: 696f 6e22 2043 4f4e 5445 4e54 3d22 5468 ion".CONTENT="Th
+ 0x0230: 6520 696e 6974 6961 6c20 696e 7374 616c e.initial.instal
+ 0x0240: 6c61 7469 6f6e 206f 6620 4465 6269 616e lation.of.Debian
+ 0x0250: 2061 7061 6368 652e 223e 0a20 2020 3c54 .apache.">....<T
+ 0x0260: 4954 4c45 3e50 6c61 6365 686f 6c64 6572 ITLE>Placeholder
+ 0x0270: 2070 6167 653c 2f54 4954 4c45 3e0a 3c2f .page</TITLE>.</
+ 0x0280: 4845 4144 3e0a 3c42 4f44 5920 5445 5854 HEAD>.<BODY.TEXT
+ 0x0290: 3d22 2330 3030 3030 3022 2042 4743 4f4c ="#000000".BGCOL
+ 0x02a0: 4f52 3d22 2346 4646 4646 4622 204c 494e OR="#FFFFFF".LIN
+ 0x02b0: 4b3d 2223 3030 3030 4546 2220 564c 494e K="#0000EF".VLIN
+ 0x02c0: 4b3d 2223 3535 3138 3841 2220 414c 494e K="#55188A".ALIN
+ 0x02d0: 4b3d 2223 4646 3030 3030 223e 0a0a 3c48 K="#FF0000">..<H
+ 0x02e0: 313e 506c 6163 6568 6f6c 6465 7220 7061 1>Placeholder.pa
+ 0x02f0: 6765 3c2f 4831 3e0a 3c48 323e 4966 2079 ge</H1>.<H2>If.y
+ 0x0300: 6f75 2061 7265 206a 7573 7420 6272 6f77 ou.are.just.brow
+ 0x0310: 7369 6e67 2074 6865 2077 6562 3c2f 6832 sing.the.web</h2
+ 0x0320: 3e0a 0a3c 503e 5468 6520 6f77 6e65 7220 >..<P>The.owner.
+ 0x0330: 6f66 2074 6869 7320 7765 6220 7369 7465 of.this.web.site
+ 0x0340: 2068 6173 206e 6f74 2070 7574 2075 7020 .has.not.put.up.
+ 0x0350: 616e 7920 7765 6220 7061 6765 7320 7965 any.web.pages.ye
+ 0x0360: 742e 0a50 6c65 6173 6520 636f 6d65 2062 t..Please.come.b
+ 0x0370: 6163 6b20 6c61 7465 722e 3c2f 503e 0a0a ack.later.</P>..
+ 0x0380: 3c50 3e3c 534d 414c 4c3e 3c43 4954 453e <P><SMALL><CITE>
+ 0x0390: 4d6f 7665 2061 6c6f 6e67 2c20 6e6f 7468 Move.along,.noth
+ 0x03a0: 696e 6720 746f 2073 6565 2068 6572 652e ing.to.see.here.
+ 0x03b0: 2e2e 3c2f 4349 5445 3e20 3a2d 293c 2f53 ..</CITE>.:-)</S
+ 0x03c0: 4d41 4c4c 3e3c 2f50 3e0a 0a3c 4832 3e49 MALL></P>..<H2>I
+ 0x03d0: 6620 796f 7520 6172 6520 7472 7969 6e67 f.you.are.trying
+ 0x03e0: 2074 6f20 6c6f 6361 7465 2074 6865 2061 .to.locate.the.a
+ 0x03f0: 646d 696e 6973 7472 6174 6f72 206f 6620 dministrator.of.
+ 0x0400: 7468 6973 206d 6163 6869 6e65 3c2f 4832 this.machine</H2
+ 0x0410: 3e0a 0a3c 503e 4966 2079 6f75 2077 616e >..<P>If.you.wan
+ 0x0420: 7420 746f 2072 6570 6f72 7420 736f 6d65 t.to.report.some
+ 0x0430: 7468 696e 6720 6162 6f75 7420 7468 6973 thing.about.this
+ 0x0440: 2068 6f73 7427 7320 6265 6861 7669 6f72 .host's.behavior
+ 0x0450: 2c20 706c 6561 7365 0a63 6f6e 7461 6374 ,.please.contact
+ 0x0460: 2074 6865 2049 6e74 6572 6e65 7420 5365 .the.Internet.Se
+ 0x0470: 7276 6963 6520 5072 6f76 6964 6572 2028 rvice.Provider.(
+ 0x0480: 4953 5029 2069 6e76 6f6c 7665 6420 6469 ISP).involved.di
+ 0x0490: 7265 6374 6c79 2e3c 2f50 3e0a 0a3c 503e rectly.</P>..<P>
+ 0x04a0: 5365 6520 7468 6520 3c41 2068 7265 663d See.the.<A.href=
+ 0x04b0: 2268 7474 703a 2f2f 7777 772e 6162 7573 "http://www.abus
+ 0x04c0: 652e 6e65 742f 223e 4e65 7477 6f72 6b20 e.net/">Network.
+ 0x04d0: 4162 7573 650a 436c 6561 7269 6e67 686f Abuse.Clearingho
+ 0x04e0: 7573 653c 2f41 3e20 666f 7220 686f 7720 use</A>.for.how.
+ 0x04f0: 746f 2064 6f20 7468 6973 2e3c 2f50 3e0a to.do.this.</P>.
+ 0x0500: 0a3c 4832 3e49 6620 796f 7520 6172 6520 .<H2>If.you.are.
+ 0x0510: 7468 6520 6164 6d69 6e69 7374 7261 746f the.administrato
+ 0x0520: 7220 6f66 2074 6869 7320 6d61 6368 696e r.of.this.machin
+ 0x0530: 653c 2f48 323e 0a0a 3c50 3e54 6865 2069 e</H2>..<P>The.i
+ 0x0540: 6e69 7469 616c 2069 6e73 7461 6c6c 6174 nitial.installat
+ 0x0550: 696f 6e20 6f66 203c 4120 6872 6566 3d22 ion.of.<A.href="
+ 0x0560: 6874 7470 3a2f 2f77 7777 2e64 6562 6961 http://www.debia
+ 0x0570: 6e2e 6f72 672f 223e 4465 6269 616e 2773 n.org/">Debian's
+ 0x0580: 0a61 7061 6368 653c 2f41 3e20 7765 6220 .apache</A>.web.
+ 0x0590: 7365 7276 6572 2070 6163 6b61 6765 2077 server.package.w
+ 0x05a0: 6173 2073 7563 6365 7373 6675 6c2e 3c2f as.successful.</
+ 0x05b0: 503e 0a0a 3c50 3e3c 5354 524f 4e47 3e59 P>..<P><STRONG>Y
+ 0x05c0: 6f75 2073 686f 756c 6420 7265 706c 6163 ou.should.replac
+ 0x05d0: 6520 7468 6973 2070 6167 6520 7769 7468 e.this.page.with
+ 0x05e0: 2079 6f75 7220 6f77 6e20 7765 6220 7061 .your.own.web.pa
+ 0x05f0: 6765 7320 6173 0a73 6f6f 6e20 6173 2070 ges.as.soon.as.p
+ 0x0600: 6f73 7369 626c 652e 3c2f 5354 524f 4e47 ossible.</STRONG
+ 0x0610: 3e3c 2f50 3e0a 0a3c 503e 556e 6c65 7373 ></P>..<P>Unless
+ 0x0620: 2079 6f75 2063 6861 6e67 6564 2069 7473 .you.changed.its
+ 0x0630: 2063 6f6e 6669 6775 7261 7469 6f6e 2c20 .configuration,.
+ 0x0640: 796f 7572 206e 6577 2073 6572 7665 7220 your.new.server.
+ 0x0650: 6973 2063 6f6e 6669 6775 7265 6420 6173 is.configured.as
+ 0x0660: 2066 6f6c 6c6f 7773 3a0a 3c55 4c3e 0a3c .follows:.<UL>.<
+ 0x0670: 4c49 3e0a 436f 6e66 6967 7572 6174 696f LI>.Configuratio
+ 0x0680: 6e20 6669 6c65 7320 6361 6e20 6265 2066 n.files.can.be.f
+ 0x0690: 6f75 6e64 2069 6e20 3c54 543e 2f65 7463 ound.in.<TT>/etc
+ 0x06a0: 2f61 7061 6368 653c 2f54 543e 2e3c 2f4c /apache</TT>.</L
+ 0x06b0: 493e 0a0a 3c4c 493e 0a54 6865 203c 5454 I>..<LI>.The.<TT
+ 0x06c0: 3e44 6f63 756d 656e 7452 6f6f 743c 2f54 >DocumentRoot</T
+ 0x06d0: 543e 2c20 7768 6963 6820 6973 2074 6865 T>,.which.is.the
+ 0x06e0: 2064 6972 6563 746f 7279 2075 6e64 6572 .directory.under
+ 0x06f0: 2077 6869 6368 2061 6c6c 2079 6f75 720a .which.all.your.
+ 0x0700: 4854 4d4c 2066 696c 6573 2073 686f 756c HTML.files.shoul
+ 0x0710: 6420 6578 6973 742c 2069 7320 7365 7420 d.exist,.is.set.
+ 0x0720: 746f 203c 5454 3e2f 7661 722f 7777 773c to.<TT>/var/www<
+ 0x0730: 2f54 543e 2e3c 2f4c 493e 0a0a 3c4c 493e /TT>.</LI>..<LI>
+ 0x0740: 0a43 4749 2073 6372 6970 7473 2061 7265 .CGI.scripts.are
+ 0x0750: 206c 6f6f 6b65 6420 666f 7220 696e 203c .looked.for.in.<
+ 0x0760: 5454 3e2f 7573 722f 6c69 622f 6367 692d TT>/usr/lib/cgi-
+ 0x0770: 6269 6e3c 2f54 543e 2c20 7768 6963 6820 bin</TT>,.which.
+ 0x0780: 6973 2077 6865 7265 0a44 6562 6961 6e20 is.where.Debian.
+ 0x0790: 7061 636b 6167 6573 2077 696c 6c20 706c packages.will.pl
+ 0x07a0: 6163 6520 7468 6569 7220 7363 7269 7074 ace.their.script
+ 0x07b0: 732e 3c2f 4c49 3e0a 0a3c 4c49 3e0a 4c6f s.</LI>..<LI>.Lo
+ 0x07c0: 6720 6669 6c65 7320 6172 6520 706c 6163 g.files.are.plac
+ 0x07d0: 6564 2069 6e20 3c54 543e 2f76 6172 2f6c ed.in.<TT>/var/l
+ 0x07e0: 6f67 2f61 7061 6368 653c 2f54 543e 2c20 og/apache</TT>,.
+ 0x07f0: 616e 6420 7769 6c6c 2062 6520 726f 7461 and.will.be.rota
+ 0x0800: 7465 640a 7765 656b 6c79 2e20 2054 6865 ted.weekly...The
+ 0x0810: 2066 7265 7175 656e 6379 206f 6620 726f .frequency.of.ro
+ 0x0820: 7461 7469 6f6e 2063 616e 2062 6520 6561 tation.can.be.ea
+ 0x0830: 7369 6c79 2063 6861 6e67 6564 2062 7920 sily.changed.by.
+ 0x0840: 6564 6974 696e 670a 3c54 543e 2f65 7463 editing.<TT>/etc
+ 0x0850: 2f6c 6f67 726f 7461 7465 2e64 2f61 7061 /logrotate.d/apa
+ 0x0860: 6368 653c 2f54 543e 2e3c 2f4c 493e 0a0a che</TT>.</LI>..
+ 0x0870: 3c4c 493e 0a54 6865 2064 6566 6175 6c74 <LI>.The.default
+ 0x0880: 2064 6972 6563 746f 7279 2069 6e64 6578 .directory.index
+ 0x0890: 2069 7320 3c54 543e 696e 6465 782e 6874 .is.<TT>index.ht
+ 0x08a0: 6d6c 3c2f 5454 3e2c 206d 6561 6e69 6e67 ml</TT>,.meaning
+ 0x08b0: 2074 6861 7420 7265 7175 6573 7473 0a66 .that.requests.f
+ 0x08c0: 6f72 2061 2064 6972 6563 746f 7279 203c or.a.directory.<
+ 0x08d0: 5454 3e2f 666f 6f2f 6261 722f 3c2f 5454 TT>/foo/bar/</TT
+ 0x08e0: 3e20 7769 6c6c 2067 6976 6520 7468 6520 >.will.give.the.
+ 0x08f0: 636f 6e74 656e 7473 206f 6620 7468 6520 contents.of.the.
+ 0x0900: 6669 6c65 203c 5454 3e2f 7661 722f 7777 file.<TT>/var/ww
+ 0x0910: 772f 666f 6f2f 6261 722f 696e 6465 782e w/foo/bar/index.
+ 0x0920: 6874 6d6c 3c2f 5454 3e0a 6966 2069 7420 html</TT>.if.it.
+ 0x0930: 6578 6973 7473 2028 6173 7375 6d69 6e67 exists.(assuming
+ 0x0940: 2074 6861 7420 3c54 543e 2f76 6172 2f77 .that.<TT>/var/w
+ 0x0950: 7777 3c2f 5454 3e20 6973 2079 6f75 7220 ww</TT>.is.your.
+ 0x0960: 3c54 543e 446f 6375 6d65 6e74 526f 6f74 <TT>DocumentRoot
+ 0x0970: 3c2f 5454 3e29 2e3c 2f4c 493e 0a0a 3c4c </TT>).</LI>..<L
+ 0x0980: 493e 0a55 7365 7220 6469 7265 6374 6f72 I>.User.director
+ 0x0990: 6965 7320 6172 6520 656e 6162 6c65 642c ies.are.enabled,
+ 0x09a0: 2061 6e64 2075 7365 7220 646f 6375 6d65 .and.user.docume
+ 0x09b0: 6e74 7320 7769 6c6c 2062 6520 6c6f 6f6b nts.will.be.look
+ 0x09c0: 6564 2066 6f72 0a69 6e20 7468 6520 3c54 ed.for.in.the.<T
+ 0x09d0: 543e 7075 626c 6963 5f68 746d 6c3c 2f54 T>public_html</T
+ 0x09e0: 543e 2064 6972 6563 746f 7279 206f 6620 T>.directory.of.
+ 0x09f0: 7468 6520 7573 6572 7327 2068 6f6d 6573 the.users'.homes
+ 0x0a00: 2e20 2054 6865 7365 2064 6972 730a 7368 ...These.dirs.sh
+ 0x0a10: 6f75 6c64 2062 6520 756e 6465 7220 3c54 ould.be.under.<T
+ 0x0a20: 543e 2f68 6f6d 653c 2f54 543e 2c20 616e T>/home</TT>,.an
+ 0x0a30: 6420 7573 6572 7320 7769 6c6c 206e 6f74 d.users.will.not
+ 0x0a40: 2062 6520 6162 6c65 2074 6f20 7379 6d6c .be.able.to.syml
+ 0x0a50: 696e 6b0a 746f 2066 696c 6573 2074 6865 ink.to.files.the
+ 0x0a60: 7920 646f 6e27 7420 6f77 6e2e 3c2f 4c49 y.don't.own.</LI
+ 0x0a70: 3e0a 0a3c 2f55 4c3e 0a41 6c6c 2074 6865 >..</UL>.All.the
+ 0x0a80: 2073 7461 6e64 6172 6420 6170 6163 6865 .standard.apache
+ 0x0a90: 206d 6f64 756c 6573 2061 7265 2061 7661 .modules.are.ava
+ 0x0aa0: 696c 6162 6c65 2077 6974 6820 7468 6973 ilable.with.this
+ 0x0ab0: 2072 656c 6561 7365 2061 6e64 2061 7265 .release.and.are
+ 0x0ac0: 0a6e 6f77 206d 616e 6167 6564 2077 6974 .now.managed.wit
+ 0x0ad0: 6820 6465 6263 6f6e 662e 2020 5479 7065 h.debconf...Type
+ 0x0ae0: 203c 5454 3e64 706b 672d 7265 636f 6e66 .<TT>dpkg-reconf
+ 0x0af0: 6967 7572 6520 6170 6163 6865 3c2f 5454 igure.apache</TT
+ 0x0b00: 3e20 746f 0a73 656c 6563 7420 7768 6963 >.to.select.whic
+ 0x0b10: 6820 6d6f 6475 6c65 7320 796f 7520 7761 h.modules.you.wa
+ 0x0b20: 6e74 2065 6e61 626c 6564 2e20 204d 616e nt.enabled...Man
+ 0x0b30: 7920 6f74 6865 7220 6d6f 6475 6c65 7320 y.other.modules.
+ 0x0b40: 6172 6520 6176 6169 6c61 626c 650a 7468 are.available.th
+ 0x0b50: 726f 7567 6820 7468 6520 4465 6269 616e rough.the.Debian
+ 0x0b60: 2070 6163 6b61 6765 2073 7973 7465 6d20 .package.system.
+ 0x0b70: 7769 7468 2074 6865 206e 616d 6573 203c with.the.names.<
+ 0x0b80: 5454 3e6c 6962 6170 6163 6865 2d6d 6f64 TT>libapache-mod
+ 0x0b90: 2d2a 3c2f 5454 3e2e 0a49 6620 796f 7520 -*</TT>..If.you.
+ 0x0ba0: 6e65 6564 2074 6f20 636f 6d70 696c 6520 need.to.compile.
+ 0x0bb0: 6120 6d6f 6475 6c65 2079 6f75 7273 656c a.module.yoursel
+ 0x0bc0: 662c 2079 6f75 2077 696c 6c20 6e65 6564 f,.you.will.need
+ 0x0bd0: 2074 6f20 696e 7374 616c 6c20 7468 650a .to.install.the.
+ 0x0be0: 3c54 543e 6170 6163 6865 2d64 6576 3c2f <TT>apache-dev</
+ 0x0bf0: 5454 3e20 7061 636b 6167 652e 0a0a 3c50 TT>.package...<P
+ 0x0c00: 3e4d 6f72 6520 646f 6375 6d65 6e74 6174 >More.documentat
+ 0x0c10: 696f 6e20 6f6e 2041 7061 6368 6520 6361 ion.on.Apache.ca
+ 0x0c20: 6e20 6265 2066 6f75 6e64 206f 6e3a 0a3c n.be.found.on:.<
+ 0x0c30: 554c 3e0a 3c4c 493e 0a54 6865 203c 4120 UL>.<LI>.The.<A.
+ 0x0c40: 4852 4546 3d22 2f64 6f63 2f61 7061 6368 HREF="/doc/apach
+ 0x0c50: 652d 646f 632f 6d61 6e75 616c 2f22 3e41 e-doc/manual/">A
+ 0x0c60: 7061 6368 6520 646f 6375 6d65 6e74 6174 pache.documentat
+ 0x0c70: 696f 6e3c 2f41 3e20 7374 6f72 6564 206f ion</A>.stored.o
+ 0x0c80: 6e20 796f 7572 2073 6572 7665 722e 3c2f n.your.server.</
+ 0x0c90: 4c49 3e0a 0a3c 4c49 3e0a 5468 6520 3c41 LI>..<LI>.The.<A
+ 0x0ca0: 2048 5245 463d 2268 7474 703a 2f2f 7777 .HREF="http://ww
+ 0x0cb0: 772e 6170 6163 6865 2e6f 7267 2f22 3e41 w.apache.org/">A
+ 0x0cc0: 7061 6368 6520 5072 6f6a 6563 743c 2f41 pache.Project</A
+ 0x0cd0: 3e20 686f 6d65 2073 6974 652e 3c2f 4c49 >.home.site.</LI
+ 0x0ce0: 3e0a 0a3c 4c49 3e0a 5468 6520 3c41 2048 >..<LI>.The.<A.H
+ 0x0cf0: 5245 463d 2268 7474 703a 2f2f 7777 772e REF="http://www.
+ 0x0d00: 6170 6163 6865 2d73 736c 2e6f 7267 2f22 apache-ssl.org/"
+ 0x0d10: 3e41 7061 6368 652d 5353 4c3c 2f41 3e20 >Apache-SSL</A>.
+ 0x0d20: 686f 6d65 2073 6974 652e 3c2f 4c49 3e0a home.site.</LI>.
+ 0x0d30: 0a3c 4c49 3e0a 5468 6520 3c41 2048 5245 .<LI>.The.<A.HRE
+ 0x0d40: 463d 2268 7474 703a 2f2f 7065 726c 2e61 F="http://perl.a
+ 0x0d50: 7061 6368 652e 6f72 672f 223e 6d6f 6420 pache.org/">mod.
+ 0x0d60: 7065 726c 3c2f 413e 2068 6f6d 6520 7369 perl</A>.home.si
+ 0x0d70: 7465 2e3c 2f4c 493e 0a0a 3c4c 493e 0a54 te.</LI>..<LI>.T
+ 0x0d80: 6865 203c 4120 4852 4546 3d22 6874 7470 he.<A.HREF="http
+ 0x0d90: 3a2f 2f77 7777 2e61 7061 6368 6577 6565 ://www.apachewee
+ 0x0da0: 6b2e 636f 6d2f 223e 4170 6163 6865 5765 k.com/">ApacheWe
+ 0x0db0: 656b 3c2f 413e 206e 6577 736c 6574 7465 ek</A>.newslette
+ 0x0dc0: 722e 3c2f 4c49 3e0a 0a3c 4c49 3e0a 5468 r.</LI>..<LI>.Th
+ 0x0dd0: 6520 3c41 2048 5245 463d 2268 7474 703a e.<A.HREF="http:
+ 0x0de0: 2f2f 7777 772e 6465 6269 616e 2e6f 7267 //www.debian.org
+ 0x0df0: 2f64 6f63 2f22 3e44 6562 6961 6e20 5072 /doc/">Debian.Pr
+ 0x0e00: 6f6a 6563 740a 446f 6375 6d65 6e74 6174 oject.Documentat
+ 0x0e10: 696f 6e3c 2f41 3e20 7768 6963 6820 636f ion</A>.which.co
+ 0x0e20: 6e74 6169 6e73 2048 4f57 544f 732c 2046 ntains.HOWTOs,.F
+ 0x0e30: 4151 732c 2061 6e64 2073 6f66 7477 6172 AQs,.and.softwar
+ 0x0e40: 6520 7570 6461 7465 732e 3c2f 4c49 3e0a e.updates.</LI>.
+ 0x0e50: 3c2f 554c 3e0a 0a3c 503e 596f 7520 6361 </UL>..<P>You.ca
+ 0x0e60: 6e20 616c 736f 2063 6f6e 7375 6c74 2074 n.also.consult.t
+ 0x0e70: 6865 206c 6973 7420 6f66 203c 4120 4852 he.list.of.<A.HR
+ 0x0e80: 4546 3d22 6874 7470 3a2f 2f77 7777 2e62 EF="http://www.b
+ 0x0e90: 6f75 7465 6c6c 2e63 6f6d 2f66 6171 2f22 outell.com/faq/"
+ 0x0ea0: 3e57 6f72 6c64 0a57 6964 6520 5765 6220 >World.Wide.Web.
+ 0x0eb0: 4672 6571 7565 6e74 6c79 2041 736b 6564 Frequently.Asked
+ 0x0ec0: 2051 7565 7374 696f 6e73 3c2f 413e 2066 .Questions</A>.f
+ 0x0ed0: 6f72 2069 6e66 6f72 6d61 7469 6f6e 2e0a or.information..
+ 0x0ee0: 0a3c 4832 3e4c 6574 206f 7468 6572 2070 .<H2>Let.other.p
+ 0x0ef0: 656f 706c 6520 6b6e 6f77 2061 626f 7574 eople.know.about
+ 0x0f00: 2074 6869 7320 7365 7276 6572 3c2f 4832 .this.server</H2
+ 0x0f10: 3e0a 0a3c 4120 4852 4546 3d22 6874 7470 >..<A.HREF="http
+ 0x0f20: 3a2f 2f6e 6574 6372 6166 742e 636f 6d2f ://netcraft.com/
+ 0x0f30: 223e 4e65 7463 7261 6674 3c2f 413e 2070 ">Netcraft</A>.p
+ 0x0f40: 726f 7669 6465 7320 616e 2069 6e74 6572 rovides.an.inter
+ 0x0f50: 6573 7469 6e67 2066 7265 650a 7365 7276 esting.free.serv
+ 0x0f60: 6963 6520 666f 7220 7765 6220 7369 7465 ice.for.web.site
+ 0x0f70: 206d 6f6e 6974 6f72 696e 6720 616e 6420 .monitoring.and.
+ 0x0f80: 7374 6174 6973 7469 6320 636f 6c6c 6563 statistic.collec
+ 0x0f90: 7469 6f6e 2e0a 596f 7520 6361 6e20 6c65 tion..You.can.le
+ 0x0fa0: 7420 7468 656d 206b 6e6f 7720 6162 6f75 t.them.know.abou
+ 0x0fb0: 7420 796f 7572 2073 6572 7665 7220 7573 t.your.server.us
+ 0x0fc0: 696e 6720 7468 6569 720a 3c41 2048 5245 ing.their.<A.HRE
+ 0x0fd0: 463d 2268 7474 703a 2f2f 7570 7469 6d65 F="http://uptime
+ 0x0fe0: 2e6e 6574 6372 6166 742e 636f 6d2f 223e .netcraft.com/">
+ 0x0ff0: 696e 7465 7266 6163 653c 2f41 3e2e 0a45 interface</A>..E
+ 0x1000: 6e61 626c 696e 6720 7468 6520 6d6f 6e69 nabling.the.moni
+ 0x1010: 746f 7269 6e67 206f 6620 796f 7572 2073 toring.of.your.s
+ 0x1020: 6572 7665 7220 7769 6c6c 2070 726f 7669 erver.will.provi
+ 0x1030: 6465 2061 2062 6574 7465 7220 676c 6f62 de.a.better.glob
+ 0x1040: 616c 206f 7665 7276 6965 770a 6f66 2077 al.overview.of.w
+ 0x1050: 686f 2069 7320 7573 696e 6720 7768 6174 ho.is.using.what
+ 0x1060: 2061 6e64 2077 6865 7265 2c20 616e 6420 .and.where,.and.
+ 0x1070: 6974 2077 6f75 6c64 2067 6976 6520 4465 it.would.give.De
+ 0x1080: 6269 616e 2061 2062 6574 7465 720a 6f76 bian.a.better.ov
+ 0x1090: 6572 7669 6577 206f 6620 7468 6520 6170 erview.of.the.ap
+ 0x10a0: 6163 6865 2070 6163 6b61 6765 2075 7361 ache.package.usa
+ 0x10b0: 6765 2e0a 0a3c 4832 3e41 626f 7574 2074 ge...<H2>About.t
+ 0x10c0: 6869 7320 7061 6765 3c2f 4832 3e0a 0a3c his.page</H2>..<
+ 0x10d0: 494d 4720 414c 4947 4e3d 2272 6967 6874 IMG.ALIGN="right
+ 0x10e0: 2220 414c 543d 2222 2048 4549 4748 543d ".ALT="".HEIGHT=
+ 0x10f0: 2232 3437 2220 5749 4454 483d 2232 3738 "247".WIDTH="278
+ 0x1100: 2220 5352 433d 2269 636f 6e73 2f6a 6865 ".SRC="icons/jhe
+ 0x1110: 3036 312e 706e 6722 3e0a 0a3c 503e 5468 061.png">..<P>Th
+ 0x1120: 6973 2069 7320 6120 706c 6163 6568 6f6c is.is.a.placehol
+ 0x1130: 6465 7220 7061 6765 2069 6e73 7461 6c6c der.page.install
+ 0x1140: 6564 2062 7920 7468 6520 3c41 0a48 5245 ed.by.the.<A.HRE
+ 0x1150: 463d 2268 7474 703a 2f2f 7777 772e 6465 F="http://www.de
+ 0x1160: 6269 616e 2e6f 7267 2f22 3e44 6562 6961 bian.org/">Debia
+ 0x1170: 6e3c 2f41 3e0a 7265 6c65 6173 6520 6f66 n</A>.release.of
+ 0x1180: 2074 6865 2061 7061 6368 6520 5765 6220 .the.apache.Web.
+ 0x1190: 7365 7276 6572 2070 6163 6b61 6765 2e0a server.package..
+ 0x11a0: 0a3c 503e 5468 6973 2063 6f6d 7075 7465 .<P>This.compute
+ 0x11b0: 7220 6861 7320 696e 7374 616c 6c65 6420 r.has.installed.
+ 0x11c0: 7468 6520 4465 6269 616e 2047 4e55 2f4c the.Debian.GNU/L
+ 0x11d0: 696e 7578 206f 7065 7261 7469 6e67 2073 inux.operating.s
+ 0x11e0: 7973 7465 6d2c 0a62 7574 2069 7420 6861 ystem,.but.it.ha
+ 0x11f0: 7320 3c73 7472 6f6e 673e 6e6f 7468 696e s.<strong>nothin
+ 0x1200: 6720 746f 2064 6f20 7769 7468 2074 6865 g.to.do.with.the
+ 0x1210: 2044 6562 6961 6e0a 5072 6f6a 6563 743c .Debian.Project<
+ 0x1220: 2f73 7472 6f6e 673e 2e20 506c 6561 7365 /strong>..Please
+ 0x1230: 2064 6f20 3c73 7472 6f6e 673e 6e6f 743c .do.<strong>not<
+ 0x1240: 2f73 7472 6f6e 673e 2063 6f6e 7461 6374 /strong>.contact
+ 0x1250: 2074 6865 2044 6562 6961 6e0a 5072 6f6a .the.Debian.Proj
+ 0x1260: 6563 7420 6162 6f75 7420 6974 2e3c 2f50 ect.about.it.</P
+ 0x1270: 3e0a 0a3c 503e 4966 2079 6f75 2066 696e >..<P>If.you.fin
+ 0x1280: 6420 6120 6275 6720 696e 2074 6869 7320 d.a.bug.in.this.
+ 0x1290: 6170 6163 6865 2070 6163 6b61 6765 2c20 apache.package,.
+ 0x12a0: 6f72 2069 6e20 4170 6163 6865 2069 7473 or.in.Apache.its
+ 0x12b0: 656c 662c 0a70 6c65 6173 6520 6669 6c65 elf,.please.file
+ 0x12c0: 2061 2062 7567 2072 6570 6f72 7420 6f6e .a.bug.report.on
+ 0x12d0: 2069 742e 2020 496e 7374 7275 6374 696f .it...Instructio
+ 0x12e0: 6e73 206f 6e20 646f 696e 6720 7468 6973 ns.on.doing.this
+ 0x12f0: 2c20 616e 6420 7468 650a 6c69 7374 206f ,.and.the.list.o
+ 0x1300: 6620 3c41 2048 5245 463d 2268 7474 703a f.<A.HREF="http:
+ 0x1310: 2f2f 6275 6773 2e64 6562 6961 6e2e 6f72 //bugs.debian.or
+ 0x1320: 672f 7372 633a 6170 6163 6865 223e 6b6e g/src:apache">kn
+ 0x1330: 6f77 6e20 6275 6773 3c2f 413e 206f 6620 own.bugs</A>.of.
+ 0x1340: 7468 6973 0a70 6163 6b61 6765 2c20 6361 this.package,.ca
+ 0x1350: 6e20 6265 2066 6f75 6e64 2069 6e20 7468 n.be.found.in.th
+ 0x1360: 6520 0a3c 4120 4852 4546 3d22 6874 7470 e..<A.HREF="http
+ 0x1370: 3a2f 2f77 7777 2e64 6562 6961 6e2e 6f72 ://www.debian.or
+ 0x1380: 672f 4275 6773 2f52 6570 6f72 7469 6e67 g/Bugs/Reporting
+ 0x1390: 223e 4465 6269 616e 2042 7567 2054 7261 ">Debian.Bug.Tra
+ 0x13a0: 636b 696e 6720 5379 7374 656d 3c2f 413e cking.System</A>
+ 0x13b0: 2e0a 0a3c 503e 5468 616e 6b73 2066 6f72 ...<P>Thanks.for
+ 0x13c0: 2075 7369 6e67 2074 6869 7320 7061 636b .using.this.pack
+ 0x13d0: 6167 652c 2061 6e64 2063 6f6e 6772 6174 age,.and.congrat
+ 0x13e0: 756c 6174 696f 6e73 2066 6f72 2079 6f75 ulations.for.you
+ 0x13f0: 7220 6368 6f69 6365 206f 660a 6120 4465 r.choice.of.a.De
+ 0x1400: 6269 616e 2073 7973 7465 6d21 3c2f 503e bian.system!</P>
+ 0x1410: 0a0a 3c44 4956 2061 6c69 676e 3d22 6365 ..<DIV.align="ce
+ 0x1420: 6e74 6572 223e 0a3c 6120 6872 6566 3d22 nter">.<a.href="
+ 0x1430: 6874 7470 3a2f 2f77 7777 2e64 6562 6961 http://www.debia
+ 0x1440: 6e2e 6f72 672f 223e 0a3c 494d 4720 616c n.org/">.<IMG.al
+ 0x1450: 6967 6e3d 226d 6964 646c 6522 2068 6569 ign="middle".hei
+ 0x1460: 6768 743d 2233 3022 2077 6964 7468 3d22 ght="30".width="
+ 0x1470: 3235 2220 7372 633d 2269 636f 6e73 2f64 25".src="icons/d
+ 0x1480: 6562 6961 6e2f 6f70 656e 6c6f 676f 2d32 ebian/openlogo-2
+ 0x1490: 352e 6a70 6722 2061 6c74 3d22 4465 6269 5.jpg".alt="Debi
+ 0x14a0: 616e 223e 0a3c 2f61 3e0a 3c61 2068 7265 an">.</a>.<a.hre
+ 0x14b0: 663d 2268 7474 703a 2f2f 7777 772e 6170 f="http://www.ap
+ 0x14c0: 6163 6865 2e6f 7267 2f22 3e0a 3c49 4d47 ache.org/">.<IMG
+ 0x14d0: 2061 6c69 676e 3d22 6d69 6464 6c65 2220 .align="middle".
+ 0x14e0: 6865 6967 6874 3d22 3332 2220 7769 6474 height="32".widt
+ 0x14f0: 683d 2232 3539 2220 7372 633d 2269 636f h="259".src="ico
+ 0x1500: 6e73 2f61 7061 6368 655f 7062 2e70 6e67 ns/apache_pb.png
+ 0x1510: 2220 616c 743d 2241 7061 6368 6522 3e0a ".alt="Apache">.
+ 0x1520: 3c2f 613e 0a3c 2f44 4956 3e0a 0a3c 212d </a>.</DIV>..<!-
+ 0x1530: 2d0a 2020 5468 6973 2070 6167 6520 7761 -...This.page.wa
+ 0x1540: 7320 696e 6974 6961 6c6c 7920 6372 6561 s.initially.crea
+ 0x1550: 7465 6420 6279 204a 6f68 6e69 6520 496e ted.by.Johnie.In
+ 0x1560: 6772 616d 2028 6874 7470 3a2f 2f6e 6574 gram.(http://net
+ 0x1570: 676f 642e 6e65 742f 290a 2020 4974 2077 god.net/)...It.w
+ 0x1580: 6173 206c 6174 6572 2065 6469 7465 6420 as.later.edited.
+ 0x1590: 6279 204d 6174 7468 6577 2057 696c 636f by.Matthew.Wilco
+ 0x15a0: 7820 616e 6420 4a6f 7369 7020 526f 6469 x.and.Josip.Rodi
+ 0x15b0: 6e2e 0a20 204c 6173 7420 6d6f 6469 6669 n....Last.modifi
+ 0x15c0: 6564 3a20 2444 6174 653a 2032 3030 342f ed:.$Date:.2004/
+ 0x15d0: 3036 2f32 3020 3135 3a33 333a 3537 2024 06/20.15:33:57.$
+ 0x15e0: 2e0a 2020 2d2d 3e0a 0a3c 2f42 4f44 593e ....-->..</BODY>
+ 0x15f0: 0a3c 2f48 544d 4c3e 0a .</HTML>.
+ 7 03:57:35.941260 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5560, win 12383, options [nop,nop,TS val 1306300953 ecr 1306300953], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
+ 0x0010: 0034 1b6e 4000 4006 2154 7f00 0001 7f00 .4.n@.@.!T......
+ 0x0020: 0001 da70 0050 3758 8a49 377a a3a9 8010 ...p.P7X.I7z....
+ 0x0030: 305f 10ea 0000 0101 080a 4ddc 9219 4ddc 0_........M...M.
+ 0x0040: 9219 ..
+ 8 03:57:37.229575 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [F.], seq 203, ack 5560, win 12383, options [nop,nop,TS val 1306302241 ecr 1306300953], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
+ 0x0010: 0034 1b70 4000 4006 2152 7f00 0001 7f00 .4.p@.@.!R......
+ 0x0020: 0001 da70 0050 3758 8a49 377a a3a9 8011 ...p.P7X.I7z....
+ 0x0030: 305f 0be1 0000 0101 080a 4ddc 9721 4ddc 0_........M..!M.
+ 0x0040: 9219 ..
+ 9 03:57:37.230839 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [F.], seq 5560, ack 204, win 8192, options [nop,nop,TS val 1306302243 ecr 1306302241], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
+ 0x0010: 0034 1fe8 4000 4006 1cda 7f00 0001 7f00 .4..@.@.........
+ 0x0020: 0001 0050 da70 377a a3a9 3758 8a4a 8011 ...P.p7z..7X.J..
+ 0x0030: 2000 1735 0000 0101 080a 4ddc 9723 4ddc ...5......M..#M.
+ 0x0040: 9721 .!
+ 10 03:57:37.230900 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5561, win 12383, options [nop,nop,TS val 1306302243 ecr 1306302243], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500 ..............E.
+ 0x0010: 0034 1b72 4000 4006 2150 7f00 0001 7f00 .4.r@.@.!P......
+ 0x0020: 0001 da70 0050 3758 8a4a 377a a3aa 8010 ...p.P7X.J7z....
+ 0x0030: 305f 06d4 0000 0101 080a 4ddc 9723 4ddc 0_........M..#M.
+ 0x0040: 9723 .#
diff --git a/tests/print-flags.pcap b/tests/print-flags.pcap
new file mode 100644
index 0000000..8798c69
--- /dev/null
+++ b/tests/print-flags.pcap
Binary files differ
diff --git a/tests/print-x.out b/tests/print-x.out
new file mode 100644
index 0000000..ed9de77
--- /dev/null
+++ b/tests/print-x.out
@@ -0,0 +1,409 @@
+ 1 03:57:35.938066 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [S], seq 928549246, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 0,nop,wscale 2], length 0
+ 0x0000: 4500 003c 1b68 4000 4006 2152 7f00 0001
+ 0x0010: 7f00 0001 da70 0050 3758 897e 0000 0000
+ 0x0020: a002 7fff 1421 0000 0204 400c 0402 080a
+ 0x0030: 4ddc 9216 0000 0000 0103 0302
+ 2 03:57:35.938122 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [S.], seq 930778609, ack 928549247, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 1306300950,nop,wscale 2], length 0
+ 0x0000: 4500 003c 0000 4000 4006 3cba 7f00 0001
+ 0x0010: 7f00 0001 0050 da70 377a 8df1 3758 897f
+ 0x0020: a012 7fff 6eb1 0000 0204 400c 0402 080a
+ 0x0030: 4ddc 9216 4ddc 9216 0103 0302
+ 3 03:57:35.938167 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 1, win 8192, options [nop,nop,TS val 1306300950 ecr 1306300950], length 0
+ 0x0000: 4500 0034 1b6a 4000 4006 2158 7f00 0001
+ 0x0010: 7f00 0001 da70 0050 3758 897f 377a 8df2
+ 0x0020: 8010 2000 37d0 0000 0101 080a 4ddc 9216
+ 0x0030: 4ddc 9216
+ 4 03:57:35.939423 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [P.], seq 1:203, ack 1, win 8192, options [nop,nop,TS val 1306300951 ecr 1306300950], length 202: HTTP: GET / HTTP/1.1
+ 0x0000: 4500 00fe 1b6c 4000 4006 208c 7f00 0001
+ 0x0010: 7f00 0001 da70 0050 3758 897f 377a 8df2
+ 0x0020: 8018 2000 fef2 0000 0101 080a 4ddc 9217
+ 0x0030: 4ddc 9216 4745 5420 2f20 4854 5450 2f31
+ 0x0040: 2e31 0d0a 486f 7374 3a20 6c6f 6361 6c68
+ 0x0050: 6f73 740d 0a55 7365 722d 4167 656e 743a
+ 0x0060: 2045 4c69 6e6b 732f 302e 3130 2e34 2d37
+ 0x0070: 2d64 6562 6961 6e20 2874 6578 746d 6f64
+ 0x0080: 653b 204c 696e 7578 2032 2e36 2e31 312d
+ 0x0090: 312d 3638 362d 736d 7020 6936 3836 3b20
+ 0x00a0: 3133 3278 3536 2d32 290d 0a41 6363 6570
+ 0x00b0: 743a 202a 2f2a 0d0a 4163 6365 7074 2d45
+ 0x00c0: 6e63 6f64 696e 673a 2067 7a69 700d 0a41
+ 0x00d0: 6363 6570 742d 4c61 6e67 7561 6765 3a20
+ 0x00e0: 656e 0d0a 436f 6e6e 6563 7469 6f6e 3a20
+ 0x00f0: 4b65 6570 2d41 6c69 7665 0d0a 0d0a
+ 5 03:57:35.940474 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [.], ack 203, win 8192, options [nop,nop,TS val 1306300952 ecr 1306300951], length 0
+ 0x0000: 4500 0034 1fe4 4000 4006 1cde 7f00 0001
+ 0x0010: 7f00 0001 0050 da70 377a 8df2 3758 8a49
+ 0x0020: 8010 2000 3703 0000 0101 080a 4ddc 9218
+ 0x0030: 4ddc 9217
+ 6 03:57:35.941232 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [P.], seq 1:5560, ack 203, win 8192, options [nop,nop,TS val 1306300953 ecr 1306300951], length 5559: HTTP: HTTP/1.1 200 OK
+ 0x0000: 4500 15eb 1fe6 4000 4006 0725 7f00 0001
+ 0x0010: 7f00 0001 0050 da70 377a 8df2 3758 8a49
+ 0x0020: 8018 2000 13e0 0000 0101 080a 4ddc 9219
+ 0x0030: 4ddc 9217 4854 5450 2f31 2e31 2032 3030
+ 0x0040: 204f 4b0d 0a44 6174 653a 2057 6564 2c20
+ 0x0050: 3036 204a 756c 2032 3030 3520 3033 3a35
+ 0x0060: 373a 3335 2047 4d54 0d0a 5365 7276 6572
+ 0x0070: 3a20 4170 6163 6865 2f31 2e33 2e33 330d
+ 0x0080: 0a4c 6173 742d 4d6f 6469 6669 6564 3a20
+ 0x0090: 5375 6e2c 2031 3520 4175 6720 3230 3034
+ 0x00a0: 2030 303a 3433 3a34 3120 474d 540d 0a45
+ 0x00b0: 5461 673a 2022 3665 3830 6630 2d31 3438
+ 0x00c0: 612d 3431 3165 6231 6264 220d 0a41 6363
+ 0x00d0: 6570 742d 5261 6e67 6573 3a20 6279 7465
+ 0x00e0: 730d 0a43 6f6e 7465 6e74 2d4c 656e 6774
+ 0x00f0: 683a 2035 3235 380d 0a4b 6565 702d 416c
+ 0x0100: 6976 653a 2074 696d 656f 7574 3d31 352c
+ 0x0110: 206d 6178 3d31 3030 0d0a 436f 6e6e 6563
+ 0x0120: 7469 6f6e 3a20 4b65 6570 2d41 6c69 7665
+ 0x0130: 0d0a 436f 6e74 656e 742d 5479 7065 3a20
+ 0x0140: 7465 7874 2f68 746d 6c3b 2063 6861 7273
+ 0x0150: 6574 3d69 736f 2d38 3835 392d 310d 0a0d
+ 0x0160: 0a3c 2144 4f43 5459 5045 2048 544d 4c20
+ 0x0170: 5055 424c 4943 2022 2d2f 2f57 3343 2f2f
+ 0x0180: 4454 4420 4854 4d4c 2034 2e30 3120 5472
+ 0x0190: 616e 7369 7469 6f6e 616c 2f2f 454e 223e
+ 0x01a0: 0a3c 4854 4d4c 3e0a 3c48 4541 443e 0a20
+ 0x01b0: 2020 3c4d 4554 4120 4854 5450 2d45 5155
+ 0x01c0: 4956 3d22 436f 6e74 656e 742d 5479 7065
+ 0x01d0: 2220 434f 4e54 454e 543d 2274 6578 742f
+ 0x01e0: 6874 6d6c 3b20 6368 6172 7365 743d 6973
+ 0x01f0: 6f2d 3838 3539 2d31 223e 0a20 2020 3c4d
+ 0x0200: 4554 4120 4e41 4d45 3d22 4465 7363 7269
+ 0x0210: 7074 696f 6e22 2043 4f4e 5445 4e54 3d22
+ 0x0220: 5468 6520 696e 6974 6961 6c20 696e 7374
+ 0x0230: 616c 6c61 7469 6f6e 206f 6620 4465 6269
+ 0x0240: 616e 2061 7061 6368 652e 223e 0a20 2020
+ 0x0250: 3c54 4954 4c45 3e50 6c61 6365 686f 6c64
+ 0x0260: 6572 2070 6167 653c 2f54 4954 4c45 3e0a
+ 0x0270: 3c2f 4845 4144 3e0a 3c42 4f44 5920 5445
+ 0x0280: 5854 3d22 2330 3030 3030 3022 2042 4743
+ 0x0290: 4f4c 4f52 3d22 2346 4646 4646 4622 204c
+ 0x02a0: 494e 4b3d 2223 3030 3030 4546 2220 564c
+ 0x02b0: 494e 4b3d 2223 3535 3138 3841 2220 414c
+ 0x02c0: 494e 4b3d 2223 4646 3030 3030 223e 0a0a
+ 0x02d0: 3c48 313e 506c 6163 6568 6f6c 6465 7220
+ 0x02e0: 7061 6765 3c2f 4831 3e0a 3c48 323e 4966
+ 0x02f0: 2079 6f75 2061 7265 206a 7573 7420 6272
+ 0x0300: 6f77 7369 6e67 2074 6865 2077 6562 3c2f
+ 0x0310: 6832 3e0a 0a3c 503e 5468 6520 6f77 6e65
+ 0x0320: 7220 6f66 2074 6869 7320 7765 6220 7369
+ 0x0330: 7465 2068 6173 206e 6f74 2070 7574 2075
+ 0x0340: 7020 616e 7920 7765 6220 7061 6765 7320
+ 0x0350: 7965 742e 0a50 6c65 6173 6520 636f 6d65
+ 0x0360: 2062 6163 6b20 6c61 7465 722e 3c2f 503e
+ 0x0370: 0a0a 3c50 3e3c 534d 414c 4c3e 3c43 4954
+ 0x0380: 453e 4d6f 7665 2061 6c6f 6e67 2c20 6e6f
+ 0x0390: 7468 696e 6720 746f 2073 6565 2068 6572
+ 0x03a0: 652e 2e2e 3c2f 4349 5445 3e20 3a2d 293c
+ 0x03b0: 2f53 4d41 4c4c 3e3c 2f50 3e0a 0a3c 4832
+ 0x03c0: 3e49 6620 796f 7520 6172 6520 7472 7969
+ 0x03d0: 6e67 2074 6f20 6c6f 6361 7465 2074 6865
+ 0x03e0: 2061 646d 696e 6973 7472 6174 6f72 206f
+ 0x03f0: 6620 7468 6973 206d 6163 6869 6e65 3c2f
+ 0x0400: 4832 3e0a 0a3c 503e 4966 2079 6f75 2077
+ 0x0410: 616e 7420 746f 2072 6570 6f72 7420 736f
+ 0x0420: 6d65 7468 696e 6720 6162 6f75 7420 7468
+ 0x0430: 6973 2068 6f73 7427 7320 6265 6861 7669
+ 0x0440: 6f72 2c20 706c 6561 7365 0a63 6f6e 7461
+ 0x0450: 6374 2074 6865 2049 6e74 6572 6e65 7420
+ 0x0460: 5365 7276 6963 6520 5072 6f76 6964 6572
+ 0x0470: 2028 4953 5029 2069 6e76 6f6c 7665 6420
+ 0x0480: 6469 7265 6374 6c79 2e3c 2f50 3e0a 0a3c
+ 0x0490: 503e 5365 6520 7468 6520 3c41 2068 7265
+ 0x04a0: 663d 2268 7474 703a 2f2f 7777 772e 6162
+ 0x04b0: 7573 652e 6e65 742f 223e 4e65 7477 6f72
+ 0x04c0: 6b20 4162 7573 650a 436c 6561 7269 6e67
+ 0x04d0: 686f 7573 653c 2f41 3e20 666f 7220 686f
+ 0x04e0: 7720 746f 2064 6f20 7468 6973 2e3c 2f50
+ 0x04f0: 3e0a 0a3c 4832 3e49 6620 796f 7520 6172
+ 0x0500: 6520 7468 6520 6164 6d69 6e69 7374 7261
+ 0x0510: 746f 7220 6f66 2074 6869 7320 6d61 6368
+ 0x0520: 696e 653c 2f48 323e 0a0a 3c50 3e54 6865
+ 0x0530: 2069 6e69 7469 616c 2069 6e73 7461 6c6c
+ 0x0540: 6174 696f 6e20 6f66 203c 4120 6872 6566
+ 0x0550: 3d22 6874 7470 3a2f 2f77 7777 2e64 6562
+ 0x0560: 6961 6e2e 6f72 672f 223e 4465 6269 616e
+ 0x0570: 2773 0a61 7061 6368 653c 2f41 3e20 7765
+ 0x0580: 6220 7365 7276 6572 2070 6163 6b61 6765
+ 0x0590: 2077 6173 2073 7563 6365 7373 6675 6c2e
+ 0x05a0: 3c2f 503e 0a0a 3c50 3e3c 5354 524f 4e47
+ 0x05b0: 3e59 6f75 2073 686f 756c 6420 7265 706c
+ 0x05c0: 6163 6520 7468 6973 2070 6167 6520 7769
+ 0x05d0: 7468 2079 6f75 7220 6f77 6e20 7765 6220
+ 0x05e0: 7061 6765 7320 6173 0a73 6f6f 6e20 6173
+ 0x05f0: 2070 6f73 7369 626c 652e 3c2f 5354 524f
+ 0x0600: 4e47 3e3c 2f50 3e0a 0a3c 503e 556e 6c65
+ 0x0610: 7373 2079 6f75 2063 6861 6e67 6564 2069
+ 0x0620: 7473 2063 6f6e 6669 6775 7261 7469 6f6e
+ 0x0630: 2c20 796f 7572 206e 6577 2073 6572 7665
+ 0x0640: 7220 6973 2063 6f6e 6669 6775 7265 6420
+ 0x0650: 6173 2066 6f6c 6c6f 7773 3a0a 3c55 4c3e
+ 0x0660: 0a3c 4c49 3e0a 436f 6e66 6967 7572 6174
+ 0x0670: 696f 6e20 6669 6c65 7320 6361 6e20 6265
+ 0x0680: 2066 6f75 6e64 2069 6e20 3c54 543e 2f65
+ 0x0690: 7463 2f61 7061 6368 653c 2f54 543e 2e3c
+ 0x06a0: 2f4c 493e 0a0a 3c4c 493e 0a54 6865 203c
+ 0x06b0: 5454 3e44 6f63 756d 656e 7452 6f6f 743c
+ 0x06c0: 2f54 543e 2c20 7768 6963 6820 6973 2074
+ 0x06d0: 6865 2064 6972 6563 746f 7279 2075 6e64
+ 0x06e0: 6572 2077 6869 6368 2061 6c6c 2079 6f75
+ 0x06f0: 720a 4854 4d4c 2066 696c 6573 2073 686f
+ 0x0700: 756c 6420 6578 6973 742c 2069 7320 7365
+ 0x0710: 7420 746f 203c 5454 3e2f 7661 722f 7777
+ 0x0720: 773c 2f54 543e 2e3c 2f4c 493e 0a0a 3c4c
+ 0x0730: 493e 0a43 4749 2073 6372 6970 7473 2061
+ 0x0740: 7265 206c 6f6f 6b65 6420 666f 7220 696e
+ 0x0750: 203c 5454 3e2f 7573 722f 6c69 622f 6367
+ 0x0760: 692d 6269 6e3c 2f54 543e 2c20 7768 6963
+ 0x0770: 6820 6973 2077 6865 7265 0a44 6562 6961
+ 0x0780: 6e20 7061 636b 6167 6573 2077 696c 6c20
+ 0x0790: 706c 6163 6520 7468 6569 7220 7363 7269
+ 0x07a0: 7074 732e 3c2f 4c49 3e0a 0a3c 4c49 3e0a
+ 0x07b0: 4c6f 6720 6669 6c65 7320 6172 6520 706c
+ 0x07c0: 6163 6564 2069 6e20 3c54 543e 2f76 6172
+ 0x07d0: 2f6c 6f67 2f61 7061 6368 653c 2f54 543e
+ 0x07e0: 2c20 616e 6420 7769 6c6c 2062 6520 726f
+ 0x07f0: 7461 7465 640a 7765 656b 6c79 2e20 2054
+ 0x0800: 6865 2066 7265 7175 656e 6379 206f 6620
+ 0x0810: 726f 7461 7469 6f6e 2063 616e 2062 6520
+ 0x0820: 6561 7369 6c79 2063 6861 6e67 6564 2062
+ 0x0830: 7920 6564 6974 696e 670a 3c54 543e 2f65
+ 0x0840: 7463 2f6c 6f67 726f 7461 7465 2e64 2f61
+ 0x0850: 7061 6368 653c 2f54 543e 2e3c 2f4c 493e
+ 0x0860: 0a0a 3c4c 493e 0a54 6865 2064 6566 6175
+ 0x0870: 6c74 2064 6972 6563 746f 7279 2069 6e64
+ 0x0880: 6578 2069 7320 3c54 543e 696e 6465 782e
+ 0x0890: 6874 6d6c 3c2f 5454 3e2c 206d 6561 6e69
+ 0x08a0: 6e67 2074 6861 7420 7265 7175 6573 7473
+ 0x08b0: 0a66 6f72 2061 2064 6972 6563 746f 7279
+ 0x08c0: 203c 5454 3e2f 666f 6f2f 6261 722f 3c2f
+ 0x08d0: 5454 3e20 7769 6c6c 2067 6976 6520 7468
+ 0x08e0: 6520 636f 6e74 656e 7473 206f 6620 7468
+ 0x08f0: 6520 6669 6c65 203c 5454 3e2f 7661 722f
+ 0x0900: 7777 772f 666f 6f2f 6261 722f 696e 6465
+ 0x0910: 782e 6874 6d6c 3c2f 5454 3e0a 6966 2069
+ 0x0920: 7420 6578 6973 7473 2028 6173 7375 6d69
+ 0x0930: 6e67 2074 6861 7420 3c54 543e 2f76 6172
+ 0x0940: 2f77 7777 3c2f 5454 3e20 6973 2079 6f75
+ 0x0950: 7220 3c54 543e 446f 6375 6d65 6e74 526f
+ 0x0960: 6f74 3c2f 5454 3e29 2e3c 2f4c 493e 0a0a
+ 0x0970: 3c4c 493e 0a55 7365 7220 6469 7265 6374
+ 0x0980: 6f72 6965 7320 6172 6520 656e 6162 6c65
+ 0x0990: 642c 2061 6e64 2075 7365 7220 646f 6375
+ 0x09a0: 6d65 6e74 7320 7769 6c6c 2062 6520 6c6f
+ 0x09b0: 6f6b 6564 2066 6f72 0a69 6e20 7468 6520
+ 0x09c0: 3c54 543e 7075 626c 6963 5f68 746d 6c3c
+ 0x09d0: 2f54 543e 2064 6972 6563 746f 7279 206f
+ 0x09e0: 6620 7468 6520 7573 6572 7327 2068 6f6d
+ 0x09f0: 6573 2e20 2054 6865 7365 2064 6972 730a
+ 0x0a00: 7368 6f75 6c64 2062 6520 756e 6465 7220
+ 0x0a10: 3c54 543e 2f68 6f6d 653c 2f54 543e 2c20
+ 0x0a20: 616e 6420 7573 6572 7320 7769 6c6c 206e
+ 0x0a30: 6f74 2062 6520 6162 6c65 2074 6f20 7379
+ 0x0a40: 6d6c 696e 6b0a 746f 2066 696c 6573 2074
+ 0x0a50: 6865 7920 646f 6e27 7420 6f77 6e2e 3c2f
+ 0x0a60: 4c49 3e0a 0a3c 2f55 4c3e 0a41 6c6c 2074
+ 0x0a70: 6865 2073 7461 6e64 6172 6420 6170 6163
+ 0x0a80: 6865 206d 6f64 756c 6573 2061 7265 2061
+ 0x0a90: 7661 696c 6162 6c65 2077 6974 6820 7468
+ 0x0aa0: 6973 2072 656c 6561 7365 2061 6e64 2061
+ 0x0ab0: 7265 0a6e 6f77 206d 616e 6167 6564 2077
+ 0x0ac0: 6974 6820 6465 6263 6f6e 662e 2020 5479
+ 0x0ad0: 7065 203c 5454 3e64 706b 672d 7265 636f
+ 0x0ae0: 6e66 6967 7572 6520 6170 6163 6865 3c2f
+ 0x0af0: 5454 3e20 746f 0a73 656c 6563 7420 7768
+ 0x0b00: 6963 6820 6d6f 6475 6c65 7320 796f 7520
+ 0x0b10: 7761 6e74 2065 6e61 626c 6564 2e20 204d
+ 0x0b20: 616e 7920 6f74 6865 7220 6d6f 6475 6c65
+ 0x0b30: 7320 6172 6520 6176 6169 6c61 626c 650a
+ 0x0b40: 7468 726f 7567 6820 7468 6520 4465 6269
+ 0x0b50: 616e 2070 6163 6b61 6765 2073 7973 7465
+ 0x0b60: 6d20 7769 7468 2074 6865 206e 616d 6573
+ 0x0b70: 203c 5454 3e6c 6962 6170 6163 6865 2d6d
+ 0x0b80: 6f64 2d2a 3c2f 5454 3e2e 0a49 6620 796f
+ 0x0b90: 7520 6e65 6564 2074 6f20 636f 6d70 696c
+ 0x0ba0: 6520 6120 6d6f 6475 6c65 2079 6f75 7273
+ 0x0bb0: 656c 662c 2079 6f75 2077 696c 6c20 6e65
+ 0x0bc0: 6564 2074 6f20 696e 7374 616c 6c20 7468
+ 0x0bd0: 650a 3c54 543e 6170 6163 6865 2d64 6576
+ 0x0be0: 3c2f 5454 3e20 7061 636b 6167 652e 0a0a
+ 0x0bf0: 3c50 3e4d 6f72 6520 646f 6375 6d65 6e74
+ 0x0c00: 6174 696f 6e20 6f6e 2041 7061 6368 6520
+ 0x0c10: 6361 6e20 6265 2066 6f75 6e64 206f 6e3a
+ 0x0c20: 0a3c 554c 3e0a 3c4c 493e 0a54 6865 203c
+ 0x0c30: 4120 4852 4546 3d22 2f64 6f63 2f61 7061
+ 0x0c40: 6368 652d 646f 632f 6d61 6e75 616c 2f22
+ 0x0c50: 3e41 7061 6368 6520 646f 6375 6d65 6e74
+ 0x0c60: 6174 696f 6e3c 2f41 3e20 7374 6f72 6564
+ 0x0c70: 206f 6e20 796f 7572 2073 6572 7665 722e
+ 0x0c80: 3c2f 4c49 3e0a 0a3c 4c49 3e0a 5468 6520
+ 0x0c90: 3c41 2048 5245 463d 2268 7474 703a 2f2f
+ 0x0ca0: 7777 772e 6170 6163 6865 2e6f 7267 2f22
+ 0x0cb0: 3e41 7061 6368 6520 5072 6f6a 6563 743c
+ 0x0cc0: 2f41 3e20 686f 6d65 2073 6974 652e 3c2f
+ 0x0cd0: 4c49 3e0a 0a3c 4c49 3e0a 5468 6520 3c41
+ 0x0ce0: 2048 5245 463d 2268 7474 703a 2f2f 7777
+ 0x0cf0: 772e 6170 6163 6865 2d73 736c 2e6f 7267
+ 0x0d00: 2f22 3e41 7061 6368 652d 5353 4c3c 2f41
+ 0x0d10: 3e20 686f 6d65 2073 6974 652e 3c2f 4c49
+ 0x0d20: 3e0a 0a3c 4c49 3e0a 5468 6520 3c41 2048
+ 0x0d30: 5245 463d 2268 7474 703a 2f2f 7065 726c
+ 0x0d40: 2e61 7061 6368 652e 6f72 672f 223e 6d6f
+ 0x0d50: 6420 7065 726c 3c2f 413e 2068 6f6d 6520
+ 0x0d60: 7369 7465 2e3c 2f4c 493e 0a0a 3c4c 493e
+ 0x0d70: 0a54 6865 203c 4120 4852 4546 3d22 6874
+ 0x0d80: 7470 3a2f 2f77 7777 2e61 7061 6368 6577
+ 0x0d90: 6565 6b2e 636f 6d2f 223e 4170 6163 6865
+ 0x0da0: 5765 656b 3c2f 413e 206e 6577 736c 6574
+ 0x0db0: 7465 722e 3c2f 4c49 3e0a 0a3c 4c49 3e0a
+ 0x0dc0: 5468 6520 3c41 2048 5245 463d 2268 7474
+ 0x0dd0: 703a 2f2f 7777 772e 6465 6269 616e 2e6f
+ 0x0de0: 7267 2f64 6f63 2f22 3e44 6562 6961 6e20
+ 0x0df0: 5072 6f6a 6563 740a 446f 6375 6d65 6e74
+ 0x0e00: 6174 696f 6e3c 2f41 3e20 7768 6963 6820
+ 0x0e10: 636f 6e74 6169 6e73 2048 4f57 544f 732c
+ 0x0e20: 2046 4151 732c 2061 6e64 2073 6f66 7477
+ 0x0e30: 6172 6520 7570 6461 7465 732e 3c2f 4c49
+ 0x0e40: 3e0a 3c2f 554c 3e0a 0a3c 503e 596f 7520
+ 0x0e50: 6361 6e20 616c 736f 2063 6f6e 7375 6c74
+ 0x0e60: 2074 6865 206c 6973 7420 6f66 203c 4120
+ 0x0e70: 4852 4546 3d22 6874 7470 3a2f 2f77 7777
+ 0x0e80: 2e62 6f75 7465 6c6c 2e63 6f6d 2f66 6171
+ 0x0e90: 2f22 3e57 6f72 6c64 0a57 6964 6520 5765
+ 0x0ea0: 6220 4672 6571 7565 6e74 6c79 2041 736b
+ 0x0eb0: 6564 2051 7565 7374 696f 6e73 3c2f 413e
+ 0x0ec0: 2066 6f72 2069 6e66 6f72 6d61 7469 6f6e
+ 0x0ed0: 2e0a 0a3c 4832 3e4c 6574 206f 7468 6572
+ 0x0ee0: 2070 656f 706c 6520 6b6e 6f77 2061 626f
+ 0x0ef0: 7574 2074 6869 7320 7365 7276 6572 3c2f
+ 0x0f00: 4832 3e0a 0a3c 4120 4852 4546 3d22 6874
+ 0x0f10: 7470 3a2f 2f6e 6574 6372 6166 742e 636f
+ 0x0f20: 6d2f 223e 4e65 7463 7261 6674 3c2f 413e
+ 0x0f30: 2070 726f 7669 6465 7320 616e 2069 6e74
+ 0x0f40: 6572 6573 7469 6e67 2066 7265 650a 7365
+ 0x0f50: 7276 6963 6520 666f 7220 7765 6220 7369
+ 0x0f60: 7465 206d 6f6e 6974 6f72 696e 6720 616e
+ 0x0f70: 6420 7374 6174 6973 7469 6320 636f 6c6c
+ 0x0f80: 6563 7469 6f6e 2e0a 596f 7520 6361 6e20
+ 0x0f90: 6c65 7420 7468 656d 206b 6e6f 7720 6162
+ 0x0fa0: 6f75 7420 796f 7572 2073 6572 7665 7220
+ 0x0fb0: 7573 696e 6720 7468 6569 720a 3c41 2048
+ 0x0fc0: 5245 463d 2268 7474 703a 2f2f 7570 7469
+ 0x0fd0: 6d65 2e6e 6574 6372 6166 742e 636f 6d2f
+ 0x0fe0: 223e 696e 7465 7266 6163 653c 2f41 3e2e
+ 0x0ff0: 0a45 6e61 626c 696e 6720 7468 6520 6d6f
+ 0x1000: 6e69 746f 7269 6e67 206f 6620 796f 7572
+ 0x1010: 2073 6572 7665 7220 7769 6c6c 2070 726f
+ 0x1020: 7669 6465 2061 2062 6574 7465 7220 676c
+ 0x1030: 6f62 616c 206f 7665 7276 6965 770a 6f66
+ 0x1040: 2077 686f 2069 7320 7573 696e 6720 7768
+ 0x1050: 6174 2061 6e64 2077 6865 7265 2c20 616e
+ 0x1060: 6420 6974 2077 6f75 6c64 2067 6976 6520
+ 0x1070: 4465 6269 616e 2061 2062 6574 7465 720a
+ 0x1080: 6f76 6572 7669 6577 206f 6620 7468 6520
+ 0x1090: 6170 6163 6865 2070 6163 6b61 6765 2075
+ 0x10a0: 7361 6765 2e0a 0a3c 4832 3e41 626f 7574
+ 0x10b0: 2074 6869 7320 7061 6765 3c2f 4832 3e0a
+ 0x10c0: 0a3c 494d 4720 414c 4947 4e3d 2272 6967
+ 0x10d0: 6874 2220 414c 543d 2222 2048 4549 4748
+ 0x10e0: 543d 2232 3437 2220 5749 4454 483d 2232
+ 0x10f0: 3738 2220 5352 433d 2269 636f 6e73 2f6a
+ 0x1100: 6865 3036 312e 706e 6722 3e0a 0a3c 503e
+ 0x1110: 5468 6973 2069 7320 6120 706c 6163 6568
+ 0x1120: 6f6c 6465 7220 7061 6765 2069 6e73 7461
+ 0x1130: 6c6c 6564 2062 7920 7468 6520 3c41 0a48
+ 0x1140: 5245 463d 2268 7474 703a 2f2f 7777 772e
+ 0x1150: 6465 6269 616e 2e6f 7267 2f22 3e44 6562
+ 0x1160: 6961 6e3c 2f41 3e0a 7265 6c65 6173 6520
+ 0x1170: 6f66 2074 6865 2061 7061 6368 6520 5765
+ 0x1180: 6220 7365 7276 6572 2070 6163 6b61 6765
+ 0x1190: 2e0a 0a3c 503e 5468 6973 2063 6f6d 7075
+ 0x11a0: 7465 7220 6861 7320 696e 7374 616c 6c65
+ 0x11b0: 6420 7468 6520 4465 6269 616e 2047 4e55
+ 0x11c0: 2f4c 696e 7578 206f 7065 7261 7469 6e67
+ 0x11d0: 2073 7973 7465 6d2c 0a62 7574 2069 7420
+ 0x11e0: 6861 7320 3c73 7472 6f6e 673e 6e6f 7468
+ 0x11f0: 696e 6720 746f 2064 6f20 7769 7468 2074
+ 0x1200: 6865 2044 6562 6961 6e0a 5072 6f6a 6563
+ 0x1210: 743c 2f73 7472 6f6e 673e 2e20 506c 6561
+ 0x1220: 7365 2064 6f20 3c73 7472 6f6e 673e 6e6f
+ 0x1230: 743c 2f73 7472 6f6e 673e 2063 6f6e 7461
+ 0x1240: 6374 2074 6865 2044 6562 6961 6e0a 5072
+ 0x1250: 6f6a 6563 7420 6162 6f75 7420 6974 2e3c
+ 0x1260: 2f50 3e0a 0a3c 503e 4966 2079 6f75 2066
+ 0x1270: 696e 6420 6120 6275 6720 696e 2074 6869
+ 0x1280: 7320 6170 6163 6865 2070 6163 6b61 6765
+ 0x1290: 2c20 6f72 2069 6e20 4170 6163 6865 2069
+ 0x12a0: 7473 656c 662c 0a70 6c65 6173 6520 6669
+ 0x12b0: 6c65 2061 2062 7567 2072 6570 6f72 7420
+ 0x12c0: 6f6e 2069 742e 2020 496e 7374 7275 6374
+ 0x12d0: 696f 6e73 206f 6e20 646f 696e 6720 7468
+ 0x12e0: 6973 2c20 616e 6420 7468 650a 6c69 7374
+ 0x12f0: 206f 6620 3c41 2048 5245 463d 2268 7474
+ 0x1300: 703a 2f2f 6275 6773 2e64 6562 6961 6e2e
+ 0x1310: 6f72 672f 7372 633a 6170 6163 6865 223e
+ 0x1320: 6b6e 6f77 6e20 6275 6773 3c2f 413e 206f
+ 0x1330: 6620 7468 6973 0a70 6163 6b61 6765 2c20
+ 0x1340: 6361 6e20 6265 2066 6f75 6e64 2069 6e20
+ 0x1350: 7468 6520 0a3c 4120 4852 4546 3d22 6874
+ 0x1360: 7470 3a2f 2f77 7777 2e64 6562 6961 6e2e
+ 0x1370: 6f72 672f 4275 6773 2f52 6570 6f72 7469
+ 0x1380: 6e67 223e 4465 6269 616e 2042 7567 2054
+ 0x1390: 7261 636b 696e 6720 5379 7374 656d 3c2f
+ 0x13a0: 413e 2e0a 0a3c 503e 5468 616e 6b73 2066
+ 0x13b0: 6f72 2075 7369 6e67 2074 6869 7320 7061
+ 0x13c0: 636b 6167 652c 2061 6e64 2063 6f6e 6772
+ 0x13d0: 6174 756c 6174 696f 6e73 2066 6f72 2079
+ 0x13e0: 6f75 7220 6368 6f69 6365 206f 660a 6120
+ 0x13f0: 4465 6269 616e 2073 7973 7465 6d21 3c2f
+ 0x1400: 503e 0a0a 3c44 4956 2061 6c69 676e 3d22
+ 0x1410: 6365 6e74 6572 223e 0a3c 6120 6872 6566
+ 0x1420: 3d22 6874 7470 3a2f 2f77 7777 2e64 6562
+ 0x1430: 6961 6e2e 6f72 672f 223e 0a3c 494d 4720
+ 0x1440: 616c 6967 6e3d 226d 6964 646c 6522 2068
+ 0x1450: 6569 6768 743d 2233 3022 2077 6964 7468
+ 0x1460: 3d22 3235 2220 7372 633d 2269 636f 6e73
+ 0x1470: 2f64 6562 6961 6e2f 6f70 656e 6c6f 676f
+ 0x1480: 2d32 352e 6a70 6722 2061 6c74 3d22 4465
+ 0x1490: 6269 616e 223e 0a3c 2f61 3e0a 3c61 2068
+ 0x14a0: 7265 663d 2268 7474 703a 2f2f 7777 772e
+ 0x14b0: 6170 6163 6865 2e6f 7267 2f22 3e0a 3c49
+ 0x14c0: 4d47 2061 6c69 676e 3d22 6d69 6464 6c65
+ 0x14d0: 2220 6865 6967 6874 3d22 3332 2220 7769
+ 0x14e0: 6474 683d 2232 3539 2220 7372 633d 2269
+ 0x14f0: 636f 6e73 2f61 7061 6368 655f 7062 2e70
+ 0x1500: 6e67 2220 616c 743d 2241 7061 6368 6522
+ 0x1510: 3e0a 3c2f 613e 0a3c 2f44 4956 3e0a 0a3c
+ 0x1520: 212d 2d0a 2020 5468 6973 2070 6167 6520
+ 0x1530: 7761 7320 696e 6974 6961 6c6c 7920 6372
+ 0x1540: 6561 7465 6420 6279 204a 6f68 6e69 6520
+ 0x1550: 496e 6772 616d 2028 6874 7470 3a2f 2f6e
+ 0x1560: 6574 676f 642e 6e65 742f 290a 2020 4974
+ 0x1570: 2077 6173 206c 6174 6572 2065 6469 7465
+ 0x1580: 6420 6279 204d 6174 7468 6577 2057 696c
+ 0x1590: 636f 7820 616e 6420 4a6f 7369 7020 526f
+ 0x15a0: 6469 6e2e 0a20 204c 6173 7420 6d6f 6469
+ 0x15b0: 6669 6564 3a20 2444 6174 653a 2032 3030
+ 0x15c0: 342f 3036 2f32 3020 3135 3a33 333a 3537
+ 0x15d0: 2024 2e0a 2020 2d2d 3e0a 0a3c 2f42 4f44
+ 0x15e0: 593e 0a3c 2f48 544d 4c3e 0a
+ 7 03:57:35.941260 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5560, win 12383, options [nop,nop,TS val 1306300953 ecr 1306300953], length 0
+ 0x0000: 4500 0034 1b6e 4000 4006 2154 7f00 0001
+ 0x0010: 7f00 0001 da70 0050 3758 8a49 377a a3a9
+ 0x0020: 8010 305f 10ea 0000 0101 080a 4ddc 9219
+ 0x0030: 4ddc 9219
+ 8 03:57:37.229575 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [F.], seq 203, ack 5560, win 12383, options [nop,nop,TS val 1306302241 ecr 1306300953], length 0
+ 0x0000: 4500 0034 1b70 4000 4006 2152 7f00 0001
+ 0x0010: 7f00 0001 da70 0050 3758 8a49 377a a3a9
+ 0x0020: 8011 305f 0be1 0000 0101 080a 4ddc 9721
+ 0x0030: 4ddc 9219
+ 9 03:57:37.230839 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [F.], seq 5560, ack 204, win 8192, options [nop,nop,TS val 1306302243 ecr 1306302241], length 0
+ 0x0000: 4500 0034 1fe8 4000 4006 1cda 7f00 0001
+ 0x0010: 7f00 0001 0050 da70 377a a3a9 3758 8a4a
+ 0x0020: 8011 2000 1735 0000 0101 080a 4ddc 9723
+ 0x0030: 4ddc 9721
+ 10 03:57:37.230900 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5561, win 12383, options [nop,nop,TS val 1306302243 ecr 1306302243], length 0
+ 0x0000: 4500 0034 1b72 4000 4006 2150 7f00 0001
+ 0x0010: 7f00 0001 da70 0050 3758 8a4a 377a a3aa
+ 0x0020: 8010 305f 06d4 0000 0101 080a 4ddc 9723
+ 0x0030: 4ddc 9723
diff --git a/tests/print-xx.out b/tests/print-xx.out
new file mode 100644
index 0000000..9b82a8f
--- /dev/null
+++ b/tests/print-xx.out
@@ -0,0 +1,419 @@
+ 1 03:57:35.938066 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [S], seq 928549246, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 0,nop,wscale 2], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
+ 0x0010: 003c 1b68 4000 4006 2152 7f00 0001 7f00
+ 0x0020: 0001 da70 0050 3758 897e 0000 0000 a002
+ 0x0030: 7fff 1421 0000 0204 400c 0402 080a 4ddc
+ 0x0040: 9216 0000 0000 0103 0302
+ 2 03:57:35.938122 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [S.], seq 930778609, ack 928549247, win 32767, options [mss 16396,sackOK,TS val 1306300950 ecr 1306300950,nop,wscale 2], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
+ 0x0010: 003c 0000 4000 4006 3cba 7f00 0001 7f00
+ 0x0020: 0001 0050 da70 377a 8df1 3758 897f a012
+ 0x0030: 7fff 6eb1 0000 0204 400c 0402 080a 4ddc
+ 0x0040: 9216 4ddc 9216 0103 0302
+ 3 03:57:35.938167 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 1, win 8192, options [nop,nop,TS val 1306300950 ecr 1306300950], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
+ 0x0010: 0034 1b6a 4000 4006 2158 7f00 0001 7f00
+ 0x0020: 0001 da70 0050 3758 897f 377a 8df2 8010
+ 0x0030: 2000 37d0 0000 0101 080a 4ddc 9216 4ddc
+ 0x0040: 9216
+ 4 03:57:35.939423 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [P.], seq 1:203, ack 1, win 8192, options [nop,nop,TS val 1306300951 ecr 1306300950], length 202: HTTP: GET / HTTP/1.1
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
+ 0x0010: 00fe 1b6c 4000 4006 208c 7f00 0001 7f00
+ 0x0020: 0001 da70 0050 3758 897f 377a 8df2 8018
+ 0x0030: 2000 fef2 0000 0101 080a 4ddc 9217 4ddc
+ 0x0040: 9216 4745 5420 2f20 4854 5450 2f31 2e31
+ 0x0050: 0d0a 486f 7374 3a20 6c6f 6361 6c68 6f73
+ 0x0060: 740d 0a55 7365 722d 4167 656e 743a 2045
+ 0x0070: 4c69 6e6b 732f 302e 3130 2e34 2d37 2d64
+ 0x0080: 6562 6961 6e20 2874 6578 746d 6f64 653b
+ 0x0090: 204c 696e 7578 2032 2e36 2e31 312d 312d
+ 0x00a0: 3638 362d 736d 7020 6936 3836 3b20 3133
+ 0x00b0: 3278 3536 2d32 290d 0a41 6363 6570 743a
+ 0x00c0: 202a 2f2a 0d0a 4163 6365 7074 2d45 6e63
+ 0x00d0: 6f64 696e 673a 2067 7a69 700d 0a41 6363
+ 0x00e0: 6570 742d 4c61 6e67 7561 6765 3a20 656e
+ 0x00f0: 0d0a 436f 6e6e 6563 7469 6f6e 3a20 4b65
+ 0x0100: 6570 2d41 6c69 7665 0d0a 0d0a
+ 5 03:57:35.940474 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [.], ack 203, win 8192, options [nop,nop,TS val 1306300952 ecr 1306300951], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
+ 0x0010: 0034 1fe4 4000 4006 1cde 7f00 0001 7f00
+ 0x0020: 0001 0050 da70 377a 8df2 3758 8a49 8010
+ 0x0030: 2000 3703 0000 0101 080a 4ddc 9218 4ddc
+ 0x0040: 9217
+ 6 03:57:35.941232 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [P.], seq 1:5560, ack 203, win 8192, options [nop,nop,TS val 1306300953 ecr 1306300951], length 5559: HTTP: HTTP/1.1 200 OK
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
+ 0x0010: 15eb 1fe6 4000 4006 0725 7f00 0001 7f00
+ 0x0020: 0001 0050 da70 377a 8df2 3758 8a49 8018
+ 0x0030: 2000 13e0 0000 0101 080a 4ddc 9219 4ddc
+ 0x0040: 9217 4854 5450 2f31 2e31 2032 3030 204f
+ 0x0050: 4b0d 0a44 6174 653a 2057 6564 2c20 3036
+ 0x0060: 204a 756c 2032 3030 3520 3033 3a35 373a
+ 0x0070: 3335 2047 4d54 0d0a 5365 7276 6572 3a20
+ 0x0080: 4170 6163 6865 2f31 2e33 2e33 330d 0a4c
+ 0x0090: 6173 742d 4d6f 6469 6669 6564 3a20 5375
+ 0x00a0: 6e2c 2031 3520 4175 6720 3230 3034 2030
+ 0x00b0: 303a 3433 3a34 3120 474d 540d 0a45 5461
+ 0x00c0: 673a 2022 3665 3830 6630 2d31 3438 612d
+ 0x00d0: 3431 3165 6231 6264 220d 0a41 6363 6570
+ 0x00e0: 742d 5261 6e67 6573 3a20 6279 7465 730d
+ 0x00f0: 0a43 6f6e 7465 6e74 2d4c 656e 6774 683a
+ 0x0100: 2035 3235 380d 0a4b 6565 702d 416c 6976
+ 0x0110: 653a 2074 696d 656f 7574 3d31 352c 206d
+ 0x0120: 6178 3d31 3030 0d0a 436f 6e6e 6563 7469
+ 0x0130: 6f6e 3a20 4b65 6570 2d41 6c69 7665 0d0a
+ 0x0140: 436f 6e74 656e 742d 5479 7065 3a20 7465
+ 0x0150: 7874 2f68 746d 6c3b 2063 6861 7273 6574
+ 0x0160: 3d69 736f 2d38 3835 392d 310d 0a0d 0a3c
+ 0x0170: 2144 4f43 5459 5045 2048 544d 4c20 5055
+ 0x0180: 424c 4943 2022 2d2f 2f57 3343 2f2f 4454
+ 0x0190: 4420 4854 4d4c 2034 2e30 3120 5472 616e
+ 0x01a0: 7369 7469 6f6e 616c 2f2f 454e 223e 0a3c
+ 0x01b0: 4854 4d4c 3e0a 3c48 4541 443e 0a20 2020
+ 0x01c0: 3c4d 4554 4120 4854 5450 2d45 5155 4956
+ 0x01d0: 3d22 436f 6e74 656e 742d 5479 7065 2220
+ 0x01e0: 434f 4e54 454e 543d 2274 6578 742f 6874
+ 0x01f0: 6d6c 3b20 6368 6172 7365 743d 6973 6f2d
+ 0x0200: 3838 3539 2d31 223e 0a20 2020 3c4d 4554
+ 0x0210: 4120 4e41 4d45 3d22 4465 7363 7269 7074
+ 0x0220: 696f 6e22 2043 4f4e 5445 4e54 3d22 5468
+ 0x0230: 6520 696e 6974 6961 6c20 696e 7374 616c
+ 0x0240: 6c61 7469 6f6e 206f 6620 4465 6269 616e
+ 0x0250: 2061 7061 6368 652e 223e 0a20 2020 3c54
+ 0x0260: 4954 4c45 3e50 6c61 6365 686f 6c64 6572
+ 0x0270: 2070 6167 653c 2f54 4954 4c45 3e0a 3c2f
+ 0x0280: 4845 4144 3e0a 3c42 4f44 5920 5445 5854
+ 0x0290: 3d22 2330 3030 3030 3022 2042 4743 4f4c
+ 0x02a0: 4f52 3d22 2346 4646 4646 4622 204c 494e
+ 0x02b0: 4b3d 2223 3030 3030 4546 2220 564c 494e
+ 0x02c0: 4b3d 2223 3535 3138 3841 2220 414c 494e
+ 0x02d0: 4b3d 2223 4646 3030 3030 223e 0a0a 3c48
+ 0x02e0: 313e 506c 6163 6568 6f6c 6465 7220 7061
+ 0x02f0: 6765 3c2f 4831 3e0a 3c48 323e 4966 2079
+ 0x0300: 6f75 2061 7265 206a 7573 7420 6272 6f77
+ 0x0310: 7369 6e67 2074 6865 2077 6562 3c2f 6832
+ 0x0320: 3e0a 0a3c 503e 5468 6520 6f77 6e65 7220
+ 0x0330: 6f66 2074 6869 7320 7765 6220 7369 7465
+ 0x0340: 2068 6173 206e 6f74 2070 7574 2075 7020
+ 0x0350: 616e 7920 7765 6220 7061 6765 7320 7965
+ 0x0360: 742e 0a50 6c65 6173 6520 636f 6d65 2062
+ 0x0370: 6163 6b20 6c61 7465 722e 3c2f 503e 0a0a
+ 0x0380: 3c50 3e3c 534d 414c 4c3e 3c43 4954 453e
+ 0x0390: 4d6f 7665 2061 6c6f 6e67 2c20 6e6f 7468
+ 0x03a0: 696e 6720 746f 2073 6565 2068 6572 652e
+ 0x03b0: 2e2e 3c2f 4349 5445 3e20 3a2d 293c 2f53
+ 0x03c0: 4d41 4c4c 3e3c 2f50 3e0a 0a3c 4832 3e49
+ 0x03d0: 6620 796f 7520 6172 6520 7472 7969 6e67
+ 0x03e0: 2074 6f20 6c6f 6361 7465 2074 6865 2061
+ 0x03f0: 646d 696e 6973 7472 6174 6f72 206f 6620
+ 0x0400: 7468 6973 206d 6163 6869 6e65 3c2f 4832
+ 0x0410: 3e0a 0a3c 503e 4966 2079 6f75 2077 616e
+ 0x0420: 7420 746f 2072 6570 6f72 7420 736f 6d65
+ 0x0430: 7468 696e 6720 6162 6f75 7420 7468 6973
+ 0x0440: 2068 6f73 7427 7320 6265 6861 7669 6f72
+ 0x0450: 2c20 706c 6561 7365 0a63 6f6e 7461 6374
+ 0x0460: 2074 6865 2049 6e74 6572 6e65 7420 5365
+ 0x0470: 7276 6963 6520 5072 6f76 6964 6572 2028
+ 0x0480: 4953 5029 2069 6e76 6f6c 7665 6420 6469
+ 0x0490: 7265 6374 6c79 2e3c 2f50 3e0a 0a3c 503e
+ 0x04a0: 5365 6520 7468 6520 3c41 2068 7265 663d
+ 0x04b0: 2268 7474 703a 2f2f 7777 772e 6162 7573
+ 0x04c0: 652e 6e65 742f 223e 4e65 7477 6f72 6b20
+ 0x04d0: 4162 7573 650a 436c 6561 7269 6e67 686f
+ 0x04e0: 7573 653c 2f41 3e20 666f 7220 686f 7720
+ 0x04f0: 746f 2064 6f20 7468 6973 2e3c 2f50 3e0a
+ 0x0500: 0a3c 4832 3e49 6620 796f 7520 6172 6520
+ 0x0510: 7468 6520 6164 6d69 6e69 7374 7261 746f
+ 0x0520: 7220 6f66 2074 6869 7320 6d61 6368 696e
+ 0x0530: 653c 2f48 323e 0a0a 3c50 3e54 6865 2069
+ 0x0540: 6e69 7469 616c 2069 6e73 7461 6c6c 6174
+ 0x0550: 696f 6e20 6f66 203c 4120 6872 6566 3d22
+ 0x0560: 6874 7470 3a2f 2f77 7777 2e64 6562 6961
+ 0x0570: 6e2e 6f72 672f 223e 4465 6269 616e 2773
+ 0x0580: 0a61 7061 6368 653c 2f41 3e20 7765 6220
+ 0x0590: 7365 7276 6572 2070 6163 6b61 6765 2077
+ 0x05a0: 6173 2073 7563 6365 7373 6675 6c2e 3c2f
+ 0x05b0: 503e 0a0a 3c50 3e3c 5354 524f 4e47 3e59
+ 0x05c0: 6f75 2073 686f 756c 6420 7265 706c 6163
+ 0x05d0: 6520 7468 6973 2070 6167 6520 7769 7468
+ 0x05e0: 2079 6f75 7220 6f77 6e20 7765 6220 7061
+ 0x05f0: 6765 7320 6173 0a73 6f6f 6e20 6173 2070
+ 0x0600: 6f73 7369 626c 652e 3c2f 5354 524f 4e47
+ 0x0610: 3e3c 2f50 3e0a 0a3c 503e 556e 6c65 7373
+ 0x0620: 2079 6f75 2063 6861 6e67 6564 2069 7473
+ 0x0630: 2063 6f6e 6669 6775 7261 7469 6f6e 2c20
+ 0x0640: 796f 7572 206e 6577 2073 6572 7665 7220
+ 0x0650: 6973 2063 6f6e 6669 6775 7265 6420 6173
+ 0x0660: 2066 6f6c 6c6f 7773 3a0a 3c55 4c3e 0a3c
+ 0x0670: 4c49 3e0a 436f 6e66 6967 7572 6174 696f
+ 0x0680: 6e20 6669 6c65 7320 6361 6e20 6265 2066
+ 0x0690: 6f75 6e64 2069 6e20 3c54 543e 2f65 7463
+ 0x06a0: 2f61 7061 6368 653c 2f54 543e 2e3c 2f4c
+ 0x06b0: 493e 0a0a 3c4c 493e 0a54 6865 203c 5454
+ 0x06c0: 3e44 6f63 756d 656e 7452 6f6f 743c 2f54
+ 0x06d0: 543e 2c20 7768 6963 6820 6973 2074 6865
+ 0x06e0: 2064 6972 6563 746f 7279 2075 6e64 6572
+ 0x06f0: 2077 6869 6368 2061 6c6c 2079 6f75 720a
+ 0x0700: 4854 4d4c 2066 696c 6573 2073 686f 756c
+ 0x0710: 6420 6578 6973 742c 2069 7320 7365 7420
+ 0x0720: 746f 203c 5454 3e2f 7661 722f 7777 773c
+ 0x0730: 2f54 543e 2e3c 2f4c 493e 0a0a 3c4c 493e
+ 0x0740: 0a43 4749 2073 6372 6970 7473 2061 7265
+ 0x0750: 206c 6f6f 6b65 6420 666f 7220 696e 203c
+ 0x0760: 5454 3e2f 7573 722f 6c69 622f 6367 692d
+ 0x0770: 6269 6e3c 2f54 543e 2c20 7768 6963 6820
+ 0x0780: 6973 2077 6865 7265 0a44 6562 6961 6e20
+ 0x0790: 7061 636b 6167 6573 2077 696c 6c20 706c
+ 0x07a0: 6163 6520 7468 6569 7220 7363 7269 7074
+ 0x07b0: 732e 3c2f 4c49 3e0a 0a3c 4c49 3e0a 4c6f
+ 0x07c0: 6720 6669 6c65 7320 6172 6520 706c 6163
+ 0x07d0: 6564 2069 6e20 3c54 543e 2f76 6172 2f6c
+ 0x07e0: 6f67 2f61 7061 6368 653c 2f54 543e 2c20
+ 0x07f0: 616e 6420 7769 6c6c 2062 6520 726f 7461
+ 0x0800: 7465 640a 7765 656b 6c79 2e20 2054 6865
+ 0x0810: 2066 7265 7175 656e 6379 206f 6620 726f
+ 0x0820: 7461 7469 6f6e 2063 616e 2062 6520 6561
+ 0x0830: 7369 6c79 2063 6861 6e67 6564 2062 7920
+ 0x0840: 6564 6974 696e 670a 3c54 543e 2f65 7463
+ 0x0850: 2f6c 6f67 726f 7461 7465 2e64 2f61 7061
+ 0x0860: 6368 653c 2f54 543e 2e3c 2f4c 493e 0a0a
+ 0x0870: 3c4c 493e 0a54 6865 2064 6566 6175 6c74
+ 0x0880: 2064 6972 6563 746f 7279 2069 6e64 6578
+ 0x0890: 2069 7320 3c54 543e 696e 6465 782e 6874
+ 0x08a0: 6d6c 3c2f 5454 3e2c 206d 6561 6e69 6e67
+ 0x08b0: 2074 6861 7420 7265 7175 6573 7473 0a66
+ 0x08c0: 6f72 2061 2064 6972 6563 746f 7279 203c
+ 0x08d0: 5454 3e2f 666f 6f2f 6261 722f 3c2f 5454
+ 0x08e0: 3e20 7769 6c6c 2067 6976 6520 7468 6520
+ 0x08f0: 636f 6e74 656e 7473 206f 6620 7468 6520
+ 0x0900: 6669 6c65 203c 5454 3e2f 7661 722f 7777
+ 0x0910: 772f 666f 6f2f 6261 722f 696e 6465 782e
+ 0x0920: 6874 6d6c 3c2f 5454 3e0a 6966 2069 7420
+ 0x0930: 6578 6973 7473 2028 6173 7375 6d69 6e67
+ 0x0940: 2074 6861 7420 3c54 543e 2f76 6172 2f77
+ 0x0950: 7777 3c2f 5454 3e20 6973 2079 6f75 7220
+ 0x0960: 3c54 543e 446f 6375 6d65 6e74 526f 6f74
+ 0x0970: 3c2f 5454 3e29 2e3c 2f4c 493e 0a0a 3c4c
+ 0x0980: 493e 0a55 7365 7220 6469 7265 6374 6f72
+ 0x0990: 6965 7320 6172 6520 656e 6162 6c65 642c
+ 0x09a0: 2061 6e64 2075 7365 7220 646f 6375 6d65
+ 0x09b0: 6e74 7320 7769 6c6c 2062 6520 6c6f 6f6b
+ 0x09c0: 6564 2066 6f72 0a69 6e20 7468 6520 3c54
+ 0x09d0: 543e 7075 626c 6963 5f68 746d 6c3c 2f54
+ 0x09e0: 543e 2064 6972 6563 746f 7279 206f 6620
+ 0x09f0: 7468 6520 7573 6572 7327 2068 6f6d 6573
+ 0x0a00: 2e20 2054 6865 7365 2064 6972 730a 7368
+ 0x0a10: 6f75 6c64 2062 6520 756e 6465 7220 3c54
+ 0x0a20: 543e 2f68 6f6d 653c 2f54 543e 2c20 616e
+ 0x0a30: 6420 7573 6572 7320 7769 6c6c 206e 6f74
+ 0x0a40: 2062 6520 6162 6c65 2074 6f20 7379 6d6c
+ 0x0a50: 696e 6b0a 746f 2066 696c 6573 2074 6865
+ 0x0a60: 7920 646f 6e27 7420 6f77 6e2e 3c2f 4c49
+ 0x0a70: 3e0a 0a3c 2f55 4c3e 0a41 6c6c 2074 6865
+ 0x0a80: 2073 7461 6e64 6172 6420 6170 6163 6865
+ 0x0a90: 206d 6f64 756c 6573 2061 7265 2061 7661
+ 0x0aa0: 696c 6162 6c65 2077 6974 6820 7468 6973
+ 0x0ab0: 2072 656c 6561 7365 2061 6e64 2061 7265
+ 0x0ac0: 0a6e 6f77 206d 616e 6167 6564 2077 6974
+ 0x0ad0: 6820 6465 6263 6f6e 662e 2020 5479 7065
+ 0x0ae0: 203c 5454 3e64 706b 672d 7265 636f 6e66
+ 0x0af0: 6967 7572 6520 6170 6163 6865 3c2f 5454
+ 0x0b00: 3e20 746f 0a73 656c 6563 7420 7768 6963
+ 0x0b10: 6820 6d6f 6475 6c65 7320 796f 7520 7761
+ 0x0b20: 6e74 2065 6e61 626c 6564 2e20 204d 616e
+ 0x0b30: 7920 6f74 6865 7220 6d6f 6475 6c65 7320
+ 0x0b40: 6172 6520 6176 6169 6c61 626c 650a 7468
+ 0x0b50: 726f 7567 6820 7468 6520 4465 6269 616e
+ 0x0b60: 2070 6163 6b61 6765 2073 7973 7465 6d20
+ 0x0b70: 7769 7468 2074 6865 206e 616d 6573 203c
+ 0x0b80: 5454 3e6c 6962 6170 6163 6865 2d6d 6f64
+ 0x0b90: 2d2a 3c2f 5454 3e2e 0a49 6620 796f 7520
+ 0x0ba0: 6e65 6564 2074 6f20 636f 6d70 696c 6520
+ 0x0bb0: 6120 6d6f 6475 6c65 2079 6f75 7273 656c
+ 0x0bc0: 662c 2079 6f75 2077 696c 6c20 6e65 6564
+ 0x0bd0: 2074 6f20 696e 7374 616c 6c20 7468 650a
+ 0x0be0: 3c54 543e 6170 6163 6865 2d64 6576 3c2f
+ 0x0bf0: 5454 3e20 7061 636b 6167 652e 0a0a 3c50
+ 0x0c00: 3e4d 6f72 6520 646f 6375 6d65 6e74 6174
+ 0x0c10: 696f 6e20 6f6e 2041 7061 6368 6520 6361
+ 0x0c20: 6e20 6265 2066 6f75 6e64 206f 6e3a 0a3c
+ 0x0c30: 554c 3e0a 3c4c 493e 0a54 6865 203c 4120
+ 0x0c40: 4852 4546 3d22 2f64 6f63 2f61 7061 6368
+ 0x0c50: 652d 646f 632f 6d61 6e75 616c 2f22 3e41
+ 0x0c60: 7061 6368 6520 646f 6375 6d65 6e74 6174
+ 0x0c70: 696f 6e3c 2f41 3e20 7374 6f72 6564 206f
+ 0x0c80: 6e20 796f 7572 2073 6572 7665 722e 3c2f
+ 0x0c90: 4c49 3e0a 0a3c 4c49 3e0a 5468 6520 3c41
+ 0x0ca0: 2048 5245 463d 2268 7474 703a 2f2f 7777
+ 0x0cb0: 772e 6170 6163 6865 2e6f 7267 2f22 3e41
+ 0x0cc0: 7061 6368 6520 5072 6f6a 6563 743c 2f41
+ 0x0cd0: 3e20 686f 6d65 2073 6974 652e 3c2f 4c49
+ 0x0ce0: 3e0a 0a3c 4c49 3e0a 5468 6520 3c41 2048
+ 0x0cf0: 5245 463d 2268 7474 703a 2f2f 7777 772e
+ 0x0d00: 6170 6163 6865 2d73 736c 2e6f 7267 2f22
+ 0x0d10: 3e41 7061 6368 652d 5353 4c3c 2f41 3e20
+ 0x0d20: 686f 6d65 2073 6974 652e 3c2f 4c49 3e0a
+ 0x0d30: 0a3c 4c49 3e0a 5468 6520 3c41 2048 5245
+ 0x0d40: 463d 2268 7474 703a 2f2f 7065 726c 2e61
+ 0x0d50: 7061 6368 652e 6f72 672f 223e 6d6f 6420
+ 0x0d60: 7065 726c 3c2f 413e 2068 6f6d 6520 7369
+ 0x0d70: 7465 2e3c 2f4c 493e 0a0a 3c4c 493e 0a54
+ 0x0d80: 6865 203c 4120 4852 4546 3d22 6874 7470
+ 0x0d90: 3a2f 2f77 7777 2e61 7061 6368 6577 6565
+ 0x0da0: 6b2e 636f 6d2f 223e 4170 6163 6865 5765
+ 0x0db0: 656b 3c2f 413e 206e 6577 736c 6574 7465
+ 0x0dc0: 722e 3c2f 4c49 3e0a 0a3c 4c49 3e0a 5468
+ 0x0dd0: 6520 3c41 2048 5245 463d 2268 7474 703a
+ 0x0de0: 2f2f 7777 772e 6465 6269 616e 2e6f 7267
+ 0x0df0: 2f64 6f63 2f22 3e44 6562 6961 6e20 5072
+ 0x0e00: 6f6a 6563 740a 446f 6375 6d65 6e74 6174
+ 0x0e10: 696f 6e3c 2f41 3e20 7768 6963 6820 636f
+ 0x0e20: 6e74 6169 6e73 2048 4f57 544f 732c 2046
+ 0x0e30: 4151 732c 2061 6e64 2073 6f66 7477 6172
+ 0x0e40: 6520 7570 6461 7465 732e 3c2f 4c49 3e0a
+ 0x0e50: 3c2f 554c 3e0a 0a3c 503e 596f 7520 6361
+ 0x0e60: 6e20 616c 736f 2063 6f6e 7375 6c74 2074
+ 0x0e70: 6865 206c 6973 7420 6f66 203c 4120 4852
+ 0x0e80: 4546 3d22 6874 7470 3a2f 2f77 7777 2e62
+ 0x0e90: 6f75 7465 6c6c 2e63 6f6d 2f66 6171 2f22
+ 0x0ea0: 3e57 6f72 6c64 0a57 6964 6520 5765 6220
+ 0x0eb0: 4672 6571 7565 6e74 6c79 2041 736b 6564
+ 0x0ec0: 2051 7565 7374 696f 6e73 3c2f 413e 2066
+ 0x0ed0: 6f72 2069 6e66 6f72 6d61 7469 6f6e 2e0a
+ 0x0ee0: 0a3c 4832 3e4c 6574 206f 7468 6572 2070
+ 0x0ef0: 656f 706c 6520 6b6e 6f77 2061 626f 7574
+ 0x0f00: 2074 6869 7320 7365 7276 6572 3c2f 4832
+ 0x0f10: 3e0a 0a3c 4120 4852 4546 3d22 6874 7470
+ 0x0f20: 3a2f 2f6e 6574 6372 6166 742e 636f 6d2f
+ 0x0f30: 223e 4e65 7463 7261 6674 3c2f 413e 2070
+ 0x0f40: 726f 7669 6465 7320 616e 2069 6e74 6572
+ 0x0f50: 6573 7469 6e67 2066 7265 650a 7365 7276
+ 0x0f60: 6963 6520 666f 7220 7765 6220 7369 7465
+ 0x0f70: 206d 6f6e 6974 6f72 696e 6720 616e 6420
+ 0x0f80: 7374 6174 6973 7469 6320 636f 6c6c 6563
+ 0x0f90: 7469 6f6e 2e0a 596f 7520 6361 6e20 6c65
+ 0x0fa0: 7420 7468 656d 206b 6e6f 7720 6162 6f75
+ 0x0fb0: 7420 796f 7572 2073 6572 7665 7220 7573
+ 0x0fc0: 696e 6720 7468 6569 720a 3c41 2048 5245
+ 0x0fd0: 463d 2268 7474 703a 2f2f 7570 7469 6d65
+ 0x0fe0: 2e6e 6574 6372 6166 742e 636f 6d2f 223e
+ 0x0ff0: 696e 7465 7266 6163 653c 2f41 3e2e 0a45
+ 0x1000: 6e61 626c 696e 6720 7468 6520 6d6f 6e69
+ 0x1010: 746f 7269 6e67 206f 6620 796f 7572 2073
+ 0x1020: 6572 7665 7220 7769 6c6c 2070 726f 7669
+ 0x1030: 6465 2061 2062 6574 7465 7220 676c 6f62
+ 0x1040: 616c 206f 7665 7276 6965 770a 6f66 2077
+ 0x1050: 686f 2069 7320 7573 696e 6720 7768 6174
+ 0x1060: 2061 6e64 2077 6865 7265 2c20 616e 6420
+ 0x1070: 6974 2077 6f75 6c64 2067 6976 6520 4465
+ 0x1080: 6269 616e 2061 2062 6574 7465 720a 6f76
+ 0x1090: 6572 7669 6577 206f 6620 7468 6520 6170
+ 0x10a0: 6163 6865 2070 6163 6b61 6765 2075 7361
+ 0x10b0: 6765 2e0a 0a3c 4832 3e41 626f 7574 2074
+ 0x10c0: 6869 7320 7061 6765 3c2f 4832 3e0a 0a3c
+ 0x10d0: 494d 4720 414c 4947 4e3d 2272 6967 6874
+ 0x10e0: 2220 414c 543d 2222 2048 4549 4748 543d
+ 0x10f0: 2232 3437 2220 5749 4454 483d 2232 3738
+ 0x1100: 2220 5352 433d 2269 636f 6e73 2f6a 6865
+ 0x1110: 3036 312e 706e 6722 3e0a 0a3c 503e 5468
+ 0x1120: 6973 2069 7320 6120 706c 6163 6568 6f6c
+ 0x1130: 6465 7220 7061 6765 2069 6e73 7461 6c6c
+ 0x1140: 6564 2062 7920 7468 6520 3c41 0a48 5245
+ 0x1150: 463d 2268 7474 703a 2f2f 7777 772e 6465
+ 0x1160: 6269 616e 2e6f 7267 2f22 3e44 6562 6961
+ 0x1170: 6e3c 2f41 3e0a 7265 6c65 6173 6520 6f66
+ 0x1180: 2074 6865 2061 7061 6368 6520 5765 6220
+ 0x1190: 7365 7276 6572 2070 6163 6b61 6765 2e0a
+ 0x11a0: 0a3c 503e 5468 6973 2063 6f6d 7075 7465
+ 0x11b0: 7220 6861 7320 696e 7374 616c 6c65 6420
+ 0x11c0: 7468 6520 4465 6269 616e 2047 4e55 2f4c
+ 0x11d0: 696e 7578 206f 7065 7261 7469 6e67 2073
+ 0x11e0: 7973 7465 6d2c 0a62 7574 2069 7420 6861
+ 0x11f0: 7320 3c73 7472 6f6e 673e 6e6f 7468 696e
+ 0x1200: 6720 746f 2064 6f20 7769 7468 2074 6865
+ 0x1210: 2044 6562 6961 6e0a 5072 6f6a 6563 743c
+ 0x1220: 2f73 7472 6f6e 673e 2e20 506c 6561 7365
+ 0x1230: 2064 6f20 3c73 7472 6f6e 673e 6e6f 743c
+ 0x1240: 2f73 7472 6f6e 673e 2063 6f6e 7461 6374
+ 0x1250: 2074 6865 2044 6562 6961 6e0a 5072 6f6a
+ 0x1260: 6563 7420 6162 6f75 7420 6974 2e3c 2f50
+ 0x1270: 3e0a 0a3c 503e 4966 2079 6f75 2066 696e
+ 0x1280: 6420 6120 6275 6720 696e 2074 6869 7320
+ 0x1290: 6170 6163 6865 2070 6163 6b61 6765 2c20
+ 0x12a0: 6f72 2069 6e20 4170 6163 6865 2069 7473
+ 0x12b0: 656c 662c 0a70 6c65 6173 6520 6669 6c65
+ 0x12c0: 2061 2062 7567 2072 6570 6f72 7420 6f6e
+ 0x12d0: 2069 742e 2020 496e 7374 7275 6374 696f
+ 0x12e0: 6e73 206f 6e20 646f 696e 6720 7468 6973
+ 0x12f0: 2c20 616e 6420 7468 650a 6c69 7374 206f
+ 0x1300: 6620 3c41 2048 5245 463d 2268 7474 703a
+ 0x1310: 2f2f 6275 6773 2e64 6562 6961 6e2e 6f72
+ 0x1320: 672f 7372 633a 6170 6163 6865 223e 6b6e
+ 0x1330: 6f77 6e20 6275 6773 3c2f 413e 206f 6620
+ 0x1340: 7468 6973 0a70 6163 6b61 6765 2c20 6361
+ 0x1350: 6e20 6265 2066 6f75 6e64 2069 6e20 7468
+ 0x1360: 6520 0a3c 4120 4852 4546 3d22 6874 7470
+ 0x1370: 3a2f 2f77 7777 2e64 6562 6961 6e2e 6f72
+ 0x1380: 672f 4275 6773 2f52 6570 6f72 7469 6e67
+ 0x1390: 223e 4465 6269 616e 2042 7567 2054 7261
+ 0x13a0: 636b 696e 6720 5379 7374 656d 3c2f 413e
+ 0x13b0: 2e0a 0a3c 503e 5468 616e 6b73 2066 6f72
+ 0x13c0: 2075 7369 6e67 2074 6869 7320 7061 636b
+ 0x13d0: 6167 652c 2061 6e64 2063 6f6e 6772 6174
+ 0x13e0: 756c 6174 696f 6e73 2066 6f72 2079 6f75
+ 0x13f0: 7220 6368 6f69 6365 206f 660a 6120 4465
+ 0x1400: 6269 616e 2073 7973 7465 6d21 3c2f 503e
+ 0x1410: 0a0a 3c44 4956 2061 6c69 676e 3d22 6365
+ 0x1420: 6e74 6572 223e 0a3c 6120 6872 6566 3d22
+ 0x1430: 6874 7470 3a2f 2f77 7777 2e64 6562 6961
+ 0x1440: 6e2e 6f72 672f 223e 0a3c 494d 4720 616c
+ 0x1450: 6967 6e3d 226d 6964 646c 6522 2068 6569
+ 0x1460: 6768 743d 2233 3022 2077 6964 7468 3d22
+ 0x1470: 3235 2220 7372 633d 2269 636f 6e73 2f64
+ 0x1480: 6562 6961 6e2f 6f70 656e 6c6f 676f 2d32
+ 0x1490: 352e 6a70 6722 2061 6c74 3d22 4465 6269
+ 0x14a0: 616e 223e 0a3c 2f61 3e0a 3c61 2068 7265
+ 0x14b0: 663d 2268 7474 703a 2f2f 7777 772e 6170
+ 0x14c0: 6163 6865 2e6f 7267 2f22 3e0a 3c49 4d47
+ 0x14d0: 2061 6c69 676e 3d22 6d69 6464 6c65 2220
+ 0x14e0: 6865 6967 6874 3d22 3332 2220 7769 6474
+ 0x14f0: 683d 2232 3539 2220 7372 633d 2269 636f
+ 0x1500: 6e73 2f61 7061 6368 655f 7062 2e70 6e67
+ 0x1510: 2220 616c 743d 2241 7061 6368 6522 3e0a
+ 0x1520: 3c2f 613e 0a3c 2f44 4956 3e0a 0a3c 212d
+ 0x1530: 2d0a 2020 5468 6973 2070 6167 6520 7761
+ 0x1540: 7320 696e 6974 6961 6c6c 7920 6372 6561
+ 0x1550: 7465 6420 6279 204a 6f68 6e69 6520 496e
+ 0x1560: 6772 616d 2028 6874 7470 3a2f 2f6e 6574
+ 0x1570: 676f 642e 6e65 742f 290a 2020 4974 2077
+ 0x1580: 6173 206c 6174 6572 2065 6469 7465 6420
+ 0x1590: 6279 204d 6174 7468 6577 2057 696c 636f
+ 0x15a0: 7820 616e 6420 4a6f 7369 7020 526f 6469
+ 0x15b0: 6e2e 0a20 204c 6173 7420 6d6f 6469 6669
+ 0x15c0: 6564 3a20 2444 6174 653a 2032 3030 342f
+ 0x15d0: 3036 2f32 3020 3135 3a33 333a 3537 2024
+ 0x15e0: 2e0a 2020 2d2d 3e0a 0a3c 2f42 4f44 593e
+ 0x15f0: 0a3c 2f48 544d 4c3e 0a
+ 7 03:57:35.941260 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5560, win 12383, options [nop,nop,TS val 1306300953 ecr 1306300953], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
+ 0x0010: 0034 1b6e 4000 4006 2154 7f00 0001 7f00
+ 0x0020: 0001 da70 0050 3758 8a49 377a a3a9 8010
+ 0x0030: 305f 10ea 0000 0101 080a 4ddc 9219 4ddc
+ 0x0040: 9219
+ 8 03:57:37.229575 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [F.], seq 203, ack 5560, win 12383, options [nop,nop,TS val 1306302241 ecr 1306300953], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
+ 0x0010: 0034 1b70 4000 4006 2152 7f00 0001 7f00
+ 0x0020: 0001 da70 0050 3758 8a49 377a a3a9 8011
+ 0x0030: 305f 0be1 0000 0101 080a 4ddc 9721 4ddc
+ 0x0040: 9219
+ 9 03:57:37.230839 IP 127.0.0.1.80 > 127.0.0.1.55920: Flags [F.], seq 5560, ack 204, win 8192, options [nop,nop,TS val 1306302243 ecr 1306302241], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
+ 0x0010: 0034 1fe8 4000 4006 1cda 7f00 0001 7f00
+ 0x0020: 0001 0050 da70 377a a3a9 3758 8a4a 8011
+ 0x0030: 2000 1735 0000 0101 080a 4ddc 9723 4ddc
+ 0x0040: 9721
+ 10 03:57:37.230900 IP 127.0.0.1.55920 > 127.0.0.1.80: Flags [.], ack 5561, win 12383, options [nop,nop,TS val 1306302243 ecr 1306302243], length 0
+ 0x0000: 0000 0000 0000 0000 0000 0000 0800 4500
+ 0x0010: 0034 1b72 4000 4006 2150 7f00 0001 7f00
+ 0x0020: 0001 da70 0050 3758 8a4a 377a a3aa 8010
+ 0x0030: 305f 06d4 0000 0101 080a 4ddc 9723 4ddc
+ 0x0040: 9723
diff --git a/tests/printf_z.tests b/tests/printf_z.tests
new file mode 100644
index 0000000..a08199d
--- /dev/null
+++ b/tests/printf_z.tests
@@ -0,0 +1,132 @@
+# -*- perl -*-
+
+$testlist = [
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'ospf-gmpls',
+ input => 'ospf-gmpls.pcap',
+ output => 'ospf-gmpls.out',
+ args => '-v'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'ospf-nssa-bitnt',
+ input => 'ospf-nssa-bitnt.pcap',
+ output => 'ospf-nssa-bitnt.out',
+ args => '-v'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'ospf3_ah-vv',
+ input => 'OSPFv3_with_AH.pcap',
+ output => 'ospf3_ah-vv.out',
+ args => '-vv'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'ospf3_bc-vv',
+ input => 'OSPFv3_broadcast_adjacency.pcap',
+ output => 'ospf3_bc-vv.out',
+ args => '-vv'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'ospf3_mp-vv',
+ input => 'OSPFv3_multipoint_adjacencies.pcap',
+ output => 'ospf3_mp-vv.out',
+ args => '-vv'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'ospf3_nbma-vv',
+ input => 'OSPFv3_NBMA_adjacencies.pcap',
+ output => 'ospf3_nbma-vv.out',
+ args => '-vv'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'ospf2-seg-fault-1-v',
+ input => 'ospf2-seg-fault-1.pcapng',
+ output => 'ospf2-seg-fault-1-v.out',
+ args => '-v'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'm3ua-vv',
+ input => 'isup.pcap',
+ output => 'isupvv.out',
+ args => '-vv'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'rsvp_infloop-v',
+ input => 'rsvp-infinite-loop.pcap',
+ output => 'rsvp_infloop-v.out',
+ args => '-v'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'decnet',
+ input => 'DECnet_Phone.pcap',
+ output => 'decnet.out',
+ args => ''
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'eigrp-tlv-oobr',
+ input => 'eigrp-tlv-oobr.pcap',
+ output => 'eigrp-tlv-oobr.out',
+ args => '-vvv -e'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'isis-areaaddr-oobr-1',
+ input => 'isis-areaaddr-oobr-1.pcap',
+ output => 'isis-areaaddr-oobr-1.out',
+ args => '-vvv -e'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'isis-areaaddr-oobr-2',
+ input => 'isis-areaaddr-oobr-2.pcap',
+ output => 'isis-areaaddr-oobr-2.out',
+ args => '-vvv -e'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'pktap-heap-overflow',
+ input => 'pktap-heap-overflow.pcap',
+ output => 'pktap-heap-overflow.out',
+ args => '-v'
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'dns-zlip-1',
+ input => 'dns-zlip-1.pcap',
+ output => 'dns-zlip-1.out',
+ args => ''
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'dns-zlip-2',
+ input => 'dns-zlip-2.pcap',
+ output => 'dns-zlip-2.out',
+ args => ''
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'dns-zlip-3',
+ input => 'dns-zlip-3.pcap',
+ output => 'dns-zlip-3.out',
+ args => ''
+ },
+ {
+ config_unset => 'HAVE_NO_PRINTF_Z',
+ name => 'sflow_print-segv',
+ input => 'sflow_print-segv.pcap',
+ output => 'sflow_print-segv.out',
+ args => '-v'
+ },
+];
+
+1;
diff --git a/tests/ptp.out b/tests/ptp.out
new file mode 100644
index 0000000..8b3adb3
--- /dev/null
+++ b/tests/ptp.out
@@ -0,0 +1,5 @@
+ 1 19:44:09.248292 IP 11.0.0.110.319 > 224.0.1.129.319: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7cfe90fffef950b4, port id : 1, seq id : 132, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 2 19:44:09.248437 IP 11.0.0.9.320 > 224.0.1.129.320: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x200fffe000001, port id : 1, seq id : 132, control : 3 (Delay_Resp), log message interval : 0, receiveTimeStamp : 1516736649 seconds, 248292005 nanoseconds, port identity : 0x7cfe90fffef950b4, port id : 1
+ 3 19:44:09.982883 IP 11.0.0.9.320 > 224.0.1.129.320: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x200fffe000001, port id : 1, seq id : 534, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :36, rsvd : 0, gm priority_1 : 128, gm clock class : 248, gm clock accuracy : 254, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x200fffe000001, steps removed : 0, time source : 0xa0
+ 4 19:44:10.034745 IP 11.0.0.9.319 > 224.0.1.129.319: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x200fffe000001, port id : 1, seq id : 1067, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 5 19:44:10.034796 IP 11.0.0.9.320 > 224.0.1.129.320: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x200fffe000001, port id : 1, seq id : 1067, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1516736650 seconds, 34751783 nanoseconds
diff --git a/tests/ptp.pcap b/tests/ptp.pcap
new file mode 100644
index 0000000..c53f18b
--- /dev/null
+++ b/tests/ptp.pcap
Binary files differ
diff --git a/tests/ptp_corrections.out b/tests/ptp_corrections.out
new file mode 100644
index 0000000..eeb760b
--- /dev/null
+++ b/tests/ptp_corrections.out
@@ -0,0 +1,3 @@
+ 1 17:52:26.679146 IP 4.5.0.2.319 > 2.2.2.2.319: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 44, reserved1 : 0, Flags [unicast], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0xa0369ffffe856e8a, port id : 1, seq id : 1203, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 2 17:52:26.679265 IP 2.2.2.2.320 > 4.5.0.2.320: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 44, reserved1 : 0, Flags [unicast], NS correction : 36035, sub NS correction : 0, reserved2 : 0, clock identity : 0xe8c57affff01313f, port id : 3, seq id : 1203, control : 3 (Delay_Resp), log message interval : 127, receiveTimeStamp : 1665510783 seconds, 679015501 nanoseconds, port identity : 0xa0369ffffe856e8a, port id : 1
+ 3 17:52:26.682034 IP 2.2.2.2.319 > 4.5.0.2.319: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 44, reserved1 : 0, Flags [unicast], NS correction : 105045, sub NS correction : 0, reserved2 : 0, clock identity : 0xe8c57affff01313f, port id : 3, seq id : 1213, control : 0 (Sync), log message interval : 127, originTimeStamp : 1665510783 seconds, 681548698 nanoseconds
diff --git a/tests/ptp_corrections.pcap b/tests/ptp_corrections.pcap
new file mode 100644
index 0000000..3d2386e
--- /dev/null
+++ b/tests/ptp_corrections.pcap
Binary files differ
diff --git a/tests/ptp_ethernet.out b/tests/ptp_ethernet.out
new file mode 100644
index 0000000..9ae7541
--- /dev/null
+++ b/tests/ptp_ethernet.out
@@ -0,0 +1,205 @@
+ 1 16:47:07.869101 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 0, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 2 16:47:07.870971 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 0, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303626 seconds, 867062623 nanoseconds
+ 3 16:47:08.079739 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 0, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 128, gm clock class : 248, gm clock accuracy : 254, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x7483efffff01ac16, steps removed : 0, time source : 0x50
+ 4 16:47:08.868841 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 1, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 5 16:47:08.871699 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 1, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303627 seconds, 867025483 nanoseconds
+ 6 16:47:09.868779 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 2, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 7 16:47:09.871473 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 2, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303628 seconds, 866947196 nanoseconds
+ 8 16:47:10.079656 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 1, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 128, gm clock class : 248, gm clock accuracy : 254, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x7483efffff01ac16, steps removed : 0, time source : 0x50
+ 9 16:47:10.868798 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 3, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 10 16:47:10.869955 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 3, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303629 seconds, 866901765 nanoseconds
+ 11 16:47:10.872807 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 0, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 12 16:47:10.873584 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 0, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303629 seconds, 871703804 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 13 16:47:11.868670 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 4, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 14 16:47:11.948628 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 4, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303630 seconds, 866905669 nanoseconds
+ 15 16:47:12.079561 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 2, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 128, gm clock class : 248, gm clock accuracy : 254, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x7483efffff01ac16, steps removed : 0, time source : 0x50
+ 16 16:47:12.868775 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 5, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 17 16:47:12.873811 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 5, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303631 seconds, 866896340 nanoseconds
+ 18 16:47:12.875715 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 1, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 19 16:47:12.876341 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 1, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303631 seconds, 874547364 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 20 16:47:13.868817 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 6, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 21 16:47:13.909113 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 6, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303632 seconds, 866906525 nanoseconds
+ 22 16:47:14.079644 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 3, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 23 16:47:14.868782 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 7, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 24 16:47:14.908924 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 7, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303630 seconds, 204665673 nanoseconds
+ 25 16:47:15.868691 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 8, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 26 16:47:15.871139 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 8, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303631 seconds, 782175259 nanoseconds
+ 27 16:47:16.079705 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 4, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 28 16:47:16.868654 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 9, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 29 16:47:16.912962 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 9, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303632 seconds, 782211566 nanoseconds
+ 30 16:47:17.868771 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 10, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 31 16:47:17.871177 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 10, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303633 seconds, 782244202 nanoseconds
+ 32 16:47:18.079603 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 5, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 33 16:47:18.868681 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 11, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 34 16:47:18.873879 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 11, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303634 seconds, 782115413 nanoseconds
+ 35 16:47:19.868772 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 12, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 36 16:47:19.869284 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 12, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303635 seconds, 782182699 nanoseconds
+ 37 16:47:20.079730 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 6, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 38 16:47:20.868802 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 13, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 39 16:47:20.873677 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 13, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303636 seconds, 782273855 nanoseconds
+ 40 16:47:20.891294 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 2, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 41 16:47:20.892073 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 2, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303636 seconds, 805526455 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 42 16:47:21.868809 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 14, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 43 16:47:21.872667 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 14, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303637 seconds, 782266170 nanoseconds
+ 44 16:47:22.079753 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 7, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 45 16:47:22.868807 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 15, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 46 16:47:22.873992 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 15, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303638 seconds, 782194184 nanoseconds
+ 47 16:47:23.868851 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 16, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 48 16:47:23.871995 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 16, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303639 seconds, 782102867 nanoseconds
+ 49 16:47:24.079706 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 8, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 50 16:47:24.869069 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 17, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 51 16:47:24.912936 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 17, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303640 seconds, 782510187 nanoseconds
+ 52 16:47:25.323631 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 3, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 53 16:47:25.324603 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 3, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303641 seconds, 237837281 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 54 16:47:25.869777 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 18, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 55 16:47:25.870087 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 18, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303642 seconds, 344940701 nanoseconds
+ 56 16:47:26.079707 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 9, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 57 16:47:26.869799 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 19, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 58 16:47:26.874010 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 19, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303643 seconds, 344951404 nanoseconds
+ 59 16:47:27.869755 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 20, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 60 16:47:27.872213 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 20, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303644 seconds, 344897561 nanoseconds
+ 61 16:47:28.079730 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 10, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 62 16:47:28.241752 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 4, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 63 16:47:28.242610 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 4, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303644 seconds, 717595486 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 64 16:47:28.869756 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 21, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 65 16:47:28.870962 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 21, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303645 seconds, 344930504 nanoseconds
+ 66 16:47:29.869679 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 22, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 67 16:47:29.912951 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 22, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303646 seconds, 344866013 nanoseconds
+ 68 16:47:30.079690 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 11, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 69 16:47:30.869748 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 23, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 70 16:47:30.872563 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 23, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303647 seconds, 344865229 nanoseconds
+ 71 16:47:31.869557 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 24, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 72 16:47:31.912940 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 24, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303648 seconds, 344856788 nanoseconds
+ 73 16:47:32.079637 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 12, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 74 16:47:32.869750 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 25, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 75 16:47:32.895530 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 25, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303649 seconds, 329713234 nanoseconds
+ 76 16:47:33.869840 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 26, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 77 16:47:33.873216 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 26, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303650 seconds, 329727724 nanoseconds
+ 78 16:47:34.079725 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 13, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 79 16:47:34.869762 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 27, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 80 16:47:34.873242 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 27, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303651 seconds, 329690745 nanoseconds
+ 81 16:47:35.571612 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 5, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 82 16:47:35.572620 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 5, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303652 seconds, 32272261 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 83 16:47:35.869695 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 28, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 84 16:47:35.874991 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 28, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303652 seconds, 329675353 nanoseconds
+ 85 16:47:36.079725 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 14, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 86 16:47:36.869922 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 29, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 87 16:47:36.874383 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 29, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303653 seconds, 329849750 nanoseconds
+ 88 16:47:37.869752 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 30, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 89 16:47:37.871756 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 30, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303654 seconds, 329676257 nanoseconds
+ 90 16:47:38.079716 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 15, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 91 16:47:38.869721 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 31, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 92 16:47:38.872447 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 31, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303655 seconds, 329719538 nanoseconds
+ 93 16:47:39.869742 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 32, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 94 16:47:39.916968 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 32, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303656 seconds, 172795159 nanoseconds
+ 95 16:47:40.079704 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 16, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 96 16:47:40.427644 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 6, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 97 16:47:40.428617 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 6, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303656 seconds, 731468461 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 98 16:47:40.869746 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 33, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 99 16:47:40.975224 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 33, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303657 seconds, 172867821 nanoseconds
+ 100 16:47:41.869766 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 34, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 101 16:47:41.871382 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 34, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303658 seconds, 172847591 nanoseconds
+ 102 16:47:42.079748 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 17, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 103 16:47:42.869712 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 35, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 104 16:47:42.873721 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 35, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303659 seconds, 172838071 nanoseconds
+ 105 16:47:43.869757 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 36, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 106 16:47:43.875177 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 36, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303660 seconds, 172845933 nanoseconds
+ 107 16:47:44.079724 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 18, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 108 16:47:44.869744 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 37, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 109 16:47:44.871727 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 37, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303661 seconds, 206678176 nanoseconds
+ 110 16:47:45.869901 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 38, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 111 16:47:45.871682 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 38, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303662 seconds, 206818346 nanoseconds
+ 112 16:47:46.079711 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 19, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 113 16:47:46.861682 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 7, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 114 16:47:46.862645 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 7, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303663 seconds, 199343089 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 115 16:47:46.869590 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 39, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 116 16:47:46.872561 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 39, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303663 seconds, 206616347 nanoseconds
+ 117 16:47:47.732663 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 8, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 118 16:47:47.733583 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 8, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303664 seconds, 70327505 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 119 16:47:47.869674 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 40, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 120 16:47:47.874535 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 40, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303664 seconds, 206690747 nanoseconds
+ 121 16:47:48.079795 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 20, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 122 16:47:48.869729 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 41, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 123 16:47:48.871306 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 41, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303665 seconds, 206685761 nanoseconds
+ 124 16:47:49.869715 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 42, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 125 16:47:49.872233 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 42, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303666 seconds, 206636658 nanoseconds
+ 126 16:47:50.079790 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 21, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 127 16:47:50.869716 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 43, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 128 16:47:50.912941 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 43, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303667 seconds, 206601064 nanoseconds
+ 129 16:47:51.869848 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 44, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 130 16:47:51.913046 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 44, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303668 seconds, 140541044 nanoseconds
+ 131 16:47:52.079748 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 22, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 132 16:47:52.869761 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 45, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 133 16:47:52.873033 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 45, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303669 seconds, 140466466 nanoseconds
+ 134 16:47:53.869759 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 46, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 135 16:47:53.871646 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 46, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303670 seconds, 140484662 nanoseconds
+ 136 16:47:54.079835 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 23, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 137 16:47:54.869726 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 47, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 138 16:47:54.870804 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 47, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303671 seconds, 140509610 nanoseconds
+ 139 16:47:55.724621 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 9, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 140 16:47:55.725515 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 9, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303671 seconds, 996114198 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 141 16:47:55.869740 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 48, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 142 16:47:55.873417 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 48, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303672 seconds, 140458889 nanoseconds
+ 143 16:47:56.079747 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 24, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 144 16:47:56.869755 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 49, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 145 16:47:56.874169 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 49, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303673 seconds, 140533632 nanoseconds
+ 146 16:47:57.869733 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 50, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 147 16:47:57.875008 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 50, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303674 seconds, 140440720 nanoseconds
+ 148 16:47:58.079712 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 25, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 149 16:47:58.092371 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 10, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 150 16:47:58.093173 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 10, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303674 seconds, 363746157 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 151 16:47:58.869768 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 51, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 152 16:47:58.875143 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 51, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303675 seconds, 140516734 nanoseconds
+ 153 16:47:59.869758 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 52, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 154 16:47:59.913061 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 52, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303676 seconds, 140609930 nanoseconds
+ 155 16:48:00.079744 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 26, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 156 16:48:00.869765 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 53, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 157 16:48:00.871138 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 53, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303677 seconds, 140522713 nanoseconds
+ 158 16:48:01.869775 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 54, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 159 16:48:01.924282 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 54, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303678 seconds, 140584646 nanoseconds
+ 160 16:48:02.041906 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 11, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 161 16:48:02.042830 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 11, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303678 seconds, 313400510 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 162 16:48:02.079779 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 27, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 94, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 163 16:48:02.869731 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 55, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 164 16:48:02.872902 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 55, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303679 seconds, 211948399 nanoseconds
+ 165 16:48:03.869740 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 56, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 166 16:48:03.871026 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 56, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303680 seconds, 212080924 nanoseconds
+ 167 16:48:04.079712 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 28, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 168 16:48:04.381626 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 12, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 169 16:48:04.382699 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 12, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303680 seconds, 724715636 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 170 16:48:04.869774 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 57, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 171 16:48:04.873011 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 57, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303681 seconds, 212109931 nanoseconds
+ 172 16:48:05.869834 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 58, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 173 16:48:05.912983 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 58, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303682 seconds, 212057798 nanoseconds
+ 174 16:48:06.079750 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 29, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 175 16:48:06.869821 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 59, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 176 16:48:06.870346 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 59, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303683 seconds, 212046209 nanoseconds
+ 177 16:48:07.869794 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 60, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 178 16:48:07.870532 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 60, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303684 seconds, 212124397 nanoseconds
+ 179 16:48:08.079631 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 30, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 180 16:48:08.869976 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 61, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 181 16:48:08.872765 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 61, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303685 seconds, 259449233 nanoseconds
+ 182 16:48:09.869791 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 62, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 183 16:48:09.980832 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 62, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303686 seconds, 259170852 nanoseconds
+ 184 16:48:10.079693 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 31, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 185 16:48:10.540849 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 13, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 186 16:48:10.541687 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 13, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303686 seconds, 931049480 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 187 16:48:10.869766 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 63, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 188 16:48:10.873697 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 63, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303687 seconds, 259216071 nanoseconds
+ 189 16:48:11.869729 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 64, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 190 16:48:11.872800 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 64, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303688 seconds, 259206669 nanoseconds
+ 191 16:48:12.079717 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 32, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 192 16:48:12.869941 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 65, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 193 16:48:12.873059 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 65, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303689 seconds, 259454558 nanoseconds
+ 194 16:48:13.360985 00:00:06:02:00:00 > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : delay req msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x6ffff020000, port id : 8, seq id : 14, control : 1 (Delay_Req), log message interval : 127, originTimeStamp : 0 seconds, 0 nanoseconds
+ 195 16:48:13.361921 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 68: PTPv2, v1 compat : no, msg type : delay resp msg, length : 54, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 14, control : 3 (Delay_Resp), log message interval : 2, receiveTimeStamp : 1582303689 seconds, 751191518 nanoseconds, port identity : 0x6ffff020000, port id : 8
+ 196 16:48:13.869795 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 66, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 197 16:48:13.870699 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 66, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303690 seconds, 259235331 nanoseconds
+ 198 16:48:14.079807 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 33, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 199 16:48:14.870018 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 67, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 200 16:48:14.912945 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 67, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303691 seconds, 295937711 nanoseconds
+ 201 16:48:15.869829 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 68, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 202 16:48:15.873873 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 68, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303692 seconds, 295766607 nanoseconds
+ 203 16:48:16.079759 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 78: PTPv2, v1 compat : no, msg type : announce msg, length : 64, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 34, control : 5 (Other), log message interval : 1, originTimeStamp : 0 seconds 0 nanoseconds, origin cur utc :0, rsvd : 172, gm priority_1 : 0, gm clock class : 248, gm clock accuracy : 48, gm clock variance : 65535, gm priority_2 : 128, gm clock id : 0x6ffff010000, steps removed : 1, time source : 0x50
+ 204 16:48:16.869875 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : sync msg, length : 44, domain : 0, reserved1 : 0, Flags [two step], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 69, control : 0 (Sync), log message interval : 0, originTimeStamp : 0 seconds, 0 nanoseconds
+ 205 16:48:16.873233 74:83:ef:01:ac:5b > 01:1b:19:00:00:00, ethertype PTP (0x88f7), length 60: PTPv2, v1 compat : no, msg type : follow up msg, length : 44, domain : 0, reserved1 : 0, Flags [none], NS correction : 0, sub NS correction : 0, reserved2 : 0, clock identity : 0x7483efffff01ac16, port id : 274, seq id : 69, control : 2 (Follow_Up), log message interval : 0, preciseOriginTimeStamp : 1582303693 seconds, 295761755 nanoseconds
diff --git a/tests/ptp_ethernet.pcap b/tests/ptp_ethernet.pcap
new file mode 100644
index 0000000..3fec93b
--- /dev/null
+++ b/tests/ptp_ethernet.pcap
Binary files differ
diff --git a/tests/q933-heapoverflow-2.out b/tests/q933-heapoverflow-2.out
new file mode 100644
index 0000000..0c616ea
--- /dev/null
+++ b/tests/q933-heapoverflow-2.out
@@ -0,0 +1,24 @@
+ 1 22:26:23.800723 Q.922, invalid address
+ 2 22:26:23.937975 UI 00! Q.922, hdr-len 4, DLCI 5769024, Flags [none], NLPID unknown (0x11), length 41:
+ 0x0000: 886b 68 .kh [|fr]
+ 3 22:26:23.938313 Q.922, invalid address
+ 4 22:26:23.939938 UI 00! Q.922, hdr-len 4, DLCI 5769024, Flags [none], NLPID unknown (0x14), length 160:
+ 0x0000: a530 b0 .0. [|fr]
+ 5 22:26:23.940187 Q.922, invalid address
+ 6 22:26:23.941938 UI 00! Q.922, hdr-len 4, DLCI 5801792, Flags [none], NLPID unknown (0x11), length 179:
+ 0x0000: 886b 68 .kh [|fr]
+ 7 22:26:23.942187 Q.922, invalid address
+ 8 22:26:23.944938 UI 00! Q.922, hdr-len 4, DLCI 5769024, Flags [none], NLPID unknown (0x14), length 30:
+ 0x0000: a530 b0 .0. [|fr]
+ 9 22:26:23.945312 Q.922, invalid address
+ 10 22:26:23.946188 UI 00! Q.922, hdr-len 4, DLCI 1856, Flags [none], NLPID unknown (0x11), length 85:
+ 0x0000: 886b 68 .kh [|fr]
+ 11 22:26:23.946562 Q.922, invalid address
+ 12 22:26:23.949189 Q.922, invalid address
+ 13 22:26:23.949813 UI 00! Q.922, hdr-len 4, DLCI 526144, Flags [none], NLPID unknown (0x14), length 46:
+ 0x0000: a530 b0 .0. [|fr]
+ 14 22:26:23.950187 Q.922, invalid address
+ 15 22:26:24.634000 UI 2c! Pad! Q.922, hdr-len 2, DLCI 288, Flags [none], NLPID NULL (0x00), length 24:
+ 0x0000: 1188 6b68 ..kh [|fr]
+ 16 22:26:24.634098 Q.922, invalid address
+ 17 22:26:24.634151 UI 2c! Pad! Q.933, CCITT, codeset 0 [|q.933]
diff --git a/tests/q933-heapoverflow-2.pcap b/tests/q933-heapoverflow-2.pcap
new file mode 100644
index 0000000..c38c7b6
--- /dev/null
+++ b/tests/q933-heapoverflow-2.pcap
Binary files differ
diff --git a/tests/radiotap-heapoverflow.out b/tests/radiotap-heapoverflow.out
new file mode 100644
index 0000000..fa0acaa
--- /dev/null
+++ b/tests/radiotap-heapoverflow.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 [|802.11_radio]
diff --git a/tests/radiotap-heapoverflow.pcap b/tests/radiotap-heapoverflow.pcap
new file mode 100644
index 0000000..31caddc
--- /dev/null
+++ b/tests/radiotap-heapoverflow.pcap
Binary files differ
diff --git a/tests/radius-port1700-v.out b/tests/radius-port1700-v.out
new file mode 100644
index 0000000..e6546fd
--- /dev/null
+++ b/tests/radius-port1700-v.out
@@ -0,0 +1,4 @@
+ 1 17:37:27.040632 IP (tos 0x0, ttl 64, id 44978, offset 0, flags [none], proto UDP (17), length 53)
+ 127.0.0.1.42172 > 127.0.0.1.1700: RADIUS, length: 25
+ CoA-Request (43), id: 0xa6, Authenticator: 7fbf02c6662b5990838a5e6e331b3ff0
+ User-Name Attribute (1), length: 5, Value: bob
diff --git a/tests/radius-rfc3162-v.out b/tests/radius-rfc3162-v.out
new file mode 100644
index 0000000..478cae2
--- /dev/null
+++ b/tests/radius-rfc3162-v.out
@@ -0,0 +1,12 @@
+ 1 15:58:04.205048 IP (tos 0x0, ttl 64, id 60508, offset 0, flags [DF], proto UDP (17), length 169)
+ 127.0.0.1.39646 > 127.0.0.1.1812: RADIUS, length: 141
+ Access-Request (1), id: 0xf0, Authenticator: 2afdb090418ac6365298fbbb15e0fd2e
+ User-Name Attribute (1), length: 5, Value: bob
+ User-Password Attribute (2), length: 18, Value:
+ NAS-IPv6-Address Attribute (95), length: 18, Value: 2001:db8:a0b:12f0::1
+ Framed-IPv6-Prefix Attribute (97), length: 20, Value: 2001:db8:a0b:12f0::/64
+ Framed-IPv6-Prefix Attribute (97), length: 12, Value: 2001:db8:a0b:12f0::/64
+ Framed-IPv6-Prefix Attribute (97), length: 4, Value: ::/0
+ Framed-IPv6-Prefix Attribute (97), length: 3, Value: ERROR: length 1 not in range (2..18)
+ Framed-IPv6-Prefix Attribute (97), length: 21, Value: ERROR: length 19 not in range (2..18)
+ Framed-IPv6-Prefix Attribute (97), length: 20, Value: ERROR: netmask 129 not in range (0..128)
diff --git a/tests/radius-rfc4675-v.out b/tests/radius-rfc4675-v.out
new file mode 100644
index 0000000..a840ae4
--- /dev/null
+++ b/tests/radius-rfc4675-v.out
@@ -0,0 +1,43 @@
+ 1 14:41:23.428268 IP (tos 0x0, ttl 64, id 20820, offset 0, flags [none], proto UDP (17), length 108)
+ 127.0.0.1.53334 > 127.0.0.1.1812: RADIUS, length: 80
+ Access-Request (1), id: 0x46, Authenticator: f44757bc498c3393763a27d0b2393702
+ User-Name Attribute (1), length: 12, Value: bob-tagged
+ User-Password Attribute (2), length: 18, Value:
+ NAS-IP-Address Attribute (4), length: 6, Value: 127.0.0.1
+ NAS-Port Attribute (5), length: 6, Value: 1
+ Message-Authenticator Attribute (80), length: 18, Value: .....b..7-....b.
+ 2 14:41:23.429249 IP (tos 0x0, ttl 64, id 20821, offset 0, flags [none], proto UDP (17), length 81)
+ 127.0.0.1.1812 > 127.0.0.1.53334: RADIUS, length: 53
+ Access-Accept (2), id: 0x46, Authenticator: 766a0314eaf4b95f1ec271ae19cb3bdc
+ Egress-VLANID Attribute (56), length: 6, Value: Tagged (0x31) 123
+ Ingress-Filters Attribute (57), length: 6, Value: Enabled
+ Egress-VLAN-Name Attribute (58), length: 11, Value: Tagged (0x31) vlanname
+ User-Priority-Table Attribute (59), length: 10, Value:
+ 3 14:41:25.056378 IP (tos 0x0, ttl 64, id 21127, offset 0, flags [none], proto UDP (17), length 110)
+ 127.0.0.1.46281 > 127.0.0.1.1812: RADIUS, length: 82
+ Access-Request (1), id: 0xb5, Authenticator: 11851d8b1b483f54a864b703ea21f4dc
+ User-Name Attribute (1), length: 14, Value: bob-untagged
+ User-Password Attribute (2), length: 18, Value:
+ NAS-IP-Address Attribute (4), length: 6, Value: 127.0.0.1
+ NAS-Port Attribute (5), length: 6, Value: 1
+ Message-Authenticator Attribute (80), length: 18, Value: ..o..}f..d.;..R[
+ 4 14:41:25.057237 IP (tos 0x0, ttl 64, id 21128, offset 0, flags [none], proto UDP (17), length 71)
+ 127.0.0.1.1812 > 127.0.0.1.46281: RADIUS, length: 43
+ Access-Accept (2), id: 0xb5, Authenticator: e223a663823b20ccc18bcf90c3ecbe27
+ Egress-VLANID Attribute (56), length: 6, Value: Untagged (0x32) 123
+ Ingress-Filters Attribute (57), length: 6, Value: Disabled
+ Egress-VLAN-Name Attribute (58), length: 11, Value: Untagged (0x32) vlanname
+ 5 14:41:26.941335 IP (tos 0x0, ttl 64, id 21190, offset 0, flags [none], proto UDP (17), length 109)
+ 127.0.0.1.39300 > 127.0.0.1.1812: RADIUS, length: 81
+ Access-Request (1), id: 0x5a, Authenticator: 8dd685f50f837e8ad29e9cc095261172
+ User-Name Attribute (1), length: 13, Value: bob-invalid
+ User-Password Attribute (2), length: 18, Value:
+ NAS-IP-Address Attribute (4), length: 6, Value: 127.0.0.1
+ NAS-Port Attribute (5), length: 6, Value: 1
+ Message-Authenticator Attribute (80), length: 18, Value: ....(..^A.f.....
+ 6 14:41:26.942083 IP (tos 0x0, ttl 64, id 21191, offset 0, flags [none], proto UDP (17), length 71)
+ 127.0.0.1.1812 > 127.0.0.1.39300: RADIUS, length: 43
+ Access-Accept (2), id: 0x5a, Authenticator: fbaa7d05d009953514d00697da4d1dfc
+ Egress-VLANID Attribute (56), length: 6, Value: Unknown tag (0x33) 123
+ Ingress-Filters Attribute (57), length: 6, Value: #3
+ Egress-VLAN-Name Attribute (58), length: 11, Value: Unknown tag (0x33) vlanname
diff --git a/tests/radius-rfc5176-2-v.out b/tests/radius-rfc5176-2-v.out
new file mode 100644
index 0000000..a2fee64
--- /dev/null
+++ b/tests/radius-rfc5176-2-v.out
@@ -0,0 +1,7 @@
+ 1 16:32:06.422840 IP (tos 0x0, ttl 64, id 41789, offset 0, flags [none], proto UDP (17), length 83)
+ 127.0.0.1.43124 > 127.0.0.1.1812: RADIUS, length: 55
+ Access-Request (1), id: 0xc8, Authenticator: bc6e7022445e359835692c8c121c1985
+ User-Name Attribute (1), length: 5, Value: bob
+ User-Password Attribute (2), length: 18, Value:
+ Error-Cause Attribute (101), length: 6, Value: Error cause 201: Residual Session Context Removed
+ Error-Cause Attribute (101), length: 6, Value: Error cause 209: Error-Cause 209 not known
diff --git a/tests/radius-rfc5176-v.out b/tests/radius-rfc5176-v.out
new file mode 100644
index 0000000..bb1556e
--- /dev/null
+++ b/tests/radius-rfc5176-v.out
@@ -0,0 +1,24 @@
+ 1 09:28:47.898305 IP (tos 0x0, ttl 4, id 29161, offset 0, flags [none], proto UDP (17), length 66)
+ 10.0.0.10.12345 > 10.0.0.1.3799: RADIUS, length: 38
+ Disconnect-Request (40), id: 0x01, Authenticator: e1792d2b4ab349f1a4c0fcc733d091c1
+ Message-Authenticator Attribute (80), length: 18, Value: XQ=f(G..sJ0.....
+ 2 09:28:47.898338 IP (tos 0x0, ttl 4, id 18682, offset 0, flags [none], proto UDP (17), length 66)
+ 10.0.0.1.3799 > 10.0.0.10.12345: RADIUS, length: 38
+ Disconnect-ACK (41), id: 0x02, Authenticator: 3bc9c343f689990756b96c583a56890a
+ Message-Authenticator Attribute (80), length: 18, Value: .O........iC,'}.
+ 3 09:28:47.898363 IP (tos 0x0, ttl 4, id 22542, offset 0, flags [none], proto UDP (17), length 66)
+ 10.0.0.1.3799 > 10.0.0.10.12345: RADIUS, length: 38
+ Disconnect-NAK (42), id: 0x03, Authenticator: d867c308c9c43112b3a669a0e8c0ab8c
+ Message-Authenticator Attribute (80), length: 18, Value: ...p.I...(."....
+ 4 09:28:47.898387 IP (tos 0x0, ttl 4, id 16413, offset 0, flags [none], proto UDP (17), length 66)
+ 10.0.0.10.12345 > 10.0.0.1.3799: RADIUS, length: 38
+ CoA-Request (43), id: 0x04, Authenticator: 5f18309be67cd6150fe4c3a0b93536c9
+ Message-Authenticator Attribute (80), length: 18, Value: '..6|.F..._...[.
+ 5 09:28:47.898410 IP (tos 0x0, ttl 4, id 170, offset 0, flags [none], proto UDP (17), length 66)
+ 10.0.0.1.3799 > 10.0.0.10.12345: RADIUS, length: 38
+ CoA-ACK (44), id: 0x05, Authenticator: 55ab6cb78aa161d692753fa9130c5019
+ Message-Authenticator Attribute (80), length: 18, Value: .........+.x...s
+ 6 09:28:47.898433 IP (tos 0x0, ttl 4, id 29645, offset 0, flags [none], proto UDP (17), length 66)
+ 10.0.0.1.3799 > 10.0.0.10.12345: RADIUS, length: 38
+ CoA-NAK (45), id: 0x06, Authenticator: 40f21bdee27a87a5d757a30bfed62f28
+ Message-Authenticator Attribute (80), length: 18, Value: .%y.....x...&j..
diff --git a/tests/radius-rfc5447-v.out b/tests/radius-rfc5447-v.out
new file mode 100644
index 0000000..a52c245
--- /dev/null
+++ b/tests/radius-rfc5447-v.out
@@ -0,0 +1,6 @@
+ 1 13:47:25.180847 IP (tos 0x0, ttl 64, id 47488, offset 0, flags [none], proto UDP (17), length 84)
+ 127.0.0.1.55520 > 127.0.0.1.1812: RADIUS, length: 56
+ Access-Request (1), id: 0x4f, Authenticator: 5bec15a7f3ac1590f65629a9f979c340
+ User-Name Attribute (1), length: 7, Value: luser
+ MIP6-Feature-Vector Attribute (124), length: 10, Value: [MIP6_INTEGRATED, IP4_HOA_SUPPORTED, LOCAL_MAG_ROUTING_SUPPORTED]
+ MIP6-Home-Link-Prefix Attribute (125), length: 19, Value: 2001:db8::/32
diff --git a/tests/radius-rfc5580-v.out b/tests/radius-rfc5580-v.out
new file mode 100644
index 0000000..c5da65b
--- /dev/null
+++ b/tests/radius-rfc5580-v.out
@@ -0,0 +1,13 @@
+ 1 18:33:42.683243 IP (tos 0x0, ttl 64, id 39176, offset 0, flags [none], proto UDP (17), length 211)
+ 127.0.0.1.38167 > 127.0.0.1.1812: RADIUS, length: 183
+ Access-Request (1), id: 0x02, Authenticator: c670215681da366d666794ca6abdb54b
+ Operator-Name Attribute (126), length: 18, Value: [TADIG] namespace TADIG
+ Operator-Name Attribute (126), length: 18, Value: [REALM] namespace REALM
+ Operator-Name Attribute (126), length: 17, Value: [E212] namespace E212
+ Operator-Name Attribute (126), length: 16, Value: [ICC] namespace ICC
+ Operator-Name Attribute (126), length: 20, Value: [unknown namespace 52] namespace INVALID
+ Location-Information Attribute (127), length: 25, Value: index 1, code Civic, entity User, sighting time 3803408743.537777777 (2020-07-10T22:25:43Z), time to live 3803451943.537777777 (2020-07-11T10:25:43Z), method "GPS"
+ Location-Data Attribute (128), length: 15, Value: index 1, location
+ 0x0000: 6d79 206c 6f63 6174 696f 6e my.location
+ Basic-Location-Policy-Rules Attribute (129), length: 17, Value: flags [none], retention expires 3803581543.537777777 (2020-07-12T22:25:43Z), note well "test1"
+ Basic-Location-Policy-Rules Attribute (129), length: 17, Value: flags [Retransmission Allowed], retention expires 3803581543.537777777 (2020-07-12T22:25:43Z), note well "test2"
diff --git a/tests/radius-v.out b/tests/radius-v.out
new file mode 100644
index 0000000..b938d9d
--- /dev/null
+++ b/tests/radius-v.out
@@ -0,0 +1,50 @@
+ 1 22:52:17.872968 IP (tos 0x0, ttl 255, id 70, offset 0, flags [none], proto UDP (17), length 167)
+ 10.0.0.1.1645 > 10.0.0.100.1812: RADIUS, length: 139
+ Access-Request (1), id: 0x05, Authenticator: ecfe3d2fe4473ec6299095ee46aedf77
+ NAS-IP-Address Attribute (4), length: 6, Value: 10.0.0.1
+ NAS-Port Attribute (5), length: 6, Value: 50012
+ NAS-Port-Type Attribute (61), length: 6, Value: Ethernet
+ User-Name Attribute (1), length: 14, Value: John.McGuirk
+ Called-Station-Id Attribute (30), length: 19, Value: 00-19-06-EA-B8-8C
+ Calling-Station-Id Attribute (31), length: 19, Value: 00-14-22-E9-54-5E
+ Service-Type Attribute (6), length: 6, Value: Framed
+ Framed-MTU Attribute (12), length: 6, Value: 1500
+ EAP-Message Attribute (79), length: 19, Value: Response (2), id 0, len 17
+ Type Identity (1), Identity: John.McGuirk
+ Message-Authenticator Attribute (80), length: 18, Value: (....$..p.Q1o.x.
+ 2 22:52:17.875771 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 137)
+ 10.0.0.100.1812 > 10.0.0.1.1645: RADIUS, length: 109
+ Access-Challenge (11), id: 0x05, Authenticator: f050649184625d36f14c9075b7a48b83
+ Framed-IP-Address Attribute (8), length: 6, Value: NAS Select
+ Framed-MTU Attribute (12), length: 6, Value: 576
+ Service-Type Attribute (6), length: 6, Value: Framed
+ Reply-Message Attribute (18), length: 11, Value: Hello, %u
+ EAP-Message Attribute (79), length: 24, Value: Request (1), id 1, len 22
+ Type MD5-challenge (4)
+ Message-Authenticator Attribute (80), length: 18, Value: ...<.(.X.13..t4.
+ State Attribute (24), length: 18, Value: ..../.0$.s..1..w
+ 3 22:52:17.916736 IP (tos 0x0, ttl 255, id 71, offset 0, flags [none], proto UDP (17), length 202)
+ 10.0.0.1.1645 > 10.0.0.100.1812: RADIUS, length: 174
+ Access-Request (1), id: 0x06, Authenticator: 6a6f38e6dae830304d2333e5d5364643
+ NAS-IP-Address Attribute (4), length: 6, Value: 10.0.0.1
+ NAS-Port Attribute (5), length: 6, Value: 50012
+ NAS-Port-Type Attribute (61), length: 6, Value: Ethernet
+ User-Name Attribute (1), length: 14, Value: John.McGuirk
+ Called-Station-Id Attribute (30), length: 19, Value: 00-19-06-EA-B8-8C
+ Calling-Station-Id Attribute (31), length: 19, Value: 00-14-22-E9-54-5E
+ Service-Type Attribute (6), length: 6, Value: Framed
+ Framed-MTU Attribute (12), length: 6, Value: 1500
+ State Attribute (24), length: 18, Value: ..../.0$.s..1..w
+ EAP-Message Attribute (79), length: 36, Value: Response (2), id 1, len 34
+ Type MD5-challenge (4)
+ Message-Authenticator Attribute (80), length: 18, Value: '&.q1.....Ojb..8
+ 4 22:52:17.916850 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 125)
+ 10.0.0.100.1812 > 10.0.0.1.1645: RADIUS, length: 97
+ Access-Accept (2), id: 0x06, Authenticator: fbba6a784c7decb314caf0f27944a37b
+ Framed-IP-Address Attribute (8), length: 6, Value: NAS Select
+ Framed-MTU Attribute (12), length: 6, Value: 576
+ Service-Type Attribute (6), length: 6, Value: Framed
+ Reply-Message Attribute (18), length: 21, Value: Hello, John.McGuirk
+ EAP-Message Attribute (79), length: 6, Value: Success (3), id 1, len 4
+ Message-Authenticator Attribute (80), length: 18, Value: ...b...2.^..NLc`
+ User-Name Attribute (1), length: 14, Value: John.McGuirk
diff --git a/tests/radius_attr_asan.out b/tests/radius_attr_asan.out
new file mode 100644
index 0000000..577b263
--- /dev/null
+++ b/tests/radius_attr_asan.out
@@ -0,0 +1,9 @@
+ 1 06:45:20.587271427 IP (tos 0x64, ttl 249, id 40192, offset 0, flags [+, DF, rsvd], proto UDP (17), length 299, options (unknown 235 [bad length 252]), bad cksum 8000 (->1faa)!)
+ 0.0.86.32.258 > 0.2.250.99.3799: RADIUS, length: 263
+ Unknown Command (58), id: 0x6a, Authenticator: 0901020ed7ff03edb63a0f00cb0f00cb
+ NAS-Port Attribute (5), length: 5, Value: ERROR: length 3 != 4
+ Unknown Attribute (254), length: 4, Value:
+ NAS-IP-Address Attribute (4), length: 4, Value: ERROR: length 2 != 4
+ NAS-IP-Address Attribute (4), length: 4, Value: ERROR: length 2 != 4
+ NAS-IP-Address Attribute (4), length: 4, Value: ERROR: length 2 != 4
+ Callback-Id Attribute (20), length: 4, Value: .. [|radius]
diff --git a/tests/radius_attr_asan.pcap b/tests/radius_attr_asan.pcap
new file mode 100644
index 0000000..117bcf7
--- /dev/null
+++ b/tests/radius_attr_asan.pcap
Binary files differ
diff --git a/tests/reason_code-0.pcap b/tests/reason_code-0.pcap
new file mode 100644
index 0000000..ecaccac
--- /dev/null
+++ b/tests/reason_code-0.pcap
Binary files differ
diff --git a/tests/reason_code-1.pcap b/tests/reason_code-1.pcap
new file mode 100644
index 0000000..dd49f8e
--- /dev/null
+++ b/tests/reason_code-1.pcap
Binary files differ
diff --git a/tests/reason_code-10.pcap b/tests/reason_code-10.pcap
new file mode 100644
index 0000000..543cd05
--- /dev/null
+++ b/tests/reason_code-10.pcap
Binary files differ
diff --git a/tests/reason_code-11.pcap b/tests/reason_code-11.pcap
new file mode 100644
index 0000000..cb24e6d
--- /dev/null
+++ b/tests/reason_code-11.pcap
Binary files differ
diff --git a/tests/reason_code-12.pcap b/tests/reason_code-12.pcap
new file mode 100644
index 0000000..9745149
--- /dev/null
+++ b/tests/reason_code-12.pcap
Binary files differ
diff --git a/tests/reason_code-13.pcap b/tests/reason_code-13.pcap
new file mode 100644
index 0000000..77c1aa3
--- /dev/null
+++ b/tests/reason_code-13.pcap
Binary files differ
diff --git a/tests/reason_code-14.pcap b/tests/reason_code-14.pcap
new file mode 100644
index 0000000..c898ec0
--- /dev/null
+++ b/tests/reason_code-14.pcap
Binary files differ
diff --git a/tests/reason_code-15.pcap b/tests/reason_code-15.pcap
new file mode 100644
index 0000000..84bbd67
--- /dev/null
+++ b/tests/reason_code-15.pcap
Binary files differ
diff --git a/tests/reason_code-16.pcap b/tests/reason_code-16.pcap
new file mode 100644
index 0000000..cee7e36
--- /dev/null
+++ b/tests/reason_code-16.pcap
Binary files differ
diff --git a/tests/reason_code-17.pcap b/tests/reason_code-17.pcap
new file mode 100644
index 0000000..45280b2
--- /dev/null
+++ b/tests/reason_code-17.pcap
Binary files differ
diff --git a/tests/reason_code-18.pcap b/tests/reason_code-18.pcap
new file mode 100644
index 0000000..e37d08d
--- /dev/null
+++ b/tests/reason_code-18.pcap
Binary files differ
diff --git a/tests/reason_code-19.pcap b/tests/reason_code-19.pcap
new file mode 100644
index 0000000..fd3152e
--- /dev/null
+++ b/tests/reason_code-19.pcap
Binary files differ
diff --git a/tests/reason_code-2.pcap b/tests/reason_code-2.pcap
new file mode 100644
index 0000000..819df8c
--- /dev/null
+++ b/tests/reason_code-2.pcap
Binary files differ
diff --git a/tests/reason_code-20.pcap b/tests/reason_code-20.pcap
new file mode 100644
index 0000000..fb4f3e3
--- /dev/null
+++ b/tests/reason_code-20.pcap
Binary files differ
diff --git a/tests/reason_code-21.pcap b/tests/reason_code-21.pcap
new file mode 100644
index 0000000..f73d5fe
--- /dev/null
+++ b/tests/reason_code-21.pcap
Binary files differ
diff --git a/tests/reason_code-22.pcap b/tests/reason_code-22.pcap
new file mode 100644
index 0000000..4a9e1d5
--- /dev/null
+++ b/tests/reason_code-22.pcap
Binary files differ
diff --git a/tests/reason_code-23.pcap b/tests/reason_code-23.pcap
new file mode 100644
index 0000000..528a9e2
--- /dev/null
+++ b/tests/reason_code-23.pcap
Binary files differ
diff --git a/tests/reason_code-24.pcap b/tests/reason_code-24.pcap
new file mode 100644
index 0000000..e67f39e
--- /dev/null
+++ b/tests/reason_code-24.pcap
Binary files differ
diff --git a/tests/reason_code-25.pcap b/tests/reason_code-25.pcap
new file mode 100644
index 0000000..4217c81
--- /dev/null
+++ b/tests/reason_code-25.pcap
Binary files differ
diff --git a/tests/reason_code-26.pcap b/tests/reason_code-26.pcap
new file mode 100644
index 0000000..92c2e36
--- /dev/null
+++ b/tests/reason_code-26.pcap
Binary files differ
diff --git a/tests/reason_code-27.pcap b/tests/reason_code-27.pcap
new file mode 100644
index 0000000..0619c19
--- /dev/null
+++ b/tests/reason_code-27.pcap
Binary files differ
diff --git a/tests/reason_code-28.pcap b/tests/reason_code-28.pcap
new file mode 100644
index 0000000..c3053ee
--- /dev/null
+++ b/tests/reason_code-28.pcap
Binary files differ
diff --git a/tests/reason_code-29.pcap b/tests/reason_code-29.pcap
new file mode 100644
index 0000000..3b4ee45
--- /dev/null
+++ b/tests/reason_code-29.pcap
Binary files differ
diff --git a/tests/reason_code-3.pcap b/tests/reason_code-3.pcap
new file mode 100644
index 0000000..6ba69fc
--- /dev/null
+++ b/tests/reason_code-3.pcap
Binary files differ
diff --git a/tests/reason_code-30.pcap b/tests/reason_code-30.pcap
new file mode 100644
index 0000000..2a58e18
--- /dev/null
+++ b/tests/reason_code-30.pcap
Binary files differ
diff --git a/tests/reason_code-31.pcap b/tests/reason_code-31.pcap
new file mode 100644
index 0000000..d56da07
--- /dev/null
+++ b/tests/reason_code-31.pcap
Binary files differ
diff --git a/tests/reason_code-32.pcap b/tests/reason_code-32.pcap
new file mode 100644
index 0000000..cb6cf8a
--- /dev/null
+++ b/tests/reason_code-32.pcap
Binary files differ
diff --git a/tests/reason_code-33.pcap b/tests/reason_code-33.pcap
new file mode 100644
index 0000000..71f469e
--- /dev/null
+++ b/tests/reason_code-33.pcap
Binary files differ
diff --git a/tests/reason_code-34.pcap b/tests/reason_code-34.pcap
new file mode 100644
index 0000000..3635ea5
--- /dev/null
+++ b/tests/reason_code-34.pcap
Binary files differ
diff --git a/tests/reason_code-35.pcap b/tests/reason_code-35.pcap
new file mode 100644
index 0000000..47138a5
--- /dev/null
+++ b/tests/reason_code-35.pcap
Binary files differ
diff --git a/tests/reason_code-36.pcap b/tests/reason_code-36.pcap
new file mode 100644
index 0000000..7793d69
--- /dev/null
+++ b/tests/reason_code-36.pcap
Binary files differ
diff --git a/tests/reason_code-37.pcap b/tests/reason_code-37.pcap
new file mode 100644
index 0000000..fedfd9a
--- /dev/null
+++ b/tests/reason_code-37.pcap
Binary files differ
diff --git a/tests/reason_code-38.pcap b/tests/reason_code-38.pcap
new file mode 100644
index 0000000..5bd2430
--- /dev/null
+++ b/tests/reason_code-38.pcap
Binary files differ
diff --git a/tests/reason_code-39.pcap b/tests/reason_code-39.pcap
new file mode 100644
index 0000000..ff44355
--- /dev/null
+++ b/tests/reason_code-39.pcap
Binary files differ
diff --git a/tests/reason_code-4.pcap b/tests/reason_code-4.pcap
new file mode 100644
index 0000000..fdae856
--- /dev/null
+++ b/tests/reason_code-4.pcap
Binary files differ
diff --git a/tests/reason_code-40.pcap b/tests/reason_code-40.pcap
new file mode 100644
index 0000000..42b9ecc
--- /dev/null
+++ b/tests/reason_code-40.pcap
Binary files differ
diff --git a/tests/reason_code-41.pcap b/tests/reason_code-41.pcap
new file mode 100644
index 0000000..1d1ed60
--- /dev/null
+++ b/tests/reason_code-41.pcap
Binary files differ
diff --git a/tests/reason_code-42.pcap b/tests/reason_code-42.pcap
new file mode 100644
index 0000000..80f2c0a
--- /dev/null
+++ b/tests/reason_code-42.pcap
Binary files differ
diff --git a/tests/reason_code-43.pcap b/tests/reason_code-43.pcap
new file mode 100644
index 0000000..fe4859c
--- /dev/null
+++ b/tests/reason_code-43.pcap
Binary files differ
diff --git a/tests/reason_code-44.pcap b/tests/reason_code-44.pcap
new file mode 100644
index 0000000..dad8cc5
--- /dev/null
+++ b/tests/reason_code-44.pcap
Binary files differ
diff --git a/tests/reason_code-45.pcap b/tests/reason_code-45.pcap
new file mode 100644
index 0000000..c481eba
--- /dev/null
+++ b/tests/reason_code-45.pcap
Binary files differ
diff --git a/tests/reason_code-46.pcap b/tests/reason_code-46.pcap
new file mode 100644
index 0000000..25f571c
--- /dev/null
+++ b/tests/reason_code-46.pcap
Binary files differ
diff --git a/tests/reason_code-47.pcap b/tests/reason_code-47.pcap
new file mode 100644
index 0000000..bbe5445
--- /dev/null
+++ b/tests/reason_code-47.pcap
Binary files differ
diff --git a/tests/reason_code-48.pcap b/tests/reason_code-48.pcap
new file mode 100644
index 0000000..8e58b93
--- /dev/null
+++ b/tests/reason_code-48.pcap
Binary files differ
diff --git a/tests/reason_code-49.pcap b/tests/reason_code-49.pcap
new file mode 100644
index 0000000..4608397
--- /dev/null
+++ b/tests/reason_code-49.pcap
Binary files differ
diff --git a/tests/reason_code-5.pcap b/tests/reason_code-5.pcap
new file mode 100644
index 0000000..b731c0d
--- /dev/null
+++ b/tests/reason_code-5.pcap
Binary files differ
diff --git a/tests/reason_code-50.pcap b/tests/reason_code-50.pcap
new file mode 100644
index 0000000..7c08286
--- /dev/null
+++ b/tests/reason_code-50.pcap
Binary files differ
diff --git a/tests/reason_code-51.pcap b/tests/reason_code-51.pcap
new file mode 100644
index 0000000..a6374c1
--- /dev/null
+++ b/tests/reason_code-51.pcap
Binary files differ
diff --git a/tests/reason_code-52.pcap b/tests/reason_code-52.pcap
new file mode 100644
index 0000000..24f4131
--- /dev/null
+++ b/tests/reason_code-52.pcap
Binary files differ
diff --git a/tests/reason_code-53.pcap b/tests/reason_code-53.pcap
new file mode 100644
index 0000000..e20ec51
--- /dev/null
+++ b/tests/reason_code-53.pcap
Binary files differ
diff --git a/tests/reason_code-54.pcap b/tests/reason_code-54.pcap
new file mode 100644
index 0000000..acf036d
--- /dev/null
+++ b/tests/reason_code-54.pcap
Binary files differ
diff --git a/tests/reason_code-55.pcap b/tests/reason_code-55.pcap
new file mode 100644
index 0000000..b560418
--- /dev/null
+++ b/tests/reason_code-55.pcap
Binary files differ
diff --git a/tests/reason_code-56.pcap b/tests/reason_code-56.pcap
new file mode 100644
index 0000000..aa36130
--- /dev/null
+++ b/tests/reason_code-56.pcap
Binary files differ
diff --git a/tests/reason_code-57.pcap b/tests/reason_code-57.pcap
new file mode 100644
index 0000000..a74f2b1
--- /dev/null
+++ b/tests/reason_code-57.pcap
Binary files differ
diff --git a/tests/reason_code-58.pcap b/tests/reason_code-58.pcap
new file mode 100644
index 0000000..709d4f3
--- /dev/null
+++ b/tests/reason_code-58.pcap
Binary files differ
diff --git a/tests/reason_code-59.pcap b/tests/reason_code-59.pcap
new file mode 100644
index 0000000..85e85a4
--- /dev/null
+++ b/tests/reason_code-59.pcap
Binary files differ
diff --git a/tests/reason_code-6.pcap b/tests/reason_code-6.pcap
new file mode 100644
index 0000000..a74d7dd
--- /dev/null
+++ b/tests/reason_code-6.pcap
Binary files differ
diff --git a/tests/reason_code-60.pcap b/tests/reason_code-60.pcap
new file mode 100644
index 0000000..359e012
--- /dev/null
+++ b/tests/reason_code-60.pcap
Binary files differ
diff --git a/tests/reason_code-61.pcap b/tests/reason_code-61.pcap
new file mode 100644
index 0000000..e861ff1
--- /dev/null
+++ b/tests/reason_code-61.pcap
Binary files differ
diff --git a/tests/reason_code-62.pcap b/tests/reason_code-62.pcap
new file mode 100644
index 0000000..5548dd0
--- /dev/null
+++ b/tests/reason_code-62.pcap
Binary files differ
diff --git a/tests/reason_code-63.pcap b/tests/reason_code-63.pcap
new file mode 100644
index 0000000..5ceeae9
--- /dev/null
+++ b/tests/reason_code-63.pcap
Binary files differ
diff --git a/tests/reason_code-64.pcap b/tests/reason_code-64.pcap
new file mode 100644
index 0000000..99be4f7
--- /dev/null
+++ b/tests/reason_code-64.pcap
Binary files differ
diff --git a/tests/reason_code-65.pcap b/tests/reason_code-65.pcap
new file mode 100644
index 0000000..c8d3c33
--- /dev/null
+++ b/tests/reason_code-65.pcap
Binary files differ
diff --git a/tests/reason_code-66.pcap b/tests/reason_code-66.pcap
new file mode 100644
index 0000000..be2fb22
--- /dev/null
+++ b/tests/reason_code-66.pcap
Binary files differ
diff --git a/tests/reason_code-7.pcap b/tests/reason_code-7.pcap
new file mode 100644
index 0000000..21f463b
--- /dev/null
+++ b/tests/reason_code-7.pcap
Binary files differ
diff --git a/tests/reason_code-8.pcap b/tests/reason_code-8.pcap
new file mode 100644
index 0000000..3a0a03a
--- /dev/null
+++ b/tests/reason_code-8.pcap
Binary files differ
diff --git a/tests/reason_code-9.pcap b/tests/reason_code-9.pcap
new file mode 100644
index 0000000..5d53cff
--- /dev/null
+++ b/tests/reason_code-9.pcap
Binary files differ
diff --git a/tests/relts-0x80000000.out b/tests/relts-0x80000000.out
new file mode 100644
index 0000000..e6ef4f4
--- /dev/null
+++ b/tests/relts-0x80000000.out
@@ -0,0 +1,2 @@
+ 1 01:10:59.680304 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto IGMP (2), length 12336, bad cksum 3030 (->69ac)!)
+ 48.48.48.48 > 48.48.48.48: igmp dvmrp Prune src 48.48.48.48 grp 48.48.48.48 timer 68y5w3h14m8s
diff --git a/tests/relts-0x80000000.pcap b/tests/relts-0x80000000.pcap
new file mode 100644
index 0000000..1726361
--- /dev/null
+++ b/tests/relts-0x80000000.pcap
Binary files differ
diff --git a/tests/resp_1.out b/tests/resp_1.out
new file mode 100644
index 0000000..80bb6ed
--- /dev/null
+++ b/tests/resp_1.out
@@ -0,0 +1,150 @@
+ 1 02:23:00.757048 IP 127.0.0.1.35901 > 127.0.0.1.6379: Flags [S], seq 1159918511, win 43690, options [mss 65495,sackOK,TS val 2004405846 ecr 0,nop,wscale 7], length 0
+ 2 02:23:00.757078 IP 127.0.0.1.6379 > 127.0.0.1.35901: Flags [S.], seq 1309831771, ack 1159918512, win 43690, options [mss 65495,sackOK,TS val 2004405846 ecr 2004405846,nop,wscale 7], length 0
+ 3 02:23:00.757105 IP 127.0.0.1.35901 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 4 02:23:00.757197 IP 127.0.0.1.35901 > 127.0.0.1.6379: Flags [P.], seq 1:7, ack 1, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 6: RESP "PING"
+ 5 02:23:00.757225 IP 127.0.0.1.6379 > 127.0.0.1.35901: Flags [.], ack 7, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 6 02:23:00.757314 IP 127.0.0.1.6379 > 127.0.0.1.35901: Flags [P.], seq 1:8, ack 7, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 7: RESP "PONG"
+ 7 02:23:00.757344 IP 127.0.0.1.35901 > 127.0.0.1.6379: Flags [.], ack 8, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 8 02:23:00.757391 IP 127.0.0.1.35901 > 127.0.0.1.6379: Flags [F.], seq 7, ack 8, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 9 02:23:00.757457 IP 127.0.0.1.6379 > 127.0.0.1.35901: Flags [F.], seq 8, ack 8, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 10 02:23:00.757491 IP 127.0.0.1.35901 > 127.0.0.1.6379: Flags [.], ack 9, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 11 02:23:00.757586 IP 127.0.0.1.35902 > 127.0.0.1.6379: Flags [S], seq 3880036895, win 43690, options [mss 65495,sackOK,TS val 2004405846 ecr 0,nop,wscale 7], length 0
+ 12 02:23:00.757599 IP 127.0.0.1.6379 > 127.0.0.1.35902: Flags [S.], seq 95825237, ack 3880036896, win 43690, options [mss 65495,sackOK,TS val 2004405846 ecr 2004405846,nop,wscale 7], length 0
+ 13 02:23:00.757612 IP 127.0.0.1.35902 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 14 02:23:00.757657 IP 127.0.0.1.35902 > 127.0.0.1.6379: Flags [P.], seq 1:15, ack 1, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 14: RESP "PING"
+ 15 02:23:00.757686 IP 127.0.0.1.6379 > 127.0.0.1.35902: Flags [.], ack 15, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 16 02:23:00.757739 IP 127.0.0.1.6379 > 127.0.0.1.35902: Flags [P.], seq 1:8, ack 15, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 7: RESP "PONG"
+ 17 02:23:00.757763 IP 127.0.0.1.35902 > 127.0.0.1.6379: Flags [.], ack 8, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 18 02:23:00.757810 IP 127.0.0.1.35902 > 127.0.0.1.6379: Flags [F.], seq 15, ack 8, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 19 02:23:00.757854 IP 127.0.0.1.6379 > 127.0.0.1.35902: Flags [F.], seq 8, ack 16, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 20 02:23:00.757880 IP 127.0.0.1.35902 > 127.0.0.1.6379: Flags [.], ack 9, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 21 02:23:00.758056 IP 127.0.0.1.35903 > 127.0.0.1.6379: Flags [S], seq 3040658582, win 43690, options [mss 65495,sackOK,TS val 2004405846 ecr 0,nop,wscale 7], length 0
+ 22 02:23:00.758070 IP 127.0.0.1.6379 > 127.0.0.1.35903: Flags [S.], seq 2458684268, ack 3040658583, win 43690, options [mss 65495,sackOK,TS val 2004405846 ecr 2004405846,nop,wscale 7], length 0
+ 23 02:23:00.758083 IP 127.0.0.1.35903 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 24 02:23:00.758126 IP 127.0.0.1.35903 > 127.0.0.1.6379: Flags [P.], seq 1:46, ack 1, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 45: RESP "SET" "key:000000000943" "xxx"
+ 25 02:23:00.758159 IP 127.0.0.1.6379 > 127.0.0.1.35903: Flags [.], ack 46, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 26 02:23:00.758232 IP 127.0.0.1.6379 > 127.0.0.1.35903: Flags [P.], seq 1:6, ack 46, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 5: RESP "OK"
+ 27 02:23:00.758258 IP 127.0.0.1.35903 > 127.0.0.1.6379: Flags [.], ack 6, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 28 02:23:00.758312 IP 127.0.0.1.35903 > 127.0.0.1.6379: Flags [F.], seq 46, ack 6, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 29 02:23:00.758375 IP 127.0.0.1.6379 > 127.0.0.1.35903: Flags [F.], seq 6, ack 47, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 30 02:23:00.758410 IP 127.0.0.1.35903 > 127.0.0.1.6379: Flags [.], ack 7, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 31 02:23:00.758491 IP 127.0.0.1.35904 > 127.0.0.1.6379: Flags [S], seq 2555867980, win 43690, options [mss 65495,sackOK,TS val 2004405846 ecr 0,nop,wscale 7], length 0
+ 32 02:23:00.758504 IP 127.0.0.1.6379 > 127.0.0.1.35904: Flags [S.], seq 4291997072, ack 2555867981, win 43690, options [mss 65495,sackOK,TS val 2004405846 ecr 2004405846,nop,wscale 7], length 0
+ 33 02:23:00.758517 IP 127.0.0.1.35904 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 34 02:23:00.758562 IP 127.0.0.1.35904 > 127.0.0.1.6379: Flags [P.], seq 1:37, ack 1, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 36: RESP "GET" "key:000000000199"
+ 35 02:23:00.758590 IP 127.0.0.1.6379 > 127.0.0.1.35904: Flags [.], ack 37, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 36 02:23:00.758687 IP 127.0.0.1.6379 > 127.0.0.1.35904: Flags [P.], seq 1:10, ack 37, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 9: RESP "xxx"
+ 37 02:23:00.758717 IP 127.0.0.1.35904 > 127.0.0.1.6379: Flags [.], ack 10, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 38 02:23:00.758764 IP 127.0.0.1.35904 > 127.0.0.1.6379: Flags [F.], seq 37, ack 10, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 39 02:23:00.758805 IP 127.0.0.1.6379 > 127.0.0.1.35904: Flags [F.], seq 10, ack 38, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 40 02:23:00.758838 IP 127.0.0.1.35904 > 127.0.0.1.6379: Flags [.], ack 11, win 342, options [nop,nop,TS val 2004405846 ecr 2004405846], length 0
+ 41 02:23:00.758938 IP 127.0.0.1.35905 > 127.0.0.1.6379: Flags [S], seq 2342248419, win 43690, options [mss 65495,sackOK,TS val 2004405846 ecr 0,nop,wscale 7], length 0
+ 42 02:23:00.758954 IP 127.0.0.1.6379 > 127.0.0.1.35905: Flags [S.], seq 2490886259, ack 2342248420, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 2004405846,nop,wscale 7], length 0
+ 43 02:23:00.758968 IP 127.0.0.1.35905 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 44 02:23:00.758999 IP 127.0.0.1.35905 > 127.0.0.1.6379: Flags [P.], seq 1:42, ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 41: RESP "INCR" "counter:000000000293"
+ 45 02:23:00.759029 IP 127.0.0.1.6379 > 127.0.0.1.35905: Flags [.], ack 42, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 46 02:23:00.759067 IP 127.0.0.1.6379 > 127.0.0.1.35905: Flags [P.], seq 1:5, ack 42, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 4: RESP "3"
+ 47 02:23:00.759095 IP 127.0.0.1.35905 > 127.0.0.1.6379: Flags [.], ack 5, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 48 02:23:00.759183 IP 127.0.0.1.35905 > 127.0.0.1.6379: Flags [F.], seq 42, ack 5, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 49 02:23:00.759224 IP 127.0.0.1.6379 > 127.0.0.1.35905: Flags [F.], seq 5, ack 43, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 50 02:23:00.759256 IP 127.0.0.1.35905 > 127.0.0.1.6379: Flags [.], ack 6, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 51 02:23:00.759421 IP 127.0.0.1.35906 > 127.0.0.1.6379: Flags [S], seq 131158412, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 0,nop,wscale 7], length 0
+ 52 02:23:00.759433 IP 127.0.0.1.6379 > 127.0.0.1.35906: Flags [S.], seq 49781958, ack 131158413, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 2004405847,nop,wscale 7], length 0
+ 53 02:23:00.759446 IP 127.0.0.1.35906 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 54 02:23:00.759476 IP 127.0.0.1.35906 > 127.0.0.1.6379: Flags [P.], seq 1:37, ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 36: RESP "LPUSH" "mylist" "xxx"
+ 55 02:23:00.759511 IP 127.0.0.1.6379 > 127.0.0.1.35906: Flags [.], ack 37, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 56 02:23:00.759549 IP 127.0.0.1.6379 > 127.0.0.1.35906: Flags [P.], seq 1:9, ack 37, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 8: RESP "47158"
+ 57 02:23:00.759564 IP 127.0.0.1.35906 > 127.0.0.1.6379: Flags [.], ack 9, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 58 02:23:00.759594 IP 127.0.0.1.35906 > 127.0.0.1.6379: Flags [F.], seq 37, ack 9, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 59 02:23:00.759634 IP 127.0.0.1.6379 > 127.0.0.1.35906: Flags [F.], seq 9, ack 38, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 60 02:23:00.759667 IP 127.0.0.1.35906 > 127.0.0.1.6379: Flags [.], ack 10, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 61 02:23:00.759744 IP 127.0.0.1.35907 > 127.0.0.1.6379: Flags [S], seq 1454742392, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 0,nop,wscale 7], length 0
+ 62 02:23:00.759762 IP 127.0.0.1.6379 > 127.0.0.1.35907: Flags [S.], seq 4166501195, ack 1454742393, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 2004405847,nop,wscale 7], length 0
+ 63 02:23:00.759781 IP 127.0.0.1.35907 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 64 02:23:00.759817 IP 127.0.0.1.35907 > 127.0.0.1.6379: Flags [P.], seq 1:27, ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 26: RESP "LPOP" "mylist"
+ 65 02:23:00.759846 IP 127.0.0.1.6379 > 127.0.0.1.35907: Flags [.], ack 27, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 66 02:23:00.759873 IP 127.0.0.1.6379 > 127.0.0.1.35907: Flags [P.], seq 1:10, ack 27, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 9: RESP "xxx"
+ 67 02:23:00.759895 IP 127.0.0.1.35907 > 127.0.0.1.6379: Flags [.], ack 10, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 68 02:23:00.759923 IP 127.0.0.1.35907 > 127.0.0.1.6379: Flags [F.], seq 27, ack 10, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 69 02:23:00.759965 IP 127.0.0.1.6379 > 127.0.0.1.35907: Flags [F.], seq 10, ack 28, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 70 02:23:00.759993 IP 127.0.0.1.35907 > 127.0.0.1.6379: Flags [.], ack 11, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 71 02:23:00.760073 IP 127.0.0.1.35908 > 127.0.0.1.6379: Flags [S], seq 545589487, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 0,nop,wscale 7], length 0
+ 72 02:23:00.760087 IP 127.0.0.1.6379 > 127.0.0.1.35908: Flags [S.], seq 2823817844, ack 545589488, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 2004405847,nop,wscale 7], length 0
+ 73 02:23:00.760100 IP 127.0.0.1.35908 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 74 02:23:00.760141 IP 127.0.0.1.35908 > 127.0.0.1.6379: Flags [P.], seq 1:53, ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 52: RESP "SADD" "myset" "element:000000000063"
+ 75 02:23:00.760171 IP 127.0.0.1.6379 > 127.0.0.1.35908: Flags [.], ack 53, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 76 02:23:00.760225 IP 127.0.0.1.6379 > 127.0.0.1.35908: Flags [P.], seq 1:5, ack 53, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 4: RESP "1"
+ 77 02:23:00.760248 IP 127.0.0.1.35908 > 127.0.0.1.6379: Flags [.], ack 5, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 78 02:23:00.760288 IP 127.0.0.1.35908 > 127.0.0.1.6379: Flags [F.], seq 53, ack 5, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 79 02:23:00.760343 IP 127.0.0.1.6379 > 127.0.0.1.35908: Flags [F.], seq 5, ack 54, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 80 02:23:00.760376 IP 127.0.0.1.35908 > 127.0.0.1.6379: Flags [.], ack 6, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 81 02:23:00.760502 IP 127.0.0.1.35909 > 127.0.0.1.6379: Flags [S], seq 296698850, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 0,nop,wscale 7], length 0
+ 82 02:23:00.760523 IP 127.0.0.1.6379 > 127.0.0.1.35909: Flags [S.], seq 3970806453, ack 296698851, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 2004405847,nop,wscale 7], length 0
+ 83 02:23:00.760544 IP 127.0.0.1.35909 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 84 02:23:00.760589 IP 127.0.0.1.35909 > 127.0.0.1.6379: Flags [P.], seq 1:26, ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 25: RESP "SPOP" "myset"
+ 85 02:23:00.760628 IP 127.0.0.1.6379 > 127.0.0.1.35909: Flags [.], ack 26, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 86 02:23:00.760659 IP 127.0.0.1.6379 > 127.0.0.1.35909: Flags [P.], seq 1:28, ack 26, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 27: RESP "element:000000000063"
+ 87 02:23:00.760682 IP 127.0.0.1.35909 > 127.0.0.1.6379: Flags [.], ack 28, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 88 02:23:00.760714 IP 127.0.0.1.35909 > 127.0.0.1.6379: Flags [F.], seq 26, ack 28, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 89 02:23:00.760757 IP 127.0.0.1.6379 > 127.0.0.1.35909: Flags [F.], seq 28, ack 27, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 90 02:23:00.760777 IP 127.0.0.1.35909 > 127.0.0.1.6379: Flags [.], ack 29, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 91 02:23:00.760892 IP 127.0.0.1.35910 > 127.0.0.1.6379: Flags [S], seq 2082555059, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 0,nop,wscale 7], length 0
+ 92 02:23:00.760911 IP 127.0.0.1.6379 > 127.0.0.1.35910: Flags [S.], seq 1762470779, ack 2082555060, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 2004405847,nop,wscale 7], length 0
+ 93 02:23:00.760931 IP 127.0.0.1.35910 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 94 02:23:00.760973 IP 127.0.0.1.35910 > 127.0.0.1.6379: Flags [P.], seq 1:37, ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 36: RESP "LPUSH" "mylist" "xxx"
+ 95 02:23:00.761006 IP 127.0.0.1.6379 > 127.0.0.1.35910: Flags [.], ack 37, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 96 02:23:00.761026 IP 127.0.0.1.6379 > 127.0.0.1.35910: Flags [P.], seq 1:9, ack 37, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 8: RESP "47158"
+ 97 02:23:00.761047 IP 127.0.0.1.35910 > 127.0.0.1.6379: Flags [.], ack 9, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 98 02:23:00.761078 IP 127.0.0.1.35910 > 127.0.0.1.6379: Flags [F.], seq 37, ack 9, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 99 02:23:00.761119 IP 127.0.0.1.6379 > 127.0.0.1.35910: Flags [F.], seq 9, ack 38, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 100 02:23:00.761139 IP 127.0.0.1.35910 > 127.0.0.1.6379: Flags [.], ack 10, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 101 02:23:00.761303 IP 127.0.0.1.35911 > 127.0.0.1.6379: Flags [S], seq 823555559, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 0,nop,wscale 7], length 0
+ 102 02:23:00.761322 IP 127.0.0.1.6379 > 127.0.0.1.35911: Flags [S.], seq 1343119127, ack 823555560, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 2004405847,nop,wscale 7], length 0
+ 103 02:23:00.761344 IP 127.0.0.1.35911 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 104 02:23:00.761382 IP 127.0.0.1.35911 > 127.0.0.1.6379: Flags [P.], seq 1:44, ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 43: RESP "LRANGE" "mylist" "0" "99"
+ 105 02:23:00.761415 IP 127.0.0.1.6379 > 127.0.0.1.35911: Flags [.], ack 44, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 106 02:23:00.761444 IP 127.0.0.1.6379 > 127.0.0.1.35911: Flags [P.], seq 1:907, ack 44, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 906: RESP "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx"
+ 107 02:23:00.761465 IP 127.0.0.1.35911 > 127.0.0.1.6379: Flags [.], ack 907, win 356, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 108 02:23:00.761570 IP 127.0.0.1.35911 > 127.0.0.1.6379: Flags [F.], seq 44, ack 907, win 356, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 109 02:23:00.761643 IP 127.0.0.1.6379 > 127.0.0.1.35911: Flags [F.], seq 907, ack 45, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 110 02:23:00.761669 IP 127.0.0.1.35911 > 127.0.0.1.6379: Flags [.], ack 908, win 356, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 111 02:23:00.761779 IP 127.0.0.1.35912 > 127.0.0.1.6379: Flags [S], seq 2379661641, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 0,nop,wscale 7], length 0
+ 112 02:23:00.761792 IP 127.0.0.1.6379 > 127.0.0.1.35912: Flags [S.], seq 1832740480, ack 2379661642, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 2004405847,nop,wscale 7], length 0
+ 113 02:23:00.761805 IP 127.0.0.1.35912 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 114 02:23:00.761832 IP 127.0.0.1.35912 > 127.0.0.1.6379: Flags [P.], seq 1:45, ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 44: RESP "LRANGE" "mylist" "0" "299"
+ 115 02:23:00.761857 IP 127.0.0.1.6379 > 127.0.0.1.35912: Flags [.], ack 45, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 116 02:23:00.761899 IP 127.0.0.1.6379 > 127.0.0.1.35912: Flags [P.], seq 1:2707, ack 45, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 2706: RESP "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx"
+ 117 02:23:00.761922 IP 127.0.0.1.35912 > 127.0.0.1.6379: Flags [.], ack 2707, win 1365, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 118 02:23:00.762025 IP 127.0.0.1.35912 > 127.0.0.1.6379: Flags [F.], seq 45, ack 2707, win 1365, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 119 02:23:00.762064 IP 127.0.0.1.6379 > 127.0.0.1.35912: Flags [F.], seq 2707, ack 46, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 120 02:23:00.762084 IP 127.0.0.1.35912 > 127.0.0.1.6379: Flags [.], ack 2708, win 1365, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 121 02:23:00.762164 IP 127.0.0.1.35913 > 127.0.0.1.6379: Flags [S], seq 1669304377, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 0,nop,wscale 7], length 0
+ 122 02:23:00.762174 IP 127.0.0.1.6379 > 127.0.0.1.35913: Flags [S.], seq 1910612537, ack 1669304378, win 43690, options [mss 65495,sackOK,TS val 2004405847 ecr 2004405847,nop,wscale 7], length 0
+ 123 02:23:00.762189 IP 127.0.0.1.35913 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405847 ecr 2004405847], length 0
+ 124 02:23:00.762214 IP 127.0.0.1.35913 > 127.0.0.1.6379: Flags [P.], seq 1:45, ack 1, win 342, options [nop,nop,TS val 2004405848 ecr 2004405847], length 44: RESP "LRANGE" "mylist" "0" "449"
+ 125 02:23:00.762237 IP 127.0.0.1.6379 > 127.0.0.1.35913: Flags [.], ack 45, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 126 02:23:00.762297 IP 127.0.0.1.6379 > 127.0.0.1.35913: Flags [P.], seq 1:4057, ack 45, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 4056: RESP "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx"
+ 127 02:23:00.762326 IP 127.0.0.1.35913 > 127.0.0.1.6379: Flags [.], ack 4057, win 1365, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 128 02:23:00.762419 IP 127.0.0.1.35913 > 127.0.0.1.6379: Flags [F.], seq 45, ack 4057, win 1365, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 129 02:23:00.762466 IP 127.0.0.1.6379 > 127.0.0.1.35913: Flags [F.], seq 4057, ack 46, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 130 02:23:00.762497 IP 127.0.0.1.35913 > 127.0.0.1.6379: Flags [.], ack 4058, win 1365, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 131 02:23:00.762545 IP 127.0.0.1.35914 > 127.0.0.1.6379: Flags [S], seq 1695153288, win 43690, options [mss 65495,sackOK,TS val 2004405848 ecr 0,nop,wscale 7], length 0
+ 132 02:23:00.762557 IP 127.0.0.1.6379 > 127.0.0.1.35914: Flags [S.], seq 488402032, ack 1695153289, win 43690, options [mss 65495,sackOK,TS val 2004405848 ecr 2004405848,nop,wscale 7], length 0
+ 133 02:23:00.762569 IP 127.0.0.1.35914 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 134 02:23:00.762595 IP 127.0.0.1.35914 > 127.0.0.1.6379: Flags [P.], seq 1:45, ack 1, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 44: RESP "LRANGE" "mylist" "0" "599"
+ 135 02:23:00.762620 IP 127.0.0.1.6379 > 127.0.0.1.35914: Flags [.], ack 45, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 136 02:23:00.762673 IP 127.0.0.1.6379 > 127.0.0.1.35914: Flags [P.], seq 1:5407, ack 45, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 5406: RESP "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx"
+ 137 02:23:00.762705 IP 127.0.0.1.35914 > 127.0.0.1.6379: Flags [.], ack 5407, win 1365, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 138 02:23:00.762835 IP 127.0.0.1.35914 > 127.0.0.1.6379: Flags [F.], seq 45, ack 5407, win 1365, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 139 02:23:00.762875 IP 127.0.0.1.6379 > 127.0.0.1.35914: Flags [F.], seq 5407, ack 46, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 140 02:23:00.762898 IP 127.0.0.1.35914 > 127.0.0.1.6379: Flags [.], ack 5408, win 1365, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 141 02:23:00.762974 IP 127.0.0.1.35915 > 127.0.0.1.6379: Flags [S], seq 3952529642, win 43690, options [mss 65495,sackOK,TS val 2004405848 ecr 0,nop,wscale 7], length 0
+ 142 02:23:00.762987 IP 127.0.0.1.6379 > 127.0.0.1.35915: Flags [S.], seq 2079771045, ack 3952529643, win 43690, options [mss 65495,sackOK,TS val 2004405848 ecr 2004405848,nop,wscale 7], length 0
+ 143 02:23:00.763000 IP 127.0.0.1.35915 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 144 02:23:00.763037 IP 127.0.0.1.35915 > 127.0.0.1.6379: Flags [P.], seq 1:336, ack 1, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 335: RESP "MSET" "key:000000000525" "xxx" "key:000000000050" "xxx" "key:000000000416" "xxx" "key:000000000263" "xxx" "key:000000000941" "xxx" "key:000000000148" "xxx" "key:000000000739" "xxx" "key:000000000571" "xxx" "key:000000000974" "xxx" "key:000000000495" "xxx"
+ 145 02:23:00.763060 IP 127.0.0.1.6379 > 127.0.0.1.35915: Flags [.], ack 336, win 350, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 146 02:23:00.763159 IP 127.0.0.1.6379 > 127.0.0.1.35915: Flags [P.], seq 1:6, ack 336, win 350, options [nop,nop,TS val 2004405848 ecr 2004405848], length 5: RESP "OK"
+ 147 02:23:00.763180 IP 127.0.0.1.35915 > 127.0.0.1.6379: Flags [.], ack 6, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 148 02:23:00.763202 IP 127.0.0.1.35915 > 127.0.0.1.6379: Flags [F.], seq 336, ack 6, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 149 02:23:00.763238 IP 127.0.0.1.6379 > 127.0.0.1.35915: Flags [F.], seq 6, ack 337, win 350, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
+ 150 02:23:00.763263 IP 127.0.0.1.35915 > 127.0.0.1.6379: Flags [.], ack 7, win 342, options [nop,nop,TS val 2004405848 ecr 2004405848], length 0
diff --git a/tests/resp_1_benchmark.pcap b/tests/resp_1_benchmark.pcap
new file mode 100644
index 0000000..b746f1c
--- /dev/null
+++ b/tests/resp_1_benchmark.pcap
Binary files differ
diff --git a/tests/resp_2.out b/tests/resp_2.out
new file mode 100644
index 0000000..b6aed3e
--- /dev/null
+++ b/tests/resp_2.out
@@ -0,0 +1,14 @@
+ 1 02:23:25.886821 IP 127.0.0.1.35934 > 127.0.0.1.6379: Flags [S], seq 270581733, win 43690, options [mss 65495,sackOK,TS val 2004413385 ecr 0,nop,wscale 7], length 0
+ 2 02:23:25.886837 IP 127.0.0.1.6379 > 127.0.0.1.35934: Flags [S.], seq 3524975383, ack 270581734, win 43690, options [mss 65495,sackOK,TS val 2004413385 ecr 2004413385,nop,wscale 7], length 0
+ 3 02:23:25.886856 IP 127.0.0.1.35934 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 2004413385 ecr 2004413385], length 0
+ 4 02:23:26.881392 IP 127.0.0.1.35934 > 127.0.0.1.6379: Flags [P.], seq 1:13, ack 1, win 342, options [nop,nop,TS val 2004413683 ecr 2004413385], length 12: RESP "set test 1"
+ 5 02:23:26.881448 IP 127.0.0.1.6379 > 127.0.0.1.35934: Flags [.], ack 13, win 342, options [nop,nop,TS val 2004413683 ecr 2004413683], length 0
+ 6 02:23:26.881467 IP 127.0.0.1.35934 > 127.0.0.1.6379: Flags [P.], seq 13:157, ack 1, win 342, options [nop,nop,TS val 2004413683 ecr 2004413683], length 144: RESP "incr test" "set test2 redis" "get test2" "lpush test3 r" "lpush test3 e" "lpush test3 d" "lpush test3 i" "lpush test3 s" "lrange test3 0 -1" "del test4"
+ 7 02:23:26.881483 IP 127.0.0.1.6379 > 127.0.0.1.35934: Flags [.], ack 157, win 350, options [nop,nop,TS val 2004413683 ecr 2004413683], length 0
+ 8 02:23:26.881494 IP 127.0.0.1.35934 > 127.0.0.1.6379: Flags [P.], seq 157:168, ack 1, win 342, options [nop,nop,TS val 2004413683 ecr 2004413683], length 11: RESP "get test4"
+ 9 02:23:26.881506 IP 127.0.0.1.6379 > 127.0.0.1.35934: Flags [.], ack 168, win 350, options [nop,nop,TS val 2004413683 ecr 2004413683], length 0
+ 10 02:23:26.881629 IP 127.0.0.1.6379 > 127.0.0.1.35934: Flags [P.], seq 1:1289, ack 168, win 350, options [nop,nop,TS val 2004413683 ecr 2004413683], length 1288: RESP "OK" "2" "OK" "redis" "170" "171" "172" "173" "174" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "i" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "d" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "s" "i" "d" "e" "r" "i" "s" "i" "e" "r" "s" "i" "d" "e" "r" "0" null
+ 11 02:23:26.881658 IP 127.0.0.1.35934 > 127.0.0.1.6379: Flags [.], ack 1289, win 1365, options [nop,nop,TS val 2004413683 ecr 2004413683], length 0
+ 12 02:23:27.885057 IP 127.0.0.1.35934 > 127.0.0.1.6379: Flags [F.], seq 168, ack 1289, win 1365, options [nop,nop,TS val 2004413984 ecr 2004413683], length 0
+ 13 02:23:27.885157 IP 127.0.0.1.6379 > 127.0.0.1.35934: Flags [F.], seq 1289, ack 169, win 350, options [nop,nop,TS val 2004413984 ecr 2004413984], length 0
+ 14 02:23:27.885191 IP 127.0.0.1.35934 > 127.0.0.1.6379: Flags [.], ack 1290, win 1365, options [nop,nop,TS val 2004413984 ecr 2004413984], length 0
diff --git a/tests/resp_2_inline.pcap b/tests/resp_2_inline.pcap
new file mode 100644
index 0000000..e22b5f2
--- /dev/null
+++ b/tests/resp_2_inline.pcap
Binary files differ
diff --git a/tests/resp_3.out b/tests/resp_3.out
new file mode 100644
index 0000000..dbd8880
--- /dev/null
+++ b/tests/resp_3.out
@@ -0,0 +1,163 @@
+ 1 20:01:00.856800 IP 127.0.0.1.52759 > 127.0.0.1.6379: Flags [F.], seq 2169831382, ack 489972337, win 342, options [nop,nop,TS val 1132418034 ecr 1132417734], length 0
+ 2 20:01:00.856919 IP 127.0.0.1.6379 > 127.0.0.1.52759: Flags [F.], seq 1, ack 1, win 342, options [nop,nop,TS val 1132418034 ecr 1132418034], length 0
+ 3 20:01:00.856944 IP 127.0.0.1.52759 > 127.0.0.1.6379: Flags [.], ack 2, win 342, options [nop,nop,TS val 1132418034 ecr 1132418034], length 0
+ 4 20:01:00.864538 IP 127.0.0.1.52760 > 127.0.0.1.6379: Flags [S], seq 264055152, win 43690, options [mss 65495,sackOK,TS val 1132418037 ecr 0,nop,wscale 7], length 0
+ 5 20:01:00.864559 IP 127.0.0.1.6379 > 127.0.0.1.52760: Flags [S.], seq 4227148888, ack 264055153, win 43690, options [mss 65495,sackOK,TS val 1132418037 ecr 1132418037,nop,wscale 7], length 0
+ 6 20:01:00.864573 IP 127.0.0.1.52760 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132418037 ecr 1132418037], length 0
+ 7 20:01:00.864630 IP 127.0.0.1.52760 > 127.0.0.1.6379: Flags [P.], seq 1:7, ack 1, win 342, options [nop,nop,TS val 1132418037 ecr 1132418037], length 6: RESP empty
+ 8 20:01:00.864641 IP 127.0.0.1.6379 > 127.0.0.1.52760: Flags [.], ack 7, win 342, options [nop,nop,TS val 1132418037 ecr 1132418037], length 0
+ 9 20:01:00.864680 IP 127.0.0.1.6379 > 127.0.0.1.52760: Flags [P.], seq 1:28, ack 7, win 342, options [nop,nop,TS val 1132418037 ecr 1132418037], length 27: RESP "ERR unknown command '$0'"
+ 10 20:01:00.864690 IP 127.0.0.1.52760 > 127.0.0.1.6379: Flags [.], ack 28, win 342, options [nop,nop,TS val 1132418037 ecr 1132418037], length 0
+ 11 20:01:01.865454 IP 127.0.0.1.52760 > 127.0.0.1.6379: Flags [F.], seq 7, ack 28, win 342, options [nop,nop,TS val 1132418337 ecr 1132418037], length 0
+ 12 20:01:01.865587 IP 127.0.0.1.6379 > 127.0.0.1.52760: Flags [F.], seq 28, ack 8, win 342, options [nop,nop,TS val 1132418337 ecr 1132418337], length 0
+ 13 20:01:01.865615 IP 127.0.0.1.52760 > 127.0.0.1.6379: Flags [.], ack 29, win 342, options [nop,nop,TS val 1132418337 ecr 1132418337], length 0
+ 14 20:01:01.875422 IP 127.0.0.1.52763 > 127.0.0.1.6379: Flags [S], seq 4029577365, win 43690, options [mss 65495,sackOK,TS val 1132418340 ecr 0,nop,wscale 7], length 0
+ 15 20:01:01.875455 IP 127.0.0.1.6379 > 127.0.0.1.52763: Flags [S.], seq 365322185, ack 4029577366, win 43690, options [mss 65495,sackOK,TS val 1132418340 ecr 1132418340,nop,wscale 7], length 0
+ 16 20:01:01.875478 IP 127.0.0.1.52763 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132418340 ecr 1132418340], length 0
+ 17 20:01:01.875571 IP 127.0.0.1.52763 > 127.0.0.1.6379: Flags [P.], seq 1:4, ack 1, win 342, options [nop,nop,TS val 1132418340 ecr 1132418340], length 3: RESP ""
+ 18 20:01:01.875586 IP 127.0.0.1.6379 > 127.0.0.1.52763: Flags [.], ack 4, win 342, options [nop,nop,TS val 1132418340 ecr 1132418340], length 0
+ 19 20:01:01.875659 IP 127.0.0.1.6379 > 127.0.0.1.52763: Flags [P.], seq 1:27, ack 4, win 342, options [nop,nop,TS val 1132418340 ecr 1132418340], length 26: RESP "ERR unknown command '+'"
+ 20 20:01:01.875669 IP 127.0.0.1.52763 > 127.0.0.1.6379: Flags [.], ack 27, win 342, options [nop,nop,TS val 1132418340 ecr 1132418340], length 0
+ 21 20:01:02.876545 IP 127.0.0.1.52763 > 127.0.0.1.6379: Flags [F.], seq 4, ack 27, win 342, options [nop,nop,TS val 1132418640 ecr 1132418340], length 0
+ 22 20:01:02.876650 IP 127.0.0.1.6379 > 127.0.0.1.52763: Flags [F.], seq 27, ack 5, win 342, options [nop,nop,TS val 1132418640 ecr 1132418640], length 0
+ 23 20:01:02.876675 IP 127.0.0.1.52763 > 127.0.0.1.6379: Flags [.], ack 28, win 342, options [nop,nop,TS val 1132418640 ecr 1132418640], length 0
+ 24 20:01:02.881313 IP 127.0.0.1.52764 > 127.0.0.1.6379: Flags [S], seq 3994485171, win 43690, options [mss 65495,sackOK,TS val 1132418642 ecr 0,nop,wscale 7], length 0
+ 25 20:01:02.881334 IP 127.0.0.1.6379 > 127.0.0.1.52764: Flags [S.], seq 3089553256, ack 3994485172, win 43690, options [mss 65495,sackOK,TS val 1132418642 ecr 1132418642,nop,wscale 7], length 0
+ 26 20:01:02.881348 IP 127.0.0.1.52764 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132418642 ecr 1132418642], length 0
+ 27 20:01:02.881402 IP 127.0.0.1.52764 > 127.0.0.1.6379: Flags [P.], seq 1:4, ack 1, win 342, options [nop,nop,TS val 1132418642 ecr 1132418642], length 3: RESP ""
+ 28 20:01:02.881411 IP 127.0.0.1.6379 > 127.0.0.1.52764: Flags [.], ack 4, win 342, options [nop,nop,TS val 1132418642 ecr 1132418642], length 0
+ 29 20:01:02.881466 IP 127.0.0.1.6379 > 127.0.0.1.52764: Flags [P.], seq 1:27, ack 4, win 342, options [nop,nop,TS val 1132418642 ecr 1132418642], length 26: RESP "ERR unknown command '-'"
+ 30 20:01:02.881478 IP 127.0.0.1.52764 > 127.0.0.1.6379: Flags [.], ack 27, win 342, options [nop,nop,TS val 1132418642 ecr 1132418642], length 0
+ 31 20:01:03.882913 IP 127.0.0.1.52764 > 127.0.0.1.6379: Flags [F.], seq 4, ack 27, win 342, options [nop,nop,TS val 1132418942 ecr 1132418642], length 0
+ 32 20:01:03.883071 IP 127.0.0.1.6379 > 127.0.0.1.52764: Flags [F.], seq 27, ack 5, win 342, options [nop,nop,TS val 1132418942 ecr 1132418942], length 0
+ 33 20:01:03.883106 IP 127.0.0.1.52764 > 127.0.0.1.6379: Flags [.], ack 28, win 342, options [nop,nop,TS val 1132418942 ecr 1132418942], length 0
+ 34 20:01:03.890753 IP 127.0.0.1.52765 > 127.0.0.1.6379: Flags [S], seq 3235592213, win 43690, options [mss 65495,sackOK,TS val 1132418944 ecr 0,nop,wscale 7], length 0
+ 35 20:01:03.890793 IP 127.0.0.1.6379 > 127.0.0.1.52765: Flags [S.], seq 1213611847, ack 3235592214, win 43690, options [mss 65495,sackOK,TS val 1132418944 ecr 1132418944,nop,wscale 7], length 0
+ 36 20:01:03.890828 IP 127.0.0.1.52765 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132418944 ecr 1132418944], length 0
+ 37 20:01:03.890947 IP 127.0.0.1.52765 > 127.0.0.1.6379: Flags [P.], seq 1:4, ack 1, win 342, options [nop,nop,TS val 1132418944 ecr 1132418944], length 3: RESP ""
+ 38 20:01:03.890980 IP 127.0.0.1.6379 > 127.0.0.1.52765: Flags [.], ack 4, win 342, options [nop,nop,TS val 1132418944 ecr 1132418944], length 0
+ 39 20:01:03.891074 IP 127.0.0.1.6379 > 127.0.0.1.52765: Flags [P.], seq 1:27, ack 4, win 342, options [nop,nop,TS val 1132418945 ecr 1132418944], length 26: RESP "ERR unknown command ':'"
+ 40 20:01:03.891091 IP 127.0.0.1.52765 > 127.0.0.1.6379: Flags [.], ack 27, win 342, options [nop,nop,TS val 1132418945 ecr 1132418945], length 0
+ 41 20:01:04.890081 IP 127.0.0.1.52765 > 127.0.0.1.6379: Flags [F.], seq 4, ack 27, win 342, options [nop,nop,TS val 1132419244 ecr 1132418945], length 0
+ 42 20:01:04.890218 IP 127.0.0.1.6379 > 127.0.0.1.52765: Flags [F.], seq 27, ack 5, win 342, options [nop,nop,TS val 1132419244 ecr 1132419244], length 0
+ 43 20:01:04.890244 IP 127.0.0.1.52765 > 127.0.0.1.6379: Flags [.], ack 28, win 342, options [nop,nop,TS val 1132419244 ecr 1132419244], length 0
+ 44 20:01:04.898057 IP 127.0.0.1.52766 > 127.0.0.1.6379: Flags [S], seq 1161779316, win 43690, options [mss 65495,sackOK,TS val 1132419247 ecr 0,nop,wscale 7], length 0
+ 45 20:01:04.898079 IP 127.0.0.1.6379 > 127.0.0.1.52766: Flags [S.], seq 1206331179, ack 1161779317, win 43690, options [mss 65495,sackOK,TS val 1132419247 ecr 1132419247,nop,wscale 7], length 0
+ 46 20:01:04.898093 IP 127.0.0.1.52766 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132419247 ecr 1132419247], length 0
+ 47 20:01:04.898151 IP 127.0.0.1.52766 > 127.0.0.1.6379: Flags [P.], seq 1:89, ack 1, win 342, options [nop,nop,TS val 1132419247 ecr 1132419247], length 88: RESP "0392049029024920492304923049032940329402394092304932049230492034932094032940234902340"
+ 48 20:01:04.898161 IP 127.0.0.1.6379 > 127.0.0.1.52766: Flags [.], ack 89, win 342, options [nop,nop,TS val 1132419247 ecr 1132419247], length 0
+ 49 20:01:04.898226 IP 127.0.0.1.6379 > 127.0.0.1.52766: Flags [P.], seq 1:112, ack 89, win 342, options [nop,nop,TS val 1132419247 ecr 1132419247], length 111: RESP "ERR unknown command ':0392049029024920492304923049032940329402394092304932049230492034932094032940234902340'"
+ 50 20:01:04.898237 IP 127.0.0.1.52766 > 127.0.0.1.6379: Flags [.], ack 112, win 342, options [nop,nop,TS val 1132419247 ecr 1132419247], length 0
+ 51 20:01:05.898747 IP 127.0.0.1.52766 > 127.0.0.1.6379: Flags [F.], seq 89, ack 112, win 342, options [nop,nop,TS val 1132419547 ecr 1132419247], length 0
+ 52 20:01:05.898853 IP 127.0.0.1.6379 > 127.0.0.1.52766: Flags [F.], seq 112, ack 90, win 342, options [nop,nop,TS val 1132419547 ecr 1132419547], length 0
+ 53 20:01:05.898878 IP 127.0.0.1.52766 > 127.0.0.1.6379: Flags [.], ack 113, win 342, options [nop,nop,TS val 1132419547 ecr 1132419547], length 0
+ 54 20:01:05.906739 IP 127.0.0.1.52767 > 127.0.0.1.6379: Flags [S], seq 3453687710, win 43690, options [mss 65495,sackOK,TS val 1132419549 ecr 0,nop,wscale 7], length 0
+ 55 20:01:05.906767 IP 127.0.0.1.6379 > 127.0.0.1.52767: Flags [S.], seq 4076862539, ack 3453687711, win 43690, options [mss 65495,sackOK,TS val 1132419549 ecr 1132419549,nop,wscale 7], length 0
+ 56 20:01:05.906784 IP 127.0.0.1.52767 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132419549 ecr 1132419549], length 0
+ 57 20:01:05.906843 IP 127.0.0.1.52767 > 127.0.0.1.6379: Flags [P.], seq 1:39, ack 1, win 342, options [nop,nop,TS val 1132419549 ecr 1132419549], length 38: RESP length too large
+ 58 20:01:05.906856 IP 127.0.0.1.6379 > 127.0.0.1.52767: Flags [.], ack 39, win 342, options [nop,nop,TS val 1132419549 ecr 1132419549], length 0
+ 59 20:01:05.906935 IP 127.0.0.1.6379 > 127.0.0.1.52767: Flags [P.], seq 1:48, ack 39, win 342, options [nop,nop,TS val 1132419549 ecr 1132419549], length 47: RESP "ERR Protocol error: invalid multibulk length"
+ 60 20:01:05.906947 IP 127.0.0.1.52767 > 127.0.0.1.6379: Flags [.], ack 48, win 342, options [nop,nop,TS val 1132419549 ecr 1132419549], length 0
+ 61 20:01:05.906977 IP 127.0.0.1.6379 > 127.0.0.1.52767: Flags [F.], seq 48, ack 39, win 342, options [nop,nop,TS val 1132419549 ecr 1132419549], length 0
+ 62 20:01:05.907017 IP 127.0.0.1.52767 > 127.0.0.1.6379: Flags [F.], seq 39, ack 49, win 342, options [nop,nop,TS val 1132419549 ecr 1132419549], length 0
+ 63 20:01:05.907028 IP 127.0.0.1.6379 > 127.0.0.1.52767: Flags [.], ack 40, win 342, options [nop,nop,TS val 1132419549 ecr 1132419549], length 0
+ 64 20:01:06.915271 IP 127.0.0.1.52768 > 127.0.0.1.6379: Flags [S], seq 3109305893, win 43690, options [mss 65495,sackOK,TS val 1132419852 ecr 0,nop,wscale 7], length 0
+ 65 20:01:06.915304 IP 127.0.0.1.6379 > 127.0.0.1.52768: Flags [S.], seq 4202059680, ack 3109305894, win 43690, options [mss 65495,sackOK,TS val 1132419852 ecr 1132419852,nop,wscale 7], length 0
+ 66 20:01:06.915326 IP 127.0.0.1.52768 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132419852 ecr 1132419852], length 0
+ 67 20:01:06.915390 IP 127.0.0.1.52768 > 127.0.0.1.6379: Flags [P.], seq 1:7, ack 1, win 342, options [nop,nop,TS val 1132419852 ecr 1132419852], length 6: RESP length negative and not -1
+ 68 20:01:06.915401 IP 127.0.0.1.6379 > 127.0.0.1.52768: Flags [.], ack 7, win 342, options [nop,nop,TS val 1132419852 ecr 1132419852], length 0
+ 69 20:01:07.915368 IP 127.0.0.1.52768 > 127.0.0.1.6379: Flags [F.], seq 7, ack 1, win 342, options [nop,nop,TS val 1132420152 ecr 1132419852], length 0
+ 70 20:01:07.915456 IP 127.0.0.1.6379 > 127.0.0.1.52768: Flags [F.], seq 1, ack 8, win 342, options [nop,nop,TS val 1132420152 ecr 1132420152], length 0
+ 71 20:01:07.915479 IP 127.0.0.1.52768 > 127.0.0.1.6379: Flags [.], ack 2, win 342, options [nop,nop,TS val 1132420152 ecr 1132420152], length 0
+ 72 20:01:07.922920 IP 127.0.0.1.52769 > 127.0.0.1.6379: Flags [S], seq 4072438166, win 43690, options [mss 65495,sackOK,TS val 1132420154 ecr 0,nop,wscale 7], length 0
+ 73 20:01:07.922939 IP 127.0.0.1.6379 > 127.0.0.1.52769: Flags [S.], seq 156730490, ack 4072438167, win 43690, options [mss 65495,sackOK,TS val 1132420154 ecr 1132420154,nop,wscale 7], length 0
+ 74 20:01:07.922954 IP 127.0.0.1.52769 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132420154 ecr 1132420154], length 0
+ 75 20:01:07.923009 IP 127.0.0.1.52769 > 127.0.0.1.6379: Flags [P.], seq 1:11, ack 1, win 342, options [nop,nop,TS val 1132420154 ecr 1132420154], length 10: RESP length negative and not -1 "hi"
+ 76 20:01:07.923019 IP 127.0.0.1.6379 > 127.0.0.1.52769: Flags [.], ack 11, win 342, options [nop,nop,TS val 1132420154 ecr 1132420154], length 0
+ 77 20:01:07.923065 IP 127.0.0.1.6379 > 127.0.0.1.52769: Flags [P.], seq 1:57, ack 11, win 342, options [nop,nop,TS val 1132420154 ecr 1132420154], length 56: RESP "ERR unknown command '$-20'" "ERR unknown command 'hi'"
+ 78 20:01:07.923076 IP 127.0.0.1.52769 > 127.0.0.1.6379: Flags [.], ack 57, win 342, options [nop,nop,TS val 1132420154 ecr 1132420154], length 0
+ 79 20:01:08.923657 IP 127.0.0.1.52769 > 127.0.0.1.6379: Flags [F.], seq 11, ack 57, win 342, options [nop,nop,TS val 1132420454 ecr 1132420154], length 0
+ 80 20:01:08.923760 IP 127.0.0.1.6379 > 127.0.0.1.52769: Flags [F.], seq 57, ack 12, win 342, options [nop,nop,TS val 1132420454 ecr 1132420454], length 0
+ 81 20:01:08.923793 IP 127.0.0.1.52769 > 127.0.0.1.6379: Flags [.], ack 58, win 342, options [nop,nop,TS val 1132420454 ecr 1132420454], length 0
+ 82 20:01:08.932823 IP 127.0.0.1.52770 > 127.0.0.1.6379: Flags [S], seq 374549345, win 43690, options [mss 65495,sackOK,TS val 1132420457 ecr 0,nop,wscale 7], length 0
+ 83 20:01:08.932841 IP 127.0.0.1.6379 > 127.0.0.1.52770: Flags [S.], seq 1146630634, ack 374549346, win 43690, options [mss 65495,sackOK,TS val 1132420457 ecr 1132420457,nop,wscale 7], length 0
+ 84 20:01:08.932863 IP 127.0.0.1.52770 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132420457 ecr 1132420457], length 0
+ 85 20:01:08.932925 IP 127.0.0.1.52770 > 127.0.0.1.6379: Flags [P.], seq 1:7, ack 1, win 342, options [nop,nop,TS val 1132420457 ecr 1132420457], length 6: RESP [|resp]
+ 86 20:01:08.932935 IP 127.0.0.1.6379 > 127.0.0.1.52770: Flags [.], ack 7, win 342, options [nop,nop,TS val 1132420457 ecr 1132420457], length 0
+ 87 20:01:09.933192 IP 127.0.0.1.52770 > 127.0.0.1.6379: Flags [F.], seq 7, ack 1, win 342, options [nop,nop,TS val 1132420757 ecr 1132420457], length 0
+ 88 20:01:09.933360 IP 127.0.0.1.6379 > 127.0.0.1.52770: Flags [F.], seq 1, ack 8, win 342, options [nop,nop,TS val 1132420757 ecr 1132420757], length 0
+ 89 20:01:09.933424 IP 127.0.0.1.52770 > 127.0.0.1.6379: Flags [.], ack 2, win 342, options [nop,nop,TS val 1132420757 ecr 1132420757], length 0
+ 90 20:01:09.942037 IP 127.0.0.1.52771 > 127.0.0.1.6379: Flags [S], seq 2541241523, win 43690, options [mss 65495,sackOK,TS val 1132420760 ecr 0,nop,wscale 7], length 0
+ 91 20:01:09.942090 IP 127.0.0.1.6379 > 127.0.0.1.52771: Flags [S.], seq 3482468888, ack 2541241524, win 43690, options [mss 65495,sackOK,TS val 1132420760 ecr 1132420760,nop,wscale 7], length 0
+ 92 20:01:09.942216 IP 127.0.0.1.52771 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132420760 ecr 1132420760], length 0
+ 93 20:01:09.942332 IP 127.0.0.1.52771 > 127.0.0.1.6379: Flags [P.], seq 1:7, ack 1, win 342, options [nop,nop,TS val 1132420760 ecr 1132420760], length 6: RESP [|resp]
+ 94 20:01:09.942342 IP 127.0.0.1.6379 > 127.0.0.1.52771: Flags [.], ack 7, win 342, options [nop,nop,TS val 1132420760 ecr 1132420760], length 0
+ 95 20:01:10.939178 IP 127.0.0.1.52771 > 127.0.0.1.6379: Flags [F.], seq 7, ack 1, win 342, options [nop,nop,TS val 1132421059 ecr 1132420760], length 0
+ 96 20:01:10.939290 IP 127.0.0.1.6379 > 127.0.0.1.52771: Flags [F.], seq 1, ack 8, win 342, options [nop,nop,TS val 1132421059 ecr 1132421059], length 0
+ 97 20:01:10.939308 IP 127.0.0.1.52771 > 127.0.0.1.6379: Flags [.], ack 2, win 342, options [nop,nop,TS val 1132421059 ecr 1132421059], length 0
+ 98 20:01:10.943295 IP 127.0.0.1.52772 > 127.0.0.1.6379: Flags [S], seq 3376019145, win 43690, options [mss 65495,sackOK,TS val 1132421060 ecr 0,nop,wscale 7], length 0
+ 99 20:01:10.943313 IP 127.0.0.1.6379 > 127.0.0.1.52772: Flags [S.], seq 2449011991, ack 3376019146, win 43690, options [mss 65495,sackOK,TS val 1132421060 ecr 1132421060,nop,wscale 7], length 0
+ 100 20:01:10.943328 IP 127.0.0.1.52772 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132421060 ecr 1132421060], length 0
+ 101 20:01:10.943393 IP 127.0.0.1.52772 > 127.0.0.1.6379: Flags [P.], seq 1:7, ack 1, win 342, options [nop,nop,TS val 1132421060 ecr 1132421060], length 6: RESP [|resp]
+ 102 20:01:10.943402 IP 127.0.0.1.6379 > 127.0.0.1.52772: Flags [.], ack 7, win 342, options [nop,nop,TS val 1132421060 ecr 1132421060], length 0
+ 103 20:01:11.943627 IP 127.0.0.1.52772 > 127.0.0.1.6379: Flags [F.], seq 7, ack 1, win 342, options [nop,nop,TS val 1132421360 ecr 1132421060], length 0
+ 104 20:01:11.943780 IP 127.0.0.1.6379 > 127.0.0.1.52772: Flags [F.], seq 1, ack 8, win 342, options [nop,nop,TS val 1132421360 ecr 1132421360], length 0
+ 105 20:01:11.943820 IP 127.0.0.1.52772 > 127.0.0.1.6379: Flags [.], ack 2, win 342, options [nop,nop,TS val 1132421360 ecr 1132421360], length 0
+ 106 20:01:11.952316 IP 127.0.0.1.52773 > 127.0.0.1.6379: Flags [S], seq 3567970909, win 43690, options [mss 65495,sackOK,TS val 1132421363 ecr 0,nop,wscale 7], length 0
+ 107 20:01:11.952336 IP 127.0.0.1.6379 > 127.0.0.1.52773: Flags [S.], seq 3366370739, ack 3567970910, win 43690, options [mss 65495,sackOK,TS val 1132421363 ecr 1132421363,nop,wscale 7], length 0
+ 108 20:01:11.952351 IP 127.0.0.1.52773 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132421363 ecr 1132421363], length 0
+ 109 20:01:11.952429 IP 127.0.0.1.52773 > 127.0.0.1.6379: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1132421363 ecr 1132421363], length 5: RESP null
+ 110 20:01:11.952440 IP 127.0.0.1.6379 > 127.0.0.1.52773: Flags [.], ack 6, win 342, options [nop,nop,TS val 1132421363 ecr 1132421363], length 0
+ 111 20:01:12.952173 IP 127.0.0.1.52773 > 127.0.0.1.6379: Flags [F.], seq 6, ack 1, win 342, options [nop,nop,TS val 1132421663 ecr 1132421363], length 0
+ 112 20:01:12.952308 IP 127.0.0.1.6379 > 127.0.0.1.52773: Flags [F.], seq 1, ack 7, win 342, options [nop,nop,TS val 1132421663 ecr 1132421663], length 0
+ 113 20:01:12.952341 IP 127.0.0.1.52773 > 127.0.0.1.6379: Flags [.], ack 2, win 342, options [nop,nop,TS val 1132421663 ecr 1132421663], length 0
+ 114 20:01:12.960071 IP 127.0.0.1.52775 > 127.0.0.1.6379: Flags [S], seq 3374943379, win 43690, options [mss 65495,sackOK,TS val 1132421665 ecr 0,nop,wscale 7], length 0
+ 115 20:01:12.960097 IP 127.0.0.1.6379 > 127.0.0.1.52775: Flags [S.], seq 363870070, ack 3374943380, win 43690, options [mss 65495,sackOK,TS val 1132421665 ecr 1132421665,nop,wscale 7], length 0
+ 116 20:01:12.960118 IP 127.0.0.1.52775 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132421665 ecr 1132421665], length 0
+ 117 20:01:12.960200 IP 127.0.0.1.52775 > 127.0.0.1.6379: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1132421665 ecr 1132421665], length 5: RESP null
+ 118 20:01:12.960222 IP 127.0.0.1.6379 > 127.0.0.1.52775: Flags [.], ack 6, win 342, options [nop,nop,TS val 1132421665 ecr 1132421665], length 0
+ 119 20:01:12.960265 IP 127.0.0.1.6379 > 127.0.0.1.52775: Flags [P.], seq 1:29, ack 6, win 342, options [nop,nop,TS val 1132421665 ecr 1132421665], length 28: RESP "ERR unknown command '$-1'"
+ 120 20:01:12.960276 IP 127.0.0.1.52775 > 127.0.0.1.6379: Flags [.], ack 29, win 342, options [nop,nop,TS val 1132421665 ecr 1132421665], length 0
+ 121 20:01:13.960353 IP 127.0.0.1.52775 > 127.0.0.1.6379: Flags [F.], seq 6, ack 29, win 342, options [nop,nop,TS val 1132421965 ecr 1132421665], length 0
+ 122 20:01:13.960518 IP 127.0.0.1.6379 > 127.0.0.1.52775: Flags [F.], seq 29, ack 7, win 342, options [nop,nop,TS val 1132421965 ecr 1132421965], length 0
+ 123 20:01:13.960558 IP 127.0.0.1.52775 > 127.0.0.1.6379: Flags [.], ack 30, win 342, options [nop,nop,TS val 1132421965 ecr 1132421965], length 0
+ 124 20:01:13.973676 IP 127.0.0.1.52776 > 127.0.0.1.6379: Flags [S], seq 2780863902, win 43690, options [mss 65495,sackOK,TS val 1132421969 ecr 0,nop,wscale 7], length 0
+ 125 20:01:13.973700 IP 127.0.0.1.6379 > 127.0.0.1.52776: Flags [S.], seq 2789065616, ack 2780863903, win 43690, options [mss 65495,sackOK,TS val 1132421969 ecr 1132421969,nop,wscale 7], length 0
+ 126 20:01:13.973719 IP 127.0.0.1.52776 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132421969 ecr 1132421969], length 0
+ 127 20:01:13.973782 IP 127.0.0.1.52776 > 127.0.0.1.6379: Flags [P.], seq 1:64, ack 1, win 342, options [nop,nop,TS val 1132421969 ecr 1132421969], length 63: RESP "INCR" "z" "INCR" "z" "INCR" "z"
+ 128 20:01:13.973791 IP 127.0.0.1.6379 > 127.0.0.1.52776: Flags [.], ack 64, win 342, options [nop,nop,TS val 1132421969 ecr 1132421969], length 0
+ 129 20:01:13.974013 IP 127.0.0.1.6379 > 127.0.0.1.52776: Flags [P.], seq 1:16, ack 64, win 342, options [nop,nop,TS val 1132421969 ecr 1132421969], length 15: RESP "69" "70" "71"
+ 130 20:01:13.974039 IP 127.0.0.1.52776 > 127.0.0.1.6379: Flags [.], ack 16, win 342, options [nop,nop,TS val 1132421969 ecr 1132421969], length 0
+ 131 20:01:14.975611 IP 127.0.0.1.52776 > 127.0.0.1.6379: Flags [F.], seq 64, ack 16, win 342, options [nop,nop,TS val 1132422270 ecr 1132421969], length 0
+ 132 20:01:14.975736 IP 127.0.0.1.6379 > 127.0.0.1.52776: Flags [F.], seq 16, ack 65, win 342, options [nop,nop,TS val 1132422270 ecr 1132422270], length 0
+ 133 20:01:14.975759 IP 127.0.0.1.52776 > 127.0.0.1.6379: Flags [.], ack 17, win 342, options [nop,nop,TS val 1132422270 ecr 1132422270], length 0
+ 134 20:01:14.979830 IP 127.0.0.1.52777 > 127.0.0.1.6379: Flags [S], seq 357339476, win 43690, options [mss 65495,sackOK,TS val 1132422271 ecr 0,nop,wscale 7], length 0
+ 135 20:01:14.979857 IP 127.0.0.1.6379 > 127.0.0.1.52777: Flags [S.], seq 3123925211, ack 357339477, win 43690, options [mss 65495,sackOK,TS val 1132422271 ecr 1132422271,nop,wscale 7], length 0
+ 136 20:01:14.979875 IP 127.0.0.1.52777 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132422271 ecr 1132422271], length 0
+ 137 20:01:14.979940 IP 127.0.0.1.52777 > 127.0.0.1.6379: Flags [P.], seq 1:21, ack 1, win 342, options [nop,nop,TS val 1132422271 ecr 1132422271], length 20: RESP "PING" "PING" "PING"
+ 138 20:01:14.979953 IP 127.0.0.1.6379 > 127.0.0.1.52777: Flags [.], ack 21, win 342, options [nop,nop,TS val 1132422271 ecr 1132422271], length 0
+ 139 20:01:14.980005 IP 127.0.0.1.6379 > 127.0.0.1.52777: Flags [P.], seq 1:22, ack 21, win 342, options [nop,nop,TS val 1132422271 ecr 1132422271], length 21: RESP "PONG" "PONG" "PONG"
+ 140 20:01:14.980016 IP 127.0.0.1.52777 > 127.0.0.1.6379: Flags [.], ack 22, win 342, options [nop,nop,TS val 1132422271 ecr 1132422271], length 0
+ 141 20:01:15.980290 IP 127.0.0.1.52777 > 127.0.0.1.6379: Flags [F.], seq 21, ack 22, win 342, options [nop,nop,TS val 1132422571 ecr 1132422271], length 0
+ 142 20:01:15.980435 IP 127.0.0.1.6379 > 127.0.0.1.52777: Flags [F.], seq 22, ack 22, win 342, options [nop,nop,TS val 1132422571 ecr 1132422571], length 0
+ 143 20:01:15.980477 IP 127.0.0.1.52777 > 127.0.0.1.6379: Flags [.], ack 23, win 342, options [nop,nop,TS val 1132422571 ecr 1132422571], length 0
+ 144 20:01:15.984847 IP 127.0.0.1.52778 > 127.0.0.1.6379: Flags [S], seq 2069568772, win 43690, options [mss 65495,sackOK,TS val 1132422573 ecr 0,nop,wscale 7], length 0
+ 145 20:01:15.984871 IP 127.0.0.1.6379 > 127.0.0.1.52778: Flags [S.], seq 1085796497, ack 2069568773, win 43690, options [mss 65495,sackOK,TS val 1132422573 ecr 1132422573,nop,wscale 7], length 0
+ 146 20:01:15.984890 IP 127.0.0.1.52778 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132422573 ecr 1132422573], length 0
+ 147 20:01:15.984949 IP 127.0.0.1.52778 > 127.0.0.1.6379: Flags [P.], seq 1:21, ack 1, win 342, options [nop,nop,TS val 1132422573 ecr 1132422573], length 20: RESP "PING" "PING" "PING"
+ 148 20:01:15.984958 IP 127.0.0.1.6379 > 127.0.0.1.52778: Flags [.], ack 21, win 342, options [nop,nop,TS val 1132422573 ecr 1132422573], length 0
+ 149 20:01:15.985039 IP 127.0.0.1.6379 > 127.0.0.1.52778: Flags [P.], seq 1:22, ack 21, win 342, options [nop,nop,TS val 1132422573 ecr 1132422573], length 21: RESP "PONG" "PONG" "PONG"
+ 150 20:01:15.985054 IP 127.0.0.1.52778 > 127.0.0.1.6379: Flags [.], ack 22, win 342, options [nop,nop,TS val 1132422573 ecr 1132422573], length 0
+ 151 20:01:16.985738 IP 127.0.0.1.52778 > 127.0.0.1.6379: Flags [F.], seq 21, ack 22, win 342, options [nop,nop,TS val 1132422873 ecr 1132422573], length 0
+ 152 20:01:16.985950 IP 127.0.0.1.6379 > 127.0.0.1.52778: Flags [F.], seq 22, ack 22, win 342, options [nop,nop,TS val 1132422873 ecr 1132422873], length 0
+ 153 20:01:16.986005 IP 127.0.0.1.52778 > 127.0.0.1.6379: Flags [.], ack 23, win 342, options [nop,nop,TS val 1132422873 ecr 1132422873], length 0
+ 154 20:01:16.993564 IP 127.0.0.1.52779 > 127.0.0.1.6379: Flags [S], seq 1578479120, win 43690, options [mss 65495,sackOK,TS val 1132422875 ecr 0,nop,wscale 7], length 0
+ 155 20:01:16.993605 IP 127.0.0.1.6379 > 127.0.0.1.52779: Flags [S.], seq 2529957046, ack 1578479121, win 43690, options [mss 65495,sackOK,TS val 1132422875 ecr 1132422875,nop,wscale 7], length 0
+ 156 20:01:16.993635 IP 127.0.0.1.52779 > 127.0.0.1.6379: Flags [.], ack 1, win 342, options [nop,nop,TS val 1132422875 ecr 1132422875], length 0
+ 157 20:01:16.993754 IP 127.0.0.1.52779 > 127.0.0.1.6379: Flags [P.], seq 1:24, ack 1, win 342, options [nop,nop,TS val 1132422875 ecr 1132422875], length 23: RESP "PING" "PING" "PING"
+ 158 20:01:16.993773 IP 127.0.0.1.6379 > 127.0.0.1.52779: Flags [.], ack 24, win 342, options [nop,nop,TS val 1132422875 ecr 1132422875], length 0
+ 159 20:01:16.993951 IP 127.0.0.1.6379 > 127.0.0.1.52779: Flags [P.], seq 1:22, ack 24, win 342, options [nop,nop,TS val 1132422875 ecr 1132422875], length 21: RESP "PONG" "PONG" "PONG"
+ 160 20:01:16.993980 IP 127.0.0.1.52779 > 127.0.0.1.6379: Flags [.], ack 22, win 342, options [nop,nop,TS val 1132422875 ecr 1132422875], length 0
+ 161 20:01:17.993748 IP 127.0.0.1.52779 > 127.0.0.1.6379: Flags [F.], seq 24, ack 22, win 342, options [nop,nop,TS val 1132423175 ecr 1132422875], length 0
+ 162 20:01:17.993837 IP 127.0.0.1.6379 > 127.0.0.1.52779: Flags [F.], seq 22, ack 25, win 342, options [nop,nop,TS val 1132423175 ecr 1132423175], length 0
+ 163 20:01:17.993863 IP 127.0.0.1.52779 > 127.0.0.1.6379: Flags [.], ack 23, win 342, options [nop,nop,TS val 1132423175 ecr 1132423175], length 0
diff --git a/tests/resp_3_malicious.pcap b/tests/resp_3_malicious.pcap
new file mode 100644
index 0000000..02cd53f
--- /dev/null
+++ b/tests/resp_3_malicious.pcap
Binary files differ
diff --git a/tests/resp_4_infiniteloop.out b/tests/resp_4_infiniteloop.out
new file mode 100644
index 0000000..d413373
--- /dev/null
+++ b/tests/resp_4_infiniteloop.out
@@ -0,0 +1,2 @@
+ 1 00:00:00.000000 00:50:56:b4:08:69 > 00:50:56:b4:4c:2a, ethertype IPv4 (0x0800), length 920: (tos 0x0, ttl 64, id 27576, offset 0, flags [DF], proto TCP (6), length 906)
+ 172.16.8.77.33926 > 172.16.8.149.6379: Flags [P.], cksum 0xa129 (incorrect -> 0xaaa0), seq 3839414413:3839415267, ack 2526552240, win 229, options [nop,nop,TS val 2407226 ecr 24894817], length 854: RESP length negative and not -1 invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid "4" "EVAL" invalid invalid invalid invalid "GKMbNZq^@0" "stuubt.pack('<ivdMFG4294967245',^V ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''319', 2',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',',', '-1494241318543828858')'L')N))'r')')~D')')E)')')')')')')')'l')')')')')'M-`'o')')'Pp)U)" invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid invalid "1" [|resp]
diff --git a/tests/resp_4_infiniteloop.pcapng b/tests/resp_4_infiniteloop.pcapng
new file mode 100644
index 0000000..98a79bf
--- /dev/null
+++ b/tests/resp_4_infiniteloop.pcapng
Binary files differ
diff --git a/tests/ripv1v2.out b/tests/ripv1v2.out
new file mode 100644
index 0000000..f020c06
--- /dev/null
+++ b/tests/ripv1v2.out
@@ -0,0 +1,16 @@
+ 1 16:10:13.779911 IP (tos 0xc0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 52)
+ 10.0.0.20.520 > 10.0.0.255.520:
+ RIPv1, Request, length: 24, routes: 1
+ AFI 0, 0.0.0.0, metric: 16
+ 2 16:10:17.778296 IP (tos 0xc0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 52)
+ 10.0.0.20.520 > 10.0.0.255.520:
+ RIPv1, Response, length: 24, routes: 1
+ 10.70.178.0, metric: 1
+ 3 16:10:26.689006 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 52)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Request, length: 24, routes: 1 or less
+ AFI 0, 0.0.0.0/0 , tag 0x0000, metric: 16, next-hop: self
+ 4 16:10:30.688338 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 52)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Response, length: 24, routes: 1 or less
+ AFI IPv4, 10.70.178.0/24, tag 0x0000, metric: 1, next-hop: self
diff --git a/tests/ripv1v2.pcap b/tests/ripv1v2.pcap
new file mode 100644
index 0000000..b98056f
--- /dev/null
+++ b/tests/ripv1v2.pcap
Binary files differ
diff --git a/tests/ripv2-invalid-length.out b/tests/ripv2-invalid-length.out
new file mode 100644
index 0000000..a0c9e3d
--- /dev/null
+++ b/tests/ripv2-invalid-length.out
@@ -0,0 +1,12 @@
+ 1 08:36:15.227124 IP (tos 0xc0, ttl 2, id 0, offset 0, flags [none], proto UDP (17), length 192)
+ 10.7.56.254.520 > 224.0.0.9.520:
+ RIPv2, Response, length: 160, routes: 8 or less
+ AFI IPv4, 10.7.0.0/24, tag 0x0000, metric: 1, next-hop: self
+ AFI IPv4, 10.7.41.0/24, tag 0x0000, metric: 1, next-hop: self
+ AFI IPv4, 10.7.51.0/24, tag 0x0000, metric: 1, next-hop: self
+ AFI IPv4, 10.7.52.0/25, tag 0x0000, metric: 1, next-hop: self
+ AFI IPv4, 10.7.53.0/24, tag 0x0000, metric: 1, next-hop: self
+ AFI IPv4, 10.7.57.0/24, tag 0x0000, metric: 268435457, next-hop: self
+ AFI IPv4, 10.7.61.0/24, tag 0x0000, metric: 1, next-hop: self
+ AFI Unknown (37)
+ 0x0000: 5100 0000 ff00 0000 0000 0000 0000 0002 [remaining entries length 16 < 20] (invalid)
diff --git a/tests/ripv2-invalid-length.pcap b/tests/ripv2-invalid-length.pcap
new file mode 100644
index 0000000..db475f2
--- /dev/null
+++ b/tests/ripv2-invalid-length.pcap
Binary files differ
diff --git a/tests/ripv2_auth.out b/tests/ripv2_auth.out
new file mode 100644
index 0000000..acdb106
--- /dev/null
+++ b/tests/ripv2_auth.out
@@ -0,0 +1,94 @@
+ 1 15:47:19.967128 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 72)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Request, length: 44, routes: 2 or less
+ Simple Text Authentication data: abcdefghijklmnop
+ AFI 0, 0.0.0.0/0 , tag 0x0000, metric: 16, next-hop: self
+ 2 15:47:23.965209 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 72)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Response, length: 44, routes: 2 or less
+ Simple Text Authentication data: abcdefghijklmnop
+ AFI IPv4, 10.70.178.0/24, tag 0x0000, metric: 1, next-hop: self
+ 3 15:48:08.852130 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 92)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Request, length: 64, routes: 3 or less
+ Auth header: Packet Len 44, Key-ID 45, Auth Data Len 16, SeqNo 1339429688, MBZ 0, MBZ 0
+ AFI 0, 0.0.0.0/0 , tag 0x0000, metric: 16, next-hop: self
+ Auth trailer:
+ 0x0000: a2fe c865 f120 8808 2326 1369 d6c2 3593
+ 4 15:48:12.852747 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 92)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Response, length: 64, routes: 3 or less
+ Auth header: Packet Len 44, Key-ID 45, Auth Data Len 16, SeqNo 1339429692, MBZ 0, MBZ 0
+ AFI IPv4, 10.70.178.0/24, tag 0x0000, metric: 1, next-hop: self
+ Auth trailer:
+ 0x0000: 6d21 5dd5 6d27 a6f4 8a51 e2c2 fcc2 af0f
+ 5 15:48:33.122394 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 96)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Request, length: 68, routes: 3 or less
+ Auth header: Packet Len 44, Key-ID 45, Auth Data Len 20, SeqNo 1339429713, MBZ 0, MBZ 0
+ AFI 0, 0.0.0.0/0 , tag 0x0000, metric: 16, next-hop: self
+ Auth trailer:
+ 0x0000: 728c 5b16 9a1b 3913 0021 a73f 7a73 bc1b
+ 0x0010: eee0 e6a2
+ 6 15:48:36.121027 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 96)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Response, length: 68, routes: 3 or less
+ Auth header: Packet Len 44, Key-ID 45, Auth Data Len 20, SeqNo 1339429716, MBZ 0, MBZ 0
+ AFI IPv4, 10.70.178.0/24, tag 0x0000, metric: 1, next-hop: self
+ Auth trailer:
+ 0x0000: 375c 8a50 f77f 543b 2425 a695 a27d 6b95
+ 0x0010: 3375 fc89
+ 7 15:49:00.891527 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 108)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Request, length: 80, routes: 4 or less
+ Auth header: Packet Len 44, Key-ID 45, Auth Data Len 32, SeqNo 1339429740, MBZ 0, MBZ 0
+ AFI 0, 0.0.0.0/0 , tag 0x0000, metric: 16, next-hop: self
+ Auth trailer:
+ 0x0000: 4ae5 fb9c 9702 03b8 5a93 812d 0258 6740
+ 0x0010: 451a bd20 cee4 8a3d a466 17a0 e550 5b4b
+ 8 15:49:04.890122 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 108)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Response, length: 80, routes: 4 or less
+ Auth header: Packet Len 44, Key-ID 45, Auth Data Len 32, SeqNo 1339429744, MBZ 0, MBZ 0
+ AFI IPv4, 10.70.178.0/24, tag 0x0000, metric: 1, next-hop: self
+ Auth trailer:
+ 0x0000: 3965 b755 535a 3375 e83a 973c 60c9 1693
+ 0x0010: f2de 8132 9e87 3f7f b763 3cb0 b3dc 3ba2
+ 9 15:49:21.297810 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 124)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Request, length: 96, routes: 4 or less
+ Auth header: Packet Len 44, Key-ID 45, Auth Data Len 48, SeqNo 1339429761, MBZ 0, MBZ 0
+ AFI 0, 0.0.0.0/0 , tag 0x0000, metric: 16, next-hop: self
+ Auth trailer:
+ 0x0000: a1f2 20f6 6f72 f45b e8e0 291f 2322 a198
+ 0x0010: 1b6b 67bc 9279 7d3b 8e05 c683 8b7e 05bc
+ 0x0020: 230c abc8 1470 8e30 5470 fb27 6fe3 4506
+ 10 15:49:25.295223 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 124)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Response, length: 96, routes: 4 or less
+ Auth header: Packet Len 44, Key-ID 45, Auth Data Len 48, SeqNo 1339429765, MBZ 0, MBZ 0
+ AFI IPv4, 10.70.178.0/24, tag 0x0000, metric: 1, next-hop: self
+ Auth trailer:
+ 0x0000: 64de 1dec 3632 e210 0258 2404 0b32 a947
+ 0x0010: aa86 59a1 fef3 9248 3115 c266 0386 f183
+ 0x0020: 4f31 1df0 0681 e1cc ba10 b4c1 7795 9773
+ 11 15:49:41.893546 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 140)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Request, length: 112, routes: 5 or less
+ Auth header: Packet Len 44, Key-ID 45, Auth Data Len 64, SeqNo 1339429781, MBZ 0, MBZ 0
+ AFI 0, 0.0.0.0/0 , tag 0x0000, metric: 16, next-hop: self
+ Auth trailer:
+ 0x0000: 73ad b6e3 5fe6 07bd 0bc5 ca25 41cc 63ec
+ 0x0010: bd06 55b1 77a4 e223 ef52 8ea2 7480 e39c
+ 0x0020: ee51 96bd 4e35 8cb7 f185 ba49 9892 e683
+ 0x0030: e756 788d aa23 bf90 0b01 5c2d 241d 2d8e
+ 12 15:49:45.894126 IP (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto UDP (17), length 140)
+ 10.0.0.20.520 > 224.0.0.9.520:
+ RIPv2, Response, length: 112, routes: 5 or less
+ Auth header: Packet Len 44, Key-ID 45, Auth Data Len 64, SeqNo 1339429785, MBZ 0, MBZ 0
+ AFI IPv4, 10.70.178.0/24, tag 0x0000, metric: 1, next-hop: self
+ Auth trailer:
+ 0x0000: ad5a 5d8a a1a8 b023 1ec3 5c1c ba6a 45fb
+ 0x0010: bee1 5584 6b1c 724d b1b7 f02e 7365 f038
+ 0x0020: 7558 0914 6762 00d1 a92f d499 5da2 43ad
+ 0x0030: 202c 7a9b 8065 49ad 260b 2142 0f8d d83f
diff --git a/tests/ripv2_auth.pcap b/tests/ripv2_auth.pcap
new file mode 100644
index 0000000..57b5a41
--- /dev/null
+++ b/tests/ripv2_auth.pcap
Binary files differ
diff --git a/tests/rpki-rtr-oobr.out b/tests/rpki-rtr-oobr.out
new file mode 100644
index 0000000..a9dc9b8
--- /dev/null
+++ b/tests/rpki-rtr-oobr.out
@@ -0,0 +1,3 @@
+ 1 03:20:48.134349590 IP truncated-ip - 12 bytes missing! (tos 0x0, ttl 254, id 13327, offset 0, flags [+, DF, rsvd], proto TCP (6), length 62, bad cksum 8e7f (->c283)!)
+ 19.128.128.20.323 > 76.19.6.127.49600: Flags [none], seq 2684354563:2684354585, win 28672, length 22
+ RPKI-RTRv171 (unknown)
diff --git a/tests/rpki-rtr-oobr.pcap b/tests/rpki-rtr-oobr.pcap
new file mode 100644
index 0000000..820338f
--- /dev/null
+++ b/tests/rpki-rtr-oobr.pcap
Binary files differ
diff --git a/tests/rpl-14-dao.pcap b/tests/rpl-14-dao.pcap
new file mode 100644
index 0000000..9a164e4
--- /dev/null
+++ b/tests/rpl-14-dao.pcap
Binary files differ
diff --git a/tests/rpl-14-daovvv.out b/tests/rpl-14-daovvv.out
new file mode 100644
index 0000000..4a9d7fa
--- /dev/null
+++ b/tests/rpl-14-daovvv.out
@@ -0,0 +1 @@
+ 1 16:04:20.568260 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 24) fe80::216:3eff:fe11:3424 > ff02::1: [icmp6 sum ok] ICMP6, RPL, (CLR)Destination Advertisement Object [dagid:7061:6e64:6f72:6120:6973:2066:756e:a6c,seq:1,instance:1,Dagid,flags:40]
diff --git a/tests/rpl-19-pickdag.out b/tests/rpl-19-pickdag.out
new file mode 100644
index 0000000..5afbb8c
--- /dev/null
+++ b/tests/rpl-19-pickdag.out
@@ -0,0 +1 @@
+ 1 03:38:11.851768 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 56) fe80::216:3eff:fe11:3424 > fe80::216:3eff:fe11:3424: [icmp6 sum ok] ICMP6, RPL, (CLR)Destination Advertisement Object [dagid:5431::,seq:10,instance:42,Dagid,flags:40] opt:rpltarget len:25 opt:pad1 opt:pad1 opt:pad1 opt:pad1 opt:pad1 opt:pad1 opt:pad1
diff --git a/tests/rpl-19-pickdag.pcap b/tests/rpl-19-pickdag.pcap
new file mode 100644
index 0000000..3eca6c9
--- /dev/null
+++ b/tests/rpl-19-pickdag.pcap
Binary files differ
diff --git a/tests/rpl-19-pickdagvvv.out b/tests/rpl-19-pickdagvvv.out
new file mode 100644
index 0000000..41a1ba3
--- /dev/null
+++ b/tests/rpl-19-pickdagvvv.out
@@ -0,0 +1 @@
+ 1 03:38:11.851768 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 56) fe80::216:3eff:fe11:3424 > fe80::216:3eff:fe11:3424: [icmp6 sum ok] ICMP6, RPL, (CLR)Destination Advertisement Object [dagid:5431::,seq:10,instance:42,Dagid,flags:40] opt:rpltarget len:25 0x0000: 0080 2001 0db8 0001 0000 0216 3eff fe11 0x0010: 3424 0000 0000 00 opt:pad1 opt:pad1 opt:pad1 opt:pad1 opt:pad1 opt:pad1 opt:pad1
diff --git a/tests/rpl-26-senddaoack.pcap b/tests/rpl-26-senddaoack.pcap
new file mode 100644
index 0000000..fd397a4
--- /dev/null
+++ b/tests/rpl-26-senddaoack.pcap
Binary files differ
diff --git a/tests/rpl-26-senddaovv.out b/tests/rpl-26-senddaovv.out
new file mode 100644
index 0000000..b680712
--- /dev/null
+++ b/tests/rpl-26-senddaovv.out
@@ -0,0 +1 @@
+ 1 04:16:05.263422 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 24) fe80::216:3eff:fe11:3424 > ff02::1: [icmp6 sum ok] ICMP6, RPL, (CLR)Destination Advertisement Object Ack [dagid:7468:6973:6973:6d79:6469:6365:6461:6732,seq:11,instance:43,status:0]
diff --git a/tests/rpl-dao-oobr.out b/tests/rpl-dao-oobr.out
new file mode 100644
index 0000000..232ee77
--- /dev/null
+++ b/tests/rpl-dao-oobr.out
@@ -0,0 +1 @@
+ 1 00:04:16.851768 IP6 (hlim 64, next-header ICMPv6 (58) payload length: 56) fe80::216:3eff:fe11:3424 > fe80::216:3eff:fe11:3424: ICMP6, RPL, (CLR)Destination Advertisement Object [dagid:<elided>,seq:0,instance:42,flags:00] opt:subopt:13 len:2 opt:subopt:128 len:15 opt:subopt:13 len:15 [|icmp6]
diff --git a/tests/rpl-dao-oobr.pcap b/tests/rpl-dao-oobr.pcap
new file mode 100644
index 0000000..514e9b3
--- /dev/null
+++ b/tests/rpl-dao-oobr.pcap
Binary files differ
diff --git a/tests/rpvst-v.out b/tests/rpvst-v.out
new file mode 100644
index 0000000..fbd2a2e
--- /dev/null
+++ b/tests/rpvst-v.out
@@ -0,0 +1,68 @@
+ 1 10:39:19.323246 DTPv1, length 31
+ Domain (0x0001) TLV, length 10, cisco
+ Status (0x0002) TLV, length 5, 0x81
+ DTP type (0x0003) TLV, length 5, 0xa5
+ Neighbor (0x0004) TLV, length 10, 00:1f:6d:96:ec:04
+ 2 10:39:20.329871 DTPv1, length 31
+ Domain (0x0001) TLV, length 10, cisco
+ Status (0x0002) TLV, length 5, 0x81
+ DTP type (0x0003) TLV, length 5, 0xa5
+ Neighbor (0x0004) TLV, length 10, 00:1f:6d:96:ec:04
+ 3 10:39:21.327398 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:1f:6d:96:ec:00.8004, length 42
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 4 10:39:21.327411 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:1f:6d:96:ec:00.8004, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 5 10:39:21.327491 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8005.00:1f:6d:96:ec:00.8004, length 42
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8005.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 6 10:39:22.324853 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:1f:6d:96:ec:00.8004, length 42
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 7 10:39:22.324865 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:1f:6d:96:ec:00.8004, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 8 10:39:22.324957 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8005.00:1f:6d:96:ec:00.8004, length 42
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8005.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 9 10:39:24.337449 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:1f:6d:96:ec:00.8004, length 42
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 10 10:39:24.337461 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:1f:6d:96:ec:00.8004, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 11 10:39:24.337682 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8005.00:1f:6d:96:ec:00.8004, length 42
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8005.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 12 10:39:26.327771 VTPv1, Message Summary advertisement (0x01), length 77
+ Domain name: cisco, Followers: 0
+ Config Rev 2, Updater 155.1.37.7, Timestamp 0x39333033 0x30313030 0x30393030, MD5 digest: fb393cf67014e50aa79c7c5b193f6fe1
+ 13 10:39:26.350710 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:1f:6d:96:ec:00.8004, length 42
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 14 10:39:26.350718 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:1f:6d:96:ec:00.8004, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 15 10:39:26.350937 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8005.00:1f:6d:96:ec:00.8004, length 42
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8005.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 16 10:39:28.363914 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:1f:6d:96:ec:00.8004, length 42
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 17 10:39:28.363959 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:1f:6d:96:ec:00.8004, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 18 10:39:28.364082 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8005.00:1f:6d:96:ec:00.8004, length 42
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8005.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 19 10:39:30.377262 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:1f:6d:96:ec:00.8004, length 42
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 20 10:39:30.377278 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:1f:6d:96:ec:00.8004, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 21 10:39:30.377337 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8005.00:1f:6d:96:ec:00.8004, length 42
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8005.00:1f:6d:96:ec:00, root-pathcost 0, port-role Designated
+ 22 10:39:30.696256 Loopback, skipCount 0, Reply, receipt number 0, data (40 octets)
diff --git a/tests/rpvstp-trunk-native-vid5.pcap b/tests/rpvstp-trunk-native-vid5.pcap
new file mode 100644
index 0000000..4c9908b
--- /dev/null
+++ b/tests/rpvstp-trunk-native-vid5.pcap
Binary files differ
diff --git a/tests/rstp-v.out b/tests/rstp-v.out
new file mode 100644
index 0000000..2d0bcb4
--- /dev/null
+++ b/tests/rstp-v.out
@@ -0,0 +1,90 @@
+ 1 11:50:35.352170 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 2 11:50:37.214151 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 3 11:50:39.227534 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 4 11:50:41.240343 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 5 11:50:43.253615 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 6 11:50:45.266889 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 7 11:50:47.280508 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 8 11:50:49.293428 STP 802.1w, Rapid STP, Flags [Proposal], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 9 11:50:51.306707 STP 802.1w, Rapid STP, Flags [Proposal, Learn], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 10 11:50:53.320006 STP 802.1w, Rapid STP, Flags [Proposal, Learn], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 11 11:50:55.333257 STP 802.1w, Rapid STP, Flags [Proposal, Learn], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 12 11:50:57.346887 STP 802.1w, Rapid STP, Flags [Proposal, Learn], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 13 11:50:59.359867 STP 802.1w, Rapid STP, Flags [Proposal, Learn], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 14 11:51:01.373086 STP 802.1w, Rapid STP, Flags [Proposal, Learn], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 15 11:51:03.386550 STP 802.1w, Rapid STP, Flags [Proposal, Learn], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 16 11:51:05.365396 STP 802.1w, Rapid STP, Flags [Topology change, Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 17 11:51:05.399631 STP 802.1w, Rapid STP, Flags [Topology change, Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 18 11:51:07.413269 STP 802.1w, Rapid STP, Flags [Topology change, Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 19 11:51:09.426184 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 20 11:51:11.439472 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 21 11:51:13.452762 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 22 11:51:15.466142 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 23 11:51:17.479631 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 24 11:51:19.492583 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 25 11:51:21.505865 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 26 11:51:23.519148 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 27 11:51:25.532418 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 28 11:51:27.546083 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 29 11:51:29.559090 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
+ 30 11:51:31.572240 STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8001.00:19:06:ea:b8:80.800c, length 36
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0, port-role Designated
diff --git a/tests/rsvp-inf-loop-2-v.out b/tests/rsvp-inf-loop-2-v.out
new file mode 100644
index 0000000..8fd00c0
--- /dev/null
+++ b/tests/rsvp-inf-loop-2-v.out
@@ -0,0 +1,12 @@
+ 1 21:27:42.171514 IP (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto RSVP (46), length 268, options (RA))
+ 10.31.0.1 > 10.33.0.1:
+ RSVPv1 Path Message (1), Flags: [none], length: 244, ttl: 254, checksum: 0x0ca3
+ Session Object (1) Flags: [reject if unknown], Class-Type: Tunnel IPv4 (7), length: 16
+ IPv4 Tunnel EndPoint: 10.33.0.1, Tunnel ID: 0x0004, Extended Tunnel ID: 10.31.0.1
+ RSVP Hop Object (3) Flags: [reject if unknown], Class-Type: IPv4 (1), length: 12
+ Previous/Next Interface: 10.1.2.1, Logical Interface Handle: 0x98006700
+ Time Values Object (5) Flags: [reject if unknown], Class-Type: 1 (1), length: 8
+ Refresh Period: 30000ms
+ ERO Object (20) Flags: [reject if unknown], Class-Type: IPv4 (1), length: 36
+ Subobject Type: IPv4 prefix, length 8, Strict, 10.1.2.2/32, Flags: [none]
+ Subobject Type: IPv4 prefix, length 8 ERROR: Prefix length 70 != 32 (invalid)
diff --git a/tests/rsvp-inf-loop-2.pcapng b/tests/rsvp-inf-loop-2.pcapng
new file mode 100644
index 0000000..e2caa2a
--- /dev/null
+++ b/tests/rsvp-inf-loop-2.pcapng
Binary files differ
diff --git a/tests/rsvp-infinite-loop.pcap b/tests/rsvp-infinite-loop.pcap
new file mode 100644
index 0000000..dc03dac
--- /dev/null
+++ b/tests/rsvp-infinite-loop.pcap
Binary files differ
diff --git a/tests/rsvp-rsvp_obj_print-oobr.out b/tests/rsvp-rsvp_obj_print-oobr.out
new file mode 100644
index 0000000..a759a4b
--- /dev/null
+++ b/tests/rsvp-rsvp_obj_print-oobr.out
@@ -0,0 +1,7 @@
+ 1 03:21:36.131862 TIPC v5.0 226.0.0 > 64.14.1536, headerlength 56 bytes, MessageSize 51914 bytes, Link Changeover Protocol internal, messageType Unknown (0xcacacaca) [|tipc]
+ 2 [Invalid header: len==0]
+ 3 05:06:08.4043485718 IP (tos 0x0, ttl 14, id 44815, offset 0, flags [+, DF, rsvd], proto RSVP (46), length 40, bad cksum 3280 (->c411)!)
+ 250.219.91.71 > 20.100.238.255:
+ RSVPv1 Hello Message (20), Flags: [none], length: 16384, ttl: 0, checksum: 0x000e
+ Class Type (old) Object (125) Flags: [reject if unknown], Class-Type: 1 (1), length: 4
+ ERROR: object is too short
diff --git a/tests/rsvp-rsvp_obj_print-oobr.pcap b/tests/rsvp-rsvp_obj_print-oobr.pcap
new file mode 100644
index 0000000..bb79424
--- /dev/null
+++ b/tests/rsvp-rsvp_obj_print-oobr.pcap
Binary files differ
diff --git a/tests/rsvp_cap.out b/tests/rsvp_cap.out
new file mode 100644
index 0000000..cc2b5c0
--- /dev/null
+++ b/tests/rsvp_cap.out
@@ -0,0 +1,9 @@
+ 1 12:22:52.874485 IP (tos 0xc0, ttl 1, id 44443, offset 0, flags [none], proto RSVP (46), length 60)
+ 10.0.57.5 > 10.0.57.7:
+ RSVPv1 Hello Message (20), Flags: [Refresh reduction capable], length: 40, ttl: 1, checksum: 0x7d4d
+ Hello Object (22) Flags: [reject if unknown], Class-Type: Hello Request (1), length: 12
+ Source Instance: 0x4a44672b, Destination Instance: 0xe86eb75b
+ Restart Capability Object (131) Flags: [ignore silently if unknown], Class-Type: IPv4 (1), length: 12
+ Restart Time: 0ms, Recovery Time: 0ms
+ Capability Object (134) Flags: [ignore silently if unknown], Class-Type: 1 (1), length: 8
+ Flags: [RecoveryPath Desired, RecoveryPath Srefresh Capable]
diff --git a/tests/rsvp_cap.pcap b/tests/rsvp_cap.pcap
new file mode 100644
index 0000000..233ee8b
--- /dev/null
+++ b/tests/rsvp_cap.pcap
Binary files differ
diff --git a/tests/rsvp_fast_reroute-oobr.out b/tests/rsvp_fast_reroute-oobr.out
new file mode 100644
index 0000000..ee461a6
--- /dev/null
+++ b/tests/rsvp_fast_reroute-oobr.out
@@ -0,0 +1,5 @@
+ 1 12:07:31.135190 IP (tos 0x0, ttl 224, id 17920, offset 0, flags [none], proto RSVP (46), length 42024, bad cksum 3700 (->fc41)!)
+ 0.203.243.128 > 0.26.0.0:
+ RSVPv1 Path Message (1), Flags: [Refresh reduction capable], length: 41218, ttl: 227, checksum: 0x00f4
+ Fast Re-Route Object (205) Flags: [ignore and forward if unknown], Class-Type: Unknown (0), length: 4
+ Fast Re-Route Object (205) Flags: [ignore and forward if unknown], Class-Type: Unknown (0), length: 4 [|rsvp]
diff --git a/tests/rsvp_fast_reroute-oobr.pcap b/tests/rsvp_fast_reroute-oobr.pcap
new file mode 100644
index 0000000..486f096
--- /dev/null
+++ b/tests/rsvp_fast_reroute-oobr.pcap
Binary files differ
diff --git a/tests/rsvp_infloop-v.out b/tests/rsvp_infloop-v.out
new file mode 100644
index 0000000..7e0c1c3
--- /dev/null
+++ b/tests/rsvp_infloop-v.out
@@ -0,0 +1,35 @@
+ 1 18:10:03.368228 IP (tos 0x0, ttl 128, id 0, offset 0, flags [DF], proto RSVP (46), length 40)
+ 208.208.77.43 > 192.168.1.1:
+ RSVPv1 Hello Message (20), Flags: [none], length: 20, ttl: 64, checksum: 0x98ce
+ ERO Object (20) Flags: [reject if unknown], Class-Type: IPv4 (1), length: 8
+ Subobject Type: Label, length 0
+ ERROR: zero length ERO subtype
+ ERROR: object header too short 0 < 4
+ 2 18:10:03.425201 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto RSVP (46), length 40)
+ 199.106.167.61 > 192.168.1.1:
+ RSVPv1 Hello Message (20), Flags: [none], length: 20, ttl: 64, checksum: 0x98ce
+ ERO Object (20) Flags: [reject if unknown], Class-Type: IPv4 (1), length: 8
+ Subobject Type: Label, length 0
+ ERROR: zero length ERO subtype
+ ERROR: object header too short 0 < 4
+ 3 18:10:03.485172 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto RSVP (46), length 40)
+ 179.9.22.16 > 192.168.1.1:
+ RSVPv1 Hello Message (20), Flags: [none], length: 20, ttl: 128, checksum: 0x58ce
+ ERO Object (20) Flags: [reject if unknown], Class-Type: IPv4 (1), length: 8
+ Subobject Type: Label, length 0
+ ERROR: zero length ERO subtype
+ ERROR: object header too short 0 < 4
+ 4 18:10:03.545141 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto RSVP (46), length 40)
+ 99.107.153.33 > 192.168.1.1:
+ RSVPv1 Hello Message (20), Flags: [none], length: 20, ttl: 128, checksum: 0x58ce
+ ERO Object (20) Flags: [reject if unknown], Class-Type: IPv4 (1), length: 8
+ Subobject Type: Label, length 0
+ ERROR: zero length ERO subtype
+ ERROR: object header too short 0 < 4
+ 5 18:10:03.605110 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto RSVP (46), length 40)
+ 188.46.23.116 > 192.168.1.1:
+ RSVPv1 Hello Message (20), Flags: [none], length: 20, ttl: 128, checksum: 0x58ce
+ ERO Object (20) Flags: [reject if unknown], Class-Type: IPv4 (1), length: 8
+ Subobject Type: Label, length 0
+ ERROR: zero length ERO subtype
+ ERROR: object header too short 0 < 4
diff --git a/tests/rsvp_uni-oobr-1.out b/tests/rsvp_uni-oobr-1.out
new file mode 100644
index 0000000..751970d
--- /dev/null
+++ b/tests/rsvp_uni-oobr-1.out
@@ -0,0 +1,5 @@
+ 1 12:56:45.3980395268 IP (tos 0x2,ECT(0), ttl 248, id 0, offset 0, flags [none], proto RSVP (46), length 54312, bad cksum 3743 (->7e72)!)
+ 54.35.0.0 > 58.16.0.0:
+ RSVPv1 Hello Message (20), Flags: [Refresh reduction capable], length: 65527, ttl: 15, checksum: 0x0902
+ Generalized UNI Object (229) Flags: [ignore and forward if unknown], Class-Type: 1 (1), length: 12
+ Subobject Type: Unknown (127), AF: HDLC (4), length: 2 (invalid)
diff --git a/tests/rsvp_uni-oobr-1.pcap b/tests/rsvp_uni-oobr-1.pcap
new file mode 100644
index 0000000..e2ce996
--- /dev/null
+++ b/tests/rsvp_uni-oobr-1.pcap
Binary files differ
diff --git a/tests/rsvp_uni-oobr-2.out b/tests/rsvp_uni-oobr-2.out
new file mode 100644
index 0000000..e32b7e4
--- /dev/null
+++ b/tests/rsvp_uni-oobr-2.out
@@ -0,0 +1,5 @@
+ 1 12:56:45.3980395268 IP (tos 0x2,ECT(0), ttl 248, id 0, offset 0, flags [none], proto RSVP (46), length 54312, bad cksum 3743 (->3051)!)
+ 54.35.78.33 > 58.16.0.0:
+ RSVPv1 Hello Message (20), Flags: [Refresh reduction capable], length: 65527, ttl: 15, checksum: 0x0902
+ Generalized UNI Object (229) Flags: [ignore and forward if unknown], Class-Type: 1 (1), length: 12
+ Subobject Type: Unknown (0), AF: HDLC (4), length: 2 (invalid)
diff --git a/tests/rsvp_uni-oobr-2.pcap b/tests/rsvp_uni-oobr-2.pcap
new file mode 100644
index 0000000..ccca070
--- /dev/null
+++ b/tests/rsvp_uni-oobr-2.pcap
Binary files differ
diff --git a/tests/rsvp_uni-oobr-3.out b/tests/rsvp_uni-oobr-3.out
new file mode 100644
index 0000000..4f5560d
--- /dev/null
+++ b/tests/rsvp_uni-oobr-3.out
@@ -0,0 +1,12 @@
+ 1 14:35:06.131862 IP (tos 0x0, ttl 48, id 25615, offset 0, flags [+, DF, rsvd], proto UDP (17), length 61735, bad cksum 8ef1 (->10e1)!)
+ 1.2.3.3.1812 > 64.112.0.96.4567: wb-29! (invalid)
+ 2 00:00:20.3980395268 IP (tos 0x2,ECT(0), ttl 248, id 0, offset 0, flags [none], proto RSVP (46), length 54312, bad cksum 3701 (->8972)!)
+ 54.35.0.0 > 47.16.0.0:
+ RSVPv1 Hello Message (20), Flags: [Refresh reduction capable], length: 65527, ttl: 15, checksum: 0x0902
+ Generalized UNI Object (229) Flags: [ignore and forward if unknown], Class-Type: 1 (1), length: 12
+ Subobject Type: Unknown (0), AF: HDLC (4), length: 1 (invalid)
+ 3 00:00:20.3980395268 IP (tos 0x2,ECT(0), ttl 248, id 0, offset 0, flags [none], proto RSVP (46), length 54312, bad cksum 3701 (->7e72)!)
+ 54.35.0.0 > 58.16.0.0:
+ RSVPv1 Hello Message (20), Flags: [Refresh reduction capable], length: 65527, ttl: 15, checksum: 0x0902
+ Generalized UNI Object (229) Flags: [ignore and forward if unknown], Class-Type: 1 (1), length: 12
+ Subobject Type: Unknown (225), AF: HDLC (4), length: 1 (invalid)
diff --git a/tests/rsvp_uni-oobr-3.pcap b/tests/rsvp_uni-oobr-3.pcap
new file mode 100644
index 0000000..fc79c42
--- /dev/null
+++ b/tests/rsvp_uni-oobr-3.pcap
Binary files differ
diff --git a/tests/rtp-seg-fault-1.out b/tests/rtp-seg-fault-1.out
new file mode 100644
index 0000000..c2dda56
--- /dev/null
+++ b/tests/rtp-seg-fault-1.out
@@ -0,0 +1,2 @@
+ 1 00:09:41.000000 IP (tos 0x0, ttl 255, id 158, offset 0, flags [DF], proto UDP (17), length 37, bad cksum d7e0 (->9cf8)!)
+ 208.21.2.184.1512 > 10.1.1.99.53: udp/rtp, length 9 < 12
diff --git a/tests/rtp-seg-fault-1.pcapng b/tests/rtp-seg-fault-1.pcapng
new file mode 100644
index 0000000..5a0510c
--- /dev/null
+++ b/tests/rtp-seg-fault-1.pcapng
Binary files differ
diff --git a/tests/rtp-seg-fault-2.out b/tests/rtp-seg-fault-2.out
new file mode 100644
index 0000000..e8445dc
--- /dev/null
+++ b/tests/rtp-seg-fault-2.out
@@ -0,0 +1,2 @@
+ 1 00:06:20.000000 IP (tos 0x0, ttl 252, id 8264, offset 0, flags [none], proto UDP (17), length 100, bad cksum f803 (->c00f)!)
+ 208.21.2.184.1512 > 10.1.1.99.514: udp/rtp, length 0 < 8
diff --git a/tests/rtp-seg-fault-2.pcapng b/tests/rtp-seg-fault-2.pcapng
new file mode 100644
index 0000000..77fefbf
--- /dev/null
+++ b/tests/rtp-seg-fault-2.pcapng
Binary files differ
diff --git a/tests/rx-v.out b/tests/rx-v.out
new file mode 100644
index 0000000..5a35721
--- /dev/null
+++ b/tests/rx-v.out
@@ -0,0 +1,1252 @@
+ 1 21:46:16.463334 IP (tos 0x0, ttl 64, id 57925, offset 0, flags [none], proto UDP (17), length 72)
+ 131.151.32.21.7001 > 131.151.1.59.7000: rx data seq 1 ser 431 fs call fetch-status fid 536871098/846/1049757 (44)
+ 2 21:46:16.483206 IP (tos 0x0, ttl 254, id 52107, offset 0, flags [DF], proto UDP (17), length 176)
+ 131.151.1.59.7000 > 131.151.32.21.7001: rx data seq 1 ser 347 fs reply fetch-status (148)
+ 3 21:46:16.889677 IP (tos 0x0, ttl 64, id 57926, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.7001 > 131.151.1.59.7000: rx ack seq 0 ser 432 first 2 serial 347 reason delay (65)
+ 4 21:46:24.151512 IP (tos 0x0, ttl 64, id 57928, offset 0, flags [none], proto UDP (17), length 108)
+ 131.151.32.21.7001 > 131.151.1.59.7000: rx data seq 1 ser 433 fs call makedir fid 536871098/1/1 "tmpdir" StoreStatus date 1999/11/11 21:46:24 group 0 mode 755 (80)
+ 5 21:46:24.245048 IP (tos 0x0, ttl 254, id 59867, offset 0, flags [DF], proto UDP (17), length 80)
+ 131.151.1.59.7000 > 131.151.32.91.7001: rx data seq 1 ser 2312 cb call callback fid 536871098/1/1 (52)
+ 6 21:46:24.255513 IP (tos 0x0, ttl 128, id 42324, offset 0, flags [none], proto UDP (17), length 56)
+ 131.151.32.91.7001 > 131.151.1.59.7000: rx data seq 1 ser 1154 (28)
+ 7 21:46:24.255528 IP (tos 0x0, ttl 128, id 42324, offset 0, flags [none], proto UDP (17), length 56)
+ 131.151.32.91.7001 > 131.151.1.59.7000: rx data seq 1 ser 1154 (28)
+ 8 21:46:24.282365 IP (tos 0x0, ttl 254, id 52108, offset 0, flags [DF], proto UDP (17), length 272)
+ 131.151.1.59.7000 > 131.151.32.21.7001: rx data seq 1 ser 348 fs reply makedir new fid 536871098/677/1097448 (244)
+ 9 21:46:24.283047 IP (tos 0x0, ttl 64, id 57929, offset 0, flags [none], proto UDP (17), length 72)
+ 131.151.32.21.7001 > 131.151.1.59.7000: rx data seq 1 ser 434 fs call fetch-status fid 536871098/677/1097448 (44)
+ 10 21:46:24.284042 IP (tos 0x0, ttl 254, id 52109, offset 0, flags [DF], proto UDP (17), length 176)
+ 131.151.1.59.7000 > 131.151.32.21.7001: rx data seq 1 ser 349 fs reply fetch-status (148)
+ 11 21:46:24.679610 IP (tos 0x0, ttl 64, id 57930, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.7001 > 131.151.1.59.7000: rx ack seq 0 ser 435 first 2 serial 349 reason delay (65)
+ 12 21:46:24.781785 IP (tos 0x0, ttl 254, id 59868, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7000 > 131.151.32.91.7001: rx ack seq 0 ser 2313 first 1 serial 1154 reason delay acked 1 (62)
+ 13 21:46:28.541035 IP (tos 0x0, ttl 64, id 57931, offset 0, flags [none], proto UDP (17), length 84)
+ 131.151.32.21.7001 > 131.151.1.59.7000: rx data seq 1 ser 436 fs call rmdir fid 536871098/1/1 "tmpdir" (56)
+ 14 21:46:28.544636 IP (tos 0x0, ttl 254, id 52110, offset 0, flags [DF], proto UDP (17), length 164)
+ 131.151.1.59.7000 > 131.151.32.21.7001: rx data seq 1 ser 350 fs reply rmdir (136)
+ 15 21:46:28.949547 IP (tos 0x0, ttl 64, id 57932, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.7001 > 131.151.1.59.7000: rx ack seq 0 ser 437 first 2 serial 350 reason delay (65)
+ 16 21:46:38.681457 IP (tos 0x0, ttl 254, id 41909, offset 0, flags [DF], proto UDP (17), length 60)
+ 131.151.1.70.7000 > 131.151.32.91.7001: rx data seq 1 ser 1344 cb call probe (32)
+ 17 21:46:38.690316 IP (tos 0x0, ttl 128, id 42580, offset 0, flags [none], proto UDP (17), length 56)
+ 131.151.32.91.7001 > 131.151.1.70.7000: rx data seq 1 ser 656 (28)
+ 18 21:46:38.690352 IP (tos 0x0, ttl 128, id 42580, offset 0, flags [none], proto UDP (17), length 56)
+ 131.151.32.91.7001 > 131.151.1.70.7000: rx data seq 1 ser 656 (28)
+ 19 21:46:39.196737 IP (tos 0x0, ttl 254, id 41910, offset 0, flags [DF], proto UDP (17), length 89)
+ 131.151.1.70.7000 > 131.151.32.91.7001: rx ack seq 0 ser 1345 first 2 serial 656 reason delay (61)
+ 20 21:46:48.590067 IP (tos 0x0, ttl 64, id 57933, offset 0, flags [none], proto UDP (17), length 72)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx data seq 1 ser 1607 fs call fetch-status fid 536977399/40/27 (44)
+ 21 21:46:48.619971 IP (tos 0x0, ttl 254, id 569, offset 0, flags [DF], proto UDP (17), length 176)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 1 ser 2519 fs reply fetch-status (148)
+ 22 21:46:48.810858 IP (tos 0x0, ttl 64, id 57934, offset 0, flags [none], proto UDP (17), length 76)
+ 131.151.32.21.1792 > 131.151.1.59.7003: rx data seq 1 ser 1 vldb call get-entry-by-name "root.cell" (48)
+ 23 21:46:48.812595 IP (tos 0x0, ttl 254, id 52111, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 1 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 24 21:46:48.813282 IP (tos 0x0, ttl 64, id 57935, offset 0, flags [none], proto UDP (17), length 124)
+ 131.151.32.21.7001 > 131.151.1.59.7000: rx data seq 1 ser 438 fs call symlink fid 536871098/1/1 "rotcel" link to "#root.cell." (96)
+ 25 21:46:48.830808 IP (tos 0x0, ttl 254, id 52112, offset 0, flags [DF], proto UDP (17), length 260)
+ 131.151.1.59.7000 > 131.151.32.21.7001: rx data seq 1 ser 351 fs reply symlink (232)
+ 26 21:46:49.029316 IP (tos 0x0, ttl 64, id 57936, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 0 ser 1608 first 2 serial 2519 reason delay (65)
+ 27 21:46:49.229306 IP (tos 0x0, ttl 64, id 57937, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.7001 > 131.151.1.59.7000: rx ack seq 0 ser 439 first 2 serial 351 reason delay (65)
+ 28 21:46:51.218454 IP (tos 0x0, ttl 254, id 52113, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 2 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 29 21:46:51.218541 IP (tos 0xc0, ttl 255, id 57939, offset 0, flags [none], proto ICMP (1), length 468)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ IP (tos 0x0, ttl 254, id 52113, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 2 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 30 21:46:52.805338 IP (tos 0x0, ttl 64, id 57940, offset 0, flags [none], proto UDP (17), length 84)
+ 131.151.32.21.7001 > 131.151.1.59.7000: rx data seq 1 ser 440 fs call remove-file fid 536871098/1/1 "rotcel" (56)
+ 31 21:46:52.810150 IP (tos 0x0, ttl 254, id 52114, offset 0, flags [DF], proto UDP (17), length 164)
+ 131.151.1.59.7000 > 131.151.32.21.7001: rx data seq 1 ser 352 fs reply remove-file (136)
+ 32 21:46:53.209266 IP (tos 0x0, ttl 64, id 57941, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.7001 > 131.151.1.59.7000: rx ack seq 0 ser 441 first 2 serial 352 reason delay (65)
+ 33 21:46:53.878655 IP (tos 0x0, ttl 254, id 52115, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 3 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 34 21:46:53.878718 IP (tos 0xc0, ttl 255, id 57942, offset 0, flags [none], proto ICMP (1), length 468)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ IP (tos 0x0, ttl 254, id 52115, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 3 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 35 21:46:56.242994 IP (tos 0x0, ttl 64, id 57943, offset 0, flags [none], proto UDP (17), length 72)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx data seq 1 ser 1609 fs call fetch-status fid 536977399/86/51 (44)
+ 36 21:46:56.245019 IP (tos 0x0, ttl 254, id 570, offset 0, flags [DF], proto UDP (17), length 176)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 1 ser 2520 fs reply fetch-status (148)
+ 37 21:46:56.518772 IP (tos 0x0, ttl 64, id 57944, offset 0, flags [none], proto UDP (17), length 76)
+ 131.151.32.21.1792 > 131.151.1.59.7003: rx data seq 1 ser 1 vldb call get-entry-by-name-n "users.nneul" (48)
+ 38 21:46:56.519452 IP (tos 0x0, ttl 254, id 52116, offset 0, flags [DF], proto UDP (17), length 72)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx challenge seq 0 ser 1 (44)
+ 39 21:46:56.523136 IP (tos 0x0, ttl 64, id 57945, offset 0, flags [none], proto UDP (17), length 168)
+ 131.151.32.21.1792 > 131.151.1.59.7003: rx response seq 0 ser 2 (140)
+ 40 21:46:56.525522 IP (tos 0x0, ttl 254, id 52117, offset 0, flags [DF], proto UDP (17), length 532)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 2 vldb reply get-entry-by-name-n "users.nneul" numservers 1 servers 131.151.1.59 partitions b rwvol 536871098 rovol 536871099 backup 536871100 (504)
+ 41 21:46:56.525791 IP (tos 0x0, ttl 64, id 57946, offset 0, flags [none], proto UDP (17), length 68)
+ 131.151.32.21.1792 > 131.151.1.59.7003: rx data seq 1 ser 3 vldb call get-entry-by-id-n volid 536871098 (40)
+ 42 21:46:56.527259 IP (tos 0x0, ttl 254, id 52118, offset 0, flags [DF], proto UDP (17), length 532)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 3 vldb reply get-entry-by-id-n "users.nneul" numservers 1 servers 131.151.1.59 partitions b rwvol 536871098 rovol 536871099 backup 536871100 (504)
+ 43 21:46:56.527629 IP (tos 0x0, ttl 64, id 57947, offset 0, flags [none], proto UDP (17), length 68)
+ 131.151.32.21.1792 > 131.151.1.59.7005: rx data seq 1 ser 1 vol call list-one-volume partid 1 volid 536871098 (40)
+ 44 21:46:56.637381 IP (tos 0x0, ttl 254, id 52119, offset 0, flags [DF], proto UDP (17), length 72)
+ 131.151.1.59.7005 > 131.151.32.21.1792: rx challenge seq 0 ser 1 (44)
+ 45 21:46:56.637779 IP (tos 0x0, ttl 64, id 57948, offset 0, flags [none], proto UDP (17), length 168)
+ 131.151.32.21.1792 > 131.151.1.59.7005: rx response seq 0 ser 2 (140)
+ 46 21:46:56.639215 IP (tos 0x0, ttl 64, id 57949, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 0 ser 1610 first 2 serial 2520 reason delay (65)
+ 47 21:46:56.920017 IP (tos 0x0, ttl 64, id 57950, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.1792 > 131.151.1.59.7003: rx ack seq 0 ser 4 first 2 serial 3 reason delay (65)
+ 48 21:46:57.036390 IP (tos 0x0, ttl 254, id 52120, offset 0, flags [DF], proto UDP (17), length 280)
+ 131.151.1.59.7005 > 131.151.32.21.1792: rx data seq 1 ser 2 vol reply list-one-volume name "users.nneul" volid 536871098 type (252)
+ 49 21:46:57.048744 IP (tos 0x0, ttl 254, id 52121, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 4 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 50 21:46:57.061382 IP (tos 0x0, ttl 64, id 57951, offset 0, flags [none], proto UDP (17), length 56)
+ 131.151.32.21.1792 > 131.151.1.59.7005: rx ackall seq 0 ser 3 (28)
+ 51 21:47:00.778759 IP (tos 0x0, ttl 254, id 52122, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 5 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 52 21:47:00.778818 IP (tos 0xc0, ttl 255, id 57971, offset 0, flags [none], proto ICMP (1), length 468)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ IP (tos 0x0, ttl 254, id 52122, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 5 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 53 21:47:00.817967 IP (tos 0x0, ttl 64, id 57972, offset 0, flags [none], proto UDP (17), length 72)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx data seq 1 ser 1611 fs call fetch-status fid 536977399/14/14 (44)
+ 54 21:47:00.820615 IP (tos 0x0, ttl 254, id 571, offset 0, flags [DF], proto UDP (17), length 176)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 1 ser 2521 fs reply fetch-status (148)
+ 55 21:47:00.995692 IP (tos 0x0, ttl 64, id 57973, offset 0, flags [none], proto UDP (17), length 320)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 1 pt call name-to-id "users.nneul" (292)
+ 56 21:47:00.996639 IP (tos 0x0, ttl 254, id 52123, offset 0, flags [DF], proto UDP (17), length 72)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx challenge seq 0 ser 1 (44)
+ 57 21:47:00.996822 IP (tos 0x0, ttl 64, id 57974, offset 0, flags [none], proto UDP (17), length 168)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx response seq 0 ser 2 (140)
+ 58 21:47:00.998994 IP (tos 0x0, ttl 254, id 52124, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 2 pt reply name-to-id ids: 32766 (36)
+ 59 21:47:01.000150 IP (tos 0x0, ttl 64, id 57975, offset 0, flags [none], proto UDP (17), length 320)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 3 pt call name-to-id "users.nneul" (292)
+ 60 21:47:01.001268 IP (tos 0x0, ttl 254, id 52125, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 3 pt reply name-to-id ids: 32766 (36)
+ 61 21:47:01.005342 IP (tos 0x0, ttl 64, id 57976, offset 0, flags [none], proto UDP (17), length 64)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 4 pt call id-to-name ids: <none!> (36)
+ 62 21:47:01.005915 IP (tos 0x0, ttl 254, id 52126, offset 0, flags [DF], proto UDP (17), length 60)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 4 pt reply id-to-name <none!> (32)
+ 63 21:47:01.006087 IP (tos 0x0, ttl 64, id 57977, offset 0, flags [none], proto UDP (17), length 56)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx ackall seq 0 ser 5 (28)
+ 64 21:47:01.219166 IP (tos 0x0, ttl 64, id 57978, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 0 ser 1612 first 2 serial 2521 reason delay (65)
+ 65 21:47:03.010034 IP (tos 0x0, ttl 64, id 57979, offset 0, flags [none], proto UDP (17), length 140)
+ 131.151.32.21.7001 > 131.151.1.70.7000: rx data seq 1 ser 101 fs call give-cbs (112)
+ 66 21:47:03.011088 IP (tos 0x0, ttl 254, id 703, offset 0, flags [DF], proto UDP (17), length 56)
+ 131.151.1.70.7000 > 131.151.32.21.7001: rx data seq 1 ser 55 (28)
+ 67 21:47:03.409140 IP (tos 0x0, ttl 64, id 57980, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.7001 > 131.151.1.70.7000: rx ack seq 0 ser 102 first 2 serial 55 reason delay (65)
+ 68 21:47:05.869072 IP (tos 0x0, ttl 64, id 57981, offset 0, flags [none], proto UDP (17), length 320)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 1 pt call name-to-id "nneul" (292)
+ 69 21:47:05.869722 IP (tos 0x0, ttl 254, id 52127, offset 0, flags [DF], proto UDP (17), length 72)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx challenge seq 0 ser 1 (44)
+ 70 21:47:05.870422 IP (tos 0x0, ttl 64, id 57982, offset 0, flags [none], proto UDP (17), length 168)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx response seq 0 ser 2 (140)
+ 71 21:47:05.872757 IP (tos 0x0, ttl 254, id 52128, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 2 pt reply name-to-id ids: 5879 (36)
+ 72 21:47:05.873149 IP (tos 0x0, ttl 64, id 57983, offset 0, flags [none], proto UDP (17), length 320)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 3 pt call name-to-id "nneul" (292)
+ 73 21:47:05.874355 IP (tos 0x0, ttl 254, id 52129, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 3 pt reply name-to-id ids: 5879 (36)
+ 74 21:47:05.874531 IP (tos 0x0, ttl 64, id 57984, offset 0, flags [none], proto UDP (17), length 64)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 4 pt call id-to-name ids: <none!> (36)
+ 75 21:47:05.875156 IP (tos 0x0, ttl 254, id 52130, offset 0, flags [DF], proto UDP (17), length 60)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 4 pt reply id-to-name <none!> (32)
+ 76 21:47:05.875335 IP (tos 0x0, ttl 64, id 57985, offset 0, flags [none], proto UDP (17), length 64)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 5 pt call list-entry id 5879 (36)
+ 77 21:47:05.877704 IP (tos 0x0, ttl 254, id 52131, offset 0, flags [DF], proto UDP (17), length 360)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 5 pt reply list-entry (332)
+ 78 21:47:05.877925 IP (tos 0x0, ttl 64, id 57986, offset 0, flags [none], proto UDP (17), length 72)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 6 pt call id-to-name ids: -204 5113 (44)
+ 79 21:47:05.879692 IP (tos 0x0, ttl 254, id 52132, offset 0, flags [DF], proto UDP (17), length 572)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 6 pt reply id-to-name "system:administrators" "5113" (544)
+ 80 21:47:05.883080 IP (tos 0x0, ttl 64, id 57987, offset 0, flags [none], proto UDP (17), length 576)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 7 pt call name-to-id "nneul" "system:administrators" (548)
+ 81 21:47:05.884646 IP (tos 0x0, ttl 254, id 52133, offset 0, flags [DF], proto UDP (17), length 68)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 7 pt reply name-to-id ids: 5879 -204 (40)
+ 82 21:47:05.884950 IP (tos 0x0, ttl 64, id 57988, offset 0, flags [none], proto UDP (17), length 68)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 8 pt call same-mbr-of uid 5879 gid -204 (40)
+ 83 21:47:05.886482 IP (tos 0x0, ttl 254, id 52134, offset 0, flags [DF], proto UDP (17), length 60)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 8 pt reply same-mbr-of (32)
+ 84 21:47:05.888922 IP (tos 0x0, ttl 64, id 57989, offset 0, flags [none], proto UDP (17), length 56)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx ackall seq 0 ser 9 (28)
+ 85 21:47:06.559070 IP (tos 0x0, ttl 254, id 52135, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 6 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 86 21:47:06.559143 IP (tos 0xc0, ttl 255, id 57990, offset 0, flags [none], proto ICMP (1), length 468)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ IP (tos 0x0, ttl 254, id 52135, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 6 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 87 21:47:08.697010 IP (tos 0x0, ttl 64, id 57991, offset 0, flags [none], proto UDP (17), length 320)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 1 pt call name-to-id "nneul" (292)
+ 88 21:47:08.697702 IP (tos 0x0, ttl 254, id 52136, offset 0, flags [DF], proto UDP (17), length 72)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx challenge seq 0 ser 1 (44)
+ 89 21:47:08.697886 IP (tos 0x0, ttl 64, id 57992, offset 0, flags [none], proto UDP (17), length 168)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx response seq 0 ser 2 (140)
+ 90 21:47:08.700814 IP (tos 0x0, ttl 254, id 52137, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 2 pt reply name-to-id ids: 5879 (36)
+ 91 21:47:08.701061 IP (tos 0x0, ttl 64, id 57993, offset 0, flags [none], proto UDP (17), length 320)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 3 pt call name-to-id "nneul" (292)
+ 92 21:47:08.702243 IP (tos 0x0, ttl 254, id 52138, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 3 pt reply name-to-id ids: 5879 (36)
+ 93 21:47:08.702422 IP (tos 0x0, ttl 64, id 57994, offset 0, flags [none], proto UDP (17), length 64)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 4 pt call id-to-name ids: <none!> (36)
+ 94 21:47:08.703045 IP (tos 0x0, ttl 254, id 52139, offset 0, flags [DF], proto UDP (17), length 60)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 4 pt reply id-to-name <none!> (32)
+ 95 21:47:08.703345 IP (tos 0x0, ttl 64, id 57995, offset 0, flags [none], proto UDP (17), length 64)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 5 pt call list-elements id 5879 (36)
+ 96 21:47:08.705113 IP (tos 0x0, ttl 254, id 52140, offset 0, flags [DF], proto UDP (17), length 108)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 5 pt reply list-entry (80)
+ 97 21:47:08.705296 IP (tos 0x0, ttl 64, id 57996, offset 0, flags [none], proto UDP (17), length 108)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 6 pt call id-to-name ids: -641 -569 -564 -478 -472 -441 -427 -424 -355 -348 -254 (80)
+ 98 21:47:08.738631 IP (tos 0x0, ttl 254, id 52141, offset 0, flags [DF], proto UDP (17), length 1500)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 6 pt reply id-to-name "nneul:cs301" "cc-staff" "obrennan:sysprog" "software" "bbc:mtw" [|pt] (1472)
+ 99 21:47:08.740294 IP (tos 0x0, ttl 254, id 52142, offset 0, flags [DF], proto UDP (17), length 1432)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 2 ser 7 (1404)
+ 100 21:47:08.740581 IP (tos 0x0, ttl 64, id 57997, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx ack seq 2 ser 7 first 2 serial 7 reason delay acked 2 (66)
+ 101 21:47:16.440550 IP (tos 0x0, ttl 254, id 52143, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 7 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 102 21:47:16.440614 IP (tos 0xc0, ttl 255, id 57998, offset 0, flags [none], proto ICMP (1), length 468)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ IP (tos 0x0, ttl 254, id 52143, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 7 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 103 21:47:22.963348 IP (tos 0x0, ttl 64, id 58000, offset 0, flags [none], proto UDP (17), length 320)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 1 pt call name-to-id "cc-staff" (292)
+ 104 21:47:22.964051 IP (tos 0x0, ttl 254, id 52144, offset 0, flags [DF], proto UDP (17), length 72)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx challenge seq 0 ser 1 (44)
+ 105 21:47:22.964237 IP (tos 0x0, ttl 64, id 58001, offset 0, flags [none], proto UDP (17), length 168)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx response seq 0 ser 2 (140)
+ 106 21:47:22.966418 IP (tos 0x0, ttl 254, id 52145, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 2 pt reply name-to-id ids: -569 (36)
+ 107 21:47:22.966644 IP (tos 0x0, ttl 64, id 58002, offset 0, flags [none], proto UDP (17), length 320)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 3 pt call name-to-id "cc-staff" (292)
+ 108 21:47:22.967810 IP (tos 0x0, ttl 254, id 52146, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 3 pt reply name-to-id ids: -569 (36)
+ 109 21:47:22.967987 IP (tos 0x0, ttl 64, id 58003, offset 0, flags [none], proto UDP (17), length 64)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 4 pt call id-to-name ids: <none!> (36)
+ 110 21:47:22.968556 IP (tos 0x0, ttl 254, id 52147, offset 0, flags [DF], proto UDP (17), length 60)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 4 pt reply id-to-name <none!> (32)
+ 111 21:47:22.969841 IP (tos 0x0, ttl 64, id 58004, offset 0, flags [none], proto UDP (17), length 64)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 5 pt call list-elements id -569 (36)
+ 112 21:47:22.971342 IP (tos 0x0, ttl 254, id 52148, offset 0, flags [DF], proto UDP (17), length 140)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 5 pt reply list-entry (112)
+ 113 21:47:22.971544 IP (tos 0x0, ttl 64, id 58005, offset 0, flags [none], proto UDP (17), length 140)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx data seq 1 ser 6 pt call id-to-name ids: 5002 5004 5013 5016 5021 5022 5150 5171 5195 5211 5220 5339 5408 5879 13081 17342 19999 20041 20176 (112)
+ 114 21:47:23.005534 IP (tos 0x0, ttl 254, id 52149, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 1 ser 6 pt reply id-to-name "rms" "rwa" "uetrecht" "dwd" "kjh" [|pt] (1444)
+ 115 21:47:23.006602 IP (tos 0x0, ttl 254, id 52150, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 2 ser 7 (1444)
+ 116 21:47:23.007048 IP (tos 0x0, ttl 64, id 58006, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx ack seq 2 ser 7 first 2 serial 7 reason delay acked 2 (66)
+ 117 21:47:23.007745 IP (tos 0x0, ttl 254, id 52151, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 3 ser 8 (1444)
+ 118 21:47:23.008408 IP (tos 0x0, ttl 254, id 52152, offset 0, flags [DF], proto UDP (17), length 676)
+ 131.151.1.59.7002 > 131.151.32.21.1799: rx data seq 4 ser 9 (648)
+ 119 21:47:23.008550 IP (tos 0x0, ttl 64, id 58007, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7002: rx ack seq 4 ser 8 first 4 serial 9 reason delay acked 4 (66)
+ 120 21:47:26.569758 IP (tos 0x0, ttl 254, id 52153, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 8 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 121 21:47:26.569822 IP (tos 0xc0, ttl 255, id 58008, offset 0, flags [none], proto ICMP (1), length 468)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ IP (tos 0x0, ttl 254, id 52153, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 8 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 122 21:47:31.825501 IP (tos 0x0, ttl 64, id 58009, offset 0, flags [none], proto UDP (17), length 72)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx data seq 1 ser 1613 fs call fetch-status fid 536977399/16/15 (44)
+ 123 21:47:31.827985 IP (tos 0x0, ttl 254, id 572, offset 0, flags [DF], proto UDP (17), length 176)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 1 ser 2522 fs reply fetch-status (148)
+ 124 21:47:31.829082 IP (tos 0x0, ttl 64, id 58010, offset 0, flags [none], proto UDP (17), length 80)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx data seq 1 ser 1614 fs call fetch-data fid 536977399/16/15 offset 0 length 65536 (52)
+ 125 21:47:31.872588 IP (tos 0x0, ttl 254, id 573, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 1 ser 2523 fs reply fetch-data (1472)
+ 126 21:47:31.873045 IP (tos 0x0, ttl 254, id 573, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 127 21:47:31.873238 IP (tos 0x0, ttl 254, id 573, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 128 21:47:31.873323 IP (tos 0x0, ttl 254, id 573, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 129 21:47:31.874199 IP (tos 0x0, ttl 254, id 574, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 2 ser 2524 (1472)
+ 130 21:47:31.874320 IP (tos 0x0, ttl 254, id 574, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 131 21:47:31.874444 IP (tos 0x0, ttl 254, id 574, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 132 21:47:31.874527 IP (tos 0x0, ttl 254, id 574, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 133 21:47:31.874656 IP (tos 0x0, ttl 64, id 58011, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 2 ser 1615 first 2 serial 2524 reason ack requested acked 2 (66)
+ 134 21:47:31.911711 IP (tos 0x0, ttl 254, id 575, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 3 ser 2525 (1472)
+ 135 21:47:31.911830 IP (tos 0x0, ttl 254, id 575, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 136 21:47:31.911963 IP (tos 0x0, ttl 254, id 575, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 137 21:47:31.912047 IP (tos 0x0, ttl 254, id 575, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 138 21:47:31.912793 IP (tos 0x0, ttl 254, id 576, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 4 ser 2526 (1472)
+ 139 21:47:31.912917 IP (tos 0x0, ttl 254, id 576, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 140 21:47:31.913050 IP (tos 0x0, ttl 254, id 576, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 141 21:47:31.913123 IP (tos 0x0, ttl 254, id 576, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 142 21:47:31.913290 IP (tos 0x0, ttl 64, id 58012, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 4 ser 1616 first 4 serial 2526 reason ack requested acked 4 (66)
+ 143 21:47:31.914161 IP (tos 0x0, ttl 254, id 577, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 5 ser 2527 (1472)
+ 144 21:47:31.914283 IP (tos 0x0, ttl 254, id 577, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 145 21:47:31.914405 IP (tos 0x0, ttl 254, id 577, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 146 21:47:31.914488 IP (tos 0x0, ttl 254, id 577, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 147 21:47:31.915372 IP (tos 0x0, ttl 254, id 578, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 6 ser 2528 (1472)
+ 148 21:47:31.915494 IP (tos 0x0, ttl 254, id 578, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 149 21:47:31.915618 IP (tos 0x0, ttl 254, id 578, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 150 21:47:31.915702 IP (tos 0x0, ttl 254, id 578, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 151 21:47:31.915835 IP (tos 0x0, ttl 64, id 58013, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 6 ser 1617 first 6 serial 2528 reason ack requested acked 6 (66)
+ 152 21:47:31.921854 IP (tos 0x0, ttl 254, id 579, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 7 ser 2529 (1472)
+ 153 21:47:31.921976 IP (tos 0x0, ttl 254, id 579, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 154 21:47:31.922099 IP (tos 0x0, ttl 254, id 579, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 155 21:47:31.922182 IP (tos 0x0, ttl 254, id 579, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 156 21:47:31.923223 IP (tos 0x0, ttl 254, id 580, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 8 ser 2530 (1472)
+ 157 21:47:31.923347 IP (tos 0x0, ttl 254, id 580, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 158 21:47:31.923470 IP (tos 0x0, ttl 254, id 580, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 159 21:47:31.923553 IP (tos 0x0, ttl 254, id 580, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 160 21:47:31.923698 IP (tos 0x0, ttl 64, id 58014, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 8 ser 1618 first 8 serial 2530 reason ack requested acked 8 (66)
+ 161 21:47:31.924962 IP (tos 0x0, ttl 254, id 581, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 9 ser 2531 (1472)
+ 162 21:47:31.925085 IP (tos 0x0, ttl 254, id 581, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 163 21:47:31.925207 IP (tos 0x0, ttl 254, id 581, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 164 21:47:31.925291 IP (tos 0x0, ttl 254, id 581, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 165 21:47:31.926314 IP (tos 0x0, ttl 254, id 582, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 10 ser 2532 (1472)
+ 166 21:47:31.926436 IP (tos 0x0, ttl 254, id 582, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 167 21:47:31.926560 IP (tos 0x0, ttl 254, id 582, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 168 21:47:31.926641 IP (tos 0x0, ttl 254, id 582, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 169 21:47:31.926761 IP (tos 0x0, ttl 64, id 58015, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 10 ser 1619 first 10 serial 2532 reason ack requested acked 10 (66)
+ 170 21:47:31.927670 IP (tos 0x0, ttl 254, id 583, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 11 ser 2533 (1472)
+ 171 21:47:31.927794 IP (tos 0x0, ttl 254, id 583, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 172 21:47:31.927917 IP (tos 0x0, ttl 254, id 583, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 173 21:47:31.927999 IP (tos 0x0, ttl 254, id 583, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 174 21:47:31.928955 IP (tos 0x0, ttl 254, id 584, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 12 ser 2534 (1472)
+ 175 21:47:31.929070 IP (tos 0x0, ttl 254, id 584, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 176 21:47:31.929090 IP (tos 0x0, ttl 254, id 584, offset 2960, flags [DF], proto UDP (17), length 452)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 177 21:47:31.929216 IP (tos 0x0, ttl 64, id 58016, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 12 ser 1620 first 12 serial 2534 reason delay acked 12 (66)
+ 178 21:47:31.931311 IP (tos 0x0, ttl 64, id 58017, offset 0, flags [none], proto UDP (17), length 80)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx data seq 1 ser 1621 fs call fetch-data fid 536977399/16/15 offset 131072 length 56972 (52)
+ 179 21:47:31.946920 IP (tos 0x0, ttl 254, id 585, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 1 ser 2535 fs reply fetch-data (1472)
+ 180 21:47:31.947042 IP (tos 0x0, ttl 254, id 585, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 181 21:47:31.947179 IP (tos 0x0, ttl 254, id 585, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 182 21:47:31.947258 IP (tos 0x0, ttl 254, id 585, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 183 21:47:31.948245 IP (tos 0x0, ttl 254, id 586, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 2 ser 2536 (1472)
+ 184 21:47:31.948368 IP (tos 0x0, ttl 254, id 586, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 185 21:47:31.948492 IP (tos 0x0, ttl 254, id 586, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 186 21:47:31.948574 IP (tos 0x0, ttl 254, id 586, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 187 21:47:31.948714 IP (tos 0x0, ttl 64, id 58018, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 2 ser 1622 first 2 serial 2536 reason ack requested acked 2 (66)
+ 188 21:47:31.949601 IP (tos 0x0, ttl 254, id 587, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 3 ser 2537 (1472)
+ 189 21:47:31.949715 IP (tos 0x0, ttl 254, id 587, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 190 21:47:31.949838 IP (tos 0x0, ttl 254, id 587, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 191 21:47:31.949921 IP (tos 0x0, ttl 254, id 587, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 192 21:47:31.950714 IP (tos 0x0, ttl 254, id 588, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 4 ser 2538 (1472)
+ 193 21:47:31.950835 IP (tos 0x0, ttl 254, id 588, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 194 21:47:31.950959 IP (tos 0x0, ttl 254, id 588, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 195 21:47:31.951042 IP (tos 0x0, ttl 254, id 588, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 196 21:47:31.951177 IP (tos 0x0, ttl 64, id 58019, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 4 ser 1623 first 4 serial 2538 reason ack requested acked 4 (66)
+ 197 21:47:31.952808 IP (tos 0x0, ttl 254, id 589, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 5 ser 2539 (1472)
+ 198 21:47:31.952930 IP (tos 0x0, ttl 254, id 589, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 199 21:47:31.953063 IP (tos 0x0, ttl 254, id 589, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 200 21:47:31.953145 IP (tos 0x0, ttl 254, id 589, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 201 21:47:31.954021 IP (tos 0x0, ttl 254, id 590, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 6 ser 2540 (1472)
+ 202 21:47:31.954153 IP (tos 0x0, ttl 254, id 590, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 203 21:47:31.954266 IP (tos 0x0, ttl 254, id 590, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 204 21:47:31.954351 IP (tos 0x0, ttl 254, id 590, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 205 21:47:31.954501 IP (tos 0x0, ttl 64, id 58020, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 6 ser 1624 first 6 serial 2540 reason ack requested acked 6 (66)
+ 206 21:47:31.955104 IP (tos 0x0, ttl 254, id 591, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 7 ser 2541 (1472)
+ 207 21:47:31.955226 IP (tos 0x0, ttl 254, id 591, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 208 21:47:31.955349 IP (tos 0x0, ttl 254, id 591, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 209 21:47:31.955433 IP (tos 0x0, ttl 254, id 591, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 210 21:47:31.956561 IP (tos 0x0, ttl 254, id 592, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 8 ser 2542 (1472)
+ 211 21:47:31.956683 IP (tos 0x0, ttl 254, id 592, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 212 21:47:31.956807 IP (tos 0x0, ttl 254, id 592, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 213 21:47:31.956897 IP (tos 0x0, ttl 254, id 592, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 214 21:47:31.957074 IP (tos 0x0, ttl 64, id 58021, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 8 ser 1625 first 8 serial 2542 reason ack requested acked 8 (66)
+ 215 21:47:31.958291 IP (tos 0x0, ttl 254, id 593, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 9 ser 2543 (1472)
+ 216 21:47:31.958413 IP (tos 0x0, ttl 254, id 593, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 217 21:47:31.958536 IP (tos 0x0, ttl 254, id 593, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 218 21:47:31.958620 IP (tos 0x0, ttl 254, id 593, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 219 21:47:31.959648 IP (tos 0x0, ttl 254, id 594, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 10 ser 2544 (1472)
+ 220 21:47:31.959768 IP (tos 0x0, ttl 254, id 594, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 221 21:47:31.959881 IP (tos 0x0, ttl 254, id 594, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 222 21:47:31.959978 IP (tos 0x0, ttl 254, id 594, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 223 21:47:31.959997 IP (tos 0x0, ttl 254, id 595, offset 0, flags [DF], proto UDP (17), length 512)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 11 ser 2545 (484)
+ 224 21:47:31.960153 IP (tos 0x0, ttl 64, id 58022, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 10 ser 1626 first 10 serial 2544 reason ack requested acked 10 (66)
+ 225 21:47:31.968719 IP (tos 0x0, ttl 64, id 58023, offset 0, flags [none], proto UDP (17), length 80)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx data seq 1 ser 1627 fs call fetch-data fid 536977399/16/15 offset 65536 length 65536 (52)
+ 226 21:47:31.973708 IP (tos 0x0, ttl 254, id 596, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 1 ser 2546 fs reply fetch-data (1472)
+ 227 21:47:31.973826 IP (tos 0x0, ttl 254, id 596, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 228 21:47:31.973953 IP (tos 0x0, ttl 254, id 596, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 229 21:47:31.974036 IP (tos 0x0, ttl 254, id 596, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 230 21:47:31.975130 IP (tos 0x0, ttl 254, id 597, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 2 ser 2547 (1472)
+ 231 21:47:31.975251 IP (tos 0x0, ttl 254, id 597, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 232 21:47:31.975374 IP (tos 0x0, ttl 254, id 597, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 233 21:47:31.975457 IP (tos 0x0, ttl 254, id 597, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 234 21:47:31.975644 IP (tos 0x0, ttl 64, id 58024, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 2 ser 1628 first 2 serial 2547 reason ack requested acked 2 (66)
+ 235 21:47:31.976494 IP (tos 0x0, ttl 254, id 598, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 3 ser 2548 (1472)
+ 236 21:47:31.976614 IP (tos 0x0, ttl 254, id 598, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 237 21:47:31.976732 IP (tos 0x0, ttl 254, id 598, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 238 21:47:31.976816 IP (tos 0x0, ttl 254, id 598, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 239 21:47:31.977547 IP (tos 0x0, ttl 254, id 599, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 4 ser 2549 (1472)
+ 240 21:47:31.977658 IP (tos 0x0, ttl 254, id 599, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 241 21:47:31.977781 IP (tos 0x0, ttl 254, id 599, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 242 21:47:31.977865 IP (tos 0x0, ttl 254, id 599, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 243 21:47:31.978006 IP (tos 0x0, ttl 64, id 58025, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 4 ser 1629 first 4 serial 2549 reason ack requested acked 4 (66)
+ 244 21:47:31.978903 IP (tos 0x0, ttl 254, id 600, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 5 ser 2550 (1472)
+ 245 21:47:31.979022 IP (tos 0x0, ttl 254, id 600, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 246 21:47:31.979152 IP (tos 0x0, ttl 254, id 600, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 247 21:47:31.979234 IP (tos 0x0, ttl 254, id 600, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 248 21:47:31.980103 IP (tos 0x0, ttl 254, id 601, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 6 ser 2551 (1472)
+ 249 21:47:31.980225 IP (tos 0x0, ttl 254, id 601, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 250 21:47:31.980348 IP (tos 0x0, ttl 254, id 601, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 251 21:47:31.980442 IP (tos 0x0, ttl 254, id 601, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 252 21:47:31.980584 IP (tos 0x0, ttl 64, id 58026, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 6 ser 1630 first 6 serial 2551 reason ack requested acked 6 (66)
+ 253 21:47:31.981466 IP (tos 0x0, ttl 254, id 602, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 7 ser 2552 (1472)
+ 254 21:47:31.981612 IP (tos 0x0, ttl 254, id 602, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 255 21:47:31.981736 IP (tos 0x0, ttl 254, id 602, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 256 21:47:31.981819 IP (tos 0x0, ttl 254, id 602, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 257 21:47:31.982687 IP (tos 0x0, ttl 254, id 603, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 8 ser 2553 (1472)
+ 258 21:47:31.982809 IP (tos 0x0, ttl 254, id 603, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 259 21:47:31.982931 IP (tos 0x0, ttl 254, id 603, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 260 21:47:31.983013 IP (tos 0x0, ttl 254, id 603, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 261 21:47:31.983173 IP (tos 0x0, ttl 64, id 58027, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 8 ser 1631 first 8 serial 2553 reason ack requested acked 8 (66)
+ 262 21:47:31.984600 IP (tos 0x0, ttl 254, id 604, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 9 ser 2554 (1472)
+ 263 21:47:31.984721 IP (tos 0x0, ttl 254, id 604, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 264 21:47:31.984846 IP (tos 0x0, ttl 254, id 604, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 265 21:47:31.984929 IP (tos 0x0, ttl 254, id 604, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 266 21:47:31.985969 IP (tos 0x0, ttl 254, id 605, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 10 ser 2555 (1472)
+ 267 21:47:31.986089 IP (tos 0x0, ttl 254, id 605, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 268 21:47:31.986212 IP (tos 0x0, ttl 254, id 605, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 269 21:47:31.986306 IP (tos 0x0, ttl 254, id 605, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 270 21:47:31.986455 IP (tos 0x0, ttl 64, id 58028, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 10 ser 1632 first 10 serial 2555 reason ack requested acked 10 (66)
+ 271 21:47:31.987315 IP (tos 0x0, ttl 254, id 606, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 11 ser 2556 (1472)
+ 272 21:47:31.987436 IP (tos 0x0, ttl 254, id 606, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 273 21:47:31.987559 IP (tos 0x0, ttl 254, id 606, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 274 21:47:31.987643 IP (tos 0x0, ttl 254, id 606, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 275 21:47:31.988562 IP (tos 0x0, ttl 254, id 607, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 12 ser 2557 (1472)
+ 276 21:47:31.988678 IP (tos 0x0, ttl 254, id 607, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 277 21:47:31.988696 IP (tos 0x0, ttl 254, id 607, offset 2960, flags [DF], proto UDP (17), length 452)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 278 21:47:31.989166 IP (tos 0x0, ttl 64, id 58029, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 12 ser 1633 first 12 serial 2557 reason delay acked 12 (66)
+ 279 21:47:36.960670 IP (tos 0x0, ttl 254, id 52154, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 9 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 280 21:47:36.960736 IP (tos 0xc0, ttl 255, id 58030, offset 0, flags [none], proto ICMP (1), length 468)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ IP (tos 0x0, ttl 254, id 52154, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 9 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 281 21:47:38.824245 IP (tos 0x0, ttl 254, id 3375, offset 0, flags [DF], proto UDP (17), length 60)
+ 131.151.1.59.7000 > 131.151.32.91.7001: rx data seq 1 ser 2314 cb call probe (32)
+ 282 21:47:38.832720 IP (tos 0x0, ttl 128, id 45396, offset 0, flags [none], proto UDP (17), length 56)
+ 131.151.32.91.7001 > 131.151.1.59.7000: rx data seq 1 ser 1155 (28)
+ 283 21:47:38.832736 IP (tos 0x0, ttl 128, id 45396, offset 0, flags [none], proto UDP (17), length 56)
+ 131.151.32.91.7001 > 131.151.1.59.7000: rx data seq 1 ser 1155 (28)
+ 284 21:47:39.340205 IP (tos 0x0, ttl 254, id 3376, offset 0, flags [DF], proto UDP (17), length 89)
+ 131.151.1.59.7000 > 131.151.32.91.7001: rx ack seq 0 ser 2315 first 2 serial 1155 reason delay (61)
+ 285 21:47:47.600747 IP (tos 0x0, ttl 254, id 52155, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 10 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 286 21:47:47.600817 IP (tos 0xc0, ttl 255, id 58039, offset 0, flags [none], proto ICMP (1), length 468)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ IP (tos 0x0, ttl 254, id 52155, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 10 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 287 21:47:50.558379 IP (tos 0x0, ttl 64, id 58041, offset 0, flags [none], proto UDP (17), length 72)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx data seq 1 ser 1634 fs call fetch-status fid 536977399/30/22 (44)
+ 288 21:47:50.559765 IP (tos 0x0, ttl 254, id 608, offset 0, flags [DF], proto UDP (17), length 176)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 1 ser 2558 fs reply fetch-status (148)
+ 289 21:47:50.560341 IP (tos 0x0, ttl 64, id 58042, offset 0, flags [none], proto UDP (17), length 80)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx data seq 1 ser 1635 fs call fetch-data fid 536977399/30/22 offset 0 length 65536 (52)
+ 290 21:47:50.586027 IP (tos 0x0, ttl 254, id 609, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 1 ser 2559 fs reply fetch-data (1472)
+ 291 21:47:50.586148 IP (tos 0x0, ttl 254, id 609, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 292 21:47:50.586270 IP (tos 0x0, ttl 254, id 609, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 293 21:47:50.586353 IP (tos 0x0, ttl 254, id 609, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 294 21:47:50.598397 IP (tos 0x0, ttl 254, id 610, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 2 ser 2560 (1472)
+ 295 21:47:50.598517 IP (tos 0x0, ttl 254, id 610, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 296 21:47:50.598641 IP (tos 0x0, ttl 254, id 610, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 297 21:47:50.598723 IP (tos 0x0, ttl 254, id 610, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 298 21:47:50.599028 IP (tos 0x0, ttl 64, id 58043, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 2 ser 1636 first 2 serial 2560 reason ack requested acked 2 (66)
+ 299 21:47:50.613313 IP (tos 0x0, ttl 254, id 611, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 3 ser 2561 (1472)
+ 300 21:47:50.613434 IP (tos 0x0, ttl 254, id 611, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 301 21:47:50.613557 IP (tos 0x0, ttl 254, id 611, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 302 21:47:50.613640 IP (tos 0x0, ttl 254, id 611, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 303 21:47:50.614408 IP (tos 0x0, ttl 254, id 612, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 4 ser 2562 (1472)
+ 304 21:47:50.614529 IP (tos 0x0, ttl 254, id 612, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 305 21:47:50.614653 IP (tos 0x0, ttl 254, id 612, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 306 21:47:50.614736 IP (tos 0x0, ttl 254, id 612, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 307 21:47:50.614884 IP (tos 0x0, ttl 64, id 58044, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 4 ser 1637 first 4 serial 2562 reason ack requested acked 4 (66)
+ 308 21:47:50.615759 IP (tos 0x0, ttl 254, id 613, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 5 ser 2563 (1472)
+ 309 21:47:50.615881 IP (tos 0x0, ttl 254, id 613, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 310 21:47:50.616003 IP (tos 0x0, ttl 254, id 613, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 311 21:47:50.616086 IP (tos 0x0, ttl 254, id 613, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 312 21:47:50.617064 IP (tos 0x0, ttl 254, id 614, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 6 ser 2564 (1472)
+ 313 21:47:50.617195 IP (tos 0x0, ttl 254, id 614, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 314 21:47:50.617309 IP (tos 0x0, ttl 254, id 614, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 315 21:47:50.617392 IP (tos 0x0, ttl 254, id 614, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 316 21:47:50.617571 IP (tos 0x0, ttl 64, id 58045, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 6 ser 1638 first 6 serial 2564 reason ack requested acked 6 (66)
+ 317 21:47:50.618132 IP (tos 0x0, ttl 254, id 615, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 7 ser 2565 (1472)
+ 318 21:47:50.618264 IP (tos 0x0, ttl 254, id 615, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 319 21:47:50.618388 IP (tos 0x0, ttl 254, id 615, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 320 21:47:50.618470 IP (tos 0x0, ttl 254, id 615, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 321 21:47:50.619700 IP (tos 0x0, ttl 254, id 616, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 8 ser 2566 (1472)
+ 322 21:47:50.619811 IP (tos 0x0, ttl 254, id 616, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 323 21:47:50.619936 IP (tos 0x0, ttl 254, id 616, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 324 21:47:50.620017 IP (tos 0x0, ttl 254, id 616, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 325 21:47:50.620153 IP (tos 0x0, ttl 64, id 58046, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 8 ser 1639 first 8 serial 2566 reason ack requested acked 8 (66)
+ 326 21:47:50.621466 IP (tos 0x0, ttl 254, id 617, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 9 ser 2567 (1472)
+ 327 21:47:50.621587 IP (tos 0x0, ttl 254, id 617, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 328 21:47:50.621710 IP (tos 0x0, ttl 254, id 617, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 329 21:47:50.621794 IP (tos 0x0, ttl 254, id 617, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 330 21:47:50.622905 IP (tos 0x0, ttl 254, id 618, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 10 ser 2568 (1472)
+ 331 21:47:50.623020 IP (tos 0x0, ttl 254, id 618, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 332 21:47:50.623158 IP (tos 0x0, ttl 254, id 618, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 333 21:47:50.623227 IP (tos 0x0, ttl 254, id 618, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 334 21:47:50.623423 IP (tos 0x0, ttl 64, id 58047, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 10 ser 1640 first 10 serial 2568 reason ack requested acked 10 (66)
+ 335 21:47:50.624233 IP (tos 0x0, ttl 254, id 619, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 11 ser 2569 (1472)
+ 336 21:47:50.624358 IP (tos 0x0, ttl 254, id 619, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 337 21:47:50.624479 IP (tos 0x0, ttl 254, id 619, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 338 21:47:50.624562 IP (tos 0x0, ttl 254, id 619, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 339 21:47:50.625618 IP (tos 0x0, ttl 254, id 620, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 12 ser 2570 (1472)
+ 340 21:47:50.625734 IP (tos 0x0, ttl 254, id 620, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 341 21:47:50.625753 IP (tos 0x0, ttl 254, id 620, offset 2960, flags [DF], proto UDP (17), length 452)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 342 21:47:50.625870 IP (tos 0x0, ttl 64, id 58048, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 12 ser 1641 first 12 serial 2570 reason delay acked 12 (66)
+ 343 21:47:50.627406 IP (tos 0x0, ttl 64, id 58049, offset 0, flags [none], proto UDP (17), length 80)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx data seq 1 ser 1642 fs call fetch-data fid 536977399/30/22 offset 65536 length 26996 (52)
+ 344 21:47:50.630017 IP (tos 0x0, ttl 254, id 621, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 1 ser 2571 fs reply fetch-data (1472)
+ 345 21:47:50.630141 IP (tos 0x0, ttl 254, id 621, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 346 21:47:50.630263 IP (tos 0x0, ttl 254, id 621, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 347 21:47:50.630347 IP (tos 0x0, ttl 254, id 621, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 348 21:47:50.631301 IP (tos 0x0, ttl 254, id 622, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 2 ser 2572 (1472)
+ 349 21:47:50.631423 IP (tos 0x0, ttl 254, id 622, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 350 21:47:50.631547 IP (tos 0x0, ttl 254, id 622, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 351 21:47:50.631630 IP (tos 0x0, ttl 254, id 622, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 352 21:47:50.631783 IP (tos 0x0, ttl 64, id 58050, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 2 ser 1643 first 2 serial 2572 reason ack requested acked 2 (66)
+ 353 21:47:50.633172 IP (tos 0x0, ttl 254, id 623, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 3 ser 2573 (1472)
+ 354 21:47:50.633294 IP (tos 0x0, ttl 254, id 623, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 355 21:47:50.633417 IP (tos 0x0, ttl 254, id 623, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 356 21:47:50.633500 IP (tos 0x0, ttl 254, id 623, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 357 21:47:50.634225 IP (tos 0x0, ttl 254, id 624, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 4 ser 2574 (1472)
+ 358 21:47:50.634348 IP (tos 0x0, ttl 254, id 624, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 359 21:47:50.634470 IP (tos 0x0, ttl 254, id 624, offset 2960, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 360 21:47:50.634554 IP (tos 0x0, ttl 254, id 624, offset 4440, flags [DF], proto UDP (17), length 1280)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 361 21:47:50.634697 IP (tos 0x0, ttl 64, id 58051, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 4 ser 1644 first 4 serial 2574 reason ack requested acked 4 (66)
+ 362 21:47:50.635315 IP (tos 0x0, ttl 254, id 625, offset 0, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 5 ser 2575 (1472)
+ 363 21:47:50.635437 IP (tos 0x0, ttl 254, id 625, offset 1480, flags [+, DF], proto UDP (17), length 1500)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 364 21:47:50.635545 IP (tos 0x0, ttl 254, id 625, offset 2960, flags [DF], proto UDP (17), length 1440)
+ 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 365 21:47:50.635555 IP (tos 0x0, ttl 254, id 626, offset 0, flags [DF], proto UDP (17), length 176)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 6 ser 2576 (148)
+ 366 21:47:50.635705 IP (tos 0x0, ttl 64, id 58052, offset 0, flags [none], proto UDP (17), length 95)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 6 ser 1645 first 5 serial 2576 reason delay acked 5-6 (67)
+ 367 21:47:53.906701 IP (tos 0x0, ttl 64, id 58053, offset 0, flags [none], proto UDP (17), length 72)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx data seq 1 ser 1 fs call fetch-status fid 536977399/88/52 (44)
+ 368 21:47:53.946230 IP (tos 0x0, ttl 254, id 627, offset 0, flags [DF], proto UDP (17), length 176)
+ 131.151.1.146.7000 > 131.151.32.21.7001: rx data seq 1 ser 1 fs reply fetch-status (148)
+ 369 21:47:54.163340 IP (tos 0x0, ttl 64, id 58054, offset 0, flags [none], proto UDP (17), length 60)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 32
+ 370 21:47:54.338581 IP (tos 0x0, ttl 64, id 58055, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.7001 > 131.151.1.146.7000: rx ack seq 0 ser 2 first 2 serial 1 reason delay (65)
+ 371 21:47:54.799371 IP (tos 0x0, ttl 254, id 52156, offset 0, flags [DF], proto UDP (17), length 89)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 61
+ 372 21:47:55.159236 IP (tos 0x0, ttl 254, id 52157, offset 0, flags [DF], proto UDP (17), length 60)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 32
+ 373 21:47:55.165136 IP (tos 0x0, ttl 64, id 58056, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 374 21:47:55.166071 IP (tos 0x0, ttl 254, id 52158, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 375 21:47:55.166321 IP (tos 0x0, ttl 64, id 58057, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 376 21:47:55.166447 IP (tos 0x0, ttl 64, id 58058, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 377 21:47:55.199519 IP (tos 0x0, ttl 254, id 52159, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 378 21:47:55.199686 IP (tos 0x0, ttl 64, id 58059, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 379 21:47:55.199809 IP (tos 0x0, ttl 64, id 58060, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 380 21:47:55.200825 IP (tos 0x0, ttl 254, id 52160, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 381 21:47:55.200977 IP (tos 0x0, ttl 64, id 58061, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 382 21:47:55.201325 IP (tos 0x0, ttl 64, id 58062, offset 0, flags [none], proto UDP (17), length 164)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 136
+ 383 21:47:55.202977 IP (tos 0x0, ttl 254, id 52161, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 384 21:47:55.251632 IP (tos 0x0, ttl 254, id 52162, offset 0, flags [DF], proto UDP (17), length 1500)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1472
+ 385 21:47:55.252731 IP (tos 0x0, ttl 254, id 52163, offset 0, flags [DF], proto UDP (17), length 1500)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1472
+ 386 21:47:55.253147 IP (tos 0x0, ttl 64, id 58063, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 387 21:47:55.253858 IP (tos 0x0, ttl 254, id 52164, offset 0, flags [DF], proto UDP (17), length 1500)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1472
+ 388 21:47:55.254848 IP (tos 0x0, ttl 254, id 52165, offset 0, flags [DF], proto UDP (17), length 1500)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1472
+ 389 21:47:55.255035 IP (tos 0x0, ttl 64, id 58064, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 390 21:47:55.255955 IP (tos 0x0, ttl 254, id 52166, offset 0, flags [DF], proto UDP (17), length 1500)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1472
+ 391 21:47:55.257190 IP (tos 0x0, ttl 254, id 52167, offset 0, flags [DF], proto UDP (17), length 60)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 32
+ 392 21:47:55.257491 IP (tos 0x0, ttl 64, id 58065, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 393 21:47:55.258405 IP (tos 0x0, ttl 254, id 52168, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 394 21:47:55.262318 IP (tos 0x0, ttl 64, id 58066, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 395 21:47:55.262601 IP (tos 0x0, ttl 64, id 58067, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 396 21:47:55.263258 IP (tos 0x0, ttl 254, id 52169, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 397 21:47:55.263401 IP (tos 0x0, ttl 64, id 58068, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 398 21:47:55.263685 IP (tos 0x0, ttl 64, id 58069, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 399 21:47:55.264640 IP (tos 0x0, ttl 254, id 52170, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 400 21:47:55.264850 IP (tos 0x0, ttl 64, id 58070, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 401 21:47:55.264965 IP (tos 0x0, ttl 64, id 58071, offset 0, flags [none], proto UDP (17), length 172)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 144
+ 402 21:47:55.267052 IP (tos 0x0, ttl 254, id 52171, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 403 21:47:55.796405 IP (tos 0x0, ttl 254, id 52172, offset 0, flags [DF], proto UDP (17), length 89)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 61
+ 404 21:47:57.009474 IP (tos 0x0, ttl 64, id 58072, offset 0, flags [none], proto UDP (17), length 140)
+ 131.151.32.21.7001 > 131.151.1.70.7000: rx data seq 1 ser 103 fs call give-cbs (112)
+ 405 21:47:57.010421 IP (tos 0x0, ttl 254, id 54693, offset 0, flags [DF], proto UDP (17), length 56)
+ 131.151.1.70.7000 > 131.151.32.21.7001: rx data seq 1 ser 56 (28)
+ 406 21:47:57.340299 IP (tos 0x0, ttl 254, id 52173, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 407 21:47:57.341607 IP (tos 0x0, ttl 254, id 52174, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 408 21:47:57.341937 IP (tos 0x0, ttl 64, id 58073, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 409 21:47:57.342924 IP (tos 0x0, ttl 254, id 52175, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 410 21:47:57.344154 IP (tos 0x0, ttl 254, id 52176, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 411 21:47:57.345387 IP (tos 0x0, ttl 254, id 52177, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 412 21:47:57.345878 IP (tos 0x0, ttl 64, id 58074, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 413 21:47:57.346737 IP (tos 0x0, ttl 254, id 52178, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 414 21:47:57.346990 IP (tos 0x0, ttl 64, id 58075, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 415 21:47:57.348062 IP (tos 0x0, ttl 254, id 52179, offset 0, flags [DF], proto UDP (17), length 132)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 104
+ 416 21:47:57.348264 IP (tos 0x0, ttl 64, id 58076, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 417 21:47:57.408506 IP (tos 0x0, ttl 64, id 58077, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.7001 > 131.151.1.70.7000: rx ack seq 0 ser 104 first 2 serial 56 reason delay (65)
+ 418 21:47:57.436536 IP (tos 0x0, ttl 254, id 52180, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 419 21:47:57.438563 IP (tos 0x0, ttl 254, id 52181, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 420 21:47:57.439547 IP (tos 0x0, ttl 64, id 58078, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 421 21:47:57.440789 IP (tos 0x0, ttl 254, id 52182, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 422 21:47:57.441114 IP (tos 0x0, ttl 64, id 58079, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 423 21:47:57.460401 IP (tos 0x0, ttl 254, id 52183, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 424 21:47:57.461517 IP (tos 0x0, ttl 254, id 52184, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 425 21:47:57.461928 IP (tos 0x0, ttl 64, id 58080, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 426 21:47:57.462859 IP (tos 0x0, ttl 254, id 52185, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 427 21:47:57.463197 IP (tos 0x0, ttl 64, id 58081, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 428 21:47:57.474817 IP (tos 0x0, ttl 254, id 52186, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 429 21:47:57.475890 IP (tos 0x0, ttl 254, id 52187, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 430 21:47:57.476056 IP (tos 0x0, ttl 64, id 58082, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 431 21:47:57.477328 IP (tos 0x0, ttl 254, id 52188, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 432 21:47:57.477777 IP (tos 0x0, ttl 64, id 58083, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 433 21:47:57.487546 IP (tos 0x0, ttl 254, id 52189, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 434 21:47:57.488558 IP (tos 0x0, ttl 254, id 52190, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 435 21:47:57.489407 IP (tos 0x0, ttl 64, id 58084, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 436 21:47:57.489821 IP (tos 0x0, ttl 254, id 52191, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 437 21:47:57.490288 IP (tos 0x0, ttl 64, id 58085, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 438 21:47:57.492785 IP (tos 0x0, ttl 254, id 52192, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 439 21:47:57.493778 IP (tos 0x0, ttl 254, id 52193, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 440 21:47:57.495046 IP (tos 0x0, ttl 254, id 52194, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 441 21:47:57.497159 IP (tos 0x0, ttl 64, id 58086, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 442 21:47:57.497606 IP (tos 0x0, ttl 64, id 58087, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 443 21:47:57.514885 IP (tos 0x0, ttl 254, id 52195, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 444 21:47:57.515935 IP (tos 0x0, ttl 254, id 52196, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 445 21:47:57.516104 IP (tos 0x0, ttl 64, id 58088, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 446 21:47:57.517280 IP (tos 0x0, ttl 254, id 52197, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 447 21:47:57.517812 IP (tos 0x0, ttl 64, id 58089, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 448 21:47:57.520085 IP (tos 0x0, ttl 254, id 52198, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 449 21:47:57.521128 IP (tos 0x0, ttl 254, id 52199, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 450 21:47:57.522427 IP (tos 0x0, ttl 254, id 52200, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 451 21:47:57.530098 IP (tos 0x0, ttl 64, id 58090, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 452 21:47:57.530654 IP (tos 0x0, ttl 64, id 58091, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 453 21:47:57.533186 IP (tos 0x0, ttl 254, id 52201, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 454 21:47:57.534230 IP (tos 0x0, ttl 254, id 52202, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 455 21:47:57.534487 IP (tos 0x0, ttl 64, id 58092, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 456 21:47:57.535724 IP (tos 0x0, ttl 254, id 52203, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 457 21:47:57.540121 IP (tos 0x0, ttl 64, id 58093, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 458 21:47:57.542840 IP (tos 0x0, ttl 254, id 52204, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 459 21:47:57.544805 IP (tos 0x0, ttl 254, id 52205, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 460 21:47:57.545061 IP (tos 0x0, ttl 64, id 58094, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 461 21:47:57.547074 IP (tos 0x0, ttl 254, id 52206, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 462 21:47:57.547384 IP (tos 0x0, ttl 64, id 58095, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 463 21:47:57.549677 IP (tos 0x0, ttl 254, id 52207, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 464 21:47:57.550730 IP (tos 0x0, ttl 254, id 52208, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 465 21:47:57.550981 IP (tos 0x0, ttl 64, id 58096, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 466 21:47:57.552136 IP (tos 0x0, ttl 254, id 52209, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 467 21:47:57.552446 IP (tos 0x0, ttl 64, id 58097, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 468 21:47:57.554703 IP (tos 0x0, ttl 254, id 52210, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 469 21:47:57.555704 IP (tos 0x0, ttl 254, id 52211, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 470 21:47:57.555872 IP (tos 0x0, ttl 64, id 58098, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 471 21:47:57.557029 IP (tos 0x0, ttl 254, id 52212, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 472 21:47:57.557342 IP (tos 0x0, ttl 64, id 58099, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 473 21:47:57.559640 IP (tos 0x0, ttl 254, id 52213, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 474 21:47:57.560653 IP (tos 0x0, ttl 254, id 52214, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 475 21:47:57.560814 IP (tos 0x0, ttl 64, id 58100, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 476 21:47:57.562026 IP (tos 0x0, ttl 254, id 52215, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 477 21:47:57.562466 IP (tos 0x0, ttl 64, id 58101, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 478 21:47:57.564746 IP (tos 0x0, ttl 254, id 52216, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 479 21:47:57.565755 IP (tos 0x0, ttl 254, id 52217, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 480 21:47:57.565920 IP (tos 0x0, ttl 64, id 58102, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 481 21:47:57.567069 IP (tos 0x0, ttl 254, id 52218, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 482 21:47:57.567593 IP (tos 0x0, ttl 64, id 58103, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 483 21:47:57.569928 IP (tos 0x0, ttl 254, id 52219, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 484 21:47:57.570928 IP (tos 0x0, ttl 254, id 52220, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 485 21:47:57.571095 IP (tos 0x0, ttl 64, id 58104, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 486 21:47:57.572322 IP (tos 0x0, ttl 254, id 52221, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 487 21:47:57.572720 IP (tos 0x0, ttl 64, id 58105, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 488 21:47:57.575003 IP (tos 0x0, ttl 254, id 52222, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 489 21:47:57.576024 IP (tos 0x0, ttl 254, id 52223, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 490 21:47:57.576388 IP (tos 0x0, ttl 64, id 58106, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 491 21:47:57.577373 IP (tos 0x0, ttl 254, id 52224, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 492 21:47:57.577724 IP (tos 0x0, ttl 64, id 58107, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 493 21:47:57.580189 IP (tos 0x0, ttl 254, id 52225, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 494 21:47:57.581306 IP (tos 0x0, ttl 254, id 52226, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 495 21:47:57.581548 IP (tos 0x0, ttl 64, id 58108, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 496 21:47:57.582806 IP (tos 0x0, ttl 254, id 52227, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 497 21:47:57.583269 IP (tos 0x0, ttl 64, id 58109, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 498 21:47:57.585922 IP (tos 0x0, ttl 254, id 52228, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 499 21:47:57.587914 IP (tos 0x0, ttl 254, id 52229, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 500 21:47:57.588147 IP (tos 0x0, ttl 64, id 58110, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 501 21:47:57.590180 IP (tos 0x0, ttl 254, id 52230, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 502 21:47:57.590496 IP (tos 0x0, ttl 64, id 58111, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 503 21:47:57.593543 IP (tos 0x0, ttl 254, id 52231, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 504 21:47:57.594586 IP (tos 0x0, ttl 254, id 52232, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 505 21:47:57.594999 IP (tos 0x0, ttl 64, id 58112, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 506 21:47:57.595945 IP (tos 0x0, ttl 254, id 52233, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 507 21:47:57.596253 IP (tos 0x0, ttl 64, id 58113, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 508 21:47:57.598753 IP (tos 0x0, ttl 254, id 52234, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 509 21:47:57.599796 IP (tos 0x0, ttl 254, id 52235, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 510 21:47:57.599958 IP (tos 0x0, ttl 64, id 58114, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 511 21:47:57.601168 IP (tos 0x0, ttl 254, id 52236, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 512 21:47:57.601637 IP (tos 0x0, ttl 64, id 58115, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 513 21:47:57.609736 IP (tos 0x0, ttl 254, id 52237, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 514 21:47:57.610744 IP (tos 0x0, ttl 254, id 52238, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 515 21:47:57.610914 IP (tos 0x0, ttl 64, id 58116, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 516 21:47:57.612128 IP (tos 0x0, ttl 254, id 52239, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 517 21:47:57.612774 IP (tos 0x0, ttl 64, id 58117, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 518 21:47:57.613784 IP (tos 0x0, ttl 254, id 52240, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 519 21:47:57.613939 IP (tos 0x0, ttl 64, id 58118, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 520 21:47:57.614059 IP (tos 0x0, ttl 64, id 58119, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 521 21:47:57.615404 IP (tos 0x0, ttl 254, id 52241, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 522 21:47:57.615552 IP (tos 0x0, ttl 64, id 58120, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 523 21:47:57.615674 IP (tos 0x0, ttl 64, id 58121, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 524 21:47:57.618644 IP (tos 0x0, ttl 254, id 52242, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 525 21:47:57.623150 IP (tos 0x0, ttl 254, id 52243, offset 0, flags [DF], proto UDP (17), length 90)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 526 21:47:57.623823 IP (tos 0x0, ttl 64, id 58122, offset 0, flags [none], proto UDP (17), length 1472)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 527 21:47:57.624002 IP (tos 0x0, ttl 64, id 58123, offset 0, flags [none], proto UDP (17), length 172)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 144
+ 528 21:47:57.682626 IP (tos 0x0, ttl 254, id 52244, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 529 21:47:57.683198 IP (tos 0x0, ttl 254, id 52245, offset 0, flags [DF], proto UDP (17), length 792)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 764
+ 530 21:47:57.683616 IP (tos 0x0, ttl 64, id 58124, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 531 21:47:57.683844 IP (tos 0x0, ttl 64, id 58125, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 532 21:47:57.689047 IP (tos 0x0, ttl 254, id 52246, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 533 21:47:57.728006 IP (tos 0x0, ttl 254, id 52247, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 534 21:47:57.728199 IP (tos 0x0, ttl 64, id 58126, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 535 21:47:57.771925 IP (tos 0x0, ttl 254, id 52248, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 536 21:47:57.772583 IP (tos 0x0, ttl 64, id 58127, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 537 21:47:57.776216 IP (tos 0x0, ttl 254, id 52249, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 538 21:47:57.778379 IP (tos 0x0, ttl 254, id 52250, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 539 21:47:57.780051 IP (tos 0x0, ttl 64, id 58128, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 540 21:47:57.780898 IP (tos 0x0, ttl 254, id 52251, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 541 21:47:57.781374 IP (tos 0x0, ttl 64, id 58129, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 542 21:47:57.786649 IP (tos 0x0, ttl 254, id 52252, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 543 21:47:57.787702 IP (tos 0x0, ttl 254, id 52253, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 544 21:47:57.788103 IP (tos 0x0, ttl 64, id 58130, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 545 21:47:57.789230 IP (tos 0x0, ttl 254, id 52254, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 546 21:47:57.789699 IP (tos 0x0, ttl 64, id 58131, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 547 21:47:57.792483 IP (tos 0x0, ttl 254, id 52255, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 548 21:47:57.794457 IP (tos 0x0, ttl 254, id 52256, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 549 21:47:57.794696 IP (tos 0x0, ttl 64, id 58132, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 550 21:47:57.796695 IP (tos 0x0, ttl 254, id 52257, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 551 21:47:57.797247 IP (tos 0x0, ttl 64, id 58133, offset 0, flags [none], proto UDP (17), length 88)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 552 21:47:57.800461 IP (tos 0x0, ttl 254, id 52258, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 553 21:47:57.802376 IP (tos 0x0, ttl 254, id 52259, offset 0, flags [DF], proto UDP (17), length 1472)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 554 21:47:57.802546 IP (tos 0x0, ttl 64, id 58134, offset 0, flags [none], proto UDP (17), length 94)
+ 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 555 21:47:57.803728 IP (tos 0x0, ttl 254, id 52260, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 556 21:47:58.221671 IP (tos 0x0, ttl 254, id 52261, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 557 21:47:58.221744 IP (tos 0xc0, ttl 255, id 58135, offset 0, flags [none], proto ICMP (1), length 576)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ IP (tos 0x0, ttl 254, id 52261, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 558 21:47:58.501236 IP (tos 0x0, ttl 254, id 52262, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 11 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 559 21:47:58.501301 IP (tos 0xc0, ttl 255, id 58136, offset 0, flags [none], proto ICMP (1), length 468)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ IP (tos 0x0, ttl 254, id 52262, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 11 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 560 21:47:59.291588 IP (tos 0x0, ttl 254, id 52263, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 561 21:47:59.291652 IP (tos 0xc0, ttl 255, id 58137, offset 0, flags [none], proto ICMP (1), length 576)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ IP (tos 0x0, ttl 254, id 52263, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 562 21:48:00.871744 IP (tos 0x0, ttl 254, id 52264, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 563 21:48:00.871814 IP (tos 0xc0, ttl 255, id 58155, offset 0, flags [none], proto ICMP (1), length 576)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ IP (tos 0x0, ttl 254, id 52264, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 564 21:48:03.249685 IP (tos 0x0, ttl 64, id 58157, offset 0, flags [none], proto UDP (17), length 171)
+ 131.151.32.21.1799 > 131.151.1.60.88: v5
+ 565 21:48:03.255469 IP (tos 0x0, ttl 254, id 57763, offset 0, flags [DF], proto UDP (17), length 512)
+ 131.151.1.60.88 > 131.151.32.21.1799: v5
+ 566 21:48:03.283149 IP (tos 0x0, ttl 64, id 58158, offset 0, flags [none], proto UDP (17), length 72)
+ 131.151.32.21.7001 > 131.151.1.60.7000: rx data seq 1 ser 1 fs call fetch-status fid 536870913/4/3 (44)
+ 567 21:48:03.284549 IP (tos 0x0, ttl 254, id 57764, offset 0, flags [DF], proto UDP (17), length 176)
+ 131.151.1.60.7000 > 131.151.32.21.7001: rx data seq 1 ser 1 fs reply fetch-status (148)
+ 568 21:48:03.377621 IP (tos 0x0, ttl 64, id 58160, offset 0, flags [none], proto UDP (17), length 547)
+ 131.151.32.21.1799 > 131.151.1.60.88:
+ 569 21:48:03.410404 IP (tos 0x0, ttl 254, id 57765, offset 0, flags [DF], proto UDP (17), length 466)
+ 131.151.1.60.88 > 131.151.32.21.1799:
+ 570 21:48:03.413361 IP (tos 0x0, ttl 64, id 58162, offset 0, flags [none], proto UDP (17), length 237)
+ 131.151.32.21.1799 > 131.151.1.60.4444: UDP, length 209
+ 571 21:48:03.413986 IP (tos 0x0, ttl 254, id 57766, offset 0, flags [DF], proto ICMP (1), length 112)
+ 131.151.1.60 > 131.151.32.21: ICMP 131.151.1.60 udp port 4444 unreachable, length 92
+ IP (tos 0x0, ttl 63, id 58162, offset 0, flags [none], proto UDP (17), length 237)
+ 131.151.32.21.1799 > 131.151.1.60.4444: UDP, length 209
+ 572 21:48:03.414378 IP (tos 0x0, ttl 64, id 58163, offset 0, flags [none], proto UDP (17), length 237)
+ 131.151.32.21.1799 > 131.151.1.60.4444: UDP, length 209
+ 573 21:48:03.481783 IP (tos 0x0, ttl 254, id 52265, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 574 21:48:03.481851 IP (tos 0xc0, ttl 255, id 58164, offset 0, flags [none], proto ICMP (1), length 576)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ IP (tos 0x0, ttl 254, id 52265, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 575 21:48:03.678443 IP (tos 0x0, ttl 64, id 58165, offset 0, flags [none], proto UDP (17), length 93)
+ 131.151.32.21.7001 > 131.151.1.60.7000: rx ack seq 0 ser 2 first 2 serial 1 reason delay (65)
+ 576 21:48:04.409193 IP (tos 0x0, ttl 64, id 58166, offset 0, flags [none], proto UDP (17), length 237)
+ 131.151.32.21.1799 > 131.151.1.60.4444: UDP, length 209
+ 577 21:48:04.409495 IP (tos 0x0, ttl 254, id 57767, offset 0, flags [DF], proto ICMP (1), length 112)
+ 131.151.1.60 > 131.151.32.21: ICMP 131.151.1.60 udp port 4444 unreachable, length 92
+ IP (tos 0x0, ttl 63, id 58166, offset 0, flags [none], proto UDP (17), length 237)
+ 131.151.32.21.1799 > 131.151.1.60.4444: UDP, length 209
+ 578 21:48:04.409893 IP (tos 0x0, ttl 64, id 58167, offset 0, flags [none], proto UDP (17), length 237)
+ 131.151.32.21.1799 > 131.151.1.146.4444: UDP, length 209
+ 579 21:48:04.414101 IP (tos 0x0, ttl 254, id 628, offset 0, flags [DF], proto UDP (17), length 1294)
+ 131.151.1.146.4444 > 131.151.32.21.1799: UDP, length 1266
+ 580 21:48:04.426446 IP (tos 0x0, ttl 64, id 58168, offset 0, flags [none], proto UDP (17), length 320)
+ 131.151.32.21.1799 > 131.151.1.146.7002: rx data seq 1 ser 1 pt call name-to-id "nneul" (292)
+ 581 21:48:04.449366 IP (tos 0x0, ttl 254, id 629, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.146.7002 > 131.151.32.21.1799: rx data seq 1 ser 1 pt reply name-to-id ids: 5879 (36)
+ 582 21:48:06.833046 IP (tos 0x0, ttl 254, id 630, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.146.7002 > 131.151.32.21.1799: rx data seq 1 ser 2 pt reply name-to-id ids: 5879 (36)
+ 583 21:48:06.833100 IP (tos 0xc0, ttl 255, id 58169, offset 0, flags [none], proto ICMP (1), length 92)
+ 131.151.32.21 > 131.151.1.146: ICMP 131.151.32.21 udp port 1799 unreachable, length 72
+ IP (tos 0x0, ttl 254, id 630, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.146.7002 > 131.151.32.21.1799: rx data seq 1 ser 2 pt reply name-to-id ids: 5879 (36)
+ 584 21:48:08.131961 IP (tos 0x0, ttl 254, id 52266, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 585 21:48:08.132033 IP (tos 0xc0, ttl 255, id 58170, offset 0, flags [none], proto ICMP (1), length 576)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ IP (tos 0x0, ttl 254, id 52266, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 586 21:48:09.492664 IP (tos 0x0, ttl 254, id 631, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.146.7002 > 131.151.32.21.1799: rx data seq 1 ser 3 pt reply name-to-id ids: 5879 (36)
+ 587 21:48:09.492716 IP (tos 0xc0, ttl 255, id 58171, offset 0, flags [none], proto ICMP (1), length 92)
+ 131.151.32.21 > 131.151.1.146: ICMP 131.151.32.21 udp port 1799 unreachable, length 72
+ IP (tos 0x0, ttl 254, id 631, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.146.7002 > 131.151.32.21.1799: rx data seq 1 ser 3 pt reply name-to-id ids: 5879 (36)
+ 588 21:48:09.661704 IP (tos 0x0, ttl 254, id 52267, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 12 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 589 21:48:09.661762 IP (tos 0xc0, ttl 255, id 58172, offset 0, flags [none], proto ICMP (1), length 468)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ IP (tos 0x0, ttl 254, id 52267, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 12 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 590 21:48:12.662982 IP (tos 0x0, ttl 254, id 632, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.146.7002 > 131.151.32.21.1799: rx data seq 1 ser 4 pt reply name-to-id ids: 5879 (36)
+ 591 21:48:12.663034 IP (tos 0xc0, ttl 255, id 58173, offset 0, flags [none], proto ICMP (1), length 92)
+ 131.151.32.21 > 131.151.1.146: ICMP 131.151.32.21 udp port 1799 unreachable, length 72
+ IP (tos 0x0, ttl 254, id 632, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.146.7002 > 131.151.32.21.1799: rx data seq 1 ser 4 pt reply name-to-id ids: 5879 (36)
+ 592 21:48:16.863261 IP (tos 0x0, ttl 254, id 633, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.146.7002 > 131.151.32.21.1799: rx data seq 1 ser 5 pt reply name-to-id ids: 5879 (36)
+ 593 21:48:16.863314 IP (tos 0xc0, ttl 255, id 58174, offset 0, flags [none], proto ICMP (1), length 92)
+ 131.151.32.21 > 131.151.1.146: ICMP 131.151.32.21 udp port 1799 unreachable, length 72
+ IP (tos 0x0, ttl 254, id 633, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.146.7002 > 131.151.32.21.1799: rx data seq 1 ser 5 pt reply name-to-id ids: 5879 (36)
+ 594 21:48:16.882406 IP (tos 0x0, ttl 254, id 52268, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 595 21:48:16.882456 IP (tos 0xc0, ttl 255, id 58175, offset 0, flags [none], proto ICMP (1), length 576)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ IP (tos 0x0, ttl 254, id 52268, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 596 21:48:21.072280 IP (tos 0x0, ttl 254, id 52269, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 13 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 597 21:48:21.072337 IP (tos 0xc0, ttl 255, id 58204, offset 0, flags [none], proto ICMP (1), length 468)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ IP (tos 0x0, ttl 254, id 52269, offset 0, flags [DF], proto UDP (17), length 440)
+ 131.151.1.59.7003 > 131.151.32.21.1792: rx data seq 1 ser 13 vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 598 21:48:23.103590 IP (tos 0x0, ttl 254, id 634, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.146.7002 > 131.151.32.21.1799: rx data seq 1 ser 6 pt reply name-to-id ids: 5879 (36)
+ 599 21:48:23.103644 IP (tos 0xc0, ttl 255, id 58206, offset 0, flags [none], proto ICMP (1), length 92)
+ 131.151.32.21 > 131.151.1.146: ICMP 131.151.32.21 udp port 1799 unreachable, length 72
+ IP (tos 0x0, ttl 254, id 634, offset 0, flags [DF], proto UDP (17), length 64)
+ 131.151.1.146.7002 > 131.151.32.21.1799: rx data seq 1 ser 6 pt reply name-to-id ids: 5879 (36)
+ 600 21:48:25.892793 IP (tos 0x0, ttl 254, id 52270, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 601 21:48:25.892866 IP (tos 0xc0, ttl 255, id 58207, offset 0, flags [none], proto ICMP (1), length 576)
+ 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ IP (tos 0x0, ttl 254, id 52270, offset 0, flags [DF], proto UDP (17), length 1384)
+ 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
diff --git a/tests/rx.out b/tests/rx.out
new file mode 100644
index 0000000..fb44857
--- /dev/null
+++ b/tests/rx.out
@@ -0,0 +1,601 @@
+ 1 21:46:16.463334 IP 131.151.32.21.7001 > 131.151.1.59.7000: rx data fs call fetch-status fid 536871098/846/1049757 (44)
+ 2 21:46:16.483206 IP 131.151.1.59.7000 > 131.151.32.21.7001: rx data fs reply fetch-status (148)
+ 3 21:46:16.889677 IP 131.151.32.21.7001 > 131.151.1.59.7000: rx ack first 2 serial 347 reason delay (65)
+ 4 21:46:24.151512 IP 131.151.32.21.7001 > 131.151.1.59.7000: rx data fs call makedir fid 536871098/1/1 "tmpdir" StoreStatus date 1999/11/11 21:46:24 group 0 mode 755 (80)
+ 5 21:46:24.245048 IP 131.151.1.59.7000 > 131.151.32.91.7001: rx data cb call callback fid 536871098/1/1 (52)
+ 6 21:46:24.255513 IP 131.151.32.91.7001 > 131.151.1.59.7000: rx data (28)
+ 7 21:46:24.255528 IP 131.151.32.91.7001 > 131.151.1.59.7000: rx data (28)
+ 8 21:46:24.282365 IP 131.151.1.59.7000 > 131.151.32.21.7001: rx data fs reply makedir new fid 536871098/677/1097448 (244)
+ 9 21:46:24.283047 IP 131.151.32.21.7001 > 131.151.1.59.7000: rx data fs call fetch-status fid 536871098/677/1097448 (44)
+ 10 21:46:24.284042 IP 131.151.1.59.7000 > 131.151.32.21.7001: rx data fs reply fetch-status (148)
+ 11 21:46:24.679610 IP 131.151.32.21.7001 > 131.151.1.59.7000: rx ack first 2 serial 349 reason delay (65)
+ 12 21:46:24.781785 IP 131.151.1.59.7000 > 131.151.32.91.7001: rx ack first 1 serial 1154 reason delay acked 1 (62)
+ 13 21:46:28.541035 IP 131.151.32.21.7001 > 131.151.1.59.7000: rx data fs call rmdir fid 536871098/1/1 "tmpdir" (56)
+ 14 21:46:28.544636 IP 131.151.1.59.7000 > 131.151.32.21.7001: rx data fs reply rmdir (136)
+ 15 21:46:28.949547 IP 131.151.32.21.7001 > 131.151.1.59.7000: rx ack first 2 serial 350 reason delay (65)
+ 16 21:46:38.681457 IP 131.151.1.70.7000 > 131.151.32.91.7001: rx data cb call probe (32)
+ 17 21:46:38.690316 IP 131.151.32.91.7001 > 131.151.1.70.7000: rx data (28)
+ 18 21:46:38.690352 IP 131.151.32.91.7001 > 131.151.1.70.7000: rx data (28)
+ 19 21:46:39.196737 IP 131.151.1.70.7000 > 131.151.32.91.7001: rx ack first 2 serial 656 reason delay (61)
+ 20 21:46:48.590067 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx data fs call fetch-status fid 536977399/40/27 (44)
+ 21 21:46:48.619971 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data fs reply fetch-status (148)
+ 22 21:46:48.810858 IP 131.151.32.21.1792 > 131.151.1.59.7003: rx data vldb call get-entry-by-name "root.cell" (48)
+ 23 21:46:48.812595 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 24 21:46:48.813282 IP 131.151.32.21.7001 > 131.151.1.59.7000: rx data fs call symlink fid 536871098/1/1 "rotcel" link to "#root.cell." (96)
+ 25 21:46:48.830808 IP 131.151.1.59.7000 > 131.151.32.21.7001: rx data fs reply symlink (232)
+ 26 21:46:49.029316 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 2 serial 2519 reason delay (65)
+ 27 21:46:49.229306 IP 131.151.32.21.7001 > 131.151.1.59.7000: rx ack first 2 serial 351 reason delay (65)
+ 28 21:46:51.218454 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 29 21:46:51.218541 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ 30 21:46:52.805338 IP 131.151.32.21.7001 > 131.151.1.59.7000: rx data fs call remove-file fid 536871098/1/1 "rotcel" (56)
+ 31 21:46:52.810150 IP 131.151.1.59.7000 > 131.151.32.21.7001: rx data fs reply remove-file (136)
+ 32 21:46:53.209266 IP 131.151.32.21.7001 > 131.151.1.59.7000: rx ack first 2 serial 352 reason delay (65)
+ 33 21:46:53.878655 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 34 21:46:53.878718 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ 35 21:46:56.242994 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx data fs call fetch-status fid 536977399/86/51 (44)
+ 36 21:46:56.245019 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data fs reply fetch-status (148)
+ 37 21:46:56.518772 IP 131.151.32.21.1792 > 131.151.1.59.7003: rx data vldb call get-entry-by-name-n "users.nneul" (48)
+ 38 21:46:56.519452 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx challenge (44)
+ 39 21:46:56.523136 IP 131.151.32.21.1792 > 131.151.1.59.7003: rx response (140)
+ 40 21:46:56.525522 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name-n "users.nneul" numservers 1 servers 131.151.1.59 partitions b rwvol 536871098 rovol 536871099 backup 536871100 (504)
+ 41 21:46:56.525791 IP 131.151.32.21.1792 > 131.151.1.59.7003: rx data vldb call get-entry-by-id-n volid 536871098 (40)
+ 42 21:46:56.527259 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-id-n "users.nneul" numservers 1 servers 131.151.1.59 partitions b rwvol 536871098 rovol 536871099 backup 536871100 (504)
+ 43 21:46:56.527629 IP 131.151.32.21.1792 > 131.151.1.59.7005: rx data vol call list-one-volume partid 1 volid 536871098 (40)
+ 44 21:46:56.637381 IP 131.151.1.59.7005 > 131.151.32.21.1792: rx challenge (44)
+ 45 21:46:56.637779 IP 131.151.32.21.1792 > 131.151.1.59.7005: rx response (140)
+ 46 21:46:56.639215 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 2 serial 2520 reason delay (65)
+ 47 21:46:56.920017 IP 131.151.32.21.1792 > 131.151.1.59.7003: rx ack first 2 serial 3 reason delay (65)
+ 48 21:46:57.036390 IP 131.151.1.59.7005 > 131.151.32.21.1792: rx data vol reply list-one-volume name "users.nneul" volid 536871098 type (252)
+ 49 21:46:57.048744 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 50 21:46:57.061382 IP 131.151.32.21.1792 > 131.151.1.59.7005: rx ackall (28)
+ 51 21:47:00.778759 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 52 21:47:00.778818 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ 53 21:47:00.817967 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx data fs call fetch-status fid 536977399/14/14 (44)
+ 54 21:47:00.820615 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data fs reply fetch-status (148)
+ 55 21:47:00.995692 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call name-to-id "users.nneul" (292)
+ 56 21:47:00.996639 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx challenge (44)
+ 57 21:47:00.996822 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx response (140)
+ 58 21:47:00.998994 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 32766 (36)
+ 59 21:47:01.000150 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call name-to-id "users.nneul" (292)
+ 60 21:47:01.001268 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 32766 (36)
+ 61 21:47:01.005342 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call id-to-name ids: <none!> (36)
+ 62 21:47:01.005915 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply id-to-name <none!> (32)
+ 63 21:47:01.006087 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx ackall (28)
+ 64 21:47:01.219166 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 2 serial 2521 reason delay (65)
+ 65 21:47:03.010034 IP 131.151.32.21.7001 > 131.151.1.70.7000: rx data fs call give-cbs (112)
+ 66 21:47:03.011088 IP 131.151.1.70.7000 > 131.151.32.21.7001: rx data (28)
+ 67 21:47:03.409140 IP 131.151.32.21.7001 > 131.151.1.70.7000: rx ack first 2 serial 55 reason delay (65)
+ 68 21:47:05.869072 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call name-to-id "nneul" (292)
+ 69 21:47:05.869722 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx challenge (44)
+ 70 21:47:05.870422 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx response (140)
+ 71 21:47:05.872757 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 5879 (36)
+ 72 21:47:05.873149 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call name-to-id "nneul" (292)
+ 73 21:47:05.874355 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 5879 (36)
+ 74 21:47:05.874531 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call id-to-name ids: <none!> (36)
+ 75 21:47:05.875156 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply id-to-name <none!> (32)
+ 76 21:47:05.875335 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call list-entry id 5879 (36)
+ 77 21:47:05.877704 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply list-entry (332)
+ 78 21:47:05.877925 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call id-to-name ids: -204 5113 (44)
+ 79 21:47:05.879692 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply id-to-name "system:administrators" "5113" (544)
+ 80 21:47:05.883080 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call name-to-id "nneul" "system:administrators" (548)
+ 81 21:47:05.884646 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 5879 -204 (40)
+ 82 21:47:05.884950 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call same-mbr-of uid 5879 gid -204 (40)
+ 83 21:47:05.886482 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply same-mbr-of (32)
+ 84 21:47:05.888922 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx ackall (28)
+ 85 21:47:06.559070 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 86 21:47:06.559143 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ 87 21:47:08.697010 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call name-to-id "nneul" (292)
+ 88 21:47:08.697702 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx challenge (44)
+ 89 21:47:08.697886 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx response (140)
+ 90 21:47:08.700814 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 5879 (36)
+ 91 21:47:08.701061 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call name-to-id "nneul" (292)
+ 92 21:47:08.702243 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 5879 (36)
+ 93 21:47:08.702422 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call id-to-name ids: <none!> (36)
+ 94 21:47:08.703045 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply id-to-name <none!> (32)
+ 95 21:47:08.703345 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call list-elements id 5879 (36)
+ 96 21:47:08.705113 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply list-entry (80)
+ 97 21:47:08.705296 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call id-to-name ids: -641 -569 -564 -478 -472 -441 -427 -424 -355 -348 -254 (80)
+ 98 21:47:08.738631 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply id-to-name "nneul:cs301" "cc-staff" "obrennan:sysprog" "software" "bbc:mtw" [|pt] (1472)
+ 99 21:47:08.740294 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data (1404)
+ 100 21:47:08.740581 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx ack first 2 serial 7 reason delay acked 2 (66)
+ 101 21:47:16.440550 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 102 21:47:16.440614 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ 103 21:47:22.963348 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call name-to-id "cc-staff" (292)
+ 104 21:47:22.964051 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx challenge (44)
+ 105 21:47:22.964237 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx response (140)
+ 106 21:47:22.966418 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: -569 (36)
+ 107 21:47:22.966644 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call name-to-id "cc-staff" (292)
+ 108 21:47:22.967810 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: -569 (36)
+ 109 21:47:22.967987 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call id-to-name ids: <none!> (36)
+ 110 21:47:22.968556 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply id-to-name <none!> (32)
+ 111 21:47:22.969841 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call list-elements id -569 (36)
+ 112 21:47:22.971342 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply list-entry (112)
+ 113 21:47:22.971544 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx data pt call id-to-name ids: 5002 5004 5013 5016 5021 5022 5150 5171 5195 5211 5220 5339 5408 5879 13081 17342 19999 20041 20176 (112)
+ 114 21:47:23.005534 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data pt reply id-to-name "rms" "rwa" "uetrecht" "dwd" "kjh" [|pt] (1444)
+ 115 21:47:23.006602 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data (1444)
+ 116 21:47:23.007048 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx ack first 2 serial 7 reason delay acked 2 (66)
+ 117 21:47:23.007745 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data (1444)
+ 118 21:47:23.008408 IP 131.151.1.59.7002 > 131.151.32.21.1799: rx data (648)
+ 119 21:47:23.008550 IP 131.151.32.21.1799 > 131.151.1.59.7002: rx ack first 4 serial 9 reason delay acked 4 (66)
+ 120 21:47:26.569758 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 121 21:47:26.569822 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ 122 21:47:31.825501 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx data fs call fetch-status fid 536977399/16/15 (44)
+ 123 21:47:31.827985 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data fs reply fetch-status (148)
+ 124 21:47:31.829082 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx data fs call fetch-data fid 536977399/16/15 offset 0 length 65536 (52)
+ 125 21:47:31.872588 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data fs reply fetch-data (1472)
+ 126 21:47:31.873045 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 127 21:47:31.873238 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 128 21:47:31.873323 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 129 21:47:31.874199 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 130 21:47:31.874320 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 131 21:47:31.874444 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 132 21:47:31.874527 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 133 21:47:31.874656 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 2 serial 2524 reason ack requested acked 2 (66)
+ 134 21:47:31.911711 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 135 21:47:31.911830 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 136 21:47:31.911963 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 137 21:47:31.912047 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 138 21:47:31.912793 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 139 21:47:31.912917 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 140 21:47:31.913050 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 141 21:47:31.913123 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 142 21:47:31.913290 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 4 serial 2526 reason ack requested acked 4 (66)
+ 143 21:47:31.914161 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 144 21:47:31.914283 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 145 21:47:31.914405 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 146 21:47:31.914488 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 147 21:47:31.915372 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 148 21:47:31.915494 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 149 21:47:31.915618 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 150 21:47:31.915702 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 151 21:47:31.915835 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 6 serial 2528 reason ack requested acked 6 (66)
+ 152 21:47:31.921854 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 153 21:47:31.921976 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 154 21:47:31.922099 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 155 21:47:31.922182 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 156 21:47:31.923223 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 157 21:47:31.923347 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 158 21:47:31.923470 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 159 21:47:31.923553 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 160 21:47:31.923698 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 8 serial 2530 reason ack requested acked 8 (66)
+ 161 21:47:31.924962 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 162 21:47:31.925085 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 163 21:47:31.925207 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 164 21:47:31.925291 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 165 21:47:31.926314 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 166 21:47:31.926436 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 167 21:47:31.926560 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 168 21:47:31.926641 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 169 21:47:31.926761 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 10 serial 2532 reason ack requested acked 10 (66)
+ 170 21:47:31.927670 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 171 21:47:31.927794 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 172 21:47:31.927917 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 173 21:47:31.927999 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 174 21:47:31.928955 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 175 21:47:31.929070 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 176 21:47:31.929090 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 177 21:47:31.929216 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 12 serial 2534 reason delay acked 12 (66)
+ 178 21:47:31.931311 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx data fs call fetch-data fid 536977399/16/15 offset 131072 length 56972 (52)
+ 179 21:47:31.946920 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data fs reply fetch-data (1472)
+ 180 21:47:31.947042 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 181 21:47:31.947179 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 182 21:47:31.947258 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 183 21:47:31.948245 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 184 21:47:31.948368 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 185 21:47:31.948492 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 186 21:47:31.948574 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 187 21:47:31.948714 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 2 serial 2536 reason ack requested acked 2 (66)
+ 188 21:47:31.949601 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 189 21:47:31.949715 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 190 21:47:31.949838 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 191 21:47:31.949921 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 192 21:47:31.950714 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 193 21:47:31.950835 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 194 21:47:31.950959 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 195 21:47:31.951042 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 196 21:47:31.951177 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 4 serial 2538 reason ack requested acked 4 (66)
+ 197 21:47:31.952808 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 198 21:47:31.952930 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 199 21:47:31.953063 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 200 21:47:31.953145 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 201 21:47:31.954021 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 202 21:47:31.954153 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 203 21:47:31.954266 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 204 21:47:31.954351 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 205 21:47:31.954501 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 6 serial 2540 reason ack requested acked 6 (66)
+ 206 21:47:31.955104 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 207 21:47:31.955226 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 208 21:47:31.955349 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 209 21:47:31.955433 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 210 21:47:31.956561 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 211 21:47:31.956683 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 212 21:47:31.956807 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 213 21:47:31.956897 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 214 21:47:31.957074 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 8 serial 2542 reason ack requested acked 8 (66)
+ 215 21:47:31.958291 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 216 21:47:31.958413 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 217 21:47:31.958536 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 218 21:47:31.958620 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 219 21:47:31.959648 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 220 21:47:31.959768 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 221 21:47:31.959881 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 222 21:47:31.959978 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 223 21:47:31.959997 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (484)
+ 224 21:47:31.960153 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 10 serial 2544 reason ack requested acked 10 (66)
+ 225 21:47:31.968719 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx data fs call fetch-data fid 536977399/16/15 offset 65536 length 65536 (52)
+ 226 21:47:31.973708 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data fs reply fetch-data (1472)
+ 227 21:47:31.973826 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 228 21:47:31.973953 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 229 21:47:31.974036 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 230 21:47:31.975130 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 231 21:47:31.975251 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 232 21:47:31.975374 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 233 21:47:31.975457 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 234 21:47:31.975644 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 2 serial 2547 reason ack requested acked 2 (66)
+ 235 21:47:31.976494 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 236 21:47:31.976614 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 237 21:47:31.976732 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 238 21:47:31.976816 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 239 21:47:31.977547 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 240 21:47:31.977658 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 241 21:47:31.977781 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 242 21:47:31.977865 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 243 21:47:31.978006 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 4 serial 2549 reason ack requested acked 4 (66)
+ 244 21:47:31.978903 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 245 21:47:31.979022 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 246 21:47:31.979152 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 247 21:47:31.979234 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 248 21:47:31.980103 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 249 21:47:31.980225 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 250 21:47:31.980348 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 251 21:47:31.980442 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 252 21:47:31.980584 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 6 serial 2551 reason ack requested acked 6 (66)
+ 253 21:47:31.981466 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 254 21:47:31.981612 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 255 21:47:31.981736 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 256 21:47:31.981819 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 257 21:47:31.982687 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 258 21:47:31.982809 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 259 21:47:31.982931 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 260 21:47:31.983013 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 261 21:47:31.983173 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 8 serial 2553 reason ack requested acked 8 (66)
+ 262 21:47:31.984600 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 263 21:47:31.984721 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 264 21:47:31.984846 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 265 21:47:31.984929 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 266 21:47:31.985969 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 267 21:47:31.986089 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 268 21:47:31.986212 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 269 21:47:31.986306 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 270 21:47:31.986455 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 10 serial 2555 reason ack requested acked 10 (66)
+ 271 21:47:31.987315 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 272 21:47:31.987436 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 273 21:47:31.987559 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 274 21:47:31.987643 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 275 21:47:31.988562 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 276 21:47:31.988678 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 277 21:47:31.988696 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 278 21:47:31.989166 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 12 serial 2557 reason delay acked 12 (66)
+ 279 21:47:36.960670 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 280 21:47:36.960736 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ 281 21:47:38.824245 IP 131.151.1.59.7000 > 131.151.32.91.7001: rx data cb call probe (32)
+ 282 21:47:38.832720 IP 131.151.32.91.7001 > 131.151.1.59.7000: rx data (28)
+ 283 21:47:38.832736 IP 131.151.32.91.7001 > 131.151.1.59.7000: rx data (28)
+ 284 21:47:39.340205 IP 131.151.1.59.7000 > 131.151.32.91.7001: rx ack first 2 serial 1155 reason delay (61)
+ 285 21:47:47.600747 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 286 21:47:47.600817 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ 287 21:47:50.558379 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx data fs call fetch-status fid 536977399/30/22 (44)
+ 288 21:47:50.559765 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data fs reply fetch-status (148)
+ 289 21:47:50.560341 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx data fs call fetch-data fid 536977399/30/22 offset 0 length 65536 (52)
+ 290 21:47:50.586027 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data fs reply fetch-data (1472)
+ 291 21:47:50.586148 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 292 21:47:50.586270 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 293 21:47:50.586353 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 294 21:47:50.598397 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 295 21:47:50.598517 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 296 21:47:50.598641 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 297 21:47:50.598723 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 298 21:47:50.599028 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 2 serial 2560 reason ack requested acked 2 (66)
+ 299 21:47:50.613313 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 300 21:47:50.613434 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 301 21:47:50.613557 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 302 21:47:50.613640 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 303 21:47:50.614408 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 304 21:47:50.614529 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 305 21:47:50.614653 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 306 21:47:50.614736 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 307 21:47:50.614884 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 4 serial 2562 reason ack requested acked 4 (66)
+ 308 21:47:50.615759 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 309 21:47:50.615881 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 310 21:47:50.616003 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 311 21:47:50.616086 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 312 21:47:50.617064 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 313 21:47:50.617195 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 314 21:47:50.617309 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 315 21:47:50.617392 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 316 21:47:50.617571 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 6 serial 2564 reason ack requested acked 6 (66)
+ 317 21:47:50.618132 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 318 21:47:50.618264 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 319 21:47:50.618388 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 320 21:47:50.618470 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 321 21:47:50.619700 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 322 21:47:50.619811 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 323 21:47:50.619936 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 324 21:47:50.620017 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 325 21:47:50.620153 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 8 serial 2566 reason ack requested acked 8 (66)
+ 326 21:47:50.621466 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 327 21:47:50.621587 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 328 21:47:50.621710 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 329 21:47:50.621794 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 330 21:47:50.622905 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 331 21:47:50.623020 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 332 21:47:50.623158 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 333 21:47:50.623227 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 334 21:47:50.623423 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 10 serial 2568 reason ack requested acked 10 (66)
+ 335 21:47:50.624233 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 336 21:47:50.624358 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 337 21:47:50.624479 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 338 21:47:50.624562 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 339 21:47:50.625618 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 340 21:47:50.625734 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 341 21:47:50.625753 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 342 21:47:50.625870 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 12 serial 2570 reason delay acked 12 (66)
+ 343 21:47:50.627406 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx data fs call fetch-data fid 536977399/30/22 offset 65536 length 26996 (52)
+ 344 21:47:50.630017 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data fs reply fetch-data (1472)
+ 345 21:47:50.630141 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 346 21:47:50.630263 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 347 21:47:50.630347 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 348 21:47:50.631301 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 349 21:47:50.631423 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 350 21:47:50.631547 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 351 21:47:50.631630 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 352 21:47:50.631783 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 2 serial 2572 reason ack requested acked 2 (66)
+ 353 21:47:50.633172 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 354 21:47:50.633294 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 355 21:47:50.633417 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 356 21:47:50.633500 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 357 21:47:50.634225 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 358 21:47:50.634348 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 359 21:47:50.634470 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 360 21:47:50.634554 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 361 21:47:50.634697 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 4 serial 2574 reason ack requested acked 4 (66)
+ 362 21:47:50.635315 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (1472)
+ 363 21:47:50.635437 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 364 21:47:50.635545 IP 131.151.1.146 > 131.151.32.21: ip-proto-17
+ 365 21:47:50.635555 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data (148)
+ 366 21:47:50.635705 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 5 serial 2576 reason delay acked 5-6 (67)
+ 367 21:47:53.906701 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx data fs call fetch-status fid 536977399/88/52 (44)
+ 368 21:47:53.946230 IP 131.151.1.146.7000 > 131.151.32.21.7001: rx data fs reply fetch-status (148)
+ 369 21:47:54.163340 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 32
+ 370 21:47:54.338581 IP 131.151.32.21.7001 > 131.151.1.146.7000: rx ack first 2 serial 1 reason delay (65)
+ 371 21:47:54.799371 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 61
+ 372 21:47:55.159236 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 32
+ 373 21:47:55.165136 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 374 21:47:55.166071 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 375 21:47:55.166321 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 376 21:47:55.166447 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 377 21:47:55.199519 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 378 21:47:55.199686 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 379 21:47:55.199809 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 380 21:47:55.200825 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 381 21:47:55.200977 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 382 21:47:55.201325 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 136
+ 383 21:47:55.202977 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 384 21:47:55.251632 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1472
+ 385 21:47:55.252731 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1472
+ 386 21:47:55.253147 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 387 21:47:55.253858 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1472
+ 388 21:47:55.254848 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1472
+ 389 21:47:55.255035 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 390 21:47:55.255955 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1472
+ 391 21:47:55.257190 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 32
+ 392 21:47:55.257491 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 393 21:47:55.258405 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 394 21:47:55.262318 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 395 21:47:55.262601 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 396 21:47:55.263258 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 397 21:47:55.263401 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 398 21:47:55.263685 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 399 21:47:55.264640 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 400 21:47:55.264850 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 401 21:47:55.264965 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 144
+ 402 21:47:55.267052 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 403 21:47:55.796405 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 61
+ 404 21:47:57.009474 IP 131.151.32.21.7001 > 131.151.1.70.7000: rx data fs call give-cbs (112)
+ 405 21:47:57.010421 IP 131.151.1.70.7000 > 131.151.32.21.7001: rx data (28)
+ 406 21:47:57.340299 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 407 21:47:57.341607 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 408 21:47:57.341937 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 409 21:47:57.342924 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 410 21:47:57.344154 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 411 21:47:57.345387 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 412 21:47:57.345878 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 413 21:47:57.346737 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 414 21:47:57.346990 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 415 21:47:57.348062 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 104
+ 416 21:47:57.348264 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 417 21:47:57.408506 IP 131.151.32.21.7001 > 131.151.1.70.7000: rx ack first 2 serial 56 reason delay (65)
+ 418 21:47:57.436536 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 419 21:47:57.438563 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 420 21:47:57.439547 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 421 21:47:57.440789 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 422 21:47:57.441114 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 423 21:47:57.460401 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 424 21:47:57.461517 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 425 21:47:57.461928 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 426 21:47:57.462859 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 427 21:47:57.463197 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 428 21:47:57.474817 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 429 21:47:57.475890 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 430 21:47:57.476056 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 431 21:47:57.477328 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 432 21:47:57.477777 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 433 21:47:57.487546 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 434 21:47:57.488558 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 435 21:47:57.489407 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 436 21:47:57.489821 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 437 21:47:57.490288 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 438 21:47:57.492785 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 439 21:47:57.493778 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 440 21:47:57.495046 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 441 21:47:57.497159 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 442 21:47:57.497606 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 443 21:47:57.514885 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 444 21:47:57.515935 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 445 21:47:57.516104 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 446 21:47:57.517280 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 447 21:47:57.517812 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 448 21:47:57.520085 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 449 21:47:57.521128 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 450 21:47:57.522427 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 451 21:47:57.530098 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 452 21:47:57.530654 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 453 21:47:57.533186 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 454 21:47:57.534230 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 455 21:47:57.534487 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 456 21:47:57.535724 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 457 21:47:57.540121 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 458 21:47:57.542840 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 459 21:47:57.544805 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 460 21:47:57.545061 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 461 21:47:57.547074 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 462 21:47:57.547384 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 463 21:47:57.549677 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 464 21:47:57.550730 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 465 21:47:57.550981 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 466 21:47:57.552136 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 467 21:47:57.552446 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 468 21:47:57.554703 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 469 21:47:57.555704 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 470 21:47:57.555872 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 471 21:47:57.557029 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 472 21:47:57.557342 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 473 21:47:57.559640 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 474 21:47:57.560653 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 475 21:47:57.560814 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 476 21:47:57.562026 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 477 21:47:57.562466 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 478 21:47:57.564746 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 479 21:47:57.565755 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 480 21:47:57.565920 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 481 21:47:57.567069 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 482 21:47:57.567593 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 483 21:47:57.569928 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 484 21:47:57.570928 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 485 21:47:57.571095 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 486 21:47:57.572322 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 487 21:47:57.572720 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 488 21:47:57.575003 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 489 21:47:57.576024 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 490 21:47:57.576388 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 491 21:47:57.577373 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 492 21:47:57.577724 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 493 21:47:57.580189 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 494 21:47:57.581306 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 495 21:47:57.581548 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 496 21:47:57.582806 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 497 21:47:57.583269 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 498 21:47:57.585922 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 499 21:47:57.587914 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 500 21:47:57.588147 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 501 21:47:57.590180 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 502 21:47:57.590496 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 503 21:47:57.593543 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 504 21:47:57.594586 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 505 21:47:57.594999 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 506 21:47:57.595945 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 507 21:47:57.596253 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 508 21:47:57.598753 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 509 21:47:57.599796 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 510 21:47:57.599958 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 511 21:47:57.601168 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 512 21:47:57.601637 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 513 21:47:57.609736 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 514 21:47:57.610744 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 515 21:47:57.610914 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 516 21:47:57.612128 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 517 21:47:57.612774 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 518 21:47:57.613784 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 519 21:47:57.613939 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 520 21:47:57.614059 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 521 21:47:57.615404 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 522 21:47:57.615552 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 523 21:47:57.615674 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 524 21:47:57.618644 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 525 21:47:57.623150 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 62
+ 526 21:47:57.623823 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 1444
+ 527 21:47:57.624002 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 144
+ 528 21:47:57.682626 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 529 21:47:57.683198 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 764
+ 530 21:47:57.683616 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 531 21:47:57.683844 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 532 21:47:57.689047 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 533 21:47:57.728006 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 534 21:47:57.728199 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 535 21:47:57.771925 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 536 21:47:57.772583 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 537 21:47:57.776216 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 538 21:47:57.778379 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 539 21:47:57.780051 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 540 21:47:57.780898 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 541 21:47:57.781374 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 542 21:47:57.786649 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 543 21:47:57.787702 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 544 21:47:57.788103 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 545 21:47:57.789230 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 546 21:47:57.789699 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 547 21:47:57.792483 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 548 21:47:57.794457 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 549 21:47:57.794696 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 550 21:47:57.796695 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 551 21:47:57.797247 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 60
+ 552 21:47:57.800461 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 553 21:47:57.802376 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1444
+ 554 21:47:57.802546 IP 131.151.32.21.1799 > 131.151.1.59.7021: UDP, length 66
+ 555 21:47:57.803728 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 556 21:47:58.221671 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 557 21:47:58.221744 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ 558 21:47:58.501236 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 559 21:47:58.501301 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ 560 21:47:59.291588 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 561 21:47:59.291652 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ 562 21:48:00.871744 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 563 21:48:00.871814 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ 564 21:48:03.249685 IP 131.151.32.21.1799 > 131.151.1.60.88: v5
+ 565 21:48:03.255469 IP 131.151.1.60.88 > 131.151.32.21.1799: v5
+ 566 21:48:03.283149 IP 131.151.32.21.7001 > 131.151.1.60.7000: rx data fs call fetch-status fid 536870913/4/3 (44)
+ 567 21:48:03.284549 IP 131.151.1.60.7000 > 131.151.32.21.7001: rx data fs reply fetch-status (148)
+ 568 21:48:03.377621 IP 131.151.32.21.1799 > 131.151.1.60.88:
+ 569 21:48:03.410404 IP 131.151.1.60.88 > 131.151.32.21.1799:
+ 570 21:48:03.413361 IP 131.151.32.21.1799 > 131.151.1.60.4444: UDP, length 209
+ 571 21:48:03.413986 IP 131.151.1.60 > 131.151.32.21: ICMP 131.151.1.60 udp port 4444 unreachable, length 92
+ 572 21:48:03.414378 IP 131.151.32.21.1799 > 131.151.1.60.4444: UDP, length 209
+ 573 21:48:03.481783 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 574 21:48:03.481851 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ 575 21:48:03.678443 IP 131.151.32.21.7001 > 131.151.1.60.7000: rx ack first 2 serial 1 reason delay (65)
+ 576 21:48:04.409193 IP 131.151.32.21.1799 > 131.151.1.60.4444: UDP, length 209
+ 577 21:48:04.409495 IP 131.151.1.60 > 131.151.32.21: ICMP 131.151.1.60 udp port 4444 unreachable, length 92
+ 578 21:48:04.409893 IP 131.151.32.21.1799 > 131.151.1.146.4444: UDP, length 209
+ 579 21:48:04.414101 IP 131.151.1.146.4444 > 131.151.32.21.1799: UDP, length 1266
+ 580 21:48:04.426446 IP 131.151.32.21.1799 > 131.151.1.146.7002: rx data pt call name-to-id "nneul" (292)
+ 581 21:48:04.449366 IP 131.151.1.146.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 5879 (36)
+ 582 21:48:06.833046 IP 131.151.1.146.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 5879 (36)
+ 583 21:48:06.833100 IP 131.151.32.21 > 131.151.1.146: ICMP 131.151.32.21 udp port 1799 unreachable, length 72
+ 584 21:48:08.131961 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 585 21:48:08.132033 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ 586 21:48:09.492664 IP 131.151.1.146.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 5879 (36)
+ 587 21:48:09.492716 IP 131.151.32.21 > 131.151.1.146: ICMP 131.151.32.21 udp port 1799 unreachable, length 72
+ 588 21:48:09.661704 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 589 21:48:09.661762 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ 590 21:48:12.662982 IP 131.151.1.146.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 5879 (36)
+ 591 21:48:12.663034 IP 131.151.32.21 > 131.151.1.146: ICMP 131.151.32.21 udp port 1799 unreachable, length 72
+ 592 21:48:16.863261 IP 131.151.1.146.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 5879 (36)
+ 593 21:48:16.863314 IP 131.151.32.21 > 131.151.1.146: ICMP 131.151.32.21 udp port 1799 unreachable, length 72
+ 594 21:48:16.882406 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 595 21:48:16.882456 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
+ 596 21:48:21.072280 IP 131.151.1.59.7003 > 131.151.32.21.1792: rx data vldb reply get-entry-by-name "root.cell" numservers 6 servers 131.151.1.146 131.151.1.60 131.151.1.146 131.151.1.59 131.151.1.70 131.151.1.85 partitions a a a a a a rwvol 536870915 rovol 536870916 backup 536870917 (412)
+ 597 21:48:21.072337 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1792 unreachable, length 448
+ 598 21:48:23.103590 IP 131.151.1.146.7002 > 131.151.32.21.1799: rx data pt reply name-to-id ids: 5879 (36)
+ 599 21:48:23.103644 IP 131.151.32.21 > 131.151.1.146: ICMP 131.151.32.21 udp port 1799 unreachable, length 72
+ 600 21:48:25.892793 IP 131.151.1.59.7021 > 131.151.32.21.1799: UDP, length 1356
+ 601 21:48:25.892866 IP 131.151.32.21 > 131.151.1.59: ICMP 131.151.32.21 udp port 1799 unreachable, length 556
diff --git a/tests/rx_serviceid_oobr.out b/tests/rx_serviceid_oobr.out
new file mode 100644
index 0000000..7f53a4b
--- /dev/null
+++ b/tests/rx_serviceid_oobr.out
@@ -0,0 +1,3 @@
+ 1 06:56:17.131350 IP 250.15.128.19.68 > 249.251.157.8.63246: BOOTP/DHCP, unknown (0x00), length 8085
+ 2 [Invalid header: caplen==0, len==0]
+ 3 [Error converting time] IP 0.0.0.0.0 > 0.0.0.0.7004: rx abort (539)
diff --git a/tests/rx_serviceid_oobr.pcap b/tests/rx_serviceid_oobr.pcap
new file mode 100644
index 0000000..d7089d7
--- /dev/null
+++ b/tests/rx_serviceid_oobr.pcap
Binary files differ
diff --git a/tests/rx_ubik-oobr.out b/tests/rx_ubik-oobr.out
new file mode 100644
index 0000000..3303552
--- /dev/null
+++ b/tests/rx_ubik-oobr.out
@@ -0,0 +1 @@
+ 1 20:27:12.000006 IP truncated-ip - 2580 bytes missing! 222.241.104.198.3503 > 131.63.241.146.7002: rx data pt ubik call disk-lock tid 50266112.32382 file 2122216448 pos 545160708 length 1087685554 [|rx]
diff --git a/tests/rx_ubik-oobr.pcap b/tests/rx_ubik-oobr.pcap
new file mode 100644
index 0000000..84dee64
--- /dev/null
+++ b/tests/rx_ubik-oobr.pcap
Binary files differ
diff --git a/tests/scps_invalid.out b/tests/scps_invalid.out
new file mode 100644
index 0000000..1bc6abe
--- /dev/null
+++ b/tests/scps_invalid.out
@@ -0,0 +1,2 @@
+ 1 19:37:40.000000 IP 182.181.202.230.52750 > 83.253.102.83.63764: Flags [S], seq 3757264999, win 8192, options [mss 1452,nop,wscale 2,nop,nop,scps[bad opt]]
+ 2 19:42:39.000000 IP 182.181.158.21.53052 > 83.253.102.83.30122: Flags [S], seq 2824624414, win 8192, options [mss 1452,nop,wscale 2,nop,nop,scps[bad opt]]
diff --git a/tests/scps_invalid.pcap b/tests/scps_invalid.pcap
new file mode 100644
index 0000000..e420bae
--- /dev/null
+++ b/tests/scps_invalid.pcap
Binary files differ
diff --git a/tests/setkey2esp-secrets.pl b/tests/setkey2esp-secrets.pl
new file mode 100755
index 0000000..92fa385
--- /dev/null
+++ b/tests/setkey2esp-secrets.pl
@@ -0,0 +1,24 @@
+#!/usr/local/bin/perl
+#
+# usage:
+# setkey -D | perl thisfile > secrets.txt
+# tcpdump -n -E "file secrets.txt"
+#
+while (<>) {
+ if (/^(\S+)\s+(\S+)/) {
+ $src = $1;
+ $dst = $2;
+ next;
+ }
+ if (/^\s+esp.*spi=(\d+)/) {
+ $spi = $1;
+ next;
+ }
+ if (/^\s+E:\s+(\S+)\s+(.*)$/) {
+ $algo = $1. "-hmac96";
+ ($secret = $2) =~ s/\s+//g;
+
+ printf"0x%x@%s %s:0x%s\n", $spi, $dst, $algo, $secret;
+ next;
+ }
+}
diff --git a/tests/sflow-print-v6.out b/tests/sflow-print-v6.out
new file mode 100644
index 0000000..f6462e4
--- /dev/null
+++ b/tests/sflow-print-v6.out
@@ -0,0 +1,666 @@
+ 1 04:42:22.951505 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 224) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 109, uptime 113000, samples 1, length 216
+ counter sample (2), length 168, seqnum 28, type 0, idx 23001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 23001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 2 04:42:23.951517 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 400) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 110, uptime 114000, samples 2, length 392
+ counter sample (2), length 168, seqnum 27, type 0, idx 20001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 20001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 28, type 0, idx 3001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 3001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 3 04:42:24.951541 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 752) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 111, uptime 115000, samples 4, length 744
+ counter sample (2), length 168, seqnum 27, type 0, idx 21001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 21001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 11759, unicast pkts 2, multicast pkts 96, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 28, type 0, idx 18001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 18001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 28, type 0, idx 10001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 10001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 93062, unicast pkts 109, multicast pkts 88, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 28, type 0, idx 1001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 1001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 4 04:42:25.951447 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 724) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 112, uptime 116000, samples 4, length 716
+ counter sample (2), length 168, seqnum 27, type 0, idx 19001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 19001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 28, type 0, idx 8001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 8001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 28, type 0, idx 4001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 4001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ flow sample (1), length 140, seqnum 3, type 0, idx 7001, rate 1, pool 3, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 76
+ protocol Ethernet (1), length 64, stripped bytes 4, header_size 60
+ 5 04:42:26.951696 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 400) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 113, uptime 117000, samples 2, length 392
+ counter sample (2), length 168, seqnum 28, type 0, idx 13001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 13001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 27, type 0, idx 5001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 5001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 6 04:42:27.951754 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 400) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 114, uptime 118000, samples 2, length 392
+ counter sample (2), length 168, seqnum 28, type 0, idx 9001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 9001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 27, type 0, idx 7001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 7001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 192, unicast pkts 3, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 11262, unicast pkts 0, multicast pkts 93, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 7 04:42:29.952133 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 224) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 115, uptime 120000, samples 1, length 216
+ counter sample (2), length 168, seqnum 27, type 0, idx 14001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 14001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 8 04:42:31.952116 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 264) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 116, uptime 122000, samples 1, length 256
+ flow sample (1), length 208, seqnum 4, type 0, idx 7001, rate 1, pool 4, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 144
+ protocol Ethernet (1), length 250, stripped bytes 4, header_size 128
+ 9 04:42:32.952344 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 224) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 117, uptime 123000, samples 1, length 216
+ counter sample (2), length 168, seqnum 29, type 0, idx 23001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 23001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 10 04:42:33.952451 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 400) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 118, uptime 124000, samples 2, length 392
+ counter sample (2), length 168, seqnum 28, type 0, idx 20001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 20001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 29, type 0, idx 3001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 3001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 11 04:42:34.952794 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 752) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 119, uptime 125000, samples 4, length 744
+ counter sample (2), length 168, seqnum 28, type 0, idx 21001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 21001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 12073, unicast pkts 4, multicast pkts 96, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 29, type 0, idx 18001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 18001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 29, type 0, idx 10001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 10001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 96914, unicast pkts 117, multicast pkts 88, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 29, type 0, idx 1001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 1001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 12 04:42:35.952945 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 576) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 120, uptime 126000, samples 3, length 568
+ counter sample (2), length 168, seqnum 28, type 0, idx 19001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 19001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 29, type 0, idx 8001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 8001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 29, type 0, idx 4001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 4001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 13 04:42:36.952896 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 400) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 121, uptime 127000, samples 2, length 392
+ counter sample (2), length 168, seqnum 29, type 0, idx 13001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 13001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 28, type 0, idx 5001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 5001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 14 04:42:37.952960 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 616) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 122, uptime 128000, samples 3, length 608
+ counter sample (2), length 168, seqnum 29, type 0, idx 9001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 9001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 28, type 0, idx 7001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 7001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 442, unicast pkts 4, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 11262, unicast pkts 0, multicast pkts 93, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ flow sample (1), length 208, seqnum 5, type 0, idx 7001, rate 1, pool 5, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 144
+ protocol Ethernet (1), length 500, stripped bytes 4, header_size 128
+ 15 04:42:39.952953 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 224) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 123, uptime 130000, samples 1, length 216
+ counter sample (2), length 168, seqnum 28, type 0, idx 14001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 14001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 16 04:42:42.952991 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 224) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 124, uptime 133000, samples 1, length 216
+ counter sample (2), length 168, seqnum 30, type 0, idx 23001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 23001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 17 04:42:43.952984 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 400) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 125, uptime 134000, samples 2, length 392
+ counter sample (2), length 168, seqnum 29, type 0, idx 20001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 20001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 30, type 0, idx 3001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 3001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 18 04:42:44.953346 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 752) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 126, uptime 135000, samples 4, length 744
+ counter sample (2), length 168, seqnum 29, type 0, idx 21001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 21001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 12573, unicast pkts 5, multicast pkts 96, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 30, type 0, idx 18001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 18001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 30, type 0, idx 10001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 10001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 100512, unicast pkts 124, multicast pkts 88, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 30, type 0, idx 1001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 1001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 19 04:42:45.953345 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 576) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 127, uptime 136000, samples 3, length 568
+ counter sample (2), length 168, seqnum 29, type 0, idx 19001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 19001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 30, type 0, idx 8001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 8001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 30, type 0, idx 4001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 4001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 20 04:42:46.073266 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 1288) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 128, uptime 136000, samples 8, length 1280
+ counter sample (2), length 168, seqnum 30, type 0, idx 13001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 13001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 29, type 0, idx 5001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 5001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ flow sample (1), length 140, seqnum 6, type 0, idx 7001, rate 1, pool 6, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 76
+ protocol Ethernet (1), length 64, stripped bytes 4, header_size 60
+ flow sample (1), length 140, seqnum 7, type 0, idx 7001, rate 1, pool 7, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 76
+ protocol Ethernet (1), length 64, stripped bytes 4, header_size 60
+ flow sample (1), length 140, seqnum 8, type 0, idx 7001, rate 1, pool 8, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 76
+ protocol Ethernet (1), length 64, stripped bytes 4, header_size 60
+ flow sample (1), length 140, seqnum 9, type 0, idx 7001, rate 1, pool 9, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 76
+ protocol Ethernet (1), length 64, stripped bytes 4, header_size 60
+ flow sample (1), length 140, seqnum 10, type 0, idx 7001, rate 1, pool 10, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 76
+ protocol Ethernet (1), length 64, stripped bytes 4, header_size 60
+ flow sample (1), length 140, seqnum 11, type 0, idx 7001, rate 1, pool 11, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 76
+ protocol Ethernet (1), length 64, stripped bytes 4, header_size 60
+ 21 04:42:46.953386 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 640) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 129, uptime 137000, samples 4, length 632
+ flow sample (1), length 140, seqnum 12, type 0, idx 7001, rate 1, pool 12, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 76
+ protocol Ethernet (1), length 64, stripped bytes 4, header_size 60
+ flow sample (1), length 140, seqnum 13, type 0, idx 7001, rate 1, pool 13, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 76
+ protocol Ethernet (1), length 64, stripped bytes 4, header_size 60
+ flow sample (1), length 140, seqnum 14, type 0, idx 7001, rate 1, pool 14, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 76
+ protocol Ethernet (1), length 64, stripped bytes 4, header_size 60
+ flow sample (1), length 140, seqnum 15, type 0, idx 7001, rate 1, pool 15, drops 0, input 7001 output 2147483648 records 2
+ enterprise 0 Extended Switch data (1001) length 16
+ src vlan 10, src pri 0, dst vlan 10, dst pri 0
+ enterprise 0 Raw packet (1) length 76
+ protocol Ethernet (1), length 64, stripped bytes 4, header_size 60
+ 22 04:42:47.953302 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 400) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 130, uptime 138000, samples 2, length 392
+ counter sample (2), length 168, seqnum 30, type 0, idx 9001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 9001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 29, type 0, idx 7001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 7001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 942, unicast pkts 5, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 11262, unicast pkts 0, multicast pkts 93, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 23 04:42:49.953379 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 224) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 131, uptime 140000, samples 1, length 216
+ counter sample (2), length 168, seqnum 29, type 0, idx 14001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 14001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 24 04:42:52.953435 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 224) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 132, uptime 143000, samples 1, length 216
+ counter sample (2), length 168, seqnum 31, type 0, idx 23001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 23001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ 25 04:42:53.953481 IP6 (flowlabel 0xd50aa, hlim 64, next-header UDP (17) payload length: 400) 30::1:1:1.36123 > 20::1:1:2.6343: [udp sum ok] sFlowv5, IPv6 agent 30::1:1:1, agent-id 0, seqnum 133, uptime 144000, samples 2, length 392
+ counter sample (2), length 168, seqnum 30, type 0, idx 20001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 20001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9717, unicast pkts 0, multicast pkts 79, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
+ counter sample (2), length 168, seqnum 31, type 0, idx 3001, records 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ enterprise 0, Generic counter (1) length 88
+ ifindex 3001, iftype 6, ifspeed 400000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 9348, unicast pkts 0, multicast pkts 76, broadcast pkts 0, discards 0
+ Out errors 0, promisc mode 0
diff --git a/tests/sflow-print-v6.pcap b/tests/sflow-print-v6.pcap
new file mode 100644
index 0000000..d44d3bd
--- /dev/null
+++ b/tests/sflow-print-v6.pcap
Binary files differ
diff --git a/tests/sflow_multiple_counter_30_pdus-nv.out b/tests/sflow_multiple_counter_30_pdus-nv.out
new file mode 100644
index 0000000..f2bf3b3
--- /dev/null
+++ b/tests/sflow_multiple_counter_30_pdus-nv.out
@@ -0,0 +1,30 @@
+ 1 00:13:30.597291 IP 15.184.1.76.40948 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.8.4, agent-id 2, length 1288
+ 2 00:13:30.675288 IP 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, length 1288
+ 3 00:13:30.676474 IP 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, length 1288
+ 4 00:13:30.677640 IP 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, length 1288
+ 5 00:13:30.678795 IP 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, length 1288
+ 6 00:13:30.815569 IP 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, length 1108
+ 7 00:13:30.898050 IP 15.184.1.76.40948 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.8.4, agent-id 2, length 208
+ 8 00:13:30.939511 IP 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, length 1288
+ 9 00:13:30.940681 IP 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, length 1288
+ 10 00:13:30.941851 IP 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, length 1288
+ 11 00:13:30.942980 IP 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, length 1288
+ 12 00:13:31.135140 IP 15.184.4.165.49408 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.4.165, agent-id 100, length 460
+ 13 00:13:31.467318 IP 168.87.240.2.40000 > 15.184.3.9.6343: sFlow version 327681 packet not supported
+ 14 00:13:31.475115 IP 15.184.3.1.41024 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.129, agent-id 2, length 1288
+ 15 00:13:31.635326 IP 15.184.3.1.41024 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.129, agent-id 2, length 568
+ 16 00:13:31.666518 IP 168.87.240.3.50340 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.129, agent-id 6, length 928
+ 17 00:13:31.850000 IP 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, length 1108
+ 18 00:13:32.153315 IP 15.184.13.248.50229 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.13.52, agent-id 100, length 424
+ 19 00:13:32.190770 IP 168.87.240.1.40000 > 15.184.3.9.6343: sFlow version 327681 packet not supported
+ 20 00:13:32.190783 IP 168.87.240.1.40000 > 15.184.3.9.6343: sFlow version 327682 packet not supported
+ 21 00:13:32.193594 IP 168.87.240.1.40000 > 15.184.3.9.6343: sFlow version 327681 packet not supported
+ 22 00:13:32.467378 IP 168.87.240.2.40000 > 15.184.3.9.6343: sFlow version 327682 packet not supported
+ 23 00:13:32.667301 IP 168.87.240.3.50340 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.129, agent-id 6, length 568
+ 24 00:13:32.675174 IP 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, length 1288
+ 25 00:13:32.676361 IP 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, length 1288
+ 26 00:13:32.677515 IP 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, length 1288
+ 27 00:13:32.678699 IP 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, length 1288
+ 28 00:13:32.815939 IP 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, length 1108
+ 29 00:13:32.939517 IP 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, length 1288
+ 30 00:13:32.940683 IP 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, length 1288
diff --git a/tests/sflow_multiple_counter_30_pdus.out b/tests/sflow_multiple_counter_30_pdus.out
new file mode 100644
index 0000000..2886246
--- /dev/null
+++ b/tests/sflow_multiple_counter_30_pdus.out
@@ -0,0 +1,1828 @@
+ 1 00:13:30.597291 IP (tos 0x0, ttl 253, id 23654, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.76.40948 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.8.4, agent-id 2, seqnum 204720, uptime 2612972293, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 87096, type 0, idx 55, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 55, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 820721, unicast pkts 9601, multicast pkts 0, broadcast pkts 1302, discards 0
+ In errors 0, unknown protos 0
+ Out octets 178785248, unicast pkts 9736, multicast pkts 132958, broadcast pkts 2213534, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 87096, type 0, idx 56, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 56, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 156084746, unicast pkts 473593, multicast pkts 0, broadcast pkts 1862745, discards 0
+ In errors 0, unknown protos 0
+ Out octets 59635889, unicast pkts 8834, multicast pkts 132958, broadcast pkts 352092, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 87099, type 0, idx 57, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 57, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3051593057, unicast pkts 52919488, multicast pkts 1491, broadcast pkts 956, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1525716840, unicast pkts 30013667, multicast pkts 131467, broadcast pkts 2213880, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 87096, type 0, idx 60, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 60, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 178404732, unicast pkts 3035, multicast pkts 132958, broadcast pkts 2214836, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 87016, type 0, idx 61, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 61, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 178368955, unicast pkts 3031, multicast pkts 132840, broadcast pkts 2214791, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 87096, type 0, idx 62, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 62, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 178404650, unicast pkts 3034, multicast pkts 132958, broadcast pkts 2214836, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 87096, type 0, idx 63, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 63, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 0, unicast pkts 0, multicast pkts 0, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 178404732, unicast pkts 3035, multicast pkts 132958, broadcast pkts 2214836, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 2 00:13:30.675288 IP (tos 0x0, ttl 253, id 12208, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, seqnum 10499682, uptime 12973660, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2007195, type 0, idx 1, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 1, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 2460750, unicast pkts 22544, multicast pkts 5, broadcast pkts 6408, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3991394888, unicast pkts 131978, multicast pkts 2198965, broadcast pkts 48358863, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2006745, type 0, idx 2, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 2, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 122196260, unicast pkts 82823825, multicast pkts 710, broadcast pkts 38540, discards 0
+ In errors 2, unknown protos 0
+ Out octets 3744715166, unicast pkts 93942161, multicast pkts 2218252, broadcast pkts 48317917, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 2, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007118, type 0, idx 3, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 3, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 87175881, unicast pkts 11173387, multicast pkts 1312, broadcast pkts 7310, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2575091711, unicast pkts 8663056, multicast pkts 1949260, broadcast pkts 8701202, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007648, type 0, idx 4, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 4, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3013636604, unicast pkts 424917316, multicast pkts 1216, broadcast pkts 196654, discards 0
+ In errors 0, unknown protos 0
+ Out octets 584566587, unicast pkts 294167676, multicast pkts 1948957, broadcast pkts 8512276, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 1832884, type 0, idx 5, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 5, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3835856598, unicast pkts 6812799, multicast pkts 1145, broadcast pkts 705277, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2182764482, unicast pkts 8284848, multicast pkts 2738770, broadcast pkts 7987023, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007139, type 0, idx 6, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 6, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 21722, unicast pkts 0, multicast pkts 12, broadcast pkts 37, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1874046310, unicast pkts 98496, multicast pkts 1955062, broadcast pkts 20311831, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2006986, type 0, idx 7, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 7, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3474926128, unicast pkts 10088201, multicast pkts 1463, broadcast pkts 14105, discards 0
+ In errors 0, unknown protos 0
+ Out octets 831378523, unicast pkts 12805926, multicast pkts 1954494, broadcast pkts 20293366, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 3 00:13:30.676474 IP (tos 0x0, ttl 253, id 12209, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, seqnum 10499683, uptime 12973661, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2007114, type 0, idx 8, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 8, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3858988244, unicast pkts 13191097, multicast pkts 1215, broadcast pkts 24593, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2559231968, unicast pkts 16126546, multicast pkts 1954848, broadcast pkts 20284429, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007001, type 0, idx 9, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 9, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3386316332, unicast pkts 14360061, multicast pkts 1244, broadcast pkts 16485, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1675798901, unicast pkts 15790519, multicast pkts 1954451, broadcast pkts 20291225, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2005309, type 0, idx 10, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 10, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1558898282, unicast pkts 162603641, multicast pkts 1331, broadcast pkts 188407, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3568458580, unicast pkts 162582480, multicast pkts 1953553, broadcast pkts 20106780, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007256, type 0, idx 11, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 11, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 125808339, unicast pkts 691735, multicast pkts 2539, broadcast pkts 22184, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1249750181, unicast pkts 33020559, multicast pkts 2196657, broadcast pkts 48342104, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007178, type 0, idx 12, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 12, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 45949249, unicast pkts 205456, multicast pkts 1743, broadcast pkts 8308, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4019313234, unicast pkts 210496, multicast pkts 2197587, broadcast pkts 48353561, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007155, type 0, idx 13, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 13, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 32111027, unicast pkts 143922, multicast pkts 1193, broadcast pkts 5276, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4050797426, unicast pkts 198665, multicast pkts 2197850, broadcast pkts 48353779, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2006875, type 0, idx 14, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 14, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 19576, unicast pkts 19, multicast pkts 5, broadcast pkts 30, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3990801228, unicast pkts 107683, multicast pkts 2199048, broadcast pkts 48364452, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 4 00:13:30.677640 IP (tos 0x0, ttl 253, id 12210, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, seqnum 10499684, uptime 12973663, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2007174, type 0, idx 15, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 15, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 96700793, unicast pkts 453020, multicast pkts 2568, broadcast pkts 22804, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4042743345, unicast pkts 379591, multicast pkts 2196676, broadcast pkts 48338646, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007085, type 0, idx 16, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 16, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 289703711, unicast pkts 1654844, multicast pkts 37302, broadcast pkts 22784, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4098637095, unicast pkts 801788, multicast pkts 2166613, broadcast pkts 48320960, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007171, type 0, idx 17, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 17, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 45204461, unicast pkts 194096, multicast pkts 1700, broadcast pkts 8788, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4014792810, unicast pkts 198133, multicast pkts 2197652, broadcast pkts 48351768, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007169, type 0, idx 18, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 18, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 95210366, unicast pkts 443561, multicast pkts 2169, broadcast pkts 24997, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4035379503, unicast pkts 332327, multicast pkts 2196767, broadcast pkts 48336027, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007264, type 0, idx 19, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 19, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1379521296, unicast pkts 50010620, multicast pkts 1046, broadcast pkts 48921, discards 0
+ In errors 0, unknown protos 0
+ Out octets 435976335, unicast pkts 57993600, multicast pkts 2197958, broadcast pkts 48315375, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007257, type 0, idx 20, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 20, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 312017292, unicast pkts 47238597, multicast pkts 1476, broadcast pkts 23377, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3242136708, unicast pkts 57532634, multicast pkts 2198069, broadcast pkts 48339981, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2009604, type 0, idx 21, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 21, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 4127607826, unicast pkts 29906144, multicast pkts 1233, broadcast pkts 69575, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2091792747, unicast pkts 3024931093, multicast pkts 2198065, broadcast pkts 48294332, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 5 00:13:30.678795 IP (tos 0x0, ttl 253, id 12211, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, seqnum 10499685, uptime 12973664, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2007104, type 0, idx 22, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 22, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 124432239, unicast pkts 511115, multicast pkts 21969, broadcast pkts 120004, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3066166092, unicast pkts 2595939, multicast pkts 2177143, broadcast pkts 48244891, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2008568, type 0, idx 23, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 23, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 142412715, unicast pkts 4067695849, multicast pkts 1301, broadcast pkts 59350, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3335716564, unicast pkts 2083658988, multicast pkts 2198160, broadcast pkts 48304443, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2009649, type 0, idx 24, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 24, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1376243919, unicast pkts 42736656, multicast pkts 1161, broadcast pkts 37177, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3949008841, unicast pkts 3045234063, multicast pkts 2197974, broadcast pkts 48326808, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2009621, type 0, idx 25, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 25, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1314601210, unicast pkts 4258058414, multicast pkts 1154, broadcast pkts 42425, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2836953588, unicast pkts 2986750860, multicast pkts 2197982, broadcast pkts 48321714, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007193, type 0, idx 26, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 26, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 2022052468, unicast pkts 13527038, multicast pkts 933, broadcast pkts 57921, discards 0
+ In errors 0, unknown protos 0
+ Out octets 620629707, unicast pkts 19469425, multicast pkts 2198358, broadcast pkts 48305869, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007253, type 0, idx 27, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 27, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3262458931, unicast pkts 47684835, multicast pkts 1039, broadcast pkts 5299, discards 0
+ In errors 3, unknown protos 0
+ Out octets 3900626480, unicast pkts 54120142, multicast pkts 2198706, broadcast pkts 48356894, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 2, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2005148, type 0, idx 28, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 28, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 259120552, unicast pkts 1107924, multicast pkts 198, broadcast pkts 3429, discards 0
+ In errors 2, unknown protos 0
+ Out octets 653805810, unicast pkts 4189777, multicast pkts 2198871, broadcast pkts 48346830, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 2, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 6 00:13:30.815569 IP (tos 0x0, ttl 253, id 12212, offset 0, flags [none], proto UDP (17), length 1136)
+ 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, seqnum 10499686, uptime 12973800, samples 6, length 1108
+ expanded counter sample (4), length 172, seqnum 2007268, type 0, idx 29, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 29, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1267844166, unicast pkts 49781127, multicast pkts 1368, broadcast pkts 40480, discards 0
+ In errors 0, unknown protos 0
+ Out octets 321243842, unicast pkts 57718818, multicast pkts 2197767, broadcast pkts 48323189, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2009633, type 0, idx 30, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 30, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1960827113, unicast pkts 4258067543, multicast pkts 1249, broadcast pkts 60280, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3144893898, unicast pkts 3032873251, multicast pkts 2198370, broadcast pkts 48301571, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2017264, type 0, idx 50, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 50, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 4161963595, unicast pkts 3263163886, multicast pkts 1151176, broadcast pkts 287880328, discards 0
+ In errors 0, unknown protos 0
+ Out octets 296840057, unicast pkts 1684325909, multicast pkts 1126235, broadcast pkts 1405132663, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2017179, type 0, idx 51, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 51, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 2214905605, unicast pkts 2466386895, multicast pkts 5276601, broadcast pkts 1225128676, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3025945518, unicast pkts 2183065991, multicast pkts 899419, broadcast pkts 2308600565, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 1220659, type 0, idx 52, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 52, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3618900052, unicast pkts 334487763, multicast pkts 651947, broadcast pkts 3712423535, discards 0
+ In errors 1, unknown protos 0
+ Out octets 697413100, unicast pkts 537120139, multicast pkts 163886, broadcast pkts 4083094099, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 1, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 1
+ expanded counter sample (4), length 172, seqnum 1220562, type 0, idx 53, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 53, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 851207797, unicast pkts 325440428, multicast pkts 164171, broadcast pkts 21946044, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1855403849, unicast pkts 517660679, multicast pkts 163669, broadcast pkts 21301, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 7 00:13:30.898050 IP (tos 0x0, ttl 253, id 23656, offset 0, flags [none], proto UDP (17), length 236)
+ 15.184.1.76.40948 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.8.4, agent-id 2, seqnum 204721, uptime 2612972594, samples 1, length 208
+ expanded counter sample (4), length 172, seqnum 87243, type 0, idx 105, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 105, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1063772406, unicast pkts 81120, multicast pkts 174318, broadcast pkts 3847558651, discards 0
+ In errors 6, unknown protos 0
+ Out octets 3728106697, unicast pkts 53832149, multicast pkts 218554, broadcast pkts 2160868, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 6, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 4
+ 8 00:13:30.939511 IP (tos 0x0, ttl 253, id 27097, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, seqnum 10354082, uptime 15617401, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2007459, type 0, idx 1, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 1, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 398, unicast pkts 0, multicast pkts 5, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3980656605, unicast pkts 65082, multicast pkts 2199480, broadcast pkts 48372199, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007455, type 0, idx 2, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 2, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1444442513, unicast pkts 69372226, multicast pkts 1207, broadcast pkts 31114, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1845546441, unicast pkts 41823689, multicast pkts 2201740, broadcast pkts 48335077, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007396, type 0, idx 3, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 3, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 200763454, unicast pkts 891785, multicast pkts 982, broadcast pkts 13320, discards 0
+ In errors 1, unknown protos 0
+ Out octets 3317395016, unicast pkts 5225674, multicast pkts 1949791, broadcast pkts 8711770, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 1, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007402, type 0, idx 4, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 4, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 165801154, unicast pkts 662297, multicast pkts 491, broadcast pkts 15752, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2164450538, unicast pkts 1115261, multicast pkts 1949901, broadcast pkts 8709518, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 1993492, type 0, idx 5, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 5, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 198991268, unicast pkts 941829, multicast pkts 664, broadcast pkts 33726, discards 0
+ In errors 1, unknown protos 0
+ Out octets 4052534333, unicast pkts 2591418, multicast pkts 1994963, broadcast pkts 8691000, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 1, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 1, frames too long 0, mac receive errors 0, symbol errors 1
+ expanded counter sample (4), length 172, seqnum 2007737, type 0, idx 6, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 6, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 561751280, unicast pkts 575605209, multicast pkts 1250, broadcast pkts 15322854, discards 0
+ In errors 1, unknown protos 0
+ Out octets 1513353683, unicast pkts 602598577, multicast pkts 1954404, broadcast pkts 4990177, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2008403, type 0, idx 7, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 7, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3193665198, unicast pkts 642460773, multicast pkts 1401, broadcast pkts 219741, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2913194238, unicast pkts 390983681, multicast pkts 1955407, broadcast pkts 20090610, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 9 00:13:30.940681 IP (tos 0x0, ttl 253, id 27098, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, seqnum 10354083, uptime 15617403, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2008394, type 0, idx 8, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 8, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1089063112, unicast pkts 559652885, multicast pkts 634, broadcast pkts 224712, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3489201031, unicast pkts 383200930, multicast pkts 1955795, broadcast pkts 20085985, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2008429, type 0, idx 9, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 9, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 2436646808, unicast pkts 568003495, multicast pkts 906, broadcast pkts 16545, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1717246279, unicast pkts 389888234, multicast pkts 1955669, broadcast pkts 20294132, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2005878, type 0, idx 10, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 10, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 105616289, unicast pkts 531333, multicast pkts 768, broadcast pkts 9159, discards 0
+ In errors 0, unknown protos 0
+ Out octets 10387408, unicast pkts 2209569, multicast pkts 1954606, broadcast pkts 20288646, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007661, type 0, idx 11, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 11, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1801369357, unicast pkts 137590483, multicast pkts 2109, broadcast pkts 55528, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1769140298, unicast pkts 113363667, multicast pkts 2197521, broadcast pkts 48315560, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007552, type 0, idx 12, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 12, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 4201581256, unicast pkts 45842890, multicast pkts 1610, broadcast pkts 22730, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1948082196, unicast pkts 53163690, multicast pkts 2198297, broadcast pkts 48348226, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007540, type 0, idx 13, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 13, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1019109063, unicast pkts 46613839, multicast pkts 1236, broadcast pkts 22226, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2052469045, unicast pkts 53287225, multicast pkts 2198499, broadcast pkts 48348754, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2010424, type 0, idx 14, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 14, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 36138805, unicast pkts 2267783883, multicast pkts 298, broadcast pkts 38306126, discards 0
+ In errors 2, unknown protos 0
+ Out octets 614425293, unicast pkts 2014274284, multicast pkts 2199305, broadcast pkts 10065409, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 2, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 10 00:13:30.941851 IP (tos 0x0, ttl 253, id 27099, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, seqnum 10354084, uptime 15617404, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2009508, type 0, idx 15, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 15, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 601225935, unicast pkts 4276033652, multicast pkts 1612, broadcast pkts 34856, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1981555755, unicast pkts 2886814164, multicast pkts 2198139, broadcast pkts 48336014, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007691, type 0, idx 16, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 16, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 4196949353, unicast pkts 109362236, multicast pkts 10140, broadcast pkts 40757, discards 0
+ In errors 0, unknown protos 0
+ Out octets 703618451, unicast pkts 113710944, multicast pkts 2190477, broadcast pkts 48326386, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007530, type 0, idx 17, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 17, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 4170852137, unicast pkts 45863536, multicast pkts 1559, broadcast pkts 27211, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2026848065, unicast pkts 53131746, multicast pkts 2198420, broadcast pkts 48343547, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2009475, type 0, idx 18, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 18, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 125400617, unicast pkts 3953942566, multicast pkts 1121, broadcast pkts 35754, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3010600832, unicast pkts 2658737621, multicast pkts 2198495, broadcast pkts 48334857, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007417, type 0, idx 19, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 19, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 97068375, unicast pkts 444889, multicast pkts 1007, broadcast pkts 8350, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4110456622, unicast pkts 336462, multicast pkts 2198059, broadcast pkts 48354968, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007243, type 0, idx 20, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 20, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 85827864, unicast pkts 397199, multicast pkts 1855, broadcast pkts 9570, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4029102009, unicast pkts 295961, multicast pkts 2196786, broadcast pkts 48315955, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007206, type 0, idx 21, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 21, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 91053304, unicast pkts 438205, multicast pkts 1011, broadcast pkts 7940, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4103297026, unicast pkts 317273, multicast pkts 2197586, broadcast pkts 48306440, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 11 00:13:30.942980 IP (tos 0x0, ttl 253, id 27100, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, seqnum 10354085, uptime 15617405, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2006231, type 0, idx 22, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 22, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 34112098, unicast pkts 105160, multicast pkts 21890, broadcast pkts 87902, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3973831211, unicast pkts 170034, multicast pkts 2177391, broadcast pkts 48280299, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007385, type 0, idx 23, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 23, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 88669719, unicast pkts 426910, multicast pkts 1274, broadcast pkts 9963, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4040560781, unicast pkts 263325, multicast pkts 2198421, broadcast pkts 48355369, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007419, type 0, idx 24, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 24, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 91303939, unicast pkts 434713, multicast pkts 1082, broadcast pkts 9160, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4108976190, unicast pkts 328918, multicast pkts 2198317, broadcast pkts 48355036, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007417, type 0, idx 25, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 25, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 92997371, unicast pkts 447348, multicast pkts 1121, broadcast pkts 9663, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4037714536, unicast pkts 258087, multicast pkts 2198271, broadcast pkts 48354566, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007413, type 0, idx 26, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 26, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 736394053, unicast pkts 4302342, multicast pkts 1537, broadcast pkts 9112, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4154005710, unicast pkts 612617, multicast pkts 2197991, broadcast pkts 48350433, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007109, type 0, idx 27, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 27, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 7325604, unicast pkts 91520, multicast pkts 1016, broadcast pkts 2335, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4107132478, unicast pkts 154975, multicast pkts 2199118, broadcast pkts 48364314, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2004644, type 0, idx 28, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 28, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 15584594, unicast pkts 232478, multicast pkts 12, broadcast pkts 1252, discards 0
+ In errors 0, unknown protos 0
+ Out octets 250802552, unicast pkts 447550, multicast pkts 2198406, broadcast pkts 48250290, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 12 00:13:31.135140 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto UDP (17), length 488)
+ 15.184.4.165.49408 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.4.165, agent-id 100, seqnum 304697, uptime 568980408, samples 1, length 460
+ counter sample (2), length 424, seqnum 304697, type 2, idx 1, records 6
+ enterprise 0, Unknown (2001) length 68
+ 0x0000: 0000 0004 0000 0002 0000 0001 1cc1 de18
+ 0x0010: 96f0 0000 0000 0003 0000 0001 1cc1 de18
+ 0x0020: 96f0 0000 0000 0005 0000 0001 1cc1 de18
+ 0x0030: 96f0 0000 0000 0006 0000 0001 0000 0000
+ 0x0040: 0000 0000
+ enterprise 0, Unknown (2005) length 52
+ 0x0000: 0000 01ce 1562 3800 0000 01b5 5abb 6000
+ 0x0010: 0000 07a2 0002 2ed1 0000 0000 ad27 5000
+ 0x0020: 0011 36a1 03c8 c6c6 0000 014c e1b6 8800
+ 0x0030: 1016 b722
+ enterprise 0, Unknown (2004) length 72
+ 0x0000: 0000 0005 e225 c000 0000 0003 848a 3000
+ 0x0010: 0000 0000 0000 0000 0000 0000 13bf c000
+ 0x0020: 0000 0002 3662 0000 0000 0000 0000 0000
+ 0x0030: 0000 0000 0000 0000 0015 af62 299c 36d1
+ 0x0040: 0000 0000 0000 0000
+ enterprise 0, Unknown (2003) length 68
+ 0x0000: 3ca3 d70a 3c23 d70a 3d23 d70a 0000 0001
+ 0x0010: 0000 0186 0000 0018 0000 0640 0096 43b9
+ 0x0020: 1e74 d09c 0187 6bc0 142d 000a cc79 de36
+ 0x0030: 00a5 dd9a 0051 60bc 041a 9f4c 7a8f 6da7
+ 0x0040: 3842 8b86
+ enterprise 0, Unknown (2006) length 40
+ 0x0000: 0000 16b2 0b31 f24e fcb8 d0dc 0000 0000
+ 0x0010: 0000 032a 0000 36b3 f8ae 8e96 0ab2 541e
+ 0x0020: 0000 0000 0000 0000
+ enterprise 0, Unknown (2000) length 64
+ 0x0000: 0000 0010 7072 6f78 792d 7573 6530 3331
+ 0x0010: 3437 6b32 3638 3935 3431 5355 4530 3331
+ 0x0020: 3437 4b32 0000 0003 0000 0002 0000 000e
+ 0x0030: 322e 362e 3138 2d31 3934 2e65 6c35 0000
+ 13 00:13:31.467318 IP (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto UDP (17), length 100)
+ 168.87.240.2.40000 > 15.184.3.9.6343: sFlow version 327681 packet not supported
+ 14 00:13:31.475115 IP (tos 0x0, ttl 255, id 16476, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.3.1.41024 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.129, agent-id 2, seqnum 211306, uptime 2441326183, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 81390, type 0, idx 56, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 56, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 809903675, unicast pkts 3736015, multicast pkts 162927, broadcast pkts 30039, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3159365496, unicast pkts 3749574, multicast pkts 328087, broadcast pkts 279825377, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 6536, type 0, idx 33, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 33, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 2950591154, unicast pkts 334880915, multicast pkts 13078, broadcast pkts 633, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3019300047, unicast pkts 221588667, multicast pkts 13070, broadcast pkts 62903, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 81076, type 0, idx 34, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 34, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 49685433, unicast pkts 2528128710, multicast pkts 162056, broadcast pkts 1220, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2876151927, unicast pkts 678847059, multicast pkts 163438, broadcast pkts 1810770236, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 81493, type 0, idx 35, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 35, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 408342602, unicast pkts 2796427385, multicast pkts 751161, broadcast pkts 740734824, discards 0
+ In errors 0, unknown protos 0
+ Out octets 642300096, unicast pkts 1951849543, multicast pkts 183235, broadcast pkts 22658, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 81669, type 0, idx 37, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 37, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1461246724, unicast pkts 1380492582, multicast pkts 163835, broadcast pkts 140670, discards 0
+ In errors 0, unknown protos 0
+ Out octets 498812438, unicast pkts 3834735035, multicast pkts 174908, broadcast pkts 1255093219, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 81390, type 0, idx 38, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 38, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 71981454, unicast pkts 214133, multicast pkts 162760, broadcast pkts 157, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3267993738, unicast pkts 2856556, multicast pkts 164514, broadcast pkts 1813907262, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 81434, type 0, idx 39, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 39, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3630784674, unicast pkts 832589817, multicast pkts 162837, broadcast pkts 84051, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3008452523, unicast pkts 1179091938, multicast pkts 164436, broadcast pkts 1814098221, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 15 00:13:31.635326 IP (tos 0x0, ttl 255, id 16477, offset 0, flags [none], proto UDP (17), length 596)
+ 15.184.3.1.41024 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.129, agent-id 2, seqnum 211307, uptime 2441326343, samples 3, length 568
+ expanded counter sample (4), length 172, seqnum 81390, type 0, idx 40, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 40, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 38989430, unicast pkts 0, multicast pkts 162755, broadcast pkts 3, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2802182351, unicast pkts 56820, multicast pkts 165686, broadcast pkts 1814332502, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 81138, type 0, idx 41, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 41, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 46653626, unicast pkts 85863, multicast pkts 27682, broadcast pkts 478300, discards 0
+ In errors 0, unknown protos 0
+ Out octets 311406364, unicast pkts 80002, multicast pkts 1261847, broadcast pkts 1178283, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 81376, type 0, idx 50, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 50, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 2331728577, unicast pkts 108446058, multicast pkts 81380, broadcast pkts 1837, discards 0
+ In errors 0, unknown protos 0
+ Out octets 330353971, unicast pkts 160483289, multicast pkts 1588895, broadcast pkts 1448152, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 16 00:13:31.666518 IP (tos 0x0, ttl 254, id 50953, offset 0, flags [none], proto UDP (17), length 956)
+ 168.87.240.3.50340 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.129, agent-id 6, seqnum 444098, uptime 127118529, samples 5, length 928
+ expanded counter sample (4), length 172, seqnum 147400, type 0, idx 60, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 60, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 72510805, unicast pkts 0, multicast pkts 294749, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 123866349, unicast pkts 13446, multicast pkts 736973, broadcast pkts 117224, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 147400, type 0, idx 61, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 61, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 72511166, unicast pkts 0, multicast pkts 294750, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2101933816, unicast pkts 33990, multicast pkts 368505, broadcast pkts 42768255, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 147400, type 0, idx 62, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 62, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 89171611, unicast pkts 5392, multicast pkts 294750, broadcast pkts 49641, discards 0
+ In errors 0, unknown protos 0
+ Out octets 124086999, unicast pkts 11982, multicast pkts 736973, broadcast pkts 117224, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 147400, type 0, idx 63, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 63, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 71037120, unicast pkts 0, multicast pkts 294748, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2101596784, unicast pkts 29476, multicast pkts 368505, broadcast pkts 42768255, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 147400, type 0, idx 64, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 64, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 71037922, unicast pkts 0, multicast pkts 294751, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 123494040, unicast pkts 7500, multicast pkts 736973, broadcast pkts 117224, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 17 00:13:31.850000 IP (tos 0x0, ttl 253, id 27101, offset 0, flags [none], proto UDP (17), length 1136)
+ 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, seqnum 10354086, uptime 15618312, samples 6, length 1108
+ expanded counter sample (4), length 172, seqnum 2007421, type 0, idx 29, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 29, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 82208831, unicast pkts 403685, multicast pkts 1054, broadcast pkts 8246, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4103781979, unicast pkts 294994, multicast pkts 2198185, broadcast pkts 48352457, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007311, type 0, idx 30, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 30, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 92569896, unicast pkts 433051, multicast pkts 1312, broadcast pkts 12292, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4037227515, unicast pkts 268387, multicast pkts 2197973, broadcast pkts 48326301, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2018134, type 0, idx 50, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 50, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1215684621, unicast pkts 3179986010, multicast pkts 4299773, broadcast pkts 2959481171, discards 0
+ In errors 0, unknown protos 0
+ Out octets 832983248, unicast pkts 684975702, multicast pkts 1115367, broadcast pkts 45280648, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 1221174, type 0, idx 51, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 51, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 576720530, unicast pkts 537564819, multicast pkts 1613151, broadcast pkts 660268633, discards 0
+ In errors 0, unknown protos 0
+ Out octets 428264565, unicast pkts 1068854786, multicast pkts 344705, broadcast pkts 9140809, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 1221287, type 0, idx 52, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 52, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3028289271, unicast pkts 458255786, multicast pkts 651461, broadcast pkts 541454, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3361225808, unicast pkts 1109386475, multicast pkts 163507, broadcast pkts 8683, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 1221183, type 0, idx 53, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 53, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 2050689076, unicast pkts 476082627, multicast pkts 164214, broadcast pkts 21756786, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2159078261, unicast pkts 1043897297, multicast pkts 163510, broadcast pkts 210489, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 18 00:13:32.153315 IP (tos 0x0, ttl 62, id 0, offset 0, flags [DF], proto UDP (17), length 452)
+ 15.184.13.248.50229 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.13.52, agent-id 100, seqnum 26626, uptime 798762000, samples 1, length 424
+ counter sample (2), length 388, seqnum 26626, type 2, idx 1, records 6
+ enterprise 0, Unknown (2001) length 36
+ 0x0000: 0000 0002 0000 0002 0000 0001 d485 64cc
+ 0x0010: 6024 0000 0000 0003 0000 0001 d485 64cc
+ 0x0020: 6025 0000
+ enterprise 0, Unknown (2005) length 52
+ 0x0000: 0000 0018 3daa e800 0000 0016 50cb 8000
+ 0x0010: 0000 07e5 0000 bac1 0000 0000 29ac 2400
+ 0x0020: 0003 3cc1 0044 1f88 0000 000c eeff 1000
+ 0x0030: 0011 78ce
+ enterprise 0, Unknown (2004) length 72
+ 0x0000: 0000 0003 caa6 5000 0000 0003 9dc3 3000
+ 0x0010: 0000 0000 0000 0000 0000 0000 0a33 d000
+ 0x0020: 0000 0000 1a2a 4000 0000 0000 7ff5 6000
+ 0x0030: 0000 0000 7ff5 6000 0005 3fea 019d dfe2
+ 0x0040: 0000 0000 0000 0000
+ enterprise 0, Unknown (2003) length 68
+ 0x0000: 0000 0000 0000 0000 0000 0000 0000 0001
+ 0x0010: 0000 0153 0000 0018 0000 0640 000c 3077
+ 0x0020: 0033 efdc 0000 02da 0015 f7b6 7652 2a4a
+ 0x0030: 0002 204c 0000 36ba 0001 458c 306c a669
+ 0x0040: e653 ddf6
+ enterprise 0, Unknown (2006) length 40
+ 0x0000: 0000 0000 2550 2198 005a d481 0000 0000
+ 0x0010: 0000 0000 0000 0000 1a2e 15ef 002a 4d2a
+ 0x0020: 0000 0000 0000 0000
+ enterprise 0, Unknown (2000) length 60
+ 0x0000: 0000 000a 7573 6530 3337 3130 6666 0000
+ 0x0010: 3431 3036 3630 5355 4530 3337 3130 4646
+ 0x0020: 0000 0003 0000 0002 0000 000e 322e 362e
+ 0x0030: 3138 2d31 3934 2e65 6c35 0000
+ 19 00:13:32.190770 IP (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto UDP (17), length 100)
+ 168.87.240.1.40000 > 15.184.3.9.6343: sFlow version 327681 packet not supported
+ 20 00:13:32.190783 IP (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto UDP (17), length 148)
+ 168.87.240.1.40000 > 15.184.3.9.6343: sFlow version 327682 packet not supported
+ 21 00:13:32.193594 IP (tos 0x0, ttl 254, id 8886, offset 0, flags [none], proto UDP (17), length 100)
+ 168.87.240.1.40000 > 15.184.3.9.6343: sFlow version 327681 packet not supported
+ 22 00:13:32.467378 IP (tos 0x0, ttl 254, id 0, offset 0, flags [none], proto UDP (17), length 148)
+ 168.87.240.2.40000 > 15.184.3.9.6343: sFlow version 327682 packet not supported
+ 23 00:13:32.667301 IP (tos 0x0, ttl 254, id 50954, offset 0, flags [none], proto UDP (17), length 596)
+ 168.87.240.3.50340 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.129, agent-id 6, seqnum 444099, uptime 127119529, samples 3, length 568
+ expanded counter sample (4), length 172, seqnum 147400, type 0, idx 65, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 65, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 71855431, unicast pkts 5778, multicast pkts 294751, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2102528585, unicast pkts 40099, multicast pkts 368505, broadcast pkts 42768255, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 147400, type 0, idx 66, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 66, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 1, adminstatus: up, operstatus: down
+ In octets 25177702, unicast pkts 0, multicast pkts 104472, broadcast pkts 4, discards 0
+ In errors 0, unknown protos 0
+ Out octets 39878920, unicast pkts 4387, multicast pkts 261178, broadcast pkts 1, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 147400, type 0, idx 67, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 67, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 1, adminstatus: up, operstatus: down
+ In octets 25284454, unicast pkts 0, multicast pkts 104859, broadcast pkts 4, discards 0
+ In errors 0, unknown protos 0
+ Out octets 31308450, unicast pkts 5841, multicast pkts 133252, broadcast pkts 299, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 24 00:13:32.675174 IP (tos 0x0, ttl 253, id 12213, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, seqnum 10499687, uptime 12975660, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2007196, type 0, idx 1, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 1, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 2460750, unicast pkts 22544, multicast pkts 5, broadcast pkts 6408, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3991394888, unicast pkts 131978, multicast pkts 2198965, broadcast pkts 48358863, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2006746, type 0, idx 2, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 2, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 122196260, unicast pkts 82823825, multicast pkts 710, broadcast pkts 38540, discards 0
+ In errors 2, unknown protos 0
+ Out octets 3744715166, unicast pkts 93942161, multicast pkts 2218252, broadcast pkts 48317917, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 2, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007119, type 0, idx 3, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 3, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 87175881, unicast pkts 11173387, multicast pkts 1312, broadcast pkts 7310, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2575091711, unicast pkts 8663056, multicast pkts 1949260, broadcast pkts 8701202, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007649, type 0, idx 4, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 4, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3013639728, unicast pkts 424917338, multicast pkts 1216, broadcast pkts 196654, discards 0
+ In errors 0, unknown protos 0
+ Out octets 584569975, unicast pkts 294167698, multicast pkts 1948957, broadcast pkts 8512276, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 1832885, type 0, idx 5, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 5, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3835856598, unicast pkts 6812799, multicast pkts 1145, broadcast pkts 705277, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2182764482, unicast pkts 8284848, multicast pkts 2738770, broadcast pkts 7987023, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007140, type 0, idx 6, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 6, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 21722, unicast pkts 0, multicast pkts 12, broadcast pkts 37, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1874046630, unicast pkts 98496, multicast pkts 1955062, broadcast pkts 20311836, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2006987, type 0, idx 7, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 7, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3474926128, unicast pkts 10088201, multicast pkts 1463, broadcast pkts 14105, discards 0
+ In errors 0, unknown protos 0
+ Out octets 831378843, unicast pkts 12805926, multicast pkts 1954494, broadcast pkts 20293371, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 25 00:13:32.676361 IP (tos 0x0, ttl 253, id 12214, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, seqnum 10499688, uptime 12975661, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2007115, type 0, idx 8, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 8, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3858988244, unicast pkts 13191097, multicast pkts 1215, broadcast pkts 24593, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2559232288, unicast pkts 16126546, multicast pkts 1954848, broadcast pkts 20284434, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007002, type 0, idx 9, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 9, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3386316332, unicast pkts 14360061, multicast pkts 1244, broadcast pkts 16485, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1675799221, unicast pkts 15790519, multicast pkts 1954451, broadcast pkts 20291230, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2005310, type 0, idx 10, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 10, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1558898282, unicast pkts 162603641, multicast pkts 1331, broadcast pkts 188407, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3568458900, unicast pkts 162582480, multicast pkts 1953553, broadcast pkts 20106785, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007257, type 0, idx 11, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 11, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 125808339, unicast pkts 691735, multicast pkts 2539, broadcast pkts 22184, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1249750181, unicast pkts 33020559, multicast pkts 2196657, broadcast pkts 48342104, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007179, type 0, idx 12, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 12, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 45949249, unicast pkts 205456, multicast pkts 1743, broadcast pkts 8308, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4019313234, unicast pkts 210496, multicast pkts 2197587, broadcast pkts 48353561, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007156, type 0, idx 13, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 13, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 32111027, unicast pkts 143922, multicast pkts 1193, broadcast pkts 5276, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4050797426, unicast pkts 198665, multicast pkts 2197850, broadcast pkts 48353779, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2006876, type 0, idx 14, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 14, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 19576, unicast pkts 19, multicast pkts 5, broadcast pkts 30, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3990801228, unicast pkts 107683, multicast pkts 2199048, broadcast pkts 48364452, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 26 00:13:32.677515 IP (tos 0x0, ttl 253, id 12215, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, seqnum 10499689, uptime 12975663, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2007175, type 0, idx 15, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 15, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 96700793, unicast pkts 453020, multicast pkts 2568, broadcast pkts 22804, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4042743345, unicast pkts 379591, multicast pkts 2196676, broadcast pkts 48338646, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007086, type 0, idx 16, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 16, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 289703711, unicast pkts 1654844, multicast pkts 37302, broadcast pkts 22784, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4098637095, unicast pkts 801788, multicast pkts 2166613, broadcast pkts 48320960, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007172, type 0, idx 17, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 17, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 45204461, unicast pkts 194096, multicast pkts 1700, broadcast pkts 8788, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4014792810, unicast pkts 198133, multicast pkts 2197652, broadcast pkts 48351768, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007170, type 0, idx 18, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 18, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 95210366, unicast pkts 443561, multicast pkts 2169, broadcast pkts 24997, discards 0
+ In errors 0, unknown protos 0
+ Out octets 4035379503, unicast pkts 332327, multicast pkts 2196767, broadcast pkts 48336027, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007265, type 0, idx 19, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 19, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1379521296, unicast pkts 50010620, multicast pkts 1046, broadcast pkts 48921, discards 0
+ In errors 0, unknown protos 0
+ Out octets 435976335, unicast pkts 57993600, multicast pkts 2197958, broadcast pkts 48315375, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007258, type 0, idx 20, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 20, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 312017292, unicast pkts 47238597, multicast pkts 1476, broadcast pkts 23377, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3242136708, unicast pkts 57532634, multicast pkts 2198069, broadcast pkts 48339981, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2009605, type 0, idx 21, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 21, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 4127607826, unicast pkts 29906144, multicast pkts 1233, broadcast pkts 69575, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2091792747, unicast pkts 3024931093, multicast pkts 2198065, broadcast pkts 48294332, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 27 00:13:32.678699 IP (tos 0x0, ttl 253, id 12216, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, seqnum 10499690, uptime 12975664, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2007105, type 0, idx 22, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 22, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 124432239, unicast pkts 511115, multicast pkts 21969, broadcast pkts 120004, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3066166092, unicast pkts 2595939, multicast pkts 2177143, broadcast pkts 48244891, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2008569, type 0, idx 23, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 23, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 142412715, unicast pkts 4067695849, multicast pkts 1301, broadcast pkts 59350, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3335716564, unicast pkts 2083658988, multicast pkts 2198160, broadcast pkts 48304443, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2009650, type 0, idx 24, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 24, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1376243919, unicast pkts 42736656, multicast pkts 1161, broadcast pkts 37177, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3949008841, unicast pkts 3045234063, multicast pkts 2197974, broadcast pkts 48326808, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2009622, type 0, idx 25, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 25, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1314601210, unicast pkts 4258058414, multicast pkts 1154, broadcast pkts 42425, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2836953588, unicast pkts 2986750860, multicast pkts 2197982, broadcast pkts 48321714, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007194, type 0, idx 26, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 26, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 2022052468, unicast pkts 13527038, multicast pkts 933, broadcast pkts 57921, discards 0
+ In errors 0, unknown protos 0
+ Out octets 620629707, unicast pkts 19469425, multicast pkts 2198358, broadcast pkts 48305869, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007254, type 0, idx 27, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 27, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3262458931, unicast pkts 47684835, multicast pkts 1039, broadcast pkts 5299, discards 0
+ In errors 3, unknown protos 0
+ Out octets 3900626480, unicast pkts 54120142, multicast pkts 2198706, broadcast pkts 48356894, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 2, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2005149, type 0, idx 28, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 28, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 259120552, unicast pkts 1107924, multicast pkts 198, broadcast pkts 3429, discards 0
+ In errors 2, unknown protos 0
+ Out octets 653805810, unicast pkts 4189777, multicast pkts 2198871, broadcast pkts 48346830, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 2, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 28 00:13:32.815939 IP (tos 0x0, ttl 253, id 12217, offset 0, flags [none], proto UDP (17), length 1136)
+ 15.184.1.195.4942 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.195, agent-id 1, seqnum 10499691, uptime 12975801, samples 6, length 1108
+ expanded counter sample (4), length 172, seqnum 2007269, type 0, idx 29, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 29, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1267844166, unicast pkts 49781127, multicast pkts 1368, broadcast pkts 40480, discards 0
+ In errors 0, unknown protos 0
+ Out octets 321243842, unicast pkts 57718818, multicast pkts 2197767, broadcast pkts 48323189, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2009634, type 0, idx 30, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 30, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1960827113, unicast pkts 4258067543, multicast pkts 1249, broadcast pkts 60280, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3144893898, unicast pkts 3032873251, multicast pkts 2198370, broadcast pkts 48301571, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2017265, type 0, idx 50, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 50, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 4161963799, unicast pkts 3263163886, multicast pkts 1151176, broadcast pkts 287880331, discards 0
+ In errors 0, unknown protos 0
+ Out octets 296849779, unicast pkts 1684325936, multicast pkts 1126235, broadcast pkts 1405132663, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2017180, type 0, idx 51, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 51, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 2214905605, unicast pkts 2466386895, multicast pkts 5276601, broadcast pkts 1225128676, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3025945518, unicast pkts 2183065991, multicast pkts 899419, broadcast pkts 2308600565, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 1220660, type 0, idx 52, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 52, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3618900052, unicast pkts 334487763, multicast pkts 651947, broadcast pkts 3712423535, discards 0
+ In errors 1, unknown protos 0
+ Out octets 697413100, unicast pkts 537120139, multicast pkts 163886, broadcast pkts 4083094099, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 1, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 1
+ expanded counter sample (4), length 172, seqnum 1220563, type 0, idx 53, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 53, iftype 117, ifspeed 10000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 851211409, unicast pkts 325440450, multicast pkts 164171, broadcast pkts 21946046, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1855403849, unicast pkts 517660679, multicast pkts 163669, broadcast pkts 21301, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 29 00:13:32.939517 IP (tos 0x0, ttl 253, id 27102, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, seqnum 10354087, uptime 15619401, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2007460, type 0, idx 1, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 1, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 398, unicast pkts 0, multicast pkts 5, broadcast pkts 0, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3980656605, unicast pkts 65082, multicast pkts 2199480, broadcast pkts 48372199, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007456, type 0, idx 2, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 2, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1444442513, unicast pkts 69372226, multicast pkts 1207, broadcast pkts 31114, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1845546441, unicast pkts 41823689, multicast pkts 2201740, broadcast pkts 48335077, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007397, type 0, idx 3, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 3, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 200763454, unicast pkts 891785, multicast pkts 982, broadcast pkts 13320, discards 0
+ In errors 1, unknown protos 0
+ Out octets 3317395016, unicast pkts 5225674, multicast pkts 1949791, broadcast pkts 8711770, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 1, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007403, type 0, idx 4, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 4, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 165801154, unicast pkts 662297, multicast pkts 491, broadcast pkts 15752, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2164450538, unicast pkts 1115261, multicast pkts 1949901, broadcast pkts 8709518, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 1993493, type 0, idx 5, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 5, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 198991268, unicast pkts 941829, multicast pkts 664, broadcast pkts 33726, discards 0
+ In errors 1, unknown protos 0
+ Out octets 4052534333, unicast pkts 2591418, multicast pkts 1994963, broadcast pkts 8691000, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 1, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 1, frames too long 0, mac receive errors 0, symbol errors 1
+ expanded counter sample (4), length 172, seqnum 2007738, type 0, idx 6, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 6, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 561751280, unicast pkts 575605209, multicast pkts 1250, broadcast pkts 15322854, discards 0
+ In errors 1, unknown protos 0
+ Out octets 1513354003, unicast pkts 602598577, multicast pkts 1954404, broadcast pkts 4990182, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2008404, type 0, idx 7, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 7, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 3193665262, unicast pkts 642460773, multicast pkts 1401, broadcast pkts 219742, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2913194494, unicast pkts 390983681, multicast pkts 1955407, broadcast pkts 20090614, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ 30 00:13:32.940683 IP (tos 0x0, ttl 253, id 27103, offset 0, flags [none], proto UDP (17), length 1316)
+ 15.184.1.194.3099 > 15.184.3.9.6343: sFlowv5, IPv4 agent 15.184.1.194, agent-id 1, seqnum 10354088, uptime 15619403, samples 7, length 1288
+ expanded counter sample (4), length 172, seqnum 2008395, type 0, idx 8, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 8, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1089063112, unicast pkts 559652885, multicast pkts 634, broadcast pkts 224712, discards 0
+ In errors 0, unknown protos 0
+ Out octets 3489201351, unicast pkts 383200930, multicast pkts 1955795, broadcast pkts 20085990, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2008430, type 0, idx 9, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 9, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 2436646808, unicast pkts 568003495, multicast pkts 906, broadcast pkts 16545, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1717246599, unicast pkts 389888234, multicast pkts 1955669, broadcast pkts 20294137, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2005879, type 0, idx 10, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 10, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 105616289, unicast pkts 531333, multicast pkts 768, broadcast pkts 9159, discards 0
+ In errors 0, unknown protos 0
+ Out octets 10387728, unicast pkts 2209569, multicast pkts 1954606, broadcast pkts 20288651, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007662, type 0, idx 11, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 11, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1801371574, unicast pkts 137590493, multicast pkts 2109, broadcast pkts 55528, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1769141617, unicast pkts 113363676, multicast pkts 2197521, broadcast pkts 48315560, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007553, type 0, idx 12, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 12, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 4201581256, unicast pkts 45842890, multicast pkts 1610, broadcast pkts 22730, discards 0
+ In errors 0, unknown protos 0
+ Out octets 1948082196, unicast pkts 53163690, multicast pkts 2198297, broadcast pkts 48348226, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2007541, type 0, idx 13, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 13, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 1019109063, unicast pkts 46613839, multicast pkts 1236, broadcast pkts 22226, discards 0
+ In errors 0, unknown protos 0
+ Out octets 2052469045, unicast pkts 53287225, multicast pkts 2198499, broadcast pkts 48348754, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 0, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
+ expanded counter sample (4), length 172, seqnum 2010425, type 0, idx 14, records 2
+ enterprise 0, Generic counter (1) length 88
+ ifindex 14, iftype 117, ifspeed 1000000000, ifdirection 1 (full-duplex)
+ ifstatus 3, adminstatus: up, operstatus: up
+ In octets 36138805, unicast pkts 2267783883, multicast pkts 298, broadcast pkts 38306126, discards 0
+ In errors 2, unknown protos 0
+ Out octets 614425293, unicast pkts 2014274284, multicast pkts 2199305, broadcast pkts 10065409, discards 0
+ Out errors 0, promisc mode 2
+ enterprise 0, Ethernet counter (2) length 52
+ align errors 0, fcs errors 2, single collision 0, multiple collision 0, test error 0
+ deferred 0, late collision 0, excessive collision 0, mac trans error 0
+ carrier error 0, frames too long 0, mac receive errors 0, symbol errors 0
diff --git a/tests/sflow_multiple_counter_30_pdus.pcap b/tests/sflow_multiple_counter_30_pdus.pcap
new file mode 100644
index 0000000..5ec39c4
--- /dev/null
+++ b/tests/sflow_multiple_counter_30_pdus.pcap
Binary files differ
diff --git a/tests/sflow_print-segv.out b/tests/sflow_print-segv.out
new file mode 100644
index 0000000..a392c44
--- /dev/null
+++ b/tests/sflow_print-segv.out
@@ -0,0 +1,2 @@
+ 1 17:04:53.834750 IP (tos 0x0, ttl 64, id 60790, offset 0, flags [none], proto UDP (17), length 896, bad cksum 72f3 (->72f7)!)
+ 10.0.0.250.3895 > 10.1.2.5.6343: sFlowv5 [length 8 < 28] (invalid)
diff --git a/tests/sflow_print-segv.pcap b/tests/sflow_print-segv.pcap
new file mode 100644
index 0000000..60b2869
--- /dev/null
+++ b/tests/sflow_print-segv.pcap
Binary files differ
diff --git a/tests/slip-bad-direction.out b/tests/slip-bad-direction.out
new file mode 100644
index 0000000..46804c9
--- /dev/null
+++ b/tests/slip-bad-direction.out
@@ -0,0 +1 @@
+ 1 14:23:50.507384 Invalid direction 231 ip v14
diff --git a/tests/slip-bad-direction.pcap b/tests/slip-bad-direction.pcap
new file mode 100644
index 0000000..380c342
--- /dev/null
+++ b/tests/slip-bad-direction.pcap
Binary files differ
diff --git a/tests/slip-compressed_sl_print-oobr.out b/tests/slip-compressed_sl_print-oobr.out
new file mode 100644
index 0000000..03387de
--- /dev/null
+++ b/tests/slip-compressed_sl_print-oobr.out
@@ -0,0 +1 @@
+ 1 15:08:45.1677780311 I ctcp * W+48 [|slip]
diff --git a/tests/slip-compressed_sl_print-oobr.pcap b/tests/slip-compressed_sl_print-oobr.pcap
new file mode 100644
index 0000000..b8daf56
--- /dev/null
+++ b/tests/slip-compressed_sl_print-oobr.pcap
Binary files differ
diff --git a/tests/slip-sliplink_print-oobr.out b/tests/slip-sliplink_print-oobr.out
new file mode 100644
index 0000000..bd43c7b
--- /dev/null
+++ b/tests/slip-sliplink_print-oobr.out
@@ -0,0 +1 @@
+ 1 15:08:45.1677780310 O utcp 57: [|slip]
diff --git a/tests/slip-sliplink_print-oobr.pcap b/tests/slip-sliplink_print-oobr.pcap
new file mode 100644
index 0000000..c38d01b
--- /dev/null
+++ b/tests/slip-sliplink_print-oobr.pcap
Binary files differ
diff --git a/tests/smb.tests b/tests/smb.tests
new file mode 100644
index 0000000..8c7fb2b
--- /dev/null
+++ b/tests/smb.tests
@@ -0,0 +1,140 @@
+# -*- perl -*-
+
+# Only attempt OpenSSL-specific tests when compiled with the library.
+# Reading the secret(s) from a file does not work with Capsicum.
+
+$testlist = [
+
+# EAP tests
+ {
+ config_set => 'ENABLE_SMB',
+ name => 'eapon1',
+ input => 'eapon1.pcap',
+ output => 'eapon1.out',
+ },
+
+ {
+ config_unset => 'ENABLE_SMB',
+ name => 'eapon1-nosmb',
+ input => 'eapon1.pcap',
+ output => 'eapon1-nosmb.out',
+ },
+
+ {
+ config_set => 'ENABLE_SMB',
+ name => 'eapon1-v',
+ input => 'eapon1.pcap',
+ output => 'eapon1-v.out',
+ args => '-v'
+ },
+
+ {
+ config_unset => 'ENABLE_SMB',
+ name => 'eapon1-v-nosmb',
+ input => 'eapon1.pcap',
+ output => 'eapon1-v-nosmb.out',
+ args => '-v'
+ },
+
+# IPX/Netware packets
+ {
+ config_set => 'ENABLE_SMB',
+ name => 'ipx',
+ input => 'ipx.pcap',
+ output => 'ipx.out',
+ },
+
+ {
+ config_unset => 'ENABLE_SMB',
+ name => 'ipx-nosmb',
+ input => 'ipx.pcap',
+ output => 'ipx-nosmb.out',
+ },
+
+# bad packets from Otto Airamo and Antti Levomäki
+ {
+ config_set => 'ENABLE_SMB',
+ name => 'nbns-valgrind',
+ input => 'nbns-valgrind.pcap',
+ output => 'nbns-valgrind.out',
+ args => '-vvv -e',
+ },
+
+ {
+ config_unset => 'ENABLE_SMB',
+ name => 'nbns-valgrind-nosmb',
+ input => 'nbns-valgrind.pcap',
+ output => 'nbns-valgrind-nosmb.out',
+ args => '-vvv -e',
+ },
+
+# bad packets from Junjie Wang
+ {
+ config_set => 'ENABLE_SMB',
+ name => 'smb_print_trans-oobr1',
+ input => 'smb_print_trans-oobr1.pcap',
+ output => 'smb_print_trans-oobr1.out',
+ args => '-vv',
+ },
+
+ {
+ config_unset => 'ENABLE_SMB',
+ name => 'smb_print_trans-oobr1-nosmb',
+ input => 'smb_print_trans-oobr1.pcap',
+ output => 'smb_print_trans-oobr1-nosmb.out',
+ args => '-vv',
+ },
+
+# bad packets from Philippe Antoine
+ {
+ config_set => 'ENABLE_SMB',
+ name => 'smb_print_trans-oobr2',
+ input => 'smb_print_trans-oobr2.pcap',
+ output => 'smb_print_trans-oobr2.out',
+ args => '-vv',
+ },
+
+ {
+ config_unset => 'ENABLE_SMB',
+ name => 'smb_print_trans-oobr2-nosmb',
+ input => 'smb_print_trans-oobr2.pcap',
+ output => 'smb_print_trans-oobr2-nosmb.out',
+ args => '-vv',
+ },
+
+# bad packets from Luis Rocha
+ {
+ config_set => 'ENABLE_SMB',
+ name => 'smb_data_print-oobr',
+ input => 'smb_data_print-oobr.pcapng',
+ output => 'smb_data_print-oobr.out',
+ args => '-vv',
+ },
+
+ {
+ config_unset => 'ENABLE_SMB',
+ name => 'smb_data_print-oobr-nosmb',
+ input => 'smb_data_print-oobr.pcapng',
+ output => 'smb_data_print-oobr-nosmb.out',
+ args => '-vv',
+ },
+
+ {
+ config_set => 'ENABLE_SMB',
+ name => 'smb_data_print-segv',
+ input => 'smb_data_print-segv.pcapng',
+ output => 'smb_data_print-segv.out',
+ args => '-vv',
+ },
+
+ {
+ config_unset => 'ENABLE_SMB',
+ name => 'smb_data_print-segv-nosmb',
+ input => 'smb_data_print-segv.pcapng',
+ output => 'smb_data_print-segv-nosmb.out',
+ args => '-vv',
+ },
+
+ ];
+
+1;
diff --git a/tests/smb_data_print-oobr-nosmb.out b/tests/smb_data_print-oobr-nosmb.out
new file mode 100644
index 0000000..93ea4a3
--- /dev/null
+++ b/tests/smb_data_print-oobr-nosmb.out
@@ -0,0 +1,8 @@
+ 1 15:35:08.640523 IP (tos 0x0, ttl 128, id 376, offset 0, flags [DF], proto TCP (6), length 128)
+ 192.168.56.55.445 > 192.168.56.119.49199: Flags [P.], cksum 0x3e2f (incorrect -> 0x3e31), seq 4267808374:4267808462, ack 628292694, win 63102, length 88
+ 2 15:35:08.640906 IP (tos 0x0, ttl 128, id 632, offset 0, flags [DF], proto TCP (6), length 114)
+ 192.168.56.119.49199 > 192.168.56.55.445: Flags [P.], cksum 0x2437 (correct), seq 1:75, ack 88, win 254, length 74
+ 3 15:35:08.641033 IP (tos 0x0, ttl 128, id 377, offset 0, flags [DF], proto TCP (6), length 120)
+ 192.168.56.55.445 > 192.168.56.119.49199: Flags [P.], cksum 0x00fb (incorrect -> 0x11f5), seq 88:168, ack 75, win 62978, length 80
+ 4 15:35:08.641358 IP (tos 0x0, ttl 128, id 633, offset 0, flags [DF], proto TCP (6), length 116)
+ 192.168.56.119.49199 > 192.168.56.55.445: Flags [P.], cksum 0x2253 (correct), seq 75:151, ack 168, win 253, length 76
diff --git a/tests/smb_data_print-oobr.out b/tests/smb_data_print-oobr.out
new file mode 100644
index 0000000..5459b56
--- /dev/null
+++ b/tests/smb_data_print-oobr.out
@@ -0,0 +1,127 @@
+ 1 15:35:08.640523 IP (tos 0x0, ttl 128, id 376, offset 0, flags [DF], proto TCP (6), length 128)
+ 192.168.56.55.445 > 192.168.56.119.49199: Flags [P.], cksum 0x3e2f (incorrect -> 0x3e31), seq 4267808374:4267808462, ack 628292694, win 63102, length 88
+SMB PACKET: SMBtrans2 (REPLY)
+SMB Command = 0x32
+Error class = 0x0
+Error code = 0 (0x0)
+Flags1 = 0x96
+Flags2 = 0x7
+Tree ID = 2048 (0x800)
+Proc ID = 2848 (0xb20)
+UID = 4098 (0x1002)
+MID = 1616 (0x650)
+Word Count = 10 (0xa)
+TRANSACT2_OPEN param_length=2 data_length=24
+TotParam=2 (0x2)
+TotData=24 (0x18)
+Res1=0x0
+ParamCnt=2 (0x2)
+ParamOff=56 (0x38)
+ParamDisp0 (0x0)
+DataCnt=24 (0x18)
+DataOff=60 (0x3c)
+DataDisp=0 (0x0)
+SetupCnt=0 (0x0)
+smb_bcc=29
+Handle=0 (0x0)
+Attrib=Data=
+Data: (24 bytes)
+[000] 00 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 ^@^@^K^@^@^@^@^@ ^@^@^@^@^@^@^@^@
+[010] 01 00 00 00 00 00 00 00 ^A^@^@^@^@^@^@^@
+
+ 2 15:35:08.640906 IP (tos 0x0, ttl 128, id 632, offset 0, flags [DF], proto TCP (6), length 114)
+ 192.168.56.119.49199 > 192.168.56.55.445: Flags [P.], cksum 0x2437 (correct), seq 1:75, ack 88, win 254, length 74
+SMB PACKET: SMBtrans2 (REQUEST)
+SMB Command = 0x32
+Error class = 0x0
+Error code = 0 (0x0)
+Flags1 = 0x18
+Flags2 = 0x7
+Tree ID = 2048 (0x800)
+Proc ID = 2848 (0xb20)
+UID = 4098 (0x1002)
+MID = 1632 (0x660)
+Word Count = 15 (0xf)
+TRANSACT2_QFSINFO param_length=2 data_length=0
+TotParam=2 (0x2)
+TotData=0 (0x0)
+MaxParam=0 (0x0)
+MaxData=560 (0x230)
+MaxSetup=0 (0x0)
+Flags=0x0
+TimeOut=0 (0x0)
+Res1=0x0
+ParamCnt=2 (0x2)
+ParamOff=68 (0x44)
+DataCnt=0 (0x0)
+DataOff=0 (0x0)
+SetupCnt=1 (0x1)
+smb_bcc=5
+InfoLevel=261 (0x105)
+
+ 3 15:35:08.641033 IP (tos 0x0, ttl 128, id 377, offset 0, flags [DF], proto TCP (6), length 120)
+ 192.168.56.55.445 > 192.168.56.119.49199: Flags [P.], cksum 0x00fb (incorrect -> 0x11f5), seq 88:168, ack 75, win 62978, length 80
+SMB PACKET: SMBtrans2 (REPLY)
+SMB Command = 0x32
+Error class = 0x0
+Error code = 0 (0x0)
+Flags1 = 0x98
+Flags2 = 0x0
+Tree ID = 2048 (0x800)
+Proc ID = 2848 (0xb20)
+UID = 4098 (0x1002)
+MID = 1632 (0x660)
+Word Count = 10 (0xa)
+TRANSACT2_QFSINFO param_length=0 data_length=20
+TotParam=0 (0x0)
+TotData=20 (0x14)
+Res1=0x0
+ParamCnt=0 (0x0)
+ParamOff=56 (0x38)
+ParamDisp0 (0x0)
+DataCnt=20 (0x14)
+DataOff=56 (0x38)
+DataDisp=0 (0x0)
+SetupCnt=0 (0x0)
+smb_bcc=21
+Capabilities=0x700FF
+MaxFileLen=255 (0xff)
+VolNameLen=4293394440
+Volume=M [|smb]
+data:
+[000] FF 00 07 00 FF 00 00 00 08 00 E8 FF 4D 00 54 00 M-^?^@^G^@M-^?^@^@^@ ^H^@M-hM-^?M^@T^@
+[010] 46 00 53 00 F^@S^@
+
+ 4 15:35:08.641358 IP (tos 0x0, ttl 128, id 633, offset 0, flags [DF], proto TCP (6), length 116)
+ 192.168.56.119.49199 > 192.168.56.55.445: Flags [P.], cksum 0x2253 (correct), seq 75:151, ack 168, win 253, length 76
+SMB PACKET: SMBtrans2 (REQUEST)
+SMB Command = 0x32
+Error class = 0x0
+Error code = 0 (0x0)
+Flags1 = 0x18
+Flags2 = 0x7
+Tree ID = 2048 (0x800)
+Proc ID = 2848 (0xb20)
+UID = 4098 (0x1002)
+MID = 1648 (0x670)
+Word Count = 15 (0xf)
+TRANSACT2_QFILEINFO param_length=4 data_length=0
+TotParam=4 (0x4)
+TotData=0 (0x0)
+MaxParam=2 (0x2)
+MaxData=40 (0x28)
+MaxSetup=0 (0x0)
+Flags=0x0
+TimeOut=0 (0x0)
+Res1=0x0
+ParamCnt=4 (0x4)
+ParamOff=68 (0x44)
+DataCnt=0 (0x0)
+DataOff=0 (0x0)
+SetupCnt=1 (0x1)
+smb_bcc=7
+Parameters=
+Data: (4 bytes)
+[000] 0C 40 EC 03 ^L@M-l^C
+Data=
+
diff --git a/tests/smb_data_print-oobr.pcapng b/tests/smb_data_print-oobr.pcapng
new file mode 100644
index 0000000..984bc3a
--- /dev/null
+++ b/tests/smb_data_print-oobr.pcapng
Binary files differ
diff --git a/tests/smb_data_print-segv-nosmb.out b/tests/smb_data_print-segv-nosmb.out
new file mode 100644
index 0000000..ea9eeb1
--- /dev/null
+++ b/tests/smb_data_print-segv-nosmb.out
@@ -0,0 +1,8 @@
+ 1 15:35:08.640523 IP (tos 0x0, ttl 128, id 376, offset 0, flags [DF], proto TCP (6), length 128)
+ 192.168.56.55.445 > 192.168.56.119.49199: Flags [P.], cksum 0x3e2f (incorrect -> 0x3d49), seq 4267808374:4267808462, ack 628292694, win 63102, length 88
+ 2 15:35:08.640906 IP (tos 0x0, ttl 128, id 632, offset 0, flags [DF], proto TCP (6), length 114)
+ 192.168.56.119.49199 > 192.168.56.55.445: Flags [P.], cksum 0x2437 (correct), seq 1:75, ack 88, win 254, length 74
+ 3 15:35:08.641033 IP (tos 0x0, ttl 128, id 377, offset 0, flags [DF], proto TCP (6), length 120)
+ 192.168.56.55.445 > 192.168.56.119.49199: Flags [P.], cksum 0xf1fb (incorrect -> 0x1559), seq 88:168, ack 75, win 63028, length 80
+ 4 [Error converting time] IP (tos 0x0, ttl 128, id 633, offset 0, flags [DF], proto TCP (6), length 116)
+ 192.168.56.119.49199 > 192.168.56.55.445: Flags [P.], cksum 0x2253 (incorrect -> 0x229b), seq 75:151, ack 168, win 253, length 76
diff --git a/tests/smb_data_print-segv.out b/tests/smb_data_print-segv.out
new file mode 100644
index 0000000..5023eeb
--- /dev/null
+++ b/tests/smb_data_print-segv.out
@@ -0,0 +1,97 @@
+ 1 15:35:08.640523 IP (tos 0x0, ttl 128, id 376, offset 0, flags [DF], proto TCP (6), length 128)
+ 192.168.56.55.445 > 192.168.56.119.49199: Flags [P.], cksum 0x3e2f (incorrect -> 0x3d49), seq 4267808374:4267808462, ack 628292694, win 63102, length 88
+SMB PACKET: SMBtrans2 (REPLY)
+SMB Command = 0x32
+Error class = 0x0
+Error code = 0 (0x0)
+Flags1 = 0xFF
+Flags2 = 0x7
+Tree ID = 2048 (0x800)
+Proc ID = 2848 (0xb20)
+UID = 4098 (0x1002)
+MID = 1616 (0x650)
+Word Count = 10 (0xa)
+TRANSACT2_OPEN param_length=2 data_length=24
+TotParam=2 (0x2)
+TotData=24 (0x18)
+Res1=0x0
+ParamCnt=2 (0x2)
+ParamOff=56 (0x38)
+ParamDisp0 (0x0)
+DataCnt=24 (0x18)
+DataOff=60 (0x3c)
+DataDisp=0 (0x0)
+SetupCnt=0 (0x0)
+smb_bcc=29
+Handle=0 (0x0)
+Attrib=Data=
+Data: (24 bytes)
+[000] 00 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 ^@^@^K^@^@^@^@^@ ^@^@^@^@^@^@^@^@
+[010] 01 00 00 00 00 00 00 00 ^A^@^@^@^@^@^@^@
+
+ 2 15:35:08.640906 IP (tos 0x0, ttl 128, id 632, offset 0, flags [DF], proto TCP (6), length 114)
+ 192.168.56.119.49199 > 192.168.56.55.445: Flags [P.], cksum 0x2437 (correct), seq 1:75, ack 88, win 254, length 74
+SMB PACKET: SMBtrans2 (REQUEST)
+SMB Command = 0x32
+Error class = 0x0
+Error code = 0 (0x0)
+Flags1 = 0x18
+Flags2 = 0x7
+Tree ID = 2048 (0x800)
+Proc ID = 2848 (0xb20)
+UID = 4098 (0x1002)
+MID = 1632 (0x660)
+Word Count = 15 (0xf)
+TRANSACT2_QFSINFO param_length=2 data_length=0
+TotParam=2 (0x2)
+TotData=0 (0x0)
+MaxParam=0 (0x0)
+MaxData=560 (0x230)
+MaxSetup=0 (0x0)
+Flags=0x0
+TimeOut=0 (0x0)
+Res1=0x0
+ParamCnt=2 (0x2)
+ParamOff=68 (0x44)
+DataCnt=0 (0x0)
+DataOff=0 (0x0)
+SetupCnt=1 (0x1)
+smb_bcc=5
+InfoLevel=261 (0x105)
+
+ 3 15:35:08.641033 IP (tos 0x0, ttl 128, id 377, offset 0, flags [DF], proto TCP (6), length 120)
+ 192.168.56.55.445 > 192.168.56.119.49199: Flags [P.], cksum 0xf1fb (incorrect -> 0x1559), seq 88:168, ack 75, win 63028, length 80
+SMB PACKET: SMBtrans2 (REPLY)
+SMB Command = 0x32
+Error class = 0x0
+Error code = 0 (0x0)
+Flags1 = 0x98
+Flags2 = 0x7
+Tree ID = 0 (0x0)
+Proc ID = 0 (0x0)
+UID = 0 (0x0)
+MID = 0 (0x0)
+Word Count = 11 (0xb)
+TRANSACT2_QFSINFO param_length=0 data_length=20
+TotParam=0 (0x0)
+TotData=0 (0x0)
+Res1=0x0
+ParamCnt=0 (0x0)
+ParamOff=56 (0x38)
+ParamDisp0 (0x0)
+DataCnt=20 (0x14)
+DataOff=56 (0x38)
+DataDisp=0 (0x0)
+SetupCnt=0 (0x0)
+smb_bcc=65280
+Capabilities=0x700FF
+MaxFileLen=255 (0xff)
+VolNameLen=4278190088
+Volume=... [|smb]
+data:
+[000] FF 00 07 00 FF 00 00 00 08 00 00 FF FF FF FF 00 M-^?^@^G^@M-^?^@^@^@ ^H^@^@M-^?M-^?M-^?M-^?^@
+[010] 46 00 53 00 F^@S^@
+
+ 4 [Error converting time] IP (tos 0x0, ttl 128, id 633, offset 0, flags [DF], proto TCP (6), length 116)
+ 192.168.56.119.49199 > 192.168.56.55.445: Flags [P.], cksum 0x2253 (incorrect -> 0x229b), seq 75:151, ack 168, win 253, length 76 SMB-over-TCP packet:(raw data or continuation?)
+
diff --git a/tests/smb_data_print-segv.pcapng b/tests/smb_data_print-segv.pcapng
new file mode 100644
index 0000000..3b29577
--- /dev/null
+++ b/tests/smb_data_print-segv.pcapng
Binary files differ
diff --git a/tests/smb_print_trans-oobr1-nosmb.out b/tests/smb_print_trans-oobr1-nosmb.out
new file mode 100644
index 0000000..73e0ae7
--- /dev/null
+++ b/tests/smb_print_trans-oobr1-nosmb.out
@@ -0,0 +1,4 @@
+ 1 10:06:29.360507 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 2 10:06:30.201745 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 3 10:06:31.042990 IPX a8f87967.00:00:00:ff:ff:ff.7f55 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 4 10:06:31.884337 IPX a855000b.41:44:4d:49:4e:54.4553 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 162
diff --git a/tests/smb_print_trans-oobr1.out b/tests/smb_print_trans-oobr1.out
new file mode 100644
index 0000000..e7ea877
--- /dev/null
+++ b/tests/smb_print_trans-oobr1.out
@@ -0,0 +1,37 @@
+ 1 10:06:29.360507 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 2 10:06:30.201745 IPX a8f87967.00:00:00:00:00:01.0455 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 3 10:06:31.042990 IPX a8f87967.00:00:00:ff:ff:ff.7f55 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 50
+ 4 10:06:31.884337 IPX a855000b.41:44:4d:49:4e:54.4553 > 00000000.ff:ff:ff:ff:ff:ff.0455: ipx-netbios 162
+>>> IPX transport Data: (24 bytes)
+[000] 54 20 20 20 20 20 20 00 01 02 5F 5F 4D 53 26 52 T ^@ ^A^B__MS&R
+[010] 4F 57 53 45 5F 5F 02 01 OWSE__^B^A
+
+SMB PACKET: SMBtrans (REQUEST)
+SMB Command = 0x25
+Error class = 0x0
+Error code = 0 (0x0)
+Flags1 = 0x0
+Flags2 = 0x0
+Tree ID = 0 (0x0)
+Proc ID = 0 (0x0)
+UID = 0 (0x0)
+MID = 0 (0x0)
+Word Count = 17 (0x11)
+TotParamCnt=0 (0x0)
+TotDataCnt=42 (0x2a)
+MaxParmCnt=0 (0x0)
+MaxDataCnt=0 (0x0)
+MaxSCnt=0 (0x0)
+TransFlags=0x0
+Res1=0x3E8
+Res2=0x0
+Res3=0x0
+ParamCnt=0 (0x0)
+ParamOff=0 (0x0)
+DataCnt=42 (0x2a)
+DataOff=86 (0x56)
+SUCnt=3 (0x3)
+Data: (6 bytes)
+[000] 01 00 01 00 02 00 ^A^@^A^@^B^@
+smb_bcc=59
+ [|smb]
diff --git a/tests/smb_print_trans-oobr1.pcap b/tests/smb_print_trans-oobr1.pcap
new file mode 100644
index 0000000..8a362ce
--- /dev/null
+++ b/tests/smb_print_trans-oobr1.pcap
Binary files differ
diff --git a/tests/smb_print_trans-oobr2-nosmb.out b/tests/smb_print_trans-oobr2-nosmb.out
new file mode 100644
index 0000000..f0a0e8d
--- /dev/null
+++ b/tests/smb_print_trans-oobr2-nosmb.out
@@ -0,0 +1,2 @@
+ 1 15:17:28.958610 IP (tos 0x0, ttl 128, id 14471, offset 0, flags [none], proto UDP (17), length 207)
+ 192.168.1.249.138 > 192.168.1.255.138: UDP, length 179
diff --git a/tests/smb_print_trans-oobr2.out b/tests/smb_print_trans-oobr2.out
new file mode 100644
index 0000000..f526a2c
--- /dev/null
+++ b/tests/smb_print_trans-oobr2.out
@@ -0,0 +1,35 @@
+ 1 15:17:28.958610 IP (tos 0x0, ttl 128, id 14471, offset 0, flags [none], proto UDP (17), length 207)
+ 192.168.1.249.138 > 192.168.1.255.138:
+>>> NBT UDP PACKET(138) Res=0x110E ID=0x891D IP=192 (0xc0).168 (0xa8).1 (0x1).249 (0xf9) Port=138 (0x8a) Length=165 (0xa5) Res2=0x0
+SourceName=DJP95S0J NameType=0x00 (Workstation)
+DestName=ARBEIT NameType=0x00 (Workstation)
+
+SMB PACKET: SMBtrans (REQUEST)
+SMB Command = 0x25
+Error class = 0x0
+Error code = 0 (0x0)
+Flags1 = 0x0
+Flags2 = 0x0
+Tree ID = 0 (0x0)
+Proc ID = 0 (0x0)
+UID = 0 (0x0)
+MID = 0 (0x0)
+Word Count = 17 (0x11)
+TotParamCnt=0 (0x0)
+TotDataCnt=11 (0xb)
+MaxParmCnt=0 (0x0)
+MaxDataCnt=0 (0x0)
+MaxSCnt=0 (0x0)
+TransFlags=0x0
+Res1=0x3E8
+Res2=0x0
+Res3=0x0
+ParamCnt=0 (0x0)
+ParamOff=0 (0x0)
+DataCnt=11 (0xb)
+DataOff=86 (0x56)
+SUCnt=3 (0x3)
+Data: (6 bytes)
+[000] 01 00 01 00 02 00 ^A^@^A^@^B^@
+smb_bcc=28
+ [|smb]
diff --git a/tests/smb_print_trans-oobr2.pcap b/tests/smb_print_trans-oobr2.pcap
new file mode 100644
index 0000000..27e5706
--- /dev/null
+++ b/tests/smb_print_trans-oobr2.pcap
Binary files differ
diff --git a/tests/snmp-heapoverflow-1.out b/tests/snmp-heapoverflow-1.out
new file mode 100644
index 0000000..788b739
--- /dev/null
+++ b/tests/snmp-heapoverflow-1.out
@@ -0,0 +1,21 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 00
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 00
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 00
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0010: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0020: 3030 3030 3030 3030 3030 3030 3030 3030 0000000000000000
+ 0x0030: 3030 00
+ 5 05:27:12.808464432 IP 48.48.48.48.12336 > 48.48.48.48.161: [|snmp]
diff --git a/tests/snmp-heapoverflow-1.pcap b/tests/snmp-heapoverflow-1.pcap
new file mode 100644
index 0000000..cff2540
--- /dev/null
+++ b/tests/snmp-heapoverflow-1.pcap
Binary files differ
diff --git a/tests/snmp-heapoverflow-2.out b/tests/snmp-heapoverflow-2.out
new file mode 100644
index 0000000..2a19bc5
--- /dev/null
+++ b/tests/snmp-heapoverflow-2.out
@@ -0,0 +1 @@
+ 1 05:27:12.808464432 IP 48.48.48.48.12336 > 48.48.48.48.162: [|snmp]
diff --git a/tests/snmp-heapoverflow-2.pcap b/tests/snmp-heapoverflow-2.pcap
new file mode 100644
index 0000000..11cba83
--- /dev/null
+++ b/tests/snmp-heapoverflow-2.pcap
Binary files differ
diff --git a/tests/someip1.out b/tests/someip1.out
new file mode 100644
index 0000000..3f42863
--- /dev/null
+++ b/tests/someip1.out
@@ -0,0 +1,6 @@
+ 1 17:47:06.889447 IP 192.168.88.8.30490 > 192.168.88.8.31490: SOMEIP, service 65535, event 256, len 64, client 0, session 0, pver 1, iver 1, msgtype NOTIFICATION, retcode E_OK
+
+ 2 17:47:08.944638 IP 192.168.88.8.31490 > 192.168.88.8.30490: SOMEIP, service 65535, event 256, len 48, client 0, session 0, pver 1, iver 1, msgtype NOTIFICATION, retcode E_OK
+
+ 3 17:47:10.935734 IP 192.168.88.8.30490 > 192.168.88.8.31490: SOMEIP, service 65535, event 256, len 48, client 0, session 0, pver 1, iver 1, msgtype NOTIFICATION, retcode E_OK
+
diff --git a/tests/someip1.pcap b/tests/someip1.pcap
new file mode 100644
index 0000000..0c3a6de
--- /dev/null
+++ b/tests/someip1.pcap
Binary files differ
diff --git a/tests/someip2.out b/tests/someip2.out
new file mode 100644
index 0000000..9640a83
--- /dev/null
+++ b/tests/someip2.out
@@ -0,0 +1,2 @@
+ 1 18:44:34.812094 IP 192.168.88.8.56001 > 192.168.88.8.30490: SOMEIP, service 1, method 2, len 8, client 8, session 5, pver 1, iver 1, msgtype REQUEST_NO_RETURN, retcode E_OK
+
diff --git a/tests/someip2.pcap b/tests/someip2.pcap
new file mode 100644
index 0000000..cd83310
--- /dev/null
+++ b/tests/someip2.pcap
Binary files differ
diff --git a/tests/spb.out b/tests/spb.out
new file mode 100644
index 0000000..4914640
--- /dev/null
+++ b/tests/spb.out
@@ -0,0 +1,53 @@
+ 1 05:46:09.251602 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 2 05:46:16.061071 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 3 05:46:19.257685 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 4 05:46:26.067844 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 5 05:46:28.631495 IS-IS, L1 LSP, lsp-id 2222.2222.2222.00-00, seq 0x0000000f, lifetime 1200s, length 149
+ 6 05:46:28.768095 IS-IS, L1 PSNP, src-id 8888.8888.8888.00, length 35
+ 7 05:46:29.262778 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 8 05:46:36.076119 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 9 05:46:39.270149 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 10 05:46:46.083771 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 11 05:46:49.284153 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 12 05:46:56.093455 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 13 05:46:59.291024 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 14 05:47:06.103252 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 15 05:47:09.299688 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 16 05:47:16.110173 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 17 05:47:19.306006 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 18 05:47:26.120046 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 19 05:47:29.313219 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 20 05:47:36.129351 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 21 05:47:39.321183 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 22 05:47:46.135481 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 23 05:47:49.335026 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 24 05:47:56.143163 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 25 05:47:59.343792 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 26 05:48:06.151071 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 27 05:48:09.350311 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 28 05:48:16.161939 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 29 05:48:19.359428 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 30 05:48:26.168688 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 31 05:48:29.368434 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 32 05:48:29.985826 IS-IS, L1 LSP, lsp-id 2222.2222.2222.00-00, seq 0x00000010, lifetime 1200s, length 149
+ 33 05:48:30.124782 IS-IS, L1 PSNP, src-id 8888.8888.8888.00, length 35
+ 34 05:48:36.177217 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 35 05:48:39.376982 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 36 05:48:46.186615 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 37 05:48:49.385403 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 38 05:48:56.191028 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 39 05:48:59.394762 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 40 05:49:06.203827 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 41 05:49:09.405369 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 42 05:49:16.212375 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 43 05:49:19.410812 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 44 05:49:26.219857 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 45 05:49:29.419229 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 46 05:49:36.227987 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 47 05:49:39.423620 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 48 05:49:46.235327 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 49 05:49:49.429167 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 50 05:49:56.245587 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 51 05:49:59.436574 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
+ 52 05:50:06.255523 IS-IS, p2p IIH, src-id 2222.2222.2222, length 1492
+ 53 05:50:09.441528 IS-IS, p2p IIH, src-id 8888.8888.8888, length 1492
diff --git a/tests/spb.pcap b/tests/spb.pcap
new file mode 100644
index 0000000..99e2505
--- /dev/null
+++ b/tests/spb.pcap
Binary files differ
diff --git a/tests/spb_bpduv4-v.out b/tests/spb_bpduv4-v.out
new file mode 100644
index 0000000..cb9966b
--- /dev/null
+++ b/tests/spb_bpduv4-v.out
@@ -0,0 +1,375 @@
+ 1 13:19:44.964471 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 2 13:19:46.966286 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 3 13:19:48.968104 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 4 13:19:50.968841 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 5 13:19:52.969919 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 6 13:19:54.971627 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 7 13:19:56.973555 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 8 13:19:58.974590 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 9 13:20:00.976152 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 10 13:20:02.977225 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 11 13:20:04.978131 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 12 13:20:06.979284 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 13 13:20:08.980357 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 14 13:20:10.981246 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 15 13:20:12.982792 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 16 13:20:14.984471 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 17 13:20:16.985513 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 18 13:20:18.987468 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 19 13:20:20.988197 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 20 13:20:22.989416 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 21 13:20:24.990564 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 22 13:20:26.992430 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 23 13:20:28.993313 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 24 13:20:30.994755 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
+ 25 13:20:32.996159 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ port-role Designated, CIST root-id 8000.52:54:00:45:5f:15, CIST ext-pathcost 0
+ CIST regional-root-id 8000.52:54:00:45:5f:15, CIST port-id 8003,
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ v3len 80, MCID Name IEEE802.1 SPB Default, rev 0,
+ digest 67d768dfa948eb5e9fd54077e80975a2, CIST int-root-pathcost 0,
+ CIST bridge-id 8000.52:54:00:45:5f:15, CIST remaining-hops 20
+ MSTI 10, Flags [Learn, Forward], port-role Designated
+ MSTI regional-root-id 800a.52:54:00:45:5f:15, pathcost 0
+ MSTI bridge-prio 8, port-prio 8, hops 20
+ v4len 85, AUXMCID Name IEEE802.1 SPB Default, Rev 0,
+ digest c8bd946a00815f86ace612b9f8616283
+ Agreement num 0, Discarded Agreement num 0, Agreement valid-flag 0,
+ Restricted role-flag: 0, Format id 0 cap 0, Convention id 2 cap 32,
+ Edge count 32, Agreement digest 0000000e918994fa9ca00398d9138a3e54000000
diff --git a/tests/spb_bpduv4.out b/tests/spb_bpduv4.out
new file mode 100644
index 0000000..7bc6831
--- /dev/null
+++ b/tests/spb_bpduv4.out
@@ -0,0 +1,25 @@
+ 1 13:19:44.964471 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 2 13:19:46.966286 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 3 13:19:48.968104 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 4 13:19:50.968841 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 5 13:19:52.969919 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 6 13:19:54.971627 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 7 13:19:56.973555 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 8 13:19:58.974590 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 9 13:20:00.976152 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 10 13:20:02.977225 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 11 13:20:04.978131 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 12 13:20:06.979284 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 13 13:20:08.980357 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 14 13:20:10.981246 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 15 13:20:12.982792 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 16 13:20:14.984471 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 17 13:20:16.985513 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 18 13:20:18.987468 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 19 13:20:20.988197 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 20 13:20:22.989416 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 21 13:20:24.990564 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 22 13:20:26.992430 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 23 13:20:28.993313 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 24 13:20:30.994755 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
+ 25 13:20:32.996159 STP 802.1aq, Rapid STP, CIST Flags [Learn, Forward], length 205
diff --git a/tests/spb_bpduv4.pcap b/tests/spb_bpduv4.pcap
new file mode 100644
index 0000000..b12d4c1
--- /dev/null
+++ b/tests/spb_bpduv4.pcap
Binary files differ
diff --git a/tests/ssh.out b/tests/ssh.out
new file mode 100644
index 0000000..11f2c93
--- /dev/null
+++ b/tests/ssh.out
@@ -0,0 +1,54 @@
+ 1 10:50:09.891237 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [S], seq 4082233688, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 1948436430 ecr 0,sackOK,eol], length 0
+ 2 10:50:09.916918 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [S.], seq 2455219014, ack 4082233689, win 28960, options [mss 1460,sackOK,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,wscale 7], length 0
+ 3 10:50:09.916972 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 1, win 4096, length 0
+ 4 10:50:09.917574 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [P.], seq 1:22, ack 1, win 4096, length 21: SSH: SSH-2.0-OpenSSH_7.8
+ 5 10:50:09.944464 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [.], ack 22, win 227, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 0
+ 6 10:50:09.945545 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [P.], seq 1:40, ack 22, win 227, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 39: SSH: SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u3
+ 7 10:50:09.945615 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 40, win 4095, length 0
+ 8 10:50:09.946159 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [P.], seq 22:1414, ack 40, win 4096, length 1392
+ 9 10:50:09.966036 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [P.], seq 40:536, ack 22, win 227, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 496
+ 10 10:50:09.966200 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 536, win 4088, length 0
+ 11 10:50:10.004152 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [.], ack 1414, win 249, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 0
+ 12 10:50:10.004222 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [P.], seq 1414:1462, ack 536, win 4096, length 48
+ 13 10:50:10.093620 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [.], ack 1462, win 249, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 0
+ 14 10:50:10.119320 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [P.], seq 536:1300, ack 1462, win 249, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 764
+ 15 10:50:10.119391 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 1300, win 4084, length 0
+ 16 10:50:10.123330 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [P.], seq 1462:1478, ack 1300, win 4096, length 16
+ 17 10:50:10.191751 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [.], ack 1478, win 249, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 0
+ 18 10:50:10.191831 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [P.], seq 1478:1522, ack 1300, win 4096, length 44
+ 19 10:50:10.206243 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [.], ack 1522, win 249, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 0
+ 20 10:50:10.207499 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [P.], seq 1300:1344, ack 1522, win 249, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 44
+ 21 10:50:10.207571 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 1344, win 4095, length 0
+ 22 10:50:10.207658 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [P.], seq 1522:1582, ack 1344, win 4096, length 60
+ 23 10:50:10.222651 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [P.], seq 1344:1396, ack 1582, win 249, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 52
+ 24 10:50:10.222724 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 1396, win 4095, length 0
+ 25 10:50:10.222884 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [P.], seq 1582:2714, ack 1396, win 4096, length 1132
+ 26 10:50:10.240953 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [P.], seq 1396:2488, ack 2714, win 271, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 1092
+ 27 10:50:10.241024 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 2488, win 4078, length 0
+ 28 10:50:10.319360 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], seq 2714:4174, ack 2488, win 4096, length 1460
+ 29 10:50:10.319361 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [P.], seq 4174:4886, ack 2488, win 4096, length 712
+ 30 10:50:10.335209 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [.], ack 4886, win 317, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 0
+ 31 10:50:10.348975 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [P.], seq 2488:2516, ack 4886, win 317, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 28
+ 32 10:50:10.349081 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 2516, win 4095, length 0
+ 33 10:50:10.349526 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [P.], seq 4886:4998, ack 2516, win 4096, length 112
+ 34 10:50:10.363577 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [P.], seq 2516:2912, ack 4886, win 317, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 396
+ 35 10:50:10.363713 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 2912, win 4089, length 0
+ 36 10:50:10.379854 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [P.], seq 2912:2956, ack 4998, win 317, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 44
+ 37 10:50:10.379944 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 2956, win 4095, length 0
+ 38 10:50:10.380586 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [P.], seq 4998:5186, ack 2956, win 4096, length 188
+ 39 10:50:10.397660 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [P.], seq 2956:3028, ack 5186, win 340, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 72
+ 40 10:50:10.397833 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 3028, win 4094, length 0
+ 41 10:50:10.413471 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [P.], seq 3028:3136, ack 5186, win 340, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 108
+ 42 10:50:10.413539 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 3136, win 4094, length 0
+ 43 10:50:10.416235 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [P.], seq 3136:3312, ack 5186, win 340, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 176
+ 44 10:50:10.416295 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 3312, win 4093, length 0
+ 45 10:50:10.416417 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [P.], seq 5186:5222, ack 3312, win 4096, length 36
+ 46 10:50:10.416417 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [P.], seq 5222:5282, ack 3312, win 4096, length 60
+ 47 10:50:10.417744 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [F.], seq 5282, ack 3312, win 4096, length 0
+ 48 10:50:10.446501 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [.], ack 5186, win 340, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,sack 1 {5282:5283}], length 0
+ 49 10:50:10.446622 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [FP.], seq 5186:5282, ack 3312, win 4096, length 96
+ 50 10:50:10.456121 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [.], ack 5222, win 340, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,sack 1 {5282:5283}], length 0
+ 51 10:50:10.456127 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [.], ack 5283, win 340, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 0
+ 52 10:50:10.456128 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [F.], seq 3312, ack 5283, win 340, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop], length 0
+ 53 10:50:10.456384 IP 202.108.87.165.62146 > 223.132.53.222.22: Flags [.], ack 3313, win 4096, length 0
+ 54 10:50:10.466614 IP 223.132.53.222.22 > 202.108.87.165.62146: Flags [.], ack 5283, win 340, options [nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,sack 1 {5186:5283}], length 0
diff --git a/tests/ssh.pcap b/tests/ssh.pcap
new file mode 100644
index 0000000..db435c0
--- /dev/null
+++ b/tests/ssh.pcap
Binary files differ
diff --git a/tests/status_code-0.pcap b/tests/status_code-0.pcap
new file mode 100644
index 0000000..e393699
--- /dev/null
+++ b/tests/status_code-0.pcap
Binary files differ
diff --git a/tests/status_code-1.pcap b/tests/status_code-1.pcap
new file mode 100644
index 0000000..f32cca8
--- /dev/null
+++ b/tests/status_code-1.pcap
Binary files differ
diff --git a/tests/status_code-10.pcap b/tests/status_code-10.pcap
new file mode 100644
index 0000000..ee95c5e
--- /dev/null
+++ b/tests/status_code-10.pcap
Binary files differ
diff --git a/tests/status_code-100.pcap b/tests/status_code-100.pcap
new file mode 100644
index 0000000..1577ca3
--- /dev/null
+++ b/tests/status_code-100.pcap
Binary files differ
diff --git a/tests/status_code-101.pcap b/tests/status_code-101.pcap
new file mode 100644
index 0000000..4d72dd0
--- /dev/null
+++ b/tests/status_code-101.pcap
Binary files differ
diff --git a/tests/status_code-102.pcap b/tests/status_code-102.pcap
new file mode 100644
index 0000000..4a0eb54
--- /dev/null
+++ b/tests/status_code-102.pcap
Binary files differ
diff --git a/tests/status_code-103.pcap b/tests/status_code-103.pcap
new file mode 100644
index 0000000..a970c18
--- /dev/null
+++ b/tests/status_code-103.pcap
Binary files differ
diff --git a/tests/status_code-104.pcap b/tests/status_code-104.pcap
new file mode 100644
index 0000000..f9796ee
--- /dev/null
+++ b/tests/status_code-104.pcap
Binary files differ
diff --git a/tests/status_code-105.pcap b/tests/status_code-105.pcap
new file mode 100644
index 0000000..0f5d22c
--- /dev/null
+++ b/tests/status_code-105.pcap
Binary files differ
diff --git a/tests/status_code-106.pcap b/tests/status_code-106.pcap
new file mode 100644
index 0000000..819611e
--- /dev/null
+++ b/tests/status_code-106.pcap
Binary files differ
diff --git a/tests/status_code-107.pcap b/tests/status_code-107.pcap
new file mode 100644
index 0000000..a808bd9
--- /dev/null
+++ b/tests/status_code-107.pcap
Binary files differ
diff --git a/tests/status_code-11.pcap b/tests/status_code-11.pcap
new file mode 100644
index 0000000..c542cc5
--- /dev/null
+++ b/tests/status_code-11.pcap
Binary files differ
diff --git a/tests/status_code-12.pcap b/tests/status_code-12.pcap
new file mode 100644
index 0000000..8c28c56
--- /dev/null
+++ b/tests/status_code-12.pcap
Binary files differ
diff --git a/tests/status_code-13.pcap b/tests/status_code-13.pcap
new file mode 100644
index 0000000..1748215
--- /dev/null
+++ b/tests/status_code-13.pcap
Binary files differ
diff --git a/tests/status_code-14.pcap b/tests/status_code-14.pcap
new file mode 100644
index 0000000..c516ce6
--- /dev/null
+++ b/tests/status_code-14.pcap
Binary files differ
diff --git a/tests/status_code-15.pcap b/tests/status_code-15.pcap
new file mode 100644
index 0000000..d3ba9a7
--- /dev/null
+++ b/tests/status_code-15.pcap
Binary files differ
diff --git a/tests/status_code-16.pcap b/tests/status_code-16.pcap
new file mode 100644
index 0000000..91afcb6
--- /dev/null
+++ b/tests/status_code-16.pcap
Binary files differ
diff --git a/tests/status_code-17.pcap b/tests/status_code-17.pcap
new file mode 100644
index 0000000..a166c27
--- /dev/null
+++ b/tests/status_code-17.pcap
Binary files differ
diff --git a/tests/status_code-18.pcap b/tests/status_code-18.pcap
new file mode 100644
index 0000000..33c3758
--- /dev/null
+++ b/tests/status_code-18.pcap
Binary files differ
diff --git a/tests/status_code-19.pcap b/tests/status_code-19.pcap
new file mode 100644
index 0000000..72893a2
--- /dev/null
+++ b/tests/status_code-19.pcap
Binary files differ
diff --git a/tests/status_code-2.pcap b/tests/status_code-2.pcap
new file mode 100644
index 0000000..d73c936
--- /dev/null
+++ b/tests/status_code-2.pcap
Binary files differ
diff --git a/tests/status_code-20.pcap b/tests/status_code-20.pcap
new file mode 100644
index 0000000..1c7fd5a
--- /dev/null
+++ b/tests/status_code-20.pcap
Binary files differ
diff --git a/tests/status_code-21.pcap b/tests/status_code-21.pcap
new file mode 100644
index 0000000..7ac1eff
--- /dev/null
+++ b/tests/status_code-21.pcap
Binary files differ
diff --git a/tests/status_code-22.pcap b/tests/status_code-22.pcap
new file mode 100644
index 0000000..3c2e776
--- /dev/null
+++ b/tests/status_code-22.pcap
Binary files differ
diff --git a/tests/status_code-23.pcap b/tests/status_code-23.pcap
new file mode 100644
index 0000000..da6a78f
--- /dev/null
+++ b/tests/status_code-23.pcap
Binary files differ
diff --git a/tests/status_code-24.pcap b/tests/status_code-24.pcap
new file mode 100644
index 0000000..3689c87
--- /dev/null
+++ b/tests/status_code-24.pcap
Binary files differ
diff --git a/tests/status_code-25.pcap b/tests/status_code-25.pcap
new file mode 100644
index 0000000..2871a8f
--- /dev/null
+++ b/tests/status_code-25.pcap
Binary files differ
diff --git a/tests/status_code-26.pcap b/tests/status_code-26.pcap
new file mode 100644
index 0000000..eca1eca
--- /dev/null
+++ b/tests/status_code-26.pcap
Binary files differ
diff --git a/tests/status_code-27.pcap b/tests/status_code-27.pcap
new file mode 100644
index 0000000..02958c7
--- /dev/null
+++ b/tests/status_code-27.pcap
Binary files differ
diff --git a/tests/status_code-28.pcap b/tests/status_code-28.pcap
new file mode 100644
index 0000000..458effc
--- /dev/null
+++ b/tests/status_code-28.pcap
Binary files differ
diff --git a/tests/status_code-29.pcap b/tests/status_code-29.pcap
new file mode 100644
index 0000000..713fa10
--- /dev/null
+++ b/tests/status_code-29.pcap
Binary files differ
diff --git a/tests/status_code-3.pcap b/tests/status_code-3.pcap
new file mode 100644
index 0000000..34d04b2
--- /dev/null
+++ b/tests/status_code-3.pcap
Binary files differ
diff --git a/tests/status_code-30.pcap b/tests/status_code-30.pcap
new file mode 100644
index 0000000..c864fea
--- /dev/null
+++ b/tests/status_code-30.pcap
Binary files differ
diff --git a/tests/status_code-31.pcap b/tests/status_code-31.pcap
new file mode 100644
index 0000000..d854994
--- /dev/null
+++ b/tests/status_code-31.pcap
Binary files differ
diff --git a/tests/status_code-32.pcap b/tests/status_code-32.pcap
new file mode 100644
index 0000000..6997a5b
--- /dev/null
+++ b/tests/status_code-32.pcap
Binary files differ
diff --git a/tests/status_code-33.pcap b/tests/status_code-33.pcap
new file mode 100644
index 0000000..6e6ad0d
--- /dev/null
+++ b/tests/status_code-33.pcap
Binary files differ
diff --git a/tests/status_code-34.pcap b/tests/status_code-34.pcap
new file mode 100644
index 0000000..d746916
--- /dev/null
+++ b/tests/status_code-34.pcap
Binary files differ
diff --git a/tests/status_code-35.pcap b/tests/status_code-35.pcap
new file mode 100644
index 0000000..112f449
--- /dev/null
+++ b/tests/status_code-35.pcap
Binary files differ
diff --git a/tests/status_code-36.pcap b/tests/status_code-36.pcap
new file mode 100644
index 0000000..4a7b6a5
--- /dev/null
+++ b/tests/status_code-36.pcap
Binary files differ
diff --git a/tests/status_code-37.pcap b/tests/status_code-37.pcap
new file mode 100644
index 0000000..c7db7a0
--- /dev/null
+++ b/tests/status_code-37.pcap
Binary files differ
diff --git a/tests/status_code-38.pcap b/tests/status_code-38.pcap
new file mode 100644
index 0000000..2142c46
--- /dev/null
+++ b/tests/status_code-38.pcap
Binary files differ
diff --git a/tests/status_code-39.pcap b/tests/status_code-39.pcap
new file mode 100644
index 0000000..a1cbed9
--- /dev/null
+++ b/tests/status_code-39.pcap
Binary files differ
diff --git a/tests/status_code-4.pcap b/tests/status_code-4.pcap
new file mode 100644
index 0000000..70cfd31
--- /dev/null
+++ b/tests/status_code-4.pcap
Binary files differ
diff --git a/tests/status_code-40.pcap b/tests/status_code-40.pcap
new file mode 100644
index 0000000..b83b473
--- /dev/null
+++ b/tests/status_code-40.pcap
Binary files differ
diff --git a/tests/status_code-41.pcap b/tests/status_code-41.pcap
new file mode 100644
index 0000000..9ca7abe
--- /dev/null
+++ b/tests/status_code-41.pcap
Binary files differ
diff --git a/tests/status_code-42.pcap b/tests/status_code-42.pcap
new file mode 100644
index 0000000..dadcb13
--- /dev/null
+++ b/tests/status_code-42.pcap
Binary files differ
diff --git a/tests/status_code-43.pcap b/tests/status_code-43.pcap
new file mode 100644
index 0000000..bf7c627
--- /dev/null
+++ b/tests/status_code-43.pcap
Binary files differ
diff --git a/tests/status_code-44.pcap b/tests/status_code-44.pcap
new file mode 100644
index 0000000..c4ba4bd
--- /dev/null
+++ b/tests/status_code-44.pcap
Binary files differ
diff --git a/tests/status_code-45.pcap b/tests/status_code-45.pcap
new file mode 100644
index 0000000..2bb5481
--- /dev/null
+++ b/tests/status_code-45.pcap
Binary files differ
diff --git a/tests/status_code-46.pcap b/tests/status_code-46.pcap
new file mode 100644
index 0000000..c4f502a
--- /dev/null
+++ b/tests/status_code-46.pcap
Binary files differ
diff --git a/tests/status_code-47.pcap b/tests/status_code-47.pcap
new file mode 100644
index 0000000..0f77ca4
--- /dev/null
+++ b/tests/status_code-47.pcap
Binary files differ
diff --git a/tests/status_code-48.pcap b/tests/status_code-48.pcap
new file mode 100644
index 0000000..6b18949
--- /dev/null
+++ b/tests/status_code-48.pcap
Binary files differ
diff --git a/tests/status_code-49.pcap b/tests/status_code-49.pcap
new file mode 100644
index 0000000..b7eb304
--- /dev/null
+++ b/tests/status_code-49.pcap
Binary files differ
diff --git a/tests/status_code-5.pcap b/tests/status_code-5.pcap
new file mode 100644
index 0000000..2167a33
--- /dev/null
+++ b/tests/status_code-5.pcap
Binary files differ
diff --git a/tests/status_code-50.pcap b/tests/status_code-50.pcap
new file mode 100644
index 0000000..e8ce7e1
--- /dev/null
+++ b/tests/status_code-50.pcap
Binary files differ
diff --git a/tests/status_code-51.pcap b/tests/status_code-51.pcap
new file mode 100644
index 0000000..0a25494
--- /dev/null
+++ b/tests/status_code-51.pcap
Binary files differ
diff --git a/tests/status_code-52.pcap b/tests/status_code-52.pcap
new file mode 100644
index 0000000..d027c55
--- /dev/null
+++ b/tests/status_code-52.pcap
Binary files differ
diff --git a/tests/status_code-53.pcap b/tests/status_code-53.pcap
new file mode 100644
index 0000000..aa4141a
--- /dev/null
+++ b/tests/status_code-53.pcap
Binary files differ
diff --git a/tests/status_code-54.pcap b/tests/status_code-54.pcap
new file mode 100644
index 0000000..d926ad2
--- /dev/null
+++ b/tests/status_code-54.pcap
Binary files differ
diff --git a/tests/status_code-55.pcap b/tests/status_code-55.pcap
new file mode 100644
index 0000000..ea43ee7
--- /dev/null
+++ b/tests/status_code-55.pcap
Binary files differ
diff --git a/tests/status_code-56.pcap b/tests/status_code-56.pcap
new file mode 100644
index 0000000..eeeff57
--- /dev/null
+++ b/tests/status_code-56.pcap
Binary files differ
diff --git a/tests/status_code-57.pcap b/tests/status_code-57.pcap
new file mode 100644
index 0000000..ae3bff2
--- /dev/null
+++ b/tests/status_code-57.pcap
Binary files differ
diff --git a/tests/status_code-58.pcap b/tests/status_code-58.pcap
new file mode 100644
index 0000000..1bac6bc
--- /dev/null
+++ b/tests/status_code-58.pcap
Binary files differ
diff --git a/tests/status_code-59.pcap b/tests/status_code-59.pcap
new file mode 100644
index 0000000..6972f67
--- /dev/null
+++ b/tests/status_code-59.pcap
Binary files differ
diff --git a/tests/status_code-6.pcap b/tests/status_code-6.pcap
new file mode 100644
index 0000000..46458e0
--- /dev/null
+++ b/tests/status_code-6.pcap
Binary files differ
diff --git a/tests/status_code-60.pcap b/tests/status_code-60.pcap
new file mode 100644
index 0000000..cf7992f
--- /dev/null
+++ b/tests/status_code-60.pcap
Binary files differ
diff --git a/tests/status_code-61.pcap b/tests/status_code-61.pcap
new file mode 100644
index 0000000..b8a49e0
--- /dev/null
+++ b/tests/status_code-61.pcap
Binary files differ
diff --git a/tests/status_code-62.pcap b/tests/status_code-62.pcap
new file mode 100644
index 0000000..6de172d
--- /dev/null
+++ b/tests/status_code-62.pcap
Binary files differ
diff --git a/tests/status_code-63.pcap b/tests/status_code-63.pcap
new file mode 100644
index 0000000..7739f1b
--- /dev/null
+++ b/tests/status_code-63.pcap
Binary files differ
diff --git a/tests/status_code-64.pcap b/tests/status_code-64.pcap
new file mode 100644
index 0000000..b085957
--- /dev/null
+++ b/tests/status_code-64.pcap
Binary files differ
diff --git a/tests/status_code-65.pcap b/tests/status_code-65.pcap
new file mode 100644
index 0000000..b4f64e8
--- /dev/null
+++ b/tests/status_code-65.pcap
Binary files differ
diff --git a/tests/status_code-66.pcap b/tests/status_code-66.pcap
new file mode 100644
index 0000000..4fa4b18
--- /dev/null
+++ b/tests/status_code-66.pcap
Binary files differ
diff --git a/tests/status_code-67.pcap b/tests/status_code-67.pcap
new file mode 100644
index 0000000..0554c62
--- /dev/null
+++ b/tests/status_code-67.pcap
Binary files differ
diff --git a/tests/status_code-68.pcap b/tests/status_code-68.pcap
new file mode 100644
index 0000000..6582e0a
--- /dev/null
+++ b/tests/status_code-68.pcap
Binary files differ
diff --git a/tests/status_code-69.pcap b/tests/status_code-69.pcap
new file mode 100644
index 0000000..28c8c0d
--- /dev/null
+++ b/tests/status_code-69.pcap
Binary files differ
diff --git a/tests/status_code-7.pcap b/tests/status_code-7.pcap
new file mode 100644
index 0000000..58a22b1
--- /dev/null
+++ b/tests/status_code-7.pcap
Binary files differ
diff --git a/tests/status_code-70.pcap b/tests/status_code-70.pcap
new file mode 100644
index 0000000..1c5dc13
--- /dev/null
+++ b/tests/status_code-70.pcap
Binary files differ
diff --git a/tests/status_code-71.pcap b/tests/status_code-71.pcap
new file mode 100644
index 0000000..4786ce6
--- /dev/null
+++ b/tests/status_code-71.pcap
Binary files differ
diff --git a/tests/status_code-72.pcap b/tests/status_code-72.pcap
new file mode 100644
index 0000000..3dea99f
--- /dev/null
+++ b/tests/status_code-72.pcap
Binary files differ
diff --git a/tests/status_code-73.pcap b/tests/status_code-73.pcap
new file mode 100644
index 0000000..ca9e8e7
--- /dev/null
+++ b/tests/status_code-73.pcap
Binary files differ
diff --git a/tests/status_code-74.pcap b/tests/status_code-74.pcap
new file mode 100644
index 0000000..fd2c391
--- /dev/null
+++ b/tests/status_code-74.pcap
Binary files differ
diff --git a/tests/status_code-75.pcap b/tests/status_code-75.pcap
new file mode 100644
index 0000000..3cf9179
--- /dev/null
+++ b/tests/status_code-75.pcap
Binary files differ
diff --git a/tests/status_code-76.pcap b/tests/status_code-76.pcap
new file mode 100644
index 0000000..fbfaa5d
--- /dev/null
+++ b/tests/status_code-76.pcap
Binary files differ
diff --git a/tests/status_code-77.pcap b/tests/status_code-77.pcap
new file mode 100644
index 0000000..f1bd380
--- /dev/null
+++ b/tests/status_code-77.pcap
Binary files differ
diff --git a/tests/status_code-78.pcap b/tests/status_code-78.pcap
new file mode 100644
index 0000000..bd99a5b
--- /dev/null
+++ b/tests/status_code-78.pcap
Binary files differ
diff --git a/tests/status_code-79.pcap b/tests/status_code-79.pcap
new file mode 100644
index 0000000..c96c94e
--- /dev/null
+++ b/tests/status_code-79.pcap
Binary files differ
diff --git a/tests/status_code-8.pcap b/tests/status_code-8.pcap
new file mode 100644
index 0000000..3ba8019
--- /dev/null
+++ b/tests/status_code-8.pcap
Binary files differ
diff --git a/tests/status_code-80.pcap b/tests/status_code-80.pcap
new file mode 100644
index 0000000..123170d
--- /dev/null
+++ b/tests/status_code-80.pcap
Binary files differ
diff --git a/tests/status_code-81.pcap b/tests/status_code-81.pcap
new file mode 100644
index 0000000..12b1010
--- /dev/null
+++ b/tests/status_code-81.pcap
Binary files differ
diff --git a/tests/status_code-82.pcap b/tests/status_code-82.pcap
new file mode 100644
index 0000000..c9430e4
--- /dev/null
+++ b/tests/status_code-82.pcap
Binary files differ
diff --git a/tests/status_code-83.pcap b/tests/status_code-83.pcap
new file mode 100644
index 0000000..3c76372
--- /dev/null
+++ b/tests/status_code-83.pcap
Binary files differ
diff --git a/tests/status_code-84.pcap b/tests/status_code-84.pcap
new file mode 100644
index 0000000..05c12aa
--- /dev/null
+++ b/tests/status_code-84.pcap
Binary files differ
diff --git a/tests/status_code-85.pcap b/tests/status_code-85.pcap
new file mode 100644
index 0000000..d082420
--- /dev/null
+++ b/tests/status_code-85.pcap
Binary files differ
diff --git a/tests/status_code-86.pcap b/tests/status_code-86.pcap
new file mode 100644
index 0000000..6dc7ff5
--- /dev/null
+++ b/tests/status_code-86.pcap
Binary files differ
diff --git a/tests/status_code-87.pcap b/tests/status_code-87.pcap
new file mode 100644
index 0000000..40ce18f
--- /dev/null
+++ b/tests/status_code-87.pcap
Binary files differ
diff --git a/tests/status_code-88.pcap b/tests/status_code-88.pcap
new file mode 100644
index 0000000..cf43ff5
--- /dev/null
+++ b/tests/status_code-88.pcap
Binary files differ
diff --git a/tests/status_code-89.pcap b/tests/status_code-89.pcap
new file mode 100644
index 0000000..69660b6
--- /dev/null
+++ b/tests/status_code-89.pcap
Binary files differ
diff --git a/tests/status_code-9.pcap b/tests/status_code-9.pcap
new file mode 100644
index 0000000..c10d63d
--- /dev/null
+++ b/tests/status_code-9.pcap
Binary files differ
diff --git a/tests/status_code-90.pcap b/tests/status_code-90.pcap
new file mode 100644
index 0000000..69f72c7
--- /dev/null
+++ b/tests/status_code-90.pcap
Binary files differ
diff --git a/tests/status_code-91.pcap b/tests/status_code-91.pcap
new file mode 100644
index 0000000..5299eee
--- /dev/null
+++ b/tests/status_code-91.pcap
Binary files differ
diff --git a/tests/status_code-92.pcap b/tests/status_code-92.pcap
new file mode 100644
index 0000000..609981d
--- /dev/null
+++ b/tests/status_code-92.pcap
Binary files differ
diff --git a/tests/status_code-93.pcap b/tests/status_code-93.pcap
new file mode 100644
index 0000000..5718f3b
--- /dev/null
+++ b/tests/status_code-93.pcap
Binary files differ
diff --git a/tests/status_code-94.pcap b/tests/status_code-94.pcap
new file mode 100644
index 0000000..fc1be7d
--- /dev/null
+++ b/tests/status_code-94.pcap
Binary files differ
diff --git a/tests/status_code-95.pcap b/tests/status_code-95.pcap
new file mode 100644
index 0000000..45db8db
--- /dev/null
+++ b/tests/status_code-95.pcap
Binary files differ
diff --git a/tests/status_code-96.pcap b/tests/status_code-96.pcap
new file mode 100644
index 0000000..4adc1d3
--- /dev/null
+++ b/tests/status_code-96.pcap
Binary files differ
diff --git a/tests/status_code-97.pcap b/tests/status_code-97.pcap
new file mode 100644
index 0000000..e9e20cd
--- /dev/null
+++ b/tests/status_code-97.pcap
Binary files differ
diff --git a/tests/status_code-98.pcap b/tests/status_code-98.pcap
new file mode 100644
index 0000000..bb09a69
--- /dev/null
+++ b/tests/status_code-98.pcap
Binary files differ
diff --git a/tests/status_code-99.pcap b/tests/status_code-99.pcap
new file mode 100644
index 0000000..390729f
--- /dev/null
+++ b/tests/status_code-99.pcap
Binary files differ
diff --git a/tests/stp-heapoverflow-1.out b/tests/stp-heapoverflow-1.out
new file mode 100644
index 0000000..95a0339
--- /dev/null
+++ b/tests/stp-heapoverflow-1.out
@@ -0,0 +1,27 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 5 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 6 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 7 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 8 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 9 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 10 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 11 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 12 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 13 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 30 00000
+ 14 05:27:12.808464432 [|stp]
diff --git a/tests/stp-heapoverflow-1.pcap b/tests/stp-heapoverflow-1.pcap
new file mode 100644
index 0000000..3de3378
--- /dev/null
+++ b/tests/stp-heapoverflow-1.pcap
Binary files differ
diff --git a/tests/stp-heapoverflow-2.out b/tests/stp-heapoverflow-2.out
new file mode 100644
index 0000000..a5a1546
--- /dev/null
+++ b/tests/stp-heapoverflow-2.out
@@ -0,0 +1,27 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 5 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 6 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 7 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 8 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 9 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 10 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 11 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 12 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 13 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 000000
+ 14 05:27:12.808464432 STP 802.1d [|stp]
diff --git a/tests/stp-heapoverflow-2.pcap b/tests/stp-heapoverflow-2.pcap
new file mode 100644
index 0000000..0a92b00
--- /dev/null
+++ b/tests/stp-heapoverflow-2.pcap
Binary files differ
diff --git a/tests/stp-heapoverflow-3.out b/tests/stp-heapoverflow-3.out
new file mode 100644
index 0000000..3e109b5
--- /dev/null
+++ b/tests/stp-heapoverflow-3.out
@@ -0,0 +1,27 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 5 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 6 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 7 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 8 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 9 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 10 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 11 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 12 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 13 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 30 000
+ 14 05:27:12.808464432 [|stp]
diff --git a/tests/stp-heapoverflow-3.pcap b/tests/stp-heapoverflow-3.pcap
new file mode 100644
index 0000000..a289b4b
--- /dev/null
+++ b/tests/stp-heapoverflow-3.pcap
Binary files differ
diff --git a/tests/stp-heapoverflow-4.out b/tests/stp-heapoverflow-4.out
new file mode 100644
index 0000000..df56978
--- /dev/null
+++ b/tests/stp-heapoverflow-4.out
@@ -0,0 +1,27 @@
+ 1 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 2 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 3 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 4 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 5 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 6 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 7 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 8 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 9 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 10 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 11 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 12 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 13 05:27:12.808464432 30:30:30:30:30:30 > 30:30:30:30:30:30, ethertype Unknown (0x3030), length 262144:
+ 0x0000: 3030 3030 3030 3030 00000000
+ 14 05:27:12.808464432 STP 802.1d, Config, Flags [Learn, Forward] [|stp]
diff --git a/tests/stp-heapoverflow-4.pcap b/tests/stp-heapoverflow-4.pcap
new file mode 100644
index 0000000..cd3b0fc
--- /dev/null
+++ b/tests/stp-heapoverflow-4.pcap
Binary files differ
diff --git a/tests/stp-v.out b/tests/stp-v.out
new file mode 100644
index 0000000..ad7cefd
--- /dev/null
+++ b/tests/stp-v.out
@@ -0,0 +1,42 @@
+ 1 11:44:05.787073 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 2 11:44:07.794807 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 3 11:44:09.797264 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 4 11:44:11.802411 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 5 11:44:13.807350 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 6 11:44:15.812636 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 7 11:44:17.820778 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 8 11:44:19.822950 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 9 11:44:21.828161 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 10 11:44:23.832784 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 11 11:44:25.838004 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 12 11:44:27.846419 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 13 11:44:29.848169 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
+ 14 11:44:31.853665 STP 802.1d, Config, Flags [none], bridge-id 8001.00:19:06:ea:b8:80.8005, length 35
+ message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
+ root-id 8001.00:19:06:ea:b8:80, root-pathcost 0
diff --git a/tests/stp-v4-length-sigsegv.out b/tests/stp-v4-length-sigsegv.out
new file mode 100644
index 0000000..3f28c1a
--- /dev/null
+++ b/tests/stp-v4-length-sigsegv.out
@@ -0,0 +1 @@
+ 1 01:10:59.680304 STP 802.1aq, Rapid STP (invalid)
diff --git a/tests/stp-v4-length-sigsegv.pcap b/tests/stp-v4-length-sigsegv.pcap
new file mode 100644
index 0000000..0c197ac
--- /dev/null
+++ b/tests/stp-v4-length-sigsegv.pcap
Binary files differ
diff --git a/tests/syslog-v.out b/tests/syslog-v.out
new file mode 100644
index 0000000..0d2ac9b
--- /dev/null
+++ b/tests/syslog-v.out
@@ -0,0 +1,16 @@
+ 1 15:16:12.250127 IP (tos 0x0, ttl 64, id 30929, offset 0, flags [DF], proto UDP (17), length 79)
+ 10.0.0.20.47565 > 10.0.0.72.514: SYSLOG, length: 51
+ Facility kernel (0), Severity notice (5)
+ Msg: Sep 12 19:16:12 through logger: test message 21^@
+ 2 15:16:18.713802 IP (tos 0x0, ttl 64, id 37393, offset 0, flags [DF], proto UDP (17), length 79)
+ 10.0.0.20.33884 > 10.0.0.72.514: SYSLOG, length: 51
+ Facility user (1), Severity alert (1)
+ Msg: Sep 12 19:16:18 through logger: test message 22^@
+ 3 15:16:34.458509 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 107)
+ 10.0.0.20.52693 > 10.0.0.71.514: SYSLOG, length: 79
+ Facility user (1), Severity notice (5)
+ Msg: 2013-09-12T19:16:34.457849+04:00 localhost through rsyslog: test message 23
+ 4 15:16:43.513906 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 106)
+ 10.0.0.20.52693 > 10.0.0.71.514: SYSLOG, length: 78
+ Facility user (1), Severity alert (1)
+ Msg: 2013-09-12T19:16:43.513746+04:00 localhost through rsyslog: test message 24
diff --git a/tests/syslog_udp.pcap b/tests/syslog_udp.pcap
new file mode 100644
index 0000000..06d54e6
--- /dev/null
+++ b/tests/syslog_udp.pcap
Binary files differ
diff --git a/tests/tcp-auth-heapoverflow.out b/tests/tcp-auth-heapoverflow.out
new file mode 100644
index 0000000..20aa3ca
--- /dev/null
+++ b/tests/tcp-auth-heapoverflow.out
@@ -0,0 +1,2 @@
+ 1 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [DF], proto TCP (6), length 12336, bad cksum 3030 (->29a8)!)
+ 48.48.48.48.12336 > 48.48.48.48.12336: Flags [.U], seq 808464432:808476696, ack 808464432, win 12336, urg 12336, options [tcp-ao keyid 48 rnextkeyid 48 mac 0x303030303030 [|tcp]
diff --git a/tests/tcp-auth-heapoverflow.pcap b/tests/tcp-auth-heapoverflow.pcap
new file mode 100644
index 0000000..811548b
--- /dev/null
+++ b/tests/tcp-auth-heapoverflow.pcap
Binary files differ
diff --git a/tests/tcp_header_heapoverflow.out b/tests/tcp_header_heapoverflow.out
new file mode 100644
index 0000000..f3958e4
--- /dev/null
+++ b/tests/tcp_header_heapoverflow.out
@@ -0,0 +1,2 @@
+ 1 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto TCP (6), length 12336, bad cksum 3030 (->69a8)!)
+ 48.48.48.48.12336 > 48.48.48.48.12336: [|tcp]
diff --git a/tests/tcp_header_heapoverflow.pcap b/tests/tcp_header_heapoverflow.pcap
new file mode 100644
index 0000000..fdeed6c
--- /dev/null
+++ b/tests/tcp_header_heapoverflow.pcap
Binary files differ
diff --git a/tests/telnet-iac-check-oobr.out b/tests/telnet-iac-check-oobr.out
new file mode 100644
index 0000000..dbf9315
--- /dev/null
+++ b/tests/telnet-iac-check-oobr.out
@@ -0,0 +1,2 @@
+ 1 00:00:00.000000 de:ad:0a:f0:6b:57 > de:ad:0a:0a:66:89, ethertype IPv4 (0x0800), length 65535: (tos 0x0, ttl 60, id 10924, offset 0, flags [DF], proto TCP (6), length 65521)
+ 10.240.107.87.23 > 10.10.102.137.47302: Flags [P.], cksum 0x7bf5 (incorrect -> 0xcd9e), seq 3743569485:3743634954, ack 4156682296, win 49232, options [nop,nop,TS val 119384276 ecr 1497139368], length 65469 [telnet DONT OLD-ENVIRON, SB TERMINAL TYPE SEND SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE, SB 0x7b 0xf5 0 0 0x1 0x1 0x8 0xa 0x7 0x1d 0xa8 0xd4 0x59 0x3c 0x88 0xa8 0xff 0xfe 0x24 0xff 0xfa 0x18 0x1 SE [|telnet]
diff --git a/tests/telnet-iac-check-oobr.pcap b/tests/telnet-iac-check-oobr.pcap
new file mode 100644
index 0000000..7800c79
--- /dev/null
+++ b/tests/telnet-iac-check-oobr.pcap
Binary files differ
diff --git a/tests/tfo-5c1fa7f9ae91.pcap b/tests/tfo-5c1fa7f9ae91.pcap
new file mode 100644
index 0000000..43ae5b7
--- /dev/null
+++ b/tests/tfo-5c1fa7f9ae91.pcap
Binary files differ
diff --git a/tests/tfo.out b/tests/tfo.out
new file mode 100644
index 0000000..d9bf018
--- /dev/null
+++ b/tests/tfo.out
@@ -0,0 +1,14 @@
+ 1 16:26:20.467968 IP 192.168.0.100.13047 > 3.3.3.3.13054: Flags [S], seq 218476388, win 1400, options [exp-tfo cookiereq], length 0
+ 2 16:26:20.468329 IP 9.9.9.9.13047 > 3.3.3.3.13054: Flags [S], seq 218476388, win 1400, options [mss 1460,exp-tfo cookiereq], length 0
+ 3 16:26:20.475806 IP 3.3.3.3.13054 > 9.9.9.9.13047: Flags [S.], seq 4035392501, ack 218476389, win 1400, options [exp-tfo cookie 090909090000,nop,nop], length 0
+ 4 16:26:20.476005 IP 3.3.3.3.13054 > 192.168.0.100.13047: Flags [S.], seq 4035392501, ack 218476389, win 1400, options [mss 1500,exp-tfo cookie 090909090000,nop,nop], length 0
+ 5 16:26:20.479248 IP 192.168.0.100.13047 > 3.3.3.3.13054: Flags [.], ack 1, win 1400, length 0
+ 6 16:26:20.479407 IP 9.9.9.9.13047 > 3.3.3.3.13054: Flags [.], ack 1, win 1400, length 0
+ 7 16:26:20.482134 IP 192.168.0.100.13047 > 3.3.3.3.13054: Flags [F.], seq 1, ack 1, win 1400, length 0
+ 8 16:26:20.482303 IP 9.9.9.9.13047 > 3.3.3.3.13054: Flags [F.], seq 1, ack 1, win 1400, length 0
+ 9 16:26:20.488758 IP 3.3.3.3.13054 > 9.9.9.9.13047: Flags [F.], seq 1, ack 2, win 1400, length 0
+ 10 16:26:20.488887 IP 3.3.3.3.13054 > 192.168.0.100.13047: Flags [F.], seq 1, ack 2, win 1400, length 0
+ 11 16:26:20.491543 IP 192.168.0.100.13047 > 3.3.3.3.13054: Flags [.], ack 2, win 1400, length 0
+ 12 16:26:20.491685 IP 9.9.9.9.13047 > 3.3.3.3.13054: Flags [.], ack 2, win 1400, length 0
+ 13 16:26:20.586342 IP 192.168.0.100.13048 > 3.3.3.3.13054: Flags [S], seq 936732547:936732551, win 1400, options [exp-tfo cookie 090909090000,nop,nop], length 4
+ 14 16:26:30.591516 IP 192.168.0.100.13048 > 3.3.3.3.13054: Flags [F.], seq 936732552, ack 0, win 1400, length 0
diff --git a/tests/tftp-T.out b/tests/tftp-T.out
new file mode 100644
index 0000000..7687c89
--- /dev/null
+++ b/tests/tftp-T.out
@@ -0,0 +1,7 @@
+ 1 12:31:53.718074 IP 192.168.1.2.44935 > 192.168.1.1.69: TFTP, length 14, RRQ "file1" octet
+ 2 12:31:53.732442 IP 192.168.1.1.59557 > 192.168.1.2.44935: TFTP, length 516, DATA block 1
+ 3 12:31:53.732956 IP 192.168.1.2.44935 > 192.168.1.1.59557: TFTP, length 4, ACK block 1
+ 4 12:31:53.733217 IP 192.168.1.1.59557 > 192.168.1.2.44935: TFTP, length 516, DATA block 2
+ 5 12:31:53.733497 IP 192.168.1.2.44935 > 192.168.1.1.59557: TFTP, length 4, ACK block 2
+ 6 12:31:53.733527 IP 192.168.1.1.59557 > 192.168.1.2.44935: TFTP, length 109, DATA block 3
+ 7 12:31:53.733706 IP 192.168.1.2.44935 > 192.168.1.1.59557: TFTP, length 4, ACK block 3
diff --git a/tests/tftp-heapoverflow.out b/tests/tftp-heapoverflow.out
new file mode 100644
index 0000000..e0b78b4
--- /dev/null
+++ b/tests/tftp-heapoverflow.out
@@ -0,0 +1,2 @@
+ 1 01:10:59.680304 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [DF], proto UDP (17), length 12336, bad cksum 3030 (->299d)!)
+ 48.48.48.48.69 > 48.48.48.48.12336: TFTP, length 12308, RRQ "00" [|tftp]
diff --git a/tests/tftp-heapoverflow.pcap b/tests/tftp-heapoverflow.pcap
new file mode 100644
index 0000000..00d879d
--- /dev/null
+++ b/tests/tftp-heapoverflow.pcap
Binary files differ
diff --git a/tests/tftp.out b/tests/tftp.out
new file mode 100644
index 0000000..d3cf3f4
--- /dev/null
+++ b/tests/tftp.out
@@ -0,0 +1,7 @@
+ 1 12:31:53.718074 IP 192.168.1.2.44935 > 192.168.1.1.69: TFTP, length 14, RRQ "file1" octet
+ 2 12:31:53.732442 IP 192.168.1.1.59557 > 192.168.1.2.44935: UDP, length 516
+ 3 12:31:53.732956 IP 192.168.1.2.44935 > 192.168.1.1.59557: UDP, length 4
+ 4 12:31:53.733217 IP 192.168.1.1.59557 > 192.168.1.2.44935: UDP, length 516
+ 5 12:31:53.733497 IP 192.168.1.2.44935 > 192.168.1.1.59557: UDP, length 4
+ 6 12:31:53.733527 IP 192.168.1.1.59557 > 192.168.1.2.44935: UDP, length 109
+ 7 12:31:53.733706 IP 192.168.1.2.44935 > 192.168.1.1.59557: UDP, length 4
diff --git a/tests/tftp.pcap b/tests/tftp.pcap
new file mode 100644
index 0000000..9df3544
--- /dev/null
+++ b/tests/tftp.pcap
Binary files differ
diff --git a/tests/tok2str-oobr-1.out b/tests/tok2str-oobr-1.out
new file mode 100644
index 0000000..9c6dbab
--- /dev/null
+++ b/tests/tok2str-oobr-1.out
@@ -0,0 +1,56 @@
+ 1 15:16:31.074315 00:0c:29:31:85:a5 > 00:0c:29:ac:b9:50, ethertype IPv4 (0x0800), length 321: (tos 0xc0, ttl 254, id 20061, offset 0, flags [none], proto TCP (6), length 307)
+ 10.0.0.4.179 > 10.0.0.2.64588: Flags [P.], cksum 0x707c (incorrect -> 0x6883), seq 786752827:786753082, ack 3829861902, win 16357, options [nop,nop,TS val 6993003 ecr 4502201], length 255: BGP
+ Update Message (2), length: 100
+ Origin (1), length: 1, Flags [T]: IGP
+ 0x0000: 00
+ AS Path (2), length: 0, Flags [T]: empty
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 24, Flags [OT]:
+ target (0x0002), Flags [none]: 1:1 (= 0.0.0.1)
+ source-AS (0x0009), Flags [none]: AS 1
+ unknown extd community typecode (0x010a), Flags [none]: 0a0000040006
+ 0x0000: 0002 0001 0000 0001 0009 0001 0000 0000
+ 0x0010: 010a 0a00 0004 0006
+ Multi-Protocol Reach NLRI (14), length: 32, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ nexthop: RD: 0:0 (= 0.0.0.0), 10.0.0.4, nh-length: 12, no SNPA
+ RD: 1:1 (= 0.0.0.1), 172.16.4.0/24, label:16 (bottom)
+ 0x0000: 0001 800c 0000 0000 0000 0000 0a00 0004
+ 0x0010: 0070 0001 0100 0000 0100 0000 01ac 1004
+ Update Message (2), length: 95
+ Origin (1), length: 1, Flags [T]: IGP
+ 0x0000: 00
+ AS Path (2), length: 0, Flags [T]: empty
+ Local Preference (5), length: 4, Flags [T]: 100
+ 0x0000: 0000 0064
+ Extended Community (16), length: 8, Flags [OT]:
+ target (0x0002), Flags [none]: 1:1 (= 0.0.0.1)
+ 0x0000: 0002 0001 0000 0001
+ PMSI Tunnel (22), length: 17, Flags [OT]:
+ Tunnel-type RSVP-TE P2MP LSP (1), Flags [none], MPLS Label 0
+ Extended-Tunnel-ID 10.0.0.4, P2MP-ID 0x00008173
+ 0x0000: 0001 0000 000a 0000 0400 0081 730a 0000
+ 0x0010: 04
+ Multi-Protocol Reach NLRI (14), length: 23, Flags [OE]:
+ AFI: IPv4 (1), SAFI: Multicast VPN (5)
+ nexthop: 10.0.0.4, nh-length: 4
+ 8 SNPA
+ 1 bytes
+ 0 bytes
+ 0 bytes
+ 0 bytes
+ 1 bytes
+ 0 bytes
+ 0 bytes
+ 1 bytes
+ Route-Type: Unknown (0), length: 0
+ Route-Type: Intra-AS Segment-Leaf (4), length: 255
+ 0x0000: 0001 0504 0a00 0004 0801 0c00 0000 0100
+ 0x0010: 0000 010a 0000 04
+ Update Message (2), length: 30
+ Multi-Protocol Unreach NLRI (15), length: 3, Flags [OE]:
+ AFI: IPv4 (1), SAFI: labeled VPN Unicast (128)
+ End-of-Rib Marker (empty NLRI)
+ 0x0000: 0001 80
+ Update Message (2), length: 30 [|bgp]
diff --git a/tests/tok2str-oobr-1.pcap b/tests/tok2str-oobr-1.pcap
new file mode 100644
index 0000000..6f28b5d
--- /dev/null
+++ b/tests/tok2str-oobr-1.pcap
Binary files differ
diff --git a/tests/tok2str-oobr-2.out b/tests/tok2str-oobr-2.out
new file mode 100644
index 0000000..9cbd002
--- /dev/null
+++ b/tests/tok2str-oobr-2.out
@@ -0,0 +1,19 @@
+ 1 04:38:13.000000 01:01:01:01:01:01 > 02:02:02:02:02:02, ethertype MPLS unicast (0x8847), length 130: MPLS (label 16006, tc 0, [S], ttl 255)
+ (tos 0x0, ttl 1, id 32770, offset 0, flags [DF, rsvd], proto UDP (17), length 112, options (RA), bad cksum a4cc (->a4cb)!)
+ 192.168.0.1.3503 > 127.0.0.1.3503: [bad udp cksum 0x8397 -> 0x3f6d!]
+ LSP-PINGv1, msg-type: MPLS Echo Request (1), length: 80
+ reply-mode: Reply via an IPv4/IPv6 UDP packet (2)
+ Return Code: unknown (65)
+ Return Subcode: (0)
+ Sender Handle: 0x00000023, Sequence: 1
+ Sender Timestamp: 3558141471.506155999 (2012-10-02T04:37:51Z) Receiver Timestamp: 0.000000000
+ Target FEC Stack TLV (1), length: 24
+ Unknown subTLV (17), length: 20
+ 0x0000: 0000 0001 0000 0001 c0a8 0001 c0a8 0001
+ 0x0010: 0000 2712
+ 0x0000: 0011 0014 0000 0001 0000 0001 c0a8 0001
+ 0x0010: c0a8 0001 0000 2712
+ Unknown TLV (268), length: 4
+ 0x0000: 0008 00c8
+ Unknown TLV (523), length: 8
+ 0x0000: 0003 0004 c0a8 0104
diff --git a/tests/tok2str-oobr-2.pcap b/tests/tok2str-oobr-2.pcap
new file mode 100644
index 0000000..c2016e5
--- /dev/null
+++ b/tests/tok2str-oobr-2.pcap
Binary files differ
diff --git a/tests/trunc_aack.out b/tests/trunc_aack.out
new file mode 100644
index 0000000..b16d243
--- /dev/null
+++ b/tests/trunc_aack.out
@@ -0,0 +1 @@
+ 1 00:00:05.780739 PAP, Auth-ACK (0x02), id 1[|pap]
diff --git a/tests/truncated-aack.pcap b/tests/truncated-aack.pcap
new file mode 100644
index 0000000..f90b9e9
--- /dev/null
+++ b/tests/truncated-aack.pcap
Binary files differ
diff --git a/tests/udld-inf-loop-1-v.out b/tests/udld-inf-loop-1-v.out
new file mode 100644
index 0000000..f8b59d3
--- /dev/null
+++ b/tests/udld-inf-loop-1-v.out
@@ -0,0 +1,9 @@
+ 1 11:15:30.259144 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x3956 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 0 (invalid)
diff --git a/tests/udld-inf-loop-1.pcapng b/tests/udld-inf-loop-1.pcapng
new file mode 100644
index 0000000..652935c
--- /dev/null
+++ b/tests/udld-inf-loop-1.pcapng
Binary files differ
diff --git a/tests/udld-v.out b/tests/udld-v.out
new file mode 100644
index 0000000..f996fd3
--- /dev/null
+++ b/tests/udld-v.out
@@ -0,0 +1,261 @@
+ 1 11:14:12.243962 UDLDv1, Code Probe message (1), Flags [RT, RSY] (0x03), length 60
+ Checksum 0x6d85 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 8, ^@^@^@^@
+ Message Interval TLV (0x0004) TLV, length 5, 7s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 1
+ 2 11:14:12.244346 UDLDv1, Code Echo message (2), Flags [none] (0x00), length 80
+ Checksum 0x805d (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 7s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 1
+ 3 11:14:12.244696 UDLDv1, Code Echo message (2), Flags [none] (0x00), length 80
+ Checksum 0x805e (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 7s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 1
+ 4 11:14:12.633254 UDLDv1, Code Echo message (2), Flags [none] (0x00), length 80
+ Checksum 0x805c (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 7s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 2
+ 5 11:14:13.250690 UDLDv1, Code Echo message (2), Flags [none] (0x00), length 80
+ Checksum 0x805d (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 7s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 2
+ 6 11:14:13.631606 UDLDv1, Code Echo message (2), Flags [none] (0x00), length 80
+ Checksum 0x805b (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 7s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 3
+ 7 11:14:14.249094 UDLDv1, Code Echo message (2), Flags [none] (0x00), length 80
+ Checksum 0x805c (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 7s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 3
+ 8 11:14:14.629963 UDLDv1, Code Echo message (2), Flags [none] (0x00), length 80
+ Checksum 0x805a (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 7s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 4
+ 9 11:14:15.247436 UDLDv1, Code Echo message (2), Flags [none] (0x00), length 80
+ Checksum 0x805b (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 7s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 4
+ 10 11:14:15.628301 UDLDv1, Code Echo message (2), Flags [none] (0x00), length 80
+ Checksum 0x8059 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 7s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 5
+ 11 11:14:16.245782 UDLDv1, Code Echo message (2), Flags [none] (0x00), length 80
+ Checksum 0x805a (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 7s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 5
+ 12 11:14:16.635051 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x795c (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 1
+ 13 11:14:17.244147 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x795d (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 1
+ 14 11:14:23.631900 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x795b (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 2
+ 15 11:14:24.249530 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x795c (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 2
+ 16 11:14:30.637186 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x795a (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 3
+ 17 11:14:31.246440 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x795b (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 3
+ 18 11:14:37.634025 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x7959 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 4
+ 19 11:14:38.251795 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x795a (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 4
+ 20 11:14:44.639308 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x7958 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 5
+ 21 11:14:45.248751 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x7959 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 5
+ 22 11:14:59.639781 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x7957 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 6
+ 23 11:15:00.249419 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x7958 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 6
+ 24 11:15:14.640244 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x7956 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 7
+ 25 11:15:15.814760 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x7957 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 7
+ 26 11:15:29.640733 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x7955 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 8
+ 27 11:15:30.259144 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x7956 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 8
+ 28 11:15:44.641210 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x7954 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1025X4W3
+ Port-ID TLV (0x0002) TLV, length 9, Fa0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1031Z7JG^@^EGi0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S2
+ Sequence Number TLV (0x0007) TLV, length 8, 9
+ 29 11:15:45.259800 UDLDv1, Code Probe message (1), Flags [RT] (0x01), length 80
+ Checksum 0x7955 (unverified)
+ Device-ID TLV (0x0001) TLV, length 15, FOC1031Z7JG
+ Port-ID TLV (0x0002) TLV, length 9, Gi0/1
+ Echo TLV (0x0003) TLV, length 28, ^@^@^@^A^@^KFOC1025X4W3^@^EFa0/1
+ Message Interval TLV (0x0004) TLV, length 5, 15s
+ Timeout Interval TLV (0x0005) TLV, length 5, 5s
+ Device Name TLV (0x0006) TLV, length 6, S1
+ Sequence Number TLV (0x0007) TLV, length 8, 9
diff --git a/tests/udp-length-heapoverflow.out b/tests/udp-length-heapoverflow.out
new file mode 100644
index 0000000..c9e2c36
--- /dev/null
+++ b/tests/udp-length-heapoverflow.out
@@ -0,0 +1,2 @@
+ 1 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 3030 (->699d)!)
+ 48.48.48.48.12336 > 48.48.48.48.12336: [|udp]
diff --git a/tests/udp-length-heapoverflow.pcap b/tests/udp-length-heapoverflow.pcap
new file mode 100644
index 0000000..a8c55b6
--- /dev/null
+++ b/tests/udp-length-heapoverflow.pcap
Binary files differ
diff --git a/tests/unaligned-nfs-1.out b/tests/unaligned-nfs-1.out
new file mode 100644
index 0000000..75a5919
--- /dev/null
+++ b/tests/unaligned-nfs-1.out
@@ -0,0 +1,2 @@
+ 1 19:21:36.913318 IP (tos 0x0, ttl 63, id 38810, offset 0, flags [DF], proto TCP (6), length 168)
+ 128.112.130.130.2049 > 140.180.226.200.1023: Flags [P.], cksum 0x6f82 (correct), seq 271994717:271994833, ack 3625862383, win 12274, options [nop,nop,TS val 801481683 ecr 243357584], length 116: NFS reply xid 3532485149 reply ok 112
diff --git a/tests/unaligned-nfs-1.pcap b/tests/unaligned-nfs-1.pcap
new file mode 100644
index 0000000..5f12c13
--- /dev/null
+++ b/tests/unaligned-nfs-1.pcap
Binary files differ
diff --git a/tests/unsupported-link-type-160.out b/tests/unsupported-link-type-160.out
new file mode 100644
index 0000000..973e57b
--- /dev/null
+++ b/tests/unsupported-link-type-160.out
@@ -0,0 +1,3 @@
+ 1 00:00:00.000000 UNSUPPORTED
+ 0x0000: 490c 6209 6923 34e8 efd3 a7bf 4ec0 fd3b I.b.i#4.....N..;
+ 0x0010: 43e0 0b2b 2b2b 2b C..++++
diff --git a/tests/unsupported-link-type-160.pcap b/tests/unsupported-link-type-160.pcap
new file mode 100644
index 0000000..d34c60c
--- /dev/null
+++ b/tests/unsupported-link-type-160.pcap
Binary files differ
diff --git a/tests/unsupported-link-type-dbus.out b/tests/unsupported-link-type-dbus.out
new file mode 100644
index 0000000..f833b6a
--- /dev/null
+++ b/tests/unsupported-link-type-dbus.out
@@ -0,0 +1,26 @@
+ 1 21:35:34.858486 UNSUPPORTED
+ 0x0000: 6c01 0101 9200 0000 1700 0000 7f00 0000 l...............
+ 0x0010: 0101 6f00 1500 0000 2f6f 7267 2f66 7265 ..o...../org/fre
+ 0x0020: 6564 6573 6b74 6f70 2f44 4275 7300 0000 edesktop/DBus...
+ 0x0030: 0601 7300 1400 0000 6f72 672e 6672 6565 ..s.....org.free
+ 0x0040: 6465 736b 746f 702e 4442 7573 0000 0000 desktop.DBus....
+ 0x0050: 0201 7300 1400 0000 6f72 672e 6672 6565 ..s.....org.free
+ 0x0060: 6465 736b 746f 702e 4442 7573 0000 0000 desktop.DBus....
+ 0x0070: 0301 7300 0b00 0000 5265 6d6f 7665 4d61 ..s.....RemoveMa
+ 0x0080: 7463 6800 0000 0000 0801 6700 0173 0000 tch.......g..s..
+ 0x0090: 8d00 0000 7479 7065 3d27 7369 676e 616c ....type='signal
+ 0x00a0: 272c 7365 6e64 6572 3d27 6f72 672e 6672 ',sender='org.fr
+ 0x00b0: 6565 6465 736b 746f 702e 4861 6c27 2c70 eedesktop.Hal',p
+ 0x00c0: 6174 683d 272f 6f72 672f 6672 6565 6465 ath='/org/freede
+ 0x00d0: 736b 746f 702f 4861 6c2f 4d61 6e61 6765 sktop/Hal/Manage
+ 0x00e0: 7227 2c69 6e74 6572 6661 6365 3d27 6f72 r',interface='or
+ 0x00f0: 672e 6672 6565 6465 736b 746f 702e 4861 g.freedesktop.Ha
+ 0x0100: 6c2e 4d61 6e61 6765 7227 2c6d 656d 6265 l.Manager',membe
+ 0x0110: 723d 2744 6576 6963 6552 656d 6f76 6564 r='DeviceRemoved
+ 0x0120: 2700 '.
+ 2 21:35:34.859818 UNSUPPORTED
+ 0x0000: 6c02 0101 0000 0000 1100 0000 3500 0000 l...........5...
+ 0x0010: 0601 7300 0600 0000 3a31 2e31 3131 0000 ..s.....:1.111..
+ 0x0020: 0501 7500 1700 0000 0701 7300 1400 0000 ..u.......s.....
+ 0x0030: 6f72 672e 6672 6565 6465 736b 746f 702e org.freedesktop.
+ 0x0040: 4442 7573 0000 0000 DBus....
diff --git a/tests/unsupported-link-type-dbus.pcap b/tests/unsupported-link-type-dbus.pcap
new file mode 100644
index 0000000..6933304
--- /dev/null
+++ b/tests/unsupported-link-type-dbus.pcap
Binary files differ
diff --git a/tests/vqp-oobr.out b/tests/vqp-oobr.out
new file mode 100644
index 0000000..358599e
--- /dev/null
+++ b/tests/vqp-oobr.out
@@ -0,0 +1,3 @@
+ 1 [Error converting time] IP (tos 0x0, ttl 17, id 40207, offset 0, flags [+, DF, rsvd], proto UDP (17), length 46, bad cksum 8f04 (->f897)!)
+ 0.0.128.20.1589 > 12.251.167.8.62720:
+ VQPv1, unknown (127) Message, error-code unknown (31), seq 0x80f90000, items 27, length 18 [|vqp]
diff --git a/tests/vqp-oobr.pcap b/tests/vqp-oobr.pcap
new file mode 100644
index 0000000..8e7ef86
--- /dev/null
+++ b/tests/vqp-oobr.pcap
Binary files differ
diff --git a/tests/vrrp-v.out b/tests/vrrp-v.out
new file mode 100644
index 0000000..3ac1115
--- /dev/null
+++ b/tests/vrrp-v.out
@@ -0,0 +1,266 @@
+ 1 21:55:06.745865 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.91 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 191, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 2 21:55:06.749784 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.91 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 191, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 3 21:55:09.074730 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.91 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 191, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 4 21:55:16.753372 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.91 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 191, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 5 21:55:16.753436 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.91 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 191, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 6 21:55:19.064377 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe66:cf60 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 191, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 7 21:55:19.064509 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe66:cf60 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 191, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 8 21:55:19.074681 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.91 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 191, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 9 21:55:26.751857 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.91 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 191, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 10 21:55:26.751923 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.91 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 191, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 11 21:55:29.068063 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe66:cf60 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 191, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 12 21:55:29.068132 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe66:cf60 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 191, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 13 21:55:29.078313 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.91 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 191, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 14 21:55:34.773565 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.92 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 192, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 15 21:55:34.783698 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.92 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 192, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 16 21:55:37.044216 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.92 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 192, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 17 21:55:39.070934 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe66:cf60 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 191, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 18 21:55:39.071010 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe66:cf60 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 191, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 19 21:55:44.778957 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.92 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 192, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 20 21:55:44.789130 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.92 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 192, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 21 21:55:47.046947 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.92 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 192, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 22 21:55:47.047012 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe72:b1da > ff02::12: VRRPv3, Advertisement, vrid 46, prio 192, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 23 21:55:47.047042 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe72:b1da > ff02::12: VRRPv3, Advertisement, vrid 45, prio 192, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 24 21:55:54.780328 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.92 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 192, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 25 21:55:54.780387 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.92 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 192, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 26 21:55:57.042694 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.92 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 192, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 27 21:55:57.042754 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe72:b1da > ff02::12: VRRPv3, Advertisement, vrid 45, prio 192, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 28 21:55:57.042778 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe72:b1da > ff02::12: VRRPv3, Advertisement, vrid 46, prio 192, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 29 21:56:04.643506 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 193, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 30 21:56:04.649862 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 193, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 31 21:56:06.862122 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.93 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 193, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 32 21:56:07.046980 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe72:b1da > ff02::12: VRRPv3, Advertisement, vrid 46, prio 192, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 33 21:56:07.047062 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe72:b1da > ff02::12: VRRPv3, Advertisement, vrid 45, prio 192, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 34 21:56:14.647902 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 193, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 35 21:56:14.647963 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 193, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 36 21:56:16.860142 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 193, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 37 21:56:16.860206 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 193, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 38 21:56:16.860214 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.93 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 193, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 39 21:56:24.657679 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 193, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 40 21:56:24.657741 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 193, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 41 21:56:26.859969 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 193, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 42 21:56:26.860037 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 193, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 43 21:56:26.860045 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.93 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 193, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 44 21:56:34.667398 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 193, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 45 21:56:34.667454 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 193, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 46 21:56:36.859720 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 193, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 47 21:56:36.859786 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 193, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 48 21:56:36.859795 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.93 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 193, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 49 21:56:41.365005 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 194, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 50 21:56:41.367020 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 194, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 51 21:56:43.571121 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.94 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 194, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 52 21:56:46.860576 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 193, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 53 21:56:46.860627 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 193, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 54 21:56:51.366475 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 194, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 55 21:56:51.366535 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 194, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 56 21:56:53.568732 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 45, prio 194, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 57 21:56:53.568785 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.94 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 194, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 58 21:56:53.589188 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 46, prio 194, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 59 21:57:01.373895 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 194, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 60 21:57:01.373951 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 194, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 61 21:57:03.566197 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.94 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 194, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 62 21:57:03.566241 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 45, prio 194, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 63 21:57:03.586537 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 46, prio 194, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 64 21:57:11.381178 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 194, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 65 21:57:11.381238 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 194, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 66 21:57:13.563581 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 45, prio 194, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 67 21:57:13.563652 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.94 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 194, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 68 21:57:13.583750 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 46, prio 194, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 69 21:57:21.390823 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 194, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 70 21:57:21.390887 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 194, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 71 21:57:23.563280 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.94 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 194, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 72 21:57:23.563341 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 45, prio 194, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 73 21:57:23.583426 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 46, prio 194, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 74 21:57:30.198637 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 195, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 75 21:57:30.202588 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 195, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 76 21:57:32.373402 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.95 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 195, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 77 21:57:33.567816 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 45, prio 194, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 78 21:57:33.588127 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 46, prio 194, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 79 21:57:40.205279 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 195, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 80 21:57:40.205343 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 195, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 81 21:57:42.367695 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.95 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 195, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 82 21:57:42.367760 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 45, prio 195, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 83 21:57:42.377819 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 46, prio 195, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 84 21:57:50.215046 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 195, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 85 21:57:50.215112 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 195, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 86 21:57:52.367351 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 45, prio 195, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 87 21:57:52.367427 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.95 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 195, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 88 21:57:52.377456 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 46, prio 195, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 89 21:58:00.224875 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 195, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 90 21:58:00.224935 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 195, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 91 21:58:02.367084 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.95 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 195, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 92 21:58:02.367144 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 45, prio 195, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 93 21:58:02.377445 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 46, prio 195, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 94 21:58:04.461974 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 196, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 95 21:58:04.466033 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 196, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 96 21:58:06.599034 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.96 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 196, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 97 21:58:12.374622 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 45, prio 195, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 98 21:58:12.374697 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 46, prio 195, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 99 21:58:14.458404 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 196, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 100 21:58:14.468662 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 196, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 101 21:58:16.590792 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 196, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 102 21:58:16.600962 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.96 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 196, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 103 21:58:16.611202 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 196, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 104 21:58:24.464854 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 196, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 105 21:58:24.464916 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 196, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 106 21:58:26.587122 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 196, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 107 21:58:26.597278 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.96 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 196, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 108 21:58:26.607415 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 196, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 109 21:58:34.474628 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 196, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 110 21:58:34.474688 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 196, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 111 21:58:36.586887 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 196, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 112 21:58:36.597038 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.96 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 196, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 113 21:58:36.607177 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 196, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 114 21:58:44.484468 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 196, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 115 21:58:44.484534 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 196, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 116 21:58:46.585913 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 196, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 117 21:58:46.596106 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.96 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 196, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 118 21:58:46.606276 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 196, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 119 21:58:49.932515 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 120 21:58:49.935030 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 121 21:58:52.025571 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 122 21:58:56.594126 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 196, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 123 21:58:56.604316 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 196, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 124 21:58:59.938046 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 125 21:58:59.938096 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 126 21:59:02.020356 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 127 21:59:02.030572 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 128 21:59:02.040691 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 129 21:59:09.941288 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 130 21:59:09.941346 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 131 21:59:12.013545 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 132 21:59:12.023710 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 133 21:59:12.033831 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 134 21:59:19.951291 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 135 21:59:19.951350 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 136 21:59:22.013537 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 137 21:59:22.023644 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 138 21:59:22.033781 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 139 21:59:29.961257 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 140 21:59:29.961318 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 141 21:59:32.013287 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 142 21:59:32.023734 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 143 21:59:32.033779 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 144 21:59:39.971275 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 145 21:59:39.971336 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 146 21:59:42.013484 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 147 21:59:42.023603 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 148 21:59:42.033784 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 149 21:59:49.981283 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 150 21:59:49.981343 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 151 21:59:52.013458 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 152 21:59:52.023620 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 153 21:59:52.033729 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 154 21:59:59.991224 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 155 21:59:59.991284 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 156 22:00:02.013448 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 157 22:00:02.023620 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 158 22:00:02.033735 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 159 22:00:10.001302 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
+ 160 22:00:10.001364 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 161 22:00:12.013443 IP6 (hlim 255, next-header VRRP (112) payload length: 40) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40, addrs(2): fe80::200:5eff:fe00:22d,2001::abcd:a
+ 162 22:00:12.023585 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 36)
+ 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16, addrs(2): 10.4.44.100,10.4.44.200
+ 163 22:00:12.033752 IP6 (hlim 255, next-header VRRP (112) payload length: 88) fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88, addrs(5): fe80::200:5eff:fe00:22e,2001::eeff:a,2001::eeff:b,2001::eeff:c,2001::eeff:d
+ 164 22:00:20.011269 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 48)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28, addrs(3): 10.4.42.1,10.4.42.2,10.4.42.3 auth "abcdefgh"
+ 165 22:00:20.011328 IP (tos 0x0, ttl 255, id 4660, offset 0, flags [none], proto VRRP (112), length 40)
+ 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20, addrs: 10.4.43.150
diff --git a/tests/vrrp-vrrp_print-oobr-2.out b/tests/vrrp-vrrp_print-oobr-2.out
new file mode 100644
index 0000000..89f1c2e
--- /dev/null
+++ b/tests/vrrp-vrrp_print-oobr-2.out
@@ -0,0 +1,20 @@
+ 1 04:20:20.000534 IP (tos 0x2,ECT(0), ttl 35, id 48399, offset 0, flags [+, DF, rsvd], proto VRRP (112), length 39, bad cksum 7f (->c1ae)!)
+ 0.3.2.148 > 54.0.0.16: VRRPv3, Advertisement, (ttl 35), vrid 255, prio 17, intvl 269cs, length 19, addrs(3): [|vrrp]
+ 2 07:06:53.912788 IP (tos 0x2,ECT(0), ttl 35, id 40207, offset 0, flags [+, DF, rsvd], proto VRRP (112), length 39, bad cksum 7e (->e1b5)!)
+ 255.251.2.148 > 54.0.0.16: VRRPv3, Advertisement, (ttl 35), vrid 255, prio 17, intvl 2304cs, length 19, addrs(3): [|vrrp]
+ 3 07:06:53.912788 IP (tos 0x2,ECT(0), ttl 35, id 40207, offset 0, flags [+, DF, rsvd], proto VRRP (112), length 39, bad cksum 597f (->e1ae)!)
+ 0.3.2.148 > 54.0.0.16: VRRPv3, Advertisement, (ttl 35), vrid 255, prio 17, intvl 256cs, length 19, addrs(3): [|vrrp]
+ 4 07:06:53.912788 IP (tos 0x2,ECT(0), ttl 35, id 40207, offset 0, flags [+, DF, rsvd], proto VRRP (112), length 39, bad cksum 7f (->e154)!)
+ 0.3.2.148 > 54.90.0.16: VRRPv3, Advertisement, (ttl 35), vrid 255, prio 17, intvl 256cs, length 19, addrs(3): [|vrrp]
+ 5 07:06:53.912788 IP (tos 0x2,ECT(0), ttl 35, id 40207, offset 0, flags [+, DF, rsvd], proto VRRP (112), length 39, bad cksum 7f (->e1ae)!)
+ 0.3.2.148 > 54.0.0.16: VRRPv3, Advertisement, (ttl 35), vrid 0, prio 4, intvl 2304cs, length 19, addrs:
+ 6 07:06:53.912788 IP (tos 0x2,ECT(0), ttl 35, id 48399, offset 0, flags [+, DF, rsvd], proto VRRP (112), length 39, bad cksum 7f (->c1ae)!)
+ 0.3.2.148 > 54.0.0.16: VRRPv3, Advertisement, (ttl 35), vrid 255, prio 17, intvl 256cs, length 19, addrs(3): [|vrrp]
+ 7 07:06:53.912788 IP (tos 0x2,ECT(0), ttl 35, id 40207, offset 0, flags [+, DF, rsvd], proto VRRP (112), length 39, bad cksum 7f (->e1ae)!)
+ 0.3.2.148 > 54.0.0.16: VRRPv3, Advertisement, (ttl 35), vrid 255, prio 17, intvl 256cs, length 19, addrs(3): [|vrrp]
+ 8 07:06:53.912788 IP (tos 0x2,ECT(0), ttl 34, id 40207, offset 0, flags [+, DF, rsvd], proto VRRP (112), length 27, bad cksum 7f (->e260)!)
+ 0.3.2.148 > 54.90.0.16: VRRPv3, Advertisement, (ttl 34), vrid 255, prio 17, intvl 256cs, length 7 [|vrrp]
+ 9 07:06:53.912788 IP (tos 0x2,ECT(0), ttl 35, id 40207, offset 0, flags [+, DF, rsvd], proto VRRP (112), length 39, bad cksum 7f (->17af)!)
+ 0.3.2.148 > 0.0.0.16: VRRPv3, Advertisement, (ttl 35), vrid 0, prio 4, intvl 2304cs, length 19, addrs:
+ 10 07:06:53.912788 IP (tos 0x2,ECT(0), ttl 35, id 48399, offset 0, flags [+, DF, rsvd], proto VRRP (112), length 39, bad cksum 7f (->2e8a)!)
+ 242.242.242.242 > 242.242.242.242: VRRPv15, unknown type (2), (ttl 35)
diff --git a/tests/vrrp-vrrp_print-oobr-2.pcap b/tests/vrrp-vrrp_print-oobr-2.pcap
new file mode 100644
index 0000000..1de39f0
--- /dev/null
+++ b/tests/vrrp-vrrp_print-oobr-2.pcap
Binary files differ
diff --git a/tests/vrrp-vrrp_print-oobr.out b/tests/vrrp-vrrp_print-oobr.out
new file mode 100644
index 0000000..ae4a907
--- /dev/null
+++ b/tests/vrrp-vrrp_print-oobr.out
@@ -0,0 +1,6 @@
+ 1 05:50:05.908918788 IP (tos 0x7f,CE, ttl 254, id 40208, offset 0, flags [none], proto VRRP (112), length 34, options (unknown 69 [bad length 83]), bad cksum 8e15 (->bc96)!)
+ 250.219.91.20 > 209.150.251.64: VRRPv2, Advertisement, (ttl 254), vrid 2, prio 0, authtype simple, intvl 255s, length 6 [|vrrp]
+ 2 05:50:05.908918788 IP (tos 0x7f,CE, ttl 254, id 40208, offset 0, flags [none], proto VRRP (112), length 40, options (unknown 69 [bad length 83]), bad cksum 8e15 (->b790)!)
+ 250.219.91.20 > 209.150.251.64: VRRPv2, Advertisement, (ttl 254), vrid 2, prio 0, authtype simple, intvl 255s, length 12, addrs: [|vrrp]
+ 3 20:09:34.908975098 IP (tos 0x7f,CE, ttl 254, id 40208, offset 0, flags [none], proto VRRP (112), length 40, options (unknown 69 [bad length 83]), bad cksum 8e15 (->bc90)!)
+ 250.219.91.20 > 209.150.251.64: VRRPv2, Advertisement, (ttl 254), vrid 2, prio 0, authtype simple, intvl 255s, length 12, addrs: [|vrrp]
diff --git a/tests/vrrp-vrrp_print-oobr.pcap b/tests/vrrp-vrrp_print-oobr.pcap
new file mode 100644
index 0000000..6cc6f98
--- /dev/null
+++ b/tests/vrrp-vrrp_print-oobr.pcap
Binary files differ
diff --git a/tests/vrrp.out b/tests/vrrp.out
new file mode 100644
index 0000000..6fa6edd
--- /dev/null
+++ b/tests/vrrp.out
@@ -0,0 +1,165 @@
+ 1 21:55:06.745865 IP 10.0.0.91 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 191, authtype simple, intvl 10s, length 28
+ 2 21:55:06.749784 IP 10.0.0.91 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 191, authtype none, intvl 10s, length 20
+ 3 21:55:09.074730 IP 10.0.0.91 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 191, intvl 1000cs, length 16
+ 4 21:55:16.753372 IP 10.0.0.91 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 191, authtype simple, intvl 10s, length 28
+ 5 21:55:16.753436 IP 10.0.0.91 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 191, authtype none, intvl 10s, length 20
+ 6 21:55:19.064377 IP6 fe80::d6ca:6dff:fe66:cf60 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 191, intvl 1000cs, length 40
+ 7 21:55:19.064509 IP6 fe80::d6ca:6dff:fe66:cf60 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 191, intvl 1000cs, length 88
+ 8 21:55:19.074681 IP 10.0.0.91 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 191, intvl 1000cs, length 16
+ 9 21:55:26.751857 IP 10.0.0.91 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 191, authtype simple, intvl 10s, length 28
+ 10 21:55:26.751923 IP 10.0.0.91 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 191, authtype none, intvl 10s, length 20
+ 11 21:55:29.068063 IP6 fe80::d6ca:6dff:fe66:cf60 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 191, intvl 1000cs, length 88
+ 12 21:55:29.068132 IP6 fe80::d6ca:6dff:fe66:cf60 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 191, intvl 1000cs, length 40
+ 13 21:55:29.078313 IP 10.0.0.91 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 191, intvl 1000cs, length 16
+ 14 21:55:34.773565 IP 10.0.0.92 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 192, authtype simple, intvl 10s, length 28
+ 15 21:55:34.783698 IP 10.0.0.92 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 192, authtype none, intvl 10s, length 20
+ 16 21:55:37.044216 IP 10.0.0.92 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 192, intvl 1000cs, length 16
+ 17 21:55:39.070934 IP6 fe80::d6ca:6dff:fe66:cf60 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 191, intvl 1000cs, length 40
+ 18 21:55:39.071010 IP6 fe80::d6ca:6dff:fe66:cf60 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 191, intvl 1000cs, length 88
+ 19 21:55:44.778957 IP 10.0.0.92 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 192, authtype simple, intvl 10s, length 28
+ 20 21:55:44.789130 IP 10.0.0.92 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 192, authtype none, intvl 10s, length 20
+ 21 21:55:47.046947 IP 10.0.0.92 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 192, intvl 1000cs, length 16
+ 22 21:55:47.047012 IP6 fe80::d6ca:6dff:fe72:b1da > ff02::12: VRRPv3, Advertisement, vrid 46, prio 192, intvl 1000cs, length 88
+ 23 21:55:47.047042 IP6 fe80::d6ca:6dff:fe72:b1da > ff02::12: VRRPv3, Advertisement, vrid 45, prio 192, intvl 1000cs, length 40
+ 24 21:55:54.780328 IP 10.0.0.92 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 192, authtype simple, intvl 10s, length 28
+ 25 21:55:54.780387 IP 10.0.0.92 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 192, authtype none, intvl 10s, length 20
+ 26 21:55:57.042694 IP 10.0.0.92 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 192, intvl 1000cs, length 16
+ 27 21:55:57.042754 IP6 fe80::d6ca:6dff:fe72:b1da > ff02::12: VRRPv3, Advertisement, vrid 45, prio 192, intvl 1000cs, length 40
+ 28 21:55:57.042778 IP6 fe80::d6ca:6dff:fe72:b1da > ff02::12: VRRPv3, Advertisement, vrid 46, prio 192, intvl 1000cs, length 88
+ 29 21:56:04.643506 IP 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 193, authtype simple, intvl 10s, length 28
+ 30 21:56:04.649862 IP 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 193, authtype none, intvl 10s, length 20
+ 31 21:56:06.862122 IP 10.0.0.93 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 193, intvl 1000cs, length 16
+ 32 21:56:07.046980 IP6 fe80::d6ca:6dff:fe72:b1da > ff02::12: VRRPv3, Advertisement, vrid 46, prio 192, intvl 1000cs, length 88
+ 33 21:56:07.047062 IP6 fe80::d6ca:6dff:fe72:b1da > ff02::12: VRRPv3, Advertisement, vrid 45, prio 192, intvl 1000cs, length 40
+ 34 21:56:14.647902 IP 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 193, authtype simple, intvl 10s, length 28
+ 35 21:56:14.647963 IP 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 193, authtype none, intvl 10s, length 20
+ 36 21:56:16.860142 IP6 fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 193, intvl 1000cs, length 88
+ 37 21:56:16.860206 IP6 fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 193, intvl 1000cs, length 40
+ 38 21:56:16.860214 IP 10.0.0.93 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 193, intvl 1000cs, length 16
+ 39 21:56:24.657679 IP 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 193, authtype simple, intvl 10s, length 28
+ 40 21:56:24.657741 IP 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 193, authtype none, intvl 10s, length 20
+ 41 21:56:26.859969 IP6 fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 193, intvl 1000cs, length 88
+ 42 21:56:26.860037 IP6 fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 193, intvl 1000cs, length 40
+ 43 21:56:26.860045 IP 10.0.0.93 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 193, intvl 1000cs, length 16
+ 44 21:56:34.667398 IP 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 193, authtype none, intvl 10s, length 20
+ 45 21:56:34.667454 IP 10.0.0.93 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 193, authtype simple, intvl 10s, length 28
+ 46 21:56:36.859720 IP6 fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 193, intvl 1000cs, length 88
+ 47 21:56:36.859786 IP6 fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 193, intvl 1000cs, length 40
+ 48 21:56:36.859795 IP 10.0.0.93 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 193, intvl 1000cs, length 16
+ 49 21:56:41.365005 IP 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 194, authtype simple, intvl 10s, length 28
+ 50 21:56:41.367020 IP 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 194, authtype none, intvl 10s, length 20
+ 51 21:56:43.571121 IP 10.0.0.94 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 194, intvl 1000cs, length 16
+ 52 21:56:46.860576 IP6 fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 193, intvl 1000cs, length 88
+ 53 21:56:46.860627 IP6 fe80::d6ca:6dff:fe66:cf65 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 193, intvl 1000cs, length 40
+ 54 21:56:51.366475 IP 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 194, authtype simple, intvl 10s, length 28
+ 55 21:56:51.366535 IP 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 194, authtype none, intvl 10s, length 20
+ 56 21:56:53.568732 IP6 fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 45, prio 194, intvl 1000cs, length 40
+ 57 21:56:53.568785 IP 10.0.0.94 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 194, intvl 1000cs, length 16
+ 58 21:56:53.589188 IP6 fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 46, prio 194, intvl 1000cs, length 88
+ 59 21:57:01.373895 IP 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 194, authtype simple, intvl 10s, length 28
+ 60 21:57:01.373951 IP 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 194, authtype none, intvl 10s, length 20
+ 61 21:57:03.566197 IP 10.0.0.94 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 194, intvl 1000cs, length 16
+ 62 21:57:03.566241 IP6 fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 45, prio 194, intvl 1000cs, length 40
+ 63 21:57:03.586537 IP6 fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 46, prio 194, intvl 1000cs, length 88
+ 64 21:57:11.381178 IP 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 194, authtype simple, intvl 10s, length 28
+ 65 21:57:11.381238 IP 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 194, authtype none, intvl 10s, length 20
+ 66 21:57:13.563581 IP6 fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 45, prio 194, intvl 1000cs, length 40
+ 67 21:57:13.563652 IP 10.0.0.94 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 194, intvl 1000cs, length 16
+ 68 21:57:13.583750 IP6 fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 46, prio 194, intvl 1000cs, length 88
+ 69 21:57:21.390823 IP 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 194, authtype simple, intvl 10s, length 28
+ 70 21:57:21.390887 IP 10.0.0.94 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 194, authtype none, intvl 10s, length 20
+ 71 21:57:23.563280 IP 10.0.0.94 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 194, intvl 1000cs, length 16
+ 72 21:57:23.563341 IP6 fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 45, prio 194, intvl 1000cs, length 40
+ 73 21:57:23.583426 IP6 fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 46, prio 194, intvl 1000cs, length 88
+ 74 21:57:30.198637 IP 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 195, authtype simple, intvl 10s, length 28
+ 75 21:57:30.202588 IP 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 195, authtype none, intvl 10s, length 20
+ 76 21:57:32.373402 IP 10.0.0.95 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 195, intvl 1000cs, length 16
+ 77 21:57:33.567816 IP6 fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 45, prio 194, intvl 1000cs, length 40
+ 78 21:57:33.588127 IP6 fe80::d6ca:6dff:fe65:d45c > ff02::12: VRRPv3, Advertisement, vrid 46, prio 194, intvl 1000cs, length 88
+ 79 21:57:40.205279 IP 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 195, authtype simple, intvl 10s, length 28
+ 80 21:57:40.205343 IP 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 195, authtype none, intvl 10s, length 20
+ 81 21:57:42.367695 IP 10.0.0.95 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 195, intvl 1000cs, length 16
+ 82 21:57:42.367760 IP6 fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 45, prio 195, intvl 1000cs, length 40
+ 83 21:57:42.377819 IP6 fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 46, prio 195, intvl 1000cs, length 88
+ 84 21:57:50.215046 IP 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 195, authtype simple, intvl 10s, length 28
+ 85 21:57:50.215112 IP 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 195, authtype none, intvl 10s, length 20
+ 86 21:57:52.367351 IP6 fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 45, prio 195, intvl 1000cs, length 40
+ 87 21:57:52.367427 IP 10.0.0.95 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 195, intvl 1000cs, length 16
+ 88 21:57:52.377456 IP6 fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 46, prio 195, intvl 1000cs, length 88
+ 89 21:58:00.224875 IP 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 195, authtype simple, intvl 10s, length 28
+ 90 21:58:00.224935 IP 10.0.0.95 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 195, authtype none, intvl 10s, length 20
+ 91 21:58:02.367084 IP 10.0.0.95 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 195, intvl 1000cs, length 16
+ 92 21:58:02.367144 IP6 fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 45, prio 195, intvl 1000cs, length 40
+ 93 21:58:02.377445 IP6 fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 46, prio 195, intvl 1000cs, length 88
+ 94 21:58:04.461974 IP 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 196, authtype simple, intvl 10s, length 28
+ 95 21:58:04.466033 IP 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 196, authtype none, intvl 10s, length 20
+ 96 21:58:06.599034 IP 10.0.0.96 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 196, intvl 1000cs, length 16
+ 97 21:58:12.374622 IP6 fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 45, prio 195, intvl 1000cs, length 40
+ 98 21:58:12.374697 IP6 fe80::d6ca:6dff:fe65:d46b > ff02::12: VRRPv3, Advertisement, vrid 46, prio 195, intvl 1000cs, length 88
+ 99 21:58:14.458404 IP 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 196, authtype simple, intvl 10s, length 28
+ 100 21:58:14.468662 IP 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 196, authtype none, intvl 10s, length 20
+ 101 21:58:16.590792 IP6 fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 196, intvl 1000cs, length 40
+ 102 21:58:16.600962 IP 10.0.0.96 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 196, intvl 1000cs, length 16
+ 103 21:58:16.611202 IP6 fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 196, intvl 1000cs, length 88
+ 104 21:58:24.464854 IP 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 196, authtype simple, intvl 10s, length 28
+ 105 21:58:24.464916 IP 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 196, authtype none, intvl 10s, length 20
+ 106 21:58:26.587122 IP6 fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 196, intvl 1000cs, length 40
+ 107 21:58:26.597278 IP 10.0.0.96 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 196, intvl 1000cs, length 16
+ 108 21:58:26.607415 IP6 fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 196, intvl 1000cs, length 88
+ 109 21:58:34.474628 IP 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 196, authtype none, intvl 10s, length 20
+ 110 21:58:34.474688 IP 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 196, authtype simple, intvl 10s, length 28
+ 111 21:58:36.586887 IP6 fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 196, intvl 1000cs, length 40
+ 112 21:58:36.597038 IP 10.0.0.96 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 196, intvl 1000cs, length 16
+ 113 21:58:36.607177 IP6 fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 196, intvl 1000cs, length 88
+ 114 21:58:44.484468 IP 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 196, authtype simple, intvl 10s, length 28
+ 115 21:58:44.484534 IP 10.0.0.96 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 196, authtype none, intvl 10s, length 20
+ 116 21:58:46.585913 IP6 fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 196, intvl 1000cs, length 40
+ 117 21:58:46.596106 IP 10.0.0.96 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 196, intvl 1000cs, length 16
+ 118 21:58:46.606276 IP6 fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 196, intvl 1000cs, length 88
+ 119 21:58:49.932515 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28
+ 120 21:58:49.935030 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20
+ 121 21:58:52.025571 IP 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16
+ 122 21:58:56.594126 IP6 fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 45, prio 196, intvl 1000cs, length 40
+ 123 21:58:56.604316 IP6 fe80::d6ca:6dff:fe72:b1e4 > ff02::12: VRRPv3, Advertisement, vrid 46, prio 196, intvl 1000cs, length 88
+ 124 21:58:59.938046 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28
+ 125 21:58:59.938096 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20
+ 126 21:59:02.020356 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40
+ 127 21:59:02.030572 IP 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16
+ 128 21:59:02.040691 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88
+ 129 21:59:09.941288 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20
+ 130 21:59:09.941346 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28
+ 131 21:59:12.013545 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40
+ 132 21:59:12.023710 IP 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16
+ 133 21:59:12.033831 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88
+ 134 21:59:19.951291 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28
+ 135 21:59:19.951350 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20
+ 136 21:59:22.013537 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40
+ 137 21:59:22.023644 IP 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16
+ 138 21:59:22.033781 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88
+ 139 21:59:29.961257 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20
+ 140 21:59:29.961318 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28
+ 141 21:59:32.013287 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40
+ 142 21:59:32.023734 IP 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16
+ 143 21:59:32.033779 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88
+ 144 21:59:39.971275 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28
+ 145 21:59:39.971336 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20
+ 146 21:59:42.013484 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40
+ 147 21:59:42.023603 IP 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16
+ 148 21:59:42.033784 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88
+ 149 21:59:49.981283 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20
+ 150 21:59:49.981343 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28
+ 151 21:59:52.013458 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40
+ 152 21:59:52.023620 IP 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16
+ 153 21:59:52.033729 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88
+ 154 21:59:59.991224 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28
+ 155 21:59:59.991284 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20
+ 156 22:00:02.013448 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40
+ 157 22:00:02.023620 IP 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16
+ 158 22:00:02.033735 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88
+ 159 22:00:10.001302 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20
+ 160 22:00:10.001364 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28
+ 161 22:00:12.013443 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 45, prio 197, intvl 1000cs, length 40
+ 162 22:00:12.023585 IP 10.0.0.97 > 224.0.0.18: VRRPv3, Advertisement, vrid 44, prio 197, intvl 1000cs, length 16
+ 163 22:00:12.033752 IP6 fe80::20c:42ff:fe5e:c2dc > ff02::12: VRRPv3, Advertisement, vrid 46, prio 197, intvl 1000cs, length 88
+ 164 22:00:20.011269 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 42, prio 197, authtype simple, intvl 10s, length 28
+ 165 22:00:20.011328 IP 10.0.0.97 > 224.0.0.18: VRRPv2, Advertisement, vrid 43, prio 197, authtype none, intvl 10s, length 20
diff --git a/tests/vrrp.pcap b/tests/vrrp.pcap
new file mode 100644
index 0000000..8db1e20
--- /dev/null
+++ b/tests/vrrp.pcap
Binary files differ
diff --git a/tests/vsock-1-v.out b/tests/vsock-1-v.out
new file mode 100644
index 0000000..e9e7a14
--- /dev/null
+++ b/tests/vsock-1-v.out
@@ -0,0 +1,20 @@
+ 1 12:31:11.261679 VIRTIO (len 0, type STREAM, op REQUEST, flags 0, buf_alloc 262144, fwd_cnt 0)
+ 3.1024 > 2.1234 CONNECT, length 76
+ 2 12:31:11.261740 VIRTIO (len 0, type STREAM, op RESPONSE, flags 0, buf_alloc 262144, fwd_cnt 0)
+ 2.1234 > 3.1024 CONNECT, length 76
+ 3 12:31:12.552718 VIRTIO (len 6, type STREAM, op RW, flags 0, buf_alloc 262144, fwd_cnt 0)
+ 3.1024 > 2.1234 PAYLOAD, length 82
+ 4 12:31:12.552854 VIRTIO (len 0, type STREAM, op CREDIT UPDATE, flags 0, buf_alloc 262144, fwd_cnt 6)
+ 2.1234 > 3.1024 CONTROL, length 76
+ 5 12:31:13.817848 VIRTIO (len 6, type STREAM, op RW, flags 0, buf_alloc 262144, fwd_cnt 0)
+ 3.1024 > 2.1234 PAYLOAD, length 82
+ 6 12:31:13.817897 VIRTIO (len 0, type STREAM, op CREDIT UPDATE, flags 0, buf_alloc 262144, fwd_cnt 12)
+ 2.1234 > 3.1024 CONTROL, length 76
+ 7 12:31:16.939624 VIRTIO (len 7, type STREAM, op RW, flags 0, buf_alloc 262144, fwd_cnt 12)
+ 2.1234 > 3.1024 PAYLOAD, length 83
+ 8 12:31:16.947538 VIRTIO (len 0, type STREAM, op CREDIT UPDATE, flags 0, buf_alloc 262144, fwd_cnt 7)
+ 3.1024 > 2.1234 CONTROL, length 76
+ 9 12:31:17.368933 VIRTIO (len 0, type STREAM, op SHUTDOWN, flags 3, buf_alloc 262144, fwd_cnt 12)
+ 2.1234 > 3.1024 DISCONNECT, length 76
+ 10 12:31:17.377004 VIRTIO (len 0, type STREAM, op RST, flags 0, buf_alloc 262144, fwd_cnt 7)
+ 3.1024 > 2.1234 DISCONNECT, length 76
diff --git a/tests/vsock-1-vv.out b/tests/vsock-1-vv.out
new file mode 100644
index 0000000..a8a1ddc
--- /dev/null
+++ b/tests/vsock-1-vv.out
@@ -0,0 +1,23 @@
+ 1 12:31:11.261679 VIRTIO (len 0, type STREAM, op REQUEST, flags 0, buf_alloc 262144, fwd_cnt 0)
+ 3.1024 > 2.1234 CONNECT, length 76
+ 2 12:31:11.261740 VIRTIO (len 0, type STREAM, op RESPONSE, flags 0, buf_alloc 262144, fwd_cnt 0)
+ 2.1234 > 3.1024 CONNECT, length 76
+ 3 12:31:12.552718 VIRTIO (len 6, type STREAM, op RW, flags 0, buf_alloc 262144, fwd_cnt 0)
+ 3.1024 > 2.1234 PAYLOAD, length 82
+ 0x0000: 4865 6c6c 6f0a
+ 4 12:31:12.552854 VIRTIO (len 0, type STREAM, op CREDIT UPDATE, flags 0, buf_alloc 262144, fwd_cnt 6)
+ 2.1234 > 3.1024 CONTROL, length 76
+ 5 12:31:13.817848 VIRTIO (len 6, type STREAM, op RW, flags 0, buf_alloc 262144, fwd_cnt 0)
+ 3.1024 > 2.1234 PAYLOAD, length 82
+ 0x0000: 576f 726c 640a
+ 6 12:31:13.817897 VIRTIO (len 0, type STREAM, op CREDIT UPDATE, flags 0, buf_alloc 262144, fwd_cnt 12)
+ 2.1234 > 3.1024 CONTROL, length 76
+ 7 12:31:16.939624 VIRTIO (len 7, type STREAM, op RW, flags 0, buf_alloc 262144, fwd_cnt 12)
+ 2.1234 > 3.1024 PAYLOAD, length 83
+ 0x0000: 4869 203a 2d29 0a
+ 8 12:31:16.947538 VIRTIO (len 0, type STREAM, op CREDIT UPDATE, flags 0, buf_alloc 262144, fwd_cnt 7)
+ 3.1024 > 2.1234 CONTROL, length 76
+ 9 12:31:17.368933 VIRTIO (len 0, type STREAM, op SHUTDOWN, flags 3, buf_alloc 262144, fwd_cnt 12)
+ 2.1234 > 3.1024 DISCONNECT, length 76
+ 10 12:31:17.377004 VIRTIO (len 0, type STREAM, op RST, flags 0, buf_alloc 262144, fwd_cnt 7)
+ 3.1024 > 2.1234 DISCONNECT, length 76
diff --git a/tests/vsock-1.out b/tests/vsock-1.out
new file mode 100644
index 0000000..f3b71e0
--- /dev/null
+++ b/tests/vsock-1.out
@@ -0,0 +1,10 @@
+ 1 12:31:11.261679 VIRTIO 3.1024 > 2.1234 CONNECT, length 76
+ 2 12:31:11.261740 VIRTIO 2.1234 > 3.1024 CONNECT, length 76
+ 3 12:31:12.552718 VIRTIO 3.1024 > 2.1234 PAYLOAD, length 82
+ 4 12:31:12.552854 VIRTIO 2.1234 > 3.1024 CONTROL, length 76
+ 5 12:31:13.817848 VIRTIO 3.1024 > 2.1234 PAYLOAD, length 82
+ 6 12:31:13.817897 VIRTIO 2.1234 > 3.1024 CONTROL, length 76
+ 7 12:31:16.939624 VIRTIO 2.1234 > 3.1024 PAYLOAD, length 83
+ 8 12:31:16.947538 VIRTIO 3.1024 > 2.1234 CONTROL, length 76
+ 9 12:31:17.368933 VIRTIO 2.1234 > 3.1024 DISCONNECT, length 76
+ 10 12:31:17.377004 VIRTIO 3.1024 > 2.1234 DISCONNECT, length 76
diff --git a/tests/vsock-1.pcapng b/tests/vsock-1.pcapng
new file mode 100644
index 0000000..e696547
--- /dev/null
+++ b/tests/vsock-1.pcapng
Binary files differ
diff --git a/tests/vtp_asan-2.out b/tests/vtp_asan-2.out
new file mode 100644
index 0000000..cb4b051
--- /dev/null
+++ b/tests/vtp_asan-2.out
@@ -0,0 +1,2 @@
+ 1 11:13:40.2148532227 FRF.16 Frag, seq 193, Flags [Begin, End], UI 08! VTPv69, Message Subset advertisement (0x02), length 262131
+ Domain name: , Seq number: 0, Config Rev fb499603 (invalid) [|vtp]
diff --git a/tests/vtp_asan-2.pcap b/tests/vtp_asan-2.pcap
new file mode 100644
index 0000000..cb5b581
--- /dev/null
+++ b/tests/vtp_asan-2.pcap
Binary files differ
diff --git a/tests/vtp_asan-3.out b/tests/vtp_asan-3.out
new file mode 100644
index 0000000..5a8cf26
--- /dev/null
+++ b/tests/vtp_asan-3.out
@@ -0,0 +1,2 @@
+ 1 11:13:40.2148532227 FRF.16 Frag, seq 193, Flags [Begin, End], UI 08! VTPv69, Message Subset advertisement (0x02), length 262131
+ Domain name: , Seq number: 0, Config Rev 4040404 (invalid) [|vtp]
diff --git a/tests/vtp_asan-3.pcap b/tests/vtp_asan-3.pcap
new file mode 100644
index 0000000..254e9ba
--- /dev/null
+++ b/tests/vtp_asan-3.pcap
Binary files differ
diff --git a/tests/vtp_asan.out b/tests/vtp_asan.out
new file mode 100644
index 0000000..7821dda
--- /dev/null
+++ b/tests/vtp_asan.out
@@ -0,0 +1,6 @@
+ 1 11:13:40.2148532227 FRF.16 Frag, seq 193, Flags [Begin, End], UI 08! VTPv69, Message Subset advertisement (0x02), length 262131
+ Domain name: , Seq number: 0 [|vtp]
+ 2 [Invalid header: caplen==0]
+ 3 [Invalid header: caplen==0, len==0]
+ 4 [Invalid header: caplen==0, len==0]
+ 5 [Invalid header: caplen==0, len==0]
diff --git a/tests/vtp_asan.pcap b/tests/vtp_asan.pcap
new file mode 100644
index 0000000..953b7f0
--- /dev/null
+++ b/tests/vtp_asan.pcap
Binary files differ
diff --git a/tests/vxlan.out b/tests/vxlan.out
new file mode 100644
index 0000000..35878fa
--- /dev/null
+++ b/tests/vxlan.out
@@ -0,0 +1,20 @@
+ 1 20:21:44.837063 36:dc:85:1e:b3:40 > 00:16:3e:08:71:cf, ethertype IPv4 (0x0800), length 148: 192.168.203.1.45149 > 192.168.202.1.4789: VXLAN, flags [I] (0x08), vni 100
+00:16:3e:37:f6:04 > 00:30:88:01:00:02, ethertype IPv4 (0x0800), length 98: 192.168.203.3 > 192.168.203.5: ICMP echo request, id 1292, seq 1, length 64
+ 2 20:21:44.882198 00:16:3e:08:71:cf > 36:dc:85:1e:b3:40, ethertype IPv4 (0x0800), length 92: 192.168.202.1.42710 > 192.168.203.1.4789: VXLAN, flags [I] (0x08), vni 100
+00:30:88:01:00:02 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.203.3 tell 192.168.203.5, length 28
+ 3 20:21:44.882536 36:dc:85:1e:b3:40 > 00:16:3e:08:71:cf, ethertype IPv4 (0x0800), length 92: 192.168.203.1.52102 > 192.168.202.1.4789: VXLAN, flags [I] (0x08), vni 100
+00:16:3e:37:f6:04 > 00:30:88:01:00:02, ethertype ARP (0x0806), length 42: Reply 192.168.203.3 is-at 00:16:3e:37:f6:04, length 28
+ 4 20:21:44.925960 00:16:3e:08:71:cf > 36:dc:85:1e:b3:40, ethertype IPv4 (0x0800), length 148: 192.168.202.1.32894 > 192.168.203.1.4789: VXLAN, flags [I] (0x08), vni 100
+00:30:88:01:00:02 > 00:16:3e:37:f6:04, ethertype IPv4 (0x0800), length 98: 192.168.203.5 > 192.168.203.3: ICMP echo reply, id 1292, seq 1, length 64
+ 5 20:21:45.838156 36:dc:85:1e:b3:40 > 00:16:3e:08:71:cf, ethertype IPv4 (0x0800), length 148: 192.168.203.1.45149 > 192.168.202.1.4789: VXLAN, flags [I] (0x08), vni 100
+00:16:3e:37:f6:04 > 00:30:88:01:00:02, ethertype IPv4 (0x0800), length 98: 192.168.203.3 > 192.168.203.5: ICMP echo request, id 1292, seq 2, length 64
+ 6 20:21:45.881150 00:16:3e:08:71:cf > 36:dc:85:1e:b3:40, ethertype IPv4 (0x0800), length 148: 192.168.202.1.32894 > 192.168.203.1.4789: VXLAN, flags [I] (0x08), vni 100
+00:30:88:01:00:02 > 00:16:3e:37:f6:04, ethertype IPv4 (0x0800), length 98: 192.168.203.5 > 192.168.203.3: ICMP echo reply, id 1292, seq 2, length 64
+ 7 20:21:46.840248 36:dc:85:1e:b3:40 > 00:16:3e:08:71:cf, ethertype IPv4 (0x0800), length 148: 192.168.203.1.45149 > 192.168.202.1.4789: VXLAN, flags [I] (0x08), vni 100
+00:16:3e:37:f6:04 > 00:30:88:01:00:02, ethertype IPv4 (0x0800), length 98: 192.168.203.3 > 192.168.203.5: ICMP echo request, id 1292, seq 3, length 64
+ 8 20:21:46.884062 00:16:3e:08:71:cf > 36:dc:85:1e:b3:40, ethertype IPv4 (0x0800), length 148: 192.168.202.1.32894 > 192.168.203.1.4789: VXLAN, flags [I] (0x08), vni 100
+00:30:88:01:00:02 > 00:16:3e:37:f6:04, ethertype IPv4 (0x0800), length 98: 192.168.203.5 > 192.168.203.3: ICMP echo reply, id 1292, seq 3, length 64
+ 9 20:21:47.841976 36:dc:85:1e:b3:40 > 00:16:3e:08:71:cf, ethertype IPv4 (0x0800), length 148: 192.168.203.1.45149 > 192.168.202.1.4789: VXLAN, flags [I] (0x08), vni 100
+00:16:3e:37:f6:04 > 00:30:88:01:00:02, ethertype IPv4 (0x0800), length 98: 192.168.203.3 > 192.168.203.5: ICMP echo request, id 1292, seq 4, length 64
+ 10 20:21:47.885359 00:16:3e:08:71:cf > 36:dc:85:1e:b3:40, ethertype IPv4 (0x0800), length 148: 192.168.202.1.32894 > 192.168.203.1.4789: VXLAN, flags [I] (0x08), vni 100
+00:30:88:01:00:02 > 00:16:3e:37:f6:04, ethertype IPv4 (0x0800), length 98: 192.168.203.5 > 192.168.203.3: ICMP echo reply, id 1292, seq 4, length 64
diff --git a/tests/vxlan.pcap b/tests/vxlan.pcap
new file mode 100644
index 0000000..04f0c2f
--- /dev/null
+++ b/tests/vxlan.pcap
Binary files differ
diff --git a/tests/wb-oobr.out b/tests/wb-oobr.out
new file mode 100644
index 0000000..9766e5d
--- /dev/null
+++ b/tests/wb-oobr.out
@@ -0,0 +1,15 @@
+ 1 05:27:12.808464432 MPLS (label 197376, tc 7, [S], ttl 48)
+ IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 3030 (->7754)!)
+ 48.4.4.4.4400 > 127.0.0.1.3503: [|lspping]
+ 2 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 3030 (->699d)!)
+ 48.48.48.48.3503 > 48.48.48.48.4567: * wb-prep: [|wb]
+ 3 05:27:12.808464432 MPLS (label 197376, tc 7, [S], ttl 48)
+ IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 3030 (->699d)!)
+ 48.48.48.48.4400 > 48.48.48.48.3503: [|lspping]
+ 4 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 3030 (->c624)!)
+ 48.48.0.1.3503 > 48.4.4.4.4567: * wb-prep: [|wb]
+ 5 05:27:12.808464432 MPLS (label 197376, tc 7, [S], ttl 48)
+ IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 3030 (->7754)!)
+ 48.4.4.4.4400 > 127.0.0.1.3503: [|lspping]
+ 6 05:27:12.808464432 IP (tos 0x30, ttl 48, id 12336, offset 0, flags [none], proto UDP (17), length 12336, bad cksum 3030 (->c624)!)
+ 48.48.0.1.3503 > 48.4.4.4.4567: * wb-prep: [|wb]
diff --git a/tests/wb-oobr.pcap b/tests/wb-oobr.pcap
new file mode 100644
index 0000000..818b0c3
--- /dev/null
+++ b/tests/wb-oobr.pcap
Binary files differ
diff --git a/tests/whois-v.out b/tests/whois-v.out
new file mode 100644
index 0000000..3f295d0
--- /dev/null
+++ b/tests/whois-v.out
@@ -0,0 +1,34 @@
+ 1 17:25:19.066204 IP (tos 0x0, ttl 64, id 32393, offset 0, flags [DF], proto TCP (6), length 60)
+ 10.0.2.15.44188 > 192.0.47.59.43: Flags [S], cksum 0xfb78 (incorrect -> 0xcc94), seq 2239453442, win 29200, options [mss 1460,sackOK,TS val 2943013729 ecr 0,nop,wscale 6], length 0
+ 2 17:25:19.183009 IP (tos 0x0, ttl 64, id 18525, offset 0, flags [none], proto TCP (6), length 44)
+ 192.0.47.59.43 > 10.0.2.15.44188: Flags [S.], cksum 0xb2ed (correct), seq 9920001, ack 2239453443, win 65535, options [mss 1460], length 0
+ 3 17:25:19.183243 IP (tos 0x0, ttl 64, id 32394, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.0.2.15.44188 > 192.0.47.59.43: Flags [.], cksum 0xfb64 (incorrect -> 0x589a), ack 1, win 29200, length 0
+ 4 17:25:19.183706 IP (tos 0x0, ttl 64, id 32395, offset 0, flags [DF], proto TCP (6), length 53)
+ 10.0.2.15.44188 > 192.0.47.59.43: Flags [P.], cksum 0xfb71 (incorrect -> 0xe187), seq 1:14, ack 1, win 29200, length 13: WHOIS, length: 13
+ example.com
+ 5 17:25:19.183927 IP (tos 0x0, ttl 64, id 18526, offset 0, flags [none], proto TCP (6), length 40)
+ 192.0.47.59.43 > 10.0.2.15.44188: Flags [.], cksum 0xca9d (correct), ack 14, win 65535, length 0
+ 6 17:25:19.303926 IP (tos 0x0, ttl 64, id 18527, offset 0, flags [none], proto TCP (6), length 273)
+ 192.0.47.59.43 > 10.0.2.15.44188: Flags [P.], cksum 0x4a0c (correct), seq 1:234, ack 14, win 65535, length 233: WHOIS, length: 233
+ % IANA WHOIS server
+ % for more information on IANA, visit http://www.iana.org
+ % This query returned 1 object
+
+ domain: EXAMPLE.COM
+
+ organisation: Internet Assigned Numbers Authority
+
+ created: 1992-01-01
+ source: IANA
+
+ 7 17:25:19.304440 IP (tos 0x0, ttl 64, id 32396, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.0.2.15.44188 > 192.0.47.59.43: Flags [.], cksum 0xfb64 (incorrect -> 0x5474), ack 234, win 30016, length 0
+ 8 17:25:19.304752 IP (tos 0x0, ttl 64, id 18528, offset 0, flags [none], proto TCP (6), length 40)
+ 192.0.47.59.43 > 10.0.2.15.44188: Flags [F.], cksum 0xc9b3 (correct), seq 234, ack 14, win 65535, length 0
+ 9 17:25:19.346962 IP (tos 0x0, ttl 64, id 32397, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.0.2.15.44188 > 192.0.47.59.43: Flags [.], cksum 0xfb64 (incorrect -> 0x5473), ack 235, win 30016, length 0
+ 10 17:25:19.368018 IP (tos 0x0, ttl 64, id 32398, offset 0, flags [DF], proto TCP (6), length 40)
+ 10.0.2.15.44188 > 192.0.47.59.43: Flags [F.], cksum 0xfb64 (incorrect -> 0x5472), seq 14, ack 235, win 30016, length 0
+ 11 17:25:19.369269 IP (tos 0x0, ttl 64, id 18529, offset 0, flags [none], proto TCP (6), length 40)
+ 192.0.47.59.43 > 10.0.2.15.44188: Flags [.], cksum 0xc9b2 (correct), ack 15, win 65535, length 0
diff --git a/tests/whois.out b/tests/whois.out
new file mode 100644
index 0000000..953a4c2
--- /dev/null
+++ b/tests/whois.out
@@ -0,0 +1,11 @@
+ 1 17:25:19.066204 IP 10.0.2.15.44188 > 192.0.47.59.43: Flags [S], seq 2239453442, win 29200, options [mss 1460,sackOK,TS val 2943013729 ecr 0,nop,wscale 6], length 0
+ 2 17:25:19.183009 IP 192.0.47.59.43 > 10.0.2.15.44188: Flags [S.], seq 9920001, ack 2239453443, win 65535, options [mss 1460], length 0
+ 3 17:25:19.183243 IP 10.0.2.15.44188 > 192.0.47.59.43: Flags [.], ack 1, win 29200, length 0
+ 4 17:25:19.183706 IP 10.0.2.15.44188 > 192.0.47.59.43: Flags [P.], seq 1:14, ack 1, win 29200, length 13: WHOIS: example.com
+ 5 17:25:19.183927 IP 192.0.47.59.43 > 10.0.2.15.44188: Flags [.], ack 14, win 65535, length 0
+ 6 17:25:19.303926 IP 192.0.47.59.43 > 10.0.2.15.44188: Flags [P.], seq 1:234, ack 14, win 65535, length 233: WHOIS: % IANA WHOIS server
+ 7 17:25:19.304440 IP 10.0.2.15.44188 > 192.0.47.59.43: Flags [.], ack 234, win 30016, length 0
+ 8 17:25:19.304752 IP 192.0.47.59.43 > 10.0.2.15.44188: Flags [F.], seq 234, ack 14, win 65535, length 0
+ 9 17:25:19.346962 IP 10.0.2.15.44188 > 192.0.47.59.43: Flags [.], ack 235, win 30016, length 0
+ 10 17:25:19.368018 IP 10.0.2.15.44188 > 192.0.47.59.43: Flags [F.], seq 14, ack 235, win 30016, length 0
+ 11 17:25:19.369269 IP 192.0.47.59.43 > 10.0.2.15.44188: Flags [.], ack 15, win 65535, length 0
diff --git a/tests/whois.pcap b/tests/whois.pcap
new file mode 100644
index 0000000..76a003b
--- /dev/null
+++ b/tests/whois.pcap
Binary files differ
diff --git a/tests/zephyr-oobr.out b/tests/zephyr-oobr.out
new file mode 100644
index 0000000..0414008
--- /dev/null
+++ b/tests/zephyr-oobr.out
@@ -0,0 +1,2 @@
+ 1 00:00:00.000000 00:16:ca:92:12:01 > 00:15:e8:97:b2:01, ethertype IPv4 (0x0800), length 65535: (tos 0x0, ttl 124, id 16059, offset 0, flags [none], proto UDP (17), length 65521)
+ 167.155.6.190.2104 > 167.155.9.153.514: [udp sum ok] (invalid)
diff --git a/tests/zephyr-oobr.pcap b/tests/zephyr-oobr.pcap
new file mode 100644
index 0000000..af71c59
--- /dev/null
+++ b/tests/zephyr-oobr.pcap
Binary files differ
diff --git a/tests/zmtp1-inf-loop-1.out b/tests/zmtp1-inf-loop-1.out
new file mode 100644
index 0000000..0ea93ab
--- /dev/null
+++ b/tests/zmtp1-inf-loop-1.out
@@ -0,0 +1,2 @@
+ 1 18:09:40.809286 IP 196.59.48.65.14214 > 192.168.1.1.179: Flags [P.], seq 2470159403:2470159437, ack 160570221, win 8224, length 34: ZMTP/1.0
+ frame flags+body (64-bit) length 18446744073709551607 (25 captured), flags 0xff [|zmtp1]
diff --git a/tests/zmtp1-inf-loop-1.pcapng b/tests/zmtp1-inf-loop-1.pcapng
new file mode 100644
index 0000000..280e397
--- /dev/null
+++ b/tests/zmtp1-inf-loop-1.pcapng
Binary files differ
diff --git a/tests/zmtp1.out b/tests/zmtp1.out
new file mode 100644
index 0000000..763dd50
--- /dev/null
+++ b/tests/zmtp1.out
@@ -0,0 +1,67 @@
+ 1 12:04:12.420021 IP (tos 0x0, ttl 64, id 17993, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.55358 > 127.0.0.1.33000: Flags [S], cksum 0xfe30 (incorrect -> 0x1a9d), seq 2523978814, win 32792, options [mss 16396,sackOK,TS val 245537399 ecr 0,nop,wscale 7], length 0
+ 2 12:04:12.420040 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
+ 127.0.0.1.33000 > 127.0.0.1.55358: Flags [S.], cksum 0xfe30 (incorrect -> 0x31b6), seq 3988083230, ack 2523978815, win 32768, options [mss 16396,sackOK,TS val 245537399 ecr 245537399,nop,wscale 7], length 0
+ 3 12:04:12.420054 IP (tos 0x0, ttl 64, id 17994, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.55358 > 127.0.0.1.33000: Flags [.], cksum 0xfe28 (incorrect -> 0x19da), ack 1, win 257, options [nop,nop,TS val 245537399 ecr 245537399], length 0
+ 4 12:04:12.420115 IP (tos 0x0, ttl 64, id 17995, offset 0, flags [DF], proto TCP (6), length 54)
+ 127.0.0.1.55358 > 127.0.0.1.33000: Flags [P.], cksum 0xfe2a (incorrect -> 0x18d0), seq 1:3, ack 1, win 257, options [nop,nop,TS val 245537399 ecr 245537399], length 2: ZMTP/1.0
+ frame flags+body (8-bit) length 1, flags 0x00 (-|-|-|-|-|-|-|-)
+ 5 12:04:12.420121 IP (tos 0x0, ttl 64, id 51304, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.33000 > 127.0.0.1.55358: Flags [.], cksum 0xfe28 (incorrect -> 0x19d9), ack 3, win 256, options [nop,nop,TS val 245537399 ecr 245537399], length 0
+ 6 12:04:12.420129 IP (tos 0x0, ttl 64, id 51305, offset 0, flags [DF], proto TCP (6), length 54)
+ 127.0.0.1.33000 > 127.0.0.1.55358: Flags [P.], cksum 0xfe2a (incorrect -> 0x18cf), seq 1:3, ack 3, win 256, options [nop,nop,TS val 245537399 ecr 245537399], length 2: ZMTP/1.0
+ frame flags+body (8-bit) length 1, flags 0x00 (-|-|-|-|-|-|-|-)
+ 7 12:04:12.420138 IP (tos 0x0, ttl 64, id 17996, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.55358 > 127.0.0.1.33000: Flags [.], cksum 0xfe28 (incorrect -> 0x19d6), ack 3, win 257, options [nop,nop,TS val 245537399 ecr 245537399], length 0
+ 8 12:04:12.420189 IP (tos 0x0, ttl 64, id 17997, offset 0, flags [DF], proto TCP (6), length 148)
+ 127.0.0.1.55358 > 127.0.0.1.33000: Flags [P.], cksum 0xfe88 (incorrect -> 0x11da), seq 3:99, ack 3, win 257, options [nop,nop,TS val 245537399 ecr 245537399], length 96: ZMTP/1.0
+ frame flags+body (8-bit) length 1, flags 0x01 (-|-|-|-|-|-|-|MORE)
+ frame flags+body (8-bit) length 93, flags 0x00 (-|-|-|-|-|-|-|-), first 92 byte(s) of body:
+ 0x0000: 5468 6973 2069 7320 6120 7368 6f72 7420 This.is.a.short.
+ 0x0010: 4153 4349 4920 6d65 7373 6167 6520 666f ASCII.message.fo
+ 0x0020: 6c6c 6f77 6564 2062 7920 6120 7368 6f72 llowed.by.a.shor
+ 0x0030: 7420 6269 6e61 7279 206d 6573 7361 6765 t.binary.message
+ 0x0040: 2061 6e64 2061 206c 6f6e 6765 7220 4153 .and.a.longer.AS
+ 0x0050: 4349 4920 6d65 7373 6167 652e CII.message.
+ 9 12:04:12.420352 IP (tos 0x0, ttl 64, id 51306, offset 0, flags [DF], proto TCP (6), length 84)
+ 127.0.0.1.33000 > 127.0.0.1.55358: Flags [P.], cksum 0xfe48 (incorrect -> 0xc80f), seq 3:35, ack 99, win 256, options [nop,nop,TS val 245537399 ecr 245537399], length 32: ZMTP/1.0
+ frame flags+body (8-bit) length 1, flags 0x01 (-|-|-|-|-|-|-|MORE)
+ frame flags+body (8-bit) length 29, flags 0x00 (-|-|-|-|-|-|-|-), first 28 byte(s) of body:
+ 0x0000: 5468 6973 2069 7320 6120 7368 6f72 7420 This.is.a.short.
+ 0x0010: 4153 4349 4920 7265 706c 792e ASCII.reply.
+ 10 12:04:12.420442 IP (tos 0x0, ttl 64, id 17998, offset 0, flags [DF], proto TCP (6), length 72)
+ 127.0.0.1.55358 > 127.0.0.1.33000: Flags [P.], cksum 0xfe3c (incorrect -> 0xcef8), seq 99:119, ack 35, win 257, options [nop,nop,TS val 245537399 ecr 245537399], length 20: ZMTP/1.0
+ frame flags+body (8-bit) length 1, flags 0x01 (-|-|-|-|-|-|-|MORE)
+ frame flags+body (8-bit) length 17, flags 0x00 (-|-|-|-|-|-|-|-), first 16 byte(s) of body:
+ 0x0000: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ................
+ 11 12:04:12.420526 IP (tos 0x0, ttl 64, id 51307, offset 0, flags [DF], proto TCP (6), length 84)
+ 127.0.0.1.33000 > 127.0.0.1.55358: Flags [P.], cksum 0xfe48 (incorrect -> 0xc7da), seq 35:67, ack 119, win 256, options [nop,nop,TS val 245537400 ecr 245537399], length 32: ZMTP/1.0
+ frame flags+body (8-bit) length 1, flags 0x01 (-|-|-|-|-|-|-|MORE)
+ frame flags+body (8-bit) length 29, flags 0x00 (-|-|-|-|-|-|-|-), first 28 byte(s) of body:
+ 0x0000: 5468 6973 2069 7320 6120 7368 6f72 7420 This.is.a.short.
+ 0x0010: 4153 4349 4920 7265 706c 792e ASCII.reply.
+ 12 12:04:12.420620 IP (tos 0x0, ttl 64, id 17999, offset 0, flags [DF], proto TCP (6), length 603)
+ 127.0.0.1.55358 > 127.0.0.1.33000: Flags [P.], cksum 0x0050 (incorrect -> 0xafc1), seq 119:670, ack 67, win 257, options [nop,nop,TS val 245537400 ecr 245537400], length 551: ZMTP/1.0
+ frame flags+body (8-bit) length 1, flags 0x01 (-|-|-|-|-|-|-|MORE)
+ frame flags+body (64-bit) length 540, flags 0x00 (-|-|-|-|-|-|-|-), first 128 byte(s) of body:
+ 0x0000: 5468 6520 7175 6963 6b20 6272 6f77 6e20 The.quick.brown.
+ 0x0010: 666f 7820 6a75 6d70 7320 6f76 6572 2074 fox.jumps.over.t
+ 0x0020: 6865 206c 617a 7920 646f 672e 2054 6865 he.lazy.dog..The
+ 0x0030: 2071 7569 636b 2062 726f 776e 2066 6f78 .quick.brown.fox
+ 0x0040: 206a 756d 7073 206f 7665 7220 7468 6520 .jumps.over.the.
+ 0x0050: 6c61 7a79 2064 6f67 2e20 5468 6520 7175 lazy.dog..The.qu
+ 0x0060: 6963 6b20 6272 6f77 6e20 666f 7820 6a75 ick.brown.fox.ju
+ 0x0070: 6d70 7320 6f76 6572 2074 6865 206c 617a mps.over.the.laz
+ 13 12:04:12.420759 IP (tos 0x0, ttl 64, id 51308, offset 0, flags [DF], proto TCP (6), length 84)
+ 127.0.0.1.33000 > 127.0.0.1.55358: Flags [P.], cksum 0xfe48 (incorrect -> 0xc592), seq 67:99, ack 670, win 256, options [nop,nop,TS val 245537400 ecr 245537400], length 32: ZMTP/1.0
+ frame flags+body (8-bit) length 1, flags 0x01 (-|-|-|-|-|-|-|MORE)
+ frame flags+body (8-bit) length 29, flags 0x00 (-|-|-|-|-|-|-|-), first 28 byte(s) of body:
+ 0x0000: 5468 6973 2069 7320 6120 7368 6f72 7420 This.is.a.short.
+ 0x0010: 4153 4349 4920 7265 706c 792e ASCII.reply.
+ 14 12:04:12.420972 IP (tos 0x0, ttl 64, id 18000, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.55358 > 127.0.0.1.33000: Flags [F.], cksum 0xfe28 (incorrect -> 0x16d8), seq 670, ack 99, win 257, options [nop,nop,TS val 245537400 ecr 245537400], length 0
+ 15 12:04:12.421071 IP (tos 0x0, ttl 64, id 51309, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.33000 > 127.0.0.1.55358: Flags [F.], cksum 0xfe28 (incorrect -> 0x16d8), seq 99, ack 671, win 256, options [nop,nop,TS val 245537400 ecr 245537400], length 0
+ 16 12:04:12.421087 IP (tos 0x0, ttl 64, id 18001, offset 0, flags [DF], proto TCP (6), length 52)
+ 127.0.0.1.55358 > 127.0.0.1.33000: Flags [.], cksum 0xfe28 (incorrect -> 0x16d7), ack 100, win 257, options [nop,nop,TS val 245537400 ecr 245537400], length 0
diff --git a/tests/zmtp1.pcap b/tests/zmtp1.pcap
new file mode 100644
index 0000000..55aebea
--- /dev/null
+++ b/tests/zmtp1.pcap
Binary files differ
diff --git a/timeval-operations.h b/timeval-operations.h
new file mode 100644
index 0000000..177027d
--- /dev/null
+++ b/timeval-operations.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2015 The TCPDUMP project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef netdissect_timeval_operations_h
+#define netdissect_timeval_operations_h
+
+/* Operations on timevals. */
+
+#define ND_MICRO_PER_SEC 1000000
+#define ND_NANO_PER_SEC 1000000000
+
+#define netdissect_timevalclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
+
+#define netdissect_timevalisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
+
+#define netdissect_timevalcmp(tvp, uvp, cmp) \
+ (((tvp)->tv_sec == (uvp)->tv_sec) ? \
+ ((tvp)->tv_usec cmp (uvp)->tv_usec) : \
+ ((tvp)->tv_sec cmp (uvp)->tv_sec))
+
+#define netdissect_timevaladd(tvp, uvp, vvp, nano_prec) \
+ do { \
+ (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \
+ (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \
+ if (nano_prec) { \
+ if ((vvp)->tv_usec >= ND_NANO_PER_SEC) { \
+ (vvp)->tv_sec++; \
+ (vvp)->tv_usec -= ND_NANO_PER_SEC; \
+ } \
+ } else { \
+ if ((vvp)->tv_usec >= ND_MICRO_PER_SEC) { \
+ (vvp)->tv_sec++; \
+ (vvp)->tv_usec -= ND_MICRO_PER_SEC; \
+ } \
+ } \
+ } while (0)
+
+#define netdissect_timevalsub(tvp, uvp, vvp, nano_prec) \
+ do { \
+ (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
+ (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
+ if ((vvp)->tv_usec < 0) { \
+ (vvp)->tv_sec--; \
+ (vvp)->tv_usec += (nano_prec ? ND_NANO_PER_SEC : \
+ ND_MICRO_PER_SEC); \
+ } \
+ } while (0)
+
+#endif /* netdissect_timeval_operations_h */
diff --git a/udp.h b/udp.h
new file mode 100644
index 0000000..e714180
--- /dev/null
+++ b/udp.h
@@ -0,0 +1,250 @@
+/*
+ * Copyright (c) 1982, 1986, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)udp.h 8.1 (Berkeley) 6/10/93
+ */
+
+/*
+ * Udp protocol header.
+ * Per RFC 768, September, 1981.
+ */
+struct udphdr {
+ nd_uint16_t uh_sport; /* source port */
+ nd_uint16_t uh_dport; /* destination port */
+ nd_uint16_t uh_ulen; /* udp length */
+ nd_uint16_t uh_sum; /* udp checksum */
+};
+
+#ifndef NAMESERVER_PORT
+#define NAMESERVER_PORT 53
+#endif
+#ifndef BOOTPS_PORT
+#define BOOTPS_PORT 67 /* RFC951 */
+#endif
+#ifndef BOOTPC_PORT
+#define BOOTPC_PORT 68 /* RFC951 */
+#endif
+#ifndef TFTP_PORT
+#define TFTP_PORT 69 /*XXX*/
+#endif
+#ifndef KERBEROS_PORT
+#define KERBEROS_PORT 88 /*XXX*/
+#endif
+#ifndef SUNRPC_PORT
+#define SUNRPC_PORT 111 /*XXX*/
+#endif
+#ifndef NTP_PORT
+#define NTP_PORT 123 /*XXX*/
+#endif
+#ifndef NETBIOS_NS_PORT
+#define NETBIOS_NS_PORT 137 /* RFC 1001, RFC 1002 */
+#endif
+#ifndef NETBIOS_DGRAM_PORT
+#define NETBIOS_DGRAM_PORT 138 /* RFC 1001, RFC 1002 */
+#endif
+#ifndef SNMP_PORT
+#define SNMP_PORT 161 /*XXX*/
+#endif
+#ifndef SNMPTRAP_PORT
+#define SNMPTRAP_PORT 162 /*XXX*/
+#endif
+#ifndef PTP_EVENT_PORT
+#define PTP_EVENT_PORT 319 /* IANA */
+#endif
+#ifndef PTP_GENERAL_PORT
+#define PTP_GENERAL_PORT 320 /* IANA */
+#endif
+#ifndef CISCO_AUTORP_PORT
+#define CISCO_AUTORP_PORT 496 /*XXX*/
+#endif
+#ifndef ISAKMP_PORT
+#define ISAKMP_PORT 500 /*XXX*/
+#endif
+#ifndef SYSLOG_PORT
+#define SYSLOG_PORT 514 /* rfc3164 */
+#endif
+#ifndef RIP_PORT
+#define RIP_PORT 520 /*XXX*/
+#endif
+#ifndef RIPNG_PORT
+#define RIPNG_PORT 521 /* RFC 2080 */
+#endif
+#ifndef TIMED_PORT
+#define TIMED_PORT 525 /*XXX*/
+#endif
+#ifndef DHCP6_SERV_PORT
+#define DHCP6_SERV_PORT 546 /*XXX*/
+#endif
+#ifndef DHCP6_CLI_PORT
+#define DHCP6_CLI_PORT 547 /*XXX*/
+#endif
+#ifndef LDP_PORT
+#define LDP_PORT 646
+#endif
+#ifndef AQDV_PORT
+#define AODV_PORT 654 /*XXX*/
+#endif
+#ifndef OLSR_PORT
+#define OLSR_PORT 698 /* rfc3626 */
+#endif
+#ifndef LMP_PORT
+#define LMP_PORT 701 /* rfc4204 */
+#endif
+#ifndef KERBEROS_SEC_PORT
+#define KERBEROS_SEC_PORT 750 /*XXX - Kerberos v4 */
+#endif
+#ifndef LWRES_PORT
+#define LWRES_PORT 921 /*XXX*/
+#endif
+#ifndef VQP_PORT
+#define VQP_PORT 1589 /*XXX*/
+#endif
+#ifndef RADIUS_PORT
+#define RADIUS_PORT 1645 /*XXX*/
+#endif
+#ifndef RADIUS_ACCOUNTING_PORT
+#define RADIUS_ACCOUNTING_PORT 1646
+#endif
+#ifndef RADIUS_CISCO_COA_PORT
+#define RADIUS_CISCO_COA_PORT 1700
+#endif
+#ifndef L2TP_PORT
+#define L2TP_PORT 1701 /*XXX*/
+#endif
+#ifndef RADIUS_NEW_PORT
+#define RADIUS_NEW_PORT 1812 /*XXX*/
+#endif
+#ifndef RADIUS_NEW_ACCOUNTING_PORT
+#define RADIUS_NEW_ACCOUNTING_PORT 1813
+#endif
+#ifndef HSRP_PORT
+#define HSRP_PORT 1985 /*XXX*/
+#endif
+#ifndef ZEPHYR_SRV_PORT
+#define ZEPHYR_SRV_PORT 2103 /*XXX*/
+#endif
+#ifndef ZEPHYR_CLI_PORT
+#define ZEPHYR_CLT_PORT 2104 /*XXX*/
+#endif
+#ifndef VAT_PORT
+#define VAT_PORT 3456 /*XXX*/
+#endif
+#ifndef MPLS_LSP_PING_PORT
+#define MPLS_LSP_PING_PORT 3503 /* draft-ietf-mpls-lsp-ping-02.txt */
+#endif
+#ifndef BCM_LI_PORT
+#define BCM_LI_PORT 49152 /* SDK default */
+#endif
+#ifndef BFD_CONTROL_PORT
+#define BFD_CONTROL_PORT 3784 /* RFC 5881 */
+#endif
+#ifndef BFD_ECHO_PORT
+#define BFD_ECHO_PORT 3785 /* RFC 5881 */
+#endif
+#ifndef RADIUS_COA_PORT
+#define RADIUS_COA_PORT 3799 /* RFC 5176 */
+#endif
+#ifndef LISP_CONTROL_PORT
+#define LISP_CONTROL_PORT 4342 /* RFC 6830 */
+#endif
+#ifndef ISAKMP_PORT_NATT
+#define ISAKMP_PORT_NATT 4500 /* rfc3948 */
+#endif
+#ifndef WB_PORT
+#define WB_PORT 4567
+#endif
+#ifndef BFD_MULTIHOP_PORT
+#define BFD_MULTIHOP_PORT 4784 /* RFC 5883 */
+#endif
+#ifndef VXLAN_PORT
+#define VXLAN_PORT 4789 /* RFC 7348 */
+#endif
+#ifndef VXLAN_GPE_PORT
+#define VXLAN_GPE_PORT 4790 /* draft-ietf-nvo3-vxlan-gpe-01 */
+#endif
+#ifndef SIP_PORT
+#define SIP_PORT 5060
+#endif
+#ifndef MULTICASTDNS_PORT
+#define MULTICASTDNS_PORT 5353 /* RFC 6762 */
+#endif
+#ifndef AHCP_PORT
+#define AHCP_PORT 5359 /* draft-chroboczek-ahcp-00 */
+#endif
+#ifndef GENEVE_PORT
+#define GENEVE_PORT 6081 /* draft-gross-geneve-02 */
+#endif
+#ifndef SFLOW_PORT
+#define SFLOW_PORT 6343 /* https://sflow.org/developers/specifications.php */
+#endif
+#ifndef MPLS_PORT
+#define MPLS_PORT 6635 /* RFC 7510 */
+#endif
+#ifndef BABEL_PORT
+#define BABEL_PORT 6696 /* RFC 6126 errata */
+#endif
+#ifndef BABEL_PORT_OLD
+#define BABEL_PORT_OLD 6697 /* RFC 6126 */
+#endif
+#ifndef BFD_LAG_PORT
+#define BFD_LAG_PORT 6784 /* RFC 7310 */
+#endif
+#ifndef RX_PORT_LOW
+#define RX_PORT_LOW 7000 /*XXX*/
+#endif
+#ifndef RX_PORT_HIGH
+#define RX_PORT_HIGH 7009 /*XXX*/
+#endif
+#ifndef ISAKMP_PORT_USER1
+#define ISAKMP_PORT_USER1 7500 /*XXX - nonstandard*/
+#endif
+#ifndef HNCP_PORT
+#define HNCP_PORT 8231 /* RFC 7788 */
+#endif
+#ifndef OTV_PORT
+#define OTV_PORT 8472 /* draft-hasmit-otv-04 */
+#endif
+#ifndef ISAKMP_PORT_USER2
+#define ISAKMP_PORT_USER2 8500 /*XXX - nonstandard*/
+#endif
+#ifndef LWAPP_DATA_PORT
+#define LWAPP_DATA_PORT 12222 /* RFC 5412 */
+#endif
+#ifndef LWAPP_CONTROL_PORT
+#define LWAPP_CONTROL_PORT 12223 /* RFC 5412 */
+#endif
+#ifndef ZEP_PORT
+#define ZEP_PORT 17754 /* XXX */
+#endif
+#ifndef SOMEIP_PORT
+#define SOMEIP_PORT 30490 /* https://www.autosar.org/standards/foundation */
+#endif
diff --git a/util-print.c b/util-print.c
new file mode 100644
index 0000000..0548337
--- /dev/null
+++ b/util-print.c
@@ -0,0 +1,979 @@
+/*
+ * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/*
+ * txtproto_print() derived from original code by Hannes Gredler
+ * (hannes@gredler.at):
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "netdissect-stdinc.h"
+
+#include <sys/stat.h>
+
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "netdissect-ctype.h"
+
+#include "netdissect.h"
+#include "extract.h"
+#include "ascii_strcasecmp.h"
+#include "timeval-operations.h"
+
+#define TOKBUFSIZE 128
+
+enum date_flag { WITHOUT_DATE = 0, WITH_DATE = 1 };
+enum time_flag { UTC_TIME = 0, LOCAL_TIME = 1 };
+
+/*
+ * Print out a character, filtering out the non-printable ones
+ */
+void
+fn_print_char(netdissect_options *ndo, u_char c)
+{
+ if (!ND_ISASCII(c)) {
+ c = ND_TOASCII(c);
+ ND_PRINT("M-");
+ }
+ if (!ND_ASCII_ISPRINT(c)) {
+ c ^= 0x40; /* DEL to ?, others to alpha */
+ ND_PRINT("^");
+ }
+ ND_PRINT("%c", c);
+}
+
+/*
+ * Print a null-terminated string, filtering out non-printable characters.
+ * DON'T USE IT with a pointer on the packet buffer because there is no
+ * truncation check. For this use, see the nd_printX() functions below.
+ */
+void
+fn_print_str(netdissect_options *ndo, const u_char *s)
+{
+ while (*s != '\0') {
+ fn_print_char(ndo, *s);
+ s++;
+ }
+}
+
+/*
+ * Print out a null-terminated filename (or other ASCII string) from
+ * a fixed-length field in the packet buffer, or from what remains of
+ * the packet.
+ *
+ * n is the length of the fixed-length field, or the number of bytes
+ * remaining in the packet based on its on-the-network length.
+ *
+ * If ep is non-null, it should point just past the last captured byte
+ * of the packet, e.g. ndo->ndo_snapend. If ep is NULL, we assume no
+ * truncation check, other than the checks of the field length/remaining
+ * packet data length, is needed.
+ *
+ * Return the number of bytes of string processed, including the
+ * terminating null, if not truncated; as the terminating null is
+ * included in the count, and as there must be a terminating null,
+ * this will always be non-zero. Return 0 if truncated.
+ */
+u_int
+nd_printztn(netdissect_options *ndo,
+ const u_char *s, u_int n, const u_char *ep)
+{
+ u_int bytes;
+ u_char c;
+
+ bytes = 0;
+ for (;;) {
+ if (n == 0 || (ep != NULL && s >= ep)) {
+ /*
+ * Truncated. This includes "no null before we
+ * got to the end of the fixed-length buffer or
+ * the end of the packet".
+ *
+ * XXX - BOOTP says "null-terminated", which
+ * means the maximum length of the string, in
+ * bytes, is 1 less than the size of the buffer,
+ * as there must always be a terminating null.
+ */
+ bytes = 0;
+ break;
+ }
+
+ c = GET_U_1(s);
+ s++;
+ bytes++;
+ n--;
+ if (c == '\0') {
+ /* End of string */
+ break;
+ }
+ fn_print_char(ndo, c);
+ }
+ return(bytes);
+}
+
+/*
+ * Print out a counted filename (or other ASCII string), part of
+ * the packet buffer.
+ * If ep is NULL, assume no truncation check is needed.
+ * Return true if truncated.
+ * Stop at ep (if given) or after n bytes, whichever is first.
+ */
+int
+nd_printn(netdissect_options *ndo,
+ const u_char *s, u_int n, const u_char *ep)
+{
+ u_char c;
+
+ while (n > 0 && (ep == NULL || s < ep)) {
+ n--;
+ c = GET_U_1(s);
+ s++;
+ fn_print_char(ndo, c);
+ }
+ return (n == 0) ? 0 : 1;
+}
+
+/*
+ * Print a null-padded filename (or other ASCII string), part of
+ * the packet buffer, filtering out non-printable characters.
+ * Stop if truncated (via GET_U_1/longjmp) or after n bytes or before
+ * the null char, whichever occurs first.
+ * The suffix comes from: j:longJmp, n:after N bytes, p:null-Padded.
+ */
+void
+nd_printjnp(netdissect_options *ndo, const u_char *s, u_int n)
+{
+ u_char c;
+
+ while (n > 0) {
+ c = GET_U_1(s);
+ if (c == '\0')
+ break;
+ fn_print_char(ndo, c);
+ n--;
+ s++;
+ }
+}
+
+/*
+ * Print the timestamp .FRAC part (Microseconds/nanoseconds)
+ */
+static void
+ts_frac_print(netdissect_options *ndo, long usec)
+{
+#ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
+ switch (ndo->ndo_tstamp_precision) {
+
+ case PCAP_TSTAMP_PRECISION_MICRO:
+ ND_PRINT(".%06u", (unsigned)usec);
+ break;
+
+ case PCAP_TSTAMP_PRECISION_NANO:
+ ND_PRINT(".%09u", (unsigned)usec);
+ break;
+
+ default:
+ ND_PRINT(".{unknown}");
+ break;
+ }
+#else
+ ND_PRINT(".%06u", (unsigned)usec);
+#endif
+}
+
+/*
+ * Print the timestamp as [YY:MM:DD] HH:MM:SS.FRAC.
+ * if time_flag == LOCAL_TIME print local time else UTC/GMT time
+ * if date_flag == WITH_DATE print YY:MM:DD before HH:MM:SS.FRAC
+ */
+static void
+ts_date_hmsfrac_print(netdissect_options *ndo, long sec, long usec,
+ enum date_flag date_flag, enum time_flag time_flag)
+{
+ time_t Time = sec;
+ struct tm *tm;
+ char timebuf[32];
+ const char *timestr;
+
+ if ((unsigned)sec & 0x80000000) {
+ ND_PRINT("[Error converting time]");
+ return;
+ }
+
+ if (time_flag == LOCAL_TIME)
+ tm = localtime(&Time);
+ else
+ tm = gmtime(&Time);
+
+ if (date_flag == WITH_DATE) {
+ timestr = nd_format_time(timebuf, sizeof(timebuf),
+ "%Y-%m-%d %H:%M:%S", tm);
+ } else {
+ timestr = nd_format_time(timebuf, sizeof(timebuf),
+ "%H:%M:%S", tm);
+ }
+ ND_PRINT("%s", timestr);
+
+ ts_frac_print(ndo, usec);
+}
+
+/*
+ * Print the timestamp - Unix timeval style, as SECS.FRAC.
+ */
+static void
+ts_unix_print(netdissect_options *ndo, long sec, long usec)
+{
+ if ((unsigned)sec & 0x80000000) {
+ ND_PRINT("[Error converting time]");
+ return;
+ }
+
+ ND_PRINT("%u", (unsigned)sec);
+ ts_frac_print(ndo, usec);
+}
+
+/*
+ * Print the timestamp
+ */
+void
+ts_print(netdissect_options *ndo,
+ const struct timeval *tvp)
+{
+ static struct timeval tv_ref;
+ struct timeval tv_result;
+ int negative_offset;
+ int nano_prec;
+
+ switch (ndo->ndo_tflag) {
+
+ case 0: /* Default */
+ ts_date_hmsfrac_print(ndo, tvp->tv_sec, tvp->tv_usec,
+ WITHOUT_DATE, LOCAL_TIME);
+ ND_PRINT(" ");
+ break;
+
+ case 1: /* No time stamp */
+ break;
+
+ case 2: /* Unix timeval style */
+ ts_unix_print(ndo, tvp->tv_sec, tvp->tv_usec);
+ ND_PRINT(" ");
+ break;
+
+ case 3: /* Microseconds/nanoseconds since previous packet */
+ case 5: /* Microseconds/nanoseconds since first packet */
+#ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
+ switch (ndo->ndo_tstamp_precision) {
+ case PCAP_TSTAMP_PRECISION_MICRO:
+ nano_prec = 0;
+ break;
+ case PCAP_TSTAMP_PRECISION_NANO:
+ nano_prec = 1;
+ break;
+ default:
+ nano_prec = 0;
+ break;
+ }
+#else
+ nano_prec = 0;
+#endif
+ if (!(netdissect_timevalisset(&tv_ref)))
+ tv_ref = *tvp; /* set timestamp for first packet */
+
+ negative_offset = netdissect_timevalcmp(tvp, &tv_ref, <);
+ if (negative_offset)
+ netdissect_timevalsub(&tv_ref, tvp, &tv_result, nano_prec);
+ else
+ netdissect_timevalsub(tvp, &tv_ref, &tv_result, nano_prec);
+
+ ND_PRINT((negative_offset ? "-" : " "));
+ ts_date_hmsfrac_print(ndo, tv_result.tv_sec, tv_result.tv_usec,
+ WITHOUT_DATE, UTC_TIME);
+ ND_PRINT(" ");
+
+ if (ndo->ndo_tflag == 3)
+ tv_ref = *tvp; /* set timestamp for previous packet */
+ break;
+
+ case 4: /* Date + Default */
+ ts_date_hmsfrac_print(ndo, tvp->tv_sec, tvp->tv_usec,
+ WITH_DATE, LOCAL_TIME);
+ ND_PRINT(" ");
+ break;
+ }
+}
+
+/*
+ * Print an unsigned relative number of seconds (e.g. hold time, prune timer)
+ * in the form 5m1s. This does no truncation, so 32230861 seconds
+ * is represented as 1y1w1d1h1m1s.
+ */
+void
+unsigned_relts_print(netdissect_options *ndo,
+ uint32_t secs)
+{
+ static const char *lengths[] = {"y", "w", "d", "h", "m", "s"};
+ static const u_int seconds[] = {31536000, 604800, 86400, 3600, 60, 1};
+ const char **l = lengths;
+ const u_int *s = seconds;
+
+ if (secs == 0) {
+ ND_PRINT("0s");
+ return;
+ }
+ while (secs > 0) {
+ if (secs >= *s) {
+ ND_PRINT("%u%s", secs / *s, *l);
+ secs -= (secs / *s) * *s;
+ }
+ s++;
+ l++;
+ }
+}
+
+/*
+ * Print a signed relative number of seconds (e.g. hold time, prune timer)
+ * in the form 5m1s. This does no truncation, so 32230861 seconds
+ * is represented as 1y1w1d1h1m1s.
+ */
+void
+signed_relts_print(netdissect_options *ndo,
+ int32_t secs)
+{
+ if (secs < 0) {
+ ND_PRINT("-");
+ if (secs == INT32_MIN) {
+ /*
+ * -2^31; you can't fit its absolute value into
+ * a 32-bit signed integer.
+ *
+ * Just directly pass said absolute value to
+ * unsigned_relts_print() directly.
+ *
+ * (XXX - does ISO C guarantee that -(-2^n),
+ * when calculated and cast to an n-bit unsigned
+ * integer type, will have the value 2^n?)
+ */
+ unsigned_relts_print(ndo, 2147483648U);
+ } else {
+ /*
+ * We now know -secs will fit into an int32_t;
+ * negate it and pass that to unsigned_relts_print().
+ */
+ unsigned_relts_print(ndo, -secs);
+ }
+ return;
+ }
+ unsigned_relts_print(ndo, secs);
+}
+
+/*
+ * Format a struct tm with strftime().
+ * If the pointer to the struct tm is null, that means that the
+ * routine to convert a time_t to a struct tm failed; the localtime()
+ * and gmtime() in the Microsoft Visual Studio C library will fail,
+ * returning null, if the value is before the UNIX Epoch.
+ */
+const char *
+nd_format_time(char *buf, size_t bufsize, const char *format,
+ const struct tm *timeptr)
+{
+ if (timeptr != NULL) {
+ if (strftime(buf, bufsize, format, timeptr) != 0)
+ return (buf);
+ else
+ return ("[nd_format_time() buffer is too small]");
+ } else
+ return ("[localtime() or gmtime() couldn't convert the date and time]");
+}
+
+/* Print the truncated string */
+void nd_print_trunc(netdissect_options *ndo)
+{
+ ND_PRINT(" [|%s]", ndo->ndo_protocol);
+}
+
+/* Print the protocol name */
+void nd_print_protocol(netdissect_options *ndo)
+{
+ ND_PRINT("%s", ndo->ndo_protocol);
+}
+
+/* Print the protocol name in caps (uppercases) */
+void nd_print_protocol_caps(netdissect_options *ndo)
+{
+ const char *p;
+ for (p = ndo->ndo_protocol; *p != '\0'; p++)
+ ND_PRINT("%c", ND_ASCII_TOUPPER(*p));
+}
+
+/* Print the invalid string */
+void nd_print_invalid(netdissect_options *ndo)
+{
+ ND_PRINT(" (invalid)");
+}
+
+/*
+ * this is a generic routine for printing unknown data;
+ * we pass on the linefeed plus indentation string to
+ * get a proper output - returns 0 on error
+ */
+
+int
+print_unknown_data(netdissect_options *ndo, const u_char *cp,
+ const char *ident, u_int len)
+{
+ u_int len_to_print;
+
+ len_to_print = len;
+ if (!ND_TTEST_LEN(cp, 0)) {
+ ND_PRINT("%sDissector error: print_unknown_data called with pointer past end of packet",
+ ident);
+ return(0);
+ }
+ if (ND_BYTES_AVAILABLE_AFTER(cp) < len_to_print)
+ len_to_print = ND_BYTES_AVAILABLE_AFTER(cp);
+ hex_print(ndo, ident, cp, len_to_print);
+ return(1); /* everything is ok */
+}
+
+/*
+ * Convert a token value to a string; use "fmt" if not found.
+ */
+static const char *
+tok2strbuf(const struct tok *lp, const char *fmt,
+ u_int v, char *buf, size_t bufsize)
+{
+ if (lp != NULL) {
+ while (lp->s != NULL) {
+ if (lp->v == v)
+ return (lp->s);
+ ++lp;
+ }
+ }
+ if (fmt == NULL)
+ fmt = "#%d";
+
+ (void)snprintf(buf, bufsize, fmt, v);
+ return (const char *)buf;
+}
+
+/*
+ * Convert a token value to a string; use "fmt" if not found.
+ * Uses tok2strbuf() on one of four local static buffers of size TOKBUFSIZE
+ * in round-robin fashion.
+ */
+const char *
+tok2str(const struct tok *lp, const char *fmt,
+ u_int v)
+{
+ static char buf[4][TOKBUFSIZE];
+ static int idx = 0;
+ char *ret;
+
+ ret = buf[idx];
+ idx = (idx+1) & 3;
+ return tok2strbuf(lp, fmt, v, ret, sizeof(buf[0]));
+}
+
+/*
+ * Convert a bit token value to a string; use "fmt" if not found.
+ * this is useful for parsing bitfields, the output strings are separated
+ * if the s field is positive.
+ *
+ * A token matches iff it has one or more bits set and every bit that is set
+ * in the token is set in v. Consequently, a 0 token never matches.
+ */
+static char *
+bittok2str_internal(const struct tok *lp, const char *fmt,
+ u_int v, const char *sep)
+{
+ static char buf[1024+1]; /* our string buffer */
+ char *bufp = buf;
+ size_t space_left = sizeof(buf), string_size;
+ const char * sepstr = "";
+
+ while (lp != NULL && lp->s != NULL) {
+ if (lp->v && (v & lp->v) == lp->v) {
+ /* ok we have found something */
+ if (space_left <= 1)
+ return (buf); /* only enough room left for NUL, if that */
+ string_size = strlcpy(bufp, sepstr, space_left);
+ if (string_size >= space_left)
+ return (buf); /* we ran out of room */
+ bufp += string_size;
+ space_left -= string_size;
+ if (space_left <= 1)
+ return (buf); /* only enough room left for NUL, if that */
+ string_size = strlcpy(bufp, lp->s, space_left);
+ if (string_size >= space_left)
+ return (buf); /* we ran out of room */
+ bufp += string_size;
+ space_left -= string_size;
+ sepstr = sep;
+ }
+ lp++;
+ }
+
+ if (bufp == buf)
+ /* bummer - lets print the "unknown" message as advised in the fmt string if we got one */
+ (void)snprintf(buf, sizeof(buf), fmt == NULL ? "#%08x" : fmt, v);
+ return (buf);
+}
+
+/*
+ * Convert a bit token value to a string; use "fmt" if not found.
+ * this is useful for parsing bitfields, the output strings are not separated.
+ */
+char *
+bittok2str_nosep(const struct tok *lp, const char *fmt,
+ u_int v)
+{
+ return (bittok2str_internal(lp, fmt, v, ""));
+}
+
+/*
+ * Convert a bit token value to a string; use "fmt" if not found.
+ * this is useful for parsing bitfields, the output strings are comma separated.
+ */
+char *
+bittok2str(const struct tok *lp, const char *fmt,
+ u_int v)
+{
+ return (bittok2str_internal(lp, fmt, v, ", "));
+}
+
+/*
+ * Convert a value to a string using an array; the macro
+ * tok2strary() in <netdissect.h> is the public interface to
+ * this function and ensures that the second argument is
+ * correct for bounds-checking.
+ */
+const char *
+tok2strary_internal(const char **lp, int n, const char *fmt,
+ int v)
+{
+ static char buf[TOKBUFSIZE];
+
+ if (v >= 0 && v < n && lp[v] != NULL)
+ return lp[v];
+ if (fmt == NULL)
+ fmt = "#%d";
+ (void)snprintf(buf, sizeof(buf), fmt, v);
+ return (buf);
+}
+
+const struct tok *
+uint2tokary_internal(const struct uint_tokary dict[], const size_t size,
+ const u_int val)
+{
+ size_t i;
+ /* Try a direct lookup before the full scan. */
+ if (val < size && dict[val].uintval == val)
+ return dict[val].tokary; /* OK if NULL */
+ for (i = 0; i < size; i++)
+ if (dict[i].uintval == val)
+ return dict[i].tokary; /* OK if NULL */
+ return NULL;
+}
+
+/*
+ * Convert a 32-bit netmask to prefixlen if possible
+ * the function returns the prefix-len; if plen == -1
+ * then conversion was not possible;
+ */
+
+int
+mask2plen(uint32_t mask)
+{
+ const uint32_t bitmasks[33] = {
+ 0x00000000,
+ 0x80000000, 0xc0000000, 0xe0000000, 0xf0000000,
+ 0xf8000000, 0xfc000000, 0xfe000000, 0xff000000,
+ 0xff800000, 0xffc00000, 0xffe00000, 0xfff00000,
+ 0xfff80000, 0xfffc0000, 0xfffe0000, 0xffff0000,
+ 0xffff8000, 0xffffc000, 0xffffe000, 0xfffff000,
+ 0xfffff800, 0xfffffc00, 0xfffffe00, 0xffffff00,
+ 0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0,
+ 0xfffffff8, 0xfffffffc, 0xfffffffe, 0xffffffff
+ };
+ int prefix_len = 32;
+
+ /* let's see if we can transform the mask into a prefixlen */
+ while (prefix_len >= 0) {
+ if (bitmasks[prefix_len] == mask)
+ break;
+ prefix_len--;
+ }
+ return (prefix_len);
+}
+
+int
+mask62plen(const u_char *mask)
+{
+ u_char bitmasks[9] = {
+ 0x00,
+ 0x80, 0xc0, 0xe0, 0xf0,
+ 0xf8, 0xfc, 0xfe, 0xff
+ };
+ int byte;
+ int cidr_len = 0;
+
+ for (byte = 0; byte < 16; byte++) {
+ u_int bits;
+
+ for (bits = 0; bits < (sizeof (bitmasks) / sizeof (bitmasks[0])); bits++) {
+ if (mask[byte] == bitmasks[bits]) {
+ cidr_len += bits;
+ break;
+ }
+ }
+
+ if (mask[byte] != 0xff)
+ break;
+ }
+ return (cidr_len);
+}
+
+/*
+ * Routine to print out information for text-based protocols such as FTP,
+ * HTTP, SMTP, RTSP, SIP, ....
+ */
+#define MAX_TOKEN 128
+
+/*
+ * Fetch a token from a packet, starting at the specified index,
+ * and return the length of the token.
+ *
+ * Returns 0 on error; yes, this is indistinguishable from an empty
+ * token, but an "empty token" isn't a valid token - it just means
+ * either a space character at the beginning of the line (this
+ * includes a blank line) or no more tokens remaining on the line.
+ */
+static int
+fetch_token(netdissect_options *ndo, const u_char *pptr, u_int idx, u_int len,
+ u_char *tbuf, size_t tbuflen)
+{
+ size_t toklen = 0;
+ u_char c;
+
+ for (; idx < len; idx++) {
+ if (!ND_TTEST_1(pptr + idx)) {
+ /* ran past end of captured data */
+ return (0);
+ }
+ c = GET_U_1(pptr + idx);
+ if (!ND_ISASCII(c)) {
+ /* not an ASCII character */
+ return (0);
+ }
+ if (c == ' ' || c == '\t' || c == '\r' || c == '\n') {
+ /* end of token */
+ break;
+ }
+ if (!ND_ASCII_ISPRINT(c)) {
+ /* not part of a command token or response code */
+ return (0);
+ }
+ if (toklen + 2 > tbuflen) {
+ /* no room for this character and terminating '\0' */
+ return (0);
+ }
+ tbuf[toklen] = c;
+ toklen++;
+ }
+ if (toklen == 0) {
+ /* no token */
+ return (0);
+ }
+ tbuf[toklen] = '\0';
+
+ /*
+ * Skip past any white space after the token, until we see
+ * an end-of-line (CR or LF).
+ */
+ for (; idx < len; idx++) {
+ if (!ND_TTEST_1(pptr + idx)) {
+ /* ran past end of captured data */
+ break;
+ }
+ c = GET_U_1(pptr + idx);
+ if (c == '\r' || c == '\n') {
+ /* end of line */
+ break;
+ }
+ if (!ND_ASCII_ISPRINT(c)) {
+ /* not a printable ASCII character */
+ break;
+ }
+ if (c != ' ' && c != '\t' && c != '\r' && c != '\n') {
+ /* beginning of next token */
+ break;
+ }
+ }
+ return (idx);
+}
+
+/*
+ * Scan a buffer looking for a line ending - LF or CR-LF.
+ * Return the index of the character after the line ending or 0 if
+ * we encounter a non-ASCII or non-printable character or don't find
+ * the line ending.
+ */
+static u_int
+print_txt_line(netdissect_options *ndo, const char *prefix,
+ const u_char *pptr, u_int idx, u_int len)
+{
+ u_int startidx;
+ u_int linelen;
+ u_char c;
+
+ startidx = idx;
+ while (idx < len) {
+ c = GET_U_1(pptr + idx);
+ if (c == '\n') {
+ /*
+ * LF without CR; end of line.
+ * Skip the LF and print the line, with the
+ * exception of the LF.
+ */
+ linelen = idx - startidx;
+ idx++;
+ goto print;
+ } else if (c == '\r') {
+ /* CR - any LF? */
+ if ((idx+1) >= len) {
+ /* not in this packet */
+ return (0);
+ }
+ if (GET_U_1(pptr + idx + 1) == '\n') {
+ /*
+ * CR-LF; end of line.
+ * Skip the CR-LF and print the line, with
+ * the exception of the CR-LF.
+ */
+ linelen = idx - startidx;
+ idx += 2;
+ goto print;
+ }
+
+ /*
+ * CR followed by something else; treat this
+ * as if it were binary data, and don't print
+ * it.
+ */
+ return (0);
+ } else if (!ND_ASCII_ISPRINT(c) && c != '\t') {
+ /*
+ * Not a printable ASCII character and not a tab;
+ * treat this as if it were binary data, and
+ * don't print it.
+ */
+ return (0);
+ }
+ idx++;
+ }
+
+ /*
+ * All printable ASCII, but no line ending after that point
+ * in the buffer; treat this as if it were truncated.
+ */
+ linelen = idx - startidx;
+ ND_PRINT("%s%.*s", prefix, (int)linelen, pptr + startidx);
+ nd_print_trunc(ndo);
+ return (0);
+
+print:
+ ND_PRINT("%s%.*s", prefix, (int)linelen, pptr + startidx);
+ return (idx);
+}
+
+/* Assign needed before calling txtproto_print(): ndo->ndo_protocol = "proto" */
+void
+txtproto_print(netdissect_options *ndo, const u_char *pptr, u_int len,
+ const char **cmds, u_int flags)
+{
+ u_int idx, eol;
+ u_char token[MAX_TOKEN+1];
+ const char *cmd;
+ int print_this = 0;
+
+ if (cmds != NULL) {
+ /*
+ * This protocol has more than just request and
+ * response lines; see whether this looks like a
+ * request or response and, if so, print it and,
+ * in verbose mode, print everything after it.
+ *
+ * This is for HTTP-like protocols, where we
+ * want to print requests and responses, but
+ * don't want to print continuations of request
+ * or response bodies in packets that don't
+ * contain the request or response line.
+ */
+ idx = fetch_token(ndo, pptr, 0, len, token, sizeof(token));
+ if (idx != 0) {
+ /* Is this a valid request name? */
+ while ((cmd = *cmds++) != NULL) {
+ if (ascii_strcasecmp((const char *)token, cmd) == 0) {
+ /* Yes. */
+ print_this = 1;
+ break;
+ }
+ }
+
+ /*
+ * No - is this a valid response code (3 digits)?
+ *
+ * Is this token the response code, or is the next
+ * token the response code?
+ */
+ if (flags & RESP_CODE_SECOND_TOKEN) {
+ /*
+ * Next token - get it.
+ */
+ idx = fetch_token(ndo, pptr, idx, len, token,
+ sizeof(token));
+ }
+ if (idx != 0) {
+ if (ND_ASCII_ISDIGIT(token[0]) && ND_ASCII_ISDIGIT(token[1]) &&
+ ND_ASCII_ISDIGIT(token[2]) && token[3] == '\0') {
+ /* Yes. */
+ print_this = 1;
+ }
+ }
+ }
+ } else {
+ /*
+ * Either:
+ *
+ * 1) This protocol has only request and response lines
+ * (e.g., FTP, where all the data goes over a different
+ * connection); assume the payload is a request or
+ * response.
+ *
+ * or
+ *
+ * 2) This protocol is just text, so that we should
+ * always, at minimum, print the first line and,
+ * in verbose mode, print all lines.
+ */
+ print_this = 1;
+ }
+
+ nd_print_protocol_caps(ndo);
+
+ if (print_this) {
+ /*
+ * In non-verbose mode, just print the protocol, followed
+ * by the first line.
+ *
+ * In verbose mode, print lines as text until we run out
+ * of characters or see something that's not a
+ * printable-ASCII line.
+ */
+ if (ndo->ndo_vflag) {
+ /*
+ * We're going to print all the text lines in the
+ * request or response; just print the length
+ * on the first line of the output.
+ */
+ ND_PRINT(", length: %u", len);
+ for (idx = 0;
+ idx < len && (eol = print_txt_line(ndo, "\n\t", pptr, idx, len)) != 0;
+ idx = eol)
+ ;
+ } else {
+ /*
+ * Just print the first text line.
+ */
+ print_txt_line(ndo, ": ", pptr, 0, len);
+ }
+ }
+}
+
+#if (defined(__i386__) || defined(_M_IX86) || defined(__X86__) || defined(__x86_64__) || defined(_M_X64)) || \
+ (defined(__arm__) || defined(_M_ARM) || defined(__aarch64__)) || \
+ (defined(__m68k__) && (!defined(__mc68000__) && !defined(__mc68010__))) || \
+ (defined(__ppc__) || defined(__ppc64__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PPC64)) || \
+ (defined(__s390__) || defined(__s390x__) || defined(__zarch__)) || \
+ defined(__vax__)
+/*
+ * The processor natively handles unaligned loads, so just use memcpy()
+ * and memcmp(), to enable those optimizations.
+ *
+ * XXX - are those all the x86 tests we need?
+ * XXX - do we need to worry about ARMv1 through ARMv5, which didn't
+ * support unaligned loads, and, if so, do we need to worry about all
+ * of them, or just some of them, e.g. ARMv5?
+ * XXX - are those the only 68k tests we need not to generated
+ * unaligned accesses if the target is the 68000 or 68010?
+ * XXX - are there any tests we don't need, because some definitions are for
+ * compilers that also predefine the GCC symbols?
+ * XXX - do we need to test for both 32-bit and 64-bit versions of those
+ * architectures in all cases?
+ */
+#else
+/*
+ * The processor doesn't natively handle unaligned loads,
+ * and the compiler might "helpfully" optimize memcpy()
+ * and memcmp(), when handed pointers that would normally
+ * be properly aligned, into sequences that assume proper
+ * alignment.
+ *
+ * Do copies and compares of possibly-unaligned data by
+ * calling routines that wrap memcpy() and memcmp(), to
+ * prevent that optimization.
+ */
+void
+unaligned_memcpy(void *p, const void *q, size_t l)
+{
+ memcpy(p, q, l);
+}
+
+/* As with memcpy(), so with memcmp(). */
+int
+unaligned_memcmp(const void *p, const void *q, size_t l)
+{
+ return (memcmp(p, q, l));
+}
+#endif
+
diff --git a/varattrs.h b/varattrs.h
new file mode 100644
index 0000000..b3c1689
--- /dev/null
+++ b/varattrs.h
@@ -0,0 +1,59 @@
+/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */
+/*
+ * Copyright (c) 1993, 1994, 1995, 1996, 1997
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the Computer Systems
+ * Engineering Group at Lawrence Berkeley Laboratory.
+ * 4. Neither the name of the University nor of the Laboratory may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef varattrs_h
+#define varattrs_h
+
+#include "compiler-tests.h"
+
+/*
+ * Attributes to apply to variables, using various compiler-specific
+ * extensions.
+ */
+
+#if __has_attribute(unused) \
+ || ND_IS_AT_LEAST_GNUC_VERSION(2,0)
+ /*
+ * Compiler with support for __attribute__((unused)), or GCC 2.0 and
+ * later, so it supports __attribute__((unused)).
+ */
+ #define _U_ __attribute__((unused))
+#else
+ /*
+ * We don't know of any way to mark a variable as unused.
+ */
+ #define _U_
+#endif
+
+#endif